http://linux.bkbits.net/linux-2.5 torvalds@ppc970.osdl.org|ChangeSet|20040519053933|56932 torvalds # This is a BitKeeper generated diff -Nru style patch. # # drivers/pci/hotplug/rpaphp_vio.c # 2021/04/28 09:30:09-07:00 lxiep@us.ibm.com +1 -0 # PCI Hotplug: rpaphp doesn't initialize slot's name # # drivers/pci/hotplug/rpaphp_slot.c # 2021/04/28 09:30:09-07:00 lxiep@us.ibm.com +6 -11 # PCI Hotplug: rpaphp doesn't initialize slot's name # # drivers/pci/hotplug/rpaphp_pci.c # 2021/04/28 09:30:09-07:00 lxiep@us.ibm.com +2 -1 # PCI Hotplug: rpaphp doesn't initialize slot's name # # fs/sysfs/dir.c # 2004/10/06 22:17:22-07:00 maneesh@in.ibm.com +14 -5 # sysfs_rename_dir-cleanup # # net/core/dev.c # 2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0 # Auto merged # # net/core/dev.c # 2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +10 -6 # sysfs_rename_dir-cleanup # # lib/kobject.c # 2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +7 -3 # sysfs_rename_dir-cleanup # # include/linux/sysfs.h # 2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +1 -1 # sysfs_rename_dir-cleanup # # include/linux/kobject.h # 2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +1 -1 # sysfs_rename_dir-cleanup # # drivers/base/class.c # 2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +4 -2 # sysfs_rename_dir-cleanup # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/25 07:39:40-07:00 eike-hotplug@sf-tec.de +11 -13 # Compaq PCI Hotplug: some final fixes for cpqphp_core.c # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/25 07:39:40-07:00 eike-hotplug@sf-tec.de +3 -13 # Compaq PCI Hotplug: remove useless NULL checks from cpqphp_core.c # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/25 07:39:41-07:00 eike-hotplug@sf-tec.de +31 -26 # Compaq PCI Hotplug: use goto for error handling # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +150 -126 # Compaq PCI Hotplug: more coding style fixes # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +4 -3 # Compaq PCI Hotplug: use new style of module parameters # # drivers/pci/hotplug/cpqphp_core.c # 2004/04/24 19:02:14-07:00 eike-hotplug@sf-tec.de +33 -97 # Compaq PCI Hotplug: remove useless NULL checks # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +2 -2 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/28 14:53:59-07:00 eike-hotplug@sf-tec.de +1 -20 # Compaq PCI Hotplug: remove useless NULL checks from cpqphp_ctrl.c # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/28 14:53:59-07:00 eike-hotplug@sf-tec.de +18 -22 # Compaq PCI Hotplug: kill useless kmalloc casts # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/25 10:47:46-07:00 eike-hotplug@sf-tec.de +1 -1 # Compaq PCI Hotplug: fix missing braces # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/25 10:47:46-07:00 eike-hotplug@sf-tec.de +14 -15 # Compaq PCI Hotplug: coding style fixes for cpqphp_ctrl.c # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/25 10:47:46-07:00 eike-hotplug@sf-tec.de +29 -41 # Compaq PCI Hotplug: use goto for error handling in cpqphp_ctrl.c # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/27 16:18:21-07:00 eike-hotplug@sf-tec.de +349 -391 # Compaq PCI Hotplug: fix C++ style comments # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/25 07:27:27-07:00 eike-hotplug@sf-tec.de +38 -99 # Compaq PCI Hotplug: split up hardware_test # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/23 14:20:26-07:00 eike-hotplug@sf-tec.de +132 -0 # Compaq PCI Hotplug: move huge inline function out of header file # # drivers/pci/hotplug/cpqphp.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/24 19:02:14-07:00 eike-hotplug@sf-tec.de +1 -6 # Compaq PCI Hotplug: remove useless NULL checks # # drivers/pci/hotplug/cpqphp_ctrl.c # 2004/04/24 12:46:59-07:00 eike-hotplug@sf-tec.de +203 -180 # Compaq PCI Hotplug: coding style fixes # # drivers/pci/hotplug/cpqphp.h # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +1 -5 # Compaq PCI Hotplug: use new style of module parameters # # drivers/pci/hotplug/cpqphp.h # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +0 -133 # Compaq PCI Hotplug: move huge inline function out of header file # # drivers/pci/hotplug/cpqphp.h # 2004/04/24 19:02:14-07:00 eike-hotplug@sf-tec.de +0 -48 # Compaq PCI Hotplug: remove useless NULL checks # # drivers/pci/hotplug/cpqphp_pci.c # 2004/04/30 07:24:17-07:00 greg@kroah.com +1 -1 # PCI Hotplug: fix stupid build bugs caused by previous patches. # # Doesn't anyone build their patches anymore before sending them out... # # drivers/pci/hotplug/cpqphp.h # 2004/04/24 14:27:44-07:00 eike-hotplug@sf-tec.de +25 -29 # Compaq PCI Hotplug: coding style fixes # # drivers/pci/hotplug/cpqphp_pci.c # 2004/04/27 16:26:12-07:00 eike-hotplug@sf-tec.de +20 -14 # PCI Hotplug: Remove type magic from kmalloc # # drivers/pci/hotplug/cpqphp_pci.c # 2004/04/24 12:40:14-07:00 eike-hotplug@sf-tec.de +25 -21 # Compaq PCI Hotplug: coding style fixes # # ChangeSet # 2004/05/18 22:07:43-07:00 paulus@samba.org # [PATCH] Fix incorrect PT_FPSCR definition # # Bryan Rosenburg pointed out that the definition of PT_FPSCR in # include/asm-ppc64/ptrace.h is wrong. The patch below fixes it. # # include/asm-ppc64/ptrace.h # 2004/04/02 05:12:02-08:00 paulus@samba.org +1 -1 # Fix incorrect PT_FPSCR definition # # ChangeSet # 2004/05/18 22:07:16-07:00 akpm@osdl.org # [PATCH] i2o: reorder of fields in i2o_cmd_passthru structure # # From: Markus Lidel # # I have made a mistake in the kernel header i2o-dev.h. All structures there # begin with the "iop" first, but in my structure the order is reversed. # # include/linux/i2o-dev.h # 2004/05/18 08:29:49-07:00 akpm@osdl.org +1 -2 # i2o: reorder of fields in i2o_cmd_passthru structure # # ChangeSet # 2004/05/18 22:07:06-07:00 akpm@osdl.org # [PATCH] md: Fix user-after-free bug in multipath # # From: NeilBrown # # If mddev->thread is non-null later, it gets used. # # drivers/md/multipath.c # 2004/05/18 08:15:24-07:00 akpm@osdl.org +1 -0 # md: Fix user-after-free bug in multipath # # ChangeSet # 2004/05/18 22:02:57-07:00 akpm@osdl.org # [PATCH] ppc64: add device tree pointer for vio devices # # From: Anton Blanchard # # From: Olaf Hering # # Provide pointer into the device-tree for vio devices. # # arch/ppc64/kernel/vio.c # 2004/05/18 07:48:12-07:00 akpm@osdl.org +12 -0 # ppc64: add device tree pointer for vio devices # # ChangeSet # 2004/05/18 22:02:46-07:00 akpm@osdl.org # [PATCH] ppc64: more required exports # # From: Anton Blanchard # # IBM veth uses these symbols. # # arch/ppc64/kernel/HvLpEvent.c # 2004/05/18 07:48:12-07:00 akpm@osdl.org +3 -0 # ppc64: more required exports # # ChangeSet # 2004/05/18 22:02:36-07:00 akpm@osdl.org # [PATCH] ppc64: correct return code in iommu_alloc_consistent # # From: Anton Blanchard # # From: Olof Johansson # # iommu_alloc_consistent should return NULL on failure. # # arch/ppc64/kernel/iommu.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +1 -1 # ppc64: correct return code in iommu_alloc_consistent # # ChangeSet # 2004/05/18 22:02:25-07:00 akpm@osdl.org # [PATCH] ppc64: Make PMC6 spin # # From: Anton Blanchard # # Make PMC6 spin on POWER5 boxes. # # arch/ppc64/kernel/sysfs.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +11 -0 # ppc64: Make PMC6 spin # # ChangeSet # 2004/05/18 22:02:14-07:00 akpm@osdl.org # [PATCH] ppc64: oprofile fixes # # From: Anton Blanchard # # - support newer 970 and POWER5 chips. # # - use new SIHV/SIPR bits on POWER5. # # - fix oops at shutdown. # # include/asm-ppc64/processor.h # 2004/05/18 07:48:11-07:00 akpm@osdl.org +2 -0 # ppc64: oprofile fixes # # arch/ppc64/oprofile/op_model_power4.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +17 -4 # ppc64: oprofile fixes # # arch/ppc64/oprofile/common.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +2 -0 # ppc64: oprofile fixes # # ChangeSet # 2004/05/18 22:02:03-07:00 akpm@osdl.org # [PATCH] ppc64: 4GB firmware flash fix # # From: Anton Blanchard # # From: Jake Moilanen # # We want to make sure flash list is above 4 gigs, not 4 megs. # # arch/ppc64/kernel/rtas.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +1 -1 # ppc64: 4GB firmware flash fix # # ChangeSet # 2004/05/18 22:01:52-07:00 akpm@osdl.org # [PATCH] ppc64: fix rtas flash driver # # From: Anton Blanchard # # From: John Rose # # Please apply the following, which fixes a typo that prevents the creation of # the manage_flash /proc file. # # arch/ppc64/kernel/rtas_flash.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +1 -1 # ppc64: fix rtas flash driver # # ChangeSet # 2004/05/18 22:01:41-07:00 akpm@osdl.org # [PATCH] ppc64: fix error return in mf_proc # # From: Anton Blanchard # # This patch was submitted by Olaf Hering to fix mf_proc.c where it does not # return error values correctly. # # arch/ppc64/kernel/mf_proc.c # 2004/05/18 07:48:11-07:00 akpm@osdl.org +5 -1 # ppc64: fix error return in mf_proc # # ChangeSet # 2004/05/18 22:01:30-07:00 akpm@osdl.org # [PATCH] ppc64: add stack overflow detection # # From: Anton Blanchard # # I only got iseries first time around. Add CONFIG_DEBUG_STACKOVERFLOW for # pseries/pmac too. # # arch/ppc64/kernel/irq.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +15 -0 # ppc64: add stack overflow detection # # ChangeSet # 2004/05/18 22:01:15-07:00 akpm@osdl.org # [PATCH] ppc64: fix rtas error log location # # From: Anton Blanchard # # From: Nathan Lynch # # Somehow we've been placing the rtas error_log file at /proc/ppc64/error_log, # which breaks at least one application I know of. It is supposed to be at # /proc/ppc64/rtas/error_log (this is the 2.4 behavior). # # arch/ppc64/kernel/rtasd.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +1 -1 # ppc64: fix rtas error log location # # ChangeSet # 2004/05/18 22:01:02-07:00 akpm@osdl.org # [PATCH] ppc64: fix rtas error log length # # From: Anton Blanchard # # From: Jake Moilanen # # Fix for not vmalloc'n space for the sequence number in rtas_log_buf. # # arch/ppc64/kernel/rtasd.c # 2004/05/18 07:48:49-07:00 akpm@osdl.org +1 -1 # ppc64: fix rtas error log length # # ChangeSet # 2004/05/18 22:00:49-07:00 akpm@osdl.org # [PATCH] ppc32: PPC4xx fixes # # From: Matt Porter # # Fixes 440GX UIC code, updates 440GX PVRs, and fixes a typo. # # include/asm-ppc/reg.h # 2004/05/18 07:48:10-07:00 akpm@osdl.org +1 -1 # ppc32: PPC4xx fixes # # arch/ppc/syslib/ppc4xx_pic.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +5 -2 # ppc32: PPC4xx fixes # # arch/ppc/platforms/4xx/ibm440gp.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +1 -1 # ppc32: PPC4xx fixes # # arch/ppc/kernel/cputable.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +2 -2 # ppc32: PPC4xx fixes # # ChangeSet # 2004/05/18 22:00:40-07:00 akpm@osdl.org # [PATCH] ppc32: Fix ocp_register_driver() return value # # From: Matt Porter # # Fixes return value from ocp_register_driver(). # # arch/ppc/syslib/ocp.c # 2004/05/18 07:48:10-07:00 akpm@osdl.org +1 -7 # ppc32: Fix ocp_register_driver() return value # # ChangeSet # 2004/05/18 22:00:29-07:00 akpm@osdl.org # [PATCH] ppc32: some fixes for 'make O=...' # # From: Tom Rini # # From: Geoffrey LEVAND # # Fix some of the problems with 'make O=...' # # Ack'd by Sam Ravnborg. # # arch/ppc/boot/simple/Makefile # 2004/05/18 07:48:09-07:00 akpm@osdl.org +7 -7 # ppc32: some fixes for 'make O=...' # # ChangeSet # 2004/05/18 22:00:19-07:00 akpm@osdl.org # [PATCH] ppc32: remove 'mem_pieces_append' # # From: Tom Rini # # From: Fabian.Frederick # # Remove mem_pieces_append, it is never used. # # arch/ppc/mm/mem_pieces.h # 2004/05/18 07:48:09-07:00 akpm@osdl.org +0 -2 # ppc32: remove 'mem_pieces_append' # # arch/ppc/mm/mem_pieces.c # 2004/05/18 07:48:09-07:00 akpm@osdl.org +0 -17 # ppc32: remove 'mem_pieces_append' # # ChangeSet # 2004/05/18 22:00:08-07:00 akpm@osdl.org # [PATCH] ppc32: update Motorola LoPEC and Sandpoint defconfigs # # From: Tom Rini # # Update the Motorola LoPEC and Sandpoint config files. # # arch/ppc/configs/sandpoint_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +241 -312 # ppc32: update Motorola LoPEC and Sandpoint defconfigs # # arch/ppc/configs/lopec_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +281 -286 # ppc32: update Motorola LoPEC and Sandpoint defconfigs # # ChangeSet # 2004/05/18 21:59:56-07:00 akpm@osdl.org # [PATCH] ppc32: fix MOD_{INC,DEC}_USE_COUNT abuse in 4xx/8xx code # # From: Christoph Hellwig # # Note that most of the drivers are in a compiling shape currently, but I # want to get rid of the last callers of those. # # (acked by Tom Rini) # # arch/ppc/8xx_io/uart.c # 2004/05/18 07:48:09-07:00 akpm@osdl.org +2 -9 # ppc32: fix MOD_{INC,DEC}_USE_COUNT abuse in 4xx/8xx code # # arch/ppc/8xx_io/cs4218_tdm.c # 2004/05/18 07:48:09-07:00 akpm@osdl.org +1 -12 # ppc32: fix MOD_{INC,DEC}_USE_COUNT abuse in 4xx/8xx code # # arch/ppc/8260_io/uart.c # 2004/05/18 07:48:09-07:00 akpm@osdl.org +2 -8 # ppc32: fix MOD_{INC,DEC}_USE_COUNT abuse in 4xx/8xx code # # arch/ppc/4xx_io/serial_sicc.c # 2004/05/18 07:48:09-07:00 akpm@osdl.org +1 -9 # ppc32: fix MOD_{INC,DEC}_USE_COUNT abuse in 4xx/8xx code # # ChangeSet # 2004/05/18 21:59:45-07:00 akpm@osdl.org # [PATCH] ppc32: update defconfigs # # From: Paul Mackerras # # This patch updates several of the ppc32 defconfigs. # # arch/ppc/defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +394 -299 # ppc32: update defconfigs # # arch/ppc/configs/walnut_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +30 -46 # ppc32: update defconfigs # # arch/ppc/configs/spruce_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +41 -48 # ppc32: update defconfigs # # arch/ppc/configs/power3_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +353 -260 # ppc32: update defconfigs # # arch/ppc/configs/pmac_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +443 -356 # ppc32: update defconfigs # # arch/ppc/configs/ibmchrp_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +168 -150 # ppc32: update defconfigs # # arch/ppc/configs/ep405_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +30 -46 # ppc32: update defconfigs # # arch/ppc/configs/ebony_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +29 -45 # ppc32: update defconfigs # # arch/ppc/configs/common_defconfig # 2004/05/18 07:48:09-07:00 akpm@osdl.org +389 -298 # ppc32: update defconfigs # # ChangeSet # 2004/05/18 21:59:34-07:00 akpm@osdl.org # [PATCH] ppc32: Handle altivec assist exception properly # # From: Paul Mackerras # # On machines with Altivec (i.e. G4 and G5 processors), the altivec # floating-point instructions can operate in two modes: one where # denormalized inputs or outputs are truncated to zero, and one where they # aren't. In the latter mode the processor can take an exception when it # encounters denormalized floating-point inputs or outputs rather than # dealing with them in hardware. # # This patch adds code to deal properly with the exception, by emulating the # instruction that caused the exception. Previously the kernel just switched # the altivec unit into the truncate-to-zero mode, which works but is a bit # gross. Fortunately there are only a limited set of altivec instructions # which can generate the assist exception, so we don't have to emulate the # whole altivec instruction set. # # This patch also makes sure that we always have a handler for the altivec # unavailable exception. Without this, if you run a kernel that is not # configured for altivec support on a machine with altivec, it works fine # until a user process tries to execute an altivec instruction. At that # point the kernel thinks it has taken an unknown exception and panics. With # this patch it sends a SIGILL to the process instead. # # arch/ppc/kernel/vector.S # 2004/05/18 07:48:08-07:00 akpm@osdl.org +217 -0 # ppc32: Handle altivec assist exception properly # # arch/ppc/kernel/vecemu.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +346 -0 # ppc32: Handle altivec assist exception properly # # arch/ppc/kernel/vector.S # 2004/05/18 07:48:08-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/kernel/vector.S # # arch/ppc/kernel/vecemu.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/kernel/vecemu.c # # arch/ppc/kernel/traps.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +39 -2 # ppc32: Handle altivec assist exception properly # # arch/ppc/kernel/head.S # 2004/05/18 07:48:08-07:00 akpm@osdl.org +8 -5 # ppc32: Handle altivec assist exception properly # # arch/ppc/kernel/Makefile # 2004/05/18 07:48:08-07:00 akpm@osdl.org +1 -0 # ppc32: Handle altivec assist exception properly # # ChangeSet # 2004/05/18 21:59:23-07:00 akpm@osdl.org # [PATCH] ppc32: some whitespace fixes # # From: Paul Mackerras # # This patch does nothing but fix up whitespace in three files in arch/ppc. # It deletes trailing blanks and tabs in several places and joins two lines # that didn't need to be split. # # arch/ppc/syslib/prom_init.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +1 -2 # ppc32: some whitespace fixes # # arch/ppc/platforms/pmac_setup.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +8 -8 # ppc32: some whitespace fixes # # arch/ppc/platforms/pmac_pic.c # 2004/05/18 07:48:08-07:00 akpm@osdl.org +3 -3 # ppc32: some whitespace fixes # # ChangeSet # 2004/05/18 21:59:11-07:00 akpm@osdl.org # [PATCH] ppc32: IBM PowerPC 750GX Support # # From: Benjamin Herrenschmidt # # From: Bryan Rittmeyer # # This patch adds preliminary support for the IBM PowerPC 750GX. In summary # this part is a PPC750FX ramped to 1 GHz with a 1MB 4-way L2 and more # advanced I/O pipelining. It is beginning to appear in embedded systems and # was rumored to be under evaluation inside Apple. Tested on PVR 70020101; # please merge. # # http://www-3.ibm.com/chips/techlib/techlib.nsf/products/PowerPC_750GX_Microprocessor # # arch/ppc/kernel/cputable.c # 2004/05/18 07:48:49-07:00 akpm@osdl.org +9 -1 # ppc32: IBM PowerPC 750GX Support # # ChangeSet # 2004/05/18 16:56:06-07:00 greg@kroah.com # Some more misc wait_ms() conversions to use msleep() # # sound/pci/au88x0/au88x0_game.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +2 -1 # Some more misc wait_ms() conversions to use msleep() # # sound/oss/trident.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +1 -1 # Some more misc wait_ms() conversions to use msleep() # # sound/oss/dmasound/dmasound_awacs.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +15 -15 # Some more misc wait_ms() conversions to use msleep() # # sound/oss/dmasound/dmasound.h # 2004/05/18 09:55:43-07:00 greg@kroah.com +0 -6 # Some more misc wait_ms() conversions to use msleep() # # sound/oss/dmasound/dac3550a.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +3 -2 # Some more misc wait_ms() conversions to use msleep() # # drivers/video/aty/radeon_i2c.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +8 -8 # Some more misc wait_ms() conversions to use msleep() # # drivers/video/aty/radeonfb.h # 2004/05/18 09:55:43-07:00 greg@kroah.com +0 -9 # Some more misc wait_ms() conversions to use msleep() # # drivers/video/aty/radeon_base.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +1 -1 # Some more misc wait_ms() conversions to use msleep() # # drivers/net/irda/stir4200.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +3 -2 # Some more misc wait_ms() conversions to use msleep() # # drivers/macintosh/therm_pm72.c # 2004/05/18 09:55:43-07:00 greg@kroah.com +5 -12 # Some more misc wait_ms() conversions to use msleep() # # ChangeSet # 2004/05/18 16:51:33-07:00 greg@kroah.com # Input: remove wait_ms() in place of using msleep() # # include/linux/gameport.h # 2004/05/18 09:51:09-07:00 greg@kroah.com +0 -6 # Input: remove wait_ms() in place of using msleep() # # drivers/input/joystick/gf2k.c # 2004/05/18 09:51:09-07:00 greg@kroah.com +2 -2 # Input: remove wait_ms() in place of using msleep() # # drivers/input/joystick/analog.c # 2004/05/18 09:51:09-07:00 greg@kroah.com +3 -3 # Input: remove wait_ms() in place of using msleep() # # drivers/input/joystick/adi.c # 2004/05/18 09:51:09-07:00 greg@kroah.com +3 -3 # Input: remove wait_ms() in place of using msleep() # # drivers/input/gameport/vortex.c # 2004/05/18 09:51:09-07:00 greg@kroah.com +2 -1 # Input: remove wait_ms() in place of using msleep() # # drivers/input/gameport/ns558.c # 2004/05/18 09:51:09-07:00 greg@kroah.com +3 -2 # Input: remove wait_ms() in place of using msleep() # # ChangeSet # 2004/05/18 16:00:39-07:00 greg@kroah.com # I2C: change i2c_delay() to use msleep() instead. # # include/linux/i2c.h # 2004/05/18 09:00:17-07:00 greg@kroah.com +0 -7 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/chips/w83l785ts.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-viapro.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-sis96x.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-sis630.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-sis5595.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-piix4.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +2 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-i801.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +4 -3 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-amd8111.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +1 -1 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-amd756.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +4 -3 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-ali15x3.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +3 -2 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-ali1563.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +3 -2 # I2C: change i2c_delay() to use msleep() instead. # # drivers/i2c/busses/i2c-ali1535.c # 2004/05/18 09:00:17-07:00 greg@kroah.com +3 -2 # I2C: change i2c_delay() to use msleep() instead. # # ChangeSet # 2004/05/18 16:00:04-07:00 greg@kroah.com # USB: remove wait_ms() from usb.h as it's no longer needed. # # include/linux/usb.h # 2004/05/18 08:59:47-07:00 greg@kroah.com +0 -11 # USB: remove wait_ms() from usb.h as it's no longer needed. # # ChangeSet # 2004/05/18 15:58:57-07:00 greg@kroah.com # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ohci.h # 2004/05/18 08:58:35-07:00 greg@kroah.com +0 -6 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ohci-pci.c # 2004/05/18 08:58:35-07:00 greg@kroah.com +3 -3 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ohci-hub.c # 2004/05/18 08:58:35-07:00 greg@kroah.com +2 -2 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ohci-hcd.c # 2004/05/18 08:58:35-07:00 greg@kroah.com +2 -2 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ehci.h # 2004/05/18 08:58:35-07:00 greg@kroah.com +0 -6 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # drivers/usb/host/ehci-hcd.c # 2004/05/18 08:58:35-07:00 greg@kroah.com +2 -2 # USB: remove ehci and ohci's private sleep function and use msleep() instead. # # ChangeSet # 2004/05/18 15:57:20-07:00 greg@kroah.com # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/storage/shuttle_usbat.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +7 -7 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/storage/jumpshot.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/storage/isd200.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +2 -2 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/storage/datafab.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/serial/io_ti.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +2 -2 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/net/usbnet.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/misc/usbtest.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/input/aiptek.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/host/ehci-hub.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # drivers/usb/host/ehci-hcd.c # 2004/05/18 08:56:54-07:00 greg@kroah.com +1 -1 # USB: clean up usages of wait_ms() now that we have msleep() # # ChangeSet # 2004/05/18 15:56:35-07:00 greg@kroah.com # USB: remove usb_uninterruptible_sleep_ms() now that we have msleep() # # include/linux/usb.h # 2004/05/18 08:56:15-07:00 greg@kroah.com +0 -2 # USB: remove usb_uninterruptible_sleep_ms() now that we have msleep() # # drivers/usb/core/usb.c # 2004/05/18 08:56:15-07:00 greg@kroah.com +0 -11 # USB: remove usb_uninterruptible_sleep_ms() now that we have msleep() # # drivers/usb/core/hub.c # 2004/05/18 08:56:15-07:00 greg@kroah.com +7 -7 # USB: remove usb_uninterruptible_sleep_ms() now that we have msleep() # # ChangeSet # 2004/05/18 15:55:19-07:00 greg@kroah.com # Remove libata's version of msleep() # # drivers/scsi/libata-core.c # 2004/05/18 08:54:57-07:00 greg@kroah.com +0 -17 # Remove libata's version of msleep() # # ChangeSet # 2004/05/18 15:51:44-07:00 greg@kroah.com # Delete block/carmel.c's version of msleep() # # drivers/block/carmel.c # 2004/05/18 08:50:55-07:00 greg@kroah.com +0 -6 # Delete block/carmel.c's version of msleep() # # ChangeSet # 2004/05/18 15:49:36-07:00 greg@kroah.com # Add msleep function to the kernel core to prevent duplication. # # kernel/timer.c # 2004/05/18 08:48:36-07:00 greg@kroah.com +17 -0 # Add msleep function to the kernel core to prevent duplication. # # include/linux/delay.h # 2004/05/18 08:48:36-07:00 greg@kroah.com +2 -0 # Add msleep function to the kernel core to prevent duplication. # # ChangeSet # 2004/05/18 15:03:47-07:00 davem@nuts.davemloft.net # Resolve merge conflicts. # # drivers/pci/pci.ids # 2004/05/18 15:03:35-07:00 davem@nuts.davemloft.net +0 -6 # # # ChangeSet # 2004/05/18 21:39:02+01:00 rmk@flint.arm.linux.org.uk # [ARM] Initialise an uninitialised spinlock. # # arch/arm/kernel/irq.c # 2004/05/18 21:36:58+01:00 rmk@flint.arm.linux.org.uk +1 -1 # Ensure spinlocks are initialised. # # ChangeSet # 2004/05/18 12:49:51-07:00 davem@nuts.davemloft.net # Fix merge conflicts. # # include/linux/pci_ids.h # 2004/05/18 12:46:03-07:00 davem@nuts.davemloft.net +0 -0 # Auto merged # # ChangeSet # 2004/05/17 22:55:19-07:00 davem@kernel.bkbits.net # Merge davem@nuts.davemloft.net:/disk1/BK/sparc-2.6 # into kernel.bkbits.net:/home/davem/sparc-2.6 # # scripts/modpost.c # 2004/05/17 22:55:15-07:00 davem@kernel.bkbits.net +0 -1 # Auto merged # # kernel/sched.c # 2004/05/17 22:55:15-07:00 davem@kernel.bkbits.net +0 -0 # Auto merged # # ChangeSet # 2004/05/17 21:12:36-07:00 olof@austin.ibm.com # [PATCH] ppc64: fix non-SMP build break # # arch/ppc64/lib/locks.c was recently added by Paulus' lock rewrite. It's # always compiled, which breaks non-SMP builds. Below patch makes it depend # on CONFIG_SMP. # # arch/ppc64/lib/Makefile # 2004/05/17 15:41:44-07:00 olof@austin.ibm.com +6 -1 # ppc64: fix non-SMP build break # # ChangeSet # 2004/05/17 16:44:49-07:00 greg@kroah.com # merge # # drivers/pci/pci.ids # 2004/05/17 16:44:37-07:00 greg@kroah.com +2 -4 # merge # # include/linux/pci_ids.h # 2004/05/17 16:37:38-07:00 greg@kroah.com +0 -1 # Auto merged # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/05/17 16:37:38-07:00 greg@kroah.com +0 -1 # Auto merged # # arch/i386/pci/irq.c # 2004/05/17 16:37:37-07:00 greg@kroah.com +0 -0 # Auto merged # # CREDITS # 2004/05/17 16:37:37-07:00 greg@kroah.com +0 -0 # Auto merged # # drivers/usb/core/hub.c # 2004/05/17 16:15:43-07:00 oliver@neukum.org +7 -7 # USB: purge wait_ms from core # # ChangeSet # 2004/05/17 16:08:02-07:00 greg@kroah.com # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchprm_nonacpi.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -5 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchprm_legacy.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -5 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchprm_acpi.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +3 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchprm.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +75 -75 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/shpchp.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/pciehprm_nonacpi.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -5 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/pciehprm_acpi.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +2 -0 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/pciehprm.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/pciehp_ctrl.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +75 -75 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/pciehp.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/ibmphp_res.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/ibmphp.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -2 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/ibmphp_core.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +1 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpcihp_zt5550.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +1 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpci_hotplug_pci.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +2 -0 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +1 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/cpci_hotplug.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -1 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/acpiphp_res.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +5 -3 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/acpiphp_glue.c # 2004/05/17 09:06:32-07:00 greg@kroah.com +45 -46 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # drivers/pci/hotplug/acpiphp.h # 2004/05/17 09:06:32-07:00 greg@kroah.com +0 -3 # PCI Hotplug: clean up a lot of global symbols that do not need to be. # # ChangeSet # 2004/05/17 15:58:40-07:00 greg@kroah.com # USB: fix up formatting issues with aiptek driver # # include/linux/usb.h # 2004/05/17 15:58:26-07:00 oliver@neukum.org +2 -0 # USB: new delay helper safe wrt waitqueues # # drivers/usb/core/usb.c # 2004/05/17 15:58:26-07:00 oliver@neukum.org +11 -0 # USB: new delay helper safe wrt waitqueues # # drivers/usb/input/aiptek.c # 2004/05/17 08:58:04-07:00 greg@kroah.com +292 -465 # USB: fix up formatting issues with aiptek driver # # ChangeSet # 2004/05/17 15:37:07-07:00 greg@kroah.com # USB: fix dumb compile error in aiptek driver # # Doesn't anyone ever actually build the patches they send me... # # drivers/usb/input/aiptek.c # 2004/05/17 08:36:43-07:00 greg@kroah.com +1 -1 # USB: fix dumb compile error in aiptek driver # # Doesn't anyone ever actually build the patches they send me... # # ChangeSet # 2004/05/17 15:35:00-07:00 oliver@neukum.org # [PATCH] USB: purge wait_ms from core # # this makes the core use the new safe waiting helper. # # - remove wait_ms from hub driver # # ChangeSet # 2004/05/17 15:34:21-07:00 oliver@neukum.org # [PATCH] USB: new delay helper safe wrt waitqueues # # this is a new waiting helper safe even if we are left on a waitqueue. # This version addresses Alan's concerns about ifdefs. Please apply. # # - add delay helper that is safe even if we are still on another waitqueue # # ChangeSet # 2004/05/17 15:33:22-07:00 david-b@pacbell.net # [PATCH] USB: ethernet/rndis gadget address params # # This resolves a FIXME by adding module parameters that can # be used to provide stable (vs random) addresses, and gets # rid of a runtime error from obsolete module parameter usage # in the RNDIS code. # # The stable ethernet addresses are nice to hosts, which will # normally want to save them away in config databases. For # example, without stable addresses Windows XP will end up # recording quite a lot of RNDIS devices. # # drivers/usb/gadget/rndis.c # 2004/05/17 04:09:23-07:00 david-b@pacbell.net +2 -1 # USB: ethernet/rndis gadget address params # # drivers/usb/gadget/ether.c # 2004/05/17 04:20:27-07:00 david-b@pacbell.net +46 -13 # USB: ethernet/rndis gadget address params # # ChangeSet # 2004/05/17 15:32:03-07:00 david-b@pacbell.net # [PATCH] USB: RNDIS (and CDC) filter flag handling # # This should fix the problem David Meggy found, where RNDIS was setting # the OID_GEN_CURRENT_PACKET_FILTER state incorrectly. It's the same # issue Andrew Morton noticed a while back, for that matter, but with # more than just a "now compiles on 64 bit" fix. # # Basically the code needs to interpret 32 bits provided in the request # from the (Windows) host, rather than 8 bits of other memory that's got # some irrelevant value. # # The fix is just to save the 32 bits. I did the same thing with the # CDC Ethernet filter, which should eventually be used the same way: to # limit what packets get sent to the host. Also defined a couple more # of the CDC requests. # # drivers/usb/gadget/rndis.h # 2004/05/17 04:43:18-07:00 david-b@pacbell.net +1 -0 # USB: RNDIS (and CDC) filter flag handling # # drivers/usb/gadget/rndis.c # 2004/05/17 04:54:47-07:00 david-b@pacbell.net +13 -44 # USB: RNDIS (and CDC) filter flag handling # # drivers/usb/gadget/ether.c # 2004/05/17 04:57:00-07:00 david-b@pacbell.net +25 -4 # USB: RNDIS (and CDC) filter flag handling # # ChangeSet # 2004/05/17 15:31:31-07:00 bwheadley@earthlink.net # [PATCH] USB: Aiptek.c Driver patch # # drivers/usb/input/hid-core.c # 2004/05/15 12:58:34-07:00 bwheadley@earthlink.net +14 -2 # USB: Aiptek.c Driver patch # # drivers/usb/input/aiptek.c # 2004/05/15 13:01:32-07:00 bwheadley@earthlink.net +2281 -219 # USB: Aiptek.c Driver patch # # ChangeSet # 2004/05/17 22:46:10+01:00 rmk@flint.arm.linux.org.uk # [ARM] Add linux/module.h include for ioremap. # # arch/arm/mm/ioremap.c # 2004/05/17 22:43:31+01:00 rmk@flint.arm.linux.org.uk +1 -0 # Add missing include. # # ChangeSet # 2004/05/17 22:28:23+01:00 rmk@flint.arm.linux.org.uk # [ARM] Update atomic.h # # This re-jigs atomic.h by providing atomic_add_return and # atomic_sub_return as other architectures do. This allows us to # implement the atomic ops that test the new value without having # to write the underlying atomic operation in various forms. # # include/asm-arm/atomic.h # 2004/05/17 22:26:19+01:00 rmk@flint.arm.linux.org.uk +36 -49 # Convert atomic_add_negative to atomic_add_return. # Convert atomic_dec_and_test to atomic_sub_return. # Kill atomic_inc/atomic_dec - implement these in terms of # atomic_add/atomic_sub. # Implement atomic_add_negative, atomic_dec_and_test and # atomic_inc_and_test in terms of atomic_add_return/atomic_sub_return. # # ChangeSet # 2004/05/17 15:15:48-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/netdev-2.6/remove-rcpci # into redhat.com:/spare/repo/net-drivers-2.6 # # drivers/net/Makefile # 2004/05/17 15:15:45-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # drivers/net/Kconfig # 2004/05/17 15:15:45-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/17 20:02:14+01:00 icampbell@com.rmk.(none) # [ARM] Fix use of page->count # # Patch from: Ian Campbell # # This changes the atomic_t in struct page named count into a private # member _count which breaks arch/arm/mm/init.c at line 80 which reads # page->count directly in show_mem(). # # The comments in the above changeset suggest that page_count(page) is # precisely equal to the old page->count semantics, even though the # semantics of _count are different, so I think the following is correct # # arch/arm/mm/init.c # 2004/05/17 19:58:45+01:00 icampbell@com.rmk.(none) +1 -1 # Fix use of page->count # # ChangeSet # 2004/05/17 11:47:28-07:00 davem@nuts.davemloft.net # Merge # # kernel/sched.c # 2004/05/17 11:47:24-07:00 davem@nuts.davemloft.net +0 -0 # SCCS merged # # ChangeSet # 2004/05/17 11:38:40-07:00 oliver@neukum.org # [PATCH] USB: further fix to mdc800 # # I made a mistake fixing that driver. Here's the fix. Please apply soon. # # - fix race condition leading to busy waiting # # drivers/usb/image/mdc800.c # 2004/05/15 06:14:27-07:00 oliver@neukum.org +17 -16 # USB: further fix to mdc800 # # ChangeSet # 2004/05/17 11:13:32-07:00 david-b@pacbell.net # [PATCH] USB: fix MSEC_TO_JIFFIES in usb code # # Here are some MSEC_TO_JIFFIES() fixes missed by whoever did it, # plus a minor fix to grab root_hub->serialize() during OHCI # suspend. (I forgot to cut/paste those lines from resume.) # # drivers/usb/host/ohci.h # 2004/05/16 04:45:45-07:00 david-b@pacbell.net +2 -4 # USB: fix MSEC_TO_JIFFIES in usb code # # drivers/usb/host/ohci-pci.c # 2004/05/16 04:45:45-07:00 david-b@pacbell.net +2 -1 # USB: fix MSEC_TO_JIFFIES in usb code # # drivers/usb/host/ohci-hub.c # 2004/05/16 04:45:44-07:00 david-b@pacbell.net +2 -2 # USB: fix MSEC_TO_JIFFIES in usb code # # drivers/usb/host/ehci.h # 2004/05/16 04:45:45-07:00 david-b@pacbell.net +2 -4 # USB: fix MSEC_TO_JIFFIES in usb code # # drivers/usb/host/ehci-hub.c # 2004/05/16 04:45:45-07:00 david-b@pacbell.net +5 -5 # USB: fix MSEC_TO_JIFFIES in usb code # # drivers/usb/host/ehci-hcd.c # 2004/05/16 04:45:45-07:00 david-b@pacbell.net +1 -1 # USB: fix MSEC_TO_JIFFIES in usb code # # ChangeSet # 2004/05/17 11:12:22-07:00 david-b@pacbell.net # [PATCH] USB: fix CONFIG_PM build issues # # include/linux/pm.h # 2004/05/16 04:24:38-07:00 david-b@pacbell.net +1 -1 # USB: fix CONFIG_PM build issues # # ChangeSet # 2004/05/17 11:01:17-07:00 arjanv@redhat.com # [PATCH] USB: fix obsolete header usage in usb storage # # drivers/scsi/hosts.h is obsolete, is the prefered header # nowadays. (hosts.h is just a 1 line wrapper to include it for now anyway) # # drivers/usb/storage/usb.h # 2004/05/17 00:43:31-07:00 arjanv@redhat.com +1 -1 # USB: fix obsolete header usage in usb storage # # drivers/usb/storage/scsiglue.h # 2004/05/17 00:43:19-07:00 arjanv@redhat.com +1 -1 # USB: fix obsolete header usage in usb storage # # ChangeSet # 2004/05/17 11:00:46-07:00 zwane@fsmlabs.com # [PATCH] USB: fix usb-serial serial_open oops # # No usb serial devices, just compiled in and the system has a USB controller. # # Unable to handle kernel NULL pointer dereference at virtual address 0000000c # printing eip: # c046a188 # *pde = 00000000 # Oops: 0000 [#1] # PREEMPT SMP DEBUG_PAGEALLOC # Modules linked in: # CPU: 0 # EIP: 0060:[] Not tainted VLI # EFLAGS: 00010246 (2.6.6-mm3) # EIP is at serial_open+0x38/0x170 # eax: 00000000 ebx: dc883000 ecx: c0613db8 edx: 00000000 # esi: 00000001 edi: 00000000 ebp: dc84cef0 esp: dc84cedc # ds: 007b es: 007b ss: 0068 # Process serial (pid: 1073, threadinfo=dc84c000 task=ddffca50) # Stack: 00000000 de8f4f5c ffffffed 00000100 de8f4f5c dc84cf14 c035a874 090115a0 # 0bc00000 dc883000 00000000 de8f4f5c 00000001 df8a2dfc dc84cf40 c0171270 # dc84c000 00000001 00000000 de8f4f5c dbc75e94 00000000 de8f4f5c dbc75e94 # Call Trace: # [] show_stack+0x75/0x90 # [] show_registers+0x11f/0x180 # [] die+0xb6/0x170 # [] do_page_fault+0x1e0/0x525 # [] error_code+0x2d/0x40 # [] tty_open+0x274/0x3b0 # [] chrdev_open+0x160/0x340 # [] dentry_open+0x156/0x230 # [] filp_open+0x4d/0x50 # [] sys_open+0x38/0x70 # [] sysenter_past_esp+0x52/0x79 # # Code: de 63 c0 89 55 f0 c7 45 ec 00 00 00 00 85 f6 0f 85 31 01 00 00 c7 83 # 8c 09 00 00 00 00 00 00 8b 43 08 e8 3c fe ff ff 31 d2 89 c7 <8a> 50 0c 8b # 43 08 29 d0 8b 74 87 18 89 b3 8c 09 00 00 89 5e 04 # # (gdb) list *serial_open+0x38 # 0xc046a188 is in serial_open (drivers/usb/serial/usb-serial.c:465). # 460 # 461 /* get the serial object associated with this tty pointer */ # 462 serial = usb_serial_get_by_index(tty->index); # 463 # 464 /* set up our port structure making the tty driver remember our port object, and us it */ # 465 portNumber = tty->index - serial->minor; # 466 port = serial->port[portNumber]; # 467 tty->driver_data = port; # 468 # 469 port->tty = tty; # # drivers/usb/serial/usb-serial.c # 2004/05/16 17:21:45-07:00 zwane@fsmlabs.com +7 -0 # USB: fix usb-serial serial_open oops # # ChangeSet # 2004/05/17 09:46:52-07:00 greg@kroah.com # USB: fix build error in drivers/usb/serial/console.c # # Thanks to Adrian Bunk for pointing this out. # # drivers/usb/serial/console.c # 2004/05/17 02:46:08-07:00 greg@kroah.com +1 -1 # USB: fix build error in drivers/usb/serial/console.c # # Thanks to Adrian Bunk for pointing this out. # # ChangeSet # 2004/05/17 01:41:56-04:00 jgarzik@redhat.com # [libata] replace ATA_QCFLAG_ATAPI with inline helper # # Detection of an ATAPI taskfile is possible using a simple test # on existing information, so there is no need to cache this value # in a separate flag (ATA_QCFLAG_ATAPI). Instead, create and use # a new helper function is_atapi_taskfile(). # # include/linux/libata.h # 2004/05/17 01:41:51-04:00 jgarzik@redhat.com +0 -1 # [libata] replace ATA_QCFLAG_ATAPI with inline helper # # Detection of an ATAPI taskfile is possible using a simple test # on existing information, so there is no need to cache this value # in a separate flag (ATA_QCFLAG_ATAPI). Instead, create and use # a new helper function is_atapi_taskfile(). # # include/linux/ata.h # 2004/05/17 01:41:51-04:00 jgarzik@redhat.com +6 -0 # [libata] replace ATA_QCFLAG_ATAPI with inline helper # # Detection of an ATAPI taskfile is possible using a simple test # on existing information, so there is no need to cache this value # in a separate flag (ATA_QCFLAG_ATAPI). Instead, create and use # a new helper function is_atapi_taskfile(). # # drivers/scsi/libata-scsi.c # 2004/05/17 01:41:51-04:00 jgarzik@redhat.com +0 -2 # [libata] replace ATA_QCFLAG_ATAPI with inline helper # # Detection of an ATAPI taskfile is possible using a simple test # on existing information, so there is no need to cache this value # in a separate flag (ATA_QCFLAG_ATAPI). Instead, create and use # a new helper function is_atapi_taskfile(). # # drivers/scsi/libata-core.c # 2004/05/17 01:41:51-04:00 jgarzik@redhat.com +1 -1 # [libata] replace ATA_QCFLAG_ATAPI with inline helper # # Detection of an ATAPI taskfile is possible using a simple test # on existing information, so there is no need to cache this value # in a separate flag (ATA_QCFLAG_ATAPI). Instead, create and use # a new helper function is_atapi_taskfile(). # # ChangeSet # 2004/05/17 00:21:15-04:00 jgarzik@redhat.com # [libata] scsi simulator improvements: MODE SENSE, SEEK(6,10), REZERO_UNIT # # * SEEK(6), SEEK(10), and REZERO_UNIT are no-ops. Unconditionally # complete these commands with success. # * MODE SENSE caching page work: # * correct page length # * set bit, if read-ahead is disabled # * set bit, if writeback caching is enabled # (previously, this bit was never set, even if # writeback caching was enabled) # * add MODE SENSE r/w error recovery page # # include/linux/ata.h # 2004/05/17 00:21:10-04:00 jgarzik@redhat.com +1 -0 # [libata] scsi simulator improvements: MODE SENSE, SEEK(6,10), REZERO_UNIT # # * SEEK(6), SEEK(10), and REZERO_UNIT are no-ops. Unconditionally # complete these commands with success. # * MODE SENSE caching page work: # * correct page length # * set bit, if read-ahead is disabled # * set bit, if writeback caching is enabled # (previously, this bit was never set, even if # writeback caching was enabled) # * add MODE SENSE r/w error recovery page # # drivers/scsi/libata-scsi.c # 2004/05/17 00:21:09-04:00 jgarzik@redhat.com +45 -3 # [libata] scsi simulator improvements: MODE SENSE, SEEK(6,10), REZERO_UNIT # # * SEEK(6), SEEK(10), and REZERO_UNIT are no-ops. Unconditionally # complete these commands with success. # * MODE SENSE caching page work: # * correct page length # * set bit, if read-ahead is disabled # * set bit, if writeback caching is enabled # (previously, this bit was never set, even if # writeback caching was enabled) # * add MODE SENSE r/w error recovery page # # ChangeSet # 2004/05/16 22:19:19-04:00 jgarzik@redhat.com # [libata] comments and constants # # * note a nasty problem with shared interrupts that must be fixed # before we turn on certain code paths. # * add a few comments to the READ CAPACITY scsi simulator # * remove a FIXME comment from the TEST UNIT READY scsi simulator # * add constant for ATA command CHECK POWER MODE, and associated # "mandatory" power management feature set bit. # # include/linux/ata.h # 2004/05/16 22:19:14-04:00 jgarzik@redhat.com +2 -0 # [libata] comments and constants # # * note a nasty problem with shared interrupts that must be fixed # before we turn on certain code paths. # * add a few comments to the READ CAPACITY scsi simulator # * remove a FIXME comment from the TEST UNIT READY scsi simulator # * add constant for ATA command CHECK POWER MODE, and associated # "mandatory" power management feature set bit. # # drivers/scsi/libata-scsi.c # 2004/05/16 22:19:13-04:00 jgarzik@redhat.com +6 -2 # [libata] comments and constants # # * note a nasty problem with shared interrupts that must be fixed # before we turn on certain code paths. # * add a few comments to the READ CAPACITY scsi simulator # * remove a FIXME comment from the TEST UNIT READY scsi simulator # * add constant for ATA command CHECK POWER MODE, and associated # "mandatory" power management feature set bit. # # drivers/scsi/libata-core.c # 2004/05/16 22:19:13-04:00 jgarzik@redhat.com +11 -1 # [libata] comments and constants # # * note a nasty problem with shared interrupts that must be fixed # before we turn on certain code paths. # * add a few comments to the READ CAPACITY scsi simulator # * remove a FIXME comment from the TEST UNIT READY scsi simulator # * add constant for ATA command CHECK POWER MODE, and associated # "mandatory" power management feature set bit. # # ChangeSet # 2004/05/16 21:33:18-04:00 jgarzik@redhat.com # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # include/linux/libata.h # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +2 -6 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # include/linux/ata.h # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +2 -0 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # drivers/scsi/sata_sil.c # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +8 -2 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # drivers/scsi/libata.h # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +0 -2 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # drivers/scsi/libata-scsi.c # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +12 -4 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # drivers/scsi/libata-core.c # 2004/05/16 21:33:12-04:00 jgarzik@redhat.com +2 -26 # [libata] SCSI->ATA simulator hacking: INQUIRY command # # The SCSI T10 committee is working on a document describing a standard # method for translating ATA<->SCSI, since it being done quite often # these days. Some of the recommendations are reasonable, and we implement # two here: # # * Mirror that ATA 'removeable media' bit into INQUIRY output. # * Change behavior of INQUIRY output field 'product revision' from # the libata software version number to the first 4 bytes of the # ATA device's firmware revision number. # # Rather than cache the firmware revision in struct ata_device, as was/is # done with two other strings, I took the opportunity to eliminate the # caching of the two other strings, 'vendor' and 'product'. These strings # are now retrieved as needed from the IDENTIFY [PACKET] DEVICE info page, # since we cache its entire contents. # # Retrieving a string from the identify-device page is done via the # helper function ata_dev_id_string(), which is now exported. # # This patch winds up making struct ata_device 40 bytes smaller, and # the libata core gets a bit smaller as well. # # ChangeSet # 2004/05/16 18:48:08-04:00 jgarzik@redhat.com # [libata] remove redundant use of ATA_QCFLAG_SG in ATAPI packet translation # # ata_scsi_translate() sets this flag for all ATA->SCSI translated # commands, so it need not be done in atapi_xlat(). The now-removed # use in atapi_xlat() was also inconsistent WRT PIO versus DMA. # # drivers/scsi/libata-scsi.c # 2004/05/16 18:48:03-04:00 jgarzik@redhat.com +0 -1 # [libata] remove redundant use of ATA_QCFLAG_SG in ATAPI packet translation # # ata_scsi_translate() sets this flag for all ATA->SCSI translated # commands, so it need not be done in atapi_xlat(). The now-removed # use in atapi_xlat() was also inconsistent WRT PIO versus DMA. # # ChangeSet # 2004/05/16 18:35:15-04:00 jgarzik@redhat.com # [libata] DMADIR support # # DMADIR bit is necessary for some PATA->SATA bridges. These # bridges require the OS driver to specify the data xfer direction, # for PACKET (a.k.a. scsi) commands. # # A reliable DMADIR detection method hasn't yet been developed, # and ATAPI is still a WIP, so DMADIR is enabled with an ifdef for # now. # # include/linux/libata.h # 2004/05/16 18:35:09-04:00 jgarzik@redhat.com +1 -0 # [libata] DMADIR support # # DMADIR bit is necessary for some PATA->SATA bridges. These # bridges require the OS driver to specify the data xfer direction, # for PACKET (a.k.a. scsi) commands. # # A reliable DMADIR detection method hasn't yet been developed, # and ATAPI is still a WIP, so DMADIR is enabled with an ifdef for # now. # # include/linux/ata.h # 2004/05/16 18:35:09-04:00 jgarzik@redhat.com +2 -0 # [libata] DMADIR support # # DMADIR bit is necessary for some PATA->SATA bridges. These # bridges require the OS driver to specify the data xfer direction, # for PACKET (a.k.a. scsi) commands. # # A reliable DMADIR detection method hasn't yet been developed, # and ATAPI is still a WIP, so DMADIR is enabled with an ifdef for # now. # # drivers/scsi/libata-scsi.c # 2004/05/16 18:35:09-04:00 jgarzik@redhat.com +6 -0 # [libata] DMADIR support # # DMADIR bit is necessary for some PATA->SATA bridges. These # bridges require the OS driver to specify the data xfer direction, # for PACKET (a.k.a. scsi) commands. # # A reliable DMADIR detection method hasn't yet been developed, # and ATAPI is still a WIP, so DMADIR is enabled with an ifdef for # now. # # ChangeSet # 2004/05/16 08:55:56-07:00 akpm@osdl.org # [PATCH] Fixed quota recursion fix # # This fixes the gfp_mask setting on the quota inode. # # fs/dquot.c # 2004/05/16 00:02:53-07:00 akpm@osdl.org +10 -1 # Fixed quota recursion fix # # ChangeSet # 2004/05/16 09:52:33-04:00 corbet@lwn.net # Remove drivers/net/auto_irq.c. # # No more users of the autoirq_xxx() API existed, so this file is not # only unused, it isn't even listed in any makefiles. # # BitKeeper/deleted/.del-auto_irq.c~1d78b6cdf22e5be0 # 2004/05/16 09:50:35-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/auto_irq.c # # ChangeSet # 2004/05/16 14:37:30+01:00 rmk@flint.arm.linux.org.uk # [ARM] Convert execve() to be a function rather than a SWI call. # # This eliminates the last SWI user from the kernel - now all SWI calls # will only come from userspace. More importantly, this also allows us # to empty the kernel stack when starting userspace programs from # kernelspace, thereby ensuring that the user registers always appear # at the top of the kernel stack. # # include/asm-arm/unistd.h # 2004/05/16 14:35:29+01:00 rmk@flint.arm.linux.org.uk +2 -6 # execve() no longer uses a SWI call, and is a kernel function. # # arch/arm/kernel/sys_arm.c # 2004/05/16 14:35:29+01:00 rmk@flint.arm.linux.org.uk +41 -0 # Implement execve() for kernel space without using a SWI call. # # ChangeSet # 2004/05/16 14:12:49+01:00 rmk@flint.arm.linux.org.uk # [ARM] Move a bunch of symbol exports from armksyms.c # # This moves a bunch of EXPORT_SYMBOL() statements from armksyms.c # into the file which defines the function/variable such that the # exports are localised. # # This also means we can get rid of the ugly __xxx_to_xxx__is_a_macro # in include/asm-arm/arch-*/memory.h # # include/asm-arm/arch-versatile/memory.h # 2004/05/16 14:10:46+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-tbox/memory.h # 2004/05/16 14:10:46+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-shark/memory.h # 2004/05/16 14:10:46+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-sa1100/memory.h # 2004/05/16 14:10:46+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-s3c2410/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-rpc/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-pxa/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-omap/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-nexuspci/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-lh7a40x/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-l7200/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-ixp4xx/memory.h # 2004/05/16 14:10:45+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-iop3xx/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -5 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-integrator/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-epxa10db/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-ebsa285/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-ebsa110/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-clps711x/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -8 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-cl7500/memory.h # 2004/05/16 14:10:44+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # include/asm-arm/arch-adifcc/memory.h # 2004/05/16 14:10:43+01:00 rmk@flint.arm.linux.org.uk +0 -4 # Remove __xxx_to_xxx__is_a_macro. # # arch/arm/mm/ioremap.c # 2004/05/16 14:10:43+01:00 rmk@flint.arm.linux.org.uk +2 -0 # Move exports for __ioremap, __iounmap from armksyms.c # # arch/arm/mach-footbridge/mm.c # 2004/05/16 14:10:43+01:00 rmk@flint.arm.linux.org.uk +2 -0 # Move exports for __virt_to_bus, __bus_to_virt from armksyms.c # # arch/arm/kernel/traps.c # 2004/05/16 14:10:43+01:00 rmk@flint.arm.linux.org.uk +5 -0 # Move exports for __bad_xchg, __bug, __readwrite_bug, __div0, abort # from armksyms.c # # arch/arm/kernel/setup.c # 2004/05/16 14:10:43+01:00 rmk@flint.arm.linux.org.uk +14 -0 # Move exports for __machine_arch_type, system_rev, system_serial_low, # system_serial_high, elf_hwcap, elf_platform from armksyms.c # # arch/arm/kernel/semaphore.c # 2004/05/16 14:10:42+01:00 rmk@flint.arm.linux.org.uk +5 -0 # Move exports for __down_failed, __down_interruptible_failed, # __down_trylock_failed and __up_wakeup from armksyms.c # # arch/arm/kernel/process.c # 2004/05/16 14:10:42+01:00 rmk@flint.arm.linux.org.uk +12 -2 # Move exports for pm_idle, pm_power_off, fp_init, dump_fpu, # dump_thread, kernel_thread and get_wchan from armksyms.c # # Ensure that kernel_thread_helper is placed in the correct section. # # arch/arm/kernel/irq.c # 2004/05/16 14:10:42+01:00 rmk@flint.arm.linux.org.uk +6 -0 # Move exports for disable_irq, enable_irq, enable_irq_wake, # disable_irq_wake, set_irq_type and probe_irq_mask from armksyms.c # # arch/arm/kernel/armksyms.c # 2004/05/16 14:10:42+01:00 rmk@flint.arm.linux.org.uk +1 -80 # Move symbol exports for C functions/variables into relevant files. # Remove a bunch of unnecessary includes. # # ChangeSet # 2004/05/16 12:08:21+01:00 rmk@flint.arm.linux.org.uk # [SERIAL] Remove base_baud default from 8250_pci # # Since all boards specify base_baud, the code to default base_baud to # the architecture-defined BASE_BAUD is redundant. Also, defaulting # to the architecture-defined BASE_BAUD is wrong since the UARTs on a # serial PCI card will be clocked at the same rate no matter what the # architecture of the host machine. # # drivers/serial/8250_pci.c # 2004/05/16 12:06:18+01:00 rmk@flint.arm.linux.org.uk +2 -8 # Remove include # Remove base_baud default - all boards specify base_baud # # ChangeSet # 2004/05/15 17:29:10-07:00 rth@twiddle.net # [PATCH] alpha: fix GP-load symbol linkage # # From: Ivan Kokshaysky # # This skips the GP-loading function prologue (two instructions: 8 bytes) # on BRSGP linkage correctly, fixing an oops on alpha while loading the # aic7xxx driver. # # include/asm-alpha/elf.h # 2004/05/15 14:07:18-07:00 rth@twiddle.net +5 -0 # alpha: fix GP-load symbol linkage # # arch/alpha/kernel/module.c # 2004/05/15 14:05:57-07:00 rth@twiddle.net +4 -0 # alpha: fix GP-load symbol linkage # # ChangeSet # 2004/05/15 17:11:18-07:00 torvalds@evo.osdl.org # We need to use "memset_io()" when accessing PCI # mapped memory. # # A regular "memset()" may be using cache control # instructions etc, which is not appropriate for # memory-mapped IO. # # This also fixes a warning. # # drivers/video/aty/radeon_base.c # 2004/05/15 17:09:02-07:00 torvalds@evo.osdl.org +1 -1 # We need to use "memset_io()" when accessing PCI # mapped memory. # # A regular "memset()" may be using cache control # instructions etc, which is not appropriate for # memory-mapped IO. # # This also fixes a warning. # # ChangeSet # 2004/05/15 16:31:31-07:00 torvalds@ppc970.osdl.org # Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk # into ppc970.osdl.org:/home/torvalds/v2.6/linux # # include/linux/pci_ids.h # 2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # include/asm-arm/arch-pxa/pxa-regs.h # 2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/video/fbmem.c # 2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/video/Makefile # 2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/video/Kconfig # 2004/05/15 16:31:27-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # ChangeSet # 2004/05/15 16:20:21-07:00 jack@ucw.cz # [PATCH] Quota fix 2 # # This fixes the problem with recursion into filesystem when inode of # quota file needs a page + some other allocation problems. I hope I got # the GFP mask setting right.. # # fs/quota_v2.c # 2004/05/14 06:14:28-07:00 jack@ucw.cz +1 -1 # Quota fix 2 # # fs/dquot.c # 2004/05/14 06:19:38-07:00 jack@ucw.cz +6 -2 # Quota fix 2 # # ChangeSet # 2004/05/15 18:45:33-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/b44-2.6.5 # into redhat.com:/spare/repo/net-drivers-2.6 # # drivers/net/b44.c # 2004/05/15 18:45:30-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/15 18:28:24-04:00 pp@ee.oulu.fi # [netdrvr b44] better reset behavior # # This patch makes the b44-after-bcm4400 scenario work for # me. What was happening is that the broadcom driver sets a "power off MAC" # bit, and we didn't remove that when initializing the chip. # Also added some (a bit ugly, I know ) logic to clear up the address # filter stuff, which is what recent broadcom drivers do... # # drivers/net/b44.c # 2004/05/15 18:26:57-04:00 pp@ee.oulu.fi +12 -5 # [netdrvr b44] better reset behavior # # This patch makes the b44-after-bcm4400 scenario work for # me. What was happening is that the broadcom driver sets a "power off MAC" # bit, and we didn't remove that when initializing the chip. # Also added some (a bit ugly, I know ) logic to clear up the address # filter stuff, which is what recent broadcom drivers do... # # ChangeSet # 2004/05/15 18:07:32-04:00 jgarzik@redhat.com # [libata] handle non-data ATAPI commands via interrupt # # It's easier to do it this way, than polling, at the moment. # # Also, fix a test in ata_scsi_translate that was incorrectly # erroring-out non-data commands. # # drivers/scsi/libata-scsi.c # 2004/05/15 18:07:27-04:00 jgarzik@redhat.com +19 -12 # [libata] handle non-data ATAPI commands via interrupt # # It's easier to do it this way, than polling, at the moment. # # Also, fix a test in ata_scsi_translate that was incorrectly # erroring-out non-data commands. # # drivers/scsi/libata-core.c # 2004/05/15 18:07:27-04:00 jgarzik@redhat.com +10 -2 # [libata] handle non-data ATAPI commands via interrupt # # It's easier to do it this way, than polling, at the moment. # # Also, fix a test in ata_scsi_translate that was incorrectly # erroring-out non-data commands. # # ChangeSet # 2004/05/15 14:36:08-04:00 jgarzik@redhat.com # [libata] minor stuff # # * now that ATAPI is close to working, making ATAPI DMA interrupts # in ata_host_intr # * remove unnecessary space character in printk() output (oh, the horror) # # drivers/scsi/libata-core.c # 2004/05/15 14:36:03-04:00 jgarzik@redhat.com +2 -1 # [libata] minor stuff # # * now that ATAPI is close to working, making ATAPI DMA interrupts # in ata_host_intr # * remove unnecessary space character in printk() output (oh, the horror) # # ChangeSet # 2004/05/15 11:13:22-07:00 torvalds@ppc970.osdl.org # Fix gidsetsize == 0 for real this time. # # We need to always allocate at least one indirect block # pointer, since we always fill out blocks[0] even if # we don't have any groups. # # kernel/sys.c # 2004/05/15 11:13:16-07:00 torvalds@ppc970.osdl.org +3 -2 # Fix gidsetsize == 0 for real this time. # # We need to always allocate at least one indirect block # pointer, since we always fill out blocks[0] even if # we don't have any groups. # # ChangeSet # 2004/05/15 11:08:29-07:00 B.Zolnierkiewicz@elka.pw.edu.pl # [PATCH] remove bogus drivers/ide/pci/cmd640.h # # Trivia. # # CMD640 driver doesn't use generic IDE PCI code (it doesn't even include # this header). # # BitKeeper/deleted/.del-cmd640.h~2fe49fb5c5f79721 # 2004/05/15 11:08:24-07:00 B.Zolnierkiewicz@elka.pw.edu.pl +0 -0 # Delete: drivers/ide/pci/cmd640.h # # ChangeSet # 2004/05/15 11:01:48-07:00 B.Zolnierkiewicz@elka.pw.edu.pl # [PATCH] ide-disk.c: more write cache fixes # # - many Maxtor disks incorrectly claim CACHE FLUSH EXT command support, # fix it by checking both CACHE FLUSH EXT command and LBA48 support # (thanks to Eric D. Mudama for help in fixing this) # # - write_cache() was called with 'drive->id->cfs_enable_2 & 0x3000' as 'int arg' # argument which was always truncated to zero due to 'u8 drive->wcache = arg' # assignment so write cache was indeed enabled but drive->wcache was zero # (thanks to Rene Herman for help in debugging this) # # - flush cache in idedisk_start_power_step() only if ATA-6 CACHE FLUSH (EXT) # bits are present in disk's identify data (prevents sending unknown commands) # # - set drive->wcache in idedisk_setup() not idedisk_attach() (no need to check # id->command_set_2 - we check id->cfs_enable_2 instead in write_cache() call) # # - use ide_cacheflush_p() in idedisk_setup() # # - minor cleanups # # drivers/ide/ide-disk.c # 2004/05/13 11:30:35-07:00 B.Zolnierkiewicz@elka.pw.edu.pl +27 -43 # ide-disk.c: more write cache fixes # # ChangeSet # 2004/05/15 10:41:14-07:00 ak@muc.de # [PATCH] Handle empty nodes in sysfs on x86-64 # # This code is shared between i386 and x86-64, and x86-64 needs to check # for empty nodes here. Otherwise you can get oopses at boot in some # circumstances. # # This handles empty nodes != 0; empty node zero are still broken in other # ways. # # include/asm-i386/cpu.h # 2004/05/15 06:32:28-07:00 ak@muc.de +5 -1 # Handle empty nodes in sysfs on x86-64 # # ChangeSet # 2004/05/15 10:41:03-07:00 ak@muc.de # [PATCH] x86-64: fix /dev/mem caching behaviour # # This changes the /dev/mem caching behaviour on x86-64 to be compatible # with i386. # # By default everything is set cached. # # This actually makes WC MTRRs on AMD systems work, which would get # overriden by the UC PAT bits that were set earlier. This can make DVD # decoding with hardware support a lot faster. # # It also supports O_SYNC now, like i386, although that is not really # safe, because it allows the user to create undefined cache attribute # conflicts that can corrupt caches in some circumstances. I kept it for # now. Better would to disallow it, until Terrence Ripperda's PAT # framework is getting merged, that can avoid these problems. # # Actually it would be probably a good idea to add a printk here to catch # broken programs for i386 and x86-64, but that is for another patch. # # drivers/char/mem.c # 2004/05/15 06:32:28-07:00 ak@muc.de +13 -0 # x86-64: fix /dev/mem caching behaviour # # ChangeSet # 2004/05/15 10:40:53-07:00 ak@muc.de # [PATCH] x86-64 updates # # Various accumulated x86-64 patches and bug fixes. # # It fixes one nasty bug that has been there since NX is used by # default in the kernel. With heavy AGP memory allocation it would # set NX on parts of the kernel mapping in some corner cases, which gave # endless crash loops. Thanks goes to some wizards in AMD debug labs # for getting a trace out of this. # # Also various other fixes. This patches only changes x86-64 specific # files, i have some changes outside too that I am sending separately. # # - Fix help test for CONFIG_NUMA # - Don't enable SMT nice on CMP # - Move HT and MWAIT checks up to generic code # - Update defconfig # - Remove duplicated includes (Arthur Othieno) # - Set up GSI entry for ACPI SCI correctly (from i386) # - Fix some comments # - Fix threadinfo printing in oopses # - Set task alignment to 16 bytes # - Handle NX bit for code pages correctly in change_page_attr() # - Use generic nops for non amd specific kernel # - Add __KERNEL__ checks in unistd.h (David Lee) # # include/asm-x86_64/unistd.h # 2004/05/15 06:32:28-07:00 ak@muc.de +1 -1 # x86-64 updates # # include/asm-x86_64/processor.h # 2004/05/15 06:32:28-07:00 ak@muc.de +24 -4 # x86-64 updates # # arch/x86_64/mm/pageattr.c # 2004/05/15 06:41:06-07:00 ak@muc.de +22 -15 # x86-64 updates # # arch/x86_64/kernel/traps.c # 2004/05/15 06:32:27-07:00 ak@muc.de +2 -2 # x86-64 updates # # arch/x86_64/kernel/setup.c # 2004/05/15 06:32:27-07:00 ak@muc.de +7 -5 # x86-64 updates # # arch/x86_64/kernel/reboot.c # 2004/05/15 06:32:27-07:00 ak@muc.de +2 -2 # x86-64 updates # # arch/x86_64/kernel/pci-gart.c # 2004/05/15 06:32:27-07:00 ak@muc.de +0 -1 # x86-64 updates # # arch/x86_64/kernel/mpparse.c # 2004/05/15 06:32:27-07:00 ak@muc.de +4 -1 # x86-64 updates # # arch/x86_64/kernel/domain.c # 2004/05/15 06:40:13-07:00 ak@muc.de +4 -0 # x86-64 updates # # arch/x86_64/ia32/ptrace32.c # 2004/05/15 06:32:26-07:00 ak@muc.de +1 -2 # x86-64 updates # # arch/x86_64/defconfig # 2004/05/15 06:33:33-07:00 ak@muc.de +137 -40 # x86-64 updates # # arch/x86_64/Kconfig # 2004/05/15 06:32:23-07:00 ak@muc.de +3 -4 # x86-64 updates # # ChangeSet # 2004/05/15 10:38:09-07:00 torvalds@ppc970.osdl.org # Fix bogus debug code in usb/misc/cytherm.c # # Uncovered by recent cleanup of "dev_dbg()". # # drivers/usb/misc/cytherm.c # 2004/05/15 10:38:03-07:00 torvalds@ppc970.osdl.org +9 -9 # Fix bogus debug code in usb/misc/cytherm.c # # Uncovered by recent cleanup of "dev_dbg()". # # ChangeSet # 2004/05/15 10:27:04-07:00 akpm@osdl.org # [PATCH] i2o_config build fix # # Stomp a C99ism. # # drivers/message/i2o/i2o_config.c # 2004/05/14 23:21:40-07:00 akpm@osdl.org +3 -1 # i2o_config build fix # # ChangeSet # 2004/05/15 10:26:53-07:00 akpm@osdl.org # [PATCH] Fix botched fbdev lvalue conversion # # drivers/video/riva/fbdev.c # 2004/05/15 10:26:48-07:00 akpm@osdl.org +6 -6 # Fix botched fbdev lvalue conversion # # ChangeSet # 2004/05/15 10:26:42-07:00 akpm@osdl.org # [PATCH] typhoon locking fix # # Initialise the semaphore even if !MODULE # # drivers/media/radio/radio-typhoon.c # 2004/05/15 10:26:37-07:00 akpm@osdl.org +1 -1 # typhoon locking fix # # ChangeSet # 2004/05/15 10:26:32-07:00 akpm@osdl.org # [PATCH] radeonfb stack space fix # # These (unused) arrays are causing huge stack utilisation when instantiated in # an auto variable. Remove them for now. # # drivers/video/aty/radeonfb.h # 2004/05/15 10:26:26-07:00 akpm@osdl.org +0 -2 # radeonfb stack space fix # # ChangeSet # 2004/05/15 10:26:21-07:00 akpm@osdl.org # [PATCH] bootmem.c cleanup # # From: Michael Buesch # # - BUG_ON() conversion # # - Remove redundant dump_stack() (BUG already does that) # # mm/bootmem.c # 2004/05/14 23:11:59-07:00 akpm@osdl.org +9 -14 # bootmem.c cleanup # # ChangeSet # 2004/05/15 10:26:11-07:00 akpm@osdl.org # [PATCH] groups_alloc(0) clobbers memory past end of block # # From: Olaf Kirch # # Authentication code in net/sunrpc makes frequent use of groups_alloc(0), # which seems to clobber memory past the end of what it allocated. # # If called with gidsetsize == 0, groups_alloc will set nblocks = 0, # but still does a # # group_info->blocks[0] = group_info->small_block; # # kernel/sys.c # 2004/05/14 23:11:59-07:00 akpm@osdl.org +1 -2 # groups_alloc(0) clobbers memory past end of block # # ChangeSet # 2004/05/15 10:26:00-07:00 akpm@osdl.org # [PATCH] ac97_plugin_ad1980 porting fix # # From: "Uwe Bugla" # # Fix up a mistake in the 2.4->2.6 forward-port of this driver. # # sound/oss/ac97_plugin_ad1980.c # 2004/05/14 23:11:59-07:00 akpm@osdl.org +1 -1 # ac97_plugin_ad1980 porting fix # # ChangeSet # 2004/05/15 10:25:50-07:00 akpm@osdl.org # [PATCH] Increase xfsbufd_centisecs when in laptop mode # # From: Bart Samwel # # The attached patch is the outcome of a discussion with Nathan. # # When laptop mode is active, there is no need for XFS to wake up xfsbufd (the # daemon that flushes buffers that are too old) too often. The default is once # every second, this patch makes laptop mode do it once every 30 seconds. # # Documentation/laptop-mode.txt # 2004/05/14 23:11:59-07:00 akpm@osdl.org +3 -0 # Increase xfsbufd_centisecs when in laptop mode # # ChangeSet # 2004/05/15 10:25:39-07:00 akpm@osdl.org # [PATCH] Laptop mode control script support for XFS *_centisecs sysctl values. # # From: Bart Samwel # # XFS now uses # /proc/sys/fs/xfs/xfssyncd_centisecs # /proc/sys/fs/xfs/xfsbufd_centisecs # /proc/sys/fs/xfs/age_buffer_centisecs # # Here's a patch to support these values in the laptop mode control script. # # Documentation/laptop-mode.txt # 2004/05/14 23:29:18-07:00 akpm@osdl.org +14 -1 # Laptop mode control script support for XFS *_centisecs sysctl values. # # ChangeSet # 2004/05/15 10:25:29-07:00 akpm@osdl.org # [PATCH] remove unused acpi_irq_to_vector() # # From: Bjorn Helgaas # # Now that everybody has acpi_gsi_to_irq(), we can nuke the deprecated # acpi_irq_to_vector(). No references remain. # # include/asm-ia64/acpi.h # 2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -1 # remove unused acpi_irq_to_vector() # # include/asm-i386/acpi.h # 2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -1 # remove unused acpi_irq_to_vector() # # arch/ia64/kernel/acpi.c # 2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -10 # remove unused acpi_irq_to_vector() # # arch/i386/kernel/acpi/boot.c # 2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -10 # remove unused acpi_irq_to_vector() # # ChangeSet # 2004/05/15 10:25:17-07:00 akpm@osdl.org # [PATCH] floppy.c: better/cleaner use of debugt # # From: "Randy.Dunlap" # # From: "Luiz Fernando N. Capitulino" # # floppy_debugt.patch: better use of the debugt functions. # # drivers/block/floppy.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +8 -30 # floppy.c: better/cleaner use of debugt # # ChangeSet # 2004/05/15 10:25:08-07:00 akpm@osdl.org # [PATCH] floppy.c: better floppy_init error handling # # From: "Randy.Dunlap" # # From: "Luiz Fernando N. Capitulino" # # Adds a better audit for floppy_init(). Fixes one real bug (in calling # blk_queue_max_sectors()). # # drivers/block/floppy.c # 2004/05/14 23:29:19-07:00 akpm@osdl.org +54 -38 # floppy.c: better floppy_init error handling # # ChangeSet # 2004/05/15 10:24:57-07:00 akpm@osdl.org # [PATCH] Export `laptop_mode' for XFS # # From: # # XFS needs `laptop_mode'. # # mm/page-writeback.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +2 -0 # Export `laptop_mode' for XFS # # ChangeSet # 2004/05/15 10:24:47-07:00 akpm@osdl.org # [PATCH] Remove old sh-sci driver # # From: Paul Mundt # # The old drivers/char sh-sci driver is no long used by anyone, both sh and # h8300 are using the drivers/serial version at this point, so we can get rid # of the old one entirely. # # drivers/char/Makefile # 2004/05/14 23:11:58-07:00 akpm@osdl.org +0 -1 # Remove old sh-sci driver # # BitKeeper/deleted/.del-sh-sci.h~f3854b8c283c9700 # 2004/05/15 10:24:41-07:00 akpm@osdl.org +0 -0 # Delete: drivers/char/sh-sci.h # # BitKeeper/deleted/.del-sh-sci.c~bc16578fc6688d3 # 2004/05/15 10:24:41-07:00 akpm@osdl.org +0 -0 # Delete: drivers/char/sh-sci.c # # ChangeSet # 2004/05/15 10:24:36-07:00 akpm@osdl.org # [PATCH] Fix x86_64 allmodconfig with gcc-3.4.0 # # From: Andi Kleen # # *** Warning: "memcmp" [drivers/atm/zatm.ko] undefined! # # gcc 3.4 specific problem. This patch should fix it. Actually it would be # better to move all these EXPORT_SYMBOLs into lib/string.c, it is silly that # each arch has to duplicate all that. # # arch/x86_64/kernel/x8664_ksyms.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +3 -0 # Fix x86_64 allmodconfig with gcc-3.4.0 # # ChangeSet # 2004/05/15 10:24:25-07:00 akpm@osdl.org # [PATCH] remove driver model code in mwave driver # # From: Christoph Hellwig # # Someone blindly added sysfs support to the driver long time ago without # understanding the implications (and if they were understood the driver # would need half a rewrite for it). Herber Xu recently noticed the problems # this causes on unload, so let's if 0 out all that code and get the driver # working again. # # drivers/char/mwave/mwavedd.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +6 -1 # remove driver model code in mwave driver # # ChangeSet # 2004/05/15 10:24:15-07:00 akpm@osdl.org # [PATCH] Make /proc/sysrq-trigger ignore sysrq_enabled # # It's silly that writing to /proc/sysrq-trigger does nothing if you haven't # enabled /proc/sys/kernel/sysrq. So provide a new __handle_sysrq() which # ignores the sysrq_enabled check. # # The patch also withdraws __handle_sysrq_nolock() from the kernel API. It had # no callers. # # include/linux/sysrq.h # 2004/05/14 23:11:58-07:00 akpm@osdl.org +1 -7 # Make /proc/sysrq-trigger ignore sysrq_enabled # # fs/proc/proc_misc.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +1 -1 # Make /proc/sysrq-trigger ignore sysrq_enabled # # drivers/char/sysrq.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +15 -21 # Make /proc/sysrq-trigger ignore sysrq_enabled # # ChangeSet # 2004/05/15 10:24:04-07:00 akpm@osdl.org # [PATCH] x86_64 msr.c warning fix # # arch/x86_64/kernel/msr.c:1:10: warning: extra tokens at end of #ident directive # # arch/x86_64/kernel/msr.c # 2004/05/14 23:11:58-07:00 akpm@osdl.org +0 -1 # x86_64 msr.c warning fix # # ChangeSet # 2004/05/15 10:23:54-07:00 akpm@osdl.org # [PATCH] fix aic7xxx_old.c for !PCI # # From: Adrian Bunk # # drivers/scsi/aic7xxx_old.c: In function `aic7xxx_release': # drivers/scsi/aic7xxx_old.c:10971: warning: implicit declaration of function `pci_release_regions' # # drivers/scsi/aic7xxx_old.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -0 # fix aic7xxx_old.c for !PCI # # ChangeSet # 2004/05/15 10:23:43-07:00 akpm@osdl.org # [PATCH] fix tlan.c for !PCI # # From: Adrian Bunk # # drivers/net/tlan.c: In function `tlan_remove_one': # drivers/net/tlan.c:449: warning: implicit declaration of function `pci_release_regions' # # drivers/net/tlan.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -0 # fix tlan.c for !PCI # # ChangeSet # 2004/05/15 10:23:33-07:00 akpm@osdl.org # [PATCH] fix cyclades compile with !PCI # # From: Adrian Bunk # # drivers/char/cyclades.c: In function `cy_cleanup_module': # drivers/char/cyclades.c:5638: warning: implicit declaration of function `pci_release_regions' # # drivers/char/cyclades.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +2 -0 # fix cyclades compile with !PCI # # ChangeSet # 2004/05/15 10:23:22-07:00 akpm@osdl.org # [PATCH] Fix endianess in modpost when cross-compiling for sparc on i386 # # From: Mathieu Chouquet-Stringer # # This patch makes the following code work again: # # #ifdef STT_REGISTER # if (info->hdr->e_machine == EM_SPARC || # info->hdr->e_machine == EM_SPARCV9) { # /* Ignore register directives. */ # if (ELF_ST_TYPE(sym->st_info) == STT_REGISTER) # break; # } # #endif # # This portion of code is sparc specific and nothing else in modpost.c uses # e_machine meaning cross-compiling for sparc on i386 (or any little endian # machine) is the only way to experience the bug. # # Without it, e_machine has the wrong value and modpost then generates a lot # of "*** Warning: \"symbol\" [filename.ko] undefined" messages. # # scripts/modpost.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +1 -0 # Fix endianess in modpost when cross-compiling for sparc on i386 # # ChangeSet # 2004/05/15 10:23:12-07:00 akpm@osdl.org # [PATCH] m68k: use print_modules() # # From: Geert Uytterhoeven # # arch/m68k/kernel/traps.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +1 -0 # m68k: use print_modules() # # ChangeSet # 2004/05/15 10:23:01-07:00 akpm@osdl.org # [PATCH] implement print_modules() # # From: Arjan van de Ven , # Rusty Russell # # The patch below resolves the "Not Yet Implemented" print_modules() thing. # This is a really useful feature for distros; it allows us to do statistical # analysis on which modules are present how often in oopses compared to how # often they are used normally. In addition it helps to spot candidates for # certain bugs without having to go back to the customer asking for this # information. # # kernel/module.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +11 -0 # implement print_modules() # # include/linux/module.h # 2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -1 # implement print_modules() # # ChangeSet # 2004/05/15 10:22:51-07:00 akpm@osdl.org # [PATCH] Fix reiserfs oom crash # # From: Oleg Drokin # # Thanks to Standford guys, a case where reiserfs can dereference NULL # pointer if memory allocation fail during mount was identified. # # fs/reiserfs/journal.c # 2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -2 # Fix reiserfs oom crash # # ChangeSet # 2004/05/15 10:22:41-07:00 akpm@osdl.org # [PATCH] fix block layer ioctl bug # # From: Alan Cox # # The block layer checks for -EINVAL from block layer driver ioctls. This is # wrong - ENOTTY is unknown and some drivers correctly use this. I suspect # for an internal ioctl 2.7 should change to -ENOIOCTLCMD and bitch about old # style returns # # This is conservative fix for the 2.6 case, it keeps the bogus -EINVAL to # avoid breaking stuff # # drivers/block/ioctl.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -1 # fix block layer ioctl bug # # ChangeSet # 2004/05/15 10:22:30-07:00 akpm@osdl.org # [PATCH] fix linux doc errors # # From: Alan Cox # # drivers/scsi/hosts.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -2 # fix linux doc errors # # ChangeSet # 2004/05/15 10:22:19-07:00 akpm@osdl.org # [PATCH] security: minor cleanups in capability.c # # From: Chris Wright # # Remove confusing error message when loading as secondary module, and ditch # conditional MY_NAME macro. # # security/capability.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +3 -8 # security: minor cleanups in capability.c # # ChangeSet # 2004/05/15 10:22:09-07:00 akpm@osdl.org # [PATCH] security: remove empty build of capability.o # # From: Chris Wright # # The build includes capability.c when CONFIG_SECURITY=n, yet the whole file is # ifdef'd out. Remove unnecessary build step as well as superfluous ifdefs. # # security/capability.c # 2004/05/14 23:29:22-07:00 akpm@osdl.org +0 -5 # security: remove empty build of capability.o # # security/Makefile # 2004/05/14 23:11:56-07:00 akpm@osdl.org +1 -1 # security: remove empty build of capability.o # # ChangeSet # 2004/05/15 10:21:58-07:00 akpm@osdl.org # [PATCH] PCI debug compile fix in sis_router_probe() # # From: Pavel Roskin # # I get a compile error when I define "DEBUG" in arch/i386/pci/pci.h. Variable # rt is not defined in sis_router_probe(), file arch/i386/pci/irq.c. # # arch/i386/pci/irq.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +0 -2 # PCI debug compile fix in sis_router_probe() # # ChangeSet # 2004/05/15 10:21:48-07:00 akpm@osdl.org # [PATCH] calculate NGROUPS_PER_BLOCK from PAGE_SIZE # # From: Greg Edwards # # On ia64, EXEC_PAGESIZE (max page size) is 65536, but the default page size is # 16k. This results in NGROUPS_PER_BLOCK in include/linux/sched.h being # calculated incorrectly when the page size is anything other than 64k. For # example, on a 16k page size kernel, a setgroups() call with a gidsetsize of # 65536 will end up walking over memory since only 1/4 of the needed pages were # allocated for the blocks[] array in the group_info struct. # # Patch below calculates NGROUPS_PER_BLOCK from PAGE_SIZE instead. # # include/linux/sched.h # 2004/05/14 23:11:56-07:00 akpm@osdl.org +1 -1 # calculate NGROUPS_PER_BLOCK from PAGE_SIZE # # ChangeSet # 2004/05/15 10:21:37-07:00 akpm@osdl.org # [PATCH] dquot_release oops fix # # From: Jan Kara # # Fix a null-pointer-deref oops in the quota code. # # fs/dquot.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -1 # dquot_release oops fix # # ChangeSet # 2004/05/15 10:21:27-07:00 akpm@osdl.org # [PATCH] videodev: handle class_register() failure # # From: "Randy.Dunlap" # # From: (Walter Harms) # # (acked by Gerd) # # drivers/media/video/videodev.c # 2004/05/14 23:11:56-07:00 akpm@osdl.org +12 -3 # videodev: handle class_register() failure # # ChangeSet # 2004/05/15 10:21:16-07:00 akpm@osdl.org # [PATCH] Update laptop mode control script with XFS_HZ=100 # # From: Bart Samwel # # The laptop mode control script incorrectly guesses XFS_HZ=1000. This is # incorrect, since the patches that made XFS use USER_HZ went into 2.6.6 as # well. This changes XFS_HZ to 100 and removes the warning from the doc about # checking XFS_HZ. # # Documentation/laptop-mode.txt # 2004/05/14 23:29:19-07:00 akpm@osdl.org +7 -11 # Update laptop mode control script with XFS_HZ=100 # # ChangeSet # 2004/05/15 10:21:06-07:00 akpm@osdl.org # [PATCH] Watchdog timer for Intel IXP4xx CPUs # # From: Deepak Saxena # # Following patch adds a driver for the watchdogs on the Intel IXP4xx family of # network processors (ARM). # # drivers/char/watchdog/ixp4xx_wdt.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +233 -0 # Watchdog timer for Intel IXP4xx CPUs # # drivers/char/watchdog/Makefile # 2004/05/14 23:11:55-07:00 akpm@osdl.org +1 -0 # Watchdog timer for Intel IXP4xx CPUs # # drivers/char/watchdog/Kconfig # 2004/05/14 23:11:55-07:00 akpm@osdl.org +11 -0 # Watchdog timer for Intel IXP4xx CPUs # # drivers/char/watchdog/ixp4xx_wdt.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/drivers/char/watchdog/ixp4xx_wdt.c # # ChangeSet # 2004/05/15 10:20:55-07:00 akpm@osdl.org # [PATCH] Fix AladdinCard entry in parport_pc # # From: Christian Groessler # # Our AladdinCard also uses the oxsemi_840 chips and locks up when ecp mode # is enabled. # # drivers/parport/parport_pc.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +1 -1 # Fix AladdinCard entry in parport_pc # # ChangeSet # 2004/05/15 10:20:44-07:00 akpm@osdl.org # [PATCH] create_workqueue locking fix # # Fix some silliness in there. # # kernel/workqueue.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +2 -2 # create_workqueue locking fix # # ChangeSet # 2004/05/15 10:20:34-07:00 akpm@osdl.org # [PATCH] laptop-mode documentation fix # # From: Sau Dan Lee # # The script /etc/acpi/actions/battery.sh in the document doesn't run, # because of a wrong name. # # Documentation/laptop-mode.txt # 2004/05/14 23:29:23-07:00 akpm@osdl.org +2 -2 # laptop-mode documentation fix # # ChangeSet # 2004/05/15 10:20:24-07:00 akpm@osdl.org # [PATCH] ib700wdt watchdog driver fix #2 # # From: Patrice Bouchand # # The value written in the WDT_STOP register is not important. As soon as # something is written, the watchdog timer stops. But things will be cleaner # if we use the following patch. # # drivers/char/watchdog/ib700wdt.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +2 -2 # ib700wdt watchdog driver fix #2 # # ChangeSet # 2004/05/15 10:20:13-07:00 akpm@osdl.org # [PATCH] ib700wdt watchdog driver fix # # From: Patrice Bouchand # # ibwdt_ping(): we should write the current timeout's index into the holdoff # register, not the timeout's value in seconds. # # drivers/char/watchdog/ib700wdt.c # 2004/05/14 23:29:24-07:00 akpm@osdl.org +1 -1 # ib700wdt watchdog driver fix # # ChangeSet # 2004/05/15 10:20:03-07:00 akpm@osdl.org # [PATCH] expose backing dev max read-ahead # # From: Jens Axboe # # Expose the blockdev's VM readahead in /sys/block/hda/queue/read_ahead_kbytes # # This duplicates `blockdev --setra', but we're trying to get away from # ioctls. # # It would be nice to have a readahead-setting mechanism which also allows, # say, NFS to be tuned. But there is no common exposure point for # backing_dev_infos. One option might be per-superblock: # # mount -o remount,read_ahead_kbytes=64 # # but the generic remount code also has no visibility of the backing_dev, so it # would need a new super_block operation. One which doesn't accidentally modify # default_backing_dev_info. # # drivers/block/ll_rw_blk.c # 2004/05/14 23:11:55-07:00 akpm@osdl.org +27 -0 # expose backing dev max read-ahead # # ChangeSet # 2004/05/15 10:19:52-07:00 akpm@osdl.org # [PATCH] efivars: check that it's enabled # # From: "Randy.Dunlap" # # EFI-enabled kernels crash on non-EFI machines. efivars_init() and # efivars_exit() need to check efi_enabled instead of assuming that the # system is using EFI. # # drivers/firmware/efivars.c # 2004/05/14 23:11:54-07:00 akpm@osdl.org +6 -0 # efivars: check that it's enabled # # arch/i386/kernel/setup.c # 2004/05/14 23:11:54-07:00 akpm@osdl.org +1 -0 # efivars: check that it's enabled # # ChangeSet # 2004/05/15 10:19:35-07:00 akpm@osdl.org # [PATCH] make buildcheck # # From: Arjan van de Ven # # the patch below adds a "make buildcheck" target which checks for the "uses # exit in init" bug using Keith Owen's script. In the future other similar # sanity checks can be added to this target, but even just this one has been # quite useful already. I use it in the kernel rpm build process for # example, and I'm sure the OSDL build testers can/want to use it too. # # From: Keith Owens # # They commented out the progress print statements, I prefer to have them # present but no big deal. The licence is missing. # # scripts/reference_discarded.pl # 2004/05/14 23:11:54-07:00 akpm@osdl.org +109 -0 # make buildcheck # # scripts/reference_discarded.pl # 2004/05/14 23:11:54-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/scripts/reference_discarded.pl # # Makefile # 2004/05/14 23:11:54-07:00 akpm@osdl.org +3 -0 # make buildcheck # # ChangeSet # 2004/05/15 10:19:25-07:00 akpm@osdl.org # [PATCH] Include Aliases in kallsyms # # From: Rusty Russell # # Kallsyms discards symbols with the same address, but these are sometimes # useful. Skip this minor optimization and make kallsyms_lookup deal with # aliases # # scripts/kallsyms.c # 2004/05/14 23:11:54-07:00 akpm@osdl.org +2 -11 # Include Aliases in kallsyms # # kernel/kallsyms.c # 2004/05/14 23:11:54-07:00 akpm@osdl.org +10 -4 # Include Aliases in kallsyms # # ChangeSet # 2004/05/15 10:19:11-07:00 akpm@osdl.org # [PATCH] show last kernel-image symbol in /proc/kallsyms # # From: Rusty Russell # # The current code doesn't show the last symbol (usually _einittext) in # /proc/kallsyms. The reason for this is subtle: s_start() returns an empty # string for position 0 (ignored by s_show()), and s_next() returns the first # symbol for position 1. # # What should happen is that update_iter() for position 0 should fill in the # first symbol. Unfortunately, the get_ksymbol_core() fills in the symbol # information, *and* updates the iterator: we have to split these functions, # which we do by making it return the length of the name offset. # # Then we can call get_ksymbol_core() without moving the iterator, meaning # that we can call it at position 0 (ie. s_start()). # # kernel/kallsyms.c # 2004/05/14 23:29:24-07:00 akpm@osdl.org +9 -6 # show last kernel-image symbol in /proc/kallsyms # # ChangeSet # 2004/05/15 10:19:00-07:00 akpm@osdl.org # [PATCH] slabify iocontext + request_queue # # From: Jens Axboe # # Move both request_queue and io_context allocation to a slab cache. # # This is mainly a space-saving exercise. Some setups have a lot of disks # and the kmalloc rounding-up can consume significant amounts of memory. # # drivers/block/ll_rw_blk.c # 2004/05/14 23:29:24-07:00 akpm@osdl.org +25 -5 # slabify iocontext + request_queue # # ChangeSet # 2004/05/15 10:18:50-07:00 akpm@osdl.org # [PATCH] i2o_proc module owner fix # # From: Warren Togami # # drivers/message/i2o/i2o_proc.c # 2004/05/14 23:11:54-07:00 akpm@osdl.org +1 -0 # i2o_proc module owner fix # # ChangeSet # 2004/05/15 10:18:39-07:00 akpm@osdl.org # [PATCH] Fix i2o_proc kernel panic on access of /proc/i2o/iop0/lct # # From: Markus Lidel # # The patch converts i2o_proc to seq_file, thereby fixing a bug in the # i2o_proc.c module, where the kernel panics, if you access /proc/i2o/iop0/lct # and read more then 1024 bytes of it. # # drivers/message/i2o/i2o_proc.c # 2004/05/14 23:29:25-07:00 akpm@osdl.org +206 -195 # Fix i2o_proc kernel panic on access of /proc/i2o/iop0/lct # # ChangeSet # 2004/05/15 10:18:28-07:00 akpm@osdl.org # [PATCH] fbdev: Q40 fbdev updates. # # From: James Simmons # # It ports this driver to sysfs api and fixes a colormap issue. # # drivers/video/q40fb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +69 -40 # fbdev: Q40 fbdev updates. # # ChangeSet # 2004/05/15 10:18:18-07:00 akpm@osdl.org # [PATCH] fbdev: Fix fbcon and unimap # # From: Fabrice Menard # # Trying to solve my latin1 char problems with the framebuffer console, I # found that fbcon doesn't set a unicode map. # # drivers/video/console/fbcon.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -0 # fbdev: Fix fbcon and unimap # # ChangeSet # 2004/05/15 10:18:07-07:00 akpm@osdl.org # [PATCH] fbdev: New Asiliant framebuffer driver. # # From: James Simmons # # This is the new asiliant framebuffer driver. # # drivers/video/asiliantfb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +620 -0 # fbdev: New Asiliant framebuffer driver. # # drivers/video/asiliantfb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/drivers/video/asiliantfb.c # # drivers/video/Makefile # 2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -0 # fbdev: New Asiliant framebuffer driver. # # drivers/video/Kconfig # 2004/05/14 23:11:53-07:00 akpm@osdl.org +4 -0 # fbdev: New Asiliant framebuffer driver. # # ChangeSet # 2004/05/15 10:17:56-07:00 akpm@osdl.org # [PATCH] fbdev: Vesa Fbdev update fix # # From: Geert Uytterhoeven # # On Sun, 25 Apr 2004, James Simmons wrote: # > This patch migrates the Vesa Framebuffer driver over to the # > framebuffer_alloc/framebuffer_release api. It also fixes the error # > handling paths. The mtrr issue that Geert brought up has been fixed. # > With your approval Geert, Ben please apply this patch. # # > + /* Set video size according to vram boot option */ # > + if (vram && vram * 1024 * 1024 != vesafb_fix.smem_len) # > + vesafb_fix.smem_len = vram * 1024 * 1024; # # The second part of the test can be removed. The rest looks OK to me. # # drivers/video/vesafb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -1 # fbdev: Vesa Fbdev update fix # # ChangeSet # 2004/05/15 10:17:45-07:00 akpm@osdl.org # [PATCH] fbdev: Vesa Fbdev update # # From: James Simmons # # This patch migrates the Vesa Framebuffer driver over to the # framebuffer_alloc/framebuffer_release api. It also fixes the error # handling paths. The mtrr issue that Geert brought up has been fixed. # # drivers/video/vesafb.c # 2004/05/14 23:29:26-07:00 akpm@osdl.org +73 -25 # fbdev: Vesa Fbdev update # # ChangeSet # 2004/05/15 10:17:34-07:00 akpm@osdl.org # [PATCH] fbdev: Virtual fbdev updates # # From: James Simmons # # This is attempt 2 at the virtual framebuffer patch. It migrates the driver # to the framebuffer_release/framebuffer_alloc api. It doesn't enable the # driver by default. # # drivers/video/vfb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +85 -27 # fbdev: Virtual fbdev updates # # ChangeSet # 2004/05/15 10:17:23-07:00 akpm@osdl.org # [PATCH] fbdev: Fix NULL-ptr dereference in pm2fb_probe # # From: Jim Hague # # It fixes the NULL pointer dereference and also a problem in pm2fb_blank(). # # drivers/video/pm2fb.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +32 -22 # fbdev: Fix NULL-ptr dereference in pm2fb_probe # # ChangeSet # 2004/05/15 10:17:12-07:00 akpm@osdl.org # [PATCH] fbdev: set a default access_align value # # From: James Simmons # # Set the default access_align variable. This variable tells us how much data # the hardware can handle in a single read/write cycle. For example the epson # chipset can handle only 16 bit reads and writes to the framebuffer. # # drivers/video/fbmem.c # 2004/05/14 23:11:53-07:00 akpm@osdl.org +2 -0 # fbdev: set a default access_align value # # ChangeSet # 2004/05/15 10:17:01-07:00 akpm@osdl.org # [PATCH] fbdev: remove redundant local # # From: James Simmons # # Remove extra variable. We use i instead of rc. # # drivers/video/fbmem.c # 2004/05/14 23:29:26-07:00 akpm@osdl.org +3 -3 # fbdev: remove redundant local # # ChangeSet # 2004/05/15 10:16:51-07:00 akpm@osdl.org # [PATCH] fbdev: remove redundant p->vrows calculation # # From: James Simmons # # This patch removes the redundent calculation of p->vrows. This is done in # fbcon_resize. # # drivers/video/console/fbcon.c # 2004/05/14 23:29:25-07:00 akpm@osdl.org +2 -17 # fbdev: remove redundant p->vrows calculation # # ChangeSet # 2004/05/15 10:16:40-07:00 akpm@osdl.org # [PATCH] fbdev: clean up logo handling # # From: James Simmons # # This make the logo handling code easier to read. Merged the two code blocks # since they test for the exact same condition. # # drivers/video/console/fbcon.c # 2004/05/14 23:29:26-07:00 akpm@osdl.org +1 -4 # fbdev: clean up logo handling # # ChangeSet # 2004/05/15 10:16:30-07:00 akpm@osdl.org # [PATCH] fbdev: video/imsttfb.c warning fix # # From: "Luiz Fernando N. Capitulino" # # drivers/video/imsttfb.c:1089: warning: `imsttfb_load_cursor_image' defined but not used # drivers/video/imsttfb.c:1159: warning: `imstt_set_cursor' defined but not used # # drivers/video/imsttfb.c # 2004/05/14 23:11:52-07:00 akpm@osdl.org +1 -1 # fbdev: video/imsttfb.c warning fix # # ChangeSet # 2004/05/15 10:16:20-07:00 akpm@osdl.org # [PATCH] fbdev: video/tdfxfb.c warning fix # # From: "Luiz Fernando N. Capitulino" # # Fix this: # # drivers/video/tdfxfb.c:1005: warning: `tdfxfb_cursor' defined but not used # # and make the acceleration function selectable (like hgafb and tridentfb) # # Geert says: # # tdfxfb_cursor() was not used before, causing a compiler warning. # tdfxfb_cursor() may work, but we don't know, so we didn't dare to enable it # by default. Now the user (he who has the hardware) can enable it, and tell # us whether it works or not. # # drivers/video/tdfxfb.c # 2004/05/14 23:11:52-07:00 akpm@osdl.org +7 -1 # fbdev: video/tdfxfb.c warning fix # # drivers/video/Kconfig # 2004/05/14 23:29:25-07:00 akpm@osdl.org +8 -0 # fbdev: video/tdfxfb.c warning fix # # ChangeSet # 2004/05/15 10:16:09-07:00 akpm@osdl.org # [PATCH] fbdev: video/hgafb.c warning fix # # From: "Luiz Fernando N. Capitulino" # # Make HGA acceleration functions selectable in kernel config, fix these # warnings: # # drivers/video/hgafb.c:452: warning: `hgafb_fillrect' defined but not used # drivers/video/hgafb.c:472: warning: `hgafb_copyarea' defined but not used # drivers/video/hgafb.c:502: warning: `hgafb_imageblit' defined but not used # # drivers/video/hgafb.c # 2004/05/14 23:11:52-07:00 akpm@osdl.org +12 -3 # fbdev: video/hgafb.c warning fix # # drivers/video/Kconfig # 2004/05/14 23:29:27-07:00 akpm@osdl.org +8 -0 # fbdev: video/hgafb.c warning fix # # ChangeSet # 2004/05/15 10:15:59-07:00 akpm@osdl.org # [PATCH] fbdev: video/tridentfb.c warning fix # # From: "Luiz Fernando N. Capitulino" # # Speaking with frame buffer people, we agree with this patch to fix the # warning: # # drivers/video/tridentfb.c:455: warning: `tridentfb_fillrect' defined but not used # drivers/video/tridentfb.c:473: warning: `tridentfb_copyarea' defined but not used # # drivers/video/tridentfb.c # 2004/05/14 23:11:52-07:00 akpm@osdl.org +8 -5 # fbdev: video/tridentfb.c warning fix # # drivers/video/Kconfig # 2004/05/14 23:29:27-07:00 akpm@osdl.org +8 -0 # fbdev: video/tridentfb.c warning fix # # ChangeSet # 2004/05/15 10:15:48-07:00 akpm@osdl.org # [PATCH] fbdev: Neomagic driver update. # # From: James Simmons # # Here is a updated driver for the neomagic. # # include/video/neomagic.h # 2004/05/14 23:11:52-07:00 akpm@osdl.org +104 -165 # fbdev: Neomagic driver update. # # drivers/video/neofb.c # 2004/05/14 23:11:52-07:00 akpm@osdl.org +294 -217 # fbdev: Neomagic driver update. # # drivers/video/Makefile # 2004/05/14 23:29:25-07:00 akpm@osdl.org +1 -1 # fbdev: Neomagic driver update. # # ChangeSet # 2004/05/15 10:15:37-07:00 akpm@osdl.org # [PATCH] fbdev: radeonfb: fix garbled screen # # From: Benjamin Herrenschmidt # # > My screen is still a bit garbeld after booting. # > Still like http://zodiac.dnsalias.org/images/garbage.jpg # # Yes, usual boot-time x86 garbage. Well, let's imagine it's as simple # as clearing the framebuffer during boot :) Try this patch and let me # know. If that doesn't help, then the problem is definitely in fbcon. # # drivers/video/aty/radeon_base.c # 2004/05/14 23:11:51-07:00 akpm@osdl.org +1 -0 # fbdev: radeonfb: fix garbled screen # # ChangeSet # 2004/05/15 10:15:26-07:00 akpm@osdl.org # [PATCH] autofs4 compat ioctls # # From: # # These are the ioctls that need to be added to the compatibility layer. # # They are all esentially the same as the AUTOFS_IOC_PROTOVER in their # requirements and so should be fine. # # include/linux/compat_ioctl.h # 2004/05/14 23:11:51-07:00 akpm@osdl.org +4 -0 # autofs4 compat ioctls # # ChangeSet # 2004/05/15 10:15:15-07:00 akpm@osdl.org # [PATCH] autofs4 race fix # # From: Ian Kent # # The case where two process similtaneously trigger a mount in autofs4 can # cause multiple requests to the daemon for the same mount. The daemon # handles this OK but it's possible an incorrect error to be returned. For # this reason I believe it is better to change the spin lock to a semaphore # in waitq.c. This makes the second and subsequent request wait on the q as # ther supposed to. # # fs/autofs4/waitq.c # 2004/05/14 23:30:07-07:00 akpm@osdl.org +15 -12 # autofs4 race fix # # fs/autofs4/inode.c # 2004/05/14 23:30:07-07:00 akpm@osdl.org +1 -0 # autofs4 race fix # # fs/autofs4/autofs_i.h # 2004/05/14 23:30:07-07:00 akpm@osdl.org +1 -0 # autofs4 race fix # # ChangeSet # 2004/05/15 10:15:04-07:00 akpm@osdl.org # [PATCH] autofs4: readdir futureproofing # # From: Ian Kent # # Needed for support coming development plans. # # include/linux/auto_fs4.h # 2004/05/14 23:11:51-07:00 akpm@osdl.org +5 -3 # autofs4: readdir futureproofing # # fs/autofs4/root.c # 2004/05/14 23:11:51-07:00 akpm@osdl.org +72 -1 # autofs4: readdir futureproofing # # fs/autofs4/autofs_i.h # 2004/05/14 23:29:28-07:00 akpm@osdl.org +2 -0 # autofs4: readdir futureproofing # # ChangeSet # 2004/05/15 10:14:54-07:00 akpm@osdl.org # [PATCH] autofs4: add ioctl to query unmountability # # From: Ian Kent # # Add ioctl to find out if autofs mount can be umounted. When the daemon # discovers this it's past the point of no return. # # include/linux/auto_fs4.h # 2004/05/14 23:29:28-07:00 akpm@osdl.org +1 -0 # autofs4: add ioctl to query unmountability # # fs/autofs4/root.c # 2004/05/14 23:29:28-07:00 akpm@osdl.org +20 -0 # autofs4: add ioctl to query unmountability # # ChangeSet # 2004/05/15 10:14:43-07:00 akpm@osdl.org # [PATCH] autofs4: fix handling of chdir and chroot # # From: # # Pushed changes in sys_chdir and sys_chroot into the revalidate/lookup by # using nameidata hint. # # fs/open.c # 2004/05/14 23:11:51-07:00 akpm@osdl.org +0 -52 # autofs4: fix handling of chdir and chroot # # fs/autofs4/root.c # 2004/05/14 23:29:28-07:00 akpm@osdl.org +3 -50 # autofs4: fix handling of chdir and chroot # # ChangeSet # 2004/05/15 10:14:32-07:00 akpm@osdl.org # [PATCH] autofs4: readdir fixes # # From: Ian Kent # # a. Implement readdir and friends for directory lookup for late mounting. # This is done largely by replacing a catch all condition in # try_to_fill_dentry with appropriate cases. # # b. Add path calc. function in waitq.c to get extended path to return to # daemon (for direct mounts). # # c. Add revalidate calls to sys_chdir and sys_chroot so that pwd lookups # work correctly. # # d. Add ioctl to retrieve minor version for automount daemon (and me) to # recognise module fix level. Bumped minor version to 5. # # From: Hugh Dickins # # After chdir (or chroot) to non-existent directory on 2.6.5-mm5, you can no # longer unmount filesystem holding working directory (or root). # # include/linux/auto_fs4.h # 2004/05/14 23:29:28-07:00 akpm@osdl.org +3 -0 # autofs4: readdir fixes # # fs/open.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +52 -0 # autofs4: readdir fixes # # fs/autofs4/waitq.c # 2004/05/14 23:29:28-07:00 akpm@osdl.org +53 -17 # autofs4: readdir fixes # # fs/autofs4/root.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +284 -44 # autofs4: readdir fixes # # fs/autofs4/inode.c # 2004/05/14 23:29:28-07:00 akpm@osdl.org +1 -1 # autofs4: readdir fixes # # fs/autofs4/expire.c # 2004/05/14 23:11:51-07:00 akpm@osdl.org +1 -1 # autofs4: readdir fixes # # fs/autofs4/autofs_i.h # 2004/05/14 23:29:28-07:00 akpm@osdl.org +9 -1 # autofs4: readdir fixes # # ChangeSet # 2004/05/15 10:14:21-07:00 akpm@osdl.org # [PATCH] autofs4: may_umount_tree() cleanup # # From: # # Patch to sync 2.6.6-rc2-mm2 with the result of my discussion with # Christoph Hellwig. # # Difference is that Christoph realised that merging may_umount_tree and # may_umount was not worth it. They are now seperate functions. # # fs/namespace.c # 2004/05/14 23:11:51-07:00 akpm@osdl.org +12 -23 # autofs4: may_umount_tree() cleanup # # ChangeSet # 2004/05/15 10:14:11-07:00 akpm@osdl.org # [PATCH] autofs4: expiry refcount fixes # # From: Ian Kent # # This patch is the result of an e-mail discussion with Soni Maneesh. He felt # that the use of reference counts in the expire module is unreliable (in the # presence of rcu) and suggested it should use standard VFS calls where # possible. This has been done. Once the boundary in autofs is reached we # have no choice but to resort using reference counts (but under the # vfsmount_lock). # # # After review by hch: # # - renamed autofs4_may_umount to __may_umount_tree, made it static and moved # it to namespace.c. # # - added stub function may_umount_tree with description # # - altered may_umount to use above stub function and added little description # # - added may_umount_tree prototype to fs.h # # - removed the EXPORT_SYMBOL for vfsmount_lock # # - updated expire.c to suit # # include/linux/fs.h # 2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -0 # autofs4: expiry refcount fixes # # include/linux/auto_fs4.h # 2004/05/14 23:29:29-07:00 akpm@osdl.org +4 -0 # autofs4: expiry refcount fixes # # fs/namespace.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +74 -4 # autofs4: expiry refcount fixes # # fs/autofs4/expire.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +215 -130 # autofs4: expiry refcount fixes # # fs/autofs4/autofs_i.h # 2004/05/14 23:29:29-07:00 akpm@osdl.org +20 -0 # autofs4: expiry refcount fixes # # ChangeSet # 2004/05/15 10:14:00-07:00 akpm@osdl.org # [PATCH] autofs4: locking rework # # From: Ian Kent # # Remove BKL from autofs4 module and add spinlock to serialise access to the # automount daemon communication waitq. # # Locking requirements are different in 2.6 and so I'm seeking comments and # suggestions on this. I have taken a rather heavy handed approach to this in # the patch. For example, the VFS operations that directly change the # filesystem, such as autofs4_mkdir etc, hold the inode semaphore on entry so # the BKL has been removed. I can't see why two locking mechanisms are needed. # Rather than add locking all over the place, I'm looking for justification # it's needed, as I don't see it myself. # # fs/autofs4/waitq.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +22 -10 # autofs4: locking rework # # fs/autofs4/root.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +6 -32 # autofs4: locking rework # # fs/autofs4/autofs_i.h # 2004/05/14 23:29:29-07:00 akpm@osdl.org +1 -1 # autofs4: locking rework # # ChangeSet # 2004/05/15 10:13:49-07:00 akpm@osdl.org # [PATCH] autofs4: printk cleanups and memory leak fix # # From: Ian Kent # # - Correct text in DPRINTK messages and comments, a little reformating and # correct URL location for autofs v4 in Kconfig message. # # - Fix error-path memory leak in autofs4_fill_super() # # fs/autofs4/waitq.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +10 -9 # autofs4: printk cleanups and memory leak fix # # fs/autofs4/root.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +11 -12 # autofs4: printk cleanups and memory leak fix # # fs/autofs4/inode.c # 2004/05/14 23:29:29-07:00 akpm@osdl.org +6 -1 # autofs4: printk cleanups and memory leak fix # # fs/Kconfig # 2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -1 # autofs4: printk cleanups and memory leak fix # # ChangeSet # 2004/05/15 10:13:39-07:00 akpm@osdl.org # [PATCH] autofs4: dnotify + autofs may create signal/restart syscall loop # # From: Ian Kent # # From: Jeff Mahoney # # I saw a recent bug report that showed when a process set up a dnotify # against the autofs root and then attempted an access(2) call inside the # autofs namespace on a mount that would fail, it would create a # signal/restart loop. # # The cause is that the autofs code checks to see if any signals are pending # after it waits on a response from the autofs daemon. If it finds any, it # assumes that autofs_wait was interrupted, and that it should return # -ERESTARTNOINTR. The problem with this is that a signal_pending(current) # check will return true if *any* signals were received, not just if a signal # that interrupted the wait was received. autofs_wait explicitly blocks all # signals except for SIGKILL, SIGQUIT, and SIGINT before calling # interruptible_sleep_on. # # The effect is that if a dnotify is set against the autofs root, when the # autofs daemon creates the directory, a dnotify event will be sent to the # originating process. Since the code in autofs_root_lookup doesn't check to # see what signals are actually pending, it bails early, telling the caller # to try again. The loop goes on forever until interrupted via one of the # actual interrupting signals. # # The following patch makes both autofs_root_lookup and autofs4_root_lookup # verify that one of its defined "shutdown" signals are pending before # bailing out early. Any other signal should be delivered later, as # expected. It doesn't matter if the signal occured outside of the sleep in # autofs_wait. The calling process will either go away or try again. # # fs/autofs4/root.c # 2004/05/14 23:29:30-07:00 akpm@osdl.org +8 -2 # autofs4: dnotify + autofs may create signal/restart syscall loop # # fs/autofs4/inode.c # 2004/05/14 23:29:30-07:00 akpm@osdl.org +2 -0 # autofs4: dnotify + autofs may create signal/restart syscall loop # # ChangeSet # 2004/05/15 10:13:28-07:00 akpm@osdl.org # [PATCH] Use -msoft-float # # From: Dave Jones # # To catch accidental usage of floating point. Has been in -mm for ages. # # arch/i386/Makefile # 2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -1 # Use -msoft-float # # ChangeSet # 2004/05/15 10:13:17-07:00 akpm@osdl.org # [PATCH] sched: reduce node balancing interval # # From: Nick Piggin # # From: Suresh Siddha # # Node max rebalance interval is too large. It is currently dependent on # number of online cpus. For 16 cpu system, max node balance interval in # busy case is 32 seconds. Agreed that it will use max 32 seconds only when # it doesn't find imbalance for a long time. But this will lead to slow # response time in cases where load runs for a second with no imbalance and # suddently creates an imbalance. My patch makes the busy max node rebalance # interval equal to the base [scheduler]. # # include/linux/sched.h # 2004/05/14 23:29:22-07:00 akpm@osdl.org +1 -1 # sched: reduce node balancing interval # # ChangeSet # 2004/05/15 10:13:06-07:00 akpm@osdl.org # [PATCH] sched: less locking in balancing # # From: Nick Piggin # # Analysis and basic idea from Suresh Siddha # # "This small change in load_balance() brings the performance back upto base # scheduler(infact I see a ~1.5% performance improvement now). Basically # this fix removes the unnecessary double_lock.." # # Workload is SpecJBB on 16-way Altix. # # kernel/sched.c # 2004/05/14 23:11:50-07:00 akpm@osdl.org +13 -5 # sched: less locking in balancing # # ChangeSet # 2004/05/15 10:12:56-07:00 akpm@osdl.org # [PATCH] sched: fix scheduler for unsynched processor sched_clock # # From: Nick Piggin # # Fine-tune the unsynched sched_clock handling. # # Basically, you need to be careful about ensuring timestamps get correctly # adjusted when moving CPUs, and you *can't* look at your unadjusted # sched_clock() and a remote task's ->timestamp and try to come up with # anything meaningful. # # I think this second problem will really hit hard in the activate_task path # on systems with unsynched sched_clock when you're waking up a remote task, # which happens very often. Andi, I thought some Opterons have unsynched # tscs? Maybe this is causing your unexplained bad interactivity? # # Another problem is a fixup in pull_task. When adjusting ->timestamp from # one processor to another, you must use timestamp_last_tick for the local # processor too. Using sched_clock() will cause ->timestamp to creep # forward. # # A final small fix is for sync wakeups. They were using __activate_task for # some reason, thus they don't get credited for sleeping at all AFAIKS. # # And another thing, do we want to #ifdef timestamp_last_tick so it doesn't # show on UP? # # kernel/sched.c # 2004/05/14 23:29:30-07:00 akpm@osdl.org +28 -10 # sched: fix scheduler for unsynched processor sched_clock # # ChangeSet # 2004/05/15 10:12:44-07:00 akpm@osdl.org # [PATCH] sched: improved cpu_load rounding # # From: Nick Piggin # # "Siddha, Suresh B" noticed a problem in the # cpu_load averaging where the integer truncation could sometimes cause cpu_load # to never quite reach its target. # # I'm not sure that you could demonstrate a real world problem, but I quite # like this fix. # # kernel/sched.c # 2004/05/14 23:29:30-07:00 akpm@osdl.org +7 -0 # sched: improved cpu_load rounding # # ChangeSet # 2004/05/15 10:12:33-07:00 akpm@osdl.org # [PATCH] Fix writeback_inodes-vs-umount race # # Fix bug identified by Chris Mason. # # If writeback_inodes is left holding a ref on the superblock's last inode then # the superblock list walk can race with umount and the superblock can be # released. # # Take and put a ref against the superblock to fix that. # # include/linux/fs.h # 2004/05/14 23:29:29-07:00 akpm@osdl.org +1 -0 # Fix writeback_inodes-vs-umount race # # fs/super.c # 2004/05/14 23:11:49-07:00 akpm@osdl.org +18 -3 # Fix writeback_inodes-vs-umount race # # fs/fs-writeback.c # 2004/05/14 23:11:49-07:00 akpm@osdl.org +4 -0 # Fix writeback_inodes-vs-umount race # # ChangeSet # 2004/05/15 10:12:23-07:00 akpm@osdl.org # [PATCH] x86: stack dumps using frame pointers # # From: Adam Litke # # Teach the x86 stack tracing code to use frame pointers, if they are available. # It eliminates all the false-positives in the normal stack traces. # # This is a big improvement, and -fomit-frame-pointer seems to make no # difference at all to generated code size. Maybe we should kill off # -fomit-frame-pointer. # # arch/i386/kernel/traps.c # 2004/05/14 23:11:49-07:00 akpm@osdl.org +58 -15 # x86: stack dumps using frame pointers # # ChangeSet # 2004/05/15 13:09:25-04:00 jgarzik@redhat.com # [libata] internal cleanups # # Remove unused 'done_late' arg to ata_qc_complete(), which was never # useful in 2.4, and never used at all in 2.6. # # This allows us to eliminate the same arg from ata_dma_complete(), # and also make it more correct by passing the command rather than # the ATA port structure as arg0. # # include/linux/libata.h # 2004/05/15 13:06:54-04:00 jgarzik@redhat.com +1 -1 # [libata] internal cleanups # # Remove unused 'done_late' arg to ata_qc_complete(), which was never # useful in 2.4, and never used at all in 2.6. # # This allows us to eliminate the same arg from ata_dma_complete(), # and also make it more correct by passing the command rather than # the ATA port structure as arg0. # # drivers/scsi/sata_sx4.c # 2004/05/15 13:06:54-04:00 jgarzik@redhat.com +5 -7 # [libata] internal cleanups # # Remove unused 'done_late' arg to ata_qc_complete(), which was never # useful in 2.4, and never used at all in 2.6. # # This allows us to eliminate the same arg from ata_dma_complete(), # and also make it more correct by passing the command rather than # the ATA port structure as arg0. # # drivers/scsi/sata_promise.c # 2004/05/15 13:06:54-04:00 jgarzik@redhat.com +5 -7 # [libata] internal cleanups # # Remove unused 'done_late' arg to ata_qc_complete(), which was never # useful in 2.4, and never used at all in 2.6. # # This allows us to eliminate the same arg from ata_dma_complete(), # and also make it more correct by passing the command rather than # the ATA port structure as arg0. # # drivers/scsi/libata-core.c # 2004/05/15 13:06:54-04:00 jgarzik@redhat.com +13 -17 # [libata] internal cleanups # # Remove unused 'done_late' arg to ata_qc_complete(), which was never # useful in 2.4, and never used at all in 2.6. # # This allows us to eliminate the same arg from ata_dma_complete(), # and also make it more correct by passing the command rather than # the ATA port structure as arg0. # # ChangeSet # 2004/05/15 12:47:04-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/sata-hacks/atapi-hacks-2.6 # into redhat.com:/spare/repo/libata-2.6 # # include/linux/libata.h # 2004/05/15 12:47:01-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/15 09:42:40-07:00 shai@ftcon.com # [PATCH] Multiple (ICH3) IDE-controllers in a system # # This fixes a problem with multiple IDE controllers in a system. # # The problem is that pcibios_fixups table (in arch/i386/pci/fixup.c) uses # the pci_fixup_ide_trash() quirk for Intel's ICH3 (my case specifically # 8086:248b). This clears any bogus BAR information set up by the BIOS. # # In a system which has multiple ICH3's can't use any of the IDE # controllers beside the one on the first ICH3. # # Anyhow, the fix is to make sure pci_fixup_ide_trash resets the BARs only # for first time being called, so the subsequent IDE controllers will use # the BIOS BARs. This is better than "loosing" all these IDE controllers # in the case their BARs set right. # # The issue discussed and agreed with Bartlomiej Zolnierkiewicz (see below). # # arch/i386/pci/fixup.c # 2004/05/07 01:45:31-07:00 shai@ftcon.com +9 -0 # Multiple (ICH3) IDE-controllers in a system # # ChangeSet # 2004/05/15 15:32:59+01:00 robin.farine@org.rmk.(none) # [ARM PATCH] 1879/1: fix a few xscale "drain write & fill buffer" instructions # # Patch from Robin Farine # # Fix the xscale cache handling routines that were invalidating a D # cache line instead of draining the write & fill buffer as intended. # # arch/arm/mm/proc-xscale.S # 2004/05/15 01:00:00+01:00 robin.farine@org.rmk.(none) +3 -3 # [PATCH] 1879/1: fix a few xscale "drain write & fill buffer" instructions # # ChangeSet # 2004/05/15 15:26:45+01:00 catalin.marinas@com.rmk.(none) # [ARM PATCH] 1883/1: Bit 4 in pmd should be 0 for the ARMv6 architecture # # Patch from Catalin Marinas # # Unlike the v5 architecture, the ARM1136 requires that BIT4 is 0 in # the first level page descriptor (ARM1136 TRM, page 6-39). It works # at the moment but it might break future v6 cores. # # arch/arm/mm/mm-armv.c # 2004/05/14 13:52:24+01:00 catalin.marinas@com.rmk.(none) +19 -7 # [PATCH] 1883/1: Bit 4 in pmd should be 0 for the ARMv6 architecture # # ChangeSet # 2004/05/15 15:19:34+01:00 catalin.marinas@com.rmk.(none) # [ARM PATCH] 1882/1: Fixes in the v6_dma_(invalidate|flush)_range functions # # Patch from Catalin Marinas # # The v6_dma_invalidate_range - the "mcr" instruction for draining # # the write buffer requires r0 == 0. A "cmp" instruction for # # testing the end address is missing in the v6_dma_flush_range # # function. # # arch/arm/mm/cache-v6.S # 2004/05/13 17:45:41+01:00 catalin.marinas@com.rmk.(none) +2 -0 # [PATCH] 1882/1: Fixes in the v6_dma_(invalidate|flush)_range functions # # ChangeSet # 2004/05/15 15:13:48+01:00 catalin.marinas@com.rmk.(none) # [ARM PATCH] 1881/1: Illegal strex instruction generated by gcc # # Patch from Catalin Marinas # # The _raw_write_(try)lock functions in include/asm-arm/spinlock.h # # should use the early clobber modifier (&) for the "tmp" register. # # A newer compiler (gcc-3.4.0) generates an "strexeq %0, %1, [%2]" # # instruction where %0 is the same as %2, which is illegal. # # include/asm-arm/spinlock.h # 2004/01/30 13:35:44+00:00 catalin.marinas@com.rmk.(none) +2 -2 # [PATCH] 1881/1: Illegal strex instruction generated by gcc # # ChangeSet # 2004/05/15 15:07:10+01:00 catalin.marinas@com.rmk.(none) # [ARM PATCH] 1880/1: cache_type is uninitialised in the blockops_check() function # # Patch from Catalin Marinas # # In the blockops_check() function, cache_type is uninitialised # # because an "mcr" instruction is used instead of "mrc". # # arch/arm/mm/blockops.c # 2004/01/27 17:34:39+00:00 catalin.marinas@com.rmk.(none) +1 -1 # [PATCH] 1880/1: cache_type is uninitialised in the blockops_check() function # # arch/ppc64/kernel/cpu_setup_power4.S # 2004/05/15 00:33:10-07:00 benh@kernel.crashing.org +6 -2 # ppc64: Add proper SMP init on dual 970FX based machines # # ChangeSet # 2004/05/14 23:11:43-07:00 torvalds@ppc970.osdl.org # Fix typo nonsense test in radeon PMAC backlight code. # # drivers/video/aty/radeon_base.c # 2004/05/14 23:11:38-07:00 torvalds@ppc970.osdl.org +1 -1 # Fix typo nonsense test in radeon PMAC backlight code. # # ChangeSet # 2004/05/14 23:01:25-07:00 torvalds@ppc970.osdl.org # Make dev_dbg() "use" it's 'dev' argument even when not debugging. # # This avoids warnings about unused variables. # # include/linux/device.h # 2004/05/14 23:01:20-07:00 torvalds@ppc970.osdl.org +1 -1 # Make dev_dbg() "use" it's 'dev' argument even when not debugging. # # This avoids warnings about unused variables. # # ChangeSet # 2004/05/15 01:03:42-04:00 jgarzik@redhat.com # [sound/oss i810] bump driver to version 1.00 # # sound/oss/i810_audio.c # 2004/05/15 01:03:36-04:00 jgarzik@redhat.com +2 -2 # [sound/oss i810] bump driver to version 1.00 # # ChangeSet # 2004/05/14 21:53:01-07:00 aia21@cam.ac.uk # [PATCH] x86_64 has buggy ffs() implementation # # x86_64 has an incorrect ffs() implementation. The asm uses "g" instead # of "rm" for the bsfl instruction. (This was spotted by Yuri Per.) # # bsfl does not accept constant values but only memory or register ones. # On i386 the correct "rm" is used. # # This causes NTFS build to fail as gcc optimizes a variable into a # constant and ffs() then fails to assemble. # # include/asm-x86_64/bitops.h # 2004/05/12 06:41:23-07:00 aia21@cam.ac.uk +1 -1 # x86_64 has buggy ffs() implementation # # ChangeSet # 2004/05/14 21:45:59-07:00 kkeil@suse.de # [PATCH] fix typo in avm_cs PCMCIA AVM B1 cardservice driver # # this trivial fix makes the AVM B1 PCMCIA cards work with 2.6 # # drivers/isdn/hardware/avm/avm_cs.c # 2004/05/13 11:33:17-07:00 kkeil@suse.de +5 -5 # fix typo in avm_cs PCMCIA AVM B1 cardservice driver # # ChangeSet # 2004/05/15 00:18:55-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/linux-2.6 # into redhat.com:/spare/repo/i810-audio-2.6 # # sound/oss/i810_audio.c # 2004/05/15 00:18:51-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/14 20:47:15-07:00 santil@us.ibm.com # [PATCH] PowerPC Virtual Ethernet links to /sys/class/net/ethX # # This adds links to the driver and device inside /sys/class/net/ethX for # PowerPC Virtual Ethernet devices. # # drivers/net/ibmveth.c # 2004/05/14 05:29:52-07:00 santil@us.ibm.com +1 -0 # PowerPC Virtual Ethernet links to /sys/class/net/ethX # # ChangeSet # 2004/05/14 20:47:05-07:00 santil@us.ibm.com # [PATCH] PowerPC Virtual Ethernet duplicate MAC addresses # # This fixes a bug where different partitions were assigned the same MAC # address. Also, according to Anton, gcc 3.5 didn't like our mac_addr_p # gymnastics, so this ends up fixing that as well. # # drivers/net/ibmveth.c # 2004/05/14 05:32:26-07:00 santil@us.ibm.com +4 -4 # PowerPC Virtual Ethernet duplicate MAC addresses # # ChangeSet # 2004/05/14 20:07:57-07:00 benh@kernel.crashing.org # [PATCH] ppc64: Add proper SMP init on dual 970FX based machines # # This patch fixes SMP boot on Apple Xserve G5 # # ChangeSet # 2004/05/14 19:56:29-07:00 akpm@osdl.org # [PATCH] ppc64 iSeries: allow read only virtual disks # # From: Stephen Rothwell # # It is possible to attach a virtual disk to a logical partition on an iSeries # machine so that it is read only to the partition. This patch allows Linux to # use such virtual disks. # # drivers/block/viodasd.c # 2004/05/14 19:00:27-07:00 akpm@osdl.org +22 -7 # ppc64 iSeries: allow read only virtual disks # # ChangeSet # 2004/05/14 19:56:19-07:00 akpm@osdl.org # [PATCH] ppc64: strengthen I/O and memory barriers # # From: Paul Mackerras # # After I sent the recent patch to include/asm-ppc64/io.h which put stronger # barriers in the I/O accessor macros, Paul McKenney pointed out to me that a # writex/outx could still slide out from inside a spinlocked region. This patch # makes the barriers a bit stronger so that this can't happen. It means that we # need to use a sync instruction for wmb (a full "heavyweight" sync), since # drivers rely on wmb for ordering between writes to system memory and writes to # a device. # # I have left smb_wmb() as a lighter-weight barrier that orders stores, and # doesn't impose an ordering between cacheable and non-cacheable accesses (the # amusingly-named eieio instruction). I am assuming here that smp_wmb is only # used for ordering stores to system memory so that another cpu will see them in # order. It can't be used for enforcing any ordering that a device will see, # because it is just a gcc barrier on UP. # # This also changes the spinlock/rwlock unlock code to use lwsync ("light-weight # sync") rather than eieio, since eieio doesn't order loads, and we need to # ensure that loads stay inside the spinlocked region. # # include/asm-ppc64/system.h # 2004/05/14 19:00:27-07:00 akpm@osdl.org +11 -7 # ppc64: strengthen I/O and memory barriers # # include/asm-ppc64/spinlock.h # 2004/05/14 19:00:27-07:00 akpm@osdl.org +3 -3 # ppc64: strengthen I/O and memory barriers # # include/asm-ppc64/io.h # 2004/05/14 19:00:27-07:00 akpm@osdl.org +15 -14 # ppc64: strengthen I/O and memory barriers # # arch/ppc64/kernel/misc.S # 2004/05/14 19:00:27-07:00 akpm@osdl.org +15 -5 # ppc64: strengthen I/O and memory barriers # # ChangeSet # 2004/05/14 19:56:08-07:00 akpm@osdl.org # [PATCH] ppc64: Kconfig bits for CONFIG_SPINLINE # # From: Paul Mackerras # # When I sent the patch to uninline the spinlocks, I inadvertently left out # the change to arch/ppc64/Kconfig which defines the config symbol for # inlining the locks (CONFIG_SPINLINE now). This patch adds it. It also # adds a symbol CONFIG_PPC_SPLPAR which enables the code for calling the # hypervisor on shared-processor logically-partitioned system to yield the # physical processor to the lock holder when spinning. (The code that # depends on this symbol is already present in arch/ppc64/lib/locks.c.) # # arch/ppc64/Kconfig # 2004/05/14 19:00:27-07:00 akpm@osdl.org +20 -0 # ppc64: Kconfig bits for CONFIG_SPINLINE # # ChangeSet # 2004/05/14 19:55:58-07:00 akpm@osdl.org # [PATCH] ppc64: remove iseries interrupt recursion workaround # # From: Anton Blanchard # # It turns out we do avoid irq recursion on iseries so remove the workaround. # # arch/ppc64/kernel/irq.c # 2004/05/14 19:00:27-07:00 akpm@osdl.org +0 -4 # ppc64: remove iseries interrupt recursion workaround # # ChangeSet # 2004/05/14 19:55:47-07:00 akpm@osdl.org # [PATCH] ppc64: NVRAM fixes # # From: Anton Blanchard # # We check nvram_fetch/nvram_store against -1, so better not make these # unsigned. # # arch/ppc64/kernel/pSeries_nvram.c # 2004/05/14 19:00:27-07:00 akpm@osdl.org +1 -1 # ppc64: NVRAM fixes # # ChangeSet # 2004/05/14 19:55:37-07:00 akpm@osdl.org # [PATCH] ppc64: align some heavily used variables # # From: Anton Blanchard # # Based on feedback from the hardware guys align jiffies and tb_last_stamp. # We update both regularly and there are other read only, heavily accessed # things that share those cachelines. # # arch/ppc64/kernel/time.c # 2004/05/14 19:00:26-07:00 akpm@osdl.org +2 -2 # ppc64: align some heavily used variables # # ChangeSet # 2004/05/14 19:55:26-07:00 akpm@osdl.org # [PATCH] ppc64: set MSR_RI in iseries exception code # # From: Anton Blanchard # # We need to set MSR_RI in iseries exception prolog. # # arch/ppc64/kernel/head.S # 2004/05/14 19:00:26-07:00 akpm@osdl.org +3 -0 # ppc64: set MSR_RI in iseries exception code # # ChangeSet # 2004/05/14 19:55:15-07:00 akpm@osdl.org # [PATCH] ppc64: fix radix tree allocation under spinlock # # From: Anton Blanchard # # We were allocating radix tree nodes in the interrupt code with GFP_KERNEL # under a spinlock. Change it to GFP_ATOMIC. # # arch/ppc64/kernel/xics.c # 2004/05/14 19:00:26-07:00 akpm@osdl.org +1 -1 # ppc64: fix radix tree allocation under spinlock # # ChangeSet # 2004/05/14 19:55:05-07:00 akpm@osdl.org # [PATCH] ppc32: Move declarations into headers # # From: Paul Mackerras # # The patch below moves some declarations from C files into the appropriate # header file in include/asm-ppc (and removes an unused local variable in a # function). # # include/asm-ppc/system.h # 2004/05/14 19:00:26-07:00 akpm@osdl.org +4 -0 # ppc32: Move declarations into headers # # include/asm-ppc/pgtable.h # 2004/05/14 19:00:26-07:00 akpm@osdl.org +2 -0 # ppc32: Move declarations into headers # # arch/ppc/mm/fault.c # 2004/05/14 19:00:26-07:00 akpm@osdl.org +0 -7 # ppc32: Move declarations into headers # # arch/ppc/kernel/traps.c # 2004/05/14 19:00:26-07:00 akpm@osdl.org +0 -3 # ppc32: Move declarations into headers # # ChangeSet # 2004/05/14 19:54:54-07:00 akpm@osdl.org # [PATCH] ppc32: Fix pmac compile after OCP changes # # From: Paul Mackerras # # Matt Porter's recent changes broke the compile for non-4xx ppc32 systems, # unfortunately. I get an error that mfdcr is not defined in # include/asm-ppc/ocp.h when compiling for powermac (reasonable, since the # mfdcr instruction only exists on 4xx processors). The patch below fixes # it. # # include/asm-ppc/ocp.h # 2004/05/14 19:00:26-07:00 akpm@osdl.org +3 -0 # ppc32: Fix pmac compile after OCP changes # # ChangeSet # 2004/05/14 19:54:43-07:00 akpm@osdl.org # [PATCH] PPC32: PPC44x ports for new OCP # # From: Matt Porter # # Merge all current PPC44x ports against new OCP. # # arch/ppc/platforms/4xx/ocotea.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +7 -4 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ocotea.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +60 -16 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ibm440gx.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +2 -51 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ibm440gx.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +200 -20 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ibm440gp.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -39 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ibm440gp.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +133 -13 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ebony.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -2 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ebony.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +13 -11 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/ash.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -4 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/Makefile # 2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -2 # PPC32: PPC44x ports for new OCP # # arch/ppc/platforms/4xx/Kconfig # 2004/05/14 19:00:25-07:00 akpm@osdl.org +14 -3 # PPC32: PPC44x ports for new OCP # # ChangeSet # 2004/05/14 19:54:32-07:00 akpm@osdl.org # [PATCH] PPC32: PPC40x ports for new OCP # # From: Matt Porter # # Merge all current PPC40x ports against new OCP. # # arch/ppc/platforms/4xx/walnut.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -0 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/sycamore.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +13 -4 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/redwood5.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -2 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibmstbx25.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +43 -14 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibmstb4.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -1 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibmstb4.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +69 -13 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibmnp405h.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -23 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibmnp405h.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +153 -15 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibm405gpr.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -15 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibm405gpr.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +90 -9 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibm405gp.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -19 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ibm405gp.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +100 -15 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ep405.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -0 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/cpci405.c # 2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -0 # PPC32: PPC40x ports for new OCP # # arch/ppc/platforms/4xx/ash.h # 2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -1 # PPC32: PPC40x ports for new OCP # # ChangeSet # 2004/05/14 19:54:21-07:00 akpm@osdl.org # [PATCH] PPC32: Update 4xx defconfigs # # From: Matt Porter # # Update all current 4xx defconfigs for new OCP. # # arch/ppc/configs/walnut_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +11 -3 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/sycamore_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +202 -102 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/redwood6_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +72 -60 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/redwood5_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +73 -72 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/ocotea_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +77 -69 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/ep405_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +83 -97 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/ebony_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +6 -0 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/cpci405_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +79 -89 # PPC32: Update 4xx defconfigs # # arch/ppc/configs/ash_defconfig # 2004/05/14 19:00:24-07:00 akpm@osdl.org +217 -121 # PPC32: Update 4xx defconfigs # # ChangeSet # 2004/05/14 19:54:10-07:00 akpm@osdl.org # [PATCH] PPC32: 4xx core fixes and 440gx PIC support # # From: Matt Porter # # Merge misc. 4xx core fixes and support for the new cascade scheme in the # 440gx. # # arch/ppc/syslib/ppc4xx_pic.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +110 -35 # PPC32: 4xx core fixes and 440gx PIC support # # arch/ppc/syslib/ppc405_pci.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -8 # PPC32: 4xx core fixes and 440gx PIC support # # arch/ppc/kernel/ppc_ksyms.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +1 -1 # PPC32: 4xx core fixes and 440gx PIC support # # arch/ppc/boot/simple/embed_config.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +2 -2 # PPC32: 4xx core fixes and 440gx PIC support # # ChangeSet # 2004/05/14 19:53:59-07:00 akpm@osdl.org # [PATCH] PPC32: IBM PPC4xx-specific OCP support # # From: Matt Porter # # Merge PPC4xx-specific OCP support for new OCP core. # # include/asm-ppc/ibm_ocp.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +163 -0 # PPC32: IBM PPC4xx-specific OCP support # # include/asm-ppc/ibm_ocp.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-ppc/ibm_ocp.h # # arch/ppc/syslib/ibm_ocp.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +9 -0 # PPC32: IBM PPC4xx-specific OCP support # # arch/ppc/syslib/ibm_ocp.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm_ocp.c # # ChangeSet # 2004/05/14 19:53:48-07:00 akpm@osdl.org # [PATCH] PPC32: PPC44x lib support # # From: Matt Porter # # Merge PPC44x library support against new OCP. # # arch/ppc/syslib/ibm44x_common.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +36 -0 # PPC32: PPC44x lib support # # arch/ppc/syslib/ibm440gx_common.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +54 -0 # PPC32: PPC44x lib support # # include/asm-ppc/ibm4xx.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +15 -2 # PPC32: PPC44x lib support # # include/asm-ppc/ibm44x.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +115 -21 # PPC32: PPC44x lib support # # arch/ppc/syslib/ibm44x_common.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm44x_common.h # # arch/ppc/syslib/ibm440gx_common.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm440gx_common.h # # arch/ppc/syslib/ibm440gx_common.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +212 -0 # PPC32: PPC44x lib support # # arch/ppc/syslib/ibm440gp_common.h # 2004/05/14 19:00:24-07:00 akpm@osdl.org +3 -13 # PPC32: PPC44x lib support # # arch/ppc/syslib/ibm440gp_common.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +3 -3 # PPC32: PPC44x lib support # # arch/ppc/syslib/Makefile # 2004/05/14 19:00:24-07:00 akpm@osdl.org +2 -0 # PPC32: PPC44x lib support # # arch/ppc/syslib/ibm440gx_common.c # 2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm440gx_common.c # # ChangeSet # 2004/05/14 19:53:37-07:00 akpm@osdl.org # [PATCH] PPC32: Bubinga/405EP for new OCP # # From: Matt Porter # # Merge Bubinga/405EP support against new OCP. # # arch/ppc/platforms/4xx/ibm405ep.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +148 -0 # PPC32: Bubinga/405EP for new OCP # # arch/ppc/platforms/4xx/ibm405ep.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +134 -0 # PPC32: Bubinga/405EP for new OCP # # arch/ppc/platforms/4xx/bubinga.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +69 -0 # PPC32: Bubinga/405EP for new OCP # # arch/ppc/platforms/4xx/bubinga.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +263 -0 # PPC32: Bubinga/405EP for new OCP # # arch/ppc/configs/bubinga_defconfig # 2004/05/14 19:00:23-07:00 akpm@osdl.org +593 -0 # PPC32: Bubinga/405EP for new OCP # # arch/ppc/platforms/4xx/ibm405ep.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/ibm405ep.h # # arch/ppc/platforms/4xx/ibm405ep.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/ibm405ep.c # # arch/ppc/platforms/4xx/bubinga.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/bubinga.h # # arch/ppc/platforms/4xx/bubinga.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/bubinga.c # # arch/ppc/configs/bubinga_defconfig # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/configs/bubinga_defconfig # # ChangeSet # 2004/05/14 19:53:26-07:00 akpm@osdl.org # [PATCH] PPC32: New OCP core support (updated) # # From: Matt Porter # # New OCP infrastructure ported from 2.4 along with several enhancements. # Updated patch with comments from hch and Valdis. # # arch/ppc/syslib/ocp.c # 2004/05/14 19:53:20-07:00 akpm@osdl.org +493 -0 # # include/asm-ppc/ocp_ids.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +17 -50 # PPC32: New OCP core support (updated) # # include/asm-ppc/ocp.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +119 -120 # PPC32: New OCP core support (updated) # # arch/ppc/syslib/ocp.c # 2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ocp.c # # arch/ppc/syslib/Makefile # 2004/05/14 19:00:23-07:00 akpm@osdl.org +1 -0 # PPC32: New OCP core support (updated) # # arch/ppc/kernel/setup.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +7 -0 # PPC32: New OCP core support (updated) # # arch/ppc/Makefile # 2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -1 # PPC32: New OCP core support (updated) # # arch/ppc/Kconfig # 2004/05/14 19:00:23-07:00 akpm@osdl.org +1 -1 # PPC32: New OCP core support (updated) # # BitKeeper/deleted/.del-ocp-probe.c~bab4d61fdc04beeb # 2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0 # Delete: arch/ppc/ocp/ocp-probe.c # # BitKeeper/deleted/.del-ocp-driver.c~a891b4ae6c107073 # 2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0 # Delete: arch/ppc/ocp/ocp-driver.c # # BitKeeper/deleted/.del-ocp.c~7c0024f74323dc24 # 2004/05/14 19:53:19-07:00 akpm@osdl.org +0 -0 # Delete: arch/ppc/ocp/ocp.c # # BitKeeper/deleted/.del-Makefile~fe51e4a3cf9d7a4d # 2004/05/14 19:53:19-07:00 akpm@osdl.org +0 -0 # Delete: arch/ppc/ocp/Makefile # # ChangeSet # 2004/05/14 19:52:43-07:00 akpm@osdl.org # [PATCH] PPC32: Add Book E / PPC44x specific exception support # # From: Matt Porter # # Adds general Book E machine check exception support and PPC44x-specific # machine check exception implementation. # # include/asm-ppc/reg_booke.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +16 -0 # PPC32: Add Book E / PPC44x specific exception support # # include/asm-ppc/ppc_asm.h # 2004/05/14 19:00:23-07:00 akpm@osdl.org +2 -0 # PPC32: Add Book E / PPC44x specific exception support # # arch/ppc/kernel/traps.c # 2004/05/14 19:00:23-07:00 akpm@osdl.org +30 -1 # PPC32: Add Book E / PPC44x specific exception support # # arch/ppc/kernel/head_44x.S # 2004/05/14 19:00:23-07:00 akpm@osdl.org +151 -46 # PPC32: Add Book E / PPC44x specific exception support # # arch/ppc/kernel/entry.S # 2004/05/14 19:00:23-07:00 akpm@osdl.org +84 -1 # PPC32: Add Book E / PPC44x specific exception support # # ChangeSet # 2004/05/14 19:52:31-07:00 akpm@osdl.org # [PATCH] PPC32: Add Book E / PPC44x specific exception support # # From: Matt Porter # # Adds general Book E debug exception support and PPC44x-specific debug # exception implementation. # # include/asm-ppc/reg_booke.h # 2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -0 # PPC32: Add Book E / PPC44x specific exception support # # arch/ppc/kernel/head_44x.S # 2004/05/14 19:00:22-07:00 akpm@osdl.org +82 -83 # PPC32: Add Book E / PPC44x specific exception support # # arch/ppc/kernel/entry.S # 2004/05/14 19:00:22-07:00 akpm@osdl.org +32 -12 # PPC32: Add Book E / PPC44x specific exception support # # ChangeSet # 2004/05/14 19:52:21-07:00 akpm@osdl.org # [PATCH] PPC32: Fix copy prefetch on non coherent PPCs # # From: Matt Porter # # This patch fixes the condition where prefetching cache lines beyond a # buffer can cause data corruption on non cache coherent PPCs. It is a port # of the version that went into 2.4. From Eugene Surovegin # . # # arch/ppc/lib/string.S # 2004/05/14 19:00:22-07:00 akpm@osdl.org +38 -24 # PPC32: Fix copy prefetch on non coherent PPCs # # arch/ppc/kernel/misc.S # 2004/05/14 19:00:22-07:00 akpm@osdl.org +21 -9 # PPC32: Fix copy prefetch on non coherent PPCs # # ChangeSet # 2004/05/14 19:52:10-07:00 akpm@osdl.org # [PATCH] PPC32: Fix __flush_dcache_icache_phys() for Book E # # From: Matt Porter # # This patch implements/uses __flush_dcache_icache_page() which kmaps on a # Book E part, but keeps the existing behavior on other PowerPCs which can # disable the MMU. # # include/asm-ppc/cacheflush.h # 2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -1 # PPC32: Fix __flush_dcache_icache_phys() for Book E # # arch/ppc/mm/init.c # 2004/05/14 19:00:22-07:00 akpm@osdl.org +11 -1 # PPC32: Fix __flush_dcache_icache_phys() for Book E # # arch/ppc/mm/fault.c # 2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -2 # PPC32: Fix __flush_dcache_icache_phys() for Book E # # ChangeSet # 2004/05/14 19:51:59-07:00 akpm@osdl.org # [PATCH] export clear_pages on ppc32 # # From: Olaf Hering # # ext3 as module is not possible in 2.6.6, clear_pages, called from clear_page, # is not exported. # # Also, unexport clear_page(), which is an inline. # # arch/ppc/kernel/ppc_ksyms.c # 2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -1 # export clear_pages on ppc32 # # ChangeSet # 2004/05/14 19:51:48-07:00 akpm@osdl.org # [PATCH] befs: inode->i_flags thinko fix # # Jorn Engel # # inode->i_flags should never contain fs-specific flags. In fact, it doesn't; # the checks against it cause "chattr +T" to be useless for ext[23]. Same bug # was in befs as well. # # fs/befs/linuxvfs.c # 2004/05/14 19:00:21-07:00 akpm@osdl.org +1 -1 # befs: inode->i_flags thinko fix # # ChangeSet # 2004/05/14 19:51:37-07:00 akpm@osdl.org # [PATCH] befs: maintainer update # # From: "Sergey S. Kostyliov" # # Acked by Will Dyson. # # Documentation/filesystems/befs.txt # 2004/05/14 19:00:21-07:00 akpm@osdl.org +4 -2 # befs: maintainer update # # ChangeSet # 2004/05/14 19:51:27-07:00 akpm@osdl.org # [PATCH] befs: debugging code cleanup # # From: "Sergey S. Kostyliov" # # - Reduce stack usage. # - Kill useless duplication of error and warning messages when debug is on. Old # behaviour was: # ... # BeFS(hda1): # # fs/befs/debug.c # 2004/05/14 19:00:21-07:00 akpm@osdl.org +23 -6 # befs: debugging code cleanup # # ChangeSet # 2004/05/14 19:51:16-07:00 akpm@osdl.org # [PATCH] befs: typo fix # # From: "Sergey S. Kostyliov" # # Fix really old typo in config help # # fs/Kconfig # 2004/05/14 19:00:21-07:00 akpm@osdl.org +1 -1 # befs: typo fix # # ChangeSet # 2004/05/14 19:51:06-07:00 akpm@osdl.org # [PATCH] befs: binary search microoptimisation # # From: "Sergey S. Kostyliov" # # Move value initialisation out of the loop body. # # fs/befs/btree.c # 2004/05/14 19:00:21-07:00 akpm@osdl.org +3 -1 # befs: binary search microoptimisation # # ChangeSet # 2004/05/14 19:50:55-07:00 akpm@osdl.org # [PATCH] befs: microoptimisation, use befs_bread() instead of befs_bread_iaddr() # # From: "Sergey S. Kostyliov" # # We already have block number (inode->i_ino), so there is no need to calculate # it from befs_block_run before sb_bread() call (this is what befs_bread_iaddr() # do). # # fs/befs/linuxvfs.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +1 -1 # befs: microoptimisation, use befs_bread() instead of befs_bread_iaddr() # # ChangeSet # 2004/05/14 19:50:44-07:00 akpm@osdl.org # [PATCH] befs: LBD support # # From: "Sergey S. Kostyliov" # # LBD patch merged long time ago, so it is safe to pass u64 block numbers to # sb_bread() when sector_t is large enough. # # fs/befs/linuxvfs.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -0 # befs: LBD support # # fs/befs/io.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -18 # befs: LBD support # # fs/befs/befs.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +0 -3 # befs: LBD support # # ChangeSet # 2004/05/14 19:50:33-07:00 akpm@osdl.org # [PATCH] s390: network driver # # From: Martin Schwidefsky # # Network driver changes: # - lcs: Add missing irb error checking. # - lcs: Fix multicasting. # - lcs: Use a seperate lock (ipm_lock) for multicast list. # - lcs: Add missing in_dev_put in multicase address list handling. # - iucv: Set static variables to NULL after kfree. # - iucv: Do bus_unregister if module initialization fails. # - netiucv: Convert iucvMagic to EBCDIC in con_action_start. # - netiucv: Remove administration of ifno-stuff for device name, # - netiucv: Add attribute to remove a netiucv device. # - qeth: Add version string that is displayed at driver load time. # - qeth: Fix memory leak in qeth_arp_query. # - qeth: Remove duplicate case statements in qeth_do_ioctl. # - qeth: Fix OSA broadcast filtering. # - qeth: Increase timeout for purge ARP cache IPA. # - qeth: Fix hsi device naming. # - qeth: Add do_QDIO count to qeth performance statistics. # - qeth: Allow writing to IP address takeover attribute only in # state DOWN or RECOVER. # - qeth: Fix hang when removing a vlan device. # - qeth: Cleanup error messages for ARP commands. # - qeth: Return EOPNOTSUPP for purge ARP on HiperSockets. # - qeth: Drop skbs if the net_device of a qeth device is down. # - qeth: Simplify ip address list processing. # # include/asm-s390/qeth.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -9 # s390: network driver # # drivers/s390/net/qeth_sys.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -1 # s390: network driver # # drivers/s390/net/qeth_proc.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +19 -7 # s390: network driver # # drivers/s390/net/qeth_mpc.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +34 -31 # s390: network driver # # drivers/s390/net/qeth_mpc.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -2 # s390: network driver # # drivers/s390/net/qeth_main.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +272 -203 # s390: network driver # # drivers/s390/net/qeth_fs.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +5 -0 # s390: network driver # # drivers/s390/net/qeth.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +8 -4 # s390: network driver # # drivers/s390/net/netiucv.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +88 -28 # s390: network driver # # drivers/s390/net/lcs.h # 2004/05/14 19:00:20-07:00 akpm@osdl.org +2 -1 # s390: network driver # # drivers/s390/net/lcs.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +71 -28 # s390: network driver # # drivers/s390/net/iucv.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +12 -6 # s390: network driver # # ChangeSet # 2004/05/14 19:50:22-07:00 akpm@osdl.org # [PATCH] s390: zfcp host adapter # # From: Martin Schwidefsky # # zfcp host adapter change: # - Prevent infinite retry of SCSI commands when FCP adapter is unavailable. # - Always queue error recovery structure to the error recovery running list. # - Add help text to zfcp config option. # # drivers/scsi/Kconfig # 2004/05/14 19:00:20-07:00 akpm@osdl.org +10 -1 # s390: zfcp host adapter # # drivers/s390/scsi/zfcp_fsf.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +2 -2 # s390: zfcp host adapter # # drivers/s390/scsi/zfcp_erp.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -2 # s390: zfcp host adapter # # drivers/s390/scsi/zfcp_ccw.c # 2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -1 # s390: zfcp host adapter # # ChangeSet # 2004/05/14 19:50:11-07:00 akpm@osdl.org # [PATCH] s390: 3270 console driver # # From: Martin Schwidefsky # # 3270 device driver change: # - Don't allow activation of views while the initial size sensing is still # in progress. Replace RAW3270_FLAGS_SHUTDOWN with RAW3270_FLAGS_READY. # - Make 3270 views loadable as modules. # # drivers/s390/char/tty3270.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +33 -4 # s390: 3270 console driver # # drivers/s390/char/raw3270.h # 2004/05/14 19:00:19-07:00 akpm@osdl.org +4 -3 # s390: 3270 console driver # # drivers/s390/char/raw3270.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +93 -36 # s390: 3270 console driver # # drivers/s390/char/Makefile # 2004/05/14 19:00:19-07:00 akpm@osdl.org +3 -2 # s390: 3270 console driver # # drivers/s390/Kconfig # 2004/05/14 19:00:19-07:00 akpm@osdl.org +18 -7 # s390: 3270 console driver # # arch/s390/defconfig # 2004/05/14 19:00:19-07:00 akpm@osdl.org +2 -0 # s390: 3270 console driver # # ChangeSet # 2004/05/14 19:50:00-07:00 akpm@osdl.org # [PATCH] s390: dasd driver # # From: Martin Schwidefsky # # dasd driver changes: # - Do error recovery for error recovery requests. # - Retry request if the start_IO failed because of a timeout. # # drivers/s390/block/dasd_erp.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +3 -2 # s390: dasd driver # # drivers/s390/block/dasd_eckd.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +2 -2 # s390: dasd driver # # drivers/s390/block/dasd.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +11 -10 # s390: dasd driver # # ChangeSet # 2004/05/14 19:49:49-07:00 akpm@osdl.org # [PATCH] s390: common i/o layer # # From: Martin Schwidefsky # # Common i/o layer changes: # - Delay unregister/register of ccw devices reappering on a different # subchannel. Search for the old ccw_device & subchannel for the # reattached device and deregister it too to avoid inconsistencies. # - Fix path grouping for devices that present command reject for # SetPGID but not for SensePGID. # # drivers/s390/cio/device_pgid.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +4 -0 # s390: common i/o layer # # drivers/s390/cio/device_fsm.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +7 -4 # s390: common i/o layer # # drivers/s390/cio/device.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +83 -9 # s390: common i/o layer # # drivers/s390/cio/css.c # 2004/05/14 19:00:19-07:00 akpm@osdl.org +16 -7 # s390: common i/o layer # # ChangeSet # 2004/05/14 19:49:38-07:00 akpm@osdl.org # [PATCH] s390: core # # From: Martin Schwidefsky # # s390 core changes: # - Rename idle_cpu_mask to nohz_cpu_mask as agreed with Dipankar. # - Refine compiler version check for "Q" constraints in uaccess.h. # - Store per process ptrace information to the correct place. # - Fix per cpu data access for 64-bit modules. # - Add topology_init function for cpu hotplug. # - Define TASK_SIZE dependent on TIF_31BIT and define MM_VM_SIZE # to 4TB to get rid of elf_map32 and arch_get_unmapped_area. # # kernel/sched.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3 # s390: core # # kernel/rcupdate.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1 # s390: core # # include/linux/sched.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1 # s390: core # # include/asm-s390/uaccess.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -2 # s390: core # # include/asm-s390/processor.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +7 -4 # s390: core # # include/asm-s390/pgtable.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -4 # s390: core # # include/asm-s390/percpu.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +18 -2 # s390: core # # arch/s390/mm/init.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1 # s390: core # # arch/s390/kernel/time.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3 # s390: core # # arch/s390/kernel/sys_s390.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -32 # s390: core # # arch/s390/kernel/smp.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +19 -0 # s390: core # # arch/s390/kernel/module.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -1 # s390: core # # arch/s390/kernel/entry64.S # 2004/05/14 19:00:18-07:00 akpm@osdl.org +9 -7 # s390: core # # arch/s390/kernel/entry.S # 2004/05/14 19:00:18-07:00 akpm@osdl.org +9 -7 # s390: core # # arch/s390/kernel/compat_exec.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -3 # s390: core # # arch/s390/kernel/binfmt_elf32.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -22 # s390: core # # arch/s390/defconfig # 2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -1 # s390: core # # ChangeSet # 2004/05/14 19:49:27-07:00 akpm@osdl.org # [PATCH] Add del_single_shot_timer() # # From: Geoff Gustafson , # "Chen, Kenneth W" , # Ingo Molnar , # me. # # The big-SMP guys are seeing high CPU load due to del_timer_sync()'s # inefficiencies. The callers are fs/aio.c and schedule_timeout(). # # We note that neither of these callers' timer handlers actually re-add the # timer - they are single-shot. # # So we don't need all that complexity in del_timer_sync() - we can just run # del_timer() and if that worked we know the timer is dead. # # Add del_single_shot_timer(), export it to modules and use it in AIO and # schedule_timeout(). # # # (these numbers are for an earlier patch, but they'll be close) # # Before: 32p 4p # Warm cache 29,000 505 # Cold cache 37,800 1220 # # After: 32p 4p # Warm cache 95 88 # Cold cache 1,800 140 # # [Measurements are CPU cycles spent in a call to del_timer_sync, the average # of 1000 calls. 32p is 16-node NUMA, 4p is SMP.] # # (I cleaned up a few things and added some commentary) # # kernel/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +38 -4 # Add del_single_shot_timer() # # include/linux/timer.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -1 # Add del_single_shot_timer() # # fs/aio.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1 # Add del_single_shot_timer() # # ChangeSet # 2004/05/14 19:49:16-07:00 akpm@osdl.org # [PATCH] H8/300: more cleanup # # From: Yoshinori Sato # # - gcc-3.4 warning fix. # - io access address fix. # - cleanup code. # # include/asm-h8300/timex.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -5 # H8/300: more cleanup # # include/asm-h8300/semaphore.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +12 -12 # H8/300: more cleanup # # include/asm-h8300/io.h # 2004/05/14 19:00:18-07:00 akpm@osdl.org +18 -14 # H8/300: more cleanup # # arch/h8300/platform/h8s/generic/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +17 -7 # H8/300: more cleanup # # arch/h8300/platform/h8s/edosk2674/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +17 -14 # H8/300: more cleanup # # arch/h8300/platform/h8300h/ptrace_h8300h.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +4 -2 # H8/300: more cleanup # # arch/h8300/platform/h8300h/h8max/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +11 -4 # H8/300: more cleanup # # arch/h8300/platform/h8300h/generic/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +28 -21 # H8/300: more cleanup # # arch/h8300/platform/h8300h/aki3068net/timer.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +11 -4 # H8/300: more cleanup # # arch/h8300/mm/init.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3 # H8/300: more cleanup # # arch/h8300/kernel/traps.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +6 -0 # H8/300: more cleanup # # arch/h8300/kernel/process.c # 2004/05/14 19:00:18-07:00 akpm@osdl.org +6 -7 # H8/300: more cleanup # # ChangeSet # 2004/05/14 19:49:05-07:00 akpm@osdl.org # [PATCH] H8/300: delete headers # # From: Yoshinori Sato # # - Delete obsolete header files # # arch/h8300/Makefile # 2004/05/14 19:00:17-07:00 akpm@osdl.org +2 -7 # H8/300: delete headers # # BitKeeper/deleted/.del-machine-depend.h~74b77fb056f4de47 # 2004/05/14 19:49:00-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/h8max/machine-depend.h # # BitKeeper/deleted/.del-timer_rate.h~a6bae69a4678b24d # 2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/generic/timer_rate.h # # BitKeeper/deleted/.del-machine-depend.h~590c96cd416b17cc # 2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/aki3068net/machine-depend.h # # BitKeeper/deleted/.del-machine-depend.h~48f02aa4daf3fe51 # 2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/edosk2674/machine-depend.h # # BitKeeper/deleted/.del-machine-depend.h~1002669f4725299 # 2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/generic/machine-depend.h # # BitKeeper/deleted/.del-h8300_smsc.h~76f44462fbd3ce56 # 2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0 # Delete: include/asm-h8300/h8300_smsc.h # # ChangeSet # 2004/05/14 19:48:53-07:00 akpm@osdl.org # [PATCH] H8/300: Kconfig # # From: Yoshinori Sato # # - Separate taget depends config. # # arch/h8300/Kconfig.cpu # 2004/05/14 19:00:17-07:00 akpm@osdl.org +183 -0 # H8/300: Kconfig # # arch/h8300/Kconfig # 2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -116 # H8/300: Kconfig # # arch/h8300/Kconfig.cpu # 2004/05/14 19:00:17-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/h8300/Kconfig.cpu # # ChangeSet # 2004/05/14 19:48:42-07:00 akpm@osdl.org # [PATCH] H8/300: ne driver # # From: Yoshinori Sato # # - ne2k compatible NIC support # # drivers/net/ne-h8300.c # 2004/05/14 19:00:17-07:00 akpm@osdl.org +657 -0 # H8/300: ne driver # # drivers/net/ne-h8300.c # 2004/05/14 19:00:17-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/drivers/net/ne-h8300.c # # drivers/net/Space.c # 2004/05/14 19:00:17-07:00 akpm@osdl.org +2 -1 # H8/300: ne driver # # drivers/net/Makefile # 2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -0 # H8/300: ne driver # # drivers/net/Kconfig # 2004/05/14 19:00:17-07:00 akpm@osdl.org +7 -0 # H8/300: ne driver # # drivers/net/8390.h # 2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -1 # H8/300: ne driver # # ChangeSet # 2004/05/14 19:48:31-07:00 akpm@osdl.org # [PATCH] H8/300: SCI driver fix # # From: Yoshinori Sato # # - fix h8300 depend setup sequence # # drivers/serial/sh-sci.c # 2004/05/14 19:00:17-07:00 akpm@osdl.org +15 -5 # H8/300: SCI driver fix # # ChangeSet # 2004/05/14 19:48:20-07:00 akpm@osdl.org # [PATCH] H8/300: preempt support # # From: Yoshinori Sato # # - add preempt support # - add new syscalls # - code cleanup # # include/asm-h8300/thread_info.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +7 -5 # H8/300: preempt support # # include/asm-h8300/hardirq.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1 # H8/300: preempt support # # arch/h8300/platform/h8s/entry.S # 2004/05/14 19:00:16-07:00 akpm@osdl.org +48 -33 # H8/300: preempt support # # arch/h8300/platform/h8300h/entry.S # 2004/05/14 19:00:16-07:00 akpm@osdl.org +47 -32 # H8/300: preempt support # # arch/h8300/kernel/syscalls.S # 2004/05/14 19:00:16-07:00 akpm@osdl.org +19 -16 # H8/300: preempt support # # ChangeSet # 2004/05/14 19:48:09-07:00 akpm@osdl.org # [PATCH] H/8300 pic support fix # # From: Yoshinori Sato # # Sorry. There was the file which lacked. # # include/asm-h8300/sigcontext.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -0 # H/8300 pic support fix # # ChangeSet # 2004/05/14 19:47:58-07:00 akpm@osdl.org # [PATCH] H8/300: pic support # # From: Yoshinori Sato # # - add PIC binary support # # include/asm-v850/flat.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +2 -1 # H8/300: pic support # # include/asm-sh/flat.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1 # H8/300: pic support # # include/asm-m68knommu/flat.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1 # H8/300: pic support # # include/asm-h8300/processor.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +13 -5 # H8/300: pic support # # include/asm-h8300/flat.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +2 -1 # H8/300: pic support # # fs/binfmt_flat.c # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1 # H8/300: pic support # # arch/h8300/kernel/signal.c # 2004/05/14 19:00:16-07:00 akpm@osdl.org +4 -0 # H8/300: pic support # # ChangeSet # 2004/05/14 19:47:47-07:00 akpm@osdl.org # [PATCH] H8/300: ldscripts fix # # From: Yoshinori Sato # # - symbol prefix (use h8300 and v850) support # - include headers # # include/asm-generic/vmlinux.lds.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +16 -12 # H8/300: ldscripts fix # # arch/v850/kernel/vmlinux.lds.S # 2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -0 # H8/300: ldscripts fix # # arch/h8300/kernel/vmlinux.lds.S # 2004/05/14 19:00:16-07:00 akpm@osdl.org +3 -0 # H8/300: ldscripts fix # # ChangeSet # 2004/05/14 19:47:36-07:00 akpm@osdl.org # [PATCH] H8/300: bitops.h add find_next_bit # # From: Yoshinori Sato # # - add find_next_bit # # include/asm-h8300/bitops.h # 2004/05/14 19:00:16-07:00 akpm@osdl.org +52 -13 # H8/300: bitops.h add find_next_bit # # ChangeSet # 2004/05/14 19:47:27-07:00 akpm@osdl.org # [PATCH] dentry layout tweaks # # Lookup typically touches three fields of the dentry: d_bucket, d_name.hash and # d_parent. # # Change the layout of things so that these will always be in the same # cacheline. # # include/linux/dcache.h # 2004/05/14 19:00:15-07:00 akpm@osdl.org +15 -4 # dentry layout tweaks # # ChangeSet # 2004/05/14 19:47:16-07:00 akpm@osdl.org # [PATCH] more dentry shrinkage # # - d_vfs_flags can be removed - just use d_flags. All modifications of # dentry->d_flags are under dentry->d_lock. # # On x86 this takes the internal string size up to 40 bytes. The # internal/external ratio on my 1.5M files hits 96%. # # include/linux/dcache.h # 2004/05/14 19:00:15-07:00 akpm@osdl.org +13 -13 # more dentry shrinkage # # fs/dcache.c # 2004/05/14 19:00:15-07:00 akpm@osdl.org +9 -9 # more dentry shrinkage # # ChangeSet # 2004/05/14 19:47:06-07:00 akpm@osdl.org # [PATCH] dentry d_bucket fix # # The gap between checking d_bucket and sampling d_move_count looks like a bug # to me. # # It feels safer to be checking d_bucket after taking the lock, when we know # that it is stable. # # And it's a little faster to check d_bucket after having checked the hash # rather than before. # # fs/dcache.c # 2004/05/14 19:00:15-07:00 akpm@osdl.org +8 -6 # dentry d_bucket fix # # ChangeSet # 2004/05/14 19:46:55-07:00 akpm@osdl.org # [PATCH] dentry qstr consolidation # # When dentries are given an external name we currently allocate an entire qstr # for the external name. # # This isn't needed. We can use the internal qstr and kmalloc only the string # itself. This saves 12 bytes from externally-allocated names and 4 bytes from # the dentry itself. # # The saving of 4 bytes from the dentry doesn't actually decrease the dentry's # storage requirements, but it makes four more bytes available for internal # names, taking the internal/external ratio from 89% up to 93% on my 1.5M files. # # # Fix: # # The qstr consolidation wasn't quite right, because it can cause qstr->len to # be unstable during lookup lockless traverasl. # # Fix that up by taking d_lock earlier in lookup. This serialises against # d_move. # # Take the lock after comparing the parent and hash to preserve the # mostly-lockless behaviour. # # This obsoletes d_movecount, which is removed. # # include/linux/dcache.h # 2004/05/14 19:00:15-07:00 akpm@osdl.org +10 -13 # dentry qstr consolidation # # fs/dcache.c # 2004/05/14 19:00:15-07:00 akpm@osdl.org +71 -67 # dentry qstr consolidation # # ChangeSet # 2004/05/14 19:46:44-07:00 akpm@osdl.org # [PATCH] dentry shrinkage # # Rework dentries so that the inline name length is between 31 and 48 bytes. # # On SMP P4-compiled x86 each dentry consumes 160 bytes (24 per page). # # Here's the histogram of name lengths on all 1.5M files on my workstation: # # 1: 0% # 2: 0% # 3: 1% # 4: 5% # 5: 8% # 6: 13% # 7: 19% # 8: 26% # 9: 33% # 10: 42% # 11: 49% # 12: 55% # 13: 60% # 14: 64% # 15: 67% # 16: 69% # 17: 71% # 18: 73% # 19: 75% # 20: 76% # 21: 78% # 22: 79% # 23: 80% # 24: 81% # 25: 82% # 26: 83% # 27: 85% # 28: 86% # 29: 87% # 30: 88% # 31: 89% # 32: 90% # 33: 91% # 34: 92% # 35: 93% # 36: 94% # 37: 95% # 38: 96% # 39: 96% # 40: 96% # 41: 96% # 42: 96% # 43: 96% # 44: 97% # 45: 97% # 46: 97% # 47: 97% # 48: 97% # 49: 98% # 50: 98% # 51: 98% # 52: 98% # 53: 98% # 54: 98% # 55: 98% # 56: 98% # 57: 98% # 58: 98% # 59: 98% # 60: 99% # 61: 99% # 62: 99% # 63: 99% # 64: 99% # # So on x86 we'll fit 89% of filenames into the inline name. # # # The patch also removes the NAME_ALLOC_LEN() rounding-up of the storage for the # out-of-line names. That seems unnecessary. # # include/linux/dcache.h # 2004/05/14 19:00:14-07:00 akpm@osdl.org +1 -5 # dentry shrinkage # # fs/dcache.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +9 -5 # dentry shrinkage # # ChangeSet # 2004/05/14 19:46:33-07:00 akpm@osdl.org # [PATCH] d_vfs_flags locking fix # # Be consistent about d_vfs_flags locking: take dentry->d_lock when modifying # it. # # fs/dcache.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -0 # d_vfs_flags locking fix # # ChangeSet # 2004/05/14 19:46:23-07:00 akpm@osdl.org # [PATCH] d_flags locking fixes # # A few filesystems modify dentry.d_flags under non-obvious locking. To # consolidate that field wth d_vfs_flags they need to take ->d_lock # # fs/nfs/unlink.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +4 -0 # d_flags locking fixes # # fs/exportfs/expfs.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +4 -0 # d_flags locking fixes # # fs/autofs4/root.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +8 -1 # d_flags locking fixes # # fs/afs/dir.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -0 # d_flags locking fixes # # ChangeSet # 2004/05/14 19:46:12-07:00 akpm@osdl.org # [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch # # From: Markus Lidel # # * The Kconfig and Makefile in drivers/message/i2o still got a CONFIG_I2O_PCI # entry, which is not used anymore. This one is replaced by a # CONFIG_I2O_CONFIG entry, which now builds the i2o_config module. # # drivers/message/i2o/Makefile # 2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -1 # I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch # # drivers/message/i2o/Kconfig # 2004/05/14 19:00:14-07:00 akpm@osdl.org +8 -7 # I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch # # ChangeSet # 2004/05/14 19:46:01-07:00 akpm@osdl.org # [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch # # From: Markus Lidel # # * provides i2o_context_list_*() functions, which maps 64-bit pointers to # 32-bit context id's in a dynamic list. On 32-bit systems the functions are # replaced with a static inline. # # * i2o_scsi now uses the i2o_context_list_*() functions for transaction # context, and therefore now work on 64-bit systems too. # # include/linux/i2o.h # 2004/05/14 19:00:14-07:00 akpm@osdl.org +40 -0 # I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch # # drivers/message/i2o/i2o_scsi.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +21 -43 # I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch # # drivers/message/i2o/i2o_core.c # 2004/05/14 19:00:14-07:00 akpm@osdl.org +136 -0 # I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch # # ChangeSet # 2004/05/14 19:45:50-07:00 akpm@osdl.org # [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o_block-cleanup.patch # # From: Markus Lidel # # * more than 3 "visible" disks (hda, hdb, hdc, hdd) lead to kernel panics. # # * removes some unused code with partitions. # # * I2O_LOCK was often called with the addresses of the controller, and not # with the address of the device. Fixed. # # * the cleanup function for gendisk (del_gendisk) doesn't work if the queue # is shared between different devices. To workaround the queue is removed # before. # # * redundant code removed in module initialization and remove, use # i2ob_new_device and i2ob_del_device instead. # # * removed atomic_t queue_depth # # * removed unnecessary and bogus code for queue handling # # drivers/message/i2o/i2o_block.c # 2004/05/14 19:00:13-07:00 akpm@osdl.org +165 -217 # I2O subsystem fixing and cleanup for 2.6 - i2o_block-cleanup.patch # # ChangeSet # 2004/05/14 19:45:39-07:00 akpm@osdl.org # [PATCH] i2o: 64-bit fixes # # From: Markus Lidel # # Fix 64-bit problems. # # drivers/message/i2o/i2o_config.c # 2004/05/14 19:00:13-07:00 akpm@osdl.org +7 -1 # i2o: 64-bit fixes # # ChangeSet # 2004/05/14 19:45:29-07:00 akpm@osdl.org # [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch # # From: Markus Lidel # # * Add a pass-thru ioctl to i2o_config, which is needed to work with the # Adaptec management software. # # include/linux/i2o.h # 2004/05/14 19:00:13-07:00 akpm@osdl.org +2 -0 # I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch # # include/linux/i2o-dev.h # 2004/05/14 19:00:13-07:00 akpm@osdl.org +8 -0 # I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch # # drivers/message/i2o/i2o_config.c # 2004/05/14 19:00:13-07:00 akpm@osdl.org +163 -0 # I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch # # ChangeSet # 2004/05/14 19:45:18-07:00 akpm@osdl.org # [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-config-clean.patch # # From: Markus Lidel # # * Changes the formating of the header in i2o_config.c # # drivers/message/i2o/i2o_config.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +16 -15 # I2O subsystem fixing and cleanup for 2.6 - i2o-config-clean.patch # # ChangeSet # 2004/05/14 19:45:07-07:00 akpm@osdl.org # [PATCH] Module ref counting for vt console drivers # # From: Herbert Xu # # The following patch adds basic module reference counting to vt console # drivers. Currently modules like fbcon are not counted at all. # # include/linux/console.h # 2004/05/14 19:00:12-07:00 akpm@osdl.org +3 -1 # Module ref counting for vt console drivers # # drivers/video/console/vgacon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +1 -0 # Module ref counting for vt console drivers # # drivers/video/console/sticon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -1 # Module ref counting for vt console drivers # # drivers/video/console/promcon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +1 -0 # Module ref counting for vt console drivers # # drivers/video/console/newport_con.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -3 # Module ref counting for vt console drivers # # drivers/video/console/mdacon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -6 # Module ref counting for vt console drivers # # drivers/video/console/fbcon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +9 -3 # Module ref counting for vt console drivers # # drivers/video/console/dummycon.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -0 # Module ref counting for vt console drivers # # drivers/char/vt.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +25 -4 # Module ref counting for vt console drivers # # ChangeSet # 2004/05/14 19:44:57-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: core # # From: Ashok Raj # # Supports basic ability to enable hotplug functions for IA64. # Code is just evolving, and there are several loose ends to tie up. # # What this code drop does # - Support logical online and offline # - Handles interrupt migration without loss of interrupts. # - Handles stress fine > 24+ hrs with make -j/ftp/rcp workloads # - Handles irq migration from a dying cpu without loss of interrupts. # # What needs to be done # - Boot CPU removal support, with platform level authentication # - Putting cpu being removed in BOOT_RENDEZ mode. # # include/asm-ia64/smp.h # 2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -0 # ia64 cpu hotplug: core # # arch/ia64/kernel/time.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +5 -0 # ia64 cpu hotplug: core # # arch/ia64/kernel/smpboot.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +127 -9 # ia64 cpu hotplug: core # # arch/ia64/kernel/smp.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +25 -1 # ia64 cpu hotplug: core # # arch/ia64/kernel/sal.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +13 -0 # ia64 cpu hotplug: core # # arch/ia64/kernel/process.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +42 -1 # ia64 cpu hotplug: core # # arch/ia64/kernel/irq_ia64.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +55 -5 # ia64 cpu hotplug: core # # arch/ia64/kernel/irq.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +103 -0 # ia64 cpu hotplug: core # # arch/ia64/kernel/iosapic.c # 2004/05/14 19:00:12-07:00 akpm@osdl.org +5 -2 # ia64 cpu hotplug: core # # arch/ia64/Kconfig # 2004/05/14 19:00:12-07:00 akpm@osdl.org +9 -0 # ia64 cpu hotplug: core # # ChangeSet # 2004/05/14 19:44:45-07:00 akpm@osdl.org # [PATCH] Revisited: ia64-cpu-hotplug-cpu_present.patch # # From: Paul Jackson # # With a hotplug capable kernel, there is a requirement to distinguish a # possible CPU from one actually present. The set of possible CPU numbers # doesn't change during a single system boot, but the set of present CPUs # changes as CPUs are physically inserted into or removed from a system. The # cpu_possible_map does not change once initialized at boot, but the # cpu_present_map changes dynamically as CPUs are inserted or removed. # # # Paul Jackson provided an expanded explanation: # # # Ashok's cpu hot plug patch adds a cpu_present_map, resulting in the following # cpu maps being available. All the following maps are fixed size bitmaps of # size NR_CPUS. # # #ifdef CONFIG_HOTPLUG_CPU # cpu_possible_map - map with all NR_CPUS bits set # cpu_present_map - map with bit 'cpu' set iff cpu is populated # cpu_online_map - map with bit 'cpu' set iff cpu available to scheduler # #else # cpu_possible_map - map with bit 'cpu' set iff cpu is populated # cpu_present_map - copy of cpu_possible_map # cpu_online_map - map with bit 'cpu' set iff cpu available to scheduler # #endif # # In either case, NR_CPUS is fixed at compile time, as the static size of these # bitmaps. The cpu_possible_map is fixed at boot time, as the set of CPU id's # that it is possible might ever be plugged in at anytime during the life of # that system boot. The cpu_present_map is dynamic(*), representing which CPUs # are currently plugged in. And cpu_online_map is the dynamic subset of # cpu_present_map, indicating those CPUs available for scheduling. # # If HOTPLUG is enabled, then cpu_possible_map is forced to have all NR_CPUS # bits set, otherwise it is just the set of CPUs that ACPI reports present at # boot. # # If HOTPLUG is enabled, then cpu_present_map varies dynamically, depending on # what ACPI reports as currently plugged in, otherwise cpu_present_map is just a # copy of cpu_possible_map. # # (*) Well, cpu_present_map is dynamic in the hotplug case. If not hotplug, # it's the same as cpu_possible_map, hence fixed at boot. # # kernel/timer.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # kernel/sched.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +3 -3 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # kernel/fork.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # kernel/cpu.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +9 -1 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # init/main.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +21 -2 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # include/linux/cpumask.h # 2004/05/14 19:00:11-07:00 akpm@osdl.org +11 -0 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # include/asm-ia64/smp.h # 2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -3 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # fs/proc/proc_misc.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -2 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # fs/buffer.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # arch/ia64/kernel/smpboot.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +13 -9 # Revisited: ia64-cpu-hotplug-cpu_present.patch # # ChangeSet # 2004/05/14 19:44:34-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: /proc rework # # From: Ashok Raj # # Changes proc entries for cpu hotplug to be created via the cpu hotplug # notifier callbacks. Also fixed a bug in the removal code that did not remove # proc entries as expected. # # arch/ia64/kernel/palinfo.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +104 -30 # ia64 cpu hotplug: /proc rework # # ChangeSet # 2004/05/14 19:44:23-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: IRQ affinity work # # From: Ashok Raj # # irq affinity setting via /proc was forcing iosapic rte programming by force. # The correct way to do this is to perform this when a interrupt is pending. # # arch/ia64/kernel/irq.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +9 -3 # ia64 cpu hotplug: IRQ affinity work # # arch/ia64/kernel/iosapic.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +19 -0 # ia64 cpu hotplug: IRQ affinity work # # ChangeSet # 2004/05/14 19:44:13-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: sysfs additions # # From: Ashok Raj # # Creation of sysfs via topology_init() creates sysfs entries. The creation of # the online control file is created separately when the cpu_up is invoked in # arch independent code. # # include/asm-ia64/cpu.h # 2004/05/14 19:00:11-07:00 akpm@osdl.org +17 -0 # ia64 cpu hotplug: sysfs additions # # arch/ia64/dig/topology.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +43 -0 # ia64 cpu hotplug: sysfs additions # # include/asm-ia64/cpu.h # 2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-ia64/cpu.h # # arch/ia64/dig/topology.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ia64/dig/topology.c # # arch/ia64/dig/Makefile # 2004/05/14 19:00:11-07:00 akpm@osdl.org +5 -0 # ia64 cpu hotplug: sysfs additions # # ChangeSet # 2004/05/14 19:44:02-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: init section fixes # # From: Ashok Raj # # Contains changes from __init to __devinit to support cpu hotplug Changes only # arch/ia64 portions of the kernel tree. # # include/asm-ia64/smp.h # 2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -1 # ia64 cpu hotplug: init section fixes # # arch/ia64/mm/tlb.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # ia64 cpu hotplug: init section fixes # # arch/ia64/mm/init.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -2 # ia64 cpu hotplug: init section fixes # # arch/ia64/kernel/time.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # ia64 cpu hotplug: init section fixes # # arch/ia64/kernel/smpboot.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +6 -6 # ia64 cpu hotplug: init section fixes # # arch/ia64/kernel/setup.c # 2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1 # ia64 cpu hotplug: init section fixes # # ChangeSet # 2004/05/14 19:43:50-07:00 akpm@osdl.org # [PATCH] ia64 cpu hotplug: core kernel initialisation # # From: Ashok Raj # # This patch changes __init to __devinit to init_idle so that when a new cpu # arrives, it can call these functions at a later time. # # kernel/sched.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1 # ia64 cpu hotplug: core kernel initialisation # # init/main.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1 # ia64 cpu hotplug: core kernel initialisation # # ChangeSet # 2004/05/14 19:43:39-07:00 akpm@osdl.org # [PATCH] swap speedups and fix # # From: Andrea Arcangeli # # I don't think we need an install_swap_bdev/remove_swap_bdev anymore, we should # use the swap_info->bdev, not the swap_bdevs. the swap_info already has a # ->bdev field, the only point of remove_swap_bdev/install_swap_bdev was to # unplug all devices as efficiently as possible, we don't need that anymore with # the page parameter. # # Plus the semaphore should be a rwsem to allow parallel unplug from multiple # pages. # # After that I don't need to take the semaphore anymore during swapon, no # swapcache with swp_type() pointing to such bdev, will be allowed until swapon # is complete (SWP_ACTIVE is set a lot later after setting p->bdev). # # In swapoff I only need a dummy serialization with the readers, after # try_to_unuse is complete: # # err = try_to_unuse(type); # current->flags &= ~PF_SWAPOFF; # # /* wait for any unplug function to finish */ # down_write(&swap_unplug_sem); # up_write(&swap_unplug_sem); # # # that's all, no other locking and no install_swap_bdev/remove_swap_bdev. # # (and the swap_bdevs[] compression code was busted) # # mm/swapfile.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +25 -49 # swap speedups and fix # # ChangeSet # 2004/05/14 19:43:29-07:00 akpm@osdl.org # [PATCH] blk_run_page(): we don't trust bh->b_page # # We don't trust bh->b_page to point to the right thing across all filesystems, # so revert this bit. # # fs/buffer.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +6 -1 # blk_run_page(): we don't trust bh->b_page # # ChangeSet # 2004/05/14 19:43:18-07:00 akpm@osdl.org # [PATCH] blk_run_page(): fixup for swap_unplug_io_fn() # # mm/swapfile.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1 # blk_run_page(): fixup for swap_unplug_io_fn() # # mm/filemap.c # 2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1 # blk_run_page(): fixup for swap_unplug_io_fn() # # include/linux/swap.h # 2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1 # blk_run_page(): fixup for swap_unplug_io_fn() # # ChangeSet # 2004/05/14 19:43:07-07:00 akpm@osdl.org # [PATCH] Add blk_run_page() # # From: Andrea Arcangeli # # From: Jens Axboe # # Add blk_run_page() API. This is so that we can pass the target page all the # way down to (for example) the swap unplug function. So swap can work out # which blockdevs back this particular page. # # mm/swapfile.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1 # Add blk_run_page() # # mm/readahead.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1 # Add blk_run_page() # # include/linux/blkdev.h # 2004/05/14 19:00:09-07:00 akpm@osdl.org +14 -3 # Add blk_run_page() # # include/linux/backing-dev.h # 2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2 # Add blk_run_page() # # fs/buffer.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -10 # Add blk_run_page() # # drivers/block/ll_rw_blk.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -1 # Add blk_run_page() # # ChangeSet # 2004/05/14 19:42:56-07:00 akpm@osdl.org # [PATCH] rmap-5-swap_unplug-page-revert # # Revert the pre-2.6.6 per-address-space unplugging changes. This removes a # swapper_space exceptionality, syncs things with Andrea and provides for # simplification of the swap unplug function. # # mm/swapfile.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +8 -15 # rmap-5-swap_unplug-page-revert # # mm/swap_state.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2 # rmap-5-swap_unplug-page-revert # # mm/nommu.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +5 -0 # rmap-5-swap_unplug-page-revert # # mm/filemap.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1 # rmap-5-swap_unplug-page-revert # # include/linux/swap.h # 2004/05/14 19:00:09-07:00 akpm@osdl.org +3 -2 # rmap-5-swap_unplug-page-revert # # ChangeSet # 2004/05/14 19:42:45-07:00 akpm@osdl.org # [PATCH] rename rmap_lock to page_map_lock # # Sync this up with Andrea's patches. # # mm/vmscan.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +10 -10 # rename rmap_lock to page_map_lock # # mm/rmap.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +4 -4 # rename rmap_lock to page_map_lock # # include/linux/rmap.h # 2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2 # rename rmap_lock to page_map_lock # # ChangeSet # 2004/05/14 19:42:34-07:00 akpm@osdl.org # [PATCH] filtered wakeups: apply to buffer_head functions # # From: William Lee Irwin III # # This patch implements wake-one semantics for buffer_head wakeups in a single # step. The buffer_head being waited on is passed to the waiter's wakeup # function by the waker, and the wakeup function compares that to the a pointer # stored in its on-stack structure and checking the readiness of the bit there # also. Wake-one semantics are achieved by using WQ_FLAG_EXCLUSIVE in the # codepaths waiting to acquire the bit for mutual exclusion. # # include/linux/buffer_head.h # 2004/05/14 19:00:09-07:00 akpm@osdl.org +3 -2 # filtered wakeups: apply to buffer_head functions # # fs/jbd/transaction.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +10 -2 # filtered wakeups: apply to buffer_head functions # # fs/buffer.c # 2004/05/14 19:00:09-07:00 akpm@osdl.org +65 -9 # filtered wakeups: apply to buffer_head functions # # ChangeSet # 2004/05/14 19:42:25-07:00 akpm@osdl.org # [PATCH] filtered wakeups: apply to pagecache functions # # From: William Lee Irwin III # # This patch implements wake-one semantics for page wakeups in a single step. # Discrimination between distinct pages is achieved by passing the page to the # wakeup function, which compares it to a pointer in its own on-stack structure # containing the waitqueue element and the page. Bit discrimination is achieved # by storing the bit number in that same structure and testing the bit in the # wakeup function. Wake-one semantics are achieved by using WQ_FLAG_EXCLUSIVE # in the codepaths waiting to acquire the bit for mutual exclusion. # # mm/filemap.c # 2004/05/14 19:00:08-07:00 akpm@osdl.org +51 -13 # filtered wakeups: apply to pagecache functions # # ChangeSet # 2004/05/14 19:42:14-07:00 akpm@osdl.org # [PATCH] filtered wakeups: wakeup enhancements # # From: William Lee Irwin III # # This patch provides an additional argument to __wake_up_common() so that the # information wakefunc.patch made waiters ready to receive may be passed to them # by wakers. This is provided as a separate patch so that the overhead of the # additional argument to __wake_up_common() can be measured in isolation. No # change in performance was observable here. # # kernel/sched.c # 2004/05/14 19:00:08-07:00 akpm@osdl.org +9 -8 # filtered wakeups: wakeup enhancements # # include/linux/wait.h # 2004/05/14 19:00:08-07:00 akpm@osdl.org +7 -7 # filtered wakeups: wakeup enhancements # # ChangeSet # 2004/05/14 19:42:03-07:00 akpm@osdl.org # [PATCH] filtered wakeups # # From: William Lee Irwin III # # This patch series is solving the "thundering herd" problem that occurs in the # mainline implementation of hashed waitqueues. There are two sources of # spurious wakeups in such arrangements: # # (a) Hash collisions that place waiters on different objects on the same # waitqueue, which wakes threads falsely when any of the objects hashed to # the same queue receives a wakeup. i.e. loss of information about which # object a wakeup event is related to. # # (b) Loss of information about which object a given waiter is waiting on. # This precludes wake-one semantics for mutual exclusion scenarios. For # instance, a lock bit may be slept on. If there are any waiters on the # object, a lock bit release event must wake at least one of them so as to # prevent deadlock. But without information as to which waiter is waiting # on which object, we must resort to waking all waiters who could possibly # be waiting on it. Now, as the lock bit provides mutual exclusion, only # one of the waiters woken can proceed, and the remainder will go back to # sleep and wait for another event, creating unnecessary system load. Once # wake-one semantics are established, only one of the waiters waiting to # acquire a lock bit need to be woken, which measurably reduces system load # and improves efficiency (i.e. it's the subject of the benchmarking I've # been sending to you). # # Even beyond the measurable efficiency gains, there are reasons of robustness # and responsiveness to motivate addressing the issue of thundering herds. In a # real-life scenario I've been personally involved in resolving, the thundering # herd issue caused powerful modern SMP machines with fast IO systems to be # unresponsive to user input for a minute at a time or more. Analogues of these # patches for the distro kernels involved fully resolved the issue to the # customer's satisfaction and obviated workarounds to limit the pagecache's # size. # # The latest spin of these patches basically shoves more pieces of the logic # into the wakeup functions, with some efficiency gains from sharing the hot # codepath with the rest of the kernel, and a slightly larger diff than the # patches with the newly-introduced entrypoint. Writing these was motivated by # the push to insulate sched.c from more of the details of wakeup semantics by # putting more of the logic into the wakeup functions. In order to accomplish # this while still solving (b), the wakeup functions grew a new argument for # communication about what object a wakeup event is related to to be passed by # the waker. # # ========= # # This patch provides an additional argument to wakeup functions so that # information may be passed from the waker to the waiter. This is provided as a # separate patch so that the overhead of the additional argument can be measured # in isolation. No change in performance was observable here. # # kernel/sched.c # 2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2 # filtered wakeups # # kernel/fork.c # 2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2 # filtered wakeups # # include/linux/wait.h # 2004/05/14 19:00:08-07:00 akpm@osdl.org +3 -3 # filtered wakeups # # fs/eventpoll.c # 2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2 # filtered wakeups # # ChangeSet # 2004/05/14 19:41:52-07:00 akpm@osdl.org # [PATCH] do_mounts_rd-malloc-fix # # gcc-3.4.0 sez: # # init/do_mounts_rd.c:309: warning: conflicting types for built-in function 'malloc' # # init/do_mounts_rd.c # 2004/05/14 19:00:07-07:00 akpm@osdl.org +2 -2 # do_mounts_rd-malloc-fix # # ChangeSet # 2004/05/14 19:41:41-07:00 akpm@osdl.org # [PATCH] VM accounting fix # # From: Hugh Dickins # # Stas Sergeev wrote: # # mprotect() fails to merge VMAs because one VMA can end up with # VM_ACCOUNT flag set, and another without that flag. That makes several # apps of mine to malfuncate. # # # Great find! Someone has got their test the wrong way round. Since that # VM_MAYACCT macro is being used in one place only, and just hiding what it's # actually about, fold it into its callsite. # # mm/mprotect.c # 2004/05/14 19:00:07-07:00 akpm@osdl.org +1 -2 # VM accounting fix # # include/linux/mm.h # 2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -3 # VM accounting fix # # ChangeSet # 2004/05/14 19:41:31-07:00 akpm@osdl.org # [PATCH] revert the process-migration-speedup patch # # David Mosberger asked that this be backed out: # # "I do not believe that flushing the TLB before migration is be the right thing # to do on ia64 machines which support global TLB purges (i.e., all but SGI's # machines)." # # It was of huge benefit for the SGI machines, so work is ongoing. # # kernel/sched.c # 2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -10 # revert the process-migration-speedup patch # # include/asm-ia64/tlb.h # 2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -2 # revert the process-migration-speedup patch # # include/asm-generic/tlb.h # 2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -2 # revert the process-migration-speedup patch # # ChangeSet # 2004/05/14 19:41:20-07:00 akpm@osdl.org # [PATCH] MSEC_TO_JIFFIES to msec_to_jiffies # # Switch all users of MSEC[S]_TO_JIFFIES and JIFFIES_TO_MSEC[S] over to use # jiffies_to_msecs() and msecs_to_jiffies(). Withdraw MSECS_TO_JIFFIES() and # JIFFIES_TO_MSECS() from the kernel API. # # net/sctp/socket.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +17 -17 # MSEC_TO_JIFFIES to msec_to_jiffies # # net/sctp/endpointola.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2 # MSEC_TO_JIFFIES to msec_to_jiffies # # net/sctp/chunk.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # net/sctp/associola.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5 # MSEC_TO_JIFFIES to msec_to_jiffies # # net/irda/irlap_event.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3 # MSEC_TO_JIFFIES to msec_to_jiffies # # net/irda/ircomm/ircomm_tty.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # kernel/sched.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # include/linux/time.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -3 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/tekram.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +6 -6 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/tekram-sir.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/stir4200.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/sir_kthread.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/sir_dev.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/mcp2120.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +4 -4 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/ma600.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +8 -8 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/ma600-sir.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +4 -4 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/irtty-sir.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/irport.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/irda-usb.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/girbil.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/actisys.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/act200l.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5 # MSEC_TO_JIFFIES to msec_to_jiffies # # drivers/net/irda/act200l-sir.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1 # MSEC_TO_JIFFIES to msec_to_jiffies # # ChangeSet # 2004/05/14 19:41:08-07:00 akpm@osdl.org # [PATCH] Covert drivers to use msec_to_jiffies # # Remove various private implementations of msecs_to_jiffies() and # jiffies_to_msecs(). # # There are various uppercase versions which should be consolidated. # # include/linux/libata.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5 # Covert drivers to use msec_to_jiffies # # drivers/net/tulip/de2104x.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -8 # Covert drivers to use msec_to_jiffies # # drivers/char/watchdog/shwdt.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -1 # Covert drivers to use msec_to_jiffies # # drivers/block/genhd.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +8 -18 # Covert drivers to use msec_to_jiffies # # drivers/block/carmel.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5 # Covert drivers to use msec_to_jiffies # # ChangeSet # 2004/05/14 19:40:57-07:00 akpm@osdl.org # [PATCH] MSEC_TO_JIFFIES consolidation # # From: Ingo Molnar # # We have various different implementations of MSEC[S]_TO_JIFFIES and # JIFFIES_TO_MSEC[S]. We recently had a compile-time clash in USB. # # Fix all that up. # # - The SCTP version was very inefficient. Hopefully this version is accurate # enough. # # - Optimise for the HZ=100 and HZ=1000 cases # # - This version does round-up, so sleep(9 milliseconds) works OK on 100HZ. # # - We still have lots of jiffies_to_msec and msec_to_jiffies implementations. # # From: William Lee Irwin III # # Optimize the cases where HZ is a divisor of 1000 or vice-versa in # JIFFIES_TO_MSECS() and MSECS_TO_JIFFIES() by allowing the nonvanishing(!) # integral ratios to appear as a parenthesized expressions eligible for # constant folding optimizations. # # From: me # # Use typesafe inlines for the jiffies-to-millisecond conversion functions. # # This means that milliseconds officially takes the type `unsigned int'. # All current callers seem to be OK with that. # # Drivers need to be fixed up to use this instead of their private versions. # # kernel/sched.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -8 # MSEC_TO_JIFFIES consolidation # # include/net/sctp/sctp.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5 # MSEC_TO_JIFFIES consolidation # # include/net/irda/irda.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -2 # MSEC_TO_JIFFIES consolidation # # include/linux/time.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +31 -0 # MSEC_TO_JIFFIES consolidation # # include/asm-i386/param.h # 2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -2 # MSEC_TO_JIFFIES consolidation # # ChangeSet # 2004/05/14 19:40:46-07:00 akpm@osdl.org # [PATCH] sched: add missing local_irq_enable() # # From: Nick Piggin # # this_rq_lock does a local_irq_disable, and sched_yield() needs to undo that. # # kernel/sched.c # 2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -0 # sched: add missing local_irq_enable() # # ChangeSet # 2004/05/14 19:40:34-07:00 akpm@osdl.org # [PATCH] Fix page double-freeing race # # This has been there for nearly two years. See bugzilla #1403 # # vmscan.c does, in two places: # # spin_lock(zone->lru_lock) # page = lru_to_page(&zone->inactive_list); # if (page_count(page) == 0) { # /* erk, it's being freed by __page_cache_release() or # * release_pages() # */ # put_it_back_on_the_lru(); # # } else { # # --> window 1 <-- # # page_cache_get(page); # put_in_on_private_list(); # } # spin_unlock(zone->lru_lock) # # use_the_private_list(); # # page_cache_release(page); # # # # whereas __page_cache_release() and release_pages() do: # # if (put_page_testzero(page)) { # # --> window 2 <-- # # spin_lock(lru->lock); # if (page_count(page) == 0) { # remove_it_from_the_lru(); # really_free_the_page() # } # spin_unlock(zone->lru_lock) # } # # # The race occurs if the vmscan.c path sees page_count()==1 and then the # page_cache_release() path happens in that few-instruction "window 1" before # vmscan's page_cache_get(). # # The page_cache_release() path does put_page_testzero(), which returns true. # Then this CPU takes an interrupt... # # The vmscan.c path then does page_cache_get(), taking the refcount to one. # Then it uses the page and does page_cache_release(), taking the refcount to # zero and the page is really freed. # # Now, the CPU running page_cache_release() returns from the interrupt, takes # the LRU lock, sees the page still has a refcount of zero and frees it again. # Boom. # # # The patch fixes this by closing "window 1". We provide a # "get_page_testone()" which grabs a ref on the page and returns true if the # refcount was previously zero. If that happens the vmscan.c code simply drops # the page's refcount again and leaves the page on the LRU. # # All this happens under the zone->lru_lock, which is also taken by # __page_cache_release() and release_pages(), so the vmscan code knows that the # page has not been returned to the page allocator yet. # # # In terms of implementation, the page counts are now offset by one: a free page # has page->_count of -1. This is so that we can use atomic_add_negative() and # atomic_inc_and_test() to provide put_page_testzero() and get_page_testone(). # # The macros hide all of this so the public interpretation of page_count() and # set_page_count() remains unaltered. # # The compiler can usually constant-fold the offsetting of page->count. This # patch increases an x86 SMP kernel's text by 32 bytes. # # The patch renames page->count to page->_count to break callers who aren't # using the macros. # # This patch requires that the architecture implement atomic_add_negative(). It # is currently present on # # arm # arm26 # i386 # ia64 # mips # ppc # s390 # v850 # x86_64 # # ppc implements this as # # #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) # # and atomic_add_return() is implemented on # # alpha # cris # h8300 # ia64 # m68knommu # mips # parisc # ppc # ppc # ppc64 # s390 # sh # sparc # v850 # # so we're looking pretty good. # # mm/vmscan.c # 2004/05/14 19:00:05-07:00 akpm@osdl.org +14 -7 # Fix page double-freeing race # # include/linux/mm.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +34 -14 # Fix page double-freeing race # # ChangeSet # 2004/05/14 19:40:23-07:00 akpm@osdl.org # [PATCH] sparc64: implement atomic_add_negative() # # include/asm-sparc64/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +3 -0 # sparc64: implement atomic_add_negative() # # ChangeSet # 2004/05/14 19:40:13-07:00 akpm@osdl.org # [PATCH] ia64 atomic_inc_and_test fix # # From: David Mosberger # # include/asm-ia64/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +2 -2 # ia64 atomic_inc_and_test fix # # ChangeSet # 2004/05/14 19:40:02-07:00 akpm@osdl.org # [PATCH] alpha: atomic_inc_and_test() # # From: Ivan Kokshaysky # # It seems atomic_inc_and_test() is missing on alpha. # # include/asm-alpha/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +1 -0 # alpha: atomic_inc_and_test() # # ChangeSet # 2004/05/14 19:39:51-07:00 akpm@osdl.org # [PATCH] Implement atomic_inc_and_test() on various architectures # # It's easy to do when the arch provides atomic_inc_return(). # # include/asm-v850/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-sparc64/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-sparc/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-sh/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-s390/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +1 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-ppc64/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-ppc/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-parisc/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-m68knommu/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # include/asm-h8300/atomic.h # 2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0 # Implement atomic_inc_and_test() on various architectures # # ChangeSet # 2004/05/14 19:39:40-07:00 akpm@osdl.org # [PATCH] Implement atomic_add_negative() on various architectures # # Lots of architectures have atomic_add_return() and no atomic_add_negative(). # # We can implement the latter in terms of the former. # # include/asm-sparc/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-sh/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-ppc64/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-parisc/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-m68knommu/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-h8300/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -0 # Implement atomic_add_negative() on various architectures # # include/asm-cris/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # include/asm-alpha/atomic.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0 # Implement atomic_add_negative() on various architectures # # ChangeSet # 2004/05/14 19:39:29-07:00 akpm@osdl.org # [PATCH] Make users of page->count use the provided macros # # I'm about to change the meaning (and name) of page->count. Go through and fix # up all those places which are open-coding references to it. # # drivers/scsi/sg.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4 # Make users of page->count use the provided macros # # drivers/char/drm/drm_vm.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1 # Make users of page->count use the provided macros # # drivers/char/drm/ati_pcigart.h # 2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -2 # Make users of page->count use the provided macros # # arch/x86_64/mm/pageattr.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4 # Make users of page->count use the provided macros # # arch/um/kernel/mem.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1 # Make users of page->count use the provided macros # # arch/sparc/mm/init.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1 # Make users of page->count use the provided macros # # arch/ppc/mm/init.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1 # Make users of page->count use the provided macros # # arch/mips/mm/init.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1 # Make users of page->count use the provided macros # # arch/i386/mm/pageattr.c # 2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4 # Make users of page->count use the provided macros # # ChangeSet # 2004/05/14 16:48:56-07:00 davem@nuts.davemloft.net # Merge nuts.davemloft.net:/disk1/BK/network-2.6 # into nuts.davemloft.net:/disk1/BK/net-2.6 # # drivers/bluetooth/hci_usb.c # 2004/05/14 16:48:48-07:00 davem@nuts.davemloft.net +0 -0 # Auto merged # # drivers/bluetooth/bfusb.c # 2004/05/14 16:48:47-07:00 davem@nuts.davemloft.net +0 -0 # Auto merged # # ChangeSet # 2004/05/14 15:44:08-07:00 greg@kroah.com # Merge kroah.com:/home/greg/linux/BK/bleed-2.6 # into kroah.com:/home/greg/linux/BK/driver-2.6 # # kernel/module.c # 2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0 # Auto merged # # drivers/firmware/Kconfig # 2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0 # Auto merged # # ChangeSet # 2004/05/14 15:21:10-07:00 greg@kroah.com # Merge kroah.com:/home/greg/linux/BK/bleed-2.6 # into kroah.com:/home/greg/linux/BK/i2c-2.6 # # include/linux/pci_ids.h # 2004/05/14 15:21:04-07:00 greg@kroah.com +0 -0 # Auto merged # # arch/i386/pci/irq.c # 2004/05/14 15:21:04-07:00 greg@kroah.com +0 -0 # Auto merged # # ChangeSet # 2004/05/14 15:00:02-07:00 dsaxena@plexity.net # [PATCH] I2C: Missed ixp42x -> ixp4xx conversion # # Forgot to include this with my original patch a few weeks ago... # # include/linux/i2c-id.h # 2004/05/12 17:20:41-07:00 dsaxena@plexity.net +1 -1 # I2C: Missed ixp42x -> ixp4xx conversion # # ChangeSet # 2004/05/14 14:59:26-07:00 bjorn@mork.no # [PATCH] I2C: "probe" module param broken for it87 in Linux 2.6.6 # # Jean Delvare writes: # > So I'd suggest that you simply use the standard exit sequence in the # > it87 driver (the second one in your current patch). A patch for the 2.4 # > driver would be appreciated as well. # # OK. I've attached a new version of the patch against linux-2.6.6. # I'll send a patch against current lm_sensors CVS removing the extra # exit command in a separate mail. # # Greg KH writes: # > On Wed, May 12, 2004 at 04:38:03PM +0200, Bj?rn Mork wrote: # >> + if (!it87_find(&addr)) { # >> + printk("it87.o: new ISA address: 0x%04x\n", addr); # > # > That printk is wrong (no KERN_ level, or dev_printk() style use). # > Please fix it in your next revision of this patch. # # Errh, I just added it to document my sloppyness. It was never meant # to be in the patch I sent you. Sorry. Removed in the attached patch. # The style of these drivers seem to be "just working, making no noise" # so I assume informational printk's are unwanted. # # drivers/i2c/chips/it87.c # 2004/05/13 10:49:41-07:00 bjorn@mork.no +78 -0 # I2C: "probe" module param broken for it87 in Linux 2.6.6 # # ChangeSet # 2004/05/14 14:58:42-07:00 jdgaston@snoqualmie.dp.intel.com # [PATCH] I2C: ICH6/6300ESB i2c support # # This patch adds DID support for ICH6 and 6300ESB to i2c-i801.c(SMBus). # In order to add this support I needed to patch pci_ids.h with the SMBus # DID's. To keep things orginized I renumbered the ICH6 and ESB entries # in pci_ids.h. I then patched the piix IDE and i810 audio drivers to # reflect the updated #define's. I also removed an error from irq.c; # there was a reference to a 6300ESB DID that does not exist. # # sound/oss/i810_audio.c # 2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +5 -5 # I2C: ICH6/6300ESB i2c support # # include/linux/pci_ids.h # 2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +18 -3 # I2C: ICH6/6300ESB i2c support # # drivers/ide/pci/piix.h # 2004/05/11 17:34:02-07:00 jdgaston@snoqualmie.dp.intel.com +1 -1 # I2C: ICH6/6300ESB i2c support # # drivers/ide/pci/piix.c # 2004/05/11 17:30:46-07:00 jdgaston@snoqualmie.dp.intel.com +4 -4 # I2C: ICH6/6300ESB i2c support # # drivers/i2c/busses/i2c-i801.c # 2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +20 -6 # I2C: ICH6/6300ESB i2c support # # drivers/i2c/busses/Kconfig # 2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +2 -0 # I2C: ICH6/6300ESB i2c support # # arch/i386/pci/irq.c # 2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +2 -1 # I2C: ICH6/6300ESB i2c support # # ChangeSet # 2004/05/14 14:49:39-07:00 greg@kroah.com # USB: convert visor to use module_param() # # drivers/usb/serial/visor.c # 2004/05/14 07:49:18-07:00 greg@kroah.com +7 -6 # USB: convert visor to use module_param() # # ChangeSet # 2004/05/14 14:47:04-07:00 greg@kroah.com # USB: convert pl2303 to use module_param() # # drivers/usb/serial/pl2303.c # 2004/05/14 07:46:43-07:00 greg@kroah.com +3 -2 # USB: convert pl2303 to use module_param() # # ChangeSet # 2004/05/14 14:46:03-07:00 greg@kroah.com # USB: change usbserial core to use module_param() # # drivers/usb/serial/usb-serial.c # 2004/05/14 07:45:20-07:00 greg@kroah.com +3 -2 # USB: change usbserial core to use module_param() # # drivers/usb/serial/generic.c # 2004/05/14 07:45:20-07:00 greg@kroah.com +3 -2 # USB: change usbserial core to use module_param() # # ChangeSet # 2004/05/14 13:08:58-07:00 davem@nuts.davemloft.net # [TG3]: Add 572x/575x PCI IDs to driver table, update vers/reldate. # # drivers/net/tg3.c # 2004/05/14 13:08:40-07:00 davem@nuts.davemloft.net +12 -2 # [TG3]: Add 572x/575x PCI IDs to driver table, update vers/reldate. # # ChangeSet # 2004/05/14 13:04:52-07:00 davem@nuts.davemloft.net # [TG3]: Rewrite dma_rwctrl settings to handle PCIX/PCIE. # # drivers/net/tg3.h # 2004/05/14 13:04:34-07:00 davem@nuts.davemloft.net +9 -0 # [TG3]: Rewrite dma_rwctrl settings to handle PCIX/PCIE. # # drivers/net/tg3.c # 2004/05/14 13:04:34-07:00 davem@nuts.davemloft.net +49 -82 # [TG3]: Rewrite dma_rwctrl settings to handle PCIX/PCIE. # # ChangeSet # 2004/05/14 12:35:59-07:00 davem@nuts.davemloft.net # [TG3]: Do not enable slow clocks on 5750 with ASF. # # drivers/net/tg3.c # 2004/05/14 12:35:41-07:00 davem@nuts.davemloft.net +2 -1 # [TG3]: Do not enable slow clocks on 5750 with ASF. # # ChangeSet # 2004/05/14 12:22:38-07:00 davem@nuts.davemloft.net # [TG3]: More 5750 chip reset tweaks. # # drivers/net/tg3.c # 2004/05/14 12:22:21-07:00 davem@nuts.davemloft.net +31 -3 # [TG3]: More 5750 chip reset tweaks. # # ChangeSet # 2004/05/14 12:19:20-07:00 david-b@pacbell.net # [PATCH] USB: hcd-pci suspend tweak # # I needed this to get an APM + UHCI config to behave on resume. # Applies against your BK of last night ... OHCI and EHCI do # some of this manually, they could be simplified later. # # drivers/usb/core/hcd-pci.c # 2004/05/11 09:28:40-07:00 david-b@pacbell.net +2 -0 # USB: hcd-pci suspend tweak # # ChangeSet # 2004/05/14 12:13:00-07:00 maneesh@in.ibm.com # [PATCH] sysfs_rename_dir-cleanup # # o The following patch cleans up sysfs_rename_dir(). It now checks the # return code of kobject_set_name() and propagates the error code to its # callers. Because of this there are changes in the following two APIs. Both # return int instead of void. # # int sysfs_rename_dir(struct kobject * kobj, const char *new_name) # int kobject_rename(struct kobject * kobj, char *new_name) # # ChangeSet # 2004/05/14 12:12:11-07:00 masbock@us.ibm.com # [PATCH] add ibmasm driver warning message # # [note, I changed this a bit to be nicer on the system log, greg k-h] # # drivers/misc/ibmasm/module.c # 2004/05/14 05:00:50-07:00 masbock@us.ibm.com +7 -0 # add ibmasm driver warning message # # drivers/misc/Kconfig # 2004/05/10 08:38:51-07:00 masbock@us.ibm.com +7 -1 # add ibmasm driver warning message # # ChangeSet # 2004/05/14 12:02:44-07:00 davem@nuts.davemloft.net # [TG3]: Full chip reset tweaks for 5750. # # drivers/net/tg3.c # 2004/05/14 12:02:27-07:00 davem@nuts.davemloft.net +11 -0 # [TG3]: Full chip reset tweaks for 5750. # # ChangeSet # 2004/05/14 11:57:21-07:00 david-b@pacbell.net # [PATCH] USB: ohci resume fix # # Prakash K. Cheemplavam wrote: # > David Brownell wrote: # > # >>> There appear lines like # >>> # >>> usb usb2: string descriptor 0 read error: -108 # >>> # >>> bug or feature? They weren't there with 2.6.6-mm1. I have no usb2.0 # >>> stuff to actually test. My usb1 stuff seems to work though. # >> # >> Bug; minor, since the only real symptom seems to be messages like # >> that. Ignore them for now, I'll make a patch soonish. # > # > Ok, good. Thanks for the explanation of what is going on, though I don't # > can make too much out of it. ;-) # # The short version is: it's missing this patch. # # drivers/usb/host/ohci-hub.c # 2004/05/13 09:15:18-07:00 david-b@pacbell.net +1 -0 # USB: ohci resume fix # # ChangeSet # 2004/05/14 11:56:59-07:00 davem@nuts.davemloft.net # [TG3]: On 5750 with TSO, need to set some special reg bits. # # drivers/net/tg3.c # 2004/05/14 11:56:42-07:00 davem@nuts.davemloft.net +9 -0 # [TG3]: On 5750 with TSO, need to set some special reg bits. # # ChangeSet # 2004/05/14 11:52:44-07:00 baldrick@free.fr # [PATCH] USB: compile fix for usbfs snooping # # drivers/usb/core/devio.c # 2004/05/14 00:50:03-07:00 baldrick@free.fr +1 -0 # USB: compile fix for usbfs snooping # # ChangeSet # 2004/05/14 11:49:41-07:00 greg@kroah.com # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/whiteheat.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +1 -22 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/visor.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +5 -16 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/usb-serial.h # 2004/05/14 04:49:03-07:00 greg@kroah.com +0 -13 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/usb-serial.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +17 -66 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/safe_serial.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +3 -10 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/pl2303.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +2 -17 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/omninet.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +7 -24 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/kl5kusb105.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +20 -38 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/keyspan.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +1 -5 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/ir-usb.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +6 -21 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/ipaq.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +2 -14 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/io_ti.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +29 -43 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/io_edgeport.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +29 -36 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/generic.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +1 -12 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/ftdi_sio.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +49 -70 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/empeg.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +4 -18 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/cyberjack.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +4 -16 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/console.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +3 -2 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # drivers/usb/serial/belkin_sa.c # 2004/05/14 04:49:03-07:00 greg@kroah.com +4 -12 # USB: remove get_usb_serial() as it's pretty much unneeded # # It also could hide real bugs, and that's not good. And the name # implies that a reference is grabbed, and that's not true at all. # # ChangeSet # 2004/05/14 11:46:43-07:00 davem@nuts.davemloft.net # [TG3]: Include mss in every txd, not just the first, on 5750. # # drivers/net/tg3.c # 2004/05/14 11:46:26-07:00 davem@nuts.davemloft.net +12 -4 # [TG3]: Include mss in every txd, not just the first, on 5750. # # ChangeSet # 2004/05/14 14:10:10-04:00 jgarzik@redhat.com # [netdrvr] remove rcpci driver, for Red Creek Hardware VPNs # # Pete Popov, the author says # # This driver is obsolete and broken in 2.4 (and I'm pretty sure in 2.6). # The hardware has not been available for a while. I wrote the driver # for 2.2 but after I left RedCreek (which went out of business), # someone in the community updated it to 2.4, but I don't think that # person even had the hardware to test it so the driver remained broken # in 2.4. So my recommendation is that it's really time to remove this # driver from the kernel tree. Just my opinion but I thought I'd share # it with you. # [...] # I can't imagine that there are any users because 2.4 was broken last # time I checked (admittedly that was a year ago). # # drivers/net/Makefile # 2004/05/14 14:08:27-04:00 jgarzik@redhat.com +0 -3 # [netdrvr] remove rcpci driver, for Red Creek Hardware VPNs # # Pete Popov, the author says # # This driver is obsolete and broken in 2.4 (and I'm pretty sure in 2.6). # The hardware has not been available for a while. I wrote the driver # for 2.2 but after I left RedCreek (which went out of business), # someone in the community updated it to 2.4, but I don't think that # person even had the hardware to test it so the driver remained broken # in 2.4. So my recommendation is that it's really time to remove this # driver from the kernel tree. Just my opinion but I thought I'd share # it with you. # [...] # I can't imagine that there are any users because 2.4 was broken last # time I checked (admittedly that was a year ago). # # drivers/net/Kconfig # 2004/05/14 14:08:27-04:00 jgarzik@redhat.com +0 -10 # [netdrvr] remove rcpci driver, for Red Creek Hardware VPNs # # Pete Popov, the author says # # This driver is obsolete and broken in 2.4 (and I'm pretty sure in 2.6). # The hardware has not been available for a while. I wrote the driver # for 2.2 but after I left RedCreek (which went out of business), # someone in the community updated it to 2.4, but I don't think that # person even had the hardware to test it so the driver remained broken # in 2.4. So my recommendation is that it's really time to remove this # driver from the kernel tree. Just my opinion but I thought I'd share # it with you. # [...] # I can't imagine that there are any users because 2.4 was broken last # time I checked (admittedly that was a year ago). # # ChangeSet # 2004/05/14 10:54:51-07:00 greg@kroah.com # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/usb-serial.h # 2004/05/14 03:54:11-07:00 greg@kroah.com +1 -17 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/usb-serial.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -3 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/pl2303.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -3 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/omninet.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -6 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/keyspan_pda.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +1 -15 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/io_ti.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -4 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/io_edgeport.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -8 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/digi_acceleport.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -5 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/cyberjack.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -5 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # drivers/usb/serial/belkin_sa.c # 2004/05/14 03:54:11-07:00 greg@kroah.com +0 -6 # USB: remove serial_paranoia_check() function # # If this is hiding real problems, we need to find them. # # ChangeSet # 2004/05/14 10:53:59-07:00 greg@kroah.com # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/visor.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/usb-serial.h # 2004/05/14 03:53:25-07:00 greg@kroah.com +1 -18 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/pl2303.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -11 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/omninet.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -11 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/kobil_sct.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -3 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/keyspan_pda.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -9 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/ir-usb.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/ipaq.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -15 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/io_ti.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -14 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/io_edgeport.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +23 -44 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/generic.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -3 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/ftdi_sio.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/empeg.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/digi_acceleport.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +3 -10 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/cyberjack.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # drivers/usb/serial/belkin_sa.c # 2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6 # USB: removed port_paranoia_check() call for usb serial drivers. # # Pretty useless stuff. If this was hiding anything real, we need to find out. # # ChangeSet # 2004/05/14 10:52:34-07:00 greg@kroah.com # USB: remove magic number field from struct usb_serial as it's pretty useless. # # drivers/usb/serial/usb-serial.h # 2004/05/14 03:52:11-07:00 greg@kroah.com +0 -8 # USB: remove magic number field from struct usb_serial as it's pretty useless. # # drivers/usb/serial/usb-serial.c # 2004/05/14 03:52:11-07:00 greg@kroah.com +1 -2 # USB: remove magic number field from struct usb_serial as it's pretty useless. # # ChangeSet # 2004/05/14 10:50:40-07:00 greg@kroah.com # USB: remove magic number field from usb_serial_port as it's pretty useless. # # drivers/usb/serial/usb-serial.h # 2004/05/14 03:50:03-07:00 greg@kroah.com +1 -8 # USB: remove magic number field from usb_serial_port as it's pretty useless. # # drivers/usb/serial/usb-serial.c # 2004/05/14 03:50:03-07:00 greg@kroah.com +0 -1 # USB: remove magic number field from usb_serial_port as it's pretty useless. # # BitKeeper/deleted/.del-rcpci45.c~835bf68187aa024c # 2004/05/14 13:45:40-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/rcpci45.c # # BitKeeper/deleted/.del-rclanmtl.h~8817c7ee4b998a86 # 2004/05/14 13:45:40-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/rclanmtl.h # # BitKeeper/deleted/.del-rclanmtl.c~29677cb1f1e8c94 # 2004/05/14 13:45:40-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/rclanmtl.c # # BitKeeper/deleted/.del-rcif.h~4592b9fa074f7f4 # 2004/05/14 13:45:40-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/rcif.h # # ChangeSet # 2004/05/14 10:34:27-07:00 y.rutschle@indigovision.com # [ARM] Fix broken IXP4xx GPIO0 IRQ handling # # Patch from Yves Rutschle # # arch/arm/mach-ixp4xx/common.c # 2004/05/14 10:34:16-07:00 y.rutschle@indigovision.com +1 -1 # Fix broken IXP4xx GPIO0 IRQ handling # # ChangeSet # 2004/05/14 13:28:03-04:00 hch@lst.de # [netdrvr wan] remove comx driver # # the drivers have been broken since pre-2.4.0, like referencing a symbol # that was made procfs-internal in 2.3.x, haven't received maintainer # updates for about the same period and MOD_{INC,DEC}_USE_COUNT usage that # pretty much unfixable (inside warts of _horrible_ procfs abuse). # # drivers/net/wan/Makefile # 2004/05/14 13:26:19-04:00 hch@lst.de +0 -8 # [netdrvr wan] remove comx driver # # the drivers have been broken since pre-2.4.0, like referencing a symbol # that was made procfs-internal in 2.3.x, haven't received maintainer # updates for about the same period and MOD_{INC,DEC}_USE_COUNT usage that # pretty much unfixable (inside warts of _horrible_ procfs abuse). # # drivers/net/wan/Kconfig # 2004/05/14 13:26:19-04:00 hch@lst.de +0 -113 # [netdrvr wan] remove comx driver # # the drivers have been broken since pre-2.4.0, like referencing a symbol # that was made procfs-internal in 2.3.x, haven't received maintainer # updates for about the same period and MOD_{INC,DEC}_USE_COUNT usage that # pretty much unfixable (inside warts of _horrible_ procfs abuse). # # BitKeeper/deleted/.del-comxhw.h~6b76e46436247886 # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comxhw.h # # BitKeeper/deleted/.del-comx.h~af3561d319f35c94 # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx.h # # BitKeeper/deleted/.del-comx.c~fc2ba0c33f9a9544 # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx.c # # BitKeeper/deleted/.del-comx-proto-ppp.c~a73732d78d29937c # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-proto-ppp.c # # BitKeeper/deleted/.del-comx-proto-lapb.c~c752dbedec6c7bfe # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-proto-lapb.c # # BitKeeper/deleted/.del-comx-proto-fr.c~37dfa3e616a11ce9 # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-proto-fr.c # # BitKeeper/deleted/.del-comx-hw-munich.c~a3e4363f14137edb # 2004/05/14 13:25:03-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-hw-munich.c # # BitKeeper/deleted/.del-comx-hw-mixcom.c~a865aecdd553123b # 2004/05/14 13:25:02-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-hw-mixcom.c # # BitKeeper/deleted/.del-comx-hw-locomx.c~31fef1823d490470 # 2004/05/14 13:25:02-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-hw-locomx.c # # BitKeeper/deleted/.del-comx-hw-comx.c~ffe17568e39e2f57 # 2004/05/14 13:25:02-04:00 jgarzik@redhat.com +0 -0 # Delete: drivers/net/wan/comx-hw-comx.c # # ChangeSet # 2004/05/14 14:16:04+01:00 aia21@cantab.net # NTFS: 2.1.11 - Rename uchar_t to ntfschar. # # fs/ntfs/volume.h # 2004/05/14 14:15:58+01:00 aia21@cantab.net +1 -1 # Rename uchar_t to ntfschar. # # fs/ntfs/upcase.c # 2004/05/14 14:15:58+01:00 aia21@cantab.net +4 -4 # Rename uchar_t to ntfschar. # # fs/ntfs/unistr.c # 2004/05/14 14:15:58+01:00 aia21@cantab.net +23 -23 # Rename uchar_t to ntfschar. # # fs/ntfs/types.h # 2004/05/14 14:15:58+01:00 aia21@cantab.net +1 -1 # Rename uchar_t to ntfschar. # # fs/ntfs/super.c # 2004/05/14 14:15:57+01:00 aia21@cantab.net +6 -6 # Rename uchar_t to ntfschar. # # fs/ntfs/ntfs.h # 2004/05/14 14:15:57+01:00 aia21@cantab.net +16 -16 # Rename uchar_t to ntfschar. # # fs/ntfs/namei.c # 2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4 # Rename uchar_t to ntfschar. # # fs/ntfs/logfile.h # 2004/05/14 14:15:57+01:00 aia21@cantab.net +1 -1 # Rename uchar_t to ntfschar. # # fs/ntfs/layout.h # 2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4 # Rename uchar_t to ntfschar. # # fs/ntfs/inode.h # 2004/05/14 14:15:57+01:00 aia21@cantab.net +3 -3 # Rename uchar_t to ntfschar. # # fs/ntfs/inode.c # 2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4 # Rename uchar_t to ntfschar. # # fs/ntfs/dir.h # 2004/05/14 14:15:56+01:00 aia21@cantab.net +3 -3 # Rename uchar_t to ntfschar. # # fs/ntfs/dir.c # 2004/05/14 14:15:56+01:00 aia21@cantab.net +22 -22 # Rename uchar_t to ntfschar. # # fs/ntfs/attrib.h # 2004/05/14 14:15:56+01:00 aia21@cantab.net +5 -4 # Rename uchar_t to ntfschar. # # fs/ntfs/attrib.c # 2004/05/14 14:15:56+01:00 aia21@cantab.net +14 -13 # Rename uchar_t to ntfschar. # # fs/ntfs/ChangeLog # 2004/05/14 14:15:56+01:00 aia21@cantab.net +2 -0 # Update for 2.1.11 release. # # ChangeSet # 2004/05/14 12:30:56+01:00 aia21@cantab.net # NTFS: 2.1.11 - Driver internal cleanups. # # fs/ntfs/logfile.c # 2004/05/14 12:30:49+01:00 aia21@cantab.net +6 -1 # Use generic_ffs() instead of ffs() in which allows the log_page_size # variable to be optimized by gcc into a constant. # # fs/ntfs/Makefile # 2004/05/14 12:30:49+01:00 aia21@cantab.net +1 -1 # Bump version. # # fs/ntfs/ChangeLog # 2004/05/14 12:30:49+01:00 aia21@cantab.net +4 -1 # Update. # # Documentation/filesystems/ntfs.txt # 2004/05/14 12:30:49+01:00 aia21@cantab.net +2 -0 # Update. # # ChangeSet # 2004/05/13 22:46:01-04:00 jgarzik@redhat.com # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # include/linux/libata.h # 2004/05/13 22:45:55-04:00 jgarzik@redhat.com +0 -2 # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # drivers/scsi/sata_vsc.c # 2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1 # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # drivers/scsi/sata_sx4.c # 2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1 # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # drivers/scsi/sata_promise.c # 2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1 # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # drivers/scsi/libata-core.c # 2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1 # [libata] kill ATA_QCFLAG_POLL flag # # The standard ATA bit nIEN in the Device Control register serves as # the indicator for whether we are polling or not. As it mirrors # ATA_QCFLAG_POLL completely, eliminate that in favor of testing # ATA_NIEN bit. # # ChangeSet # 2004/05/13 22:39:17-04:00 jgarzik@redhat.com # [libata] random minor bug fixes # # * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set. Preparation # for future use, as currently ATA_QCFLAG_SG is always set when # ata_qc_issue is called. # # This change in theory is incorrect for Promise TX/SX4 drivers, # since those drivers set up the Promise-specific packet in their # ->fill_sg hook, which is now called conditionally. # # A FIXME that doesn't affect anything, for now. # # * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be # differentiated. # # * Create and use ata_qc_set_polling() to consistently set/clear the # flags associated with using polling instead of interrupts. # # include/linux/libata.h # 2004/05/13 22:39:12-04:00 jgarzik@redhat.com +7 -0 # [libata] random minor bug fixes # # * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set. Preparation # for future use, as currently ATA_QCFLAG_SG is always set when # ata_qc_issue is called. # # This change in theory is incorrect for Promise TX/SX4 drivers, # since those drivers set up the Promise-specific packet in their # ->fill_sg hook, which is now called conditionally. # # A FIXME that doesn't affect anything, for now. # # * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be # differentiated. # # * Create and use ata_qc_set_polling() to consistently set/clear the # flags associated with using polling instead of interrupts. # # drivers/scsi/libata-scsi.c # 2004/05/13 22:39:12-04:00 jgarzik@redhat.com +1 -2 # [libata] random minor bug fixes # # * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set. Preparation # for future use, as currently ATA_QCFLAG_SG is always set when # ata_qc_issue is called. # # This change in theory is incorrect for Promise TX/SX4 drivers, # since those drivers set up the Promise-specific packet in their # ->fill_sg hook, which is now called conditionally. # # A FIXME that doesn't affect anything, for now. # # * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be # differentiated. # # * Create and use ata_qc_set_polling() to consistently set/clear the # flags associated with using polling instead of interrupts. # # drivers/scsi/libata-core.c # 2004/05/13 22:39:12-04:00 jgarzik@redhat.com +16 -11 # [libata] random minor bug fixes # # * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set. Preparation # for future use, as currently ATA_QCFLAG_SG is always set when # ata_qc_issue is called. # # This change in theory is incorrect for Promise TX/SX4 drivers, # since those drivers set up the Promise-specific packet in their # ->fill_sg hook, which is now called conditionally. # # A FIXME that doesn't affect anything, for now. # # * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be # differentiated. # # * Create and use ata_qc_set_polling() to consistently set/clear the # flags associated with using polling instead of interrupts. # # ChangeSet # 2004/05/13 21:26:59-04:00 jgarzik@redhat.com # [libata] more ATAPI work - translate SCSI CDB to ATA PACKET # # Now that we can specify ATAPI as a taskfile protocol, we can utilize # the existing SCSI->ATA translation infrastructure to build an ATA # PACKET command quickly and easily. # # drivers/scsi/libata.h # 2004/05/13 21:26:53-04:00 jgarzik@redhat.com +0 -1 # [libata] more ATAPI work - translate SCSI CDB to ATA PACKET # # Now that we can specify ATAPI as a taskfile protocol, we can utilize # the existing SCSI->ATA translation infrastructure to build an ATA # PACKET command quickly and easily. # # drivers/scsi/libata-scsi.c # 2004/05/13 21:26:53-04:00 jgarzik@redhat.com +16 -46 # [libata] more ATAPI work - translate SCSI CDB to ATA PACKET # # Now that we can specify ATAPI as a taskfile protocol, we can utilize # the existing SCSI->ATA translation infrastructure to build an ATA # PACKET command quickly and easily. # # drivers/scsi/libata-core.c # 2004/05/13 21:26:53-04:00 jgarzik@redhat.com +0 -14 # [libata] more ATAPI work - translate SCSI CDB to ATA PACKET # # Now that we can specify ATAPI as a taskfile protocol, we can utilize # the existing SCSI->ATA translation infrastructure to build an ATA # PACKET command quickly and easily. # # ChangeSet # 2004/05/13 21:15:42-04:00 jgarzik@redhat.com # [libata] use new ->bmdma_{start,setup} method to properly support ATAPI # # drivers/scsi/libata-core.c # 2004/05/13 21:15:37-04:00 jgarzik@redhat.com +9 -2 # [libata] use new ->bmdma_{start,setup} method to properly support ATAPI # # ChangeSet # 2004/05/13 20:35:48-04:00 jgarzik@redhat.com # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # ChangeSet # 2004/05/13 17:34:01-07:00 dsaxena@xanadu.(none) # [ARM] Add config help and documentation for Intel IXP4xx platforms # # Patch from Deepak Saxena # # # include/linux/libata.h # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +3 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_vsc.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_via.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_sx4.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +8 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_svw.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_sis.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_sil.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/sata_promise.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +8 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/libata-core.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +40 -6 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # drivers/scsi/ata_piix.c # 2004/05/13 20:33:36-04:00 jgarzik@redhat.com +2 -0 # [libata] add new ->bmdma_setup hook # # In order to support some new taskfile protocols, particularly ATAPI, # the setup-and-start-DMA hook needs to be split into its component # pieces, 'setup' and 'start'. # # For PCI IDE-style controllers, most of the code is moved into the # 'setup' portion, with the 'start' portion only flipping a single # bit in hardware. # # Documentation/arm/IXP4xx # 2004/05/13 17:33:10-07:00 dsaxena@xanadu.(none) +155 -0 # # arch/arm/mach-ixp4xx/Kconfig # 2004/05/13 17:33:09-07:00 dsaxena@xanadu.(none) +26 -10 # Add help and arrange platforms in alphabetical order. # # Documentation/arm/IXP4xx # 2004/05/13 17:33:09-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/Documentation/arm/IXP4xx # # ChangeSet # 2004/05/13 16:04:18-07:00 david-b@pacbell.net # [PATCH] USB: usbhid calls itself "hid" # # drivers/usb/input/hid-core.c # 2004/05/12 04:08:51-07:00 david-b@pacbell.net +1 -1 # USB: usbhid calls itself "hid" # # ChangeSet # 2004/05/13 16:03:50-07:00 tony@atomide.com # [PATCH] USB: Merge support for Keyspan UPR-112 USB serial adapter from 2.4 to 2.6 # # Following patch merges the support for Keyspan UPR-112 USB serial adapter # from 2.4 to 2.6. # # drivers/usb/serial/keyspan.h # 2004/05/12 08:42:18-07:00 tony@atomide.com +18 -1 # USB: Merge support for Keyspan UPR-112 USB serial adapter from 2.4 to 2.6 # # ChangeSet # 2004/05/13 15:41:14-07:00 dsaxena@xanadu.(none) # MTD driver for Intel IXP4xx platform (from MTD CVS tree) # # Patch from Deepak Saxena # # drivers/mtd/maps/ixp4xx.c # 2004/05/13 15:41:03-07:00 dsaxena@xanadu.(none) +244 -0 # # drivers/mtd/maps/ixp4xx.c # 2004/05/13 15:41:03-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/drivers/mtd/maps/ixp4xx.c # # drivers/mtd/maps/Makefile # 2004/05/13 15:41:03-07:00 dsaxena@xanadu.(none) +1 -0 # IXP4xx MTD driver # # drivers/mtd/maps/Kconfig # 2004/05/13 15:41:03-07:00 dsaxena@xanadu.(none) +9 -0 # IXP4xx MTD driver # # ChangeSet # 2004/05/13 15:40:30-07:00 greg@kroah.com # USB: add snooping capability to usbfs for control messages. # # Also fix up some of the other printk() calls to be dev_* calls. # # drivers/usb/core/devio.c # 2004/05/13 08:39:48-07:00 greg@kroah.com +55 -9 # USB: add snooping capability to usbfs for control messages. # # Also fix up some of the other printk() calls to be dev_* calls. # # ChangeSet # 2004/05/13 15:12:54-07:00 dsaxena@xanadu.(none) # [ARM] Remove Documentation/ARM/XScale # # Patch from Deepak Saxena # # Documentation/ARM/XScale has not been updated by anyone in a long time; # therefore, it is being deleted until someone volunteers to provide # updated versions. # # # BitKeeper/deleted/.del-tlb-lock.txt~77f1d6aeda3c090 # 2004/05/13 14:38:44-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/tlb-lock.txt # # BitKeeper/deleted/.del-pmu.txt~3eecfbb31cb40b4 # 2004/05/13 14:38:44-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/pmu.txt # # BitKeeper/deleted/.del-pmon.txt~88a269055fd6891e # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/pmon.txt # # BitKeeper/deleted/.del-message.txt~a4db9e118e42bf9 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/message.txt # # BitKeeper/deleted/.del-dma.txt~cbe702694f172423 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/dma.txt # # BitKeeper/deleted/.del-cache-lock.txt~60355a0d3b053722 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/cache-lock.txt # # BitKeeper/deleted/.del-aau.txt~8a027e607b98cf14 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/aau.txt # # BitKeeper/deleted/.del-IQ80321~2a95de5fcee7cc8 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/IQ80321 # # BitKeeper/deleted/.del-IQ80310~84679126f3cb684a # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/IOP3XX/IQ80310 # # BitKeeper/deleted/.del-80200EVB~7d0c3e8590fcb05 # 2004/05/13 14:38:43-07:00 dsaxena@xanadu.(none) +0 -0 # Delete: Documentation/arm/XScale/ADIFCC/80200EVB # # ChangeSet # 2004/05/13 14:15:01-07:00 akpm@osdl.org # [PATCH] USB: fix ohci-hcd build error # # "Matt H." wrote: # > # > Just attempted to compile 2.6.6-mm2 and got this error # > # > CC [M] drivers/usb/core/driverfs.o # > CC [M] drivers/usb/core/hcd-pci.o # > LD [M] drivers/usb/core/usbcore.o # > LD drivers/usb/host/built-in.o # > CC [M] drivers/usb/host/ehci-hcd.o # > CC [M] drivers/usb/host/ohci-hcd.o # > In file included from drivers/usb/host/ohci-hcd.c:129: # > drivers/usb/host/ohci-hub.c: In function `ohci_rh_resume': # > drivers/usb/host/ohci-hub.c:313: error: `hcd' undeclared (first use in this # > function) # # hm, not sure what's happened there... # # drivers/usb/host/ohci-hub.c # 2004/05/13 11:23:57-07:00 akpm@osdl.org +1 -1 # USB: fix ohci-hcd build error # # ChangeSet # 2004/05/13 14:14:34-07:00 stern@rowland.harvard.edu # [PATCH] USB: Don't delete interfaces until all are unbound # # On Thu, 13 May 2004, Duncan Sands wrote: # # > No, but the pointer for another (previous) interface may just have been # > set to NULL, causing an Oops when usb_ifnum_to_if loops over all # > interfaces. # # Of course! I trust you won't mind me changing your suggested fix # slightly. This should do an equally good job of repairing things, and it # will prevent other possible invalid references as well. # # drivers/usb/core/usb.c # 2004/05/13 06:40:06-07:00 stern@rowland.harvard.edu +6 -0 # USB: Don't delete interfaces until all are unbound # # drivers/usb/core/message.c # 2004/05/13 06:37:48-07:00 stern@rowland.harvard.edu +8 -1 # USB: Don't delete interfaces until all are unbound # # ChangeSet # 2004/05/13 14:14:05-07:00 baldrick@free.fr # [PATCH] USB: Patch to remove interface indices from devio.c # # > I went ahead and created a patch to change all the places where devio.c # > uses an interface index. Now it always uses just the interface number. # > Does this look all right to you? I don't have a convenient way to test # > it. # # Hi Alan, thanks for doing this. It looks and works OK. I added some name # changes: all struct usb_interface pointers are now called intf; and, when # reasonable, variables holding interface numbers are now all called ifnum. # This drowns your original changes in a sea of churning names, I hope you # don't mind. # # drivers/usb/core/devio.c # 2004/05/13 08:15:18-07:00 baldrick@free.fr +78 -108 # USB: Patch to remove interface indices from devio.c # # ChangeSet # 2004/05/13 14:13:38-07:00 david-b@pacbell.net # [PATCH] USB: missing probe() diagnostics for CDC Ethernet # # This patch should help correct the "missing diagnostics with # CONFIG_USB_DEBUG during CDC Ethernet probe()" issue. Some # folk are having problems with firmware that doesn't respond # properly to descriptor fetches -- which is unnecessarily # confusing because the diagnostics aren't being printed. # # drivers/usb/net/usbnet.c # 2004/05/09 13:10:23-07:00 david-b@pacbell.net +14 -20 # USB: missing probe() diagnostics for CDC Ethernet # # ChangeSet # 2004/05/13 10:40:24-07:00 dsaxena@xanadu.(none) # prpmc1100-setup.c, ixdp425-setup.c, coyote-setup.c: # Add INIT_MACHINE() to ixp4xx platform setup code # # arch/arm/mach-ixp4xx/prpmc1100-setup.c # 2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +2 -8 # Add INIT_MACHINE() to ixp4xx platform setup code # # arch/arm/mach-ixp4xx/ixdp425-setup.c # 2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +4 -10 # Add INIT_MACHINE() to ixp4xx platform setup code # # arch/arm/mach-ixp4xx/coyote-setup.c # 2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +2 -9 # Add INIT_MACHINE() to ixp4xx platform setup code # # ChangeSet # 2004/05/13 10:37:50-07:00 dsaxena@xanadu.(none) # common.c: # Remove unused flag variable from ixp4xx_timer_interrupt # # arch/arm/mach-ixp4xx/common.c # 2004/05/13 10:36:08-07:00 dsaxena@xanadu.(none) +0 -2 # Remove unused flag variable from ixp4xx_timer_interrupt # # ChangeSet # 2004/05/13 18:27:25+01:00 ben-linux@org.rmk.(none) # [ARM PATCH] 1876/1: Removed apostrophes from asembler source # # Patch from Ben Dooks # # Removed two 's from assembly code (binutils has problems # with these) # # # arch/arm/kernel/debug.S # 2004/05/12 15:51:33+01:00 ben-linux@org.rmk.(none) +1 -1 # [PATCH] 1876/1: Removed apostrophes from asembler source # # arch/arm/boot/compressed/head.S # 2004/05/12 16:08:49+01:00 ben-linux@org.rmk.(none) +1 -1 # [PATCH] 1876/1: Removed apostrophes from asembler source # # ChangeSet # 2004/05/13 18:23:16+01:00 ben-linux@org.rmk.(none) # [ARM PATCH] 1875/1: SMDK2410 machine support # # Patch from Ben Dooks # # Initial support for SMDK2410 and variants # # arch/arm/mach-s3c2410/mach-smdk2410.c # 2004/05/12 15:54:31+01:00 ben-linux@org.rmk.(none) +109 -0 # [PATCH] 1875/1: SMDK2410 machine support # # include/asm-arm/arch-s3c2410/time.h # 2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +1 -1 # [PATCH] 1875/1: SMDK2410 machine support # # arch/arm/mach-s3c2410/mach-smdk2410.c # 2004/05/12 15:54:31+01:00 ben-linux@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-s3c2410/mach-smdk2410.c # # arch/arm/mach-s3c2410/Makefile # 2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +1 -0 # [PATCH] 1875/1: SMDK2410 machine support # # arch/arm/mach-s3c2410/Kconfig # 2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +7 -0 # [PATCH] 1875/1: SMDK2410 machine support # # arch/arm/configs/smdk2410_defconfig # 2004/05/12 19:27:11+01:00 ben-linux@org.rmk.(none) +667 -0 # [PATCH] 1875/1: SMDK2410 machine support # # arch/arm/configs/smdk2410_defconfig # 2004/05/12 19:27:11+01:00 ben-linux@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/configs/smdk2410_defconfig # # ChangeSet # 2004/05/13 10:20:39-07:00 dsaxena@xanadu.(none) # common.c: # new file # # arch/arm/mach-ixp4xx/common.c # 2004/05/13 10:20:22-07:00 dsaxena@xanadu.(none) +266 -0 # # arch/arm/mach-ixp4xx/common.c # 2004/05/13 10:20:22-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/common.c # # ChangeSet # 2004/05/13 18:19:26+01:00 ben-linux@org.rmk.(none) # [ARM PATCH] 1874/1: S3C2410 - fix for selection of low-level debug UART # # Patch from Ben Dooks # # Fix selection configuration entry for UART number for low-level debug # # arch/arm/Kconfig # 2004/05/12 14:12:26+01:00 ben-linux@org.rmk.(none) +1 -1 # [PATCH] 1874/1: S3C2410 - fix for selection of low-level debug UART # # ChangeSet # 2004/05/13 14:41:47+01:00 jelenz@edu.rmk.(none) # [ARM PATCH] 1851/1: sa1100 fb support for collie # # Patch from John Lenz # # Add the sa1100fb_mach_info structure for collie # # drivers/video/sa1100fb.c # 2004/05/13 01:00:00+01:00 jelenz@edu.rmk.(none) +21 -0 # [PATCH] 1851/1: sa1100 fb support for collie # # ChangeSet # 2004/05/13 14:05:27+01:00 rmk@flint.arm.linux.org.uk # Merge bk://dsaxena.bkbits.net/linux-2.6-for-rmk # into flint.arm.linux.org.uk:/usr/src/bk/linux-2.6-ds # # arch/arm/kernel/entry-armv.S # 2004/05/13 14:04:22+01:00 rmk@flint.arm.linux.org.uk +0 -0 # Auto merged # # arch/arm/kernel/debug.S # 2004/05/13 14:04:21+01:00 rmk@flint.arm.linux.org.uk +0 -0 # Auto merged # # ChangeSet # 2004/05/13 12:59:34+01:00 nico@org.rmk.(none) # [ARM PATCH] 1871/1: faster IRQ retrieval for PXA27x # # Patch from Nicolas Pitre # # On the PXA27x it's also possible to get the IRQ info from CP6 # and it has a much lower latency than the memory mapped equivalent. # # arch/arm/kernel/entry-armv.S # 2004/05/13 02:11:42+01:00 nico@org.rmk.(none) +5 -0 # [PATCH] 1871/1: faster IRQ retrieval for PXA27x # # ChangeSet # 2004/05/13 12:55:33+01:00 nico@org.rmk.(none) # [ARM PATCH] 1865/1: DMA changes for PXA27x # # Patch from Nicolas Pitre # # # include/asm-arm/arch-pxa/dma.h # 2004/05/13 02:21:47+01:00 nico@org.rmk.(none) +21 -3 # [PATCH] 1865/1: DMA changes for PXA27x # # arch/arm/mach-pxa/dma.c # 2004/05/13 02:16:27+01:00 nico@org.rmk.(none) +3 -3 # [PATCH] 1865/1: DMA changes for PXA27x # # ChangeSet # 2004/05/13 12:51:39+01:00 nico@org.rmk.(none) # [ARM PATCH] 1864/1: separate PXA25x and PXA27x specific code # # Patch from Nicolas Pitre # # # arch/arm/mach-pxa/pxa27x.c # 2004/05/12 19:04:14+01:00 nico@org.rmk.(none) +120 -0 # [PATCH] 1864/1: separate PXA25x and PXA27x specific code # # arch/arm/mach-pxa/generic.c # 2004/04/28 03:15:18+01:00 nico@org.rmk.(none) +0 -67 # [PATCH] 1864/1: separate PXA25x and PXA27x specific code # # arch/arm/mach-pxa/Makefile # 2004/04/28 22:15:30+01:00 nico@org.rmk.(none) +2 -0 # [PATCH] 1864/1: separate PXA25x and PXA27x specific code # # arch/arm/mach-pxa/pxa27x.c # 2004/05/12 19:04:14+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-pxa/pxa27x.c # # arch/arm/mach-pxa/Kconfig # 2004/04/28 21:28:31+01:00 nico@org.rmk.(none) +13 -1 # [PATCH] 1864/1: separate PXA25x and PXA27x specific code # # arch/arm/mach-pxa/pxa25x.c # 2004/04/27 19:36:30+01:00 nico@org.rmk.(none) +94 -0 # [PATCH] 1864/1: separate PXA25x and PXA27x specific code # # arch/arm/mach-pxa/pxa25x.c # 2004/04/27 19:36:30+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-pxa/pxa25x.c # # ChangeSet # 2004/05/13 12:47:12+01:00 nico@org.rmk.(none) # [ARM PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers # # # Patch from Nicolas Pitre # # This reworks PXA register mapping to accommodate the extra registers # of the PXA27x chips (aka Bulverde). # # include/asm-arm/arch-pxa/pxa-regs.h # 2004/05/12 03:58:45+01:00 nico@org.rmk.(none) +692 -25 # [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers # # include/asm-arm/arch-pxa/hardware.h # 2004/04/30 01:52:42+01:00 nico@org.rmk.(none) +13 -16 # [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers # # arch/arm/mach-pxa/generic.c # 2004/04/28 03:15:18+01:00 nico@org.rmk.(none) +12 -7 # [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers # # ChangeSet # 2004/05/13 12:43:02+01:00 nico@org.rmk.(none) # [ARM PATCH] 1842/1: fix/clarify some comments # # Patch from Nicolas Pitre # # # include/asm-arm/thread_info.h # 2004/05/03 19:51:38+01:00 nico@org.rmk.(none) +1 -1 # [PATCH] 1842/1: fix/clarify some comments # # arch/arm/kernel/entry-armv.S # 2004/05/03 19:55:24+01:00 nico@org.rmk.(none) +1 -1 # [PATCH] 1842/1: fix/clarify some comments # # ChangeSet # 2004/05/13 12:27:15+01:00 jkluebs@com.rmk.(none) # [ARM PATCH] 1848/1: PXA suspend/resume improvements # # Patch from John K Luebs # # This adds support to preserve the GPIO level across a suspend # and resume for PXA machine types. Removes the hack to preserve # the FFUART state as this is unnecessary with the 2.6 serial # driver code. # # arch/arm/mach-pxa/pm.c # 2004/05/08 06:26:39+01:00 jkluebs@com.rmk.(none) +12 -39 # [PATCH] 1848/1: PXA suspend/resume improvements # # ChangeSet # 2004/05/13 12:22:56+01:00 tony@com.rmk.(none) # [ARM PATCH] 1854/1: Remove old board specific OMAP files # # Patch from Tony Lindgren # # Removes old duplicate board specific files that have been renamed to # board-*.c # # BitKeeper/deleted/.del-omap-perseus2.c~9645374675850b43 # 2004/05/13 12:21:00+01:00 tony@com.rmk.(none) +0 -0 # Delete: arch/arm/mach-omap/omap-perseus2.c # # BitKeeper/deleted/.del-omap-generic.c~2b62a02fa6084188 # 2004/05/13 12:20:59+01:00 tony@com.rmk.(none) +0 -0 # Delete: arch/arm/mach-omap/omap-generic.c # # BitKeeper/deleted/.del-innovator1610.c~fa081e5bd042b1e4 # 2004/05/13 12:20:58+01:00 tony@com.rmk.(none) +0 -0 # Delete: arch/arm/mach-omap/innovator1610.c # # BitKeeper/deleted/.del-innovator1510.c~f2b03aa9ff6103da # 2004/05/13 12:20:57+01:00 tony@com.rmk.(none) +0 -0 # Delete: arch/arm/mach-omap/innovator1510.c # # ChangeSet # 2004/05/13 12:19:05+01:00 tony@com.rmk.(none) # [ARM PATCH] 1853/1: Update OMAP low level debug functions # # Patch from Tony Lindgren # # Changes OMAP low level debug function to allow virtual IO != physical # IO. Also removes waituart checking, as it only worked for first # serial port. # # arch/arm/kernel/debug.S # 2004/05/10 19:13:34+01:00 tony@com.rmk.(none) +16 -4 # [PATCH] 1853/1: Update OMAP low level debug functions # # ChangeSet # 2004/05/13 12:14:47+01:00 icampbell@com.rmk.(none) # [ARM PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # Patch from Ian Campbell # # The patch includes the PXA FB driver discussed recently on the # arm-kernel mailing list, I have incorporated your (RMK's) comments # from patch 1826. # # include/asm-arm/arch-pxa/pxafb.h # 2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +68 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # include/asm-arm/arch-pxa/pxa-regs.h # 2004/04/26 11:00:41+01:00 icampbell@com.rmk.(none) +32 -7 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # drivers/video/pxafb.h # 2004/04/26 11:02:12+01:00 icampbell@com.rmk.(none) +129 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # drivers/video/pxafb.c # 2004/04/26 11:01:49+01:00 icampbell@com.rmk.(none) +1376 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # drivers/video/fbmem.c # 2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +5 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # drivers/video/Makefile # 2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +1 -1 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # drivers/video/Kconfig # 2004/04/26 09:36:53+01:00 icampbell@com.rmk.(none) +31 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # include/asm-arm/arch-pxa/pxafb.h # 2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/include/asm-arm/arch-pxa/pxafb.h # # drivers/video/pxafb.h # 2004/04/26 11:02:12+01:00 icampbell@com.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/drivers/video/pxafb.h # # drivers/video/pxafb.c # 2004/04/26 11:01:49+01:00 icampbell@com.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/drivers/video/pxafb.c # # arch/arm/mach-pxa/generic.c # 2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +37 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # Documentation/fb/pxafb.txt # 2004/04/26 09:36:52+01:00 icampbell@com.rmk.(none) +54 -0 # [PATCH] 1827/1: PXAFB patch updated based on comments in 1826 # # Documentation/fb/pxafb.txt # 2004/04/26 09:36:52+01:00 icampbell@com.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-rmk/Documentation/fb/pxafb.txt # # ChangeSet # 2004/05/12 21:53:02-07:00 davem@nuts.davemloft.net # [TG3]: Updated ASF handling for 5750. # # drivers/net/tg3.h # 2004/05/12 21:52:44-07:00 davem@nuts.davemloft.net +3 -0 # [TG3]: Updated ASF handling for 5750. # # drivers/net/tg3.c # 2004/05/12 21:52:44-07:00 davem@nuts.davemloft.net +107 -18 # [TG3]: Updated ASF handling for 5750. # # ChangeSet # 2004/05/12 21:23:46-07:00 davem@nuts.davemloft.net # [TG3]: Update LED programming to support 5750. # # drivers/net/tg3.h # 2004/05/12 21:23:28-07:00 davem@nuts.davemloft.net +18 -15 # [TG3]: Update LED programming to support 5750. # # drivers/net/tg3.c # 2004/05/12 21:23:28-07:00 davem@nuts.davemloft.net +63 -33 # [TG3]: Update LED programming to support 5750. # # ChangeSet # 2004/05/12 20:28:36-07:00 davem@nuts.davemloft.net # [TG3]: Add 5750 NVRAM programming plus 5704 MAC offset bug fix. # # drivers/net/tg3.h # 2004/05/12 20:28:18-07:00 davem@nuts.davemloft.net +8 -1 # [TG3]: Add 5750 NVRAM programming plus 5704 MAC offset bug fix. # # drivers/net/tg3.c # 2004/05/12 20:28:18-07:00 davem@nuts.davemloft.net +72 -39 # [TG3]: Add 5750 NVRAM programming plus 5704 MAC offset bug fix. # # ChangeSet # 2004/05/12 15:24:58-07:00 dsaxena@xanadu.(none) # pci_ids.h: # IXP4xx support # # include/linux/pci_ids.h # 2004/05/12 15:23:15-07:00 dsaxena@xanadu.(none) +1 -0 # IXP4xx support # # ChangeSet # 2004/05/12 15:02:42-07:00 dsaxena@xanadu.(none) # Add IXP4xx support # # include/asm-arm/arch-ixp4xx/vmalloc.h # 2004/05/12 15:02:26-07:00 dsaxena@xanadu.(none) +17 -0 # # include/asm-arm/arch-ixp4xx/vmalloc.h # 2004/05/12 15:02:26-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/vmalloc.h # # include/asm-arm/arch-ixp4xx/uncompress.h # 2004/05/12 15:02:25-07:00 dsaxena@xanadu.(none) +64 -0 # # include/asm-arm/arch-ixp4xx/uncompress.h # 2004/05/12 15:02:25-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/uncompress.h # # include/asm-arm/arch-ixp4xx/timex.h # 2004/05/12 15:02:24-07:00 dsaxena@xanadu.(none) +12 -0 # # include/asm-arm/arch-ixp4xx/timex.h # 2004/05/12 15:02:24-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/timex.h # # include/asm-arm/arch-ixp4xx/time.h # 2004/05/12 15:02:23-07:00 dsaxena@xanadu.(none) +7 -0 # # include/asm-arm/arch-ixp4xx/time.h # 2004/05/12 15:02:23-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/time.h # # include/asm-arm/arch-ixp4xx/system.h # 2004/05/12 15:02:22-07:00 dsaxena@xanadu.(none) +43 -0 # # include/asm-arm/arch-ixp4xx/system.h # 2004/05/12 15:02:22-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/system.h # # include/asm-arm/arch-ixp4xx/serial.h # 2004/05/12 15:02:21-07:00 dsaxena@xanadu.(none) +27 -0 # # include/asm-arm/arch-ixp4xx/serial.h # 2004/05/12 15:02:21-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/serial.h # # include/asm-arm/arch-ixp4xx/prpmc1100.h # 2004/05/12 15:02:20-07:00 dsaxena@xanadu.(none) +33 -0 # # include/asm-arm/arch-ixp4xx/prpmc1100.h # 2004/05/12 15:02:20-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/prpmc1100.h # # include/asm-arm/arch-ixp4xx/platform.h # 2004/05/12 15:02:18-07:00 dsaxena@xanadu.(none) +116 -0 # # include/asm-arm/arch-ixp4xx/platform.h # 2004/05/12 15:02:18-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/platform.h # # include/asm-arm/arch-ixp4xx/param.h # 2004/05/12 15:02:16-07:00 dsaxena@xanadu.(none) +3 -0 # # include/asm-arm/arch-ixp4xx/param.h # 2004/05/12 15:02:16-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/param.h # # include/asm-arm/arch-ixp4xx/memory.h # 2004/05/12 15:02:15-07:00 dsaxena@xanadu.(none) +49 -0 # # include/asm-arm/arch-ixp4xx/memory.h # 2004/05/12 15:02:15-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/memory.h # # include/asm-arm/arch-ixp4xx/ixp4xx-regs.h # 2004/05/12 15:02:14-07:00 dsaxena@xanadu.(none) +551 -0 # # include/asm-arm/arch-ixp4xx/ixp4xx-regs.h # 2004/05/12 15:02:14-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h # # include/asm-arm/arch-ixp4xx/ixdp425.h # 2004/05/12 15:02:13-07:00 dsaxena@xanadu.(none) +38 -0 # # include/asm-arm/arch-ixp4xx/ixdp425.h # 2004/05/12 15:02:13-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ixdp425.h # # include/asm-arm/arch-ixp4xx/irqs.h # 2004/05/12 15:02:12-07:00 dsaxena@xanadu.(none) +78 -0 # # include/asm-arm/arch-ixp4xx/irqs.h # 2004/05/12 15:02:12-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/irqs.h # # include/asm-arm/arch-ixp4xx/irq.h # 2004/05/12 15:02:11-07:00 dsaxena@xanadu.(none) +13 -0 # # include/asm-arm/arch-ixp4xx/irq.h # 2004/05/12 15:02:11-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/irq.h # # include/asm-arm/arch-ixp4xx/io.h # 2004/05/12 15:02:09-07:00 dsaxena@xanadu.(none) +388 -0 # # include/asm-arm/arch-ixp4xx/io.h # 2004/05/12 15:02:09-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/io.h # # include/asm-arm/arch-ixp4xx/ide.h # 2004/05/12 15:02:08-07:00 dsaxena@xanadu.(none) +37 -0 # # include/asm-arm/arch-ixp4xx/ide.h # 2004/05/12 15:02:08-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ide.h # # include/asm-arm/arch-ixp4xx/hardware.h # 2004/05/12 15:02:07-07:00 dsaxena@xanadu.(none) +41 -0 # # include/asm-arm/arch-ixp4xx/hardware.h # 2004/05/12 15:02:07-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/hardware.h # # include/asm-arm/arch-ixp4xx/dma.h # 2004/05/12 15:02:06-07:00 dsaxena@xanadu.(none) +52 -0 # # include/asm-arm/arch-ixp4xx/dma.h # 2004/05/12 15:02:06-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/dma.h # # include/asm-arm/arch-ixp4xx/coyote.h # 2004/05/12 15:02:05-07:00 dsaxena@xanadu.(none) +36 -0 # # include/asm-arm/arch-ixp4xx/coyote.h # 2004/05/12 15:02:05-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/coyote.h # # arch/arm/mach-ixp4xx/prpmc1100-setup.c # 2004/05/12 15:02:04-07:00 dsaxena@xanadu.(none) +96 -0 # # arch/arm/mach-ixp4xx/prpmc1100-setup.c # 2004/05/12 15:02:04-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/prpmc1100-setup.c # # arch/arm/mach-ixp4xx/prpmc1100-pci.c # 2004/05/12 15:02:03-07:00 dsaxena@xanadu.(none) +119 -0 # # arch/arm/mach-ixp4xx/prpmc1100-pci.c # 2004/05/12 15:02:03-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/prpmc1100-pci.c # # arch/arm/mach-ixp4xx/ixdp425-setup.c # 2004/05/12 15:02:02-07:00 dsaxena@xanadu.(none) +153 -0 # # arch/arm/mach-ixp4xx/ixdp425-setup.c # 2004/05/12 15:02:02-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/ixdp425-setup.c # # arch/arm/mach-ixp4xx/ixdp425-pci.c # 2004/05/12 15:02:01-07:00 dsaxena@xanadu.(none) +84 -0 # # arch/arm/mach-ixp4xx/ixdp425-pci.c # 2004/05/12 15:02:01-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/ixdp425-pci.c # # arch/arm/mach-ixp4xx/coyote-setup.c # 2004/05/12 15:02:00-07:00 dsaxena@xanadu.(none) +97 -0 # # arch/arm/mach-ixp4xx/coyote-setup.c # 2004/05/12 15:02:00-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/coyote-setup.c # # arch/arm/mach-ixp4xx/coyote-pci.c # 2004/05/12 15:01:59-07:00 dsaxena@xanadu.(none) +69 -0 # # arch/arm/mach-ixp4xx/coyote-pci.c # 2004/05/12 15:01:59-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/coyote-pci.c # # arch/arm/mach-ixp4xx/common-pci.c # 2004/05/12 15:01:58-07:00 dsaxena@xanadu.(none) +543 -0 # # arch/arm/mach-ixp4xx/common-pci.c # 2004/05/12 15:01:58-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/common-pci.c # # arch/arm/mach-ixp4xx/Makefile # 2004/05/12 15:01:57-07:00 dsaxena@xanadu.(none) +10 -0 # # arch/arm/mach-ixp4xx/Makefile # 2004/05/12 15:01:57-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/Makefile # # arch/arm/mach-ixp4xx/Kconfig # 2004/05/12 15:01:56-07:00 dsaxena@xanadu.(none) +73 -0 # # arch/arm/mach-ixp4xx/Kconfig # 2004/05/12 15:01:56-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/Kconfig # # arch/arm/configs/ixp4xx_defconfig # 2004/05/12 15:01:55-07:00 dsaxena@xanadu.(none) +1081 -0 # # arch/arm/configs/ixp4xx_defconfig # 2004/05/12 15:01:55-07:00 dsaxena@xanadu.(none) +0 -0 # BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/configs/ixp4xx_defconfig # # ChangeSet # 2004/05/12 14:59:16-07:00 dsaxena@xanadu.(none) # proc-xscale.S, Kconfig: # IXP4xx support # # arch/arm/mm/proc-xscale.S # 2004/05/12 14:58:58-07:00 dsaxena@xanadu.(none) +21 -0 # IXP4xx support # # arch/arm/mm/Kconfig # 2004/05/12 14:58:58-07:00 dsaxena@xanadu.(none) +1 -1 # IXP4xx support # # ChangeSet # 2004/05/12 14:58:18-07:00 dsaxena@xanadu.(none) # head.S, Makefile: # IXP4xx support # # arch/arm/boot/compressed/head.S # 2004/05/12 14:58:03-07:00 dsaxena@xanadu.(none) +6 -0 # IXP4xx support # # arch/arm/boot/Makefile # 2004/05/12 14:58:03-07:00 dsaxena@xanadu.(none) +2 -0 # IXP4xx support # # ChangeSet # 2004/05/12 14:57:06-07:00 dsaxena@xanadu.(none) # entry-armv.S, debug.S, bios32.c: # IXP4xx support # # arch/arm/kernel/entry-armv.S # 2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +28 -0 # IXP4xx support # # arch/arm/kernel/debug.S # 2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +25 -0 # IXP4xx support # # arch/arm/kernel/bios32.c # 2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +28 -0 # IXP4xx support # # ChangeSet # 2004/05/12 14:55:17-07:00 dsaxena@xanadu.(none) # First of a set of eight patches that adds support for Intel's # IXP4xx family of network processors. The code still needs some # cleanup here and there, but it's to the point that it's should # be OK to push upstream. # # Some of the remaining TODOs: # # - Cleanup GPIO IRQ handling for edge-trigered HW (none exists ATM) # - Add IDE driver for various platforms # - Misc cleanups # # This patch adds the changes to arch/arm/Makefile and arch/arm/Kconfig # # arch/arm/Makefile # 2004/05/12 14:55:05-07:00 dsaxena@xanadu.(none) +1 -0 # IXP4xx support # # arch/arm/Kconfig # 2004/05/12 14:55:05-07:00 dsaxena@xanadu.(none) +7 -2 # IXP4xx support # # ChangeSet # 2004/05/12 14:25:12-07:00 davem@nuts.davemloft.net # [TG3]: If asked to load TSO firmware on 5750, just return success. # # The 5750 does TSO in hardware, not via firmware code. # # drivers/net/tg3.c # 2004/05/12 14:24:52-07:00 davem@nuts.davemloft.net +3 -0 # [TG3]: If asked to load TSO firmware on 5750, just return success. # # The 5750 does TSO in hardware, not via firmware code. # # ChangeSet # 2004/05/12 13:59:06-07:00 davem@nuts.davemloft.net # [TG3]: Update to non-5705 TSO firmware version 1.6.0 # # drivers/net/tg3.c # 2004/05/12 13:58:48-07:00 davem@nuts.davemloft.net +278 -278 # [TG3]: Update to non-5705 TSO firmware version 1.6.0 # # ChangeSet # 2004/05/12 13:49:49-07:00 davem@nuts.davemloft.net # [TG3]: Update to 5788 capable 5705 TSO firmware, version 1.2.0 # # drivers/net/tg3.c # 2004/05/12 13:49:30-07:00 davem@nuts.davemloft.net +119 -121 # [TG3]: Update to 5788 capable 5705 TSO firmware, version 1.2.0 # # ChangeSet # 2004/05/12 12:51:44-07:00 mchouque@online.fr # [MODULES]: Fix endianness in modprobe. # # scripts/modpost.c # 2004/05/12 12:51:30-07:00 mchouque@online.fr +1 -0 # [MODULES]: Fix endianness in modprobe. # # ChangeSet # 2004/05/12 12:03:46-07:00 shemminger@osdl.org # [BRIDGE]: Allow multiple interfaces with same address (necessary for VLAN's). # # net/bridge/br_fdb.c # 2004/05/12 12:03:33-07:00 shemminger@osdl.org +10 -10 # [BRIDGE]: Allow multiple interfaces with same address (necessary for VLAN's). # # ChangeSet # 2004/05/12 11:33:56-07:00 mchouque@online.fr # [SPARC]: Mark unaligned_panic as attribute used to workaround gcc-3.4 problem. # # arch/sparc64/kernel/unaligned.c # 2004/05/12 11:33:33-07:00 mchouque@online.fr +1 -1 # [SPARC]: Mark unaligned_panic as attribute used to workaround gcc-3.4 problem. # # ChangeSet # 2004/05/12 10:06:23-07:00 greg@kroah.com # Merge kroah.com:/home/greg/linux/BK/bleed-2.6 # into kroah.com:/home/greg/linux/BK/usb-2.6 # # drivers/usb/core/inode.c # 2004/05/12 10:06:18-07:00 greg@kroah.com +0 -0 # Auto merged # # MAINTAINERS # 2004/05/12 10:06:18-07:00 greg@kroah.com +0 -0 # Auto merged # # ChangeSet # 2004/05/11 16:43:50-07:00 maneesh@in.ibm.com # [PATCH] kobject/sysfs race fix # # The following patch fixes the race involved between unregistering a kobject # and simultaneously opeing a corresponding attribute file in sysfs. # # Ideally sysfs should take a ref. to the kobject as long as it has dentries # referring to the kobjects, but because of current limitations in # module/kobject ref counting, sysfs's pinning of kobject leads to # hang/delays in rmmod of certain modules. The patch checks for unhashed # dentries in check_perm() while opening a sysfs file. If the dentry is # still hashed then it goes ahead and takes the ref to kobject. This done # under the per dentry lock. It does this in the inline routine # sysfs_get_kobject(dentry). # # fs/sysfs/sysfs.h # 2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +13 -0 # kobject/sysfs race fix # # fs/sysfs/file.c # 2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +1 -1 # kobject/sysfs race fix # # fs/sysfs/bin.c # 2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +1 -1 # kobject/sysfs race fix # # drivers/usb/image/mdc800.c # 2004/05/11 16:37:35-07:00 oliver@neukum.org +9 -3 # USB: fixes of assumptions about waitqueues # # ChangeSet # 2004/05/11 16:35:42-07:00 James.Bottomley@steeleye.com # [PATCH] fix dev_printk to work even in the absence of an attached driver # # include/linux/device.h # 2004/05/11 01:58:44-07:00 James.Bottomley@steeleye.com +1 -1 # fix dev_printk to work even in the absence of an attached driver # # ChangeSet # 2004/05/11 16:31:46-07:00 maneesh@in.ibm.com # [PATCH] kobject_set_name - error handling # # 1) kobject_set_name-cleanup-01.patch # # This patch corrects the following by checking the reutrn code from # kobject_set_name(). # # bus_add_driver() # bus_register() # sys_dev_register() # # # # o The following patch cleansup the kobject_set_name() users. Basically checking # return code from kobject_set_name(). There can be error returns like -ENOMEM # or -EFAULT from kobject_set_name() if the name length exceeds KOBJ_NAME_LEN. # # drivers/base/sys.c # 2004/05/11 09:20:09-07:00 maneesh@in.ibm.com +4 -1 # kobject_set_name - error handling # # drivers/base/bus.c # 2004/05/11 09:21:15-07:00 maneesh@in.ibm.com +9 -2 # kobject_set_name - error handling # # ChangeSet # 2004/05/11 16:19:59-07:00 colin@colino.net # [PATCH] USB: cosmetic fixes for cdc-acm # # drivers/usb/class/cdc-acm.c # 2004/05/10 10:04:34-07:00 colin@colino.net +142 -133 # USB: cosmetic fixes for cdc-acm # # ChangeSet # 2004/05/11 16:03:07-07:00 david-b@pacbell.net # [PATCH] USB: OHCI root hub suspend/resume/wakeup # # This patch goes on top of the previous two, and the hcd-0506 patch: # # - Moves root hub suspend/resume code out of PCI-specific bus glue # into generic hub code. That way it's easy to re-use it even # for non-PCI implementations like SA1111, OMAP, and LH7A404. # (Plus, given CONFIG_USB_SUSPEND, it can be invoked with sysfs.) # # - Root hub suspend is a lot more careful, as is root hub resume. # Pending transactions are now shut down more consistently; and # more registers are re-initialized on resume. # # - The PCI bus glue is now left with truly generic PCI stuff, plus # some PMAC-specific stuff (which doesn't include irq disabling # any more, hcd-0506 moves that up a level in the stack). # # - Remote wakeup support is basically working for the root hub. # (given CONFIG_USB_SUSPEND to suspend devices and enable it). # # - Idle HCs will now automatically suspend themselves, and resume # as necessary. This saves a certain amount of power on most # systems, and matches what UHCI has been doing for a while. # # The large size of this patch is mostly because of moving that # root hub suspend/resume code out of the PCI-specific glue. # # drivers/usb/host/ohci.h # 2004/05/09 10:29:43-07:00 david-b@pacbell.net +4 -1 # USB: OHCI root hub suspend/resume/wakeup # # drivers/usb/host/ohci-pci.c # 2004/05/09 10:33:18-07:00 david-b@pacbell.net +26 -142 # USB: OHCI root hub suspend/resume/wakeup # # drivers/usb/host/ohci-mem.c # 2004/05/09 10:31:20-07:00 david-b@pacbell.net +1 -0 # USB: OHCI root hub suspend/resume/wakeup # # drivers/usb/host/ohci-hub.c # 2004/05/09 10:35:38-07:00 david-b@pacbell.net +290 -3 # USB: OHCI root hub suspend/resume/wakeup # # drivers/usb/host/ohci-hcd.c # 2004/05/09 10:37:07-07:00 david-b@pacbell.net +12 -1 # USB: OHCI root hub suspend/resume/wakeup # # ChangeSet # 2004/05/11 15:57:51-07:00 david-b@pacbell.net # [PATCH] USB: khubd turns port power back on after reset # # This goes with the OHCI anti-deadlock patch, and is what # ensures that when a root hub loses power during suspend, # khubd can turn port power back on so devices can enumerate. # # drivers/usb/core/hub.c # 2004/05/09 10:26:14-07:00 david-b@pacbell.net +8 -1 # USB: khubd turns port power back on after reset # # ChangeSet # 2004/05/11 15:57:21-07:00 david-b@pacbell.net # [PATCH] USB: OHCI cleanups # # This splits out a few obvious fixes, to help shrink a PM patch: # # - when the HC is quiescing, don't schedule any more EDs # or re-activate any after unlink completion. # # - when the HC is suspended, don't access registers through # sysfs either. # # - simplify locking and call for donelist processing # # drivers/usb/host/ohci-q.c # 2004/05/11 13:17:33-07:00 david-b@pacbell.net +8 -9 # USB: OHCI cleanups # # drivers/usb/host/ohci-pci.c # 2004/05/11 06:28:56-07:00 david-b@pacbell.net +5 -3 # USB: OHCI cleanups # # drivers/usb/host/ohci-hcd.c # 2004/05/11 13:17:48-07:00 david-b@pacbell.net +4 -2 # USB: OHCI cleanups # # drivers/usb/host/ohci-dbg.c # 2004/05/11 13:17:33-07:00 david-b@pacbell.net +12 -2 # USB: OHCI cleanups # # ChangeSet # 2004/05/11 15:56:50-07:00 david-b@pacbell.net # [PATCH] USB: OHCI resume/reset stops deadlocking in PM code # # System-wide PM resume now happily deadlocks if one of the # resuming devices tries to remove devices which vanished # during the suspend(*). IMO that's unreasonable both # because devices can/do vanish, and because 2.4 didn't # deadlock in those cases; but no patch to fix that has been # merged. The result is that ever since merging the "new" PM # code, some OHCI-based systems deadlock on resume. # # So this patch handles the "lost power during resume" case # differently: it doesn't disconnect the root hub (or its # children) directly. Instead, it does part of that work # immediately, and defers the rest to khubd: # # - add a "pending" list for live urbs, and use it after reset # to abort pending URBs (and reclaim "live" EDs/TDs) # - immediately mark all devices NOTATTACHED, so any operations # on the devices before khubd handles the disconnects, including # resume() callbacks, will fail # - kick root hub so it can do the cleanup # # It also handles "fminterval" init/reinit a bit better, mostly # to work better in some remote wakeup scenarios addressed in # later patches: # # - save any initial value the boot firmware provided # - use it during initialization (and eventually, remote wakeup) # # Other changes: # # - use better jiffies calculation for scheduled delays # - the allocator does more of the one-time initialization # - initialize hcd.can_wakeup according to boot firmware # - move some inlines to the header # - minor cleanups # # # (*) http://marc.theaimsgroup.com/?l=linux-kernel&m=106606272103414&w=2 # reported against 2.6.0-test7. # # drivers/usb/host/ohci.h # 2004/05/11 03:17:51-07:00 david-b@pacbell.net +31 -2 # USB: OHCI resume/reset stops deadlocking in PM code # # drivers/usb/host/ohci-q.c # 2004/05/11 03:19:12-07:00 david-b@pacbell.net +3 -1 # USB: OHCI resume/reset stops deadlocking in PM code # # drivers/usb/host/ohci-mem.c # 2004/05/11 03:17:58-07:00 david-b@pacbell.net +2 -0 # USB: OHCI resume/reset stops deadlocking in PM code # # drivers/usb/host/ohci-hcd.c # 2004/05/11 04:09:19-07:00 david-b@pacbell.net +89 -30 # USB: OHCI resume/reset stops deadlocking in PM code # # ChangeSet # 2004/05/11 15:45:25-07:00 oliver@neukum.org # [PATCH] USB: fixes of assumptions about waitqueues # # quoting Linus: # # -- # > so there is no need to recheck the bit in do/while loop, because # > there is no false wakeups now. # # You should never assume this. You should assume that there are _always_ # false wakeups. # # Why? Because Linux has always allowed people to leave wait-queues active, # without being "atomic". For example, the tty read/write layer used to # (still does?) add itself on the wait-queue _once_, and then leave itself # on the wait-queue while in a loop it does copies from/to user space. # -- # # Unfortunately, this means us. Here's the first fix. Comments? # # - make sure timeouts are observed even if somebody left us on a queue # # ChangeSet # 2004/05/11 15:41:37-07:00 david-b@pacbell.net # [PATCH] USB: more functional HCD PCI PM glue # # This patch makes the usbcore PCI suspend/resume logic behave # much better. In particular: # # - Even HCs without PCI PM support will normally be able # to support global suspend, saving power ... and will # need to resume later. Let them try to suspend; lots # of not-that-old USB controllers don't have PM caps. # # - Saner order for the boilerplate PCI stuff. It also # explicitly disables the IRQ and DMA, which aren't # available in D1/D2/D3 states anyway. # # - Uses pci_enable_wake() when the root hub supports # remote wakeup. Didn't fully work in one test setup; # that controller's PME# was evidently ignored. (Not # enabled unless CONFIG_USB_SUSPEND.) # # It worked for me with brief tests with the current 2.6.6-rc # uhci-hcd with one old UHCI; more extensive ones with various # OHCIs (using patches which I'll post soonish); and not at all # with EHCI (where PM hasn't ever worked). # # Those of you who've been having PM problems might find # this helpful as-is, though I think that unless you're # using UHCI you'll also need an HCD patch. # # - Dave # # drivers/usb/core/hcd-pci.c # 2004/05/06 12:41:30-07:00 david-b@pacbell.net +47 -22 # USB: more functional HCD PCI PM glue # # ChangeSet # 2004/05/11 23:39:47+01:00 aia21@cantab.net # NTFS: Really final white space cleanups. # # fs/ntfs/attrib.c # 2004/05/11 23:38:56+01:00 aia21@cantab.net +16 -16 # White space cleanups. # # fs/ntfs/ChangeLog # 2004/05/11 23:38:50+01:00 aia21@cantab.net +10 -4 # Update # # ChangeSet # 2004/05/11 15:34:08-07:00 stern@rowland.harvard.edu # [PATCH] USB: Accept devices with funky interface/altsetting numbers # # Now that all the USB drivers have been audited, we can safely accept # devices that have noncompliant numbering for their interfaces or # altsettings. This patch skips bad or duplicate descriptors, allows gaps # in the numbering, accepts more or fewer interfaces than bNumInterfaces, # and logs warnings describing all these things. Also, the debugging log # messages have been improved by David Brownell. # # This should please a sizeable group of users. # # drivers/usb/core/config.c # 2004/05/11 06:59:21-07:00 stern@rowland.harvard.edu +173 -120 # USB: Accept devices with funky interface/altsetting numbers # # ChangeSet # 2004/05/11 15:33:38-07:00 david-b@pacbell.net # [PATCH] USB: EHCI power management updates # # This patch updates EHCI suspend/resume so that its essential # components work on a few different implementations: # # - make root hub suspend/resume work # - make remote wakeup work (given CONFIG_USB_SUSPEND patch) # - separate root hub suspend/resume from PCI suspend/resume # - say if controller supports remote wakeup (on this system) # - sysfs register dump unavailable if controller is suspended # # Plus a handful of minor cleanups. Please merge, along with the # "hcd-0506.patch" I sent last week. # # Tested by modifying sysfs power/state files, since ACPI doesn't # work on this system (so I can't test system suspend/resume): # # - For root hub(*) ... suspend/resume works, also remote wakeup # - PCI controller ... suspend/resume works, remote wakeup # signals PME# (according to "lspci -vv"), but that's ignored # on my test sytem # # Regardless of whether USB was active, "echo 1 > /proc/acpi/sleep" # produced a system that wouldn't resume, and the same result # came from "echo standby > /sys/power/state". So that's about # as far as I can take this testing for now. # # - Dave # # (*) Doing this relies on the CONFIG_USB_SUSPEND patch. Otherwise # no USB devices respond to sysfs power/state updates. The # PCI suspend/resume is a superset of this. # # drivers/usb/host/ehci.h # 2004/05/07 12:49:08-07:00 david-b@pacbell.net +15 -4 # USB: EHCI power management updates # # drivers/usb/host/ehci-hub.c # 2004/05/10 12:40:20-07:00 david-b@pacbell.net +177 -5 # USB: EHCI power management updates # # drivers/usb/host/ehci-hcd.c # 2004/05/10 12:38:12-07:00 david-b@pacbell.net +68 -68 # USB: EHCI power management updates # # drivers/usb/host/ehci-dbg.c # 2004/05/07 12:48:33-07:00 david-b@pacbell.net +27 -3 # USB: EHCI power management updates # # ChangeSet # 2004/05/11 15:33:09-07:00 stern@rowland.harvard.edu # [PATCH] USB Gadget: Fix file-storage gadget Request Sense length # # On Fri, 7 May 2004, kernel@metro.cx wrote: # > Hi All, # > # > I don't know where else to report this, but I found a very very very # > minor bug in the usb gadgets drivers, specifically the file_storage.c # > mass storage driver. # > # > In the function do_request_sense(..) it says: # > # > buf[7] = 18 - 7; // Additional sense length # > # > Whereas (according to page 38 of the USB mass storage class, UFI command spec, # > http://www.usb.org/developers/devclass_docs#approved) this clearly neads # > to be equal to 10, not 11. # > # > I checked with the 2.6.5 source, it is still there. Hope someone will find this usefull, although most USB hosts seem to ignore length bits alltogether anyway.... # > # > Koen Martens # # You are quite right; thank you for pointing this out. Greg, please apply # the patch below. # # drivers/usb/gadget/file_storage.c # 2004/05/07 05:21:45-07:00 stern@rowland.harvard.edu +1 -1 # USB Gadget: Fix file-storage gadget Request Sense length # # ChangeSet # 2004/05/11 15:32:38-07:00 lcapitulino@prefeitura.sp.gov.br # [PATCH] USB: fix media/dsbr100.c unused variable. # # drivers/usb/media/dsbr100.c: In function `usb_dsbr100_probe': # drivers/usb/media/dsbr100.c:239: warning: unused variable `videodev' # # drivers/usb/media/dsbr100.c # 2004/05/07 01:53:51-07:00 lcapitulino@prefeitura.sp.gov.br +0 -1 # USB: fix media/dsbr100.c unused variable. # # ChangeSet # 2004/05/11 23:16:06+01:00 aia21@cantab.net # NTFS: Only build logfile.o if building the driver with read-write support. # # fs/ntfs/Makefile # 2004/05/11 23:15:11+01:00 aia21@cantab.net +5 -3 # Only build logfile.o if building the driver with read-write support. # # fs/ntfs/ChangeLog # 2004/05/11 23:15:07+01:00 aia21@cantab.net +4 -0 # Update # # ChangeSet # 2004/05/11 14:59:36-07:00 arjanv@redhat.com # [PATCH] PCI crash with pciless box or pci=off workaround on Vaio's # # From: Alan Cox # # Reasoning # # # - Earlier in boot if we find a PCI bus we set raw_pci_ops to the function # table to use for PCI accesses. # - When we enter this function we now check if we have such a method # - If not then we know it will otherwise crash because the call sequence # through the code goes # # pci_irq_init # pirq_peer_trick # pci_scan_bus_parented # which always leads down into the device scan and a pci config access # via raw_pci_ops # # The moment the scan searches for a device it has to crash as it has no # access methods. # # - The other case which does nothing but pci_fixup_irqs is a no-op with no # PCI devices # # - THUS any situation that is changed by the raw_pci_ops check was # previously an oops case anyway or did nothing anyway. # # # Tested with pci=off and without # # arch/i386/pci/irq.c # 2004/05/07 06:28:59-07:00 arjanv@redhat.com +1 -1 # PCI crash with pciless box or pci=off workaround on Vaio's # # ChangeSet # 2004/05/11 14:54:19-07:00 herbert@gondor.apana.org.au # [PATCH] acpiphp_glue.c oops fix # # It oopses during modprobe becasue the first load of acpiphp didn't clean up # properly. # # drivers/pci/hotplug/acpiphp_glue.c # 2004/04/26 06:38:16-07:00 herbert@gondor.apana.org.au +2 -0 # acpiphp_glue.c oops fix # # ChangeSet # 2004/05/11 14:50:43-07:00 lcapitulino@prefeitura.sp.gov.br # [PATCH] PCI Hotplug: fix wrong var used in hotplug/shpchp_ctrl.c. # # Zhenmin's checker tool detected this: # # 9. /drivers/pci/hotplug/shpchp_ctrl.c, Line 1575: # err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); # # Maybe change to: # err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, # retval); # # I think it is right because at line 1564, the slot is turned off, and # in this line (1575) is checked the status to see if we got an error; if # so, the error number is shown. This number is in 'retval', not in 'rc' # ('rc' does have the return of configure_new_device()). # # The patch bellow fixes that: # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/05/06 16:59:42-07:00 lcapitulino@prefeitura.sp.gov.br +1 -1 # PCI Hotplug: fix wrong var used in hotplug/shpchp_ctrl.c. # # ChangeSet # 2004/05/11 14:50:01-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: fix cleanup_slots again... # # Am Donnerstag, 6. Mai 2004 02:48 schrieb Sy, Dely L: # > On Fri, 30 Apr 2004 12:31:18 +0200, Rolf Eike Beer wrote: # # >> - # >> -static int cleanup_slots (struct controller * ctrl) # >> +static void cleanup_slots(const struct controller *ctrl) # >> { # >> - struct slot *old_slot, *next_slot; # >> + struct slot *old_slot; # >> # >> old_slot = ctrl->slot; # >> ctrl->slot = NULL; # >> # >> while (old_slot) { # >> - next_slot = old_slot->next; # >> - pci_hp_deregister (old_slot->hotplug_slot); # >> - kfree(old_slot->hotplug_slot->info); # >> - kfree(old_slot->hotplug_slot->name); # >> - kfree(old_slot->hotplug_slot); # >> - kfree(old_slot); # >> - old_slot = next_slot; # >> + pci_hp_deregister(old_slot->hotplug_slot); # >> + old_slot = old_slot->next; # >> } # > # > The variable next_slot and its assignment should be kept, for once # > pci_hp_deregister() is called and the release callback function, which # > you added, may come in and clean up old_slot structure before the next # > ptr is saved. The code should be: # > # > static void cleanup_slots(const struct controller *ctrl) # > { # > struct slot *old_slot, *next_slot; # > # > old_slot = ctrl->slot; # > ctrl->slot = NULL; # > # > while (old_slot) { # > next_slot = old_slot->next; # > pci_hp_deregister (old_slot->hotplug_slot); # > old_slot = next_slot; # > } # > } # # Yes, good point. Greg, this patch makes does it. Please apply on top of the # other stuff. # # drivers/pci/hotplug/shpchp_core.c # 2004/05/06 05:19:55-07:00 eike-hotplug@sf-tec.de +3 -2 # SHPC PCI Hotplug: fix cleanup_slots again... # # ChangeSet # 2004/05/11 14:46:07-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express, SHPCHP: fix freeing wrong resources # # drivers/pci/hotplug/shpchp_core.c # 2004/05/06 02:54:32-07:00 eike-hotplug@sf-tec.de +4 -4 # PCI Express, SHPCHP: fix freeing wrong resources # # drivers/pci/hotplug/pciehp_core.c # 2004/05/06 02:53:57-07:00 eike-hotplug@sf-tec.de +4 -4 # PCI Express, SHPCHP: fix freeing wrong resources # # ChangeSet # 2004/05/11 14:44:42-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: remove two useless functions # # This 2 get_* functions do the same the hotplug core does if this functions # would not be there. Kill Bil^H^H^Hem! # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 11:59:58-07:00 eike-hotplug@sf-tec.de +0 -18 # CompactPCI: remove two useless functions # # ChangeSet # 2004/05/11 14:44:02-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: remove slot_paranoia_check and get_slot # # slot_paranoia_check is only another kind of checking everything for NULL. # Removing this leads to function get_slot is reduced to a simple cast, so this # function can be killed also. # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 11:52:41-07:00 eike-hotplug@sf-tec.de +5 -36 # CompactPCI: remove slot_paranoia_check and get_slot # # ChangeSet # 2004/05/11 14:43:25-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: remove useless NULL checks # # If the "struct hotplug_slot *" parameter is ever NULL then something bogus is # going on, we should not hide this bug by catching it. Also the name used in # debug messages is fixed. # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 11:38:07-07:00 eike-hotplug@sf-tec.de +0 -26 # CompactPCI: remove useless NULL checks # # ChangeSet # 2004/05/11 14:42:00-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: use goto for error handling # # Convert cpci_hotplug_core.c::cpci_hp_register_bus to use goto for error # handling. # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 10:48:50-07:00 eike-hotplug@sf-tec.de +21 -25 # CompactPCI: use goto for error handling # # ChangeSet # 2004/05/11 14:40:08-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: remove two useless checks # # This two checks are useless: cpci_hp_register_bus is only called from two # places, one has constant arguments, the other one passes the module # parameters which are checked for this condition on module load. And the bus # argument of cpci_hp_unregister_bus can never be NULL, all functions calling # this function use fields of the bus struct before so they will oops if it # would ever be NULL. # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 10:58:37-07:00 eike-hotplug@sf-tec.de +0 -7 # CompactPCI: remove two useless checks # # ChangeSet # 2004/05/11 14:39:27-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI: remove set_attention_status # # This one removes useless code and fixes the issue that the return code of # set_attention_status for cpcihp is always 0 even if cpci_set_attention_status # returns an error. # # Eike # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/05/05 10:23:16-07:00 eike-hotplug@sf-tec.de +1 -16 # CompactPCI: remove set_attention_status # # ChangeSet # 2004/05/11 14:31:48-07:00 hannal@us.ibm.com # [PATCH] USB: Add class support to drivers/usb/misc/tiglusb.c # # drivers/usb/misc/tiglusb.c # 2004/05/05 15:40:27-07:00 hannal@us.ibm.com +49 -15 # USB: Add class support to drivers/usb/misc/tiglusb.c # # ChangeSet # 2004/05/11 14:31:21-07:00 hannal@us.ibm.com # [PATCH] Add class support to drivers/net/wan/cosa.c # # This patch adds sysfs class support to the Cosa driver. I have verified it # compiles but do not have the hardware to test it. If someone could that # would be helpful. # # drivers/net/wan/cosa.c # 2004/05/05 16:01:56-07:00 hannal@us.ibm.com +34 -7 # Add class support to drivers/net/wan/cosa.c # # ChangeSet # 2004/05/11 13:46:12-07:00 khali@linux-fr.org # [PATCH] I2C: Rename hardware monitoring I2C class # # Quoting myself: # # > Mmm, I once proposed that I2C_ADAP_CLASS_SMBUS would be better renamed # > I2C_ADAP_CLASS_SENSORS (so I2C_CLASS_SENSORS now). What about that? I # > think it would be great to embed that change into your patch, so that # > the name changes only once. # > # > BTW, if HWMON is prefered to SENSORS, this is fine with me too, I # > have no strong preference. # # Below is a patch that does that. I finally went for HWMON. Yes, it's # big, but it's actually nothing more than # s/I2C_CLASS_SMBUS/I2C_CLASS_HWMON/ (thanks perl -wip :)). # # include/linux/i2c.h # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/w83l785ts.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/w83781d.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/via686a.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/lm90.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/lm83.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/lm80.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/lm78.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/lm75.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/it87.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/gl518sm.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/fscher.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/asb100.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/chips/adm1021.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-viapro.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-via.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-sis96x.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-sis630.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-sis5595.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-piix4.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-parport-light.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-parport.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-nforce2.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-isa.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-i801.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-amd8111.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-amd756.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-ali15x3.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-ali1563.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # drivers/i2c/busses/i2c-ali1535.c # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1 # I2C: Rename hardware monitoring I2C class # # Documentation/i2c/porting-clients # 2004/05/09 10:05:17-07:00 khali@linux-fr.org +2 -2 # I2C: Rename hardware monitoring I2C class # # ChangeSet # 2004/05/11 13:45:12-07:00 R.S.Bultje@students.uu.nl # [PATCH] I2C: new i2c video decoder calls: saa7111 driver # # Attached patch implements the i2c calls in the saa7111 driver. # # The driver is still compatible with old behaviour, so the zr36067 driver # (the original user of the saa7111 module) doesn't need any changes. I'll # probably gradually make everything use DECODER_INIT instead of 0 (that was # a nice hack back then) somewhere later. # # Can I just remove '0' later on? Or are there official ABI rules for # stable kernel versions? # # drivers/media/video/saa7111.c # 2004/05/04 10:38:15-07:00 R.S.Bultje@students.uu.nl +54 -5 # I2C: new i2c video decoder calls: saa7111 driver # # ChangeSet # 2004/05/11 13:44:19-07:00 R.S.Bultje@students.uu.nl # [PATCH] I2C: new i2c video decoder calls # # Attached patch adds three new calls to the i2c video decoder API. The changes # were requested by Michael (CC'ed) and approved by Gerd Knorr (v4l maintainer, # CC'ed). # # Short explanation: # # * INIT is a general initialization call with optional initialization data. # Reason for this is that several i2c decoders (or general: clients) are being # used by several adapters (main drivers), and in some cases, one adapter # simply needs different settings than the other, either because the adapter # is completely different or because the card was reverse engineered in a way # that doesn't allow multiple adapters to run using the same original # initialization data. Michael faces such a problem right now. Both he and # me lack time to properly sit together and work out the exact details or a # proper way to merge. # # * VBI_BYPASS and GPIO set specific pins on the decoder. This will be used # in the saa7111 driver. My driver (zr36067, original user of the saa7111 # driver) doesn't use any of this, but Michael's does. # # include/linux/video_decoder.h # 2004/05/04 10:36:13-07:00 R.S.Bultje@students.uu.nl +7 -0 # I2C: new i2c video decoder calls # # ChangeSet # 2004/05/11 13:43:55-07:00 khali@linux-fr.org # [PATCH] I2C: kill duplicate includes in i2c bus drivers # # Following a suggestion of Arthur Othieno, here is a trivial patch that # kills duplicate inclusions of config.h in four i2c bus drivers. # # At first I was thinking of also removing inclusions of config.h wherever # it doesn't seem to be necessary but Eugene doesn't seem to think it's a # good idea. So I may give it a try later (in 2.7), but for now this # simple patch will be enough. # # drivers/i2c/busses/scx200_i2c.c # 2004/05/09 12:45:34-07:00 khali@linux-fr.org +0 -1 # I2C: kill duplicate includes in i2c bus drivers # # drivers/i2c/busses/scx200_acb.c # 2004/05/09 12:45:30-07:00 khali@linux-fr.org +0 -1 # I2C: kill duplicate includes in i2c bus drivers # # drivers/i2c/busses/i2c-piix4.c # 2004/05/09 12:45:43-07:00 khali@linux-fr.org +0 -1 # I2C: kill duplicate includes in i2c bus drivers # # drivers/i2c/busses/i2c-keywest.c # 2004/05/09 12:45:24-07:00 khali@linux-fr.org +0 -1 # I2C: kill duplicate includes in i2c bus drivers # # ChangeSet # 2004/05/11 13:32:24-07:00 greg@kroah.com # Module attributes: fix build error if CONFIG_MODULE_UNLOAD=n # # Thanks to Andrew Morton for pointing this out to me. # # kernel/module.c # 2004/05/11 13:32:10-07:00 greg@kroah.com +16 -16 # Module attributes: fix build error if CONFIG_MODULE_UNLOAD=n # # Thanks to Andrew Morton for pointing this out to me. # # ChangeSet # 2004/05/11 13:18:00-07:00 davem@nuts.davemloft.net # [SPARC64]: Export pci_domain_nr to modules. # # arch/sparc64/kernel/pci.c # 2004/05/11 13:17:42-07:00 davem@nuts.davemloft.net +2 -0 # [SPARC64]: Export pci_domain_nr to modules. # # ChangeSet # 2004/05/11 12:19:43-07:00 davem@nuts.davemloft.net # [SCHED]: Fix double slash in include directive. # # kernel/sched.c # 2004/05/11 12:19:26-07:00 davem@nuts.davemloft.net +1 -1 # [SCHED]: Fix double slash in include directive. # # ChangeSet # 2004/05/11 11:34:29-07:00 greg@kroah.com # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/storage/shuttle_usbat.h # 2004/05/11 04:32:50-07:00 greg@kroah.com +0 -20 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/storage/shuttle_usbat.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +70 -72 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/storage/jumpshot.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/storage/isd200.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +13 -13 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/storage/datafab.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/serial/kobil_sct.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/serial/ir-usb.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/serial/ipaq.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/serial/io_ti.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +5 -5 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/net/usbnet.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +5 -5 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/net/rtl8150.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +4 -4 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/net/pegasus.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/net/kaweth.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +10 -8 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/emi62_fw_s.h # 2004/05/11 04:32:50-07:00 greg@kroah.com +4 -3 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/emi62_fw_m.h # 2004/05/11 04:32:49-07:00 greg@kroah.com +4 -3 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/emi62.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/emi26_fw.h # 2004/05/11 04:32:49-07:00 greg@kroah.com +3 -3 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/emi26.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/misc/cytherm.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +3 -6 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/media/w9968cf.h # 2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/media/ultracam.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/input/wacom.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/input/kbtab.c # 2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/input/hid-core.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +5 -3 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/input/aiptek.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # drivers/usb/class/bluetty.c # 2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2 # USB: make functions static in usb drivers that should be # # Thanks to Tridge's findstatic.pl script for helping find these. # # ChangeSet # 2004/05/11 13:31:42-04:00 gtw@cs.bu.edu # [sound i810] silently ignore invalid PCM_ENABLE_xxx bits from userland # # We must guarantee that struct file's ->f_mode agrees with # PCM_ENABLE_xxx bits from userland OSS apps. Other drivers silently # ignore invalid bits, so we follow their lead. # # sound/oss/i810_audio.c # 2004/05/11 13:31:37-04:00 gtw@cs.bu.edu +9 -2 # [sound i810] silently ignore invalid PCM_ENABLE_xxx bits from userland # # We must guarantee that struct file's ->f_mode agrees with # PCM_ENABLE_xxx bits from userland OSS apps. Other drivers silently # ignore invalid bits, so we follow their lead. # # ChangeSet # 2004/05/11 17:38:24+01:00 aia21@cantab.net # NTFS: 2.1.10 - Force read-only (re)mounting of volumes with unsupported flags. # # fs/ntfs/super.c # 2004/05/11 17:38:17+01:00 aia21@cantab.net +34 -1 # Force read-only (re)mounting if any of the following bits are set in # the volume information flags: # VOLUME_IS_DIRTY, VOLUME_RESIZE_LOG_FILE, # VOLUME_UPGRADE_ON_MOUNT, VOLUME_DELETE_USN_UNDERWAY, # VOLUME_REPAIR_OBJECT_ID, VOLUME_MODIFIED_BY_CHKDSK # To make this easier we define VOLUME_MUST_MOUNT_RO_MASK with all the # above bits set so the test is made easy. # # fs/ntfs/Makefile # 2004/05/11 17:38:16+01:00 aia21@cantab.net +1 -1 # Update for 2.1.10 release. # # ChangeSet # 2004/05/11 16:51:14+01:00 nico@org.rmk.(none) # [ARM PATCH] 1843/2: supress PCMCIA build warnings # # Patch from Nicolas Pitre # # This is an alternative to patch #1843/1 keeping the ugliness # (and possible future breakage) to the affected driver only. # This one should be applied after patch #1830/2. # # drivers/pcmcia/soc_common.h # 2004/05/04 14:23:48+01:00 nico@org.rmk.(none) +1 -1 # [PATCH] 1843/2: supress PCMCIA build warnings # # drivers/pcmcia/pxa2xx_lubbock.c # 2004/05/04 14:40:32+01:00 nico@org.rmk.(none) +6 -3 # [PATCH] 1843/2: supress PCMCIA build warnings # # ChangeSet # 2004/05/11 16:46:51+01:00 nico@org.rmk.(none) # [ARM PATCH] 1831/1: remove outdated SA11xx PCMCIA documentation # # Patch from Nicolas Pitre # # This documentation isn't reflecting the code anymore and therefore # is misleading. Better remove it and let people see the code where # multiple examples can now be followed. # # BitKeeper/deleted/.del-PCMCIA~699d5c97500f14b6 # 2004/05/11 16:44:25+01:00 nico@org.rmk.(none) +0 -0 # Delete: Documentation/arm/SA1100/PCMCIA # # ChangeSet # 2004/05/11 16:42:43+01:00 nico@org.rmk.(none) # [ARM PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based) # # Patch from Nicolas Pitre # # [Patch #1830/1 wasn't generated correctly. Here's the fixed one.] # # This adds PCMCIA support for Lubbock and relies on patch #1829/1. This # is probably the only reference board using both the PXA2xx and the SA1111 # for PCMCIA support. Other board won't need to link sa1111_generic.o. # # drivers/pcmcia/sa1111_generic.h # 2004/04/23 00:48:42+01:00 nico@org.rmk.(none) +1 -0 # [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based) # # drivers/pcmcia/sa1111_generic.c # 2004/04/23 01:35:49+01:00 nico@org.rmk.(none) +3 -0 # [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based) # # drivers/pcmcia/Makefile # 2004/04/22 23:34:55+01:00 nico@org.rmk.(none) +3 -0 # [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based) # # drivers/pcmcia/pxa2xx_lubbock.c # 2004/04/23 01:51:18+01:00 nico@org.rmk.(none) +218 -0 # [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based) # # drivers/pcmcia/pxa2xx_lubbock.c # 2004/04/23 01:51:18+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_lubbock.c # # ChangeSet # 2004/05/11 16:38:35+01:00 nico@org.rmk.(none) # [ARM PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # Patch from Nicolas Pitre # # This provides base PCMCIA support for PXA2xx and relies on patch #1828/1. # Board specific support must be added separately. # # This is based on initial work from Stefan Eletzhofer and Ian Molton. # # drivers/pcmcia/pxa2xx_base.h # 2004/04/23 01:47:26+01:00 nico@org.rmk.(none) +3 -0 # [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # include/asm-arm/arch-pxa/pxa-regs.h # 2004/04/20 17:52:02+01:00 nico@org.rmk.(none) +13 -0 # [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # drivers/pcmcia/pxa2xx_base.h # 2004/04/23 01:47:26+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_base.h # # drivers/pcmcia/Makefile # 2004/04/22 23:34:55+01:00 nico@org.rmk.(none) +2 -0 # [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # drivers/pcmcia/Kconfig # 2004/04/21 21:07:13+01:00 nico@org.rmk.(none) +7 -0 # [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # drivers/pcmcia/pxa2xx_base.c # 2004/04/23 01:50:10+01:00 nico@org.rmk.(none) +335 -0 # [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip # # drivers/pcmcia/pxa2xx_base.c # 2004/04/23 01:50:10+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_base.c # # ChangeSet # 2004/05/11 16:32:38+01:00 nico@org.rmk.(none) # [ARM PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # Patch from Nicolas Pitre # # [Updated after comments on patch #1828/1] # # This patch moves things around and rename a few files/functions/structures # to be shared with PXA2xx PCMCIA support (coming in a separate patch) and # maybe others SOCs. No functional change were made so SA11xx users # shouldn't see any difference. # # drivers/pcmcia/sa1111_generic.h # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +8 -7 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1111_generic.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +11 -11 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_yopy.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_xp860.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_trizeps.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_system3.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +3 -3 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_stork.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_simpad.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_shannon.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_pfs168.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_pangolin.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_neponset.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_jornada720.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_h3600.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_graphicsmaster.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_graphicsclient.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +7 -7 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_generic.h # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -1 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/soc_common.h # 2004/05/04 17:06:54+01:00 nico@org.rmk.(none) +95 -37 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/soc_common.c # 2004/05/04 16:47:32+01:00 nico@org.rmk.(none) +135 -332 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_generic.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_freebird.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_flexanet.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_cerf.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_badge4.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +1 -1 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_assabet.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa1100_adsbitsy.c # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/Makefile # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -0 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa11xx_base.h # 2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +14 -55 # [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic # code # # drivers/pcmcia/sa11xx_base.c # 2004/05/11 16:26:50+01:00 nico@org.rmk.(none) +257 -0 # # drivers/pcmcia/sa11xx_base.c # 2004/05/11 16:26:50+01:00 nico@org.rmk.(none) +0 -0 # BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/sa11xx_base.c # # ChangeSet # 2004/05/11 07:54:30-07:00 geert@linux-m68k.org # [PATCH] M68k superfluous whitespace # # M68k: Remove superfluous whitespace that hurts my eyes with `let # c_space_errors=1' in vim. This includes correcting trailing whitespace and # spaces in front of tabs. `diff -urNbB' shows no difference before/after. # # include/asm-m68k/virtconvert.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/user.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/unaligned.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/tlbflush.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # include/asm-m68k/thread_info.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/termios.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/sun3xflop.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # include/asm-m68k/sun3x.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/sun3mmu.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/sun3_pgalloc.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # include/asm-m68k/string.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/sockios.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/signal.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/sigcontext.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/shmbuf.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/setup.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/serial.h # 2004/04/04 03:11:22-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # include/asm-m68k/sembuf.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/rtc.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/raw_io.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/q40_master.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/page_offset.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/page.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # include/asm-m68k/oplib.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # include/asm-m68k/openprom.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +44 -44 # M68k superfluous whitespace # # include/asm-m68k/mvme16xhw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/mvme147hw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/msgbuf.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/motorola_pgtable.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/mmu_context.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/md.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/macints.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # include/asm-m68k/macintosh.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # include/asm-m68k/machw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/mac_via.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +12 -12 # M68k superfluous whitespace # # include/asm-m68k/mac_psc.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6 # M68k superfluous whitespace # # include/asm-m68k/mac_oss.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/mac_asc.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # include/asm-m68k/irq.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/ipc.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/io.h # 2004/04/04 03:12:11-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # include/asm-m68k/intersil.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/ide.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/hwtest.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # include/asm-m68k/floppy.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # include/asm-m68k/entry.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/dvma.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6 # M68k superfluous whitespace # # include/asm-m68k/delay.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/checksum.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/cacheflush.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # include/asm-m68k/bootinfo.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # include/asm-m68k/bitops.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/atariints.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6 # M68k superfluous whitespace # # include/asm-m68k/atarihw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +41 -41 # M68k superfluous whitespace # # include/asm-m68k/atari_acsi.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/atari_SCCserial.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/atafdreg.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # include/asm-m68k/apollohw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # include/asm-m68k/apollodma.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # include/asm-m68k/amigahw.h # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/sun3x/time.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/sun3x/prom.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/sun3x/dvma.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +22 -22 # M68k superfluous whitespace # # arch/m68k/sun3x/config.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/sun3/sun3ints.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/sun3/sun3dvma.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +33 -33 # M68k superfluous whitespace # # arch/m68k/sun3/prom/init.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/sun3/mmu_emu.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +20 -20 # M68k superfluous whitespace # # arch/m68k/sun3/leds.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/sun3/intersil.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/sun3/idprom.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/sun3/dvma.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/sun3/config.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/q40/q40ints.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +20 -20 # M68k superfluous whitespace # # arch/m68k/q40/config.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/q40/README # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +24 -24 # M68k superfluous whitespace # # arch/m68k/q40/Makefile # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/mvme16x/rtc.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/mvme16x/mvme16x_ksyms.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/mvme147/config.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/mm/sun3mmu.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/mm/sun3kmap.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/mm/motorola.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/mm/memory.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/mm/init.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/mm/hwtest.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/mm/fault.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/math-emu/fp_util.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/math-emu/fp_scan.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/math-emu/fp_log.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/math-emu/fp_cond.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/math-emu/fp_arith.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/mac/via.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/mac/psc.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/mac/oss.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/mac/misc.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6 # M68k superfluous whitespace # # arch/m68k/mac/macints.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/mac/macboing.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +38 -38 # M68k superfluous whitespace # # arch/m68k/mac/iop.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/mac/debug.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +12 -12 # M68k superfluous whitespace # # arch/m68k/mac/config.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +32 -32 # M68k superfluous whitespace # # arch/m68k/mac/bootparse.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +89 -89 # M68k superfluous whitespace # # arch/m68k/mac/baboon.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/lib/muldi3.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/lib/lshrdi3.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/lib/ashrdi3.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/lib/ashldi3.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/kernel/vmlinux-sun3.lds # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # arch/m68k/kernel/vmlinux-std.lds # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/kernel/traps.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/kernel/sys_m68k.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/kernel/sun3-head.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # arch/m68k/kernel/signal.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/kernel/setup.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/kernel/ptrace.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/kernel/head.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/kernel/entry.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/kernel/bios32.c # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/pfpsp.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +652 -652 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/itest.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/isp.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +270 -270 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/ilsp.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +53 -53 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/ftest.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/fpsp.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +913 -913 # M68k superfluous whitespace # # arch/m68k/ifpsp060/src/fplsp.S # 2004/04/04 03:11:21-07:00 geert@linux-m68k.org +179 -179 # M68k superfluous whitespace # # arch/m68k/ifpsp060/os.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +39 -39 # M68k superfluous whitespace # # arch/m68k/ifpsp060/isp.doc # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/ifpsp060/iskeleton.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/ifpsp060/ilsp.doc # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/ifpsp060/fskeleton.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/ifpsp060/fpsp.doc # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +10 -10 # M68k superfluous whitespace # # arch/m68k/ifpsp060/fplsp.doc # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/ifpsp060/TEST.DOC # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/ifpsp060/README # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/ifpsp060/MISC # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/ifpsp060/CHANGES # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/hp300/ints.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/hp300/hp300map.map # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +45 -45 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_unsupp.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_unimp.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_unfl.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +17 -17 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_store.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +22 -22 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_snan.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/Makefile # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/Kconfig # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_ovfl.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_operr.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_fline.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/x_bsun.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/fpsp040/util.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +35 -35 # M68k superfluous whitespace # # arch/m68k/fpsp040/tbldo.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/fpsp040/stwotox.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # arch/m68k/fpsp040/sto_res.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/stanh.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/fpsp040/stan.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +29 -29 # M68k superfluous whitespace # # arch/m68k/fpsp040/ssinh.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/ssin.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/fpsp040/srem_mod.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9 # M68k superfluous whitespace # # arch/m68k/fpsp040/smovecr.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +6 -6 # M68k superfluous whitespace # # arch/m68k/fpsp040/slogn.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19 # M68k superfluous whitespace # # arch/m68k/fpsp040/slog2.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +17 -17 # M68k superfluous whitespace # # arch/m68k/fpsp040/skeleton.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +26 -26 # M68k superfluous whitespace # # arch/m68k/fpsp040/sint.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +15 -15 # M68k superfluous whitespace # # arch/m68k/fpsp040/sgetem.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/fpsp040/setox.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # arch/m68k/fpsp040/scosh.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3 # M68k superfluous whitespace # # arch/m68k/fpsp040/scale.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +11 -11 # M68k superfluous whitespace # # arch/m68k/fpsp040/satanh.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4 # M68k superfluous whitespace # # arch/m68k/fpsp040/satan.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +11 -11 # M68k superfluous whitespace # # arch/m68k/fpsp040/sasin.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5 # M68k superfluous whitespace # # arch/m68k/fpsp040/sacos.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8 # M68k superfluous whitespace # # arch/m68k/fpsp040/round.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +53 -53 # M68k superfluous whitespace # # arch/m68k/fpsp040/res_func.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +77 -77 # M68k superfluous whitespace # # arch/m68k/fpsp040/kernel_ex.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +30 -30 # M68k superfluous whitespace # # arch/m68k/fpsp040/get_op.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +41 -41 # M68k superfluous whitespace # # arch/m68k/fpsp040/gen_except.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +39 -39 # M68k superfluous whitespace # # arch/m68k/fpsp040/fpsp.h # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13 # M68k superfluous whitespace # # arch/m68k/fpsp040/do_func.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +28 -28 # M68k superfluous whitespace # # arch/m68k/fpsp040/decbin.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12 # M68k superfluous whitespace # # arch/m68k/fpsp040/bugfix.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +34 -34 # M68k superfluous whitespace # # arch/m68k/fpsp040/binstr.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/fpsp040/bindec.S # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +58 -58 # M68k superfluous whitespace # # arch/m68k/fpsp040/README # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/defconfig # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/bvme6000/rtc.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/atari/time.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19 # M68k superfluous whitespace # # arch/m68k/atari/stram.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19 # M68k superfluous whitespace # # arch/m68k/atari/stdma.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/atari/debug.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12 # M68k superfluous whitespace # # arch/m68k/atari/config.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14 # M68k superfluous whitespace # # arch/m68k/atari/atasound.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/atari/ataints.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12 # M68k superfluous whitespace # # arch/m68k/apollo/dn_ints.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/apollo/dn_debug.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2 # M68k superfluous whitespace # # arch/m68k/apollo/dma.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/apollo/config.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +32 -32 # M68k superfluous whitespace # # arch/m68k/amiga/config.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7 # M68k superfluous whitespace # # arch/m68k/amiga/chipram.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # arch/m68k/amiga/amisound.c # 2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1 # M68k superfluous whitespace # # fs/ntfs/mft.h # 2004/05/11 15:19:37+01:00 aia21@cantab.net +0 -2 # Remove obsolete declaration of format_mft_record2(). # # fs/ntfs/layout.h # 2004/05/11 15:19:37+01:00 aia21@cantab.net +25 -22 # - Add VOLUME_MUST_MOUNT_RO_MASK bit mask to VOLUME_FLAGS enum. # - Also, missed a few trailing tabs in the whitespace cleanup patch. # # fs/ntfs/ChangeLog # 2004/05/11 15:19:37+01:00 aia21@cantab.net +15 -1 # Update for 2.1.10 release. # # Documentation/filesystems/ntfs.txt # 2004/05/11 15:19:37+01:00 aia21@cantab.net +3 -0 # Update for 2.1.10 release. # # ChangeSet # 2004/05/11 09:50:41+01:00 aia21@cantab.net # Merge cantab.net:/home/src/bklinux-2.6 # into cantab.net:/home/src/ntfs-2.6 # # fs/ntfs/ntfs.h # 2004/05/11 09:50:36+01:00 aia21@cantab.net +0 -0 # Auto merged # # ChangeSet # 2004/05/11 04:05:08-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix deadlock in drain_dac # # This patch fixes a typo in a previous change that causes the driver # to deadlock under SMP. # # sound/oss/i810_audio.c # 2004/05/11 04:05:01-04:00 herbert@gondor.apana.org.au +1 -1 # [sound/oss i810] fix deadlock in drain_dac # # This patch fixes a typo in a previous change that causes the driver # to deadlock under SMP. # # ChangeSet # 2004/05/11 04:04:09-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix reads/writes % 4 != 0 # # This patch removes another bogus chunk of code that breaks when # the application does a partial write. # # In particular, a read/write of x bytes where x % 4 != 0 will loop forever. # # sound/oss/i810_audio.c # 2004/05/11 04:04:02-04:00 herbert@gondor.apana.org.au +0 -18 # [sound/oss i810] fix reads/writes % 4 != 0 # # This patch removes another bogus chunk of code that breaks when # the application does a partial write. # # In particular, a read/write of x bytes where x % 4 != 0 will loop forever. # # ChangeSet # 2004/05/11 04:02:55-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix drain_dac loop when signals_allowed==0 # # This patch fixes another bug in the drain_dac wait loop when it is # called with signals_allowed == 0. # # sound/oss/i810_audio.c # 2004/05/11 04:02:49-04:00 herbert@gondor.apana.org.au +2 -1 # [sound/oss i810] fix drain_dac loop when signals_allowed==0 # # This patch fixes another bug in the drain_dac wait loop when it is # called with signals_allowed == 0. # # ChangeSet # 2004/05/11 04:01:34-04:00 herbert@gondor.apana.org.au # [sound/oss i810] remove divides on playback # # This patch removes a couple of divides on the playback path. # # sound/oss/i810_audio.c # 2004/05/11 04:01:28-04:00 herbert@gondor.apana.org.au +4 -6 # [sound/oss i810] remove divides on playback # # This patch removes a couple of divides on the playback path. # # ChangeSet # 2004/05/11 03:59:23-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix OSS fragments # # This patch makes userfragsize do what it's meant to do: do not start # DAC/ADC until a full fragment is available. # # sound/oss/i810_audio.c # 2004/05/11 03:59:17-04:00 herbert@gondor.apana.org.au +13 -4 # [sound/oss i810] fix OSS fragments # # This patch makes userfragsize do what it's meant to do: do not start # DAC/ADC until a full fragment is available. # # ChangeSet # 2004/05/11 03:58:35-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix playback SETTRIGGER # # This patch fixes SETTRIGGER with playback so that the LVI is always # set and the DAC is always started. # # sound/oss/i810_audio.c # 2004/05/11 03:58:29-04:00 herbert@gondor.apana.org.au +3 -3 # [sound/oss i810] fix playback SETTRIGGER # # This patch fixes SETTRIGGER with playback so that the LVI is always # set and the DAC is always started. # # ChangeSet # 2004/05/11 03:57:31-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix partial DMA transfers # # This patch fixes a longstanding bug in this driver where partial fragments # are fed to the hardware. Worse yet, those fragments are then extended # while the hardware is doing DMA transfers causing all sorts of problems. # # sound/oss/i810_audio.c # 2004/05/11 03:57:25-04:00 herbert@gondor.apana.org.au +77 -48 # [sound/oss i810] fix partial DMA transfers # # This patch fixes a longstanding bug in this driver where partial fragments # are fed to the hardware. Worse yet, those fragments are then extended # while the hardware is doing DMA transfers causing all sorts of problems. # # ChangeSet # 2004/05/11 03:56:34-04:00 herbert@gondor.apana.org.au # [sound/oss i810] clean up with macros # # This patch adds a number macros to clean up the code. # # sound/oss/i810_audio.c # 2004/05/11 03:56:29-04:00 herbert@gondor.apana.org.au +18 -10 # [sound/oss i810] clean up with macros # # This patch adds a number macros to clean up the code. # # ChangeSet # 2004/05/11 03:52:23-04:00 herbert@gondor.apana.org.au # [sound/oss] remove bogus CIV_TO_LVI # # This patch removes a pair of bogus LVI assignments. The explanation in # the comment is wrong because the value of PCIB tells the hardware that # the DMA buffer can be processed even if LVI == CIV. # # Setting LVI to CIV + 1 causes overruns when with short writes # (something that vmware is very fond of). # # sound/oss/i810_audio.c # 2004/05/11 03:52:17-04:00 herbert@gondor.apana.org.au +0 -10 # [sound/oss] remove bogus CIV_TO_LVI # # This patch removes a pair of bogus LVI assignments. The explanation in # the comment is wrong because the value of PCIB tells the hardware that # the DMA buffer can be processed even if LVI == CIV. # # Setting LVI to CIV + 1 causes overruns when with short writes # (something that vmware is very fond of). # # ChangeSet # 2004/05/11 03:50:39-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix race # # This patch fixes the value of swptr in case of an underrun/overrun. # # Overruns/underruns probably won't occur at all when the driver is # fixed properly, but this doesn't hurt. # # sound/oss/i810_audio.c # 2004/05/11 03:50:33-04:00 herbert@gondor.apana.org.au +2 -2 # [sound/oss i810] fix race # # This patch fixes the value of swptr in case of an underrun/overrun. # # Overruns/underruns probably won't occur at all when the driver is # fixed properly, but this doesn't hurt. # # ChangeSet # 2004/05/11 03:48:33-04:00 herbert@gondor.apana.org.au # [sound/oss i810] fix wait queue race in drain_dac # # This particular one fixes a textbook race condition in drain_dac # that causes it to timeout when it shouldn't. # # sound/oss/i810_audio.c # 2004/05/11 03:45:43-04:00 herbert@gondor.apana.org.au +11 -10 # [sound/oss i810] fix wait queue race in drain_dac # # This particular one fixes a textbook race condition in drain_dac # that causes it to timeout when it shouldn't. # # ChangeSet # 2004/05/11 03:05:10-04:00 mingo@elte.hu # [netdrvr dmfe] netpoll support # # drivers/net/tulip/dmfe.c # 2004/05/10 20:00:00-04:00 mingo@elte.hu +23 -0 # netpoll support for dmfe.c, 2.6.6-rc3 # # ChangeSet # 2004/05/11 03:05:01-04:00 hch@lst.de # [netdrvr gt961000eth] remove useless MOD_{INC,DEC}_USE_COUNT # # *grr* - this one slipped in after my last round of audits it seems. # # drivers/net/gt96100eth.c # 2004/05/03 09:22:22-04:00 hch@lst.de +0 -6 # remove useless MOD_{INC,DEC}_USE_COUNT # # ChangeSet # 2004/05/11 03:04:53-04:00 akpm@osdl.org # [PATCH] 8139too not running s3 suspend/resume pci fix # # From: "Adrian Yee" # # Having an 8139 based device in my notebook, I often switch between it and # wireless. The problem is that the 8139too driver does not save/restore the # pci configuration of the card if the device isn't running. This simple # patch moves the save/restore code so that the code runs regardless of # whether or not the device is running. # # I looked at other drivers and they all seem to do the same thing. Is there # a reason why this isn't done like in the patch? # # drivers/net/8139too.c # 2004/04/26 13:11:44-04:00 akpm@osdl.org +3 -2 # 8139too not running s3 suspend/resume pci fix # # ChangeSet # 2004/05/11 03:04:44-04:00 akpm@osdl.org # [PATCH] lance.c: fix for card with signature 0x52 0x49 # # From: Vesselin Kostadiov # # Problem: The lance.c driver did not work with my Racal Interlan EtherBlaster # card. # # More info: I found that my card has a signature 0x52 0x49 that was not # recognized by the driver. # # Explanation: Following your suggestion I created a static table with possible # signatures, not too different from the table in ni65.c. The updated code # compares the first byte of the cards signature with the first byte of the # signatures from the table. It this succeeds then it reads the second byte and # compares the whole signature with the values from the table. This way the # minimal I/O reads approach is maintained. # # Side effect: The previous version would missdetect cards with signatures 0x52 # 0x57 and 0x57 0x44. This has been fixed as well. # # drivers/net/lance.c # 2004/05/03 09:40:23-04:00 akpm@osdl.org +37 -7 # lance.c: fix for card with signature 0x52 0x49 # # ChangeSet # 2004/05/11 03:04:36-04:00 cw@f00f.org # [PATCH] kill warning in r8169 # # drivers/net/r8169.c # 2004/05/10 14:42:46-04:00 cw@f00f.org +1 -1 # bk 2.6.6 r8169.c shud'up gcc # # ChangeSet # 2004/05/10 22:12:24-04:00 jgarzik@redhat.com # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_vsc.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_via.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_sx4.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_svw.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +6 -1 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_sis.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_sil.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +5 -1 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/sata_promise.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # drivers/scsi/ata_piix.c # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # MAINTAINERS # 2004/05/10 22:12:19-04:00 jgarzik@redhat.com +6 -0 # [libata] Maintainer annotations # # In MAINTAINERS and in individual low-level drivers. # # ChangeSet # 2004/05/10 21:51:40-04:00 jgarzik@redhat.com # [libata] preparation for writeback caching support # # * bug fix: make sure 'nsect' member of struct ata_queued_cmd is # initialized each time a cmd is re-used. Only affects PIO data xfers, # which nobody uses. # * slightly change the way a device's flags are printed out. currently # the only flag is 'lba48', but soon 'wcache' will appear also. # * add WB-cache-related constants and macros to linux/ata.h # # include/linux/ata.h # 2004/05/10 21:49:59-04:00 jgarzik@redhat.com +4 -0 # [libata] preparation for writeback caching support # # * bug fix: make sure 'nsect' member of struct ata_queued_cmd is # initialized each time a cmd is re-used. Only affects PIO data xfers, # which nobody uses. # * slightly change the way a device's flags are printed out. currently # the only flag is 'lba48', but soon 'wcache' will appear also. # * add WB-cache-related constants and macros to linux/ata.h # # drivers/scsi/libata-core.c # 2004/05/10 21:49:59-04:00 jgarzik@redhat.com +3 -2 # [libata] preparation for writeback caching support # # * bug fix: make sure 'nsect' member of struct ata_queued_cmd is # initialized each time a cmd is re-used. Only affects PIO data xfers, # which nobody uses. # * slightly change the way a device's flags are printed out. currently # the only flag is 'lba48', but soon 'wcache' will appear also. # * add WB-cache-related constants and macros to linux/ata.h # # ChangeSet # 2004/05/10 16:54:27-07:00 eger@havoc.gtf.org # [PATCH] radeon: fix overlapping copyarea # # This fixes a corruption problem with overlapping copyarea()'s # in the radeon driver. # # drivers/video/aty/radeon_accel.c # 2004/04/18 16:49:14-07:00 eger@havoc.gtf.org +17 -4 # radeon: fix overlapping copyarea # # ChangeSet # 2004/05/10 16:54:17-07:00 paulus@samba.org # [PATCH] ppc64: extra barrier in I/O operations # # At the moment, on PPC64, the instruction we use for wmb() doesn't # order cacheable stores vs. non-cacheable stores. (It does order # cacheable vs. cacheable and non-cacheable vs. non-cacheable.) This # causes problems in the sort of driver code that writes stuff into # memory, does a wmb(), then a writel to the device to start a DMA # operation to read the stuff it has just written to memory. # # This patch solves the problem by adding a sync instruction before the # store in the write* and out* macros. The sync is a full barrier that # orders all loads and stores, cacheable or not. The patch also moves # the eieio instruction that we had after the store to before the load # in the read* and in* macros. With the sync before the store, we don't # need an eieio as well in a sequence of stores, but we still need an # eieio between a store and a load. # # I think it is better to do this than to turn wmb() into a full memory # barrier (a sync instruction) because the full barrier is slow and # isn't needed with the sync in the write*/out* macros. This way, # write*/out* are fully ordered with respect to preceding loads and # stores, which is what driver writers expect, and we avoid penalizing # users of wmb() who are only doing cacheable stores. # # include/asm-ppc64/io.h # 2004/05/08 20:31:13-07:00 paulus@samba.org +25 -23 # ppc64: extra barrier in I/O operations # # ChangeSet # 2004/05/10 16:30:02-07:00 willy@debian.org # [PATCH] PA-RISC updates for 2.6.6 # # - Split PA7300LC from PA7100LC (Matthew Wilcox) # - Handle 32-bit firmware and 64-bit kernel at runtime (Ryan Bradetich) # - Fix building in a separate tree (Matthew Wilcox) # - Update defconfigs (Randolph Chung) # - Make WCHAN work (Randolph Chung) # - Initial support for SMP in 2.6 (Grant Grundler) # - Use 8-byte PTEs on 32-bit kernels (James Bottomley) # - Implement L2/L3 hybrid page tables for 64 bit kernels (James Bottomley) # - Support 8TB of physical and virtual address space (James Bottomley) # - Macro'ise the tlb miss handlers (James Bottomley) # - Check the ptrace flags correctly in the syscall return path (Randolph Chung) # - Eliminate many magic numbers (James Bottomley) # - Work around linker bug in vmlinux.lds.S (James Bottomley) # - Many cache flushing fixes (James Bottomley) # - first baby step for PA8800 support (Grant Grundler) # - Self-aligning spinlocks (Randolph Chung) # # include/asm-parisc/unwind.h # 2004/05/08 15:13:01-07:00 willy@debian.org +72 -0 # PA-RISC updates for 2.6.6 # # include/asm-parisc/unistd.h # 2004/05/10 02:19:33-07:00 willy@debian.org +148 -98 # PA-RISC updates for 2.6.6 # # include/asm-parisc/system.h # 2004/05/10 02:19:33-07:00 willy@debian.org +19 -1 # PA-RISC updates for 2.6.6 # # include/asm-parisc/spinlock.h # 2004/05/10 02:19:33-07:00 willy@debian.org +29 -22 # PA-RISC updates for 2.6.6 # # include/asm-parisc/smp.h # 2004/05/10 02:19:33-07:00 willy@debian.org +1 -3 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/unwind.c # 2004/05/08 15:31:44-07:00 willy@debian.org +295 -0 # PA-RISC updates for 2.6.6 # # include/asm-parisc/unwind.h # 2004/05/08 15:13:01-07:00 willy@debian.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-parisc/unwind.h # # include/asm-parisc/processor.h # 2004/05/10 02:19:33-07:00 willy@debian.org +23 -14 # PA-RISC updates for 2.6.6 # # include/asm-parisc/pgtable.h # 2004/05/10 02:19:33-07:00 willy@debian.org +73 -35 # PA-RISC updates for 2.6.6 # # include/asm-parisc/pgalloc.h # 2004/05/10 02:19:32-07:00 willy@debian.org +59 -13 # PA-RISC updates for 2.6.6 # # include/asm-parisc/pdc.h # 2004/05/10 02:19:32-07:00 willy@debian.org +1 -0 # PA-RISC updates for 2.6.6 # # include/asm-parisc/page.h # 2004/05/10 02:19:32-07:00 willy@debian.org +46 -2 # PA-RISC updates for 2.6.6 # # include/asm-parisc/hardware.h # 2004/05/10 02:19:32-07:00 willy@debian.org +2 -1 # PA-RISC updates for 2.6.6 # # include/asm-parisc/fixmap.h # 2004/05/10 02:19:32-07:00 willy@debian.org +14 -10 # PA-RISC updates for 2.6.6 # # include/asm-parisc/dma-mapping.h # 2004/05/10 02:19:32-07:00 willy@debian.org +3 -0 # PA-RISC updates for 2.6.6 # # include/asm-parisc/cacheflush.h # 2004/05/10 02:19:32-07:00 willy@debian.org +73 -19 # PA-RISC updates for 2.6.6 # # include/asm-parisc/cache.h # 2004/05/10 02:19:32-07:00 willy@debian.org +2 -0 # PA-RISC updates for 2.6.6 # # include/asm-parisc/bitops.h # 2004/05/10 02:19:32-07:00 willy@debian.org +23 -12 # PA-RISC updates for 2.6.6 # # include/asm-parisc/atomic.h # 2004/05/10 02:19:32-07:00 willy@debian.org +36 -23 # PA-RISC updates for 2.6.6 # # drivers/parisc/wax.c # 2004/05/10 02:19:04-07:00 willy@debian.org +0 -1 # PA-RISC updates for 2.6.6 # # drivers/parisc/superio.c # 2004/05/10 02:19:04-07:00 willy@debian.org +1 -1 # PA-RISC updates for 2.6.6 # # arch/parisc/mm/init.c # 2004/05/10 02:18:39-07:00 willy@debian.org +7 -2 # PA-RISC updates for 2.6.6 # # arch/parisc/lib/bitops.c # 2004/05/10 02:18:39-07:00 willy@debian.org +12 -14 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/vmlinux.lds.S # 2004/05/10 02:18:39-07:00 willy@debian.org +16 -3 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/unwind.c # 2004/05/08 15:31:44-07:00 willy@debian.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/parisc/kernel/unwind.c # # arch/parisc/kernel/syscall_table.S # 2004/05/10 02:18:39-07:00 willy@debian.org +9 -0 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/syscall.S # 2004/05/10 02:18:38-07:00 willy@debian.org +3 -2 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/sys_parisc.c # 2004/05/10 02:18:38-07:00 willy@debian.org +4 -2 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/smp.c # 2004/05/10 02:18:38-07:00 willy@debian.org +49 -121 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/signal.c # 2004/05/10 02:18:38-07:00 willy@debian.org +17 -8 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/setup.c # 2004/05/10 02:18:37-07:00 willy@debian.org +6 -2 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/real2.S # 2004/05/10 02:18:37-07:00 willy@debian.org +2 -1 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/processor.c # 2004/05/10 02:18:37-07:00 willy@debian.org +2 -3 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/process.c # 2004/05/10 02:18:37-07:00 willy@debian.org +27 -0 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/perf.c # 2004/05/10 02:18:37-07:00 willy@debian.org +4 -2 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/pci-dma.c # 2004/05/10 02:18:37-07:00 willy@debian.org +4 -4 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/pacache.S # 2004/05/10 02:18:37-07:00 willy@debian.org +92 -4 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/init_task.c # 2004/05/10 02:18:37-07:00 willy@debian.org +5 -3 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/head64.S # 2004/05/10 02:18:37-07:00 willy@debian.org +14 -17 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/head.S # 2004/05/10 02:18:37-07:00 willy@debian.org +12 -10 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/hardware.c # 2004/05/10 02:18:37-07:00 willy@debian.org +4 -3 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/firmware.c # 2004/05/10 02:18:37-07:00 willy@debian.org +49 -13 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/entry.S # 2004/05/10 02:18:36-07:00 willy@debian.org +324 -563 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/cache.c # 2004/05/10 02:18:36-07:00 willy@debian.org +35 -26 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/asm-offsets.c # 2004/05/10 02:18:36-07:00 willy@debian.org +15 -0 # PA-RISC updates for 2.6.6 # # arch/parisc/kernel/Makefile # 2004/05/10 02:18:36-07:00 willy@debian.org +1 -1 # PA-RISC updates for 2.6.6 # # arch/parisc/configs/c3000_defconfig # 2004/05/10 02:18:36-07:00 willy@debian.org +18 -13 # PA-RISC updates for 2.6.6 # # arch/parisc/configs/b180_defconfig # 2004/05/10 02:18:36-07:00 willy@debian.org +16 -11 # PA-RISC updates for 2.6.6 # # arch/parisc/configs/a500_defconfig # 2004/05/10 02:18:36-07:00 willy@debian.org +20 -15 # PA-RISC updates for 2.6.6 # # arch/parisc/configs/712_defconfig # 2004/05/10 02:18:36-07:00 willy@debian.org +11 -11 # PA-RISC updates for 2.6.6 # # arch/parisc/Makefile # 2004/05/10 02:18:36-07:00 willy@debian.org +2 -1 # PA-RISC updates for 2.6.6 # # arch/parisc/Kconfig # 2004/05/10 02:18:36-07:00 willy@debian.org +25 -26 # PA-RISC updates for 2.6.6 # # ChangeSet # 2004/05/10 16:25:28-07:00 geert@linux-m68k.org # [PATCH] M68k missing # # M68k: needs include for # __attribute_const__ (from Richard Zidlicky) # # include/asm-m68k/virtconvert.h # 2004/05/05 03:58:46-07:00 geert@linux-m68k.org +1 -0 # M68k missing # # ChangeSet # 2004/05/10 16:25:18-07:00 geert@linux-m68k.org # [PATCH] Sun3x dummycon # # Sun3x: Like most other platforms, Sun3x needs conswitchp set if # CONFIG_DUMMY_CONSOLE is defined (from Sam Creasey) # # arch/m68k/sun3x/config.c # 2004/04/30 02:42:04-07:00 geert@linux-m68k.org +4 -0 # Sun3x dummycon # # ChangeSet # 2004/05/10 16:24:30-07:00 torvalds@ppc970.osdl.org # Merge bk://gkernel.bkbits.net/libata-2.6 # into ppc970.osdl.org:/home/torvalds/v2.6/linux # # include/linux/pci_ids.h # 2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/scsi/Makefile # 2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/scsi/Kconfig # 2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # ChangeSet # 2004/05/10 16:13:18-07:00 viro@parcelfarce.linux.theplanet.co.uk # [PATCH] ntfs cleanup # # ntfs_fill_super() and ntfs_read_inode_mount() cleaned up. Removed # the kludges around the first iget() on NTFS. Instead of playing with # (re)setting ->s_op we have the MFT_FILE inode set up by explicit new_inode()/ # set ->i_ino/insert_inode_hash()/call ntfs_read_inode_mount() directly. # That kills the need of second super_operations and it allows to return # error from ntfs_read_inode_mount() without resorting to ugly "poisoning" # tricks. # # fs/ntfs/super.c # 2004/05/09 23:16:23-07:00 viro@parcelfarce.linux.theplanet.co.uk +11 -34 # ntfs cleanup # # fs/ntfs/ntfs.h # 2004/05/09 23:18:07-07:00 viro@parcelfarce.linux.theplanet.co.uk +0 -10 # ntfs cleanup # # fs/ntfs/inode.h # 2004/05/09 22:41:09-07:00 viro@parcelfarce.linux.theplanet.co.uk +1 -1 # ntfs cleanup # # fs/ntfs/inode.c # 2004/05/09 22:46:58-07:00 viro@parcelfarce.linux.theplanet.co.uk +8 -21 # ntfs cleanup # # ChangeSet # 2004/05/10 16:10:46-07:00 torvalds@ppc970.osdl.org # Merge bk://linux-scsi.bkbits.net/scsi-for-linus-2.6 # into ppc970.osdl.org:/home/torvalds/v2.6/linux # # include/linux/pci_ids.h # 2004/05/10 16:10:43-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # drivers/scsi/megaraid.c # 2004/05/10 16:10:42-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # MAINTAINERS # 2004/05/10 16:10:42-07:00 torvalds@ppc970.osdl.org +0 -0 # Auto merged # # ChangeSet # 2004/05/10 23:56:17+01:00 rmk@flint.arm.linux.org.uk # [SERIAL] Fix exit function pointer initialisers # # This wraps pointer initialisers to functions marked __devexit with # __devexit_p. # # drivers/serial/8250_pci.c # 2004/05/10 23:53:49+01:00 rmk@flint.arm.linux.org.uk +4 -4 # exit function pointer initialisers should be marked with __devexit_p # # ChangeSet # 2004/05/10 23:53:05+01:00 aia21@cantab.net # NTFS: Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/logfile.c # 2004/05/10 23:52:19+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/time.h # 2004/05/10 23:52:17+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/volume.h # 2004/05/10 23:52:16+01:00 aia21@cantab.net +2 -2 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/unistr.c # 2004/05/10 23:52:14+01:00 aia21@cantab.net +10 -12 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/types.h # 2004/05/10 23:52:12+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/sysctl.h # 2004/05/10 23:52:10+01:00 aia21@cantab.net +6 -7 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/sysctl.c # 2004/05/10 23:52:09+01:00 aia21@cantab.net +6 -7 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/ntfs.h # 2004/05/10 23:52:07+01:00 aia21@cantab.net +2 -3 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/namei.c # 2004/05/10 23:52:05+01:00 aia21@cantab.net +4 -4 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/mst.c # 2004/05/10 23:52:04+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/mft.h # 2004/05/10 23:52:02+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/mft.c # 2004/05/10 23:52:00+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/malloc.h # 2004/05/10 23:51:59+01:00 aia21@cantab.net +1 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/layout.h # 2004/05/10 23:51:57+01:00 aia21@cantab.net +0 -1 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/file.c # 2004/05/10 23:51:56+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/endian.h # 2004/05/10 23:51:54+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/dir.h # 2004/05/10 23:51:52+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/debug.h # 2004/05/10 23:51:48+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/debug.c # 2004/05/10 23:51:44+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/attrib.h # 2004/05/10 23:51:19+01:00 aia21@cantab.net +4 -5 # Cleanup whitespace (trailing space removal, etc). # # fs/ntfs/Makefile # 2004/05/10 23:51:09+01:00 aia21@cantab.net +1 -1 # Update # # fs/ntfs/ChangeLog # 2004/05/10 23:50:55+01:00 aia21@cantab.net +4 -1 # Update # # ChangeSet # 2004/05/10 17:29:29-05:00 jejb@mulgrave.(none) # qla2100 fabric fixes # # From: "Andrew Vasquez" # # Ok, well there aren't too many folks using an QLA2100 in a fabric # topology, if there were, they wouldn't have gotten very far in the # driver load sequence. I've been able to scrape-up a QLA2100, 1Gig # switch, and an JBOD. Upon loading the 8.00.00b12k driver, the # firmware successfully logs into the switch, the driver receives a # LOOP_UP event, but, the kernel panics due to NULL pointer dereference # while trying to perform an RFT_ID -- the attached patch against # current scsi-misc-2.6 fixes that problem. # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +2 -2 # qla2100 fabric fixes # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +0 -4 # qla2100 fabric fixes # # drivers/scsi/qla2xxx/qla_gs.c # 2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +12 -60 # qla2100 fabric fixes # # drivers/scsi/qla2xxx/qla_def.h # 2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +0 -5 # qla2100 fabric fixes # # ChangeSet # 2004/05/10 16:40:22-05:00 James.Bottomley@steeleye.com # [PATCH] fix LLD module refcounting in sr.c # # The patch to close all the open/close/hotplug races in sr left the # module refcounting broken so that the ULD housing the CD device now # can't be removed until the device itself is removed. # # This patch (structurally identical to the one for sd.c to perform the # same function) fixes the module refcounting. # # drivers/scsi/sr.c # 2004/05/10 11:12:15-05:00 James.Bottomley@steeleye.com +14 -11 # fix LLD module refcounting in sr.c # # ChangeSet # 2004/05/10 14:25:52-07:00 akpm@osdl.org # [PATCH] get_thread_area macro fixes # # From: Adam Lackorzynski # # one of the macros for get_thread_area extracts the wrong bit. The # "32bit" field is in bit 22, not 23 (as can be seen in desc.h). # # [ Fix ia64/x86-64 too, while we're at it. Linus ] # # arch/x86_64/ia32/tls32.c # 2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1 # get_thread_area macro fixes # # arch/ia64/ia32/sys_ia32.c # 2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1 # get_thread_area macro fixes # # arch/i386/kernel/ptrace.c # 2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1 # get_thread_area macro fixes # # arch/i386/kernel/process.c # 2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1 # get_thread_area macro fixes # # ChangeSet # 2004/05/10 14:25:41-07:00 akpm@osdl.org # [PATCH] Add SMT setup for domain scheduler on x86-64 # # From: Andi Kleen # # Set up SMT for the domain scheduler on x86-64. This way the scheduling # works better on HyperThreading aware systems; in particular it will use # both physical CPUs before sharing two virtual CPUs on the same package. # This improves performance considerably in some cases. # # Based on the i386 code and a previous patch from Suresh B. Siddha. # # arch/x86_64/kernel/domain.c # 2004/05/10 03:25:59-07:00 akpm@osdl.org +89 -0 # Add SMT setup for domain scheduler on x86-64 # # include/asm-x86_64/processor.h # 2004/05/10 03:25:59-07:00 akpm@osdl.org +5 -0 # Add SMT setup for domain scheduler on x86-64 # # arch/x86_64/kernel/domain.c # 2004/05/10 03:25:59-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/x86_64/kernel/domain.c # # arch/x86_64/kernel/Makefile # 2004/05/10 03:25:59-07:00 akpm@osdl.org +1 -0 # Add SMT setup for domain scheduler on x86-64 # # arch/x86_64/Kconfig # 2004/05/10 03:25:59-07:00 akpm@osdl.org +10 -0 # Add SMT setup for domain scheduler on x86-64 # # ChangeSet # 2004/05/10 14:25:30-07:00 akpm@osdl.org # [PATCH] x86-64: convert sibling map to masks # # From: Andi Kleen # # From: Suresh B. Siddha # # Convert sibling map on x86-64 to cpumasks. # # This is needed for the SMT patches. # # include/asm-x86_64/smp.h # 2004/05/10 03:25:56-07:00 akpm@osdl.org +1 -1 # x86-64: convert sibling map to masks # # arch/x86_64/kernel/smpboot.c # 2004/05/10 03:25:56-07:00 akpm@osdl.org +23 -18 # x86-64: convert sibling map to masks # # ChangeSet # 2004/05/10 14:14:39-07:00 torvalds@ppc970.osdl.org # Remove intermezzo, per instructions from Peter Braam. # # BitKeeper/deleted/.del-vfs.c~165e22e6a7ba108 # 2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/vfs.c # # BitKeeper/deleted/.del-upcall.c~976ba6ddc70d82d0 # 2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/upcall.c # # BitKeeper/deleted/.del-sysctl.c~e29fbc5ba9b64254 # 2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/sysctl.c # # BitKeeper/deleted/.del-super.c~326162ada7873a62 # 2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/super.c # # BitKeeper/deleted/.del-replicator.c~8d717c6a8a2aed8c # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/replicator.c # # BitKeeper/deleted/.del-psdev.c~20211a738de20311 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/psdev.c # # BitKeeper/deleted/.del-presto.c~ca1c8539f09f58b3 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/presto.c # # BitKeeper/deleted/.del-methods.c~2b904fa1331fb6b1 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/methods.c # # BitKeeper/deleted/.del-kml_utils.c~f6480e1c3639483b # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml_utils.c # # BitKeeper/deleted/.del-kml_unpack.c~a6a712f450c0a5c9 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml_unpack.c # # BitKeeper/deleted/.del-kml_setup.c~a45e484b43988906 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml_setup.c # # BitKeeper/deleted/.del-kml_reint.c~baf57ddfb16b6a9 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml_reint.c # # BitKeeper/deleted/.del-kml_decode.c~6b7df6c56b9af923 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml_decode.c # # BitKeeper/deleted/.del-kml.c~b65b8d24cc0c4ffd # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/kml.c # # BitKeeper/deleted/.del-journal_xfs.c~8c292cee9b94d964 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_xfs.c # # BitKeeper/deleted/.del-journal_tmpfs.c~4b578b9c4f5d5885 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_tmpfs.c # # BitKeeper/deleted/.del-journal_reiserfs.c~266418f57226fc78 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_reiserfs.c # # BitKeeper/deleted/.del-journal_obdfs.c~9d17c618797703ec # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_obdfs.c # # BitKeeper/deleted/.del-journal_ext3.c~245345523fcb42b0 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_ext3.c # # BitKeeper/deleted/.del-journal_ext2.c~b3cf997587046f60 # 2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal_ext2.c # # BitKeeper/deleted/.del-journal.c~38743a9cf991b967 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/journal.c # # BitKeeper/deleted/.del-intermezzo_upcall.h~a9a4d5322388a64c # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_upcall.h # # BitKeeper/deleted/.del-intermezzo_psdev.h~cc557782bdb799b6 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_psdev.h # # BitKeeper/deleted/.del-intermezzo_lib.h~30f1b0a71cc1ecfa # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_lib.h # # BitKeeper/deleted/.del-intermezzo_kml.h~5eeff6672408808a # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_kml.h # # BitKeeper/deleted/.del-intermezzo_journal.h~cf9d1e68a72eb656 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_journal.h # # BitKeeper/deleted/.del-intermezzo_idl.h~c3ad3183cc030538 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_idl.h # # BitKeeper/deleted/.del-intermezzo_fs.h~7e6e6586d37758c4 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/intermezzo_fs.h # # BitKeeper/deleted/.del-inode.c~db7d289a82a13d69 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/inode.c # # BitKeeper/deleted/.del-fileset.c~90d053ee7dff80c9 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/fileset.c # # BitKeeper/deleted/.del-file.c~db7b29cfd4569e4d # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/file.c # # BitKeeper/deleted/.del-ext_attr.c~9eb3e1fa34f83cf3 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/ext_attr.c # # BitKeeper/deleted/.del-dir.c~b00f4a9b315238c # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/dir.c # # BitKeeper/deleted/.del-dcache.c~a257396396f1bff8 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/dcache.c # # BitKeeper/deleted/.del-cache.c~3ffbeca15415a312 # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/cache.c # # BitKeeper/deleted/.del-Makefile~f539ea491787e98b # 2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0 # Delete: fs/intermezzo/Makefile # # ChangeSet # 2004/05/10 14:12:21-07:00 akpm@osdl.org # [PATCH] Fix __down Tainting Kernel with CONFIG_MODVERSIONS=y # # From: Rusty Russell # # PowerPC64 ABI has ".funcname" (the actual function) and "funcname" (the # function descriptor) and we strip off the dots in "dedotify" called from # module_frob_arch_sections(). We need to also de-dotify the corresponding # names in the __version section. # # Actually has nothing to do with __down, it's just that we only print the # first symbol whose version is missing. # # arch/ppc64/kernel/module.c # 2004/05/10 04:25:58-07:00 akpm@osdl.org +13 -0 # Fix __down Tainting Kernel with CONFIG_MODVERSIONS=y # # ChangeSet # 2004/05/10 14:12:10-07:00 akpm@osdl.org # [PATCH] PPC termio fix # # From: Paul Mackerras # # It turns out that we are not handling the TABDLY bits of the termios # c_oflag field correctly on PPC, PPC64 and Alpha. These three architectures # have a value for XTABS that is different from the TAB3 value. POSIX # specifies that setting the TABDLY field to TAB3 should result in tabs being # expanded to spaces. In n_tty.c:opost() we check for O_TABDLY(tty) == # XTABS, which is fine on most architectures because they have XTABS == TAB3. # # I think the right thing to do is just to change the definition of XTABS to # be the same as TAB3 on these architectures. The patch below does this for # PPC and PPC64 (and I suggest the Alpha maintainer should do the same). At # the moment, applications using either the XTABS or TAB3 values won't get # the expected behaviour. With this patch, apps that use TAB3 will get the # expected behaviour. Apps that use XTABS will need to be recompiled (but # note that the POSIX-specified name to use is TAB3 not XTABS). # # include/asm-ppc64/termbits.h # 2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1 # PPC termio fix # # include/asm-ppc/termbits.h # 2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1 # PPC termio fix # # ChangeSet # 2004/05/10 14:12:00-07:00 akpm@osdl.org # [PATCH] remove intermezzo # # Peter Braam said: # # I would just like to say that I have no difficulties with intermezzo # being rm -rf'd. There are probably only a handful of users. # # In the past 4 years nobody has supported InterMezzo sufficiently for # it to become successful. I have been fortunate to get really good support # for the Lustre project. So I have focussed on that. Lustre 1.X has # become really solid. # # The disconnected operation, caching and mirroring functionality of # InterMezzo will become available in Lustre as a new feature in version 2. # # So I see no point in keeping InterMezzo if it is a nuisance. # # # The patch removes the references to intermezzo. Please do a `bk rm' of # fs/intermezzo. # # fs/Makefile # 2004/05/10 04:25:57-07:00 akpm@osdl.org +0 -1 # remove intermezzo # # fs/Kconfig # 2004/05/10 04:25:57-07:00 akpm@osdl.org +0 -16 # remove intermezzo # # ChangeSet # 2004/05/10 14:11:49-07:00 akpm@osdl.org # [PATCH] make tags for selinux # # From: Olaf Hering # # make tags skips security/selinux/include because of find . -name include # -prune This patch does just add it later. No idea if it can be done # better. # # Makefile # 2004/05/10 04:25:57-07:00 akpm@osdl.org +2 -0 # make tags for selinux # # ChangeSet # 2004/05/10 14:11:38-07:00 akpm@osdl.org # [PATCH] fix some typos in sound docs # # From: Christoph Hellwig # # (partially from the debian kernel tree) # # Documentation/sound/oss/VIBRA16 # 2004/05/10 04:25:57-07:00 akpm@osdl.org +5 -5 # fix some typos in sound docs # # Documentation/sound/oss/OPL3-SA # 2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1 # fix some typos in sound docs # # ChangeSet # 2004/05/10 14:11:28-07:00 akpm@osdl.org # [PATCH] telephony/ixj.h: remove kernel 2.2 #ifdef's # # From: Adrian Bunk # # The patch below removes two #ifdef's for kernel 2.2 from # linux-2.6.2-mm1/drivers/telephony/ixj.h # # drivers/telephony/ixj.h # 2004/05/10 04:25:56-07:00 akpm@osdl.org +0 -9 # telephony/ixj.h: remove kernel 2.2 #ifdef's # # ChangeSet # 2004/05/10 14:11:17-07:00 akpm@osdl.org # [PATCH] remove kernel 2.2 code from drivers/net/hamradio/dmascc.c # # From: Adrian Bunk # # The patch below removes some #ifdef'd kernel 2.2 code from # drivers/net/hamradio/dmascc.c. # # drivers/net/hamradio/dmascc.c # 2004/05/10 04:25:56-07:00 akpm@osdl.org +0 -18 # remove kernel 2.2 code from drivers/net/hamradio/dmascc.c # # ChangeSet # 2004/05/10 14:11:07-07:00 akpm@osdl.org # [PATCH] Crystal cs4235 mixer fix # # From: Joseph Parmelee # # Fixes improper setup of the mixer on Crystal soundcards with the CS4235 # chip. # # sound/oss/ad1848.c # 2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -0 # Crystal cs4235 mixer fix # # ChangeSet # 2004/05/10 14:10:56-07:00 akpm@osdl.org # [PATCH] export con_set_default_unimap() # # fbcon needs this symbol. # # drivers/char/consolemap.c # 2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -0 # export con_set_default_unimap() # # ChangeSet # 2004/05/10 14:10:46-07:00 akpm@osdl.org # [PATCH] Make usermodehelper_init() use core_initcall() # # We may as well make usermodehelper_init() core_initcall as well, to make # sure its services are avaialble to all the other initcall levels. # # kernel/kmod.c # 2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -1 # Make usermodehelper_init() use core_initcall() # # ChangeSet # 2004/05/10 14:10:35-07:00 akpm@osdl.org # [PATCH] use core_initcall for binfmt initialisation # # We need to register the binfmts earlier, so normal initcalls can successfully # run call_usermodehelper() to execute things. # # fs/binfmt_som.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # use core_initcall for binfmt initialisation # # fs/binfmt_script.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2 # use core_initcall for binfmt initialisation # # fs/binfmt_misc.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # use core_initcall for binfmt initialisation # # fs/binfmt_flat.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # use core_initcall for binfmt initialisation # # fs/binfmt_em86.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2 # use core_initcall for binfmt initialisation # # fs/binfmt_elf.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2 # use core_initcall for binfmt initialisation # # fs/binfmt_aout.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # use core_initcall for binfmt initialisation # # ChangeSet # 2004/05/10 14:10:24-07:00 akpm@osdl.org # [PATCH] minor RCU optimization # # From: Stephen Hemminger # # Minor tweak to rcu, use __list_splice instead of list_splice because the # list has already been checked for empty. # # kernel/rcupdate.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2 # minor RCU optimization # # ChangeSet # 2004/05/10 14:10:14-07:00 akpm@osdl.org # [PATCH] remove MOD_INC_USE_COUNT usage in arch/um/drivers/harddog_kern.c # # From: Christoph Hellwig # # ->open already has a reference so use __module_get. The file has no # maintainer noted in it, all credits are from the driver it's copied from. # # arch/um/drivers/harddog_kern.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # remove MOD_INC_USE_COUNT usage in arch/um/drivers/harddog_kern.c # # ChangeSet # 2004/05/10 14:10:03-07:00 akpm@osdl.org # [PATCH] fix MOD_INC_USE_COUNT usage in mtd # # From: Christoph Hellwig # # mtd driver need to get another reference if ->probe succeeds (strange design # if you ask me, but what the heck..), and while most drivers have been switched # to __module_get already two are still missing. # # drivers/mtd/chips/sharp.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # fix MOD_INC_USE_COUNT usage in mtd # # drivers/mtd/chips/amd_flash.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1 # fix MOD_INC_USE_COUNT usage in mtd # # ChangeSet # 2004/05/10 14:09:53-07:00 akpm@osdl.org # [PATCH] drivers/video/* MOD_INC_USE_COUNT fixes # # From: Christoph Hellwig # # A bunch of framebuffer drivers use MOD_INC_USE_COUNT to prevent themselves # from unloading completely - but we have a much easier way to do so, that is # simply removing the module_exit/cleanup_module handler. # # drivers/video/virgefb.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -9 # drivers/video/* MOD_INC_USE_COUNT fixes # # drivers/video/sa1100fb.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -2 # drivers/video/* MOD_INC_USE_COUNT fixes # # drivers/video/retz3fb.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -12 # drivers/video/* MOD_INC_USE_COUNT fixes # # drivers/video/cyberfb.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -9 # drivers/video/* MOD_INC_USE_COUNT fixes # # drivers/video/atafb.c # 2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -11 # drivers/video/* MOD_INC_USE_COUNT fixes # # ChangeSet # 2004/05/10 14:09:42-07:00 akpm@osdl.org # [PATCH] fix MOD_{INC,DEC}_USE_COUNT gunk in arch/um/drivers/net_kern.c # # From: Christoph Hellwig # # Well, UML is pretty out of date in mainline, but I'd like to squash the last # users of said beasts rather sooner than later. # # arch/um/drivers/net_kern.c # 2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -2 # fix MOD_{INC,DEC}_USE_COUNT gunk in arch/um/drivers/net_kern.c # # ChangeSet # 2004/05/10 14:09:31-07:00 akpm@osdl.org # [PATCH] kill MOD_{INC,DEC}_USE_COUNT gunk in arch/cris/arch-v10/drivers/pcf8563.c # # From: Christoph Hellwig # # Driver already sets fops->owner so the open/close methods are entirely # superflous. # # arch/cris/arch-v10/drivers/pcf8563.c # 2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -18 # kill MOD_{INC,DEC}_USE_COUNT gunk in arch/cris/arch-v10/drivers/pcf8563.c # # ChangeSet # 2004/05/10 14:09:21-07:00 akpm@osdl.org # [PATCH] kill useless MOD_{INC,DEC}_USE_COUNT in sound/oss/msnd.c # # From: Christoph Hellwig # # Callers are exported register/unregister handlers so the module is locked in # core by users of said exports. # # sound/oss/msnd.c # 2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -5 # kill useless MOD_{INC,DEC}_USE_COUNT in sound/oss/msnd.c # # ChangeSet # 2004/05/10 14:09:10-07:00 akpm@osdl.org # [PATCH] cpqarray update for 2.6 # # From: # # This patch fixes 2 minor issues that break our Array Configuration utility. # my_io was changed to a pointer so the & had to removed when using it with # copy_to_user(). # # Sometime in 2.5 SG_MAX got changed to 31. Maybe to copy cciss? Now I'm # changing it back to 32 so our app can work. # # drivers/block/ida_cmd.h # 2004/05/10 04:25:54-07:00 akpm@osdl.org +1 -1 # cpqarray update for 2.6 # # drivers/block/cpqarray.c # 2004/05/10 04:25:54-07:00 akpm@osdl.org +1 -1 # cpqarray update for 2.6 # # ChangeSet # 2004/05/10 14:09:00-07:00 akpm@osdl.org # [PATCH] Add sysctl to define a hugetlb-capable group # # From: "Chen, Kenneth W" , # "Seth, Rohit" # # This patch addresses the longstanding problem wherein Oracle needs # CAP_IPC_LOCK to allocate SHM_HUGETLB shm memory, but people don't want to run # Oracle as root, and capabilties are busted. # # Various ideas with rlimits didn't work out, mainly because these objects live # beyond the lifetime of the user processes which establish them. # # What we do is to create root-writeable /proc/sys/vm/hugetlb_shm_group which # specifies a single group ID. Users who belong to that group may allocate # hugepages for SHM_HUGETLB shm segments. # # So the sysadmin will greate a new group, say `hugepageusers', will add the # oracle user to that group and will write that group's ID into # /proc/sys/vm/hugetlb_shm_group. # # kernel/sysctl.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +8 -0 # Add sysctl to define a hugetlb-capable group # # include/linux/sysctl.h # 2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -0 # Add sysctl to define a hugetlb-capable group # # include/linux/hugetlb.h # 2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -0 # Add sysctl to define a hugetlb-capable group # # fs/hugetlbfs/inode.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +9 -1 # Add sysctl to define a hugetlb-capable group # # Documentation/vm/hugetlbpage.txt # 2004/05/10 04:25:53-07:00 akpm@osdl.org +6 -3 # Add sysctl to define a hugetlb-capable group # # Documentation/filesystems/proc.txt # 2004/05/10 04:25:53-07:00 akpm@osdl.org +8 -7 # Add sysctl to define a hugetlb-capable group # # ChangeSet # 2004/05/10 14:08:49-07:00 akpm@osdl.org # [PATCH] hugepage: fix add_to_page_cache() error handling # # From: David Gibson # # add_to_page_cache() locks the given page if and only if it suceeds. The # hugepage code (every arch), however, does an unlock_page() after # add_to_page_cache() before checking the return code, which could trip the # BUG() in unlock_page() if add_to_page_cache() failed. # # In practice we've never hit this bug, because the only ways # add_to_page_cache() can fail are when we fail to allocate a radix tree node # (very rare), or when there is already a page at that offset in the radix # tree, which never happens during prefault, obviously. We should probably # fix it anyway, though. # # The analagous bug in some of the patches floating about to # demand-allocation of hugepages is more of a problem, because multiple # processes can race to instantiate a particular page in the radix tree - # that's been hit at least once (which is how I found this). # # arch/sparc64/mm/hugetlbpage.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2 # hugepage: fix add_to_page_cache() error handling # # arch/sh/mm/hugetlbpage.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2 # hugepage: fix add_to_page_cache() error handling # # arch/ppc64/mm/hugetlbpage.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2 # hugepage: fix add_to_page_cache() error handling # # arch/ia64/mm/hugetlbpage.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2 # hugepage: fix add_to_page_cache() error handling # # arch/i386/mm/hugetlbpage.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2 # hugepage: fix add_to_page_cache() error handling # # ChangeSet # 2004/05/10 14:08:38-07:00 akpm@osdl.org # [PATCH] fix wrong var used in hotplug/shpchp_ctrl.c. # # From: "Luiz Fernando N. Capitulino" # # Zhenmin's checker tool detected this: # # 9. /drivers/pci/hotplug/shpchp_ctrl.c, Line 1575: # err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); # # Maybe change to: # err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, # retval); # # I think it is right because at line 1564, the slot is turned off, and in # this line (1575) is checked the status to see if we got an error; if so, # the error number is shown. This number is in 'retval', not in 'rc' ('rc' # does have the return of configure_new_device()). # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -1 # fix wrong var used in hotplug/shpchp_ctrl.c. # # ChangeSet # 2004/05/10 14:08:27-07:00 akpm@osdl.org # [PATCH] Lindent arch/i386/kernel/cpuid.c # # From: Hanna Linder # # Per Greg's request this is a patch of having run Lindent on cpuid.c. The # tabs were not the right number of spaces before. I have verified it still # compiles and boots with this "change". # # arch/i386/kernel/cpuid.c # 2004/05/10 04:25:53-07:00 akpm@osdl.org +86 -86 # Lindent arch/i386/kernel/cpuid.c # # ChangeSet # 2004/05/10 14:08:17-07:00 akpm@osdl.org # [PATCH] pcmcia/tcic.c warning fix. # # From: "Luiz Fernando N. Capitulino" # # drivers/pcmcia/tcic.c:63: warning: `version' defined but not used # # drivers/pcmcia/tcic.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1 # pcmcia/tcic.c warning fix. # # ChangeSet # 2004/05/10 14:08:06-07:00 akpm@osdl.org # [PATCH] as-iosched barrier fix # # From: Jens Axboe # # AS does not correctly account requests inserted with INSERT_FRONT or # INSERT_BACK, barriers for example. In other elevators, requeued requests also # go through the insert path, but AS has its own requeue handler which means the # code has never been tested. # # Also, make inserting a barrier with INSERT_SORT imply INSERT_BACK, which is # the logical behaviour. Previously such insertions weren't rigorously defined. # # drivers/block/elevator.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +7 -0 # as-iosched barrier fix # # drivers/block/as-iosched.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +20 -4 # as-iosched barrier fix # # ChangeSet # 2004/05/10 14:07:55-07:00 akpm@osdl.org # [PATCH] Fix race on tty close # # From: Benjamin Herrenschmidt # # ldisc close can race with the flush_to_ldisc workqueue. # # This patch fixes it by killing the workqueue first. # # drivers/char/tty_io.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +12 -12 # Fix race on tty close # # ChangeSet # 2004/05/10 14:07:45-07:00 akpm@osdl.org # [PATCH] SElinux interface for reporting size of printk buffer # # From: Olaf Dabrunz # # Add the necessary hooks so that a SELinux-enabled kernel will allow the new # "report the size of the printk buffer" query to work. # # security/selinux/hooks.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -0 # SElinux interface for reporting size of printk buffer # # security/dummy.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1 # SElinux interface for reporting size of printk buffer # # security/commoncap.c # 2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1 # SElinux interface for reporting size of printk buffer # # ChangeSet # 2004/05/10 14:07:34-07:00 akpm@osdl.org # [PATCH] blk: cache queue_congestion_on/off_threshold values # # From: "Chen, Kenneth W" # # It's kind of redundant that queue_congestion_on/off_threshold gets # calculated on every I/O and they produce the same number over and over # again unless q->nr_requests gets changed (which is probably a very rare # event). We can cache those values in the request_queue structure. # # include/linux/blkdev.h # 2004/05/10 04:25:51-07:00 akpm@osdl.org +2 -0 # blk: cache queue_congestion_on/off_threshold values # # drivers/block/ll_rw_blk.c # 2004/05/10 04:25:51-07:00 akpm@osdl.org +16 -13 # blk: cache queue_congestion_on/off_threshold values # # ChangeSet # 2004/05/10 14:07:23-07:00 akpm@osdl.org # [PATCH] swsusp documentation updates # # From: Pavel Machek # # Documentation/power/swsusp.txt # 2004/05/10 04:25:51-07:00 akpm@osdl.org +56 -5 # swsusp documentation updates # # ChangeSet # 2004/05/10 14:07:13-07:00 akpm@osdl.org # [PATCH] simplify mqueue_inode_info->messages allocation # # From: Chris Wright # # Currently, if a user creates an mqueue and passes an mq_attr, the # info->messages will be created twice (and the extra one is properly freed). # This patch simply delays the allocation so that it only ever happens once. # The relevant mq_attr data is passed to lower levels via the dentry->d_fsdata # fs private data. This also helps isolate the areas we'd need to touch to do # rlimits on mqueues. # # ipc/mqueue.c # 2004/05/10 04:25:51-07:00 akpm@osdl.org +14 -25 # simplify mqueue_inode_info->messages allocation # # ChangeSet # 2004/05/10 14:07:02-07:00 akpm@osdl.org # [PATCH] bfs filesystem read past the end of dir # # From: Jakub Jermar # # I found out that BFS filesystem will eventually try to read and interpret # garbage past the end of directory in bfs_add_entry(). If the garbage # (interpreted as i-node number) is not set to zero (does it have to be?) # bfs_add_entry() will consider it a regular directory entry. # # This causes weird things like this: # # touch a # # rm a # # ls # # touch b # # ls # a # # My patch detects an attempt to read past the end of directory and explicitly # clears the garbage that represents i-node number. Thus the correct behaviour # is achieved. # # (was unable to contact Tigran) # # fs/bfs/dir.c # 2004/05/10 04:25:51-07:00 akpm@osdl.org +6 -1 # bfs filesystem read past the end of dir # # ChangeSet # 2004/05/10 14:06:52-07:00 akpm@osdl.org # [PATCH] update Documentation/md.txt # # From: (Dick Streefland) # # The following patch documents the currently undocumented raid= kernel # parameter. # # Documentation/md.txt # 2004/05/10 04:25:51-07:00 akpm@osdl.org +21 -2 # update Documentation/md.txt # # ChangeSet # 2004/05/10 14:06:42-07:00 akpm@osdl.org # [PATCH] es7000 subarch update for generic arch # # From: "Protasevich, Natalie" # # This is ES7000 sub architecture update. It makes ES7000 a part of the # generic architecture, so the single compiled kernel will be able to choose # a correct set of parameters, routines ("genapic"), and a boot path. It # uses criteria provided by the subarch for platform identification. In case # of ES7000, it is a unique product/vendor string in the ACPI/MP OEM table, # and server control registers. The patch is confined to only es7000 subarch # and generic subarch. It was tested on ES7000 as well as generic Intel 8x # Xeon system. Andi Kleen has reviewed the changes. # # arch/i386/mach-generic/es7000.c # 2004/05/10 14:06:36-07:00 akpm@osdl.org +28 -0 # # include/asm-i386/mach-generic/mach_apic.h # 2004/05/10 04:25:50-07:00 akpm@osdl.org +3 -2 # es7000 subarch update for generic arch # # include/asm-i386/mach-es7000/mach_mpparse.h # 2004/05/10 04:25:50-07:00 akpm@osdl.org +7 -5 # es7000 subarch update for generic arch # # include/asm-i386/mach-es7000/mach_ipi.h # 2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1 # es7000 subarch update for generic arch # # include/asm-i386/genapic.h # 2004/05/10 04:25:50-07:00 akpm@osdl.org +4 -1 # es7000 subarch update for generic arch # # arch/i386/mach-generic/probe.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -0 # es7000 subarch update for generic arch # # arch/i386/mach-generic/es7000.c # 2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/i386/mach-generic/es7000.c # # arch/i386/mach-generic/Makefile # 2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -12 # es7000 subarch update for generic arch # # arch/i386/mach-es7000/es7000plat.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +14 -14 # es7000 subarch update for generic arch # # arch/i386/mach-es7000/es7000.h # 2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1 # es7000 subarch update for generic arch # # arch/i386/mach-es7000/Makefile # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1 # es7000 subarch update for generic arch # # arch/i386/Makefile # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1 # es7000 subarch update for generic arch # # arch/i386/Kconfig # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -2 # es7000 subarch update for generic arch # # BitKeeper/deleted/.del-topology.c~2d79ed1a63b27690 # 2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0 # Delete: arch/i386/mach-es7000/topology.c # # BitKeeper/deleted/.del-setup.c~1b687d49b2d0b042 # 2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0 # Delete: arch/i386/mach-es7000/setup.c # # ChangeSet # 2004/05/10 14:05:51-07:00 akpm@osdl.org # [PATCH] CLOCK_TICK_RATE: use CLOCK_TICK_RATE # # From: Thorsten Kranzkowski # # use CLOCK_TICK_RATE where 1193180 was used in general timing calculations. # (optional) # # sound/oss/pas2_pcm.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +5 -4 # CLOCK_TICK_RATE: use CLOCK_TICK_RATE # # drivers/input/joystick/analog.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1 # CLOCK_TICK_RATE: use CLOCK_TICK_RATE # # ChangeSet # 2004/05/10 14:05:40-07:00 akpm@osdl.org # [PATCH] CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c # # From: Thorsten Kranzkowski # # drivers/input/misc/pcspkr.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1 # CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c # # drivers/input/misc/Kconfig # 2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1 # CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c # # drivers/input/misc/98spkr.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1 # CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c # # arch/x86_64/kernel/time.c # 2004/05/10 04:25:50-07:00 akpm@osdl.org +4 -3 # CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c # # ChangeSet # 2004/05/10 14:05:29-07:00 akpm@osdl.org # [PATCH] CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # From: Thorsten Kranzkowski # # The calculation of the counter values in drivers/input/misc/pcspkr.c is # incorrectly based on CLOCK_TICK_RATE. This goes unnoticed in i386 because # there the system clock is driven by the same Programmable Interval Timer chip # as the speaker. But this doesn't hold true on other archs, e.g. Alpha. # # To solve this problem I made these patches: # # 1/3: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # It seems this is not always the same value. # 2/3: use PIT_TICK_RATE in *spkr.c # 3/3: use CLOCK_TICK_RATE where 1193180 was used in general timing # calculations. (optional) # # There are still some places where the magic number is used instead of the # #define (vt_ioctl.c, gameport.c) but I left them as-is. I got some responses # from arch maintainers to specifically not touch their respective architectures # so changing these places would mean breakage for them. # # Tested on Alpha and i386, ack'ed by Ralf Baechle for MIPS. # # # This patch: # # introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-x86_64/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-mips/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-i386/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +12 -0 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-x86_64/timex.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -1 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-x86_64/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-x86_64/8253pit.h # # include/asm-mips/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-mips/8253pit.h # # include/asm-i386/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-i386/8253pit.h # # include/asm-alpha/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # arch/alpha/kernel/time.c # 2004/05/10 04:25:49-07:00 akpm@osdl.org +4 -4 # CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant. # # include/asm-alpha/8253pit.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-alpha/8253pit.h # # ChangeSet # 2004/05/10 14:05:18-07:00 akpm@osdl.org # [PATCH] readahead: keep file->f_ra sane # # When two threads are simultaneously pread()ing from the same fd (which is a # legitimate thing to do), the readahead code thinks that a huge amount of # seeking is happening and shrinks the window, damaging performance a lot. # # I don't see a sane way to avoid this within the readahead code, so take a # private copy of the readahead state and restore it prior to returning from the # read. # # mm/filemap.c # 2004/05/10 04:25:49-07:00 akpm@osdl.org +6 -3 # readahead: keep file->f_ra sane # # ChangeSet # 2004/05/10 14:05:07-07:00 akpm@osdl.org # [PATCH] jiffies-to-clockt fix # # From: john stultz # # This patch polishes up Tim Schmielau's (tim@physik3.uni-rostock.de) fix for # jiffies_to_clock_t() and jiffies_64_to_clock_t(). The issues observed was # w/ /proc output not matching up to wall time due to accumulated error # caused by HZ not being exactly 1000 on i386 systems. The solution is to # correct that error by using the more accurate TICK_NSEC in our calculation. # # Additionally, this patch corrects 3 warnings in the TCP layer uncovered by # this change. # # net/ipv6/tcp_ipv6.c # 2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -2 # jiffies-to-clockt fix # # net/ipv4/tcp_ipv4.c # 2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -2 # jiffies-to-clockt fix # # include/linux/times.h # 2004/05/10 04:25:49-07:00 akpm@osdl.org +12 -6 # jiffies-to-clockt fix # # ChangeSet # 2004/05/10 14:04:56-07:00 akpm@osdl.org # [PATCH] cyclades cleanups # # From: Marcelo Tosatti # # - cleanups for cyclades Kconfig entry (Adrian Bunk/me) # - janitors project: remove dead function (Don Koch) # # From: aris@cathedrallabs.org (Aristeu Sergio Rozanski Filho) # # Use the standard min/max macros # # drivers/char/cyclades.c # 2004/05/10 04:25:49-07:00 akpm@osdl.org +9 -23 # cyclades cleanups # # drivers/char/Kconfig # 2004/05/10 04:25:49-07:00 akpm@osdl.org +3 -5 # cyclades cleanups # # ChangeSet # 2004/05/10 14:04:46-07:00 akpm@osdl.org # [PATCH] fix ramdisk size assembler warning # # From: Jorn Engel # # AS arch/i386/boot/setup.o # /usr/src/linux-2.6.5/arch/i386/boot/setup.S: Assembler messages: # /usr/src/linux-2.6.5/arch/i386/boot/setup.S:159: Warning: value 0x37ffffff truncated to 0x37ffffff # # The warning is correct, the calculated value for ramdisk_max would be # 0xb7ffffff instead of 0x37ffffff. Truncating 0xb7ffffff to 0x37ffffff # is desired behaviour, so we should do it explicitly. # # arch/i386/boot/setup.S # 2004/05/10 04:25:48-07:00 akpm@osdl.org +2 -1 # fix ramdisk size assembler warning # # ChangeSet # 2004/05/10 14:04:36-07:00 akpm@osdl.org # [PATCH] ppc64: use generic ipc syscall translation # # From: David Gibson # # Currently ppc64 has its own code to convert 32-bit ipc() syscalls to 64-bit, # rather than using the common translation code from ipc/compat.c. This patch, # tweaked slightly from an earlier version of Anton Blanchard's fixes that, # replacing the ppc64 code with calls to the common code. # # I've run the LSB IPC tests, and as many of the LTP IPC tests as I could figure # out how to run easily, and it seems to pass them all. # # include/asm-ppc64/ppc32.h # 2004/05/10 04:25:48-07:00 akpm@osdl.org +0 -5 # ppc64: use generic ipc syscall translation # # include/asm-ppc64/compat.h # 2004/05/10 04:25:48-07:00 akpm@osdl.org +63 -0 # ppc64: use generic ipc syscall translation # # arch/ppc64/kernel/sys_ppc32.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +46 -603 # ppc64: use generic ipc syscall translation # # arch/ppc64/Kconfig # 2004/05/10 04:25:48-07:00 akpm@osdl.org +4 -0 # ppc64: use generic ipc syscall translation # # ChangeSet # 2004/05/10 14:04:25-07:00 akpm@osdl.org # [PATCH] gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # From: Mikael Pettersson # # Here are some patches to fix compilation warnings from # gcc-3.4.0 in the 2.6.6-rc3 x86_64 kernel. # # - puts() type conflict in boot/compressed/misc.c: # rename to putstr(), just like i386 did # - cast-as-lvalue in ia32_copy_siginfo_from_user(): # use temporary # - code before declaration in io_apic.c: # move decl up # - code before declaration in ioremap.c: # move existing #ifndef up # - cast-as-lvalue (tons of them) from UP version of per_cpu(): # merged asm-generic's version # # include/asm-x86_64/percpu.h # 2004/05/10 04:25:48-07:00 akpm@osdl.org +1 -1 # gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # arch/x86_64/mm/ioremap.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +2 -2 # gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # arch/x86_64/kernel/io_apic.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +3 -2 # gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # arch/x86_64/ia32/ia32_signal.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +3 -1 # gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # arch/x86_64/boot/compressed/misc.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +7 -7 # gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel # # ChangeSet # 2004/05/10 14:04:14-07:00 akpm@osdl.org # [PATCH] fixup 68360 module refcounting # # From: Christoph Hellwig # # drivers/serial/68360serial.c # 2004/05/10 04:25:48-07:00 akpm@osdl.org +1 -5 # fixup 68360 module refcounting # # ChangeSet # 2004/05/10 14:04:03-07:00 akpm@osdl.org # [PATCH] Warn when smp_call_function() is called with interrupts disabled # # From: Keith Owens # # Almost every architecture has a comment above smp_call_function() # # * You must not call this function with disabled interrupts or from a # * hardware interrupt handler or from a bottom half handler. # # I have not seen any problems with calling smp_call_function() from a bottom # half handler, but calling it with interrupts disabled can definitely # deadlock. This bug is hard to reproduce and even harder to debug. # # CPU A CPU B # Disable interrupts # smp_call_function() # Take call_lock # Send IPIs # Wait for all cpus to acknowledge IPI # CPU A has not responded, spin waiting # for cpu A to respond, holding call_lock # smp_call_function() # Spin waiting for call_lock # Deadlock Deadlock # # Change all smp_call_function() to WARN_ON(irqs_disabled()). It should be # BUG_ON() but some buggy code like SCSI sg will break with BUG_ON, so just # warn for now. Change it to BUG_ON after the buggy code has been fixed. # # arch/x86_64/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/um/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/sparc64/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/sh/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/s390/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/ppc64/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/ppc/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +2 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/parisc/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/mips/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/ia64/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/i386/mach-voyager/voyager_smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/i386/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # arch/alpha/kernel/smp.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0 # Warn when smp_call_function() is called with interrupts disabled # # ChangeSet # 2004/05/10 14:03:52-07:00 akpm@osdl.org # [PATCH] worker_thread race fix # # Fix a waitqueue-handling race in worker_thread(). # # kernel/workqueue.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +4 -3 # worker_thread race fix # # ChangeSet # 2004/05/10 14:03:41-07:00 akpm@osdl.org # [PATCH] pcmcia/i82365.c warning fix # # From: "Luiz Fernando N. Capitulino" # # drivers/pcmcia/i82365.c: At top level: # drivers/pcmcia/i82365.c:71: warning: `version' defined but not used # # drivers/pcmcia/i82365.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +1 -1 # pcmcia/i82365.c warning fix # # ChangeSet # 2004/05/10 14:03:31-07:00 akpm@osdl.org # [PATCH] throttle P4 thermal warnings # # From: Zwane Mwaikambo # # In really bad conditions this can keep printing for a while, throttle the # output somewhat. Also change the "CPU%d" formatting to better match the # other boot output. # # arch/i386/kernel/cpu/mcheck/p4.c # 2004/05/10 04:25:47-07:00 akpm@osdl.org +20 -10 # throttle P4 thermal warnings # # ChangeSet # 2004/05/10 14:03:20-07:00 akpm@osdl.org # [PATCH] fix deadlock in create_workqueue() # # Fix bug identified by Srivatsa Vaddagiri : # # There's a deadlock in __create_workqueue when CONFIG_HOTPLUG_CPU is set. This # can happen when create_workqueue_thread fails to create a worker thread. In # that case, we call destroy_workqueue with cpu hotplug lock held. # destroy_workqueue however also attempts to take the same lock. # # kernel/workqueue.c # 2004/05/10 04:25:46-07:00 akpm@osdl.org +1 -1 # fix deadlock in create_workqueue() # # ChangeSet # 2004/05/10 14:03:10-07:00 akpm@osdl.org # [PATCH] remove blk_queue_bounce() printks # # From: Matt Domsch # # Jens Axboe wrote: # It should just be deleted. As you note, it is a debug message. I # originally added it so we would have some clues as to dma capability for # bug reports. There never was any, the check can go :) # # drivers/block/ll_rw_blk.c # 2004/05/10 04:25:46-07:00 akpm@osdl.org +0 -14 # remove blk_queue_bounce() printks # # ChangeSet # 2004/05/10 14:02:59-07:00 akpm@osdl.org # [PATCH] Fix MTD suspend/resume # # From: Russell King # # This patch carries forward the following bug fix from MTD CVS, which causes a # lot of noise after a suspend/resume cycle on ARM devices. # # revision 1.127 # date: 2003/07/02 20:29:38; author: acurtis; state: Exp; lines: +2 -1 # Added FL_STATUS to the FL_READY case in put_chip(). (Eliminate noise) # # drivers/mtd/chips/cfi_cmdset_0001.c # 2004/05/10 04:25:46-07:00 akpm@osdl.org +1 -0 # Fix MTD suspend/resume # # ChangeSet # 2004/05/10 14:02:49-07:00 akpm@osdl.org # [PATCH] dentry and inode cache hash algorithm performance changes. # # From: "Jose R. Santos" # # It alleviates some issues seen with Linux when accessing millions of files on # machines with large amounts of RAM (+32GB). Both algorithms are base on some # studies that Dominique Heger was doing on hash table efficiencies in Linux. # The dentry hash table has been tested in small systems with one internal IDE # hard disk as well as in large SMP with many fiberchanel disks. Dominique # claims that in all the testing done, they did not see one case were this has # function provided worst performance and that in most test they were seeing # better performance. # # The inode hash function was done by me base on Dominique's original work and # has only been stress tested with SpecSFS. It provided a 3% improvement over # the default algorithm in the SpecSFS results and speed ups in the response # time of almost all filesystem operations the benchmark stress. With the # better distribution is as also possible to reduce the number of inode buckets # for 32 million to 16 million and still get a slightly better results. # # Anton was nice enough to provide some graphs that show the distribution # before and after the patch at http://samba.org/~anton/linux/sfs/1/ # # For the dentry hash function, some of my other coorkers had put this hash # function through various testing and have concluded that the hash function was # equal or better than the default hash function. These runs were done with a # (hopefully to be Open Source soon) benchmark called FFSB which can simulate # various io patters across many filesystems and variable file sizes. # # SpecSFS fileset is basically a lot of small file which varies depending on the # size of the run. For a not so big SMP system the number of file is in the +20 # Million files range. Of those 20 million files only 10% are access randomly # by the client. The purpose of this is that the benchmark tries to stress not # only the NFS layer but, VM and Filesystems layers as well. The filesets are # also hundreds of gigabytes in size in order to promote disk head movement by # guaranteeing cache misses in memory. SFS 27% of the workload are lookups # __d_lookup has showing high in my profiles. # # For the inode hash the problem that I see is that when running a benchmark # with this huge fileset we end up trying to free a lot of inode entries during # the run while trying to put new entries in cache. We end up calling # ifind_fast() which calls find_inodes_fast() held under inode_lock. In order # to avoid holding the inode_lock we needed to avoid having long chains in that # hash function. # # When I took a look at the original hash function, I found it to be a bit to # simple for any workload. My solution (which I took advantage of Dominique's # work) was to create a hash that function that could generate completely # different hashes depending on the hashval and the superblock in order to have # the hash scale as we added more filesystems to the machine. # # Both of these problems can be somewhat tuned out by increasing the number of # buckets of both d and i cache but it got to a point were I had 256MB of inode # and 128MB in dentry hash buckets on a not so large SMP. With the hash changes # I have been able to reduce the number of buckets to 128MB for inode cache and # to 32MB for dentry cache and still get better performance. # # If it help my case... I haven't been running this benchmark for long, so I # haven't been able to find a way to cheat. I need to come up with generic # solutions until I can find a cheat for the benchmark. :) # # # SDET results: # # Steve Pratt seem to have a SDET setup already and he did me the favor of # running SDET with a reduce dentry entry hash table size. I belive that # his table suggest that less than 3% change is acceptable variability, but # overall he got a 5% better number using the new hash algorith. # # A) x4408way1.sdet.2.6.5100000-8p.04-05-05_12.08.44 vs # B) x4408way1.sdet.2.6.5+hash-100000-8p.04-05-05_11.48.02 # # # Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) # Inode-cache hash table entries: 1048576 (order: 10, 4194304 bytes) # # Results:Throughput # # tolerance = 0.00 + 3.00% of A # A B # Threads Ops/sec Ops/sec %diff diff tolerance # ----------- ------------ ------------ -------- ------------ ------------ # 1 4341.9300 4401.9500 1.38 60.02 130.26 # 2 8242.2000 8165.1200 -0.94 -77.08 247.27 # 4 15274.4900 15257.1000 -0.11 -17.39 458.23 # 8 21326.9200 21320.7000 -0.03 -6.22 639.81 # 16 23056.2100 24282.8000 5.32 1226.59 691.69 * # 32 23397.2500 24684.6100 5.50 1287.36 701.92 * # 64 23372.7600 23632.6500 1.11 259.89 701.18 # 128 17009.3900 16651.9600 -2.10 -357.43 510.28 # ========================================================================= # # fs/inode.c # 2004/05/10 04:25:46-07:00 akpm@osdl.org +5 -4 # dentry and inode cache hash algorithm performance changes. # # fs/dcache.c # 2004/05/10 04:25:46-07:00 akpm@osdl.org +5 -3 # dentry and inode cache hash algorithm performance changes. # # ChangeSet # 2004/05/10 14:02:38-07:00 akpm@osdl.org # [PATCH] cmpci OSS driver update # # From: C.L. Tien # # Current version from cmedia. # # sound/oss/cmpci.c # 2004/05/10 04:25:45-07:00 akpm@osdl.org +1319 -1174 # cmpci OSS driver update # # sound/oss/Makefile # 2004/05/10 04:25:45-07:00 akpm@osdl.org +6 -0 # cmpci OSS driver update # # sound/oss/Kconfig # 2004/05/10 04:25:45-07:00 akpm@osdl.org +12 -83 # cmpci OSS driver update # # ChangeSet # 2004/05/10 14:02:27-07:00 akpm@osdl.org # [PATCH] EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink # # From: Matt Domsch # # Clean up the edd.c driver. # # * use kobject_set_name() instead of snprintf() per GregKH's recommendation. # * Add MODULE_VERSION() # * s/driverfs/sysfs/ in Kconfig # * Remove report URL message, as there have been too many BIOSs reported, # virtually none of which are EDD-capable. This may return if/when I # develop a better reporting method and database to capture/store the # data from users. # * Remove the unused code for creating a symlink to the scsi_device. # This never worked right, and I'm going to show the relationship from # a userspace tool which uses libsysfs instead. # # drivers/firmware/edd.c # 2004/05/10 04:25:45-07:00 akpm@osdl.org +9 -118 # EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink # # drivers/firmware/Kconfig # 2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1 # EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink # # ChangeSet # 2004/05/10 14:02:17-07:00 akpm@osdl.org # [PATCH] blk_start_queue() should use kblockd # # kblockd is the thread which runs unplug functions, not keventd. # # drivers/block/ll_rw_blk.c # 2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1 # blk_start_queue() should use kblockd # # ChangeSet # 2004/05/10 14:02:06-07:00 akpm@osdl.org # [PATCH] Only Print Taint Message Once # # From: Rusty Russell # # Only print the tainted message the first time. Its purpose is to warn # users that we can't support them, not to fill their logs. # # kernel/module.c # 2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1 # Only Print Taint Message Once # # ChangeSet # 2004/05/10 14:01:55-07:00 akpm@osdl.org # [PATCH] Un-inline spinlocks on ppc64 # # From: Paul Mackerras # # The patch below moves the ppc64 spinlocks and rwlocks out of line and into # arch/ppc64/lib/locks.c, and implements _raw_spin_lock_flags for ppc64. # # Part of the motivation for moving the spinlocks and rwlocks out of line was # that I needed to add code to the slow paths to yield the processor to the # hypervisor on systems with shared processors. On these systems, a cpu as # seen by the kernel is a virtual processor that is not necessarily running # full-time on a real physical cpu. If we are spinning on a lock which is # held by another virtual processor which is not running at the moment, we # are just wasting time. In such a situation it is better to do a hypervisor # call to ask it to give the rest of our time slice to the lock holder so # that forward progress can be made. # # The one problem with out-of-line spinlock routines is that lock contention # will show up in profiles in the spin_lock etc. routines rather than in the # callers, as it does with inline spinlocks. I have added a CONFIG_SPINLINE # config option for people that want to do profiling. In the longer term, Anton # is talking about teaching the profiling code to attribute samples in the spin # lock routines to the routine's caller. # # This patch reduces the kernel by about 80kB on my G5. With inline # spinlocks selected, the kernel gets about 4kB bigger than without the # patch, because _raw_spin_lock_flags is slightly bigger than _raw_spin_lock. # # This patch depends on the patch from Keith Owens to add # _raw_spin_lock_flags. # # include/asm-ppc64/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +98 -37 # Un-inline spinlocks on ppc64 # # include/asm-ppc64/paca.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +7 -3 # Un-inline spinlocks on ppc64 # # arch/ppc64/lib/locks.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +285 -0 # Un-inline spinlocks on ppc64 # # arch/ppc64/lib/Makefile # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1 # Un-inline spinlocks on ppc64 # # arch/ppc64/kernel/pacaData.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Un-inline spinlocks on ppc64 # # arch/ppc64/lib/locks.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/ppc64/lib/locks.c # # ChangeSet # 2004/05/10 14:01:44-07:00 akpm@osdl.org # [PATCH] Allow architectures to reenable interrupts on contended spinlocks # # From: Keith Owens # # As requested by Linus, update all architectures to add the common # infrastructure. Tested on ia64 and i386. # # Enable interrupts while waiting for a disabled spinlock, but only if # interrupts were enabled before issuing spin_lock_irqsave(). # # This patch consists of three sections :- # # * An architecture independent change to call _raw_spin_lock_flags() # instead of _raw_spin_lock() when the flags are available. # # * An ia64 specific change to implement _raw_spin_lock_flags() and to # define _raw_spin_lock(lock) as _raw_spin_lock_flags(lock, 0) for the # ASM_SUPPORTED case. # # * Patches for all other architectures and for ia64 with !ASM_SUPPORTED # to map _raw_spin_lock_flags(lock, flags) to _raw_spin_lock(lock). # Architecture maintainers can define _raw_spin_lock_flags() to do # something useful if they want to enable interrupts while waiting for # a disabled spinlock. # # include/linux/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +3 -1 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-x86_64/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-sparc64/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-sparc/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-sh/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-s390/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-ppc64/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-ppc/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-parisc/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-mips/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-ia64/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +15 -9 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-i386/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-arm/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # include/asm-alpha/spinlock.h # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0 # Allow architectures to reenable interrupts on contended spinlocks # # arch/ia64/kernel/head.S # 2004/05/10 04:25:44-07:00 akpm@osdl.org +17 -5 # Allow architectures to reenable interrupts on contended spinlocks # # ChangeSet # 2004/05/10 14:01:33-07:00 akpm@osdl.org # [PATCH] Kill some 'No description found...' warnings. (kernel-api.sgml) # # From: Alexey Dobriyan # # Fix various kernel-doc parameters. # # net/core/dev.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1 # Kill some 'No description found...' warnings. (kernel-api.sgml) # # lib/string.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -2 # Kill some 'No description found...' warnings. (kernel-api.sgml) # # drivers/block/ll_rw_blk.c # 2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1 # Kill some 'No description found...' warnings. (kernel-api.sgml) # # ChangeSet # 2004/05/10 14:01:22-07:00 akpm@osdl.org # [PATCH] Kill a warning while making pdfdocs. # # From: Alexey Dobriyan # # DOCPROC Documentation/DocBook/parportbook.sgml # Warning(drivers/parport/share.c:188): No description found for parameter 'drv' # (kernel-doc parameter name is incorrect.) # # drivers/parport/share.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1 # Kill a warning while making pdfdocs. # # ChangeSet # 2004/05/10 14:01:13-07:00 akpm@osdl.org # [PATCH] com90xx error message patch: check_region() gone # # From: Greg Aumann # # This patch updates two error messages to reflect changes in the code. # # drivers/net/arcnet/com90xx.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +2 -2 # com90xx error message patch: check_region() gone # # ChangeSet # 2004/05/10 14:01:03-07:00 akpm@osdl.org # [PATCH] Improve laptop mode's block_dump output # # From: "Theodore Ts'o" # # This patch versus improves the output produced by "echo 1 > # /proc/sys/vm/block_dump", in the following ways: # # 1) The messages are printed with KERN_DEBUG, so that even if sysklogd is # running, if configured appropriately, it will not need to write to log # files. # # 2) The inode which is dirtied by a process is now identified more # precisely by inode number and filesystem ID, and by a dcache name if # present. # # 3) In the generic filesystem sget function, the superblock id (s_id) is # filled in with the filesystem type by default. Filesystems which are # block-device based will override s_id, but this allows pseudo # filesystems such as tmpfs, procfs, etc. to be identified in (2). # # fs/super.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -0 # Improve laptop mode's block_dump output # # fs/fs-writeback.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +17 -2 # Improve laptop mode's block_dump output # # drivers/block/ll_rw_blk.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1 # Improve laptop mode's block_dump output # # ChangeSet # 2004/05/10 14:00:52-07:00 akpm@osdl.org # [PATCH] find_user locking and leak fix # # find_user() is being called from set/get_priority(), but it doesn't take the # needed lock, and those callers were forgetting to drop the refcount which # find_user() took. # # kernel/user.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +12 -1 # find_user locking and leak fix # # kernel/sys.c # 2004/05/10 04:25:43-07:00 akpm@osdl.org +4 -0 # find_user locking and leak fix # # ChangeSet # 2004/05/10 14:00:41-07:00 akpm@osdl.org # [PATCH] mptfusion depends on scsi # # From: Olaf Hering # # drivers/message/fusion/Kconfig # 2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1 # mptfusion depends on scsi # # ChangeSet # 2004/05/10 14:00:30-07:00 akpm@osdl.org # [PATCH] reiserfs: add device info to diagnostic messages # # From: Chris Mason # # From: Jeff Mahoney # # Add device info to the various reiserfs warnings and panics so you can tell # which filesystem triggers the message. Loosely based on code from Oleg # Drokin. # # include/linux/reiserfs_fs.h # 2004/05/10 04:25:42-07:00 akpm@osdl.org +8 -9 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/xattr.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +15 -15 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/tail_conversion.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/super.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +87 -87 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/stree.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +46 -43 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/procfs.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +4 -3 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/prints.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +37 -13 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/objectid.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/namei.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +18 -12 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/lbalance.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/journal.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +104 -94 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/item_ops.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +18 -19 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/inode.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +37 -28 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/fix_node.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +17 -10 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/file.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +9 -5 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/do_balan.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +13 -9 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/dir.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2 # reiserfs: add device info to diagnostic messages # # fs/reiserfs/bitmap.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +25 -24 # reiserfs: add device info to diagnostic messages # # ChangeSet # 2004/05/10 14:00:19-07:00 akpm@osdl.org # [PATCH] reiserfs: xattr permission fix # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs permission bug fix for xattrs # # fs/reiserfs/xattr.c # 2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -1 # reiserfs: xattr permission fix # # ChangeSet # 2004/05/10 14:00:09-07:00 akpm@osdl.org # [PATCH] reiserfs: quota support # # From: Chris Mason # # ReiserFS support for quotas. Originally from Jan Kara # # include/linux/reiserfs_fs.h # 2004/05/10 04:25:41-07:00 akpm@osdl.org +18 -6 # reiserfs: quota support # # fs/reiserfs/tail_conversion.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +6 -4 # reiserfs: quota support # # fs/reiserfs/super.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +7 -4 # reiserfs: quota support # # fs/reiserfs/stree.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +146 -33 # reiserfs: quota support # # fs/reiserfs/namei.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +9 -5 # reiserfs: quota support # # fs/reiserfs/inode.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +110 -42 # reiserfs: quota support # # fs/reiserfs/fix_node.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +4 -3 # reiserfs: quota support # # fs/reiserfs/file.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +6 -6 # reiserfs: quota support # # fs/reiserfs/do_balan.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -5 # reiserfs: quota support # # fs/reiserfs/bitmap.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +57 -13 # reiserfs: quota support # # ChangeSet # 2004/05/10 13:59:58-07:00 akpm@osdl.org # [PATCH] reiserfs: xattr locking fixes # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs xattr locking fixes # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:41-07:00 akpm@osdl.org +23 -0 # reiserfs: xattr locking fixes # # include/linux/reiserfs_fs_i.h # 2004/05/10 04:25:41-07:00 akpm@osdl.org +2 -0 # reiserfs: xattr locking fixes # # fs/reiserfs/xattr_acl.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +13 -2 # reiserfs: xattr locking fixes # # fs/reiserfs/xattr.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +26 -6 # reiserfs: xattr locking fixes # # fs/reiserfs/inode.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +2 -0 # reiserfs: xattr locking fixes # # ChangeSet # 2004/05/10 13:59:47-07:00 akpm@osdl.org # [PATCH] reiserfs: selinux support # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs support for selinux # # fs/reiserfs/xattr_security.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +69 -0 # reiserfs: selinux support # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:41-07:00 akpm@osdl.org +3 -0 # reiserfs: selinux support # # fs/reiserfs/xattr_security.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_security.c # # fs/reiserfs/xattr.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +3 -0 # reiserfs: selinux support # # fs/reiserfs/Makefile # 2004/05/10 04:25:41-07:00 akpm@osdl.org +4 -0 # reiserfs: selinux support # # fs/Kconfig # 2004/05/10 04:25:41-07:00 akpm@osdl.org +12 -0 # reiserfs: selinux support # # ChangeSet # 2004/05/10 13:59:36-07:00 akpm@osdl.org # [PATCH] reiserfs: support trusted xattrs # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs support for trusted xattrs # # fs/reiserfs/xattr_trusted.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +81 -0 # reiserfs: support trusted xattrs # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -0 # reiserfs: support trusted xattrs # # fs/reiserfs/xattr_trusted.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_trusted.c # # fs/reiserfs/xattr.c # 2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -0 # reiserfs: support trusted xattrs # # fs/reiserfs/Makefile # 2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -1 # reiserfs: support trusted xattrs # # ChangeSet # 2004/05/10 13:59:25-07:00 akpm@osdl.org # [PATCH] reiserfs: ACL support # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs acl support # # include/linux/reiserfs_acl.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +91 -0 # reiserfs: ACL support # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +6 -1 # reiserfs: ACL support # # include/linux/reiserfs_fs_sb.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +3 -1 # reiserfs: ACL support # # include/linux/reiserfs_fs_i.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +3 -0 # reiserfs: ACL support # # include/linux/reiserfs_acl.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/linux/reiserfs_acl.h # # fs/reiserfs/xattr_user.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +7 -3 # reiserfs: ACL support # # fs/reiserfs/xattr_acl.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +552 -0 # reiserfs: ACL support # # fs/reiserfs/xattr.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +74 -8 # reiserfs: ACL support # # fs/reiserfs/super.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +25 -0 # reiserfs: ACL support # # fs/reiserfs/namei.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +33 -0 # reiserfs: ACL support # # fs/reiserfs/inode.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +23 -0 # reiserfs: ACL support # # fs/reiserfs/file.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +1 -0 # reiserfs: ACL support # # fs/reiserfs/Makefile # 2004/05/10 04:25:40-07:00 akpm@osdl.org +4 -0 # reiserfs: ACL support # # fs/Kconfig # 2004/05/10 04:25:40-07:00 akpm@osdl.org +14 -2 # reiserfs: ACL support # # fs/reiserfs/xattr_acl.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_acl.c # # ChangeSet # 2004/05/10 13:59:13-07:00 akpm@osdl.org # [PATCH] reiserfs: xattr support # # From: Chris Mason # # From: jeffm@suse.com # # reiserfs support for xattrs # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +100 -0 # reiserfs: xattr support # # fs/reiserfs/xattr_user.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +95 -0 # reiserfs: xattr support # # fs/reiserfs/xattr.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +1348 -0 # reiserfs: xattr support # # include/linux/reiserfs_xattr.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/linux/reiserfs_xattr.h # # include/linux/reiserfs_fs_sb.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +10 -1 # reiserfs: xattr support # # include/linux/reiserfs_fs_i.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +2 -1 # reiserfs: xattr support # # include/linux/reiserfs_fs.h # 2004/05/10 04:25:40-07:00 akpm@osdl.org +7 -1 # reiserfs: xattr support # # fs/reiserfs/xattr_user.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_user.c # # fs/reiserfs/xattr.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr.c # # fs/reiserfs/super.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +43 -3 # reiserfs: xattr support # # fs/reiserfs/namei.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +53 -1 # reiserfs: xattr support # # fs/reiserfs/inode.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +64 -1 # reiserfs: xattr support # # fs/reiserfs/file.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +6 -45 # reiserfs: xattr support # # fs/reiserfs/dir.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +11 -0 # reiserfs: xattr support # # fs/reiserfs/Makefile # 2004/05/10 04:25:40-07:00 akpm@osdl.org +4 -0 # reiserfs: xattr support # # fs/Kconfig # 2004/05/10 04:25:40-07:00 akpm@osdl.org +10 -0 # reiserfs: xattr support # # ChangeSet # 2004/05/10 13:59:01-07:00 akpm@osdl.org # [PATCH] reiserfs: acl device node initialization # # From: Chris Mason # # From: jeffm@suse.com # # properly init device inodes in the acl code # # fs/reiserfs/namei.c # 2004/05/10 04:25:40-07:00 akpm@osdl.org +1 -1 # reiserfs: acl device node initialization # # ChangeSet # 2004/05/10 13:58:51-07:00 akpm@osdl.org # [PATCH] Reiserfs commit default fix # # From: Bart Samwel # # This patch from Micha Feigin fixes some bugs in the earlier reiserfs # commit default patch. The changelog: # # * If you remounted without any commit=NNN option, it would assume commit=0 # and restore the defaults. This patch makes it leave the current state alone # if you don't pass commit=NNN. # # * Added range check for cast from unsigned long to unsigned int. # # fs/reiserfs/super.c # 2004/05/10 04:25:39-07:00 akpm@osdl.org +7 -7 # Reiserfs commit default fix # # ChangeSet # 2004/05/10 13:58:41-07:00 akpm@osdl.org # [PATCH] partitioning cleanup: use DOS_EXTENDED_PARTITION # # From: FabF # # Use the pre-existing enum rather than magic numbers. # # fs/partitions/msdos.c # 2004/05/10 04:25:39-07:00 akpm@osdl.org +3 -3 # partitioning cleanup: use DOS_EXTENDED_PARTITION # # ChangeSet # 2004/05/10 13:58:30-07:00 akpm@osdl.org # [PATCH] fix 3c59x.c to allow 3c905c 100bT-FD # # From: Burton Windle # # Fix the 3c905C 10/100 transceiver initialisation woes. # # drivers/net/3c59x.c # 2004/05/10 04:25:39-07:00 akpm@osdl.org +1 -1 # fix 3c59x.c to allow 3c905c 100bT-FD # # ChangeSet # 2004/05/10 13:58:20-07:00 akpm@osdl.org # [PATCH] shrink_slab: improved handling of GFP_NOFS allocations # # Currently, shrink_slab() will decide that it needs to scan a certain number of # dentries, will call shrink_dcache_memory() requesting that this be done, and # shrink_dcache_memory() will simply bale out without doing anything because the # caller did not have __GFP_FS. # # This has the potential to disrupt our lovely pagecache-vs-slab balancing act. # So change things so that shrinker callouts can return -1, indicating that they # baled out. This way, shrink_slab can remember that this slab was owed a # certain number of scannings and these will be correctly performed next time a # __GFP_FS caller comes by. # # mm/vmscan.c # 2004/05/10 04:25:38-07:00 akpm@osdl.org +15 -12 # shrink_slab: improved handling of GFP_NOFS allocations # # fs/dcache.c # 2004/05/10 04:25:38-07:00 akpm@osdl.org +13 -14 # shrink_slab: improved handling of GFP_NOFS allocations # # ChangeSet # 2004/05/10 13:58:09-07:00 akpm@osdl.org # [PATCH] New version of early CPU detect # # From: Andi Kleen # # We still need some kind of early CPU detection, e.g. for the AMD768 # workaround and for the slab allocator to size its slabs correctly for the # cache line. Also some other code already had private early CPU routines. # # This patch takes a new approach compared to the previous patch which caused # Andrew so much grief. It only fills in a few selected fields in # boot_cpu_data (only the data needed to identify the CPU type and the cache # alignment). In particular the feature masks are not filled in, and the # other fields are also not touched to prevent unwanted side effects. # # Also convert the ppro workaround to use standard cpu data now. # # I'm not sure if slab still has the necessary support to use the cache line # size early; previously Manfred showed some serious memory saving with this # for kernels that are compiled for a bigger cache line size than the CPU (is # often the case on distribution kernels). This code could be reenable now # with this patch. # # include/asm-i386/processor.h # 2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -0 # New version of early CPU detect # # arch/i386/kernel/cpu/intel.c # 2004/05/10 04:25:38-07:00 akpm@osdl.org +14 -33 # New version of early CPU detect # # arch/i386/kernel/cpu/cpu.h # 2004/05/10 04:25:38-07:00 akpm@osdl.org +3 -0 # New version of early CPU detect # # arch/i386/kernel/cpu/common.c # 2004/05/10 04:25:38-07:00 akpm@osdl.org +44 -5 # New version of early CPU detect # # ChangeSet # 2004/05/10 13:57:58-07:00 akpm@osdl.org # [PATCH] remove some unused variables in s2io # # From: Anton Blanchard # # Found a few warnings when compiling with NAPI off. # # drivers/net/s2io.c # 2004/05/10 04:25:38-07:00 akpm@osdl.org +0 -3 # remove some unused variables in s2io # # ChangeSet # 2004/05/10 13:57:48-07:00 akpm@osdl.org # [PATCH] Remove bootsect_helper on x86_64 and pc98 # # From: Coywolf Qi Hunt # # Since "Direct booting from floppy is no longer supported", this patch is # remove the bootsect_helper code from x86_64 and PC-9800. # # arch/x86_64/boot/setup.S # 2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -82 # Remove bootsect_helper on x86_64 and pc98 # # arch/i386/boot98/setup.S # 2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -86 # Remove bootsect_helper on x86_64 and pc98 # # ChangeSet # 2004/05/10 13:57:37-07:00 akpm@osdl.org # [PATCH] Remove bootsect_helper and a comment fix # # From: Coywolf Qi Hunt # # Since "Direct booting from floppy is no longer supported", this patch is to # remove the bootsect_helper code. And also a comment fix. # # The other two platforms x86_64 and PC-9800 should also be cleaned up too. # # arch/i386/boot/setup.S # 2004/05/10 04:25:38-07:00 akpm@osdl.org +2 -84 # Remove bootsect_helper and a comment fix # # ChangeSet # 2004/05/10 13:57:26-07:00 akpm@osdl.org # [PATCH] ppc32: ppc8xx build fixes # # From: "Prof. BJ" # # - m8xx_setup warning and mfmsr error fix # - ppc8xx_pic include error fix # - tqm8xxl.c typeing (syntax) error fix # - commproc.c include error and prototype warning fix # # (acked by Matt Porter) # # drivers/mtd/maps/tqm8xxl.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # ppc32: ppc8xx build fixes # # arch/ppc/syslib/ppc8xx_pic.h # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0 # ppc32: ppc8xx build fixes # # arch/ppc/syslib/m8xx_setup.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +3 -4 # ppc32: ppc8xx build fixes # # arch/ppc/8xx_io/commproc.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +2 -2 # ppc32: ppc8xx build fixes # # ChangeSet # 2004/05/10 13:57:16-07:00 akpm@osdl.org # [PATCH] es7000 subarch update # # From: "Protasevich, Natalie" # # The patch fixes a problem with ES7000 Server Management mechanism that uses # platform register mip_port. It was not initialized, so the mechanism was not # functional. # # The patch also fixes the APIC destination for hierarchical and flat cluster # models used in ES7000. The destination ID's reflect policies for Cascade # based systems which use logical delivery and lowest priority mechanism, and # for xAPIC based models that use physical delivery and fixed APIC destinations. # # The patch also turns on NO_IOAPIC_CHECK (1) to avoid error messages and # attempts to re-write the ID, because on ES7000 all ID's are hard coded in the # BIOS and cannot be altered. # # include/asm-i386/mach-es7000/mach_apic.h # 2004/05/10 04:25:37-07:00 akpm@osdl.org +9 -1 # es7000 subarch update # # arch/i386/mach-es7000/es7000.h # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0 # es7000 subarch update # # arch/i386/mach-es7000/es7000.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0 # es7000 subarch update # # ChangeSet # 2004/05/10 13:57:05-07:00 akpm@osdl.org # [PATCH] Consolidate sys32_nfsservctl # # From: Arnd Bergmann # # sys32_nfsservctl is the largest remaining syscall emulation handler that can # be consolidated. mips and ia64 currently don't use this at all, parisc has a # simpler implementation than the one used by s390, sparc ppc and that the new # compat_sys_nfsservctl is based on. # # The user access checks in the code are inconsistant at least, which should be # fixed here. # # Compile tested only due to lack of proper test setup. # # fs/compat.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +239 -0 # Consolidate sys32_nfsservctl # # arch/x86_64/ia32/sys_ia32.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -227 # Consolidate sys32_nfsservctl # # arch/x86_64/ia32/ia32entry.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_nfsservctl # # arch/sparc64/kernel/systbls.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_nfsservctl # # arch/sparc64/kernel/sys_sparc32.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -226 # Consolidate sys32_nfsservctl # # arch/s390/kernel/syscalls.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_nfsservctl # # arch/s390/kernel/compat_wrapper.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +5 -5 # Consolidate sys32_nfsservctl # # arch/s390/kernel/compat_linux.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -220 # Consolidate sys32_nfsservctl # # arch/ppc64/kernel/sys_ppc32.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -239 # Consolidate sys32_nfsservctl # # arch/ppc64/kernel/misc.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_nfsservctl # # arch/parisc/kernel/syscall_table.S # 2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_nfsservctl # # arch/parisc/kernel/sys_parisc32.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -88 # Consolidate sys32_nfsservctl # # arch/ia64/ia32/sys_ia32.c # 2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -170 # Consolidate sys32_nfsservctl # # ChangeSet # 2004/05/10 13:56:53-07:00 akpm@osdl.org # [PATCH] Consolidate sys32_select # # From: Arnd Bergmann # # sys32_select has seven mostly but not exactly identical versions, so # consolidate them as compat_sys_select. Based on the ppc64 implementation, # which most closely resembles sys_select. One bug that was not caught by LTP # has been fixed since the first version of this patch. # # tested x86_64, ia64 and s390. # # include/linux/compat.h # 2004/05/10 04:25:36-07:00 akpm@osdl.org +4 -0 # Consolidate sys32_select # # fs/compat.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +188 -0 # Consolidate sys32_select # # arch/x86_64/ia32/sys_ia32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -103 # Consolidate sys32_select # # arch/x86_64/ia32/ia32entry.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # arch/sparc64/kernel/systbls.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_select # # arch/sparc64/kernel/sys_sunos32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -6 # Consolidate sys32_select # # arch/sparc64/kernel/sys_sparc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -152 # Consolidate sys32_select # # arch/s390/kernel/syscalls.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # arch/s390/kernel/compat_wrapper.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +7 -7 # Consolidate sys32_select # # arch/s390/kernel/compat_linux.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -154 # Consolidate sys32_select # # arch/ppc64/kernel/sys_ppc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +4 -159 # Consolidate sys32_select # # arch/parisc/kernel/syscall_table.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # arch/parisc/kernel/sys_parisc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -121 # Consolidate sys32_select # # arch/mips/kernel/scall64-o32.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # arch/mips/kernel/scall64-n32.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # arch/mips/kernel/linux32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -161 # Consolidate sys32_select # # arch/ia64/ia32/sys_ia32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -106 # Consolidate sys32_select # # arch/ia64/ia32/ia32_entry.S # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_select # # ChangeSet # 2004/05/10 13:56:42-07:00 akpm@osdl.org # [PATCH] Consolidate do_execve32 # # From: Arnd Bergmann # # The code for sys32_execve/do_execve32 in most of the seven versions was copied # from fs/exec.c but not kept up-to-date. The new compat_do_execve() function # is based on the mips code and has been resync'ed with do_execve(). IA64 # changes are from Arun Sharma. # # Tested on x86_64, ia64 and s390 # # include/linux/compat.h # 2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -0 # Consolidate do_execve32 # # fs/compat.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +231 -0 # Consolidate do_execve32 # # arch/x86_64/ia32/sys_ia32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +15 -86 # Consolidate do_execve32 # # arch/sparc64/kernel/sys_sparc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -192 # Consolidate do_execve32 # # arch/s390/kernel/compat_linux.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -184 # Consolidate do_execve32 # # arch/ppc64/kernel/sys_ppc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -186 # Consolidate do_execve32 # # arch/parisc/kernel/sys_parisc32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -185 # Consolidate do_execve32 # # arch/mips/kernel/linux32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -225 # Consolidate do_execve32 # # arch/ia64/ia32/sys_ia32.c # 2004/05/10 04:25:36-07:00 akpm@osdl.org +14 -56 # Consolidate do_execve32 # # ChangeSet # 2004/05/10 13:56:32-07:00 akpm@osdl.org # [PATCH] Consolidate sys32_readv and sys32_writev # # From: Arnd Bergmann # # The seven implementations of this have gone out of sync and are mostly buggy. # The new compat_sys_* version is based on the ppc64 implementation, which most # closely resembles the code in sys_readv/sys_writev. # # Tested on x86_64, ia64 and s390. # # include/linux/compat.h # 2004/05/10 04:25:35-07:00 akpm@osdl.org +6 -0 # Consolidate sys32_readv and sys32_writev # # fs/compat.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +186 -0 # Consolidate sys32_readv and sys32_writev # # arch/x86_64/ia32/sys_ia32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -98 # Consolidate sys32_readv and sys32_writev # # arch/x86_64/ia32/ia32entry.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/sparc64/kernel/systbls.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +1 -1 # Consolidate sys32_readv and sys32_writev # # arch/sparc64/kernel/sys_sunos32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -5 # Consolidate sys32_readv and sys32_writev # # arch/sparc64/kernel/sys_sparc32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -176 # Consolidate sys32_readv and sys32_writev # # arch/s390/kernel/syscalls.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/s390/kernel/compat_wrapper.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +8 -8 # Consolidate sys32_readv and sys32_writev # # arch/s390/kernel/compat_linux.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -138 # Consolidate sys32_readv and sys32_writev # # arch/ppc64/kernel/sys_ppc32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -172 # Consolidate sys32_readv and sys32_writev # # arch/ppc64/kernel/misc.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/parisc/kernel/syscall_table.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/parisc/kernel/sys_parisc32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -143 # Consolidate sys32_readv and sys32_writev # # arch/mips/kernel/scall64-o32.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/mips/kernel/scall64-n32.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # arch/mips/kernel/linux32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -144 # Consolidate sys32_readv and sys32_writev # # arch/ia64/ia32/sys_ia32.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -79 # Consolidate sys32_readv and sys32_writev # # arch/ia64/ia32/ia32_entry.S # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # Consolidate sys32_readv and sys32_writev # # ChangeSet # 2004/05/10 13:56:20-07:00 akpm@osdl.org # [PATCH] AS: increase batch expiry intervals # # From: Nick Piggin # # Without disturbing the read/write ratio, increase the bathc expiry # intervals. This wil have the effect of increasing latency a little, but # with improved throughput. # # drivers/block/as-iosched.c # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2 # AS: increase batch expiry intervals # # ChangeSet # 2004/05/10 13:56:10-07:00 akpm@osdl.org # [PATCH] Laptop Mode doc update # # From: # # Richard Atterer reported that mutt does not play well with noatime (it uses # access times to check whether new mail has arrived in a folder). This patch # warns about this in the doc, and adds a setting to the control script to # disable the noatime remount. # # Documentation/laptop-mode.txt # 2004/05/10 04:25:35-07:00 akpm@osdl.org +14 -2 # Laptop Mode doc update # # ChangeSet # 2004/05/10 13:55:59-07:00 akpm@osdl.org # [PATCH] cyclades MAINTAINERS update # # From: Marcelo Tosatti # # MAINTAINERS # 2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -4 # cyclades MAINTAINERS update # # ChangeSet # 2004/05/10 13:55:49-07:00 akpm@osdl.org # [PATCH] selinux: reopen descriptors closed on exec to /dev/null # # From: Stephen Smalley # # This patch changes the SELinux module to try to reset any descriptors it # closes on exec (due to a lack of permission by the new domain to the inherited # open file) to refer to the null device. This counters the problem of SELinux # inducing program misbehavior, particularly due to having descriptors 0-2 # closed when the new domain is not allowed access to the caller's tty. This is # primarily to address the case where the caller is trusted with respect to the # new domain, as the untrusted caller case is already handled via AT_SECURE and # glibc secure mode. The code is partly based on the OpenWall LSM, which in # turn drew from the OpenWall kernel patch. Note that the code does not # guarantee that the descriptor is always re-opened to /dev/null; it merely # makes a reasonable effort to do so, but can fail under various conditions. # # security/selinux/include/initial_sid_to_string.h # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -0 # selinux: reopen descriptors closed on exec to /dev/null # # security/selinux/include/flask.h # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -1 # selinux: reopen descriptors closed on exec to /dev/null # # security/selinux/hooks.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +82 -3 # selinux: reopen descriptors closed on exec to /dev/null # # ChangeSet # 2004/05/10 13:55:38-07:00 akpm@osdl.org # [PATCH] ext3 error handling fixes # # From: Andreas Dilger # # a) we don't call ext3_error() for an IO error in ext3_find_entry(), so we # won't do the normal ext3 error handling (mark SB in error, remount-ro # or panic if desired); # b) in empty_dir() we don't continue checking for non-empty blocks after a # content error (ext3_check_dir_entry() calls ext3_error() already); # c) we had decided not to mark the SB in error for holes in directories to # allow leway in the indexed-directory implementation, but this change # incorrectly also disabled marking the SB in error for real IO errors. # # fs/ext3/namei.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +22 -13 # ext3 error handling fixes # # ChangeSet # 2004/05/10 13:55:27-07:00 akpm@osdl.org # [PATCH] sched: in_sched_functions() cleanup # # From: Rusty Russell # # 1) Create an in_sched_functions() function in sched.c and make the # archs use it. (Two archs have wchan #if 0'd out: left them alone). # # 2) Move __sched from linux/init.h to linux/sched.h and add comment. # # 3) Rename __scheduling_functions_start_here/end_here to __sched_text_start/end. # # Thanks to wli and Sam Ravnborg for clue donation. # # kernel/sched.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +8 -7 # sched: in_sched_functions() cleanup # # include/linux/sched.h # 2004/05/10 04:25:34-07:00 akpm@osdl.org +4 -2 # sched: in_sched_functions() cleanup # # include/linux/init.h # 2004/05/10 04:25:34-07:00 akpm@osdl.org +0 -2 # sched: in_sched_functions() cleanup # # include/asm-generic/vmlinux.lds.h # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2 # sched: in_sched_functions() cleanup # # arch/x86_64/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -9 # sched: in_sched_functions() cleanup # # arch/v850/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2 # sched: in_sched_functions() cleanup # # arch/sparc64/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -2 # sched: in_sched_functions() cleanup # # arch/sparc/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -2 # sched: in_sched_functions() cleanup # # arch/sh/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/s390/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -9 # sched: in_sched_functions() cleanup # # arch/ppc64/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/ppc/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/mips/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -8 # sched: in_sched_functions() cleanup # # arch/m68knommu/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -9 # sched: in_sched_functions() cleanup # # arch/m68k/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -9 # sched: in_sched_functions() cleanup # # arch/ia64/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -8 # sched: in_sched_functions() cleanup # # arch/i386/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -8 # sched: in_sched_functions() cleanup # # arch/h8300/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/cris/arch-v10/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2 # sched: in_sched_functions() cleanup # # arch/arm26/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/arm/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # arch/alpha/kernel/process.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7 # sched: in_sched_functions() cleanup # # ChangeSet # 2004/05/10 13:55:16-07:00 akpm@osdl.org # [PATCH] Fix ext3 bogus ENOSPC # # With strange workloads which do a lot of quick truncation on small filesystems # it is possible to get into a situation where there are free blocks on the # disk, but they are not allocatable at this time due to their having been freed # up in the current JBD transaction. Applications get unexpected ENOSPC errors. # # We can fix that with this patch, originally by Andreas Dilger which forces a # single commit+retry when an ENOSPC is encountered. # # fs/ext3/inode.c # 2004/05/10 04:25:34-07:00 akpm@osdl.org +15 -2 # Fix ext3 bogus ENOSPC # # ChangeSet # 2004/05/10 13:55:06-07:00 akpm@osdl.org # [PATCH] reduce NMI watchdog call frequency with local APIC. # # From: Mikael Pettersson # # The real problem is that SMP with nmi_watchdog=2 initialises the lapic NMI # watchdog but doesn't check it and therefore doesn't reduce nmi_hz. This is # an SMP bug. # # The patch changes smpboot.c to do a check_nmi_watchdog() at the appropriate # place, which fixes the high NMI frequency problem w/o changing anything # else. I've verified that it solves the problem on my MP-capable UP box. # # arch/i386/kernel/smpboot.c # 2004/05/10 04:25:33-07:00 akpm@osdl.org +3 -0 # reduce NMI watchdog call frequency with local APIC. # # ChangeSet # 2004/05/10 13:54:55-07:00 akpm@osdl.org # [PATCH] Fix nmi_watchdog=2 and P4 HT # # From: Philippe Elie # # With nmi_watchdog=2 and a P4 ht box the nmi is occurring only on logical # processor 0, it's better to get it on both. # # With this patch, on x86 SMP and nmi_watchdog=2, nmi interupts occur at 1000 # hz (if the cpu is loaded) not at the intended 1 hz rate but that's a distinct # problem. # # arch/i386/kernel/nmi.c # 2004/05/10 04:25:33-07:00 akpm@osdl.org +12 -5 # Fix nmi_watchdog=2 and P4 HT # # ChangeSet # 2004/05/10 13:54:45-07:00 akpm@osdl.org # [PATCH] Fixes in 32 bit ioctl emulation code # # From: Raghavan , # me # # I am submitting a patch that fixes 2 race conditions in the 32 bit ioctl # emulation code.(fs/compat.c) Since the search is not locked; when a # ioctl_trans structure is deleted, corruption can occur. # # The following scenarios discuss the race conditions: # # 1) When the search is hapenning, if any ioctl_trans structure gets # deleted; then rather than searching the hash table, the code will start # searching the free list. # # while (t && t->cmd != cmd) # - # # fs/compat.c # 2004/05/10 04:25:33-07:00 akpm@osdl.org +69 -75 # Fixes in 32 bit ioctl emulation code # # ChangeSet # 2004/05/10 13:54:34-07:00 akpm@osdl.org # [PATCH] mips: sgiwd93 2.6 fixes and crapectomy # # From: Ralf Baechle # # Get to work under 2.6 sorting out the giant mess this has been. Further # cleanups would require a full crapectomy of wd33c93.c itself ... # # drivers/scsi/sgiwd93.h # 2004/05/10 04:25:33-07:00 akpm@osdl.org +1 -1 # mips: sgiwd93 2.6 fixes and crapectomy # # drivers/scsi/sgiwd93.c # 2004/05/10 04:25:33-07:00 akpm@osdl.org +214 -181 # mips: sgiwd93 2.6 fixes and crapectomy # # ChangeSet # 2004/05/10 13:54:24-07:00 akpm@osdl.org # [PATCH] mips: remove dz driver # # From: Ralf Baechle # # This driver has been obsoleted by drivers/serial/dz.c. # # drivers/char/Makefile # 2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -1 # mips: remove dz driver # # BitKeeper/deleted/.del-dz.h~25236ecd58449050 # 2004/05/10 13:54:18-07:00 akpm@osdl.org +0 -0 # Delete: drivers/char/dz.h # # BitKeeper/deleted/.del-dz.c~828b4cc0c8f0a111 # 2004/05/10 13:54:18-07:00 akpm@osdl.org +0 -0 # Delete: drivers/char/dz.c # # ChangeSet # 2004/05/10 13:54:13-07:00 akpm@osdl.org # [PATCH] mips: 64-bit MIPS needs compat stuff # # From: Ralf Baechle # # sound/core/Kconfig # 2004/05/10 04:25:32-07:00 akpm@osdl.org +1 -1 # mips: 64-bit MIPS needs compat stuff # # ChangeSet # 2004/05/10 13:54:02-07:00 akpm@osdl.org # [PATCH] mips: add missing IP22 Zilog bit # # From: Ralf Baechle # # Add missing definition PORT_IP22ZILOG which is need by ip22zilog driver. # # include/linux/serial_core.h # 2004/05/10 04:25:32-07:00 akpm@osdl.org +3 -0 # mips: add missing IP22 Zilog bit # # ChangeSet # 2004/05/10 13:53:51-07:00 akpm@osdl.org # [PATCH] mips: GBE Video Driver # # From: Ralf Baechle # # This patch adds the GBE video driver for the video system in SGI IP32 # aka O2 and it's i386-based equivalent the Visual Workstation. # # This driver obsoletes sgivwfb.c; but I'd prefer to play safe and remove # it after some additional time, just in case. # # include/video/gbe.h # 2004/05/10 04:25:32-07:00 akpm@osdl.org +317 -0 # mips: GBE Video Driver # # drivers/video/gbefb.c # 2004/05/10 04:25:32-07:00 akpm@osdl.org +1200 -0 # mips: GBE Video Driver # # include/video/gbe.h # 2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/video/gbe.h # # drivers/video/gbefb.c # 2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/drivers/video/gbefb.c # # drivers/video/fbmem.c # 2004/05/10 04:25:32-07:00 akpm@osdl.org +5 -0 # mips: GBE Video Driver # # drivers/video/Makefile # 2004/05/10 04:25:32-07:00 akpm@osdl.org +1 -0 # mips: GBE Video Driver # # drivers/video/Kconfig # 2004/05/10 04:25:32-07:00 akpm@osdl.org +15 -0 # mips: GBE Video Driver # # ChangeSet # 2004/05/10 13:53:41-07:00 akpm@osdl.org # [PATCH] mips: remove VIDEO_TYPE_SNI_RM # # From: Ralf Baechle # # The RM200's onboard video really is a plain old boring Cyrix PCI card. # # include/linux/tty.h # 2004/05/10 04:25:31-07:00 akpm@osdl.org +0 -1 # mips: remove VIDEO_TYPE_SNI_RM # # ChangeSet # 2004/05/10 13:53:30-07:00 akpm@osdl.org # [PATCH] mips: newport driver fixes # # From: Ralf Baechle # # Make the driver for Newport aka XL work in 2.6. # # drivers/video/console/newport_con.c # 2004/05/10 04:25:31-07:00 akpm@osdl.org +54 -69 # mips: newport driver fixes # # drivers/video/console/Makefile # 2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -1 # mips: newport driver fixes # # ChangeSet # 2004/05/10 13:53:19-07:00 akpm@osdl.org # [PATCH] mips: Simplify expression # # From: Ralf Baechle # # CONFIG_MIPS is always defined, for 32-bit and 64-bit. # # drivers/video/logo/logo.c # 2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -1 # mips: Simplify expression # # ChangeSet # 2004/05/10 13:53:07-07:00 akpm@osdl.org # [PATCH] mips: fix 2.6 fb setup # # From: Ralf Baechle # # drivers/video/fbmem.c # 2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -2 # mips: fix 2.6 fb setup # # ChangeSet # 2004/05/10 13:52:56-07:00 akpm@osdl.org # [PATCH] MIPS update # # From: Ralf Baechle # # - Kconfig cleanups: # - enable DMA_NONCOHERENT, DMA_COHERENT or DMA_IP27 via reverse dependencies # - untangle VRC4171 / VRC4173 selection # - R10000 support enables PREFETCH # - SEAD needs IRQ_CPU # - Update defconfig against latest Kconfig files. # - Fix computation of return address if syscall number was out of range # - Add power managment hooks in signal code. # - Don't try to handle signals when previous context was not in user mode. # - Fix serial interface setup for VR41xx systems. # - Build fixes after CLEAR_BITMAP changed name. # - Removes bogus comment from # - is dead. # - Start collecting common definitions for PMON firmware in # - Define ARCH_MIN_TASKALIGN to 8; we have 64-bit members even on 32-bit # kernels if we're running on MIPS II or better. # # include/asm-mips/vr41xx/vr41xx.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +13 -7 # MIPS update # # include/asm-mips/unistd.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -6 # MIPS update # # include/asm-mips/thread_info.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -2 # MIPS update # # include/asm-mips/ptrace.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -0 # MIPS update # # include/asm-mips/processor.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -0 # MIPS update # # include/asm-mips/pmon.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -0 # MIPS update # # include/asm-mips/mach-db1x00/db1x00.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -9 # MIPS update # # include/asm-mips/mach-au1x00/au1000.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +17 -2 # MIPS update # # include/asm-mips/hdreg.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1 # MIPS update # # include/asm-mips/checksum.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -4 # MIPS update # # arch/mips/vr41xx/zao-capcella/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1 # MIPS update # # arch/mips/vr41xx/victor-mpc30x/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1 # MIPS update # # arch/mips/vr41xx/tanbac-tb0229/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -1 # MIPS update # # arch/mips/vr41xx/tanbac-tb0226/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -1 # MIPS update # # arch/mips/vr41xx/nec-eagle/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1 # MIPS update # # arch/mips/vr41xx/ibm-workpad/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1 # MIPS update # # arch/mips/vr41xx/common/serial.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +46 -39 # MIPS update # # arch/mips/vr41xx/common/icu.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -29 # MIPS update # # arch/mips/vr41xx/casio-e55/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1 # MIPS update # # arch/mips/sgi-ip27/ip27-hubio.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -3 # MIPS update # # arch/mips/pci/ops-au1000.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +132 -51 # MIPS update # # arch/mips/pci/fixup-au1000.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +58 -8 # MIPS update # # arch/mips/momentum/ocelot_g/prom.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11 # MIPS update # # arch/mips/momentum/ocelot_c/prom.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11 # MIPS update # # arch/mips/momentum/jaguar_atx/prom.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11 # MIPS update # # arch/mips/kernel/signal_n32.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -0 # MIPS update # # arch/mips/kernel/signal32.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +17 -3 # MIPS update # # arch/mips/kernel/signal.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3 # MIPS update # # arch/mips/kernel/scall64-o32.S # 2004/05/10 04:25:30-07:00 akpm@osdl.org +15 -3 # MIPS update # # arch/mips/kernel/scall64-n32.S # 2004/05/10 04:25:30-07:00 akpm@osdl.org +19 -3 # MIPS update # # arch/mips/kernel/scall64-64.S # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -3 # MIPS update # # arch/mips/kernel/scall32-o32.S # 2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3 # MIPS update # # arch/mips/kernel/ptrace.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +10 -1 # MIPS update # # arch/mips/kernel/mips_ksyms.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -0 # MIPS update # # arch/mips/kernel/irixsig.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3 # MIPS update # # arch/mips/kernel/irixelf.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1 # MIPS update # # arch/mips/kernel/entry.S # 2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -1 # MIPS update # # arch/mips/gt64120/momenco_ocelot/prom.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11 # MIPS update # # arch/mips/defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +21 -26 # MIPS update # # arch/mips/configs/yosemite_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +19 -26 # MIPS update # # arch/mips/configs/xxs1500_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/workpad_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -33 # MIPS update # # arch/mips/configs/tb0229_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -40 # MIPS update # # arch/mips/configs/tb0226_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -33 # MIPS update # # arch/mips/configs/sead_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -5 # MIPS update # # arch/mips/configs/sb1250-swarm_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -36 # MIPS update # # arch/mips/configs/rm200_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +62 -63 # MIPS update # # arch/mips/configs/pb1550_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +35 -43 # MIPS update # # arch/mips/configs/pb1500_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +35 -43 # MIPS update # # arch/mips/configs/pb1100_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/pb1000_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/osprey_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/configs/ocelot_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/configs/ocelot_c_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/configs/mtx1_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/mpc30x_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +61 -28 # MIPS update # # arch/mips/configs/mirage_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/malta_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/lasat200_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +27 -35 # MIPS update # # arch/mips/configs/jmr3927_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/jaguar-atx_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -30 # MIPS update # # arch/mips/configs/ivr_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/it8172_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/configs/ip32_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/ip27_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +64 -71 # MIPS update # # arch/mips/configs/ip22_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +21 -26 # MIPS update # # arch/mips/configs/ev96100_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/au1000/common/cputable.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +56 -0 # MIPS update # # arch/mips/Kconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +63 -17 # MIPS update # # include/asm-mips/pmon.h # 2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/include/asm-mips/pmon.h # # arch/mips/configs/ev64120_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +32 -40 # MIPS update # # arch/mips/configs/eagle_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -37 # MIPS update # # arch/mips/configs/e55_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -32 # MIPS update # # arch/mips/configs/decstation_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26 # MIPS update # # arch/mips/configs/ddb5477_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/ddb5476_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/db1500_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/db1100_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/db1000_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/cobalt_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/configs/capcella_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -36 # MIPS update # # arch/mips/configs/bosporus_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34 # MIPS update # # arch/mips/configs/atlas_defconfig # 2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36 # MIPS update # # arch/mips/au1000/common/setup.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +13 -24 # MIPS update # # arch/mips/au1000/common/power.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1 # MIPS update # # arch/mips/au1000/common/cputable.c # 2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/arch/mips/au1000/common/cputable.c # # arch/mips/au1000/common/Makefile # 2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1 # MIPS update # # ChangeSet # 2004/05/10 13:52:43-07:00 akpm@osdl.org # [PATCH] Fix deadlock in journalled quota # # From: Jan Kara # # Attached patch should fix reported deadlock in journalled quota code. # quotactl() call was violating the locking rules and didn't start transaction # when it should. # # From: # # Found a couple of symbols not exported that were needed by the ext3.ko # module. # # include/linux/quota.h # 2004/05/10 03:26:52-07:00 akpm@osdl.org +2 -0 # Fix deadlock in journalled quota # # fs/ext3/super.c # 2004/05/10 03:26:52-07:00 akpm@osdl.org +36 -0 # Fix deadlock in journalled quota # # fs/dquot.c # 2004/05/10 03:26:52-07:00 akpm@osdl.org +6 -2 # Fix deadlock in journalled quota # # ChangeSet # 2004/05/10 16:48:38-04:00 len.brown@intel.com # [ACPI] handle _CRS outside _PRS -- even when non-zero # avoid sharing IRQ12 # http://bugzilla.kernel.org/show_bug.cgi?id=2665 # # drivers/acpi/pci_link.c # 2004/05/10 16:42:35-04:00 len.brown@intel.com +11 -5 # handle _CRS outside _PRS even when non-zero # avoid sharing IRQ12 # # ChangeSet # 2004/05/10 15:38:00-05:00 markh@osdl.org # [PATCH] aacraid reset handler fix # # This fixes a situation where the handler can exit too early. # # drivers/scsi/aacraid/linit.c # 2004/05/10 06:42:31-05:00 markh@osdl.org +7 -5 # aacraid reset handler fix # # ChangeSet # 2004/05/10 13:30:22-07:00 akpm@osdl.org # [PATCH] migration_thread() race fix # # From: Srivatsa Vaddagiri # # Noticed that migration_thread can examine "kthread_should_stop()?" without # setting its state to TASK_INTERRUPTIBLE first. This can cause kthread_stop # on that thread to block forever ... # # P.S - I assumed that having the task state set to TASK_INTERRUTIBLE # while it is doing active_load_balance is fine. It seemed to be # the case earlier also. # # kernel/sched.c # 2004/05/10 03:04:29-07:00 akpm@osdl.org +3 -1 # migration_thread() race fix # # ChangeSet # 2004/05/10 13:30:12-07:00 akpm@osdl.org # [PATCH] sched_getaffinity vs cpu hotplug race fix # # From: Srivatsa Vaddagiri # # Fix the race in sys_sched_getaffinity. Patch below takes cpu_hotplug lock # before reading cpus_allowed mask of a task. # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +2 -0 # sched_getaffinity vs cpu hotplug race fix # # ChangeSet # 2004/05/10 13:30:01-07:00 akpm@osdl.org # [PATCH] Move migrate_all_tasks to CPU_DEAD handling # # From: Srivatsa Vaddagiri # # migrate_all_tasks is currently run with rest of the machine stopped. # It iterates thr' the complete task table, turning off cpu affinity of any task # that it finds affine to the dying cpu. Depending on the task table # size this can take considerable time. All this time machine is stopped, doing # nothing. # # Stopping the machine for such extended periods can be avoided if we do # task migration in CPU_DEAD notification and that's precisely what this patch # does. # # The patch puts idle task to the _front_ of the dying CPU's runqueue at the # highest priority possible. This cause idle thread to run _immediately_ after # kstopmachine thread yields. Idle thread notices that its cpu is offline and # dies quickly. Task migration can then be done at leisure in CPU_DEAD # notification, when rest of the CPUs are running. # # Some advantages with this approach are: # # - More scalable. Predicatable amout of time that machine is stopped. # - No changes to hot path/core code. We are just exploiting scheduler # rules which runs the next high-priority task on the runqueue. Also # since I put idle task to the _front_ of the runqueue, there # are no races when a equally high priority task is woken up # and added to the runqueue. It gets in at the back of the runqueue, # _after_ idle task! # - cpu_is_offline check that is presenty required in try_to_wake_up, # idle_balance and rebalance_tick can be removed, thus speeding them # up a bit # # From: Srivatsa Vaddagiri # # Rusty mentioned that the unlikely hints against cpu_is_offline is # redundant since the macro already has that hint. Patch below removes those # redundant hints I added. # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +81 -29 # Move migrate_all_tasks to CPU_DEAD handling # # kernel/fork.c # 2004/05/10 03:04:26-07:00 akpm@osdl.org +9 -1 # Move migrate_all_tasks to CPU_DEAD handling # # kernel/cpu.c # 2004/05/10 03:04:09-07:00 akpm@osdl.org +20 -9 # Move migrate_all_tasks to CPU_DEAD handling # # include/linux/sched.h # 2004/05/10 03:04:09-07:00 akpm@osdl.org +1 -2 # Move migrate_all_tasks to CPU_DEAD handling # # ChangeSet # 2004/05/10 13:29:51-07:00 akpm@osdl.org # [PATCH] sched: Look at another CPU's domain # # From: Nick Piggin # # The SMT wake_idle code really wants to look at a non-local CPU's domain in # order to check for idle siblings. # # So change the domain attachment code a little bit so we continue to hold a # runqueue's lock while attaching a new domain. This means the locking rules # have changed to: you may access your own domain without any lock, you must # hold a remote runqueue's lock in order to view its domain. # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +4 -4 # sched: Look at another CPU's domain # # ChangeSet # 2004/05/10 13:29:40-07:00 akpm@osdl.org # [PATCH] sched: micro-optimisation for wake_up # # From: Nick Piggin # # This actually does produce better code, especially under the locked # section. # # Turns a conditional + unconditional jump under the lock in the unlikely # case into a cmov outside the lock. # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +5 -4 # sched: micro-optimisation for wake_up # # ChangeSet # 2004/05/10 13:29:30-07:00 akpm@osdl.org # [PATCH] sched: reduce idle time # # From: Nick Piggin # # It makes NEWLY_IDLE balances cause find_busiest_group return the busiest # available group even if there isn't an imbalance. Basically - try a bit # harder to prevent schedule emptying the runqueue. # # It is quite aggressive, but that isn't so bad because we don't (by default) # do NEWLY_IDLE balancing across NUMA nodes, and NEWLY_IDLE balancing is always # restricted to cache_hot tasks. # # It picked up a little bit of idle time that dbt2-pgsql was seeing... # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +2 -1 # sched: reduce idle time # # ChangeSet # 2004/05/10 13:29:19-07:00 akpm@osdl.org # [PATCH] sched: balance-on-clone # # From: Ingo Molnar # # Implement balancing during clone(). It does the following things: # # - introduces SD_BALANCE_CLONE that can serve as a tool for an # architecture to limit the search-idlest-CPU scope on clone(). # E.g. the 512-CPU systems should rather not enable this. # # - uses the highest sd for the imbalance_pct, not this_rq (which didnt # make sense). # # - unifies balance-on-exec and balance-on-clone via the find_idlest_cpu() # function. Gets rid of sched_best_cpu() which was still a bit # inconsistent IMO, it used 'min_load < load' as a condition for # balancing - while a more correct approach would be to use half of the # imbalance_pct, like passive balancing does. # # - the patch also reintroduces the possibility to do SD_BALANCE_EXEC on # SMP systems, and activates it - to get testing. # # - NOTE: there's one thing in this patch that is slightly unclean: i # introduced wake_up_forked_thread. I did this to make it easier to get # rid of this patch later (wake_up_forked_process() has lots of # dependencies in various architectures). If this capability remains in # the kernel then i'll clean it up and introduce one function for # wake_up_forked_process/thread. # # - NOTE2: i added the SD_BALANCE_CLONE flag to the NUMA CPU template too. # Some NUMA architectures probably want to disable this. # # kernel/sched.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +133 -36 # sched: balance-on-clone # # kernel/fork.c # 2004/05/10 03:09:41-07:00 akpm@osdl.org +17 -3 # sched: balance-on-clone # # include/linux/sched.h # 2004/05/10 03:09:41-07:00 akpm@osdl.org +17 -6 # sched: balance-on-clone # # ChangeSet # 2004/05/10 13:29:07-07:00 akpm@osdl.org # [PATCH] sched: cpu load management cleanup # # From: Ingo Molnar # # This does the source/target cleanup. This is a no-functionality patch which # also adds more comments to explain these functions. # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +16 -10 # sched: cpu load management cleanup # # ChangeSet # 2004/05/10 13:28:57-07:00 akpm@osdl.org # [PATCH] sched: passive balancing damping # # From: Nick Piggin # # This patch starts to balance woken processes when half the relevant domain's # imbalance_pct is reached. Previously balancing would start after a small, # constant difference in waker/wakee runqueue loads was reached, which would # cause too much process movement when there are lots of processes running. # # It also turns wake balancing into a domain flag while previously it was always # on. Now sched domains can "soft partition" an SMP system without using # processor affinities. # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +19 -16 # sched: passive balancing damping # # include/linux/sched.h # 2004/05/10 03:09:42-07:00 akpm@osdl.org +6 -3 # sched: passive balancing damping # # ChangeSet # 2004/05/10 13:28:46-07:00 akpm@osdl.org # [PATCH] sched: cleanups # # From: Ingo Molnar # # This re-adds cleanups which were lost in splitups of an earlier patch. # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +14 -17 # sched: cleanups # # ChangeSet # 2004/05/10 13:28:35-07:00 akpm@osdl.org # [PATCH] sched: lock cpu_attach_domain for hotplug # # From: Nick Piggin # # The attached patch is required to work correctly with the CPU hotplug # framework. John Hawkes reports successful booting with this. # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +4 -0 # sched: lock cpu_attach_domain for hotplug # # ChangeSet # 2004/05/10 13:28:20-07:00 akpm@osdl.org # [PATCH] sched: extend sync wakeups # # From: Ingo Molnar # # The attached patch extends sync wakeups to the process sys_exit() path too: # the chldwait wakeup can be done sync, since we know that the process is # going to exit (and thus deschedule). # # The most visible effect of this change is strace's behavior on SMP systems: # it now stays on a single CPU, together with the traced child. (previously # it would run in parallel to the child, bouncing around madly.) # # kernel/signal.c # 2004/05/10 03:04:00-07:00 akpm@osdl.org +2 -2 # sched: extend sync wakeups # # ChangeSet # 2004/05/10 13:28:10-07:00 akpm@osdl.org # [PATCH] sched: add enqueeu_task_head() # # From: Ingo Molnar # # Helper function for later patches # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +15 -0 # sched: add enqueeu_task_head() # # ChangeSet # 2004/05/10 13:27:59-07:00 akpm@osdl.org # [PATCH] sched: uninlinings # # From: Ingo Molnar # # Uninline things # # kernel/sched.c # 2004/05/10 03:09:42-07:00 akpm@osdl.org +12 -12 # sched: uninlinings # # ChangeSet # 2004/05/10 13:27:48-07:00 akpm@osdl.org # [PATCH] sched: minor cleanups # # From: Nick Piggin # # Minor cleanups from Ingo's patch including task_hot (do it right in # try_to_wake_up too). # # kernel/sched.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +19 -28 # sched: minor cleanups # # include/linux/sched.h # 2004/05/10 03:09:42-07:00 akpm@osdl.org +3 -3 # sched: minor cleanups # # ChangeSet # 2004/05/10 13:27:37-07:00 akpm@osdl.org # [PATCH] sched: fix setup races # # From: Nick Piggin # # De-racify the sched domain setup code. This involves creating a dummy # "init" domain during sched_init (which is called early). # # When topology information becomes available, the sched domains are then # built and attached. The attach mechanism is asynchronous and uses the # migration threads, which perform the switch with interrupts off. This is a # quiescent state, so domains can still be lockless on the read side. It # also allows us to change the domains at runtime without much more work. # This is something SGI is interested in to elegantly do soft partitioning of # their systems without having to use hard cpu affinities (which cause # balancing problems of their own). # # The current setup code also has a race somewhere because it is unable to # boot on a 384 CPU system. # # # # From: Anton Blanchard # # This is basically a mindless ppc64 merge of the x86 changes to sched # domain init code. # # Actually if I produce a sibling_map[] then the x86 code and the ppc64 # will be identical. Maybe we can merge it. # # kernel/sched.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +118 -45 # sched: fix setup races # # include/linux/sched.h # 2004/05/10 03:09:43-07:00 akpm@osdl.org +3 -7 # sched: fix setup races # # arch/ppc64/kernel/smp.c # 2004/05/10 13:27:30-07:00 akpm@osdl.org +63 -121 # sched: fix setup races # # arch/i386/kernel/smpboot.c # 2004/05/10 13:27:30-07:00 akpm@osdl.org +59 -74 # sched: fix setup races # # ChangeSet # 2004/05/10 13:27:24-07:00 akpm@osdl.org # [PATCH] ARCH_HAS_SCHED_WAKE_BALANCE doesnt exist # # From: Anton Blanchard # # It seems someone has been making trivial changes without using grep. # # include/asm-ppc64/processor.h # 2004/05/10 13:27:18-07:00 akpm@osdl.org +1 -1 # ARCH_HAS_SCHED_WAKE_BALANCE doesnt exist # # ChangeSet # 2004/05/10 13:27:13-07:00 akpm@osdl.org # [PATCH] ppc64: sched-domain support # # From: Anton Blanchard # # Below are the diffs between the current ppc64 sched init stuff and x86. # # - Ignore the POWER5 specific stuff, I dont set up a sibling map yet. # - What should I set cache_hot_time to? # # large cpumask typechecking requirements (perhaps useful on x86 as well): # - cpu->cpumask = CPU_MASK_NONE -> cpus_clear(cpu->cpumask); # - cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map) doesnt work, # need to use a temporary # # include/asm-ppc64/processor.h # 2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -0 # ppc64: sched-domain support # # arch/ppc64/kernel/smp.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +273 -5 # ppc64: sched-domain support # # arch/ppc64/Kconfig # 2004/05/10 13:27:07-07:00 akpm@osdl.org +9 -0 # ppc64: sched-domain support # # ChangeSet # 2004/05/10 13:27:02-07:00 akpm@osdl.org # [PATCH] sched: oops fix # # From: Nick Piggin # # After the for_each_domain change, the warn here won't trigger, instead it # will oops in the if statement. Also, make sure we don't pass an empty # cpumask to for_each_cpu. # # kernel/sched.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -6 # sched: oops fix # # ChangeSet # 2004/05/10 13:26:51-07:00 akpm@osdl.org # [PATCH] sched: altix tuning # # From: Nick Piggin # # From: John Hawkes # # The following brings up performance on a 64-way Altix. This system being on # the smaller end of the scale should also be applicable to other NUMA systems. # # include/linux/sched.h # 2004/05/10 03:09:43-07:00 akpm@osdl.org +1 -1 # sched: altix tuning # # ChangeSet # 2004/05/10 13:26:40-07:00 akpm@osdl.org # [PATCH] sched: fix imbalance calculations # # From: Nick Piggin # # Imbalance calculations were not right. This would cause unneeded migration. # # kernel/sched.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +22 -16 # sched: fix imbalance calculations # # ChangeSet # 2004/05/10 13:26:30-07:00 akpm@osdl.org # [PATCH] sched: wakeup balancing fixes # # From: Nick Piggin # # Make affine wakes and "passive load balancing" more conservative. Aggressive # affine wakeups were causing huge regressions in dbt3-pgsql on 8-way non NUMA # systems at OSDL's STP. # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +17 -7 # sched: wakeup balancing fixes # # ChangeSet # 2004/05/10 13:26:19-07:00 akpm@osdl.org # [PATCH] Hotplug CPU sched_balance_exec Fix # # From: Rusty Russell # # From: Srivatsa Vaddagiri # From: Andrew Morton # From: Rusty Russell # # We want to get rid of lock_cpu_hotplug() in sched_migrate_task. Found # that lockless migration of execing task is _extremely_ racy. The # races I hit are described below, alongwith probable solutions. # # Task migration done elsewhere should be safe (?) since they either # hold the lock (sys_sched_setaffinity) or are done entirely with preemption # disabled (load_balance). # # sched_balance_exec does: # # a. disables preemption # b. finds new_cpu for current # c. enables preemption # d. calls sched_migrate_task to migrate current to new_cpu # # and sched_migrate_task does: # # e. task_rq_lock(p) # f. migrate_task(p, dest_cpu ..) # (if we have to wait for migration thread) # g. task_rq_unlock() # h. wake_up_process(rq->migration_thread) # i. wait_for_completion() # # Several things can happen here: # # 1. new_cpu can go down after h and before migration thread has # got around to handle the request # # ==> we need to add a cpu_is_offline check in __migrate_task # # 2. new_cpu can go down between c and d or before f. # # ===> Even though this case is automatically handled by the above # change (migrate_task being called on a running task, current, # will delegate migration to migration thread), would it be # good practice to avoid calling migrate_task in the first place # itself when dest_cpu is offline. This means adding another # cpu_is_offline check after e in sched_migrate_task # # 3. The 'current' task can get preempted _immediately_ after # g and when it comes back, task_cpu(p) can be dead. In # which case, it is invalid to do wake_up on a non-existent migration # thread. (rq->migration_thread can be NULL). # # ===> We should disable preemption thr' g and h # # 4. Before migration thread gets around to handle the request, its cpu # goes dead. This will leave unhandled migration requests in the dead # cpu. # # ===> We need to wakeup sleeping requestors (if any) in CPU_DEAD # notification. # # I really wonder if we can get rid of these issues by avoiding balancing at # exec time and instead have it balanced during load_balance ..Alternately # if this is valuable and we want to retain it, I think we still need to # consider a read/write sem, with sched_migrate_task doing down_read_trylock. # This may eliminate the deadlock I hit between cpu_up and CPU_UP_PREPARE # notification, which had forced me away from r/w sem. # # Anyway patch below addresses the above races. Its against 2.6.6-rc2-mm1 # and has been tested on a 4way Intel Pentium SMP m/c. # # # Rusty sez: # # Two other changes: # 1) I grabbed a reference to the thread, rather than using # preempt_disable(). It's the more obvious way I think. # # 2) Why the wait_to_die code? It might be needed if we move tasks after # stop_machine, but for nowI don't see the problem with the migration # thread running on the wrong CPU for a bit: nothing is on this runqueue # so active_load_balance is safe, and __migrate task will be a noop (due # to cpu_is_offline() check). If there is a problem, your fix is racy, # because we could be preempted immediately afterwards. # # So I just stop the kthread then wakeup any remaining... # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +28 -9 # Hotplug CPU sched_balance_exec Fix # # ChangeSet # 2004/05/10 13:26:09-07:00 akpm@osdl.org # [PATCH] sched: trivial fixes, cleanups # # From: Ingo Molnar # # The trivial fixes. # # - added recent trivial bits from Nick's and my patches. # - hotplug CPU fix # - early init cleanup # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +244 -245 # sched: trivial fixes, cleanups # # init/main.c # 2004/05/10 03:03:59-07:00 akpm@osdl.org +8 -1 # sched: trivial fixes, cleanups # # include/linux/sched.h # 2004/05/10 03:09:43-07:00 akpm@osdl.org +16 -11 # sched: trivial fixes, cleanups # # include/asm-i386/processor.h # 2004/05/10 03:03:59-07:00 akpm@osdl.org +1 -1 # sched: trivial fixes, cleanups # # include/asm-i386/param.h # 2004/05/10 03:03:59-07:00 akpm@osdl.org +3 -1 # sched: trivial fixes, cleanups # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -5 # sched: trivial fixes, cleanups # # arch/i386/Kconfig # 2004/05/10 03:03:59-07:00 akpm@osdl.org +1 -1 # sched: trivial fixes, cleanups # # ChangeSet # 2004/05/10 13:25:57-07:00 akpm@osdl.org # [PATCH] Reduce TLB flushing during process migration # # From: Martin Hicks # # Another optimization patch from Jack Steiner, intended to reduce TLB # flushes during process migration. # # Most architextures should define tlb_migrate_prepare() to be flush_tlb_mm(), # but on i386, it would be a wasted flush, because i386 disconnects previous # cpus from the tlb flush automatically. # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -0 # Reduce TLB flushing during process migration # # include/asm-ia64/tlb.h # 2004/05/10 03:03:59-07:00 akpm@osdl.org +2 -0 # Reduce TLB flushing during process migration # # include/asm-generic/tlb.h # 2004/05/10 03:03:59-07:00 akpm@osdl.org +2 -0 # Reduce TLB flushing during process migration # # ChangeSet # 2004/05/10 13:25:45-07:00 akpm@osdl.org # [PATCH] sched: add local load metrics # # From: Nick Piggin # # This patch removes the per runqueue array of NR_CPU arrays. Each time we # want to check a remote CPU's load we check nr_running as well anyway, so # introduce a cpu_load which is the load of the local runqueue and is kept # updated in the timer tick. Put them in the same cacheline. # # This has additional benefits of having the cpu_load consistent across all # CPUs and more up to date. It is sampled better too, being updated once per # timer tick. # # This shouldn't make much difference in scheduling behaviour, but all # benchmarks are either as good or better on the 16-way NUMAQ: hackbench, # reaim, volanomark are about the same, tbench and dbench are maybe a bit # better. kernbench is about one percent better. # # John reckons it isn't a big deal, but it does save 4K per CPU or 2MB total # on his big systems, so I figure it must be a bit kinder on the caches. I # think it is just nicer in general anyway. # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +30 -43 # sched: add local load metrics # # ChangeSet # 2004/05/10 13:25:34-07:00 akpm@osdl.org # [PATCH] sched: SMT niceness handling # # From: Con Kolivas # # This patch provides full per-package priority support for SMT processors # (aka pentium4 hyperthreading) when combined with CONFIG_SCHED_SMT. # # It maintains cpu percentage distribution within each physical cpu package # by limiting the time a lower priority task can run on a sibling cpu # concurrently with a higher priority task. # # It introduces a new flag into the scheduler domain # unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */ # # This is empirically set to 15% for pentium4 at the moment and can be # modified to support different values dynamically as newer processors come # out with improved SMT performance. It should not matter how many siblings # there are. # # How it works is it compares tasks running on sibling cpus and when a lower # static priority task is running it will delay it till # high_priority_timeslice * (100 - per_cpu_gain) / 100 <= low_prio_timeslice # # eg. a nice 19 task timeslice is 10ms and nice 0 timeslice is 102ms On # vanilla the nice 0 task runs on one logical cpu while the nice 19 task runs # unabated on the other logical cpu. With smtnice the nice 0 runs on one # logical cpu for 102ms and the nice 19 sleeps till the nice 0 task has 12ms # remaining and then will schedule. # # Real time tasks and kernel threads are not altered by this code, and kernel # threads do not delay lower priority user tasks. # # with lots of thanks to Zwane Mwaikambo and Nick Piggin for help with the # coding of this version. # # If this is merged, it is probably best to delay pushing this upstream in # mainline till sched_domains gets tested for at least one major release. # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +115 -2 # sched: SMT niceness handling # # include/linux/sched.h # 2004/05/10 03:09:44-07:00 akpm@osdl.org +5 -0 # sched: SMT niceness handling # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -2 # sched: SMT niceness handling # # ChangeSet # 2004/05/10 13:25:22-07:00 akpm@osdl.org # [PATCH] sched_domains: use cpu_possible_map # # From: Nick Piggin # # This changes sched domains to contain all possible CPUs, and check for # online as needed. It's in order to play nicely with CPU hotplug. # # kernel/sched.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +24 -29 # sched_domains: use cpu_possible_map # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +11 -11 # sched_domains: use cpu_possible_map # # ChangeSet # 2004/05/10 13:25:11-07:00 akpm@osdl.org # [PATCH] sched-group-power # # From: Nick Piggin # # The following patch implements a cpu_power member to struct sched_group. # # This allows special casing to be removed for SMT groups in the balancing # code. It does not take CPU hotplug into account yet, but that shouldn't be # too hard. # # I have tested it on the NUMAQ by pretending it has SMT. Works as expected. # Active balances across nodes. # # kernel/sched.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +67 -63 # sched-group-power # # include/linux/sched.h # 2004/05/10 03:09:44-07:00 akpm@osdl.org +11 -1 # sched-group-power # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +12 -3 # sched-group-power # # ChangeSet # 2004/05/10 13:25:00-07:00 akpm@osdl.org # [PATCH] sched_balance_exec(): don't fiddle with the cpus_allowed mask # # From: Rusty Russell , # Nick Piggin # # The current sched_balance_exec() sets the task's cpus_allowed mask # temporarily to move it to a different CPU. This has several issues, # including the fact that a task will see its affinity at a bogus value. # # So we change the migration_req_t to explicitly specify a destination CPU, # rather than the migration thread deriving it from cpus_allowed. If the # requested CPU is no longer valid (racing with another set_cpus_allowed, # say), it can be ignored: if the task is not allowed on this CPU, there will # be another migration request pending. # # This change allows sched_balance_exec() to tell the migration thread what # to do without changing the cpus_allowed mask. # # So we rename __set_cpus_allowed() to move_task(), as the cpus_allowed mask # is now set by the caller. And move_task_away(), which the migration thread # uses to actually perform the move, is renamed __move_task(). # # I also ignore offline CPUs in sched_best_cpu(), so sched_migrate_task() # doesn't need to check for offline CPUs. # # Ulterior motive: this approach also plays well with CPU Hotplug. # Previously that patch might have seen a task with cpus_allowed only # containing the dying CPU (temporarily due to sched_balance_exec) and # forcibly reset it to all cpus, which might be wrong. The other approach is # to hold the cpucontrol sem around sched_balance_exec(), which is too much # of a bottleneck. # # kernel/sched.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +33 -34 # sched_balance_exec(): don't fiddle with the cpus_allowed mask # # ChangeSet # 2004/05/10 13:24:49-07:00 akpm@osdl.org # [PATCH] sched: handle inter-CPU jiffies skew # # From: Nick Piggin # # John Hawkes discribed this problem to me: # # There *is* a small problem in this area, though, that SuSE avoids. # "jiffies" gets updated by cpu0. The other CPUs may, over time, get out of # sync (and they're initialized on ia64 to start out being out of sync), so # it's no guarantee that every CPU will wake up from its timer interrupt and # see a "jiffies" value that is guaranteed to be last_jiffies+1. Sometimes # the jiffies value may be unchanged since the last wakeup. Sometimes the # jiffies value may have incremented by 2 (or more, especially if cpu0's # interrupts are disabled for long stretches of time). So an algoithm that # says, "I'll call load_balance() only when jiffies is *exactly* N" is going # to fail on occasion, either by calling load_balance() too often or not # often enough. *** # # I fixed this by adding a last_balance field to struct sched_domain, and # working off that. # # kernel/sched.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +8 -8 # sched: handle inter-CPU jiffies skew # # include/linux/sched.h # 2004/05/10 03:09:45-07:00 akpm@osdl.org +4 -0 # sched: handle inter-CPU jiffies skew # # ChangeSet # 2004/05/10 13:24:38-07:00 akpm@osdl.org # [PATCH] sched: implement domains for i386 HT # # From: Nick Piggin # # The following patch builds a scheduling description for the i386 # architecture using cpu_sibling_map to set up SMT if CONFIG_SCHED_SMT is # set. # # It could be made more fancy and collapse degenerate domains at runtime (ie. # 1 sibling per CPU, or 1 NUMA node in the computer). # # # From: Zwane Mwaikambo # # This fixes an oops due to cpu_sibling_map being uninitialised when a # system with no MP table (most UP boxen) boots a CONFIG_SMT kernel. What # also happens is that the cpu_group lists end up not being terminated # properly, but this oops kills it first. Patch tested on UP w/o MP table, # 2x P2 and UP Xeon w/ no siblings. # # From: "Martin J. Bligh" , # Nick Piggin # # Change arch_init_sched_domains to use cpu_online_map # # From: Anton Blanchard # # Fix build with NR_CPUS > BITS_PER_LONG # # kernel/sched.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +10 -25 # sched: implement domains for i386 HT # # include/linux/sched.h # 2004/05/10 03:09:45-07:00 akpm@osdl.org +16 -0 # sched: implement domains for i386 HT # # include/asm-i386/processor.h # 2004/05/10 03:09:44-07:00 akpm@osdl.org +5 -0 # sched: implement domains for i386 HT # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +205 -1 # sched: implement domains for i386 HT # # arch/i386/Kconfig # 2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -0 # sched: implement domains for i386 HT # # ChangeSet # 2004/05/10 13:24:26-07:00 akpm@osdl.org # [PATCH] sched: cpu_sibling_map to cpu_mask # # From: Nick Piggin # # This is a (somewhat) trivial patch which converts cpu_sibling_map from an # array of CPUs to an array of cpumasks. Needed for >2 siblings per package, # but it actually can simplify code as it allows the cpu_sibling_map to be # set up even when there is 1 sibling per package. Intel want this, I use it # in the next patch to build scheduling domains for the P4 HT. # # From: Thomas Schlichter # # Build fix # # From: "Pallipadi, Venkatesh" # # Fix to handle more than 2 siblings per package. # # include/asm-i386/smp.h # 2004/05/10 03:03:57-07:00 akpm@osdl.org +1 -1 # sched: cpu_sibling_map to cpu_mask # # arch/i386/oprofile/op_model_p4.c # 2004/05/10 03:03:57-07:00 akpm@osdl.org +2 -5 # sched: cpu_sibling_map to cpu_mask # # arch/i386/kernel/smpboot.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +21 -19 # sched: cpu_sibling_map to cpu_mask # # arch/i386/kernel/io_apic.c # 2004/05/10 03:03:57-07:00 akpm@osdl.org +12 -7 # sched: cpu_sibling_map to cpu_mask # # arch/i386/kernel/cpu/cpufreq/p4-clockmod.c # 2004/05/10 03:03:57-07:00 akpm@osdl.org +15 -18 # sched: cpu_sibling_map to cpu_mask # # ChangeSet # 2004/05/10 13:24:15-07:00 akpm@osdl.org # [PATCH] scheduler domain balancing improvements # # From: Nick Piggin # # This patch gets the sched_domain scheduler working better WRT balancing. # Its been tested on the NUMAQ. Among other things it changes to the way SMT # load calculation works so as not to active load blances when it shouldn't. # # It still has a problem with SMT and NUMA: it will put a task on each # sibling in a node before moving tasks to another node. It should probably # start moving tasks after each *physical* CPU is filled. # # To fix, you need "how much CPU power in this domain?" At the moment we # approximate # runqueues == CPU power, and hack around it at the CPU # physical domain by counting all sibling runqueues as 1. # # It isn't hard to correctly work the CPU power out, but once CPU hotplug is # in the equation it becomes much more hotplug events. If anyone is actually # interested in getting this fixed, that is. # # kernel/sched.c # 2004/05/10 03:09:45-07:00 akpm@osdl.org +36 -19 # scheduler domain balancing improvements # # ChangeSet # 2004/05/10 13:24:05-07:00 akpm@osdl.org # [PATCH] sched_domain debugging # # From: Nick Piggin # # Anton was attempting to make a sched domain topology for his POWER5 and was # having some trouble. # # This patch only includes code which is ifdefed out, but hopefully it will # be of some use to implementors. # # kernel/sched.c # 2004/05/10 03:09:46-07:00 akpm@osdl.org +78 -0 # sched_domain debugging # # Documentation/sched-domains.txt # 2004/05/10 03:03:57-07:00 akpm@osdl.org +7 -0 # sched_domain debugging # # ChangeSet # 2004/05/10 13:23:54-07:00 akpm@osdl.org # [PATCH] sched: scheduler domain support # # From: Nick Piggin # # This is the core sched domains patch. It can handle any number of levels # in a scheduling heirachy, and allows architectures to easily customize how # the scheduler behaves. It also provides progressive balancing backoff # needed by SGI on their large systems (although they have not yet tested # it). # # It is built on top of (well, uses ideas from) my previous SMP/NUMA work, and # gets results very similar to them when using the default scheduling # description. # # Benchmarks # ========== # # Martin was seeing I think 10-20% better system times in kernbench on the 32 # way. I was seeing improvements in dbench, tbench, kernbench, reaim, # hackbench on a 16-way NUMAQ. Hackbench in fact had a non linear element # which is all but eliminated. Large improvements in volanomark. # # Cross node task migration was decreased in all above benchmarks, sometimes by # a factor of 100!! Cross CPU migration was also generally decreased. See # this post: # http://groups.google.com.au/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&frame=right&th=a406c910b30cbac4&seekm=UAdQ.3hj.5%40gated-at.bofh.it#link2 # # Results on a hyperthreading P4 are equivalent to Ingo's shared runqueues # patch (which is a big improvement). # # Some examples on the 16-way NUMAQ (this is slightly older sched domain code): # # http://www.kerneltrap.org/~npiggin/w26/hbench.png # http://www.kerneltrap.org/~npiggin/w26/vmark.html # # From: Jes Sorensen # # Tiny patch to make -mm3 compile on an NUMA box with NR_CPUS > # BITS_PER_LONG. # # From: "Martin J. Bligh" # # Fix a minor nit with the find_busiest_group code. No functional change, # but makes the code simpler and clearer. This patch does two things ... # adds some more expansive comments, and removes this if clause: # # if (*imbalance < SCHED_LOAD_SCALE # && max_load - this_load > SCHED_LOAD_SCALE) # *imbalance = SCHED_LOAD_SCALE; # # If we remove the scaling factor, we're basically conditionally doing: # # if (*imbalance < 1) # *imbalance = 1; # # Which is pointless, as the very next thing we do is to remove the # scaling factor, rounding up to the nearest integer as we do: # # *imbalance = (*imbalance + SCHED_LOAD_SCALE - 1) >> SCHED_LOAD_SHIFT; # # Thus the if statement is redundant, and only makes the code harder to # read ;-) # # From: Rick Lindsley # # In find_busiest_group(), after we exit the do/while, we select our # imbalance. But max_load, avg_load, and this_load are all unsigned, so # min(x,y) will make a bad choice if max_load < avg_load < this_load (that # is, a choice between two negative [very large] numbers). # # Unfortunately, there is a bug when max_load never gets changed from zero # (look in the loop and think what happens if the only load on the machine is # being created by cpu groups of which we are a member). And you have a # recipe for some really bogus values for imbalance. # # Even if you fix the max_load == 0 bug, there will still be times when # avg_load - this_load will be negative (thus very large) and you'll make the # decision to move stuff when you shouldn't have. # # This patch allows for this_load to set max_load, which if I understand # the logic properly is correct. With this patch applied, the algorithm is # *much* more conservative ... maybe *too* conservative but that's for # another round of testing ... # # From: Ingo Molnar # # sched-find-busiest-fix # # kernel/sched.c # 2004/05/10 03:09:46-07:00 akpm@osdl.org +818 -348 # sched: scheduler domain support # # init/main.c # 2004/05/10 03:09:44-07:00 akpm@osdl.org +1 -1 # sched: scheduler domain support # # include/linux/sched.h # 2004/05/10 03:09:45-07:00 akpm@osdl.org +68 -2 # sched: scheduler domain support # # Documentation/sched-domains.txt # 2004/05/10 03:09:46-07:00 akpm@osdl.org +48 -0 # sched: scheduler domain support # # Documentation/sched-domains.txt # 2004/05/10 03:09:46-07:00 akpm@osdl.org +0 -0 # BitKeeper file /home/torvalds/v2.6/linux/Documentation/sched-domains.txt # # ChangeSet # 2004/05/10 13:23:42-07:00 akpm@osdl.org # [PATCH] sched: improved resolution in find_busiest_node # # From: Nick Piggin # # From: Frank Cornelis # # In order to get the best possible resolution we need to use NR_CPUS instead # of the constant value 10. load is an int, so no need to worry about # overflows... # # kernel/sched.c # 2004/05/10 03:09:46-07:00 akpm@osdl.org +3 -3 # sched: improved resolution in find_busiest_node # # ChangeSet # 2004/05/10 13:23:31-07:00 akpm@osdl.org # [PATCH] small scheduler cleanup # # From: Ingo Molnar # # From: Nick Piggin wrote: # # It removes the last place where we mess with run_list open coded. # # kernel/sched.c # 2004/05/10 03:09:46-07:00 akpm@osdl.org +7 -7 # small scheduler cleanup # # ChangeSet # 2004/05/10 13:17:31-05:00 jejb@mulgrave.(none) # Add SCSI IPR PCI Ids to pci_ids.h # # include/linux/pci_ids.h # 2004/05/10 13:17:04-05:00 jejb@mulgrave.(none) +2 -0 # Add SCSI IPR PCI Ids # # ChangeSet # 2004/05/10 20:12:34+02:00 marcel@holtmann.org # [Bluetooth] Use type of the parent socket # # The SELinux fixes for kernel sockets assume that we always use the type # SOCK_SEQPACKET, but this must not be the truth. Give the sock->type # as argument to sock_create_lite() and everything is correct for the new # child socket. # # net/bluetooth/rfcomm/core.c # 2004/05/10 20:08:06+02:00 marcel@holtmann.org +3 -4 # Use type of the parent socket # # ChangeSet # 2004/05/10 13:12:01-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/netdev-2.6/8139too # into redhat.com:/spare/repo/net-drivers-2.6 # # drivers/net/8139too.c # 2004/05/10 13:11:57-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/10 11:27:04-05:00 jejb@mulgrave.(none) # Add IBM power RAID driver 2.0.6 # # From: Brian King # # drivers/scsi/ipr.h # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +1251 -0 # # drivers/scsi/ipr.c # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +6012 -0 # # drivers/scsi/ipr.h # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/ipr.h # # drivers/scsi/ipr.c # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/ipr.c # # drivers/scsi/Makefile # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +1 -0 # Add IBM power RAID driver 2.0.6 # # drivers/scsi/Kconfig # 2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +25 -0 # Add IBM power RAID driver 2.0.6 # # drivers/pci/pci.ids # 2004/05/10 11:26:36-05:00 jejb@mulgrave.(none) +2 -0 # Add IBM power RAID driver 2.0.6 # # MAINTAINERS # 2004/05/10 11:26:36-05:00 jejb@mulgrave.(none) +5 -0 # Add IBM power RAID driver 2.0.6 # # ChangeSet # 2004/05/10 10:55:37-05:00 shaggy@austin.ibm.com # JFS: module unload was not removing /proc/fs/jfs/ # # fs/jfs/jfs_debug.c # 2004/05/10 10:55:31-05:00 shaggy@austin.ibm.com +3 -3 # fix remove_proc_entry argument # # ChangeSet # 2004/05/10 17:25:27+02:00 marcel@holtmann.org # [Bluetooth] Adapt changes for USB core altsettings # # The USB core has changed its way the interfaces and the altsettings are # stored. The probe routines of the USB based Bluetooth drivers must be # changed and in some cases they are simplified. # # Patch from Alan Stern # # drivers/bluetooth/hci_usb.c # 2004/05/10 17:21:53+02:00 marcel@holtmann.org +77 -82 # Adapt changes for USB core altsettings # # drivers/bluetooth/bfusb.c # 2004/05/10 17:21:48+02:00 marcel@holtmann.org +3 -3 # Adapt changes for USB core altsettings # # drivers/bluetooth/bcm203x.c # 2004/05/10 17:20:59+02:00 marcel@holtmann.org +1 -1 # Adapt changes for USB core altsettings # # ChangeSet # 2004/05/10 17:11:34+02:00 marcel@holtmann.org # [Bluetooth] Fix disconnect race on ISOC interface # # The hci_usb_disconnect() gets called recursively when SCO support # is enabled and used. This causes sysfs_hash_and_remove() finally to # dereference a NULL pointer. # # Noticed by Sebastian Schmidt # # drivers/bluetooth/hci_usb.c # 2004/05/10 17:02:36+02:00 marcel@holtmann.org +4 -2 # Fix disconnect race on ISOC interface # # ChangeSet # 2004/05/10 09:52:40-05:00 noodles@earth.li # [PATCH] Initio INI-9X00U/UW error handling in 2.6 # # Plumb old error handling into new eh infrastructure. # # drivers/scsi/ini9100u.h # 2004/04/30 13:39:30-05:00 noodles@earth.li +2 -1 # Initio INI-9X00U/UW error handling in 2.6 # # drivers/scsi/ini9100u.c # 2004/04/30 13:40:06-05:00 noodles@earth.li +13 -1 # Initio INI-9X00U/UW error handling in 2.6 # # ChangeSet # 2004/05/10 09:49:16-05:00 jejb@mulgrave.(none) # sym53c500_cs remove irq,ioport scsi attributes # # From: Bob Tracy # # drivers/scsi/pcmcia/sym53c500_cs.c # 2004/05/10 09:49:05-05:00 jejb@mulgrave.(none) +1 -35 # sym53c500_cs remove irq,ioport scsi attributes # # ChangeSet # 2004/05/10 09:39:21-05:00 hch@lst.de # [PATCH] mca_53c9x needs CONFIG_MCA_LEGACY # # drivers/scsi/Kconfig # 2004/05/05 04:52:38-05:00 hch@lst.de +1 -1 # mca_53c9x needs CONFIG_MCA_LEGACY # # ChangeSet # 2004/05/10 09:37:24-05:00 hch@lst.de # [PATCH] missing pci_set_master in megaraid # # drivers/scsi/megaraid.c # 2004/01/31 00:52:56-06:00 hch@lst.de +1 -0 # missing pci_enable_device in megaraid # # ChangeSet # 2004/05/10 09:36:45-05:00 hch@lst.de # [PATCH] imm/ppa style police # # fix remaining style problems after Al ressurrected the drivers. # # drivers/scsi/ppa.h # 2004/02/22 15:38:12-06:00 hch@lst.de +1 -1 # imm/ppa style police # # drivers/scsi/ppa.c # 2004/02/22 15:36:06-06:00 hch@lst.de +18 -12 # imm/ppa style police # # drivers/scsi/imm.h # 2004/02/22 15:38:29-06:00 hch@lst.de +1 -1 # imm/ppa style police # # drivers/scsi/imm.c # 2004/02/22 15:34:11-06:00 hch@lst.de +22 -18 # imm/ppa style police # # ChangeSet # 2004/05/10 09:35:31-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [15/15] qla2xxx: Update driver version # # Update version number to 8.00.00b12-k. # # drivers/scsi/qla2xxx/qla_version.h | 4 ++-- # 1 files changed, 2 insertions(+), 2 deletions(-) # # drivers/scsi/qla2xxx/qla_version.h # 2004/05/03 10:17:14-05:00 andrew.vasquez@qlogic.com +2 -2 # PATCH [15/15] qla2xxx: Update driver version # # ChangeSet # 2004/05/10 09:34:47-05:00 jejb@mulgrave.(none) # PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28. # # From: Andrew Vasquez # # drivers/scsi/qla2xxx/ql2300_fw.c |12380 +++++++++++++++++++-------------------- # drivers/scsi/qla2xxx/ql2322_fw.c |11812 ++++++++++++++++++------------------- # drivers/scsi/qla2xxx/ql6312_fw.c |10174 ++++++++++++++++---------------- # drivers/scsi/qla2xxx/ql6322_fw.c |10352 ++++++++++++++++---------------- # 4 files changed, 22368 insertions(+), 22350 deletions(-) # # drivers/scsi/qla2xxx/ql6322_fw.c # 2004/05/10 09:34:32-05:00 jejb@mulgrave.(none) +5178 -5174 # PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28. # # drivers/scsi/qla2xxx/ql6312_fw.c # 2004/05/10 09:34:32-05:00 jejb@mulgrave.(none) +5089 -5085 # PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28. # # drivers/scsi/qla2xxx/ql2322_fw.c # 2004/05/10 09:34:31-05:00 jejb@mulgrave.(none) +5909 -5903 # PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28. # # drivers/scsi/qla2xxx/ql2300_fw.c # 2004/05/10 09:34:31-05:00 jejb@mulgrave.(none) +6192 -6188 # PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28. # # ChangeSet # 2004/05/10 09:31:56-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [13/15] qla2xxx: Misc. code scrubbing # # Misc. driver scrubbing: # # o Use kernel #define for PCI command register bit. # # o Fix rate-limiting check the queue-depth module # parameter. # # o Clean-up comments. # # drivers/scsi/qla2xxx/qla_init.c | 2 +- # drivers/scsi/qla2xxx/qla_mbx.c | 1 - # drivers/scsi/qla2xxx/qla_os.c | 7 +++---- # 3 files changed, 4 insertions(+), 6 deletions(-) # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +3 -4 # PATCH [13/15] qla2xxx: Misc. code scrubbing # # drivers/scsi/qla2xxx/qla_mbx.c # 2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +0 -1 # PATCH [13/15] qla2xxx: Misc. code scrubbing # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +1 -1 # PATCH [13/15] qla2xxx: Misc. code scrubbing # # ChangeSet # 2004/05/10 09:30:37-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [12/15] qla2xxx: RIO/ZIO fixes # # RIO/ZIO fixes: # # o Reduce register access during RIO operation by checking # for a 'dirtied' signature. # # o Fix problem where ZIO mode handling could result in a # nasty recursive call-frame. # # drivers/scsi/qla2xxx/qla_os.c | 5 +---- # 1 files changed, 1 insertion(+), 4 deletions(-) # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:16:15-05:00 andrew.vasquez@qlogic.com +1 -4 # PATCH [12/15] qla2xxx: RIO/ZIO fixes # # ChangeSet # 2004/05/10 09:29:37-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [11/15] qla2xxx: /proc fixes # # /proc file updates: # # o Address 'unaligned access' message on ia64 platorms # while displaying bit-field flags. # # o Iterate through the the OS target array to display # target ID bindings. # # drivers/scsi/qla2xxx/qla_os.c | 30 ++++++++++++------------------ # 1 files changed, 12 insertions(+), 18 deletions(-) # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:15:57-05:00 andrew.vasquez@qlogic.com +12 -18 # PATCH [11/15] qla2xxx: /proc fixes # # ChangeSet # 2004/05/10 09:28:20-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [10/15] qla2xxx: Use readX_relaxed # # Jeremy Higdon : # # For those to whom this is new (it was discussed on linux-kernel # and linux-ia64 I believe), normal PCI register reads imply that # PCI DMA writes that occured prior to the PCI MMR (memory mapped # register) read (on the PCI bus) will be reflected in system # memory once the MMR read is complete. # # On our platforms, we can speed up the MMR read significantly if # that ordering requirement is "relaxed". # # So I attempted to find the common register reads that don't # have a need for this ordering so that I could make them use # this faster read. # # drivers/scsi/qla2xxx/qla_def.h | 3 +++ # drivers/scsi/qla2xxx/qla_iocb.c | 6 +++--- # drivers/scsi/qla2xxx/qla_isr.c | 2 +- # 3 files changed, 7 insertions(+), 4 deletions(-) # # drivers/scsi/qla2xxx/qla_isr.c # 2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +1 -1 # PATCH [10/15] qla2xxx: Use readX_relaxed # # drivers/scsi/qla2xxx/qla_iocb.c # 2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +3 -3 # PATCH [10/15] qla2xxx: Use readX_relaxed # # drivers/scsi/qla2xxx/qla_def.h # 2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +3 -0 # PATCH [10/15] qla2xxx: Use readX_relaxed # # ChangeSet # 2004/05/10 09:27:07-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [9/15] qla2xxx: Tape command handling fixes # # Fix several problems when handling commands issued to tape devices: # # 1) insure commands are not prematurely returned to the mid-layer # with a failed status during loop/fabric transitions. # # 2) tape commands tend to have rather 'long' timeout values, # unfortunately, as the these values increase into the 17 to # 20 minute range (and larger), the cumulative skew of the # RISC's own timer result in commands being held for seconds # beyond their defined timeout values. Compensate for this # in the driver's command timeout function. # # drivers/scsi/qla2xxx/qla_def.h | 3 + # drivers/scsi/qla2xxx/qla_init.c | 4 ++ # drivers/scsi/qla2xxx/qla_isr.c | 10 ++--- # drivers/scsi/qla2xxx/qla_os.c | 74 ++++++++++++++++++++++++++++++++++++---- # 4 files changed, 79 insertions(+), 12 deletions(-) # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +68 -6 # PATCH [9/15] qla2xxx: Tape command handling fixes # # drivers/scsi/qla2xxx/qla_isr.c # 2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +5 -5 # PATCH [9/15] qla2xxx: Tape command handling fixes # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +4 -0 # PATCH [9/15] qla2xxx: Tape command handling fixes # # drivers/scsi/qla2xxx/qla_def.h # 2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +2 -1 # PATCH [9/15] qla2xxx: Tape command handling fixes # # ChangeSet # 2004/05/10 09:25:58-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [8/15] qla2xxx: Volatile topology fixes # # Fix problem where during ISP initialization in a volatile topology # (i.e. fabric environment with large number of streaming RSCNs) the # driver would loop indefinitely or hang due to termination of an # invalid thread pid. # # drivers/scsi/qla2xxx/qla_init.c | 142 ++++++++++++++++------------------------ # drivers/scsi/qla2xxx/qla_os.c | 1 # 2 files changed, 60 insertions(+), 83 deletions(-) # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:15:01-05:00 andrew.vasquez@qlogic.com +1 -0 # PATCH [8/15] qla2xxx: Volatile topology fixes # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:15:01-05:00 andrew.vasquez@qlogic.com +59 -83 # PATCH [8/15] qla2xxx: Volatile topology fixes # # ChangeSet # 2004/05/10 09:24:46-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [7/15] qla2xxx: Firmware options fixes # # Cleanup retrieval and update of firmware options: # # o Update only valid for non-(2[12]00) ISPs. # o Instruct firmware to return completed IOCBs without # waiting for an ABTS to complete. # # drivers/scsi/qla2xxx/qla_init.c | 79 +++++++++++++++++++++++++--------------- # 1 files changed, 50 insertions(+), 29 deletions(-) # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:14:42-05:00 andrew.vasquez@qlogic.com +50 -29 # PATCH [7/15] qla2xxx: Firmware options fixes # # ChangeSet # 2004/05/10 09:23:44-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [6/15] qla2xxx: LoopID downcast fix # # Fix problem where the driver would incorrectly down-cast the target # loop_id while retrieving link statistics. # # drivers/scsi/qla2xxx/qla_gbl.h | 2 +- # drivers/scsi/qla2xxx/qla_mbx.c | 2 +- # 2 files changed, 2 insertions(+), 2 deletions(-) # # drivers/scsi/qla2xxx/qla_mbx.c # 2004/05/03 10:14:24-05:00 andrew.vasquez@qlogic.com +1 -1 # PATCH [6/15] qla2xxx: LoopID downcast fix # # drivers/scsi/qla2xxx/qla_gbl.h # 2004/05/03 10:14:24-05:00 andrew.vasquez@qlogic.com +1 -1 # PATCH [6/15] qla2xxx: LoopID downcast fix # # ChangeSet # 2004/05/10 09:21:29-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [5/15] qla2xxx: Debug messages during ISP abort # # Issue a kernel warning message before initiating an ISP abort (big # hammer) -- additional debugging mechanism in case of event. # # drivers/scsi/qla2xxx/qla_mbx.c | 9 +++++++++ # drivers/scsi/qla2xxx/qla_os.c | 2 ++ # drivers/scsi/qla2xxx/qla_rscn.c | 2 ++ # 3 files changed, 13 insertions(+) # # drivers/scsi/qla2xxx/qla_rscn.c # 2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +2 -0 # PATCH [5/15] qla2xxx: Debug messages during ISP abort # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +2 -0 # PATCH [5/15] qla2xxx: Debug messages during ISP abort # # drivers/scsi/qla2xxx/qla_mbx.c # 2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +9 -0 # PATCH [5/15] qla2xxx: Debug messages during ISP abort # # ChangeSet # 2004/05/10 09:20:18-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [4/15] qla2xxx: PortID binding fixes # # Fix problem where port ID binding would not be honoured when # a device was moved within the fabric. # # drivers/scsi/qla2xxx/qla_init.c | 33 ++++++++++++++++++++++++--------- # 1 files changed, 24 insertions(+), 9 deletions(-) # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:13:47-05:00 andrew.vasquez@qlogic.com +24 -9 # PATCH [4/15] qla2xxx: PortID binding fixes # # ChangeSet # 2004/05/10 09:18:48-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [3/15] qla2xxx: 2100 request-q contraints # # Older, notably the ISP2100, chips have some contraints for the request # queue depth and number of scatter-gather elements allowed for a # given command. For this chip, reduce request queue size to 128 and # maximum number of scatter-gather entries for a command to 32. # # drivers/scsi/qla2xxx/qla_def.h | 14 +++----------- # drivers/scsi/qla2xxx/qla_init.c | 9 +++++---- # drivers/scsi/qla2xxx/qla_iocb.c | 14 +++++++------- # drivers/scsi/qla2xxx/qla_os.c | 14 +++++++++----- # drivers/scsi/qla2xxx/qla_rscn.c | 2 +- # 5 files changed, 25 insertions(+), 28 deletions(-) # # drivers/scsi/qla2xxx/qla_rscn.c # 2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +1 -1 # PATCH [3/15] qla2xxx: 2100 request-q contraints # # drivers/scsi/qla2xxx/qla_os.c # 2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +9 -5 # PATCH [3/15] qla2xxx: 2100 request-q contraints # # drivers/scsi/qla2xxx/qla_iocb.c # 2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +7 -7 # PATCH [3/15] qla2xxx: 2100 request-q contraints # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +5 -4 # PATCH [3/15] qla2xxx: 2100 request-q contraints # # drivers/scsi/qla2xxx/qla_def.h # 2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +3 -11 # PATCH [3/15] qla2xxx: 2100 request-q contraints # # ChangeSet # 2004/05/10 09:17:18-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [2/15] qla2xxx: Remove flash routines # # Remove flash support from embedded driver: # # o Remove unused option-rom variables from host structure. # o Remove flash manipulation routines. # # drivers/scsi/qla2xxx/qla_def.h | 2 # drivers/scsi/qla2xxx/qla_gbl.h | 8 # drivers/scsi/qla2xxx/qla_init.c | 3 # drivers/scsi/qla2xxx/qla_sup.c | 446 ---------------------------------------- # 4 files changed, 459 deletions(-) # # drivers/scsi/qla2xxx/qla_sup.c # 2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -446 # PATCH [2/15] qla2xxx: Remove flash routines # # drivers/scsi/qla2xxx/qla_init.c # 2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -3 # PATCH [2/15] qla2xxx: Remove flash routines # # drivers/scsi/qla2xxx/qla_gbl.h # 2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -8 # PATCH [2/15] qla2xxx: Remove flash routines # # drivers/scsi/qla2xxx/qla_def.h # 2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -2 # PATCH [2/15] qla2xxx: Remove flash routines # # ChangeSet # 2004/05/10 09:15:55-05:00 andrew.vasquez@qlogic.com # [PATCH] PATCH [1/15] qla2xxx: Firmware dump fixes # # ISP dump routine fixes: # # o Properly release hardware_lock in failure path. # # o Fix inability to complete ISP2100 dump, by properly # reseting the RISC after register reads. # # drivers/scsi/qla2xxx/qla_dbg.c | 34 ++++++++++++---------------------- # 1 files changed, 12 insertions(+), 22 deletions(-) # # drivers/scsi/qla2xxx/qla_dbg.c # 2004/05/03 10:12:51-05:00 andrew.vasquez@qlogic.com +12 -22 # PATCH [1/15] qla2xxx: Firmware dump fixes # # ChangeSet # 2004/05/10 09:15:12-05:00 jejb@mulgrave.(none) # MPT Fusion driver 3.01.06 update # # From: Moore, Eric Dean # # drivers/message/fusion/mptscsih.c # 2004/05/10 09:14:57-05:00 jejb@mulgrave.(none) +0 -4 # MPT Fusion driver 3.01.06 update # # drivers/message/fusion/mptbase.h # 2004/05/10 09:14:57-05:00 jejb@mulgrave.(none) +2 -2 # MPT Fusion driver 3.01.06 update # # ChangeSet # 2004/05/10 09:10:59-05:00 brking@us.ibm.com # [PATCH] Make SCSI timeout modifiable # # add a timeout field to struct scsi_device and expose it in in sysfs. # # This patch allows LLDs to override the default timeout used for scsi devices # and exposes it in sysfs. The default timeout value used is too short for # many RAID array devices, such as those created by the ipr driver. # # include/scsi/scsi_device.h # 2004/04/30 04:52:16-05:00 brking@us.ibm.com +2 -0 # Make SCSI timeout modifiable # # drivers/scsi/sd.c # 2004/04/30 04:55:42-05:00 brking@us.ibm.com +8 -3 # Make SCSI timeout modifiable # # drivers/scsi/scsi_sysfs.c # 2004/04/30 04:53:56-05:00 brking@us.ibm.com +21 -0 # Make SCSI timeout modifiable # # ChangeSet # 2004/05/10 09:56:02+01:00 aia21@cantab.net # NTFS: 2.1.9 release - Fix two bugs in the decompression engine # in handling of corner cases. # # fs/ntfs/compress.c # 2004/05/10 09:55:48+01:00 aia21@cantab.net +22 -7 # - Fix a bug where we would not always detect that we have reached the # end of a compression block because we were ending at minus one byte # which is effectively the same as being at the end. The fix is to # check whether the uncompressed buffer has been fully filled and if so # we assume we have reached the end of the compression block. A big # thank you to Marcin Gibu\x{0142}a for the bug report, the assistance in # tracking down the bug and testing the fix. # - Fix a possible bug where when a compressed read is truncated to the # end of the file, the offset inside the last page was not truncated. # # fs/ntfs/Makefile # 2004/05/10 09:55:48+01:00 aia21@cantab.net +1 -1 # Update version to 2.1.9. # # fs/ntfs/ChangeLog # 2004/05/10 09:55:48+01:00 aia21@cantab.net +13 -1 # Update for 2.1.9 release. # # Documentation/filesystems/ntfs.txt # 2004/05/10 09:55:48+01:00 aia21@cantab.net +2 -0 # Update for 2.1.9 release. # # ChangeSet # 2004/05/09 23:00:33-07:00 davem@nuts.davemloft.net # [TG3]: Do not write stats coalescing ticks reg on 5705/5750. # # drivers/net/tg3.c # 2004/05/09 23:00:16-07:00 davem@nuts.davemloft.net +8 -5 # [TG3]: Do not write stats coalescing ticks reg on 5705/5750. # # ChangeSet # 2004/05/09 22:51:30-07:00 davem@nuts.davemloft.net # [TG3]: Correct RDMAC/WDMAC mode settings on 5705/5750. # # drivers/net/tg3.h # 2004/05/09 22:51:13-07:00 davem@nuts.davemloft.net +2 -0 # [TG3]: Correct RDMAC/WDMAC mode settings on 5705/5750. # # drivers/net/tg3.c # 2004/05/09 22:51:13-07:00 davem@nuts.davemloft.net +25 -13 # [TG3]: Correct RDMAC/WDMAC mode settings on 5705/5750. # # ChangeSet # 2004/05/09 22:33:21-07:00 davem@nuts.davemloft.net # [TG3]: Double delay after writing MAC_MI_MODE reg. # # drivers/net/tg3.c # 2004/05/09 22:33:04-07:00 davem@nuts.davemloft.net +8 -8 # [TG3]: Double delay after writing MAC_MI_MODE reg. # # ChangeSet # 2004/05/09 22:29:53-07:00 davem@nuts.davemloft.net # [TG3]: Do not set CLOCK_CTRL_DELAY_PCI_GRANT on PCI Express. # # drivers/net/tg3.c # 2004/05/09 22:29:34-07:00 davem@nuts.davemloft.net +4 -2 # [TG3]: Do not set CLOCK_CTRL_DELAY_PCI_GRANT on PCI Express. # # ChangeSet # 2004/05/09 22:26:54-07:00 davem@nuts.davemloft.net # [TG3]: Fix chiprev test in previous change. # # drivers/net/tg3.c # 2004/05/09 22:26:36-07:00 davem@nuts.davemloft.net +1 -1 # [TG3]: Fix chiprev test in previous change. # # ChangeSet # 2004/05/09 22:22:49-07:00 davem@nuts.davemloft.net # [TG3]: PCI Express 5750_A0 chips need 5701_REG_WRITE_BUG treatment. # # drivers/net/tg3.c # 2004/05/09 22:22:32-07:00 davem@nuts.davemloft.net +5 -1 # [TG3]: PCI Express 5750_A0 chips need 5701_REG_WRITE_BUG treatment. # # ChangeSet # 2004/05/09 22:17:55-07:00 davem@nuts.davemloft.net # [TIGON3]: Detect and record PCI Express. # # drivers/net/tg3.h # 2004/05/09 22:17:35-07:00 davem@nuts.davemloft.net +1 -0 # [TIGON3]: Detect and record PCI Express. # # drivers/net/tg3.c # 2004/05/09 22:17:35-07:00 davem@nuts.davemloft.net +3 -0 # [TIGON3]: Detect and record PCI Express. # # ChangeSet # 2004/05/08 20:57:41-07:00 davem@nuts.davemloft.net # [TG3]: Prepare for 5750 support plus minor fixes. # # 1) Handle cases that apply to 5750 the same as 5705. # 2) Only set CLOCK_CTRL_FORCE_CLKRUN on 5705_A0 # 3) Clear out on-chip and memory stats block right before # setting MAC_MODE. # 4) On bootup chip probe, always skip PHY reset if link # is up. # # drivers/net/tg3.c # 2004/05/08 20:57:12-07:00 davem@nuts.davemloft.net +65 -46 # [TG3]: Prepare for 5750 support plus minor fixes. # # 1) Handle cases that apply to 5750 the same as 5705. # 2) Only set CLOCK_CTRL_FORCE_CLKRUN on 5705_A0 # 3) Clear out on-chip and memory stats block right before # setting MAC_MODE. # 4) On bootup chip probe, always skip PHY reset if link # is up. # # ChangeSet # 2004/05/08 20:05:09-07:00 davem@nuts.davemloft.net # [TG3]: Add 5750 chip and PHY IDs. # # drivers/net/tg3.h # 2004/05/08 20:04:52-07:00 davem@nuts.davemloft.net +5 -1 # [TG3]: Add 5750 chip and PHY IDs. # # ChangeSet # 2004/05/08 19:54:32-07:00 davem@nuts.davemloft.net # [TG3]: Add 572x/575x PCI IDs. # # include/linux/pci_ids.h # 2004/05/08 19:54:13-07:00 davem@nuts.davemloft.net +5 -0 # [TG3]: Add 572x/575x PCI IDs. # # drivers/pci/pci.ids # 2004/05/08 19:54:13-07:00 davem@nuts.davemloft.net +10 -0 # [TG3]: Add 572x/575x PCI IDs. # # ChangeSet # 2004/05/07 14:22:49-07:00 greg@kroah.com # Add modules to sysfs # # This patch adds basic kobject support to struct module, and it creates a # /sys/module directory which contains all of the individual modules. Each # module currently exports the refcount (if they are unloadable) and any # module paramaters that are marked exportable in sysfs. # # Was written by me and Rusty over and over many times during the past 6 months. # # kernel/params.c # 2004/05/07 14:22:37-07:00 greg@kroah.com +1 -1 # Add modules to sysfs # # This patch adds basic kobject support to struct module, and it creates a # /sys/module directory which contains all of the individual modules. Each # module currently exports the refcount (if they are unloadable) and any # module paramaters that are marked exportable in sysfs. # # Was written by me and Rusty over and over many times during the past 6 months. # # kernel/module.c # 2004/05/07 14:22:37-07:00 greg@kroah.com +160 -0 # Add modules to sysfs # # This patch adds basic kobject support to struct module, and it creates a # /sys/module directory which contains all of the individual modules. Each # module currently exports the refcount (if they are unloadable) and any # module paramaters that are marked exportable in sysfs. # # Was written by me and Rusty over and over many times during the past 6 months. # # include/linux/moduleparam.h # 2004/05/07 14:22:37-07:00 greg@kroah.com +2 -2 # Add modules to sysfs # # This patch adds basic kobject support to struct module, and it creates a # /sys/module directory which contains all of the individual modules. Each # module currently exports the refcount (if they are unloadable) and any # module paramaters that are marked exportable in sysfs. # # Was written by me and Rusty over and over many times during the past 6 months. # # include/linux/module.h # 2004/05/07 14:22:37-07:00 greg@kroah.com +25 -0 # Add modules to sysfs # # This patch adds basic kobject support to struct module, and it creates a # /sys/module directory which contains all of the individual modules. Each # module currently exports the refcount (if they are unloadable) and any # module paramaters that are marked exportable in sysfs. # # Was written by me and Rusty over and over many times during the past 6 months. # # ChangeSet # 2004/05/07 16:05:39-05:00 shaggy@austin.ibm.com # JFS: [CHECKER] More robust error recovery in add_index # # If an error is encountered in add_index, it now leaves the index table # in a consistent state. Since the return value is stored in the # directory entry regardless of add_index's success, return zero # instead of -EPERM (which made no sense). # # fs/jfs/jfs_dtree.c # 2004/05/07 16:05:21-05:00 shaggy@austin.ibm.com +16 -12 # Clean up add_index failure # # ChangeSet # 2004/05/07 10:32:36-05:00 shaggy@austin.ibm.com # JFS: reduce stack usage # # fs/jfs/jfs_dtree.c # 2004/05/07 10:32:20-05:00 shaggy@austin.ibm.com +34 -14 # Get long unicode names off the stack # # ChangeSet # 2004/05/07 09:38:25-05:00 shaggy@austin.ibm.com # JFS: Avoid race invalidating metadata page # # fs/jfs/jfs_metapage.h # 2004/05/07 09:38:07-05:00 shaggy@austin.ibm.com +1 -0 # Avoid race between __get_metapage & release_metapage # # fs/jfs/jfs_metapage.c # 2004/05/07 09:38:07-05:00 shaggy@austin.ibm.com +67 -40 # Avoid race between __get_metapage & release_metapage # # ChangeSet # 2004/05/06 22:45:23-04:00 jgarzik@redhat.com # Merge redhat.com:/spare/repo/linux-2.6 # into redhat.com:/spare/repo/libata-2.6 # # include/linux/pci_ids.h # 2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # drivers/scsi/sata_vsc.c # 2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -4 # Auto merged # # drivers/scsi/sata_sis.c # 2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -0 # Auto merged # # ChangeSet # 2004/05/05 16:43:11-07:00 Matt_Domsch@dell.com # [PATCH] PCI: PCI devices with no PCI_CACHE_LINE_SIZE implemented # # On Wed, May 05, 2004 at 03:31:02PM -0700, Greg KH wrote: # > On Thu, Apr 29, 2004 at 02:53:01PM -0500, Matt Domsch wrote: # > > a) need this be a warning, wouldn't KERN_DEBUG suffice, if a message # > > is needed at all? This is printed in pci_generic_prep_mwi(). # > # > Yes, we should make that KERN_DEBUG. I don't have a problem with that. # > Care to make a patch? # # drivers/pci/pci.c # 2004/05/05 10:39:08-07:00 Matt_Domsch@dell.com +1 -1 # PCI: PCI devices with no PCI_CACHE_LINE_SIZE implemented # # ChangeSet # 2004/05/05 16:14:40-07:00 hunold@convergence.de # [PATCH] I2C: add .class to i2c drivers # # in the "[RFC|PATCH][2.6] Additional i2c adapter flags for i2c client # isolation" thread, the i2c people have agreed that an ".class" field # should be added to struct i2c_driver. # # Currently only drivers do checks for plausibility ("Is this an adapter I # can attach to?"), but adapters don't have a chance to keep drivers away # from their bus. # # If both drivers and adapters provide a .class entry, the i2c-core can # easily compare them and let devices only probe on busses where they can # really exist. # # Real world example: DVB i2c adapters cannot ensure that only known DVB # i2c chipsets probe their busses. Most client drivers probe every bus # they get their hands on. This will confuse some DVB i2c busses. # # With the new I2C_CLASS_ALL flag it will be possible that an adapter can # request that really all drivers are probed on the adapter. On the other # hand, drivers can make sure that they get the chance to probe on every # i2c adapter out there (this is not encouraged, though) # # The attached patch does the first step: # - add .class member to struct i2c_device # - remove unused .flags member from struct i2c_adapter # - rename I2C_ADAP_CLASS_xxx to I2C_CLASS_xxx (to be used both for # drivers and adapters) # - add new I2C_CLASS_ALL and I2C_CLASS_SOUND classes # - follow these changes in the existing drivers with copy & paste # # include/linux/i2c.h # 2004/05/05 09:29:31-07:00 hunold@convergence.de +9 -7 # I2C: add .class to i2c drivers # # drivers/usb/media/w9968cf.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/tvmixer.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/tvaudio.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/tuner.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/tda9887.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/tda9875.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/tda7432.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/saa7134/saa7134-i2c.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/saa7134/saa6752hs.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/saa5249.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/saa5246a.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/mxb.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/msp3400.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/hexium_orion.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/hexium_gemini.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/dpc7146.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/media/video/cx88/cx88-i2c.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/media/video/bttv-i2c.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +4 -4 # I2C: add .class to i2c drivers # # drivers/media/video/bt832.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/w83l785ts.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/w83781d.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/via686a.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/lm90.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/lm83.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/lm80.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/lm78.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/lm75.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/it87.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/gl518sm.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/fscher.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/asb100.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/chips/adm1021.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-voodoo3.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-viapro.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-via.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-sis96x.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-sis630.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-sis5595.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-piix4.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-parport.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-parport-light.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-nforce2.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-isa.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-i801.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-amd8111.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-amd756.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-ali15x3.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-ali1563.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # drivers/i2c/busses/i2c-ali1535.c # 2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1 # I2C: add .class to i2c drivers # # Documentation/i2c/porting-clients # 2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2 # I2C: add .class to i2c drivers # # ChangeSet # 2004/05/05 15:34:40-07:00 khali@linux-fr.org # [PATCH] I2C: Fix memory leaks in w83781d and asb100 # # Quoting myself # # > U-ho. I think I've introduced a memory leak with this patch :( # > # > For drivers that handle subclients (asb100 and w83781d on i2c), the # > sublient memory is never released if I read the code correctly. This # > is because we now free the private data on unload, assuming that it # > contains the i2c client data as well. That's true for the main i2c # > client, but not for the subclients (data == NULL so nothing is freed). # > # > Could someone take a look and confirm? # # I could test and actually saw memory leaking when cycling the w83781d # driver at a sustained rate (5/s). # # > I can see two different fixes: # > # > 1* When freeing the memory, free the data if it's not NULL (main # > client), else free client (subclients). Cleaner (I suppose?). # > # > 2* When creating subclients, do data = &client instead of data = NULL. # > Then freeing will work. Less code, faster. Are there side effects? (I # > don't think so) # > # > My preference would go to 2*. # # I ended up implementing 1*. That's cleaner and there's actually almost # no extra code. # # Mark, can you confirm that I'm doing the correct thing? I'll do # something similar in our CVS repository (for now, the asb100 and w83781d # drivers had not their memory allocation scheme reworked there). # # drivers/i2c/chips/w83781d.c # 2004/05/02 14:51:11-07:00 khali@linux-fr.org +7 -1 # I2C: Fix memory leaks in w83781d and asb100 # # drivers/i2c/chips/asb100.c # 2004/05/02 14:51:17-07:00 khali@linux-fr.org +7 -1 # I2C: Fix memory leaks in w83781d and asb100 # # ChangeSet # 2004/05/05 15:34:20-07:00 khali@linux-fr.org # [PATCH] I2C: Rewrite temperature conversions in via686a driver # # The following patch rewrites the temperature conversion macros and # functions found in the via686a chip driver. Contrary to the voltage # conversions a few weeks ago, temperature conversions were numerically # correct, but artificially complex. The new ones are cleaner. It also # fixes a highly improbable array overflow (would take one of the measured # temperatures to be over 145 degrees C). # # Successfully tested by Mark D. Studebaker and I, and already applied to # our CVS repository. # # drivers/i2c/chips/via686a.c # 2004/05/01 10:26:35-07:00 khali@linux-fr.org +21 -42 # I2C: Rewrite temperature conversions in via686a driver # # ChangeSet # 2004/05/05 15:34:00-07:00 khali@linux-fr.org # [PATCH] I2C: Invert as99127f beep bits in kernel space # # The following patch changes the way we invert beep bits for the AS99127F # sensor chip. This chip behaves differently from the other chips in that # a disabled bit is 1, not 0. So far we didn't handle that specificity in # the w83781d driver, so it was left to user-space applications to handle # it. For the sake of uniformity, it's obviously better if it's done in # the driver instead (although the meaning of each bit is still # chip-dependant). # # I already did a similar change to the 2.4 driver and the sensors # program. I don't think that many user-space application will be # affected, since most of them don't handle the beep mask as far as I can # tell. # # This also close Debian bug #209299: # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=209299 # # Successfully tested on my AS99127F rev.1 chip. Aurelien Jarno also # checked that there were no regression on non-Asus chips. # # drivers/i2c/chips/w83781d.c # 2004/05/02 08:09:44-07:00 khali@linux-fr.org +16 -10 # I2C: Invert as99127f beep bits in kernel space # # ChangeSet # 2004/05/05 15:33:39-07:00 khali@linux-fr.org # [PATCH] I2C: Sensors (W83627HF) in Tyan S2882 # # drivers/i2c/chips/Kconfig # 2004/04/19 12:21:53-07:00 khali@linux-fr.org +1 -1 # I2C: Sensors (W83627HF) in Tyan S2882 # # ChangeSet # 2004/05/05 15:10:00-07:00 bellucda@tiscali.it # [PATCH] missing audit in bus_register() # # |How about using a goto on the error path to clean up properly # |instead of the different return sections. # # .. here goes Take 2: # # drivers/base/bus.c # 2004/04/28 11:45:19-07:00 bellucda@tiscali.it +18 -3 # missing audit in bus_register() # # ChangeSet # 2004/05/05 14:40:43-07:00 greg@kroah.com # Driver core: handle error if we run out of memory in kmap code # # drivers/base/map.c # 2004/05/05 07:39:44-07:00 greg@kroah.com +7 -0 # Driver core: handle error if we run out of memory in kmap code # # ChangeSet # 2004/05/05 14:32:49-07:00 herbert@gondor.apana.org.au # [PATCH] USB Storage: Sony Clie # # I've received the following report which indicates that the Sony Clie needs # the US_FL_FIX_INQUIRY flag set. # # http://bugs.debian.org/243650 # # drivers/usb/storage/unusual_devs.h # 2004/04/16 17:47:39-07:00 herbert@gondor.apana.org.au +7 -0 # USB Storage: Sony Clie # # ChangeSet # 2004/05/05 14:20:44-07:00 lxiep@us.ibm.com # [PATCH] PCI Hotplug: rpaphp doesn't initialize slot's name # # Attached is a revised version of rpaphp.patch. It has the following fixes: # - Set up slot->name # - Kill some dbgs # - Eike's fixes # - New fixes for incorrect "goto" in rpaphp_slot.c. # # ChangeSet # 2004/05/05 14:10:42-07:00 stern@rowland.harvard.edu # [PATCH] PATCH: (as268) Import device-reset changes from gadget-2.6 tree # # This patch imports the changes that David Brownell has made to the # device-reset functions in his gadget-2.6 tree. Once these ongoing # troubling questions about locking are settled, I'll add support for the # "descriptors changed" case. # # drivers/usb/core/hub.c # 2004/05/03 08:02:43-07:00 stern@rowland.harvard.edu +99 -97 # PATCH: (as268) Import device-reset changes from gadget-2.6 tree # # ChangeSet # 2004/05/05 13:44:44-07:00 al.fracchetti@tin.it # [PATCH] USB Storage: Kyocera Finecsm 3L -unusual_devs.h # # drivers/usb/storage/unusual_devs.h # 2004/03/27 10:48:01-08:00 al.fracchetti@tin.it +6 -0 # USB Storage: Kyocera Finecsm 3L -unusual_devs.h # # ChangeSet # 2004/05/05 13:36:39-07:00 stern@rowland.harvard.edu # [PATCH] USB: Small change to CPiA USB driver # # Only one aspect of it is notable: The CPiA USB # driver calls usb_driver_release_interface() during its disconnect() # routine. That doesn't appear to be necessary, since it didn't call # usb_driver_claim_interface() beforehand and since the interface will be # released automatically when disconnect() returns. # # drivers/media/video/cpia_usb.c # 2004/04/27 06:54:33-07:00 stern@rowland.harvard.edu +1 -3 # USB: Small change to CPiA USB driver # # ChangeSet # 2004/05/05 13:36:11-07:00 stern@rowland.harvard.edu # [PATCH] USB Storage: unusual_devs.h update # # On 4 May 2004, Rajesh Kumble Nayak wrote: # # > The Above patch work fine for Sony Hc-85 # > I shall post the dmesg entry soon. # > # > With many thanks # > Rajesh # # Greg and Pete, here's the patch. It's possible that this entry could be # combined with the previous one, but until we know definitely they should # be kept separate. # # drivers/usb/storage/unusual_devs.h # 2004/04/29 07:42:22-07:00 stern@rowland.harvard.edu +7 -0 # USB Storage: unusual_devs.h update # # ChangeSet # 2004/05/05 13:35:43-07:00 stern@rowland.harvard.edu # [PATCH] USB: Reduce kernel stack usage # # This patch allocates a temporary array from the heap instead of from the # kernel's stack in usb_set_configuration(). It also updates a few # comments. Please apply. # # drivers/usb/core/message.c # 2004/05/03 03:26:40-07:00 stern@rowland.harvard.edu +23 -12 # USB: Reduce kernel stack usage # # ChangeSet # 2004/05/05 13:35:14-07:00 daniel.ritz@gmx.ch # [PATCH] USB: add support for eGalax Touchscreen USB # # this is the second version of the patch to add support for eGalax Touchkit USB # touchscreen. changes since last patch: # - fixed the bug in open, found by oliver neukum # - renamed driver from touchkit.c to touchkitusb.c (since the thing also exists # as RS232, PS/2 and I2C) # - some minor coding style updates # # drivers/usb/input/touchkitusb.c # 2004/05/02 07:32:32-07:00 daniel.ritz@gmx.ch +310 -0 # USB: add support for eGalax Touchscreen USB # # drivers/usb/input/Makefile # 2004/04/25 09:18:58-07:00 daniel.ritz@gmx.ch +1 -0 # USB: add support for eGalax Touchscreen USB # # drivers/usb/input/Kconfig # 2004/05/01 10:40:50-07:00 daniel.ritz@gmx.ch +13 -0 # USB: add support for eGalax Touchscreen USB # # drivers/usb/input/touchkitusb.c # 2004/05/02 07:32:32-07:00 daniel.ritz@gmx.ch +0 -0 # BitKeeper file /home/greg/linux/BK/usb-2.6/drivers/usb/input/touchkitusb.c # # ChangeSet # 2004/05/05 13:34:46-07:00 david-b@pacbell.net # [PATCH] USB: usbnet handles Billionton Systems USB2AR # # This adds another ax8817x device to "usbnet". # # drivers/usb/net/usbnet.c # 2004/04/26 14:32:52-07:00 david-b@pacbell.net +4 -0 # USB: usbnet handles Billionton Systems USB2AR # # ChangeSet # 2004/05/05 13:34:16-07:00 stefan.eletzhofer@eletztrick.de # [PATCH] USB Gadget: fix g_serial debug module parm # # g_serial.ko can't be load as module because "debug" is only # defined if G_SERIAL_DEBUG is defined, but "debug" is referenced # in MODULE_PARM(). # # drivers/usb/gadget/serial.c # 2004/05/04 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +5 -1 # USB Gadget: fix g_serial debug module parm # # ChangeSet # 2004/05/05 13:33:47-07:00 stefan.eletzhofer@eletztrick.de # [PATCH] USB Gadget: fix pxa define in gadget_chips.h # # below is a trivial patch which fixes the PXA gadget define # in drivers/linux/usb/gadget/gadget_chips.h # # Everywhere CONFIG_USB_GADGET_PXA2XX is used, except in that file, which # bites obviously ... # # # Fix define for PXA UDC. # # drivers/usb/gadget/gadget_chips.h # 2004/05/04 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +1 -1 # USB Gadget: fix pxa define in gadget_chips.h # # ChangeSet # 2004/05/05 12:13:23-07:00 greg@kroah.com # USB: add support for Zire 31 devices. # # Info was from Adriaan de Groot # # drivers/usb/serial/visor.h # 2004/05/05 05:12:42-07:00 greg@kroah.com +1 -0 # USB: add support for Zire 31 devices. # # Info was from Adriaan de Groot # # drivers/usb/serial/visor.c # 2004/05/05 05:12:42-07:00 greg@kroah.com +3 -0 # USB: add support for Zire 31 devices. # # Info was from Adriaan de Groot # # ChangeSet # 2004/05/05 12:09:08-07:00 greg@kroah.com # PCI Hotplug: revert broken PCI Express hotplug patch # # drivers/pci/hotplug/pciehp_core.c # 2004/05/05 05:08:03-07:00 greg@kroah.com +32 -34 # PCI Hotplug: revert broken PCI Express hotplug patch # # ChangeSet # 2004/05/04 14:16:58-07:00 olh@suse.de # [PATCH] add simple class for adb # # This adds /sys/class/adb/, removes unused devfs lines and updates a # comment to match reality. # # drivers/macintosh/adb.c # 2004/05/01 10:58:08-07:00 olh@suse.de +13 -6 # add simple class for adb # # ChangeSet # 2004/05/04 16:50:21-04:00 jgarzik@redhat.com # [netdrvr b44] use miilib for MII ioctl handling # # drivers/net/b44.h # 2004/05/04 16:50:16-04:00 jgarzik@redhat.com +2 -0 # [netdrvr b44] use miilib for MII ioctl handling # # drivers/net/b44.c # 2004/05/04 16:50:16-04:00 jgarzik@redhat.com +34 -31 # [netdrvr b44] use miilib for MII ioctl handling # # ChangeSet # 2004/05/04 16:36:29-04:00 jgarzik@redhat.com # [netdrvr b44] use netdev_priv # # drivers/net/b44.c # 2004/05/04 16:36:24-04:00 jgarzik@redhat.com +16 -14 # [netdrvr b44] use netdev_priv # # ChangeSet # 2004/05/04 16:33:55-04:00 jgarzik@redhat.com # [netdrvr b44] ethtool_ops support # # drivers/net/b44.c # 2004/05/04 16:33:50-04:00 jgarzik@redhat.com +195 -210 # [netdrvr b44] ethtool_ops support # # ChangeSet # 2004/05/04 09:30:28-05:00 akpm@osdl.org # [PATCH] support swsusp for aic7xxx # # From: Pavel Machek # # Marks threads as needed for suspend. # DESC # aic79xx_osm.c build fix # EDESC # # drivers/scsi/aic7xxx/aic79xx_osm.c: In function `ahd_linux_dv_thread': # drivers/scsi/aic7xxx/aic79xx_osm.c:2594: `PF_IOTHREAD' undeclared (first use in this function) # # drivers/scsi/aic7xxx/aic7xxx_osm.c # 2004/04/26 01:09:37-05:00 akpm@osdl.org +1 -0 # support swsusp for aic7xxx # # drivers/scsi/aic7xxx/aic79xx_osm.c # 2004/04/26 01:09:37-05:00 akpm@osdl.org +1 -0 # support swsusp for aic7xxx # # ChangeSet # 2004/05/04 09:25:05-05:00 rddunlap@osdl.org # [PATCH] (3/5) ncr53c8x: use kernel.h min/max # # From: Michael Veeck # Subject: [Kernel-janitors] [PATCH] drivers/scsi/53c* MIN/MAX removal # # # Patch (against 2.6.6-rc1) removes unnecessary min/max macros and changes # calls to use kernel.h macros instead. # # # drivers/scsi/ncr53c8xx.c | 6 +++--- # drivers/scsi/sym53c8xx_comm.h | 5 +---- # 2 files changed, 4 insertions(+), 7 deletions(-) # # drivers/scsi/sym53c8xx_comm.h # 2004/04/23 00:32:08-05:00 rddunlap@osdl.org +1 -4 # (3/5) ncr53c8x: use kernel.h min/max # # drivers/scsi/ncr53c8xx.c # 2004/04/23 00:32:08-05:00 rddunlap@osdl.org +3 -3 # (3/5) ncr53c8x: use kernel.h min/max # # ChangeSet # 2004/05/04 09:24:23-05:00 rddunlap@osdl.org # [PATCH] (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE # # From: Michael Veeck # Subject: [Kernel-janitors] [PATCH] drivers/scsi/nsp MIN/MAX/NUMBER removal # # Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and # changes calls to use kernel.h macros instead. # # # drivers/scsi/nsp32.c | 24 ++++++++++++------------ # drivers/scsi/nsp32.h | 4 ---- # 2 files changed, 12 insertions(+), 16 deletions(-) # # drivers/scsi/nsp32.h # 2004/04/23 00:34:00-05:00 rddunlap@osdl.org +0 -4 # (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE # # drivers/scsi/nsp32.c # 2004/04/23 00:34:00-05:00 rddunlap@osdl.org +12 -12 # (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE # # ChangeSet # 2004/05/04 09:23:43-05:00 rddunlap@osdl.org # [PATCH] (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE # # From: Michael Veeck # Subject: [Kernel-janitors] [PATCH] drivers/scsi/aic7xxx_old MIN/MAX/NUMBER # removal # # Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and # changes calls to use kernel.h macros instead. # # # drivers/scsi/aic7xxx_old.c | 43 ++++++++++++++------------------ # drivers/scsi/aic7xxx_old/aic7xxx_proc.c | 6 ++-- # 2 files changed, 23 insertions(+), 26 deletions(-) # # drivers/scsi/aic7xxx_old/aic7xxx_proc.c # 2004/04/23 00:31:11-05:00 rddunlap@osdl.org +3 -3 # (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE # # drivers/scsi/aic7xxx_old.c # 2004/04/23 00:31:11-05:00 rddunlap@osdl.org +20 -23 # (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE # # ChangeSet # 2004/05/04 09:22:56-05:00 rddunlap@osdl.org # [PATCH] (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE # # From: Michael Veeck # Subject: [Kernel-janitors] [PATCH] drivers/scsi/pcmcia MIN/MAX/NUMBER removal # # # Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and # changes calls to use kernel.h macros instead. # # # drivers/scsi/pcmcia/nsp_cs.c | 12 ++++++------ # drivers/scsi/pcmcia/nsp_cs.h | 2 -- # 2 files changed, 6 insertions(+), 8 deletions(-) # # drivers/scsi/pcmcia/nsp_cs.h # 2004/04/23 00:34:49-05:00 rddunlap@osdl.org +0 -2 # (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE # # drivers/scsi/pcmcia/nsp_cs.c # 2004/04/23 00:34:49-05:00 rddunlap@osdl.org +6 -6 # (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE # # ChangeSet # 2004/05/04 09:21:23-05:00 akpm@osdl.org # [PATCH] aic7xxx deadlock fix # # We cannot call del_timer_sync() from within that timer's handler function! # # drivers/scsi/aic7xxx/aic7xxx_osm.c # 2004/04/26 01:09:29-05:00 akpm@osdl.org +9 -3 # aic7xxx deadlock fix # # ChangeSet # 2004/05/04 09:19:18-05:00 jeremy@sgi.com # [PATCH] minor changes to qla1280 driver # # On one of our big machines we found a problem with posted writes while # running AIM. # # Two writes of the Request Queue In pointer went out of order, making # the chip think that it had a queue wrap. # # I took advantage of this opportunity to add relaxed reads, which helps # the Altix. It should not affect other arches. All reads are relaxed # except for the read of the Semaphore register. # # drivers/scsi/qla1280.h # 2004/04/22 14:26:22-05:00 jeremy@sgi.com +2 -1 # minor changes to qla1280 driver # # drivers/scsi/qla1280.c # 2004/04/22 14:26:22-05:00 jeremy@sgi.com +4 -1 # minor changes to qla1280 driver # # ChangeSet # 2004/05/04 09:17:25-05:00 stern@rowland.harvard.edu # [PATCH] PATCH: (as255) Handle Unit Attention during INQUIRY better # # Some buggy USB storage devices can return Unit Attention status for # INQUIRY commands. The current code in scsi_scan.c checks for ASC = 0x28 = # Not ready to ready transition, but these devices can also return ASC = # 0x29 = Power-on or reset occurred. In addition, the code doesn't retry # the INQUIRY when these codes are received. # # drivers/scsi/scsi_scan.c # 2004/04/21 12:04:15-05:00 stern@rowland.harvard.edu +13 -7 # PATCH: (as255) Handle Unit Attention during INQUIRY better # # ChangeSet # 2004/05/04 09:12:32-05:00 rct@gherkin.frus.com # [PATCH] sym53c500_cs PCMCIA SCSI driver (round 5) # # Fifth attempt at a PCMCIA SCSI driver for the Symbios 53c500 # controller. This version has all the cleanup Christoph has requested # to date, including removal of support for the obsolete (in 2.6) # proc_info functionality. # # Support for additional sysfs class device attributes has been added: # two are read-only (irq, ioport), one is read-write (fast_pio). The # read-write attribute is a per-instance flag indicating the PIO speed # of the particular HBA: valid values are 1 (enabled -- default) and 0 # (disabled). # # Documentation/scsi/sym53c500_cs.txt # 2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +23 -0 # sym53c500_cs PCMCIA SCSI driver (round 5) # # drivers/scsi/pcmcia/Makefile # 2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +1 -0 # sym53c500_cs PCMCIA SCSI driver (round 5) # # drivers/scsi/pcmcia/Kconfig # 2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +10 -0 # sym53c500_cs PCMCIA SCSI driver (round 5) # # Documentation/scsi/sym53c500_cs.txt # 2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6/Documentation/scsi/sym53c500_cs.txt # # Documentation/scsi/00-INDEX # 2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +2 -0 # sym53c500_cs PCMCIA SCSI driver (round 5) # # drivers/scsi/pcmcia/sym53c500_cs.c # 2004/05/03 19:18:28-05:00 rct@gherkin.frus.com +1076 -0 # sym53c500_cs PCMCIA SCSI driver (round 5) # # drivers/scsi/pcmcia/sym53c500_cs.c # 2004/05/03 19:18:28-05:00 rct@gherkin.frus.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/pcmcia/sym53c500_cs.c # # ChangeSet # 2004/05/03 14:18:33-07:00 tejohnson@yahoo.com # [PATCH] USB: update for mtouchusb # # The attached patch for the 3M Touch Systems Capacitive controller. (again) # # Quick list of changes: # # * decrease mtouch->open counter in the event of a urb submission # failure # # The changes are due to comments Oliver Neukum's comments on the # touchkit.c driver. Good catch! Sorry I missed it. # # http://marc.theaimsgroup.com/?l=linux-usb-devel&m=108343028201159&w=2 # # drivers/usb/input/mtouchusb.c # 2004/05/02 09:37:18-07:00 tejohnson@yahoo.com +3 -1 # USB: update for mtouchusb # # ChangeSet # 2004/05/03 14:17:38-07:00 stern@rowland.harvard.edu # [PATCH] USB: Altsetting update for USB IrDA driver # # This patch updates the USB IrDA driver to take into account that the # kernel may no longer store altsetting entries in numerical order. # The driver only needed one change; this was a simple matter of using the # entry corresponding to the altsetting that was just installed. # # drivers/net/irda/irda-usb.c # 2004/05/03 03:37:59-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting update for USB IrDA driver # # ChangeSet # 2004/05/03 14:16:51-07:00 c.lucas@ifrance.com # [PATCH] USB: esthetic and trivial patch. # # include/linux/usb.h # 2004/05/02 23:42:51-07:00 c.lucas@ifrance.com +1 -1 # USB: esthetic and trivial patch. # # ChangeSet # 2004/05/02 21:56:49-07:00 tony.cureington@hp.com # [TG3]: Add eeprom dump support. # # drivers/net/tg3.c # 2004/05/02 21:56:36-07:00 tony.cureington@hp.com +68 -0 # [TG3]: Add eeprom dump support. # # ChangeSet # 2004/05/02 20:30:19-07:00 kenn@linux.ie # [PATCH] Re: Platform device matching # # On Mon, Apr 26, 2004 at 12:27:33AM +0100, Russell King wrote: # > So, this comment needs updating: # > # > * So, extract the from the device, and compare it against # > * the name of the driver. Return whether they match or not. # # Want a patch? # # drivers/base/platform.c # 2004/04/25 16:33:43-07:00 kenn@linux.ie +3 -2 # Re: Platform device matching # # ChangeSet # 2004/05/02 20:29:59-07:00 hannal@us.ibm.com # [PATCH] add class support to drivers/char/tipar.c # # This patch adds class support to the Texas Instruments graphing calculators # with a parallel link cable. # # I have verified it compiles. If someone has the hardware please verify it works. # # drivers/char/tipar.c # 2004/04/28 13:48:10-07:00 hannal@us.ibm.com +42 -7 # add class support to drivers/char/tipar.c # # ChangeSet # 2004/05/02 20:29:41-07:00 hannal@us.ibm.com # [PATCH] add class support to drivers/block/paride/pt.c # # This patch adds class support to pt.c which "the high-level driver for parallel # port ATAPI tape drives based on chips supported by the paride module." Which I # dont have in order to test. # # I have verified it compiles but can not test it. If someone who has the # hardware could I would appreciate it. # # drivers/block/paride/pt.c # 2004/04/16 16:09:52-07:00 hannal@us.ibm.com +45 -9 # add class support to drivers/block/paride/pt.c # # ChangeSet # 2004/05/02 20:29:22-07:00 hannal@us.ibm.com # [PATCH] add class support to drivers/block/paride/pg.c # # This patch adds class support to pg.c, the parallel port generic ATAPI device driver. # # I have verified it compiles but do not have the hardware. If someone does and # could test that would be helpful. # # drivers/block/paride/pg.c # 2004/04/21 14:50:32-07:00 hannal@us.ibm.com +38 -10 # add class support to drivers/block/paride/pg.c # # ChangeSet # 2004/05/02 20:28:58-07:00 hannal@us.ibm.com # [PATCH] Add class support to drivers/char/ip2main.c # # drivers/char/ip2main.c # 2004/04/14 10:08:00-07:00 hannal@us.ibm.com +39 -5 # Add class support to drivers/char/ip2main.c # # ChangeSet # 2004/05/02 20:28:38-07:00 sebek64@post.cz # [PATCH] Class support for ppdev.c # # drivers/char/ppdev.c # 2004/04/13 10:25:50-07:00 sebek64@post.cz +43 -2 # Class support for ppdev.c # # ChangeSet # 2004/05/01 23:04:01-07:00 stefan.eletzhofer@eletztrick.de # [PATCH] I2C: add I2C epson 8564 RTC chip driver # # Add support for the Epson 8564 RTC chip. # # drivers/i2c/chips/rtc8564.h # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +78 -0 # I2C: add I2C epson 8564 RTC chip driver # # drivers/i2c/chips/rtc8564.h # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +0 -0 # BitKeeper file /home/greg/linux/BK/i2c-2.6/drivers/i2c/chips/rtc8564.h # # drivers/i2c/chips/rtc8564.c # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +396 -0 # I2C: add I2C epson 8564 RTC chip driver # # drivers/i2c/chips/Makefile # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +1 -0 # I2C: add I2C epson 8564 RTC chip driver # # drivers/i2c/chips/Kconfig # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +10 -0 # I2C: add I2C epson 8564 RTC chip driver # # drivers/i2c/chips/rtc8564.c # 2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +0 -0 # BitKeeper file /home/greg/linux/BK/i2c-2.6/drivers/i2c/chips/rtc8564.c # # ChangeSet # 2004/05/01 22:35:09-07:00 dsaxena@plexity.net # [PATCH] I2C: Update IXP4xx I2C bus driver # # The 2.6 IXP4xx code has been cleaned up to change all references to # IXP42x/IXP425 with IXP4xx. The following patch updates the I2C bits. # Before applying, you need to 'bk move i2c-ixp42x.c ixp-4xx.c". # # drivers/i2c/busses/i2c-ixp4xx.c # 2004/04/14 16:44:56-07:00 dsaxena@plexity.net +57 -52 # I2C: Update IXP4xx I2C bus driver # # drivers/i2c/busses/Makefile # 2004/04/15 09:26:47-07:00 dsaxena@plexity.net +1 -1 # I2C: Update IXP4xx I2C bus driver # # drivers/i2c/busses/Kconfig # 2004/04/15 09:26:47-07:00 dsaxena@plexity.net +5 -5 # I2C: Update IXP4xx I2C bus driver # # ChangeSet # 2004/05/01 22:34:26-07:00 kevin@koconnor.net # [PATCH] I2C: support I2C_M_NO_RD_ACK in i2c-algo-bit # # I have an I2C device (Samsung ks0127 video grabber) with a peculiar i2c # implementation. When reading bytes, it only senses for the stop condition # in the place where the acknowledge bit should be. So, to properly support # this device acks need to be turned off during reads. # # There is an I2C_M_NO_RD_ACK bit already defined in i2c.h which appears to # be what I want. Unfortunately it doesn't seem to be used anywhere in the # current tree. At the end of this message is a patch to teach i2c_algo_bit # to honor the bit. # # drivers/i2c/algos/i2c-algo-bit.c # 2004/04/19 21:35:39-07:00 kevin@koconnor.net +7 -3 # I2C: support I2C_M_NO_RD_ACK in i2c-algo-bit # # ChangeSet # 2004/05/01 22:33:50-07:00 khali@linux-fr.org # [PATCH] I2C: Voltage conversions in via686a # # My previous patch was actually not correct, reading from the chip's # registers was fixed but writing limits to it wasn't. This new version of # the patch should be better. Sorry for the trouble. # # drivers/i2c/chips/via686a.c # 2004/04/25 14:51:00-07:00 khali@linux-fr.org +24 -32 # I2C: Voltage conversions in via686a # # ChangeSet # 2004/05/01 22:32:34-07:00 greg@kroah.com # I2C: rename i2c-ip4xx.c driver # # drivers/i2c/busses/i2c-ixp4xx.c # 2004/05/01 22:31:27-07:00 greg@kroah.com +0 -0 # Rename: drivers/i2c/busses/i2c-ixp42x.c -> drivers/i2c/busses/i2c-ixp4xx.c # # ChangeSet # 2004/05/01 21:36:29-07:00 akpm@osdl.org # [PATCH] PCI Hotplug: pciehp-linkage-fix.patch # # This fixes allyesconfig # # drivers/pci/hotplug/pciehp_core.c # 2004/05/01 18:59:19-07:00 akpm@osdl.org +5 -5 # PCI Hotplug: pciehp-linkage-fix.patch # # ChangeSet # 2004/05/01 16:47:38-07:00 khali@linux-fr.org # [PATCH] I2C: Add LM99 support to the lm90 driver # # The following patch adds support for the LM99 chip to the lm90 driver, # on popular request. The nVidia GeForce FX 5900 series cards have such a # chip on-board for monitoring the GPU temperature. # # Relevant pointers: # http://archives.andrew.net.au/lm-sensors/msg07671.html # http://secure.netroedge.com/~lm78/readticket.cgi?ticket=1661 # http://secure.netroedge.com/~lm78/readticket.cgi?ticket=1662 # # Additional effects of the patch: # # * Do not consider the lm90 driver experimental anymore. I have had # enough testers and not a single problem report, the driver is working # OK. # # * Support the LM89. According to the datasheets, it is exactly the same # chip as the LM99 (to the chip ID). We've never seen this chip in a # computer so far, but it doesn't cost anything to support it (actually we # cannot not support it, since we have no way to differenciate with the # LM99). # # * Scan two addresses instead of one. The LM99 and LM89 have a "-1" # variant using an alternate address. # # * Update copyright year. # # * Reword the identification code a bit. It is hopefully slightly less # unreadable. # # This patch was successfully tested by Corey Hickey. # # drivers/i2c/chips/lm90.c # 2004/04/23 12:40:28-07:00 khali@linux-fr.org +37 -12 # I2C: Add LM99 support to the lm90 driver # # drivers/i2c/chips/Kconfig # 2004/04/23 11:33:15-07:00 khali@linux-fr.org +3 -3 # I2C: Add LM99 support to the lm90 driver # # ChangeSet # 2004/05/01 16:24:00-07:00 msdemlei@cl.uni-heidelberg.de # [PATCH] USB: DSBR-100 tiny patch # # On Fri, Feb 06, 2004 at 10:17:32AM -0800, Greg KH wrote: # > On Fri, Feb 06, 2004 at 05:06:01PM +0100, Markus Demleitner wrote: # > > Since I finally switched over to 2.6 I noticed that my dsbr100 driver # > > produces a warning to the effect that I should provide a release # > > callback. After a quick google on the issue I came to the conclusion # > # > No, you will have to fix up your driver to work properly, sorry. It's # > due to the changes to the v4l layer to handle removable devices much # > better (and to tie it into the driver model.) # # I didn't get around to doing real work on this until now, but finally # in the attachment there's my stab at bringing dsbr100 up to kernel 2.6. # I'm not really comfortable with the release callback issues (I've yet # to find some HOWTO-like documentation on this...) on the v4l side, # so I'd be grateful if you could have a look at it. I've basically # tried to copy what stv680 does, which may or may not have been a # good idea (in particular see the comment above the disconnect # function). # # I've used the opportunity for some code beautyfing, which of course # makes the patch a bit of a mess. I hope you won't mind too much # -- as you can see, it would have been pretty messy anyway. # # drivers/usb/media/dsbr100.c # 2004/04/21 12:32:35-07:00 msdemlei@cl.uni-heidelberg.de +133 -94 # USB: DSBR-100 tiny patch # # ChangeSet # 2004/05/01 16:18:03-07:00 david-b@pacbell.net # [PATCH] USB: dummy_hcd, root port wakeup/suspend # # Here's what's in my tree to make dummy_hcd do suspend and # wakeup correctly ... that is, making its emulated root hub # and gadget work more like real ones. # # It's easier to do this for fake hardware than the real stuff. # But real drivers tend to need very similar changes ... :) # # - Dave # # p.s. This does not depend on the suspend/resume patch. # And it doesn't do "global" suspend (of root hub). # # drivers/usb/gadget/dummy_hcd.c # 2004/04/29 11:16:12-07:00 david-b@pacbell.net +133 -33 # USB: dummy_hcd, root port wakeup/suspend # # ChangeSet # 2004/05/01 16:02:37-07:00 baldrick@free.fr # [PATCH] USB: fix WARN_ON in usbfs # # On Tuesday 27 April 2004 10:58, Oliver Neukum wrote: # > Am Dienstag, 27. April 2004 00:14 schrieb Greg KH: # > > On Mon, Apr 26, 2004 at 04:05:17PM +0200, Duncan Sands wrote: # > > > diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c # > > > --- a/drivers/usb/core/devio.c Mon Apr 26 13:48:28 2004 # > > > +++ b/drivers/usb/core/devio.c Mon Apr 26 13:48:28 2004 # > > > @@ -350,8 +350,8 @@ # > > > * all pending I/O requests; 2.6 does that. # > > > */ # > > > # > > > - if (ifnum < 8*sizeof(ps->ifclaimed)) # > > > - clear_bit(ifnum, &ps->ifclaimed); # > > > + BUG_ON(ifnum >= 8*sizeof(ps->ifclaimed)); # > > # > > I've changed that to a WARN_ON(). Yeah, writing over memory is bad, but # > > oopsing is worse. Let's be a bit nicer than that. # > # > You aren't nice that way. An oops has localised consequences. Scribbling # > over memory can cause anything. # # Hi Greg, if won't accept a BUG_ON, how about the following? # # drivers/usb/core/devio.c # 2004/04/30 03:01:37-07:00 baldrick@free.fr +5 -2 # USB: fix WARN_ON in usbfs # # ChangeSet # 2004/05/01 16:02:00-07:00 baldrick@free.fr # [PATCH] USB: usbfs: change extern inline to static inline # # And change __inline__ to inline and get rid of an unused function # while at it. # # drivers/usb/core/devio.c # 2004/04/30 16:36:25-07:00 baldrick@free.fr +5 -30 # USB: usbfs: change extern inline to static inline # # ChangeSet # 2004/04/30 22:19:36-07:00 stuber@loria.fr # [PATCH] USB: LEGO USB Tower driver v0.95 # # here is the latest version 0.95 of the LEGO USB Tower driver against 2.6.6-rc3 # which corrects a lot of problems in the version currently in the kernel, # most notably sleeping in interrupt context and improper locking. # Please apply. # # It has been thoroughly tested with UHCI, OHCI and EHCI host controllers # using Lejos and NQC. Firmware and program download, and with proper # modifications all communication protocols supported by Lejos work, # as well as firmware and program download and datalog upload in NQC. # # Notes to application maintainers/protocol designers: # # - Small modifications are needed in communication protocols because # the tower tends to discard the first byte of transmissions. # So for example LNP needs to send an extra byte like 0xff before # the packet, and F7 handlers needs to cope with a lost 0x55. # # - I suggest /dev/usb/legousbtower0 etc. as the standard device names. # This puts it in the same place as the other USB devices and makes # clear which driver is responsible for these devices. # # drivers/usb/misc/legousbtower.c # 2004/04/30 12:44:31-07:00 stuber@loria.fr +489 -276 # USB: LEGO USB Tower driver v0.95 # # MAINTAINERS # 2004/04/30 08:30:25-07:00 stuber@loria.fr +7 -0 # USB: LEGO USB Tower driver v0.95 # # ChangeSet # 2004/04/30 22:19:00-07:00 david-b@pacbell.net # [PATCH] USB: reject urb submissions to suspended devices # # This patch rejects URB submissions to suspended devices, so # that they don't get hardware-specific fault reports. Instead, # they get the same code (-EHOSTUNREACH) for all HCDs. # # It also fixes a minor problem with colliding declarations of # the symbol USB_STATE_SUSPENDED. # # drivers/usb/core/urb.c # 2004/04/28 07:00:02-07:00 david-b@pacbell.net +2 -0 # USB: reject urb submissions to suspended devices # # drivers/usb/core/hcd.h # 2004/04/28 07:01:03-07:00 david-b@pacbell.net +1 -1 # USB: reject urb submissions to suspended devices # # drivers/usb/core/hcd-pci.c # 2004/04/28 06:57:24-07:00 david-b@pacbell.net +3 -3 # USB: reject urb submissions to suspended devices # # ChangeSet # 2004/04/30 22:17:59-07:00 david-b@pacbell.net # [PATCH] USB Gadget: gadget zero and USB suspend/resume # # This patch lets gadget zero be more useful in testing usb suspend # and resume. It prints messages on suspend() and resume(), and # supports an "autoresume=N" mode to wake the host after N seconds. # # drivers/usb/gadget/zero.c # 2004/04/27 13:26:18-07:00 david-b@pacbell.net +63 -2 # USB Gadget: gadget zero and USB suspend/resume # # ChangeSet # 2004/04/30 22:16:57-07:00 linux-usb@nerds-incorporated.org # [PATCH] USB: Alcatel TD10 Serial to USB converter cable support # # The Alcatel TD10 USB to Serial converter cable (for use with a Alcatel # OT 535 or 735(i) mobile phone) seems to be a repackaged Alcatel # version of the Prolific 2303 adapter. # # And as such, simply adding its product/vendor id (0x11f7/0x02df) to # drivers/usb/serial/pl2303.c seems to be enough to make it work. # # drivers/usb/serial/pl2303.h # 2004/04/29 09:35:06-07:00 linux-usb@nerds-incorporated.org +3 -0 # USB: Alcatel TD10 Serial to USB converter cable support # # drivers/usb/serial/pl2303.c # 2004/04/29 09:35:28-07:00 linux-usb@nerds-incorporated.org +1 -0 # USB: Alcatel TD10 Serial to USB converter cable support # # ChangeSet # 2004/04/30 22:15:51-07:00 stern@rowland.harvard.edu # [PATCH] USB: USB altsetting updates for IDSN Hisax driver # # The USB core is changing the way interfaces and altsettings are stored. # They are no longer required to be in numerical order, and as a result, # simply indexing the interface and altsetting arrays won't work as # expected. # # This patch for the st5481 takes these changes into account. A simpler # approach would be to store a pointer to the struct usb_host_interface # rather than look it up repeatedly, but I'm not very familiar with this # driver and didn't want to attempt such an alteration. # # drivers/isdn/hisax/st5481_usb.c # 2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -3 # USB: USB altsetting updates for IDSN Hisax driver # # drivers/isdn/hisax/st5481_d.c # 2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -2 # USB: USB altsetting updates for IDSN Hisax driver # # drivers/isdn/hisax/st5481_b.c # 2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -2 # USB: USB altsetting updates for IDSN Hisax driver # # ChangeSet # 2004/04/30 18:36:06-05:00 jejb@mulgrave.(none) # Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present # # This patch was causing a boot panic. Now fixed. # # drivers/scsi/aic7xxx/aic7xxx_osm.h # 2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +12 -0 # Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present # # drivers/scsi/aic7xxx/aic7xxx_osm.c # 2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +10 -21 # Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present # # drivers/scsi/aic7xxx/aic7770_osm.c # 2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +4 -4 # Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present # # ChangeSet # 2004/04/30 15:27:22-07:00 greg@kroah.com # PCI Hotplug: fix build error due to previous patches. # # drivers/pci/hotplug/shpchp_core.c # 2004/04/30 08:26:54-07:00 greg@kroah.com +1 -1 # PCI Hotplug: fix build error due to previous patches. # # ChangeSet # 2004/04/30 15:25:10-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: remove some useless casts # # Remove a useless cast: pci_add_new_bus returns a struct pci_bus*, so no need # to cast. # # drivers/pci/hotplug/shpchp_pci.c # 2004/04/23 15:39:10-07:00 eike-hotplug@sf-tec.de +1 -1 # SHPC PCI Hotplug: remove some useless casts # # ChangeSet # 2004/04/30 15:24:49-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: more coding style fixes # # A big bunch of coding style fixes for shpchp_ctrl.c and shpchp_pci.c # # Eike # # drivers/pci/hotplug/shpchp_pci.c # 2004/04/23 15:39:10-07:00 eike-hotplug@sf-tec.de +119 -70 # SHPC PCI Hotplug: more coding style fixes # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/04/27 17:24:01-07:00 eike-hotplug@sf-tec.de +13 -12 # SHPC PCI Hotplug: more coding style fixes # # ChangeSet # 2004/04/30 15:24:15-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: kill useless NULL checks # # drivers/pci/hotplug/shpchp_core.c # 2004/04/29 13:18:25-07:00 eike-hotplug@sf-tec.de +3 -32 # SHPC PCI Hotplug: kill useless NULL checks # # ChangeSet # 2004/04/30 15:23:43-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: codingstyle fixes # # Some small coding style fixes for shpchp_core.c. # # drivers/pci/hotplug/shpchp_core.c # 2004/04/29 13:18:25-07:00 eike-hotplug@sf-tec.de +5 -5 # SHPC PCI Hotplug: codingstyle fixes # # ChangeSet # 2004/04/30 15:23:11-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: use goto for error handling # # Convert shpchp_core.c::init_slots to use goto for error handling. # # drivers/pci/hotplug/shpchp_core.c # 2004/04/29 13:18:25-07:00 eike-hotplug@sf-tec.de +24 -29 # SHPC PCI Hotplug: use goto for error handling # # ChangeSet # 2004/04/30 15:22:36-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: fix cleanup_slots to use a release function # # shpchp is the only driver which does not use a release function for the slot # struct. This adds one and does some minor coding style fixes. Also no one # cares about the return value of cleanup_slots (which is always 0 anyway) so # we can make the function void. # # drivers/pci/hotplug/shpchp_core.c # 2004/04/29 13:35:38-07:00 eike-hotplug@sf-tec.de +23 -15 # SHPC PCI Hotplug: fix cleanup_slots to use a release function # # ChangeSet # 2004/04/30 15:21:59-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: kill hardware_test # # shpchp_core.c::hardware_test is empty. If we remove it we tell the user that # hardware tests are not supported at all. # # drivers/pci/hotplug/shpchp_core.c # 2004/04/29 13:19:43-07:00 eike-hotplug@sf-tec.de +0 -9 # SHPC PCI Hotplug: kill hardware_test # # ChangeSet # 2004/04/30 15:04:50-07:00 eike-hotplug@sf-tec.de # [PATCH] SHPC PCI Hotplug: use new style of module parameters # # Convert shpchp_core.c to use new style of module handling. # # Eike # # drivers/pci/hotplug/shpchp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +4 -3 # SHPC PCI Hotplug: use new style of module parameters # # ChangeSet # 2004/04/30 15:04:23-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: codingstyle fixes for rpaphp_pci.c # # Some coding style fixes for rpaphp_pci.c. # # drivers/pci/hotplug/rpaphp_pci.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +15 -16 # RPA PCI Hotplug: codingstyle fixes for rpaphp_pci.c # # ChangeSet # 2004/04/30 15:03:58-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: use goto for error handling in rpaphp_slot.c # # Convert rpaphp_slot.c::alloc_slot_struct to use goto for error handling. Also # some small coding style fixes. # # drivers/pci/hotplug/rpaphp_slot.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +32 -32 # RPA PCI Hotplug: use goto for error handling in rpaphp_slot.c # # ChangeSet # 2004/04/30 15:03:27-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: remove useless NULL checks from rpaphp_core.c # # Remove two useless NULL checks from rpaphp_core.c # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/29 12:44:44-07:00 eike-hotplug@sf-tec.de +2 -8 # RPA PCI Hotplug: remove useless NULL checks from rpaphp_core.c # # ChangeSet # 2004/04/30 15:02:53-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: fix up init_slots in rpaphp_core.c # # rpaphp_core.c::init_slots is not more than a for loop and is called only from # one place, this inlines the important 3 lines. Als add some __init and __exit. # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +4 -14 # RPA PCI Hotplug: fix up init_slots in rpaphp_core.c # # ChangeSet # 2004/04/30 15:02:20-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: codingstyle fixes for rpaphp_core.c # # Some coding style fixes for rpaphp_core.c: # -s/return(foo)/return foo/ # -some whitespace fixes # -document function in proper way # # Eike # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +14 -13 # RPA PCI Hotplug: codingstyle fixes for rpaphp_core.c # # ChangeSet # 2004/04/30 15:01:47-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: kill get_cur_bus_speed from rpaphp_core.c # # The get_cur_bus_speed function of rpaphp does nothing that the PCI Hotplug Core # would not do by itself if this function does not exist, so just kill it. # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +0 -14 # RPA PCI Hotplug: kill get_cur_bus_speed from rpaphp_core.c # # ChangeSet # 2004/04/30 15:01:13-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: use new style of module parameters # # The debug parameter of rpaphp is only used as a boolean so we can scan the # commandline of it like a boolean parameter. # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +1 -1 # RPA PCI Hotplug: use new style of module parameters # # ChangeSet # 2004/04/30 15:00:38-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: codingstyle fixes for pciehp_pci.c # # This is a bunch of coding style fixes (wrap long lines, whitspacing etc.) for # pciehp_pci.c # # drivers/pci/hotplug/pciehp_pci.c # 2004/04/23 15:39:19-07:00 eike-hotplug@sf-tec.de +119 -72 # PCI Express Hotplug: codingstyle fixes for pciehp_pci.c # # ChangeSet # 2004/04/30 15:00:01-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: kill more useless casts # # This patch does two things: # -remove casts of pointers which are void* or already the correct type for the # target # -if we dereferenced a struct member and copied this to it's own variable use # this and don't dereference the member again # # drivers/pci/hotplug/pciehp_pci.c # 2004/04/23 15:39:19-07:00 eike-hotplug@sf-tec.de +1 -1 # PCI Express Hotplug: kill more useless casts # # drivers/pci/hotplug/pciehp_hpc.c # 2004/04/29 11:01:21-07:00 eike-hotplug@sf-tec.de +41 -41 # PCI Express Hotplug: kill more useless casts # # ChangeSet # 2004/04/30 14:52:21-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: mark global variables static # # Don't know why, but it looks like a good idea to mark this global variables # static. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/29 11:10:54-07:00 eike-hotplug@sf-tec.de +5 -5 # PCI Express Hotplug: mark global variables static # # ChangeSet # 2004/04/30 14:52:02-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: some cleanups # # Some coding style fixes and small cleanups for pciehp_core.c: # -wrap long lines # -kill spaces before opening braces of functions # -remove code duplication where both parts of an if statement do exactly the # same # -kill some useless comments # -kill an unneeded initialisation # # drivers/pci/hotplug/pciehp_core.c # 2004/04/29 11:10:54-07:00 eike-hotplug@sf-tec.de +34 -32 # PCI Express Hotplug: some cleanups # # ChangeSet # 2004/04/30 14:51:30-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: remove useless kmalloc casts # # The result of kmalloc does not need to be casted to any other pointer type. # Also use kmalloc(*foo) instead of kmalloc(type_of_foo) and wrap some long # lines. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/29 11:10:54-07:00 eike-hotplug@sf-tec.de +14 -8 # PCI Express Hotplug: remove useless kmalloc casts # # ChangeSet # 2004/04/30 14:50:55-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: codingstyle fixes for pciehp.h # # Some small coding style fixes and a typo fix for pciehp.h # # drivers/pci/hotplug/pciehp.h # 2004/04/29 11:07:54-07:00 eike-hotplug@sf-tec.de +11 -11 # PCI Express Hotplug: codingstyle fixes for pciehp.h # # ChangeSet # 2004/04/30 14:50:28-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: use goto for error handling # # This changes pciehp_core.c::init_slots to use goto for error hanling. Also a # missing magic missed by previous patches is killed. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +21 -24 # PCI Express Hotplug: use goto for error handling # # ChangeSet # 2004/04/30 14:49:55-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: remove useless NULL checks from cpqphp_ctrl.c # # Remove useless NULL checks from cpqphp_ctrl.c. Under normal circumstances # there is no chance for any of this functions to get called with a NULL # argument. If we are in such trouble that we get a NULL pointer don't hide it, # just oops. # # ChangeSet # 2004/04/30 14:49:21-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: kill hardware_test # # The hardware_test function of the PCI Express Hotplug driver is empty. It's # better to completely kill this to tell the user hardware tests are not # supported by this driver. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +0 -7 # PCI Express Hotplug: kill hardware_test # # ChangeSet # 2004/04/30 14:48:46-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: kill useless kmalloc casts # # This patch removes the cast of kmalloc's results to the target pointer type. # Also it fixes kmalloc to use sizeof(*foo) instead of sizeof(type_of_foo) as # suggested by Matthew Wilcox. Also removes a few useless checks if a pointer # is NULL before calling kfree: kfree checks this itself. # # ChangeSet # 2004/04/30 14:48:11-07:00 eike-hotplug@sf-tec.de # [PATCH] RPA PCI Hotplug: Remove useless NULL checks # # Remove useless NULL checks and magic numbers from rpaphp. If one of these # ever becomes invalid we are in serious trouble anyway. # # drivers/pci/hotplug/rpaphp_slot.c # 2004/04/28 22:41:20-07:00 eike-hotplug@sf-tec.de +2 -5 # RPA PCI Hotplug: Remove useless NULL checks # # drivers/pci/hotplug/rpaphp_core.c # 2004/04/28 22:41:20-07:00 eike-hotplug@sf-tec.de +6 -29 # RPA PCI Hotplug: Remove useless NULL checks # # drivers/pci/hotplug/rpaphp.h # 2004/04/28 22:41:20-07:00 eike-hotplug@sf-tec.de +0 -3 # RPA PCI Hotplug: Remove useless NULL checks # # ChangeSet # 2004/04/30 14:47:34-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: remove useless NULL checks # # Remove useless NULL checks and magic numbers from PCI Express Hotplug, also # some minimal coding style fixes. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +21 -51 # PCI Express Hotplug: remove useless NULL checks # # drivers/pci/hotplug/pciehp.h # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +2 -41 # PCI Express Hotplug: remove useless NULL checks # # ChangeSet # 2004/04/30 14:24:30-07:00 greg@kroah.com # PCI Hotplug: fix stupid build bugs caused by previous patches. # # Doesn't anyone build their patches anymore before sending them out... # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/04/30 07:24:17-07:00 greg@kroah.com +0 -4 # PCI Hotplug: fix stupid build bugs caused by previous patches. # # Doesn't anyone build their patches anymore before sending them out... # # ChangeSet # 2004/04/30 14:18:56-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: fix missing braces # # Fix missing braces. It does not change the code but makes it easier to read. # # ChangeSet # 2004/04/30 14:18:21-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: use new style of module parameters # # This converts PCI Express Hotplug to the new style of module parameter # handling. # # drivers/pci/hotplug/pciehp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +4 -3 # PCI Express Hotplug: use new style of module parameters # # drivers/pci/hotplug/pciehp.h # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +1 -5 # PCI Express Hotplug: use new style of module parameters # # ChangeSet # 2004/04/30 14:17:48-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Move an often used while loop to an inline function # # Walking through a pci_resource list and freeing all members is done a lot of # times in unload functions. This patch moves this to an inline function in # pciehp_core.c, pciehp_pci.c, shpchp_core.c and shpchp_pci.c. This shrinks the # code a lot (some 200 lines) and makes it much easier to read. Also adds some # __exit. # # drivers/pci/hotplug/shpchp_pci.c # 2004/04/23 15:39:10-07:00 eike-hotplug@sf-tec.de +55 -117 # PCI Hotplug: Move an often used while loop to an inline function # # drivers/pci/hotplug/shpchp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +20 -60 # PCI Hotplug: Move an often used while loop to an inline function # # drivers/pci/hotplug/pciehp_pci.c # 2004/04/23 15:39:19-07:00 eike-hotplug@sf-tec.de +57 -117 # PCI Hotplug: Move an often used while loop to an inline function # # drivers/pci/hotplug/pciehp_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +20 -60 # PCI Hotplug: Move an often used while loop to an inline function # # ChangeSet # 2004/04/30 14:17:13-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug Core: use new style of module parameters # # Convert PCI Hotplug Core to new style of module parameter handling. # # drivers/pci/hotplug/pci_hotplug_core.c # 2004/04/21 09:59:30-07:00 eike-hotplug@sf-tec.de +3 -6 # PCI Hotplug Core: use new style of module parameters # # ChangeSet # 2004/04/30 14:16:40-07:00 eike-hotplug@sf-tec.de # [PATCH] [BUGFIX] shpchp_pci.c: fix missing braces after if # # Add missing braces around if statement, if not we will try to add devices # for an empty slot. # # drivers/pci/hotplug/shpchp_pci.c # 2004/04/23 15:39:10-07:00 eike-hotplug@sf-tec.de +3 -2 # [BUGFIX] shpchp_pci.c: fix missing braces after if # # ChangeSet # 2004/04/30 14:16:10-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Remove type magic from kmalloc # # This patch removes the cast of kmalloc's results to the target pointer type. # Also it fixes kmalloc to use sizeof(*foo) instead of sizeof(type_of_foo) as # suggested by Matthew Wilcox. Also removes a few useless checks if a pointer # is NULL before calling kfree: kfree checks this itself. # # drivers/pci/hotplug/shpchp_ctrl.c # 2004/04/27 16:29:27-07:00 eike-hotplug@sf-tec.de +19 -22 # PCI Hotplug: Remove type magic from kmalloc # # ChangeSet # 2004/04/30 14:15:38-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: some final fixes for cpqphp_core.c # # Final small fixes for cpqphp_core.c: # -use better error handling in one_time_init # -small coding style fixes # -the name of the driver is not "pci_hotplug" # -add an __exit for unload_cpqphp # -changes enough to increment version, isn't it? # # ChangeSet # 2004/04/30 14:15:05-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: coding style fixes for cpqphp_ctrl.c # # Some coding style fixes I missed last time. # # ChangeSet # 2004/04/30 14:14:30-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: use goto for error handling in cpqphp_ctrl.c # # Change cpqphp_ctrl.c to use goto for error handling. # # ChangeSet # 2004/04/30 14:13:57-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: fix C++ style comments # # This is not C++! Fix comments from C++ style to C style, removing some useless # ones (e.g. no need to tell up and down protect a critical section). # # ChangeSet # 2004/04/30 14:13:24-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: remove useless NULL checks from cpqphp_core.c # # Remove some useless NULL checks in cpqphp_core.c # # ChangeSet # 2004/04/30 14:12:50-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: use goto for error handling # # Convert ctrl_slot_setup to use goto for error handling and fix some minor # coding style things. # # ChangeSet # 2004/04/30 14:12:23-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: split up hardware_test # # This puts the LED shifting used as "hardware test" in a function to make # cpqhp_hardware_test much smaller and easier to read. Also changes some # comments from C++ to C style. # # ChangeSet # 2004/04/30 14:11:54-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: more coding style fixes # # Fix a lot of coding style issues in Compaq PCI hotplug: # -spaces before opening brace of functions # -much too much C++ style comments # -wrap long lines # -remove some comments where the code does not really need to be explained # # Eike # # ChangeSet # 2004/04/30 14:11:19-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: use new style of module parameters # # Convert Compaq PCI Hotplug driver to use the new style of module parameters. # # ChangeSet # 2004/04/30 14:10:45-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: move huge inline function out of header file # # set_controller_speed is implemented in cpqphp.h but only used in cpqphp_ctrl.c # and it's much too big to be defined in a header file. This patch moves it to # cpqphp_ctrl.c. Also the inline attribute is removed, this function is called # from 2 places and to big to be an inline. # # ChangeSet # 2004/04/30 14:10:12-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: remove useless NULL checks # # Remove some useless NULL and magic checks from Compaq PCI Hotplug driver. # If one of this pointers is invalid we are in bad trouble anyway. # # ChangeSet # 2004/04/30 14:09:35-07:00 eike-hotplug@sf-tec.de # [PATCH] Compaq PCI Hotplug: coding style fixes # # The usual coding style fixes, this time for cpqphp_ctrl.c and cpqphp.c. # # ChangeSet # 2004/04/29 16:14:39-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: splut pciehp_ctrl.c::configure_new_function # # configure_new_function is way too big (>600 lines). Split it in 2 functions, # one for the new functions and one for bridges. And split out a small piece # from the bridge function which is used twice to it's own function. # # Patch is huge because of the identation changes but does nothing than the # split and some minor coding style changes. # # drivers/pci/hotplug/pciehp_ctrl.c # 2004/04/24 03:03:36-07:00 eike-hotplug@sf-tec.de +435 -417 # PCI Express Hotplug: splut pciehp_ctrl.c::configure_new_function # # ChangeSet # 2004/04/29 16:14:14-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: remove useless kmalloc casts # # The result of kmalloc does not need to be casted, it is a void * which can be # assigned to any pointer variable. Also avoid code duplication in one if # statement. # # drivers/pci/hotplug/pciehp_ctrl.c # 2004/04/24 02:48:25-07:00 eike-hotplug@sf-tec.de +18 -12 # PCI Express Hotplug: remove useless kmalloc casts # # ChangeSet # 2004/04/29 16:13:41-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Express Hotplug: fix coding style # # drivers/pci/hotplug/pciehp_ctrl.c # 2004/04/24 02:24:45-07:00 eike-hotplug@sf-tec.de +117 -120 # PCI Express Hotplug: fix coding style # # ChangeSet # 2004/04/29 16:04:49-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: final cleanups # # Some final fixes for the skeleton driver: # -spaces before opening brace # -add a better example for hardware_test function # -remove a "int retval" in a void function # -some more coding style changes # -changed enough stuff: increase version number # -fix a typo in a comment # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 18:22:46-07:00 eike-hotplug@sf-tec.de +25 -22 # PCI Hotplug skeleton: final cleanups # # ChangeSet # 2004/04/29 16:04:00-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: use goto for error handling # # Convert PCI hotplug skeleton driver to use goto for error handling in # init_slots to avoid code duplication. # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 18:19:36-07:00 eike-hotplug@sf-tec.de +19 -22 # PCI Hotplug skeleton: use goto for error handling # # ChangeSet # 2004/04/29 16:03:26-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: mark functions __init/__exit # # Add __init and __exit to some functions only called from __init/__exit context. # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 18:15:14-07:00 eike-hotplug@sf-tec.de +4 -4 # PCI Hotplug skeleton: mark functions __init/__exit # # ChangeSet # 2004/04/29 16:02:44-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: fix codingstyle # # Coding style fixes for pcihp_skeleton.c: remove spaces before opening braces # and change a comment in function hardware_test to make clearer that the # functions purpose is not to tell the user there are no tests. # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 18:10:52-07:00 eike-hotplug@sf-tec.de +25 -26 # PCI Hotplug skeleton: fix codingstyle # # ChangeSet # 2004/04/29 16:02:12-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: remove useless NULL checks # # This one removes all the useless NULL checks including slot_paranoia_check, # get_slot and the magic number from the PCI hotplug skeleton driver. Also some # lines containing only a single tab are fixed. # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 18:05:03-07:00 eike-hotplug@sf-tec.de +17 -82 # PCI Hotplug skeleton: remove useless NULL checks # # ChangeSet # 2004/04/29 16:01:34-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug skeleton: use new style of module parameters # # Convert the PCI hotplug skeleton driver to use new style of module parameter # handling. # # drivers/pci/hotplug/pcihp_skeleton.c # 2004/04/23 17:40:13-07:00 eike-hotplug@sf-tec.de +3 -6 # PCI Hotplug skeleton: use new style of module parameters # # ChangeSet # 2004/04/29 15:52:30-07:00 eike-hotplug@sf-tec.de # [PATCH] ACPI PCI Hotplug: add a BUG() where one should be # # If there is a condition with the comment "should never happen" it is a good # place for a BUG() if it is ever reached. # # drivers/pci/hotplug/acpiphp_glue.c # 2004/04/21 09:59:29-07:00 eike-hotplug@sf-tec.de +2 -1 # ACPI PCI Hotplug: add a BUG() where one should be # # ChangeSet # 2004/04/29 15:51:57-07:00 eike-hotplug@sf-tec.de # [PATCH] ACPI PCI Hotplug: coding style fixes # # Some minor coding style fixes: # -space before opening brace of function # -wrap some long lines # -change some identations from spaces to tabs # # drivers/pci/hotplug/acpiphp_glue.c # 2004/04/21 09:59:29-07:00 eike-hotplug@sf-tec.de +5 -5 # ACPI PCI Hotplug: coding style fixes # # ChangeSet # 2004/04/29 15:51:27-07:00 eike-hotplug@sf-tec.de # [PATCH] ACPI PCI Hotplug: use goto for error handling # # This one fixes another space before an opening brace I missed before and # optimizes the error paths in init_slots a bit more. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/23 16:46:02-07:00 eike-hotplug@sf-tec.de +7 -6 # ACPI PCI Hotplug: use goto for error handling # # ChangeSet # 2004/04/29 15:50:56-07:00 eike-hotplug@sf-tec.de # [PATCH] ACPI PCI Hotplug: kill magic number # # The magic slot number was only another type of checking the validity of a # pointer. These checks are all gone so magic can follow them. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/23 16:39:58-07:00 eike-hotplug@sf-tec.de +0 -1 # ACPI PCI Hotplug: kill magic number # # drivers/pci/hotplug/acpiphp.h # 2004/04/23 16:39:49-07:00 eike-hotplug@sf-tec.de +0 -2 # ACPI PCI Hotplug: kill magic number # # ChangeSet # 2004/04/29 15:50:22-07:00 eike-hotplug@sf-tec.de # [PATCH] ACPI PCI Hotplug: use new style of module parameters # # This one converts acpiphp_core.c to use the new interface for module # parameters. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/23 11:02:59-07:00 eike-hotplug@sf-tec.de +2 -1 # ACPI PCI Hotplug: use new style of module parameters # # ChangeSet # 2004/04/29 15:01:10-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI Hotplug ZT5550: use new style of module parameters # # Convert the driver to use new interface for module parameters, Also fix the # driver name used in debug messages. # # Eike # # drivers/pci/hotplug/cpcihp_zt5550.c # 2004/04/29 08:00:35-07:00 eike-hotplug@sf-tec.de +3 -6 # [PATCH] CompactPCI Hotplug ZT5550: use new style of module parameters # # Convert the driver to use new interface for module parameters, Also fix the # driver name used in debug messages. # # Eike # # ChangeSet # 2004/04/29 14:59:12-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI Hotplug: kill magic number # # slot->magic is not used anymore since slot_paranoia_check is dead, so just kill # it. # # drivers/pci/hotplug/cpci_hotplug_core.c # 2004/04/29 07:58:20-07:00 eike-hotplug@sf-tec.de +0 -1 # [PATCH] CompactPCI Hotplug: kill magic number # # slot->magic is not used anymore since slot_paranoia_check is dead, so just kill # it. # # drivers/pci/hotplug/cpci_hotplug.h # 2004/04/29 07:58:20-07:00 eike-hotplug@sf-tec.de +0 -2 # [PATCH] CompactPCI Hotplug: kill magic number # # slot->magic is not used anymore since slot_paranoia_check is dead, so just kill # it. # # ChangeSet # 2004/04/29 14:53:25-07:00 eike-hotplug@sf-tec.de # [PATCH] CompactPCI Hotplug: remove unneeded funtion for parameter handling # # A special function for handling the parameters in non-module case is not # needed, the MODULE_* makros handle this also for compiled in situations. # # drivers/pci/hotplug/cpcihp_generic.c # 2004/04/29 07:53:02-07:00 eike-hotplug@sf-tec.de +0 -67 # [PATCH] CompactPCI Hotplug: remove unneeded funtion for parameter handling # # A special function for handling the parameters in non-module case is not # needed, the MODULE_* makros handle this also for compiled in situations. # # ChangeSet # 2004/04/29 14:26:03-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: remove 3 get_* functions # # If we remove this 3 get_* functions the pci hotplug core will do the same # thing for us. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 10:13:31-07:00 eike-hotplug@sf-tec.de +2 -43 # PCI Hotplug: Clean up acpiphp_core.c: remove 3 get_* functions # # ChangeSet # 2004/04/29 14:25:28-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: return # # Fix 2 very ugly return constructs. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 09:19:25-07:00 eike-hotplug@sf-tec.de +1 -7 # PCI Hotplug: Clean up acpiphp_core.c: return # # ChangeSet # 2004/04/29 14:25:00-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: use goto for error handling # # This one converts the error handling in init_slots to use gotos to avoid code # duplication. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 09:17:59-07:00 eike-hotplug@sf-tec.de +15 -16 # PCI Hotplug: Clean up acpiphp_core.c: use goto for error handling # # ChangeSet # 2004/04/29 14:24:32-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: kill hardware_test # # The function hardware_test only tells that there are no tests. If we just # kill it the file "test" in the slot's directory will not show up which # means pretty much the same. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 09:12:27-07:00 eike-hotplug@sf-tec.de +0 -20 # PCI Hotplug: Clean up acpiphp_core.c: kill hardware_test # # ChangeSet # 2004/04/29 14:24:01-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: coding style # # This patch kills the space before the opening brace in function # declarations. It also beautifies some ugly return statements. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 09:11:50-07:00 eike-hotplug@sf-tec.de +20 -37 # PCI Hotplug: Clean up acpiphp_core.c: coding style # # ChangeSet # 2004/04/29 14:23:32-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: slot_paranoia_check # # Matthew Wilcox wrote: # > On Thu, Apr 22, 2004 at 01:18:23PM +0200, Rolf Eike Beer wrote: # > > slot_paranoia_check is only another kind of checking everything for NULL. # > > Removing this leads to function get_slot is reduced to a simple cast, so # > > this function can be killed also. # > # > Since private is void *, you don't even need the casts. # > # > > static int enable_slot (struct hotplug_slot *hotplug_slot) # > > { # > > - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); # > > + struct slot *slot = (struct slot *)hotplug_slot->private; # > # > struct slot *slot = hotplug_slot->private; # > # > is enough. # # Fixed. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 09:04:56-07:00 eike-hotplug@sf-tec.de +8 -48 # PCI Hotplug: Clean up acpiphp_core.c: slot_paranoia_check # # ChangeSet # 2004/04/29 14:23:01-07:00 eike-hotplug@sf-tec.de # [PATCH] PCI Hotplug: Clean up acpiphp_core.c: null checks # # If the "struct hotplug_struct *" parameter to any function in # hotplug_slots_ops is ever NULL something bogus is going on. In this case we # should just oops and not hide the bug. This also fixes the driver name used in # debug messages. # # drivers/pci/hotplug/acpiphp_core.c # 2004/04/18 08:36:18-07:00 eike-hotplug@sf-tec.de +1 -35 # PCI Hotplug: Clean up acpiphp_core.c: null checks # # ChangeSet # 2004/04/29 14:07:10-07:00 johnrose@austin.ibm.com # [PATCH] PCI Hotplug: RPA DLPAR remove slot, return code fix # # drivers/pci/hotplug/rpadlpar_core.c # 2004/04/19 08:44:43-07:00 johnrose@austin.ibm.com +10 -10 # PCI Hotplug: RPA DLPAR remove slot, return code fix # # ChangeSet # 2004/04/29 14:01:19-07:00 lxiep@us.ibm.com # [PATCH] PCI Hotplug: rpaphp: set eeh option (enabled ) prior to any i/o to newly added IOA # # Attached patch fix the problem I have found during DLPAR I/O slots # testing on our new hardware. rpaphp needs to set eeh-option(eanbled) # for newly added IOA prior to performing PCI config(pci_setup_device), # otherwise the pci_dev of the IOA will have invalid base address # information. # # Linas Vepstas impleted eeh changes. # # drivers/pci/hotplug/rpaphp_pci.c # 2004/04/21 07:35:49-07:00 lxiep@us.ibm.com +3 -1 # PCI Hotplug: rpaphp: set eeh option (enabled ) prior to any i/o to newly added IOA # # ChangeSet # 2004/04/29 13:17:35-07:00 jochen@jochen.org # [PATCH] PCI: message cleanup in PCI probe # # The messages read: # # PCI: Address space collision on region 8 of bridge 0000:00:1f.0 [1180:11bf] # PCI: Ignoring BAR0-3 of IDE controller 0000:00:1f.1 # Transparent bridge - 0000:00:1e.0 # PCI: Using IRQ router PIIX/ICH [8086/24cc] at 0000:00:1f.0 # PCI: Found IRQ 11 for device 0000:00:1f.1 # # The following patch adds "PCI: " in front of the message and KERN_INFO as well. # Compile&boot tested. # # Jochen # # drivers/pci/probe.c # 2004/04/18 04:57:06-07:00 jochen@jochen.org +1 -1 # PCI: message cleanup in PCI probe # # ChangeSet # 2004/04/29 13:16:38-07:00 jochen@jochen.org # [PATCH] PCI: I'm moving # # Can you please feed the following patch to Andrew? # # CREDITS # 2004/04/18 04:49:42-07:00 jochen@jochen.org +2 -2 # PCI: I'm moving # # ChangeSet # 2004/04/29 13:15:55-07:00 dsaxena@plexity.net # [PATCH] PCI: pci.ids update from sf.net + add IXP4xx to pci_ids.h # # include/linux/pci_ids.h # 2004/04/15 10:48:16-07:00 dsaxena@plexity.net +1 -0 # PCI: pci.ids update from sf.net + add IXP4xx to pci_ids.h # # drivers/pci/pci.ids # 2004/04/15 10:51:41-07:00 dsaxena@plexity.net +1248 -225 # PCI: pci.ids update from sf.net + add IXP4xx to pci_ids.h # # ChangeSet # 2004/04/29 10:47:50-07:00 greg@kroah.com # USB: fix build error in hci_usb driver due to urb reference count change. # # This really needs to get fixed the proper way, by making the urb allocation # dynamic in the driver, instead of the hack it is currently doing... # # drivers/bluetooth/hci_usb.c # 2004/04/29 03:47:26-07:00 greg@kroah.com +1 -1 # USB: fix build error in hci_usb driver due to urb reference count change. # # This really needs to get fixed the proper way, by making the urb allocation # dynamic in the driver, instead of the hack it is currently doing... # # ChangeSet # 2004/04/29 10:40:57-07:00 greg@kroah.com # USB: remove the wait_for_urb function from bfusb driver as it's no longer needed. # # drivers/bluetooth/bfusb.c # 2004/04/29 03:40:30-07:00 greg@kroah.com +0 -9 # USB: remove the wait_for_urb function from bfusb driver as it's no longer needed. # # ChangeSet # 2004/04/28 21:43:38-07:00 sean@mess.org # [PATCH] USB: fix PhidgetServo driver # # Somehow I managed to send the wrong version. Here is a patch which fixes # that. (Remove a dev_info() which wasn't supposed to be there, and make sure # that everything is still consistent in the unlikely event that kmalloc() # fails). Just minor cleanups. # # drivers/usb/misc/phidgetservo.c # 2004/04/28 17:35:09-07:00 sean@mess.org +14 -17 # USB: fix PhidgetServo driver # # ChangeSet # 2004/04/28 13:25:14-07:00 david-b@pacbell.net # [PATCH] USB: fix sparc64 2.6.6-rc2-mm2 build busted: usb/core/hub.c hubstatus # # > 2) An undefined 'hubstatus' variable in drivers/usb/core/hub.c: # > # > CC drivers/usb/core/hub.o # > drivers/usb/core/hub.c: In function `hub_port_connect_change': # > drivers/usb/core/hub.c:1343: error: `hubstatus' undeclared (first use in this function) # > drivers/usb/core/hub.c:1343: error: (Each undeclared identifier is reported only once # > drivers/usb/core/hub.c:1343: error: for each function it appears in.) # > make[3]: *** [drivers/usb/core/hub.o] Error 1 # > # > As a total shot in the dark, the following fixes the build (I've no clue # > if it is the right fix): # # Yes, it's the right fix. Greg, please merge the attached patch, # which will be needed on any big-endian system. # # drivers/usb/core/hub.c # 2004/04/27 01:19:29-07:00 david-b@pacbell.net +1 -1 # USB: fix sparc64 2.6.6-rc2-mm2 build busted: usb/core/hub.c hubstatus # # ChangeSet # 2004/04/28 11:52:21-07:00 stern@rowland.harvard.edu # [PATCH] USB: Lock devices during tree traversal # # On Tue, 27 Apr 2004, Greg KH wrote: # # > So, what's next in this patch series? :) # # Funny you should ask... # # While writing those patches I noted a problem, that the USB device tree # can change while a process reading /proc/bus/usb/devices is traversing it, # leading to an oops when a pointer to a no-longer-existing child device is # dereferenced. The ensuing discussion led to the conclusion that the # devices' ->serialize locks should be acquired, top-down, while going # through the tree. # # That means changing the code that populates the devices file and changing # the code that adds and removes USB device structures. This patch takes # care of the first part. I'm delaying the second part because that section # of usbcore is still under change -- David Brownell's revisions have not # yet been fully integrated. # # A similar change should be made to usb_find_device() and match_device() in # usb.c. You may want to add that yourself. # # drivers/usb/core/devices.c # 2004/04/28 06:48:48-07:00 stern@rowland.harvard.edu +10 -2 # USB: Lock devices during tree traversal # # ChangeSet # 2004/04/28 11:51:52-07:00 sean@mess.org # [PATCH] USB: add new USB PhidgetServo driver # # Here is a driver for the usb servo controllers from Phidgets # , using sysfs. # # Note that the devices claim to be hid devices, so I've added them to the # hid_blacklist (HID_QUIRK_IGNORE). A servo controller isn't really an hid # device (or is it?). # # drivers/usb/misc/Makefile # 2004/04/21 09:02:00-07:00 sean@mess.org +1 -0 # USB: add new USB PhidgetServo driver # # drivers/usb/misc/Kconfig # 2004/04/21 09:02:00-07:00 sean@mess.org +12 -0 # USB: add new USB PhidgetServo driver # # drivers/usb/input/hid-core.c # 2004/04/22 02:54:25-07:00 sean@mess.org +12 -0 # USB: add new USB PhidgetServo driver # # drivers/usb/Makefile # 2004/04/21 09:02:00-07:00 sean@mess.org +1 -0 # USB: add new USB PhidgetServo driver # # drivers/usb/misc/phidgetservo.c # 2004/04/27 04:03:07-07:00 sean@mess.org +330 -0 # USB: add new USB PhidgetServo driver # # drivers/usb/misc/phidgetservo.c # 2004/04/27 04:03:07-07:00 sean@mess.org +0 -0 # BitKeeper file /home/greg/linux/BK/usb-2.6/drivers/usb/misc/phidgetservo.c # # ChangeSet # 2004/04/28 11:51:03-07:00 greg@kroah.com # My cleanups to the smbios driver. # # drivers/firmware/smbios.c # 2004/04/28 04:50:49-07:00 greg@kroah.com +13 -31 # My cleanups to the smbios driver. # # ChangeSet # 2004/04/28 11:50:29-07:00 Michael_E_Brown@Dell.com # [PATCH] add SMBIOS tables to sysfs -- UPDATED # # drivers/firmware/smbios.h # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +53 -0 # [PATCH] add SMBIOS tables to sysfs -- UPDATED # # drivers/firmware/smbios.h # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +0 -0 # BitKeeper file /home/greg/linux/BK/driver-2.6/drivers/firmware/smbios.h # # drivers/firmware/Makefile # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +1 -0 # [PATCH] add SMBIOS tables to sysfs -- UPDATED # # drivers/firmware/Kconfig # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +8 -0 # [PATCH] add SMBIOS tables to sysfs -- UPDATED # # drivers/firmware/smbios.c # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +266 -0 # [PATCH] add SMBIOS tables to sysfs -- UPDATED # # drivers/firmware/smbios.c # 2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +0 -0 # BitKeeper file /home/greg/linux/BK/driver-2.6/drivers/firmware/smbios.c # # ChangeSet # 2004/04/28 11:32:17-05:00 jejb@mulgrave.(none) # Cset exclude: jejb@mulgrave.(none)|ChangeSet|20040404150128|05866 # # scsi_get_device needs no NULL check # # drivers/scsi/scsi.c # 2004/04/28 11:32:09-05:00 jejb@mulgrave.(none) +0 -0 # scsi_get_device needs no NULL check # # ChangeSet # 2004/04/27 17:33:52-07:00 greg@kroah.com # USB: fix compiler warnings in devices.c file. # # drivers/usb/core/devices.c # 2004/04/27 10:33:12-07:00 greg@kroah.com +2 -2 # USB: fix compiler warnings in devices.c file. # # ChangeSet # 2004/04/27 16:02:32-07:00 stern@rowland.harvard.edu # [PATCH] USB: Allocate interface structures dynamically # # This is a revised version of an earlier patch; I feel a lot better about # this one. Basically it does the same thing as before: allocate # interfaces dynamically to avoid the problems with reusing them. # # The difference is that this patch adds a struct kref to the array of # usb_interface_cache's, so the array can persist if needed after the # device has been disconnected. Each interface takes a reference to it # (along with the configuration itself), so as long as the interfaces # remain pinned in memory the altsettings will also remain. # # Here is a slight revision of patch as246b. This one allocates all the new # interfaces before changing any other state; otherwise it's the same. # # include/linux/usb.h # 2004/04/15 07:43:58-07:00 stern@rowland.harvard.edu +38 -3 # USB: Allocate interface structures dynamically # # drivers/usb/core/usb.c # 2004/04/15 05:19:20-07:00 stern@rowland.harvard.edu +1 -1 # USB: Allocate interface structures dynamically # # drivers/usb/core/message.c # 2004/04/15 05:28:25-07:00 stern@rowland.harvard.edu +46 -13 # USB: Allocate interface structures dynamically # # drivers/usb/core/devices.c # 2004/04/15 05:21:07-07:00 stern@rowland.harvard.edu +19 -12 # USB: Allocate interface structures dynamically # # drivers/usb/core/config.c # 2004/04/15 07:45:41-07:00 stern@rowland.harvard.edu +31 -44 # USB: Allocate interface structures dynamically # # ChangeSet # 2004/04/27 15:22:05-07:00 greg@kroah.com # USB: fix incorrect usb-serial conversion for cur_altsetting from previous patch. # # drivers/usb/serial/usb-serial.c # 2004/04/27 08:21:23-07:00 greg@kroah.com +1 -1 # USB: fix incorrect usb-serial conversion for cur_altsetting from previous patch. # # ChangeSet # 2004/04/27 14:45:49-07:00 greg@kroah.com # USB: make ehci driver use a kref instead of an atomic_t # # drivers/usb/host/ehci.h # 2004/04/27 14:45:32-07:00 greg@kroah.com +2 -1 # USB: make ehci driver use a kref instead of an atomic_t # # drivers/usb/host/ehci-sched.c # 2004/04/27 14:45:32-07:00 greg@kroah.com +3 -3 # USB: make ehci driver use a kref instead of an atomic_t # # drivers/usb/host/ehci-q.c # 2004/04/27 14:45:32-07:00 greg@kroah.com +5 -5 # USB: make ehci driver use a kref instead of an atomic_t # # drivers/usb/host/ehci-mem.c # 2004/04/27 14:45:32-07:00 greg@kroah.com +23 -16 # USB: make ehci driver use a kref instead of an atomic_t # # drivers/usb/host/ehci-hcd.c # 2004/04/27 14:45:32-07:00 greg@kroah.com +1 -1 # USB: make ehci driver use a kref instead of an atomic_t # # ChangeSet # 2004/04/27 14:21:13-07:00 greg@kroah.com # USB: removed unused atomic_t in keyspan driver structure. # # drivers/usb/serial/keyspan.c # 2004/04/27 07:20:12-07:00 greg@kroah.com +0 -3 # USB: removed unused atomic_t in keyspan driver structure. # # ChangeSet # 2004/04/27 14:02:13-04:00 jgarzik@redhat.com # [libata sata_sx4] trivial: fix filename in header # # drivers/scsi/sata_sx4.c # 2004/04/27 14:02:07-04:00 jgarzik@redhat.com +1 -1 # [libata sata_sx4] trivial: fix filename in header # # ChangeSet # 2004/04/26 17:07:28-07:00 greg@kroah.com # USB: switch struct urb to use a kref instead of it's own atomic_t # # include/linux/usb.h # 2004/04/26 10:06:52-07:00 greg@kroah.com +2 -1 # USB: switch struct urb to use a kref instead of it's own atomic_t # # drivers/usb/core/urb.c # 2004/04/26 10:06:52-07:00 greg@kroah.com +13 -8 # USB: switch struct urb to use a kref instead of it's own atomic_t # # ChangeSet # 2004/04/26 16:11:11-07:00 mdharm-usb@one-eyed-alien.net # [PATCH] USB: usb-storage driver changes for 2.6.x [4/4] # # This is a trivial patch to remove some duplicate includes. sched.h and # errno.h are already included in this file about a dozen lines or so above # this point. # # drivers/usb/storage/usb.c # 2004/04/24 19:25:23-07:00 mdharm-usb@one-eyed-alien.net +0 -2 # USB: usb-storage driver changes for 2.6.x [4/4] # # ChangeSet # 2004/04/26 16:10:49-07:00 mdharm-usb@one-eyed-alien.net # [PATCH] USB: usb-storage driver changes for 2.6.x [3/4] # # This patch adds some clear-halt calls if a GetMaxLUN fails. Apparently, # some devices (like certain early-rev Zip100s) stall their bulk pipes if # they receive a GetMaxLUN. # # drivers/usb/storage/transport.c # 2004/04/24 19:25:32-07:00 mdharm-usb@one-eyed-alien.net +11 -0 # USB: usb-storage driver changes for 2.6.x [3/4] # # ChangeSet # 2004/04/26 16:10:25-07:00 mdharm-usb@one-eyed-alien.net # [PATCH] USB: usb-storage driver changes for 2.6.x [2/4] # # This is patch as248b from Alan Stern, modified by myself: This adds a flag # which allows us to supress the "unneeded unusual_devs.h entry" message. # This is useful for times when idiotic device manufacturers break the rules # and release two different devices with the same VID, PID, and revision # number. # # drivers/usb/storage/usb.h # 2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -0 # USB: usb-storage driver changes for 2.6.x [2/4] # # drivers/usb/storage/usb.c # 2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -1 # USB: usb-storage driver changes for 2.6.x [2/4] # # drivers/usb/storage/unusual_devs.h # 2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -1 # USB: usb-storage driver changes for 2.6.x [2/4] # # ChangeSet # 2004/04/26 16:10:02-07:00 mdharm-usb@one-eyed-alien.net # [PATCH] USB: usb-storage driver changes for 2.6.x [1/4] # # Patch as239b from Alan Stern: This patch improves the interaction between # a SCSI reset, an internally generated reset, and an abort. This improves # our error-recovery in cases where the device is hung (or almost hung) while # we're trying to auto-reset. # # drivers/usb/storage/usb.h # 2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +3 -2 # USB: usb-storage driver changes for 2.6.x [1/4] # # drivers/usb/storage/transport.c # 2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +26 -21 # USB: usb-storage driver changes for 2.6.x [1/4] # # drivers/usb/storage/scsiglue.c # 2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +11 -8 # USB: usb-storage driver changes for 2.6.x [1/4] # # ChangeSet # 2004/04/26 16:09:34-07:00 stern@rowland.harvard.edu # [PATCH] USB: Altsetting updates for usb/serial # # The updates needed for proper altsetting handling among the USB serial # drivers turned out to be a lot easier than I expected, thanks to the # organization of the drivers. Only a handful of changes were needed. # # drivers/usb/serial/usb-serial.c # 2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for usb/serial # # drivers/usb/serial/safe_serial.c # 2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for usb/serial # # drivers/usb/serial/kobil_sct.c # 2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for usb/serial # # drivers/usb/serial/io_ti.c # 2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for usb/serial # # ChangeSet # 2004/04/26 16:09:06-07:00 baldrick@free.fr # [PATCH] USB: be assertive in usbfs # # Be assertive. # # drivers/usb/core/devio.c # 2004/04/26 06:48:28-07:00 baldrick@free.fr +2 -2 # USB: be assertive in usbfs # # ChangeSet # 2004/04/26 16:08:38-07:00 bellucda@tiscali.it # [PATCH] USB: audits in usb_init() # # there were some missing audits in usb_init() # # drivers/usb/core/usb.c # 2004/04/26 14:55:56-07:00 bellucda@tiscali.it +26 -6 # USB: audits in usb_init() # # ChangeSet # 2004/04/26 16:08:12-07:00 tejohnson@yahoo.com # [PATCH] USB: mtouchusb update for 2.6.6-rc2 # # The attached patch for the 3M Touch Systems Capacitive controller. # # Quick list of changes: # # * Changed reset from standard USB dev reset to vendor reset # * Changed data sent to host from compensated to raw coordinates # * Eliminated vendor/product module params # * Performed multiple successfull tests with an EXII-5010UC # # The changes are primarily due to comments from Vojtech Pavlik, as well # as making the newer EXII-50XXUC controllers work. # # Thanks to 3M Touch Systems for sending me some new controllers to test with! # # An updated HOWTO is also available at: # # # http://groomlakelabs.com/grandamp/code/microtouch/Linux-Input-USB-Touchscreen-HowTo.txt # # drivers/usb/input/mtouchusb.c # 2004/04/25 12:16:01-07:00 tejohnson@yahoo.com +35 -72 # USB: mtouchusb update for 2.6.6-rc2 # # Documentation/usb/mtouchusb.txt # 2004/04/25 12:16:49-07:00 tejohnson@yahoo.com +42 -51 # USB: mtouchusb update for 2.6.6-rc2 # # ChangeSet # 2004/04/26 12:41:28-04:00 akpm@osdl.org # [PATCH] sata_sx4.c warning fix # # drivers/scsi/sata_sx4.c: In function `pdc20621_put_to_dimm': # drivers/scsi/sata_sx4.c:928: warning: comparison is always true due to limited range of data type # # The code is doing, effectively: # # if ((long)(expr returning u32)) >= 0 # # but on 64-bit architectures, that will always be true. # # So cast the u32 result to s32 before promoting to long so that bit 31 # correctly propagates into bits 32-63. # # drivers/scsi/sata_sx4.c # 2004/04/26 02:55:02-04:00 akpm@osdl.org +1 -1 # sata_sx4.c warning fix # # ChangeSet # 2004/04/26 12:00:03-04:00 jgarzik@redhat.com # [libata] remove unused struct ata_engine # # include/linux/libata.h # 2004/04/26 11:59:58-04:00 jgarzik@redhat.com +0 -10 # [libata] remove unused struct ata_engine # # drivers/scsi/libata-core.c # 2004/04/26 11:59:58-04:00 jgarzik@redhat.com +0 -3 # [libata] remove unused struct ata_engine # # ChangeSet # 2004/04/26 09:06:21-05:00 akpm@osdl.org # [PATCH] scsi_disk_release() warning fix # # drivers/scsi/sd.c: In function `scsi_disk_release': # drivers/scsi/sd.c:1477: warning: unused variable `sdev' # # drivers/scsi/sd.c # 2004/04/26 01:17:21-05:00 akpm@osdl.org +0 -1 # scsi_disk_release() warning fix # # ChangeSet # 2004/04/25 23:51:40-07:00 airlied@pdx.freedesktop.org # Merge pdx.freedesktop.org:/home/airlied/linux/drm-2.6 # into pdx.freedesktop.org:/home/airlied/linux/drm-dev # # drivers/char/drm/i830_irq.c # 2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i830_dma.c # 2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i810_dma.c # 2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # ChangeSet # 2004/04/25 23:45:24-07:00 airlied@pdx.freedesktop.org # drm_pciids.h: # add new tdfx id, and blank ffb ids # # drivers/char/drm/drm_pciids.h # 2004/04/25 23:44:34-07:00 airlied@pdx.freedesktop.org +5 -0 # add new tdfx id, and blank ffb ids # # ChangeSet # 2004/04/25 23:09:37-07:00 airlied@pdx.freedesktop.org # Merge http://linux.bkbits.net/linux-2.5 # into pdx.freedesktop.org:/home/airlied/linux/drm-dev # # drivers/char/drm/i830_irq.c # 2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i830_dma.c # 2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i810_dma.c # 2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # ChangeSet # 2004/04/26 02:09:12-04:00 jgarzik@redhat.com # [libata promise] make sure our schedule_timeout(N) are never with N==0 # # Make sure we delay for a minimum desired length of time. # # drivers/scsi/sata_sx4.c # 2004/04/26 02:09:07-04:00 jgarzik@redhat.com +2 -2 # [libata promise] make sure our schedule_timeout(N) are never with N==0 # # Make sure we delay for a minimum desired length of time. # # drivers/scsi/sata_promise.c # 2004/04/26 02:09:07-04:00 jgarzik@redhat.com +1 -1 # [libata promise] make sure our schedule_timeout(N) are never with N==0 # # Make sure we delay for a minimum desired length of time. # # ChangeSet # 2004/04/26 01:36:12-04:00 jgarzik@redhat.com # [libata] replace per-command semaphore with optional completion # # The semaphore was initialized and up'd for each command, but nobody # was listening. Replace this with a completion, which may or may not # be present. # # include/linux/libata.h # 2004/04/26 01:36:07-04:00 jgarzik@redhat.com +1 -1 # [libata] replace per-command semaphore with optional completion # # The semaphore was initialized and up'd for each command, but nobody # was listening. Replace this with a completion, which may or may not # be present. # # drivers/scsi/libata-core.c # 2004/04/26 01:36:07-04:00 jgarzik@redhat.com +3 -2 # [libata] replace per-command semaphore with optional completion # # The semaphore was initialized and up'd for each command, but nobody # was listening. Replace this with a completion, which may or may not # be present. # # ChangeSet # 2004/04/26 01:15:11-04:00 jgarzik@redhat.com # [libata] increase max-sectors limit for modern drives # # This is the much-discussed "speed up SATA" patch. It limits requests # to 1MB as discussed, rather than the hardware maximum (32MB). # # As soon as Jens Axboe's patch to dynamically determining request # size is merged, max_sectors becomes what it properly should be -- # a description of the absolute hardware maximum. # # drivers/scsi/libata-scsi.c # 2004/04/26 01:15:05-04:00 jgarzik@redhat.com +19 -0 # [libata] increase max-sectors limit for modern drives # # This is the much-discussed "speed up SATA" patch. It limits requests # to 1MB as discussed, rather than the hardware maximum (32MB). # # As soon as Jens Axboe's patch to dynamically determining request # size is merged, max_sectors becomes what it properly should be -- # a description of the absolute hardware maximum. # # ChangeSet # 2004/04/26 00:54:47-04:00 jgarzik@redhat.com # [libata] work queueing cleanups and fixes # # Make sure to initialize PIO data xfer state. # # Use queue_delayed_work() rather than manually calling schedule_timeout(), # then queue_work(), ourselves. # # drivers/scsi/libata-core.c # 2004/04/26 00:54:42-04:00 jgarzik@redhat.com +13 -13 # [libata] work queueing cleanups and fixes # # Make sure to initialize PIO data xfer state. # # Use queue_delayed_work() rather than manually calling schedule_timeout(), # then queue_work(), ourselves. # # ChangeSet # 2004/04/26 00:17:47-04:00 jgarzik@redhat.com # [libata] some work on the ATAPI path # # Remove a lot of redundant code in ATAPI packet submission. # # ATAPI is still disabled, it doesn't work yet. # # drivers/scsi/libata-scsi.c # 2004/04/26 00:17:42-04:00 jgarzik@redhat.com +8 -2 # [libata] some work on the ATAPI path # # Remove a lot of redundant code in ATAPI packet submission. # # ATAPI is still disabled, it doesn't work yet. # # drivers/scsi/libata-core.c # 2004/04/26 00:17:42-04:00 jgarzik@redhat.com +11 -65 # [libata] some work on the ATAPI path # # Remove a lot of redundant code in ATAPI packet submission. # # ATAPI is still disabled, it doesn't work yet. # # ChangeSet # 2004/04/25 23:54:36-04:00 jgarzik@redhat.com # [libata] internal cleanup: kill ata_pio_start # # Integrate it into its caller. # # drivers/scsi/libata-core.c # 2004/04/25 23:54:31-04:00 jgarzik@redhat.com +5 -21 # [libata] internal cleanup: kill ata_pio_start # # Integrate it into its caller. # # ChangeSet # 2004/04/25 23:13:39-04:00 jgarzik@redhat.com # [libata] make ata_wq workqueue local to libata-core module # # Now that libata-scsi module no longer calls queue_work() directly, # we can localize the use of ata_wq. # # drivers/scsi/libata.h # 2004/04/25 23:13:34-04:00 jgarzik@redhat.com +0 -2 # [libata] make ata_wq workqueue local to libata-core module # # Now that libata-scsi module no longer calls queue_work() directly, # we can localize the use of ata_wq. # # drivers/scsi/libata-scsi.c # 2004/04/25 23:13:34-04:00 jgarzik@redhat.com +0 -1 # [libata] make ata_wq workqueue local to libata-core module # # Now that libata-scsi module no longer calls queue_work() directly, # we can localize the use of ata_wq. # # drivers/scsi/libata-core.c # 2004/04/25 23:13:34-04:00 jgarzik@redhat.com +1 -1 # [libata] make ata_wq workqueue local to libata-core module # # Now that libata-scsi module no longer calls queue_work() directly, # we can localize the use of ata_wq. # # ChangeSet # 2004/04/25 23:05:58-04:00 jgarzik@redhat.com # [libata] move ATAPI command initiation code from libata-scsi to libata-core # # ChangeSet # 2004/04/25 22:05:57-05:00 andmike@us.ibm.com # [PATCH] fix module unload problem in sd # # Move scsi_device_get out of sd probe path to allow module to be unloaded # when devices are not open. # # drivers/scsi/libata.h # 2004/04/25 23:05:53-04:00 jgarzik@redhat.com +1 -0 # [libata] move ATAPI command initiation code from libata-scsi to libata-core # # drivers/scsi/libata-scsi.c # 2004/04/25 23:05:53-04:00 jgarzik@redhat.com +4 -46 # [libata] move ATAPI command initiation code from libata-scsi to libata-core # # drivers/scsi/libata-core.c # 2004/04/25 23:05:53-04:00 jgarzik@redhat.com +53 -0 # [libata] move ATAPI command initiation code from libata-scsi to libata-core # # drivers/scsi/sd.c # 2004/04/22 00:20:13-05:00 andmike@us.ibm.com +15 -10 # fix module unload problem in sd # # ChangeSet # 2004/04/25 21:47:36-04:00 jgarzik@redhat.com # [libata] move probe execution from katad thread to workqueue thread # # This allows us to kill the katad thread itself, and several # thread-related variables in struct ata_port. # # include/linux/libata.h # 2004/04/25 21:47:31-04:00 jgarzik@redhat.com +2 -6 # [libata] move probe execution from katad thread to workqueue thread # # This allows us to kill the katad thread itself, and several # thread-related variables in struct ata_port. # # drivers/scsi/libata.h # 2004/04/25 21:47:31-04:00 jgarzik@redhat.com +0 -1 # [libata] move probe execution from katad thread to workqueue thread # # This allows us to kill the katad thread itself, and several # thread-related variables in struct ata_port. # # drivers/scsi/libata-core.c # 2004/04/25 21:47:31-04:00 jgarzik@redhat.com +20 -137 # [libata] move probe execution from katad thread to workqueue thread # # This allows us to kill the katad thread itself, and several # thread-related variables in struct ata_port. # # ChangeSet # 2004/04/25 20:18:57-04:00 jgarzik@redhat.com # [libata] move PIO data xfer from katad thread to workqueue thread # # include/linux/libata.h # 2004/04/25 20:18:52-04:00 jgarzik@redhat.com +15 -7 # [libata] move PIO data xfer from katad thread to workqueue thread # # drivers/scsi/libata-core.c # 2004/04/25 20:18:52-04:00 jgarzik@redhat.com +73 -63 # [libata] move PIO data xfer from katad thread to workqueue thread # # ChangeSet # 2004/04/25 19:28:29-04:00 jgarzik@redhat.com # [libata] move ATAPI startup from katad thread to workqueue thread # # libata creates one thread per ata_port structure. This is inadequate # for our needs, and also cumbersome to maintain, now that workqueues # and Rusty's thread work is available. # # This patch begins to move libata away from doing its own per-port # thread, by moving the ATAPI command initiation code to work under # the workqueue system. # # This patch also creates a private workqueue, global to all of libata. # # include/linux/libata.h # 2004/04/25 19:28:23-04:00 jgarzik@redhat.com +3 -1 # [libata] move ATAPI startup from katad thread to workqueue thread # # libata creates one thread per ata_port structure. This is inadequate # for our needs, and also cumbersome to maintain, now that workqueues # and Rusty's thread work is available. # # This patch begins to move libata away from doing its own per-port # thread, by moving the ATAPI command initiation code to work under # the workqueue system. # # This patch also creates a private workqueue, global to all of libata. # # drivers/scsi/libata.h # 2004/04/25 19:28:23-04:00 jgarzik@redhat.com +1 -0 # [libata] move ATAPI startup from katad thread to workqueue thread # # libata creates one thread per ata_port structure. This is inadequate # for our needs, and also cumbersome to maintain, now that workqueues # and Rusty's thread work is available. # # This patch begins to move libata away from doing its own per-port # thread, by moving the ATAPI command initiation code to work under # the workqueue system. # # This patch also creates a private workqueue, global to all of libata. # # drivers/scsi/libata-scsi.c # 2004/04/25 19:28:23-04:00 jgarzik@redhat.com +3 -2 # [libata] move ATAPI startup from katad thread to workqueue thread # # libata creates one thread per ata_port structure. This is inadequate # for our needs, and also cumbersome to maintain, now that workqueues # and Rusty's thread work is available. # # This patch begins to move libata away from doing its own per-port # thread, by moving the ATAPI command initiation code to work under # the workqueue system. # # This patch also creates a private workqueue, global to all of libata. # # drivers/scsi/libata-core.c # 2004/04/25 19:28:23-04:00 jgarzik@redhat.com +22 -12 # [libata] move ATAPI startup from katad thread to workqueue thread # # libata creates one thread per ata_port structure. This is inadequate # for our needs, and also cumbersome to maintain, now that workqueues # and Rusty's thread work is available. # # This patch begins to move libata away from doing its own per-port # thread, by moving the ATAPI command initiation code to work under # the workqueue system. # # This patch also creates a private workqueue, global to all of libata. # # ChangeSet # 2004/04/25 09:23:51-05:00 aradford@amcc.com # [PATCH] 3ware driver update # # This patch includes the following driver changes: # # 1.26.00.038 - Roll driver minor version to 26 to denote kernel 2.6. # Add support for cmds_per_lun module parameter. # 1.26.00.039 - Fix bug in tw_chrdev_ioctl() polling code. # Fix data_buffer_length usage in tw_chrdev_ioctl(). # Update contact information. # # drivers/scsi/3w-xxxx.h # 2004/04/21 17:27:30-05:00 aradford@amcc.com +4 -4 # 3ware driver update # # drivers/scsi/3w-xxxx.c # 2004/04/21 17:27:29-05:00 aradford@amcc.com +26 -22 # 3ware driver update # # ChangeSet # 2004/04/25 09:20:56-05:00 garloff@suse.de # [PATCH] scsi: don't attach device if PQ indicates not connected # # include/scsi/scsi_device.h # 2004/04/21 11:55:21-05:00 garloff@suse.de +1 -0 # don't attach device if PQ indicates not connected # # include/scsi/scsi.h # 2004/04/21 11:54:43-05:00 garloff@suse.de +7 -0 # don't attach device if PQ indicates not connected # # drivers/scsi/scsi_sysfs.c # 2004/04/21 11:56:33-05:00 garloff@suse.de +2 -1 # don't attach device if PQ indicates not connected # # drivers/scsi/scsi_scan.c # 2004/04/21 11:56:02-05:00 garloff@suse.de +5 -10 # don't attach device if PQ indicates not connected # # ChangeSet # 2004/04/25 09:13:40-05:00 chrisw@osdl.org # [PATCH] Update aacraid MAINTAINERS entry # # MAINTAINERS # 2004/04/19 07:59:12-05:00 chrisw@osdl.org +2 -4 # Update aacraid MAINTAINERS entry # # ChangeSet # 2004/04/25 09:12:06-05:00 jejb@mulgrave.(none) # aic7xxx: compile fix for EISA only case # # We can't refer to PCI functions for a pure # EISA machine. # # drivers/scsi/aic7xxx/aic7xxx_osm.c # 2004/04/25 09:11:53-05:00 jejb@mulgrave.(none) +2 -0 # aic7xxx: compile fix for EISA only case # # ChangeSet # 2004/04/25 09:10:30-05:00 akpm@osdl.org # [PATCH] aic7xxx: fix oops whe hardware is not present # # From: Herbert Xu # # This is because aic7xxx does not unregister itself properly if no devices # are found. This patch fixes the problem. # # drivers/scsi/aic7xxx/aic7xxx_osm.h # 2004/04/06 23:09:31-05:00 akpm@osdl.org +1 -1 # aic7xxx: fix oops whe hardware is not present # # drivers/scsi/aic7xxx/aic7xxx_osm.c # 2004/04/06 23:09:31-05:00 akpm@osdl.org +19 -4 # aic7xxx: fix oops whe hardware is not present # # drivers/scsi/aic7xxx/aic7770_osm.c # 2004/04/06 23:09:31-05:00 akpm@osdl.org +12 -13 # aic7xxx: fix oops whe hardware is not present # # ChangeSet # 2004/04/25 09:08:55-05:00 Kai.Makisara@kolumbus.fi # [PATCH] SCSI tape log message fixes # # This patch changes the st console/log messages: # # - __GFP_NOWARN added to buffer allocation to suppress useless messages # when having to use smaller than default segments # - move log message from enlarge_buffer() to caller so that the tape name # can be printed and remove some debugging messages; now the st messages # should include drive name where applicable (a problem reported by # Hironobu Ishii) # - setting options is logged only when debugging; the most important # options are now seen in sysfs # # drivers/scsi/st.c # 2004/04/04 07:39:34-05:00 Kai.Makisara@kolumbus.fi +54 -66 # SCSI tape log message fixes # # ChangeSet # 2004/04/25 09:05:51-05:00 praka@users.sourceforge.net # [PATCH] qla2xxx set current state fixes # # - always set_current_state(TASK_UNINTERRUBTIBLE) unless we explicitly # check for signals. # # - make all timeouts take HZ based values. # # drivers/scsi/qla2xxx/qla_os.c # 2004/03/31 15:56:30-06:00 praka@users.sourceforge.net +14 -14 # qla2xxx set current state fixes # # drivers/scsi/qla2xxx/qla_init.c # 2004/03/31 15:48:53-06:00 praka@users.sourceforge.net +1 -1 # qla2xxx set current state fixes # # ChangeSet # 2004/04/25 09:04:26-05:00 aris@cathedrallabs.org # [PATCH] qlogic_cs: use qlogicfas408 module # # this patch kills qlogic_core.c and I guess the same idea can be # applied to other pcmcia scsi drivers. comments? # # drivers/scsi/pcmcia/qlogic_stub.c # 2004/03/30 13:46:44-06:00 aris@cathedrallabs.org +35 -30 # qlogic_cs: use qlogicfas408 module # # drivers/scsi/pcmcia/Makefile # 2004/03/30 13:04:19-06:00 aris@cathedrallabs.org +1 -1 # qlogic_cs: use qlogicfas408 module # # BitKeeper/deleted/.del-qlogic_core.c~5bf1eee84f4e0415 # 2004/04/25 09:04:14-05:00 aris@cathedrallabs.org +0 -0 # Delete: drivers/scsi/pcmcia/qlogic_core.c # # ChangeSet # 2004/04/25 09:02:48-05:00 aris@cathedrallabs.org # [PATCH] qlogicfas: split and create a new module # # drivers/scsi/qlogicfas408.h # 2004/03/30 10:49:32-06:00 aris@cathedrallabs.org +27 -31 # qlogicfas: split and create a new module with only # # drivers/scsi/qlogicfas408.c # 2004/04/25 09:02:28-05:00 aris@cathedrallabs.org +637 -0 # # drivers/scsi/qlogicfas.c # 2004/03/30 10:51:19-06:00 aris@cathedrallabs.org +50 -571 # qlogicfas: split and create a new module with only # # drivers/scsi/Makefile # 2004/03/30 06:54:40-06:00 aris@cathedrallabs.org +2 -1 # qlogicfas: split and create a new module with only # # drivers/scsi/qlogicfas408.c # 2004/04/25 09:02:28-05:00 aris@cathedrallabs.org +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/qlogicfas408.c # # ChangeSet # 2004/04/25 09:00:34-05:00 aris@cathedrallabs.org # [PATCH] qlogicfas: kill horrible irq probing # # this patch kills irq probe and also I/O because isn't useful to # probe I/O if we can't probe irq later. # # drivers/scsi/qlogicfas.c # 2004/03/18 05:31:52-06:00 aris@cathedrallabs.org +26 -45 # qlogicfas: kill horrible irq probing # # ChangeSet # 2004/04/25 08:44:44-05:00 jejb@mulgrave.(none) # MPT Fusion add back FC909 support # # From: "Moore, Eric Dean" # # drivers/message/fusion/mptscsih.c # 2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +23 -10 # MPT Fusion add back FC909 support # # drivers/message/fusion/mptctl.h # 2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +31 -0 # MPT Fusion add back FC909 support # # drivers/message/fusion/mptctl.c # 2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +52 -26 # MPT Fusion add back FC909 support # # drivers/message/fusion/mptbase.h # 2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +2 -2 # MPT Fusion add back FC909 support # # drivers/message/fusion/mptbase.c # 2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +157 -0 # MPT Fusion add back FC909 support # # ChangeSet # 2004/04/24 19:37:41-07:00 airlied@pdx.freedesktop.org # drm_irq.h: # remove NO_VERSION # # drivers/char/drm/drm_irq.h # 2004/04/24 19:36:53-07:00 airlied@pdx.freedesktop.org +0 -1 # remove NO_VERSION # # ChangeSet # 2004/04/24 22:15:40-04:00 jeremy@sgi.com # [PATCH] sata_vsc initialization fix # # drivers/scsi/sata_vsc.c # 2004/04/22 15:14:14-04:00 jeremy@sgi.com +4 -0 # sata_vsc initialization fix # # ChangeSet # 2004/04/24 14:12:03-04:00 jgarzik@redhat.com # [libata] clean up taskfile submission to hardware # # When writing taskfile (an ATA command) to the controller, the exact # setup of the taskfile is dependent on the taskfile "protocol": # PIO, PIO Multiple, DMA, Non-data, etc. # # So, we separate out the submission of the taskfile to hardware into # a separate function ata_qc_issue_prot(), which will later be the # home for more code. # # Also, remove some dead code (#if 0'd). # # include/linux/libata.h # 2004/04/24 14:11:58-04:00 jgarzik@redhat.com +0 -1 # [libata] clean up taskfile submission to hardware # # When writing taskfile (an ATA command) to the controller, the exact # setup of the taskfile is dependent on the taskfile "protocol": # PIO, PIO Multiple, DMA, Non-data, etc. # # So, we separate out the submission of the taskfile to hardware into # a separate function ata_qc_issue_prot(), which will later be the # home for more code. # # Also, remove some dead code (#if 0'd). # # drivers/scsi/libata-core.c # 2004/04/24 14:11:58-04:00 jgarzik@redhat.com +53 -56 # [libata] clean up taskfile submission to hardware # # When writing taskfile (an ATA command) to the controller, the exact # setup of the taskfile is dependent on the taskfile "protocol": # PIO, PIO Multiple, DMA, Non-data, etc. # # So, we separate out the submission of the taskfile to hardware into # a separate function ata_qc_issue_prot(), which will later be the # home for more code. # # Also, remove some dead code (#if 0'd). # # ChangeSet # 2004/04/24 13:26:06-04:00 jgarzik@redhat.com # [libata] add ata_tf_{to,from}_fis helpers # # include/linux/libata.h # 2004/04/24 13:26:01-04:00 jgarzik@redhat.com +2 -0 # [libata] add ata_tf_{to,from}_fis helpers # # drivers/scsi/libata-core.c # 2004/04/24 13:26:01-04:00 jgarzik@redhat.com +73 -0 # [libata] add ata_tf_{to,from}_fis helpers # # ChangeSet # 2004/04/23 16:41:30-07:00 stern@rowland.harvard.edu # [PATCH] USB: Altsetting update for USB net drivers # # The only driver under usb/net that needed any altsetting changes was # usbnet. I'm not looking forward to going through all the source files # under usb/serial. :-( # # drivers/usb/net/usbnet.c # 2004/04/22 09:56:28-07:00 stern@rowland.harvard.edu +4 -4 # USB: Altsetting update for USB net drivers # # ChangeSet # 2004/04/23 16:41:04-07:00 stern@rowland.harvard.edu # [PATCH] USB: Altsetting update for USB misc drivers # # This is the altsetting update for the drivers under usb/misc. As you can, # not much was needed at all. # # drivers/usb/misc/uss720.c # 2004/04/22 09:08:37-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting update for USB misc drivers # # drivers/usb/misc/legousbtower.c # 2004/04/22 09:01:26-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting update for USB misc drivers # # ChangeSet # 2004/04/23 16:40:35-07:00 stern@rowland.harvard.edu # [PATCH] USB: Altsetting updates for USB media drivers # # This patch implements the new altsetting regime for the drivers under # usb/media. Not much needed to be changed. I'm unable to test any of the # changes, but at least they compile all right (except that I didn't even # try to compile the pwc driver since it's marked BROKEN). # # The stv680 and w9968cf drivers still include an assumption that they are # bound to interface number 0. Since that the drivers are fairly tightly # linked to a specific kind of device I didn't try to change those # assumptions, but maybe they should be changed. # # drivers/usb/media/vicam.c # 2004/04/22 04:41:49-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/ultracam.c # 2004/04/21 09:26:45-07:00 stern@rowland.harvard.edu +4 -3 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/se401.c # 2004/04/21 09:21:19-07:00 stern@rowland.harvard.edu +1 -1 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/pwc-if.c # 2004/04/21 09:18:47-07:00 stern@rowland.harvard.edu +5 -2 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/ov511.c # 2004/04/22 04:40:56-07:00 stern@rowland.harvard.edu +11 -3 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/konicawc.c # 2004/04/21 09:41:57-07:00 stern@rowland.harvard.edu +12 -5 # USB: Altsetting updates for USB media drivers # # drivers/usb/media/ibmcam.c # 2004/04/21 09:32:00-07:00 stern@rowland.harvard.edu +5 -4 # USB: Altsetting updates for USB media drivers # # ChangeSet # 2004/04/23 16:40:06-07:00 stern@rowland.harvard.edu # [PATCH] USB: Cosmetic improvements for the UHCI driver # # This patch makes a few minor improvements to the appearance of the UHCI # driver. Please apply. # # drivers/usb/host/uhci-hcd.h # 2004/04/19 04:05:56-07:00 stern@rowland.harvard.edu +7 -7 # USB: Cosmetic improvements for the UHCI driver # # drivers/usb/host/uhci-hcd.c # 2004/04/14 03:19:54-07:00 stern@rowland.harvard.edu +10 -10 # USB: Cosmetic improvements for the UHCI driver # # ChangeSet # 2004/04/23 16:39:38-07:00 stern@rowland.harvard.edu # [PATCH] USB: Ignore URB_NO_INTERRUPT flag in UHCI # # Following a suggestion of David Brownell's I have decided to remove # support for the URB_NO_INTERRUPT flag in the UHCI driver. The overall # effect of the flag is to reduce the number of interrupts, thereby # improving throughput somewhat while increasing the duration of the # remaining IRQ handlers quite a lot (i.e., increasing interrupt variance). # So I think we're better off without it. Mind you, this is all in the # absence of any firm measurements. # # A common case where this will come up is during usb-storage bulk # transfers. Such transfers are generally divided into scatter-gather # components each corresponding to a single URB and transferring one memory # page (4 KB). While generating an interrupt for each one is a little # faster than ideal -- about every 3 ms -- it's better than waiting until 64 # KB has been transferred and there are 1024 individual TDs to clean up # during the IRQ. # # drivers/usb/host/uhci-hcd.c # 2004/04/16 04:02:37-07:00 stern@rowland.harvard.edu +7 -3 # USB: Ignore URB_NO_INTERRUPT flag in UHCI # # ChangeSet # 2004/04/23 16:20:26-07:00 baldrick@free.fr # [PATCH] USB usbfs: drop pointless racy check # # The check of interface->dev.driver requires a lock to be taken # to protect against driver binding changes. But in fact I think it # is better just to drop the test. The result is that the caller is # required to claim an interface before changing the altsetting, # which is consistent with the other routines that operate on # interfaces. # # devio.c | 6 ++---- # 1 files changed, 2 insertions(+), 4 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:18:37-07:00 baldrick@free.fr +2 -4 # USB usbfs: drop pointless racy check # # ChangeSet # 2004/04/23 16:20:07-07:00 baldrick@free.fr # [PATCH] USB usbfs: missing lock in proc_getdriver # # Hi Oliver, # # > I expect it to rarely matter, but it might matter now and then. It's # > just a question of hygiene. If you are using a temporary buffer I'd # > like to see it used to full advantage. So either drop the lock or do # > a direct copy. I'd prefer the first option your patch implemented. # # I agree. Greg, please consider applying the updated patch: # # # # Protect against driver binding changes while reading the driver name. # # drivers/usb/core/devio.c # 2004/04/14 07:03:12-07:00 baldrick@free.fr +6 -4 # USB usbfs: missing lock in proc_getdriver # # ChangeSet # 2004/04/23 16:19:43-07:00 baldrick@free.fr # [PATCH] USB usbfs: destroy submitted urbs only on the disconnected interface # # The remaining three patches contain miscellaneous fixes to usbfs. # This one fixes up the disconnect callback to only shoot down urbs # on the disconnected interface, and not on all interfaces. It also adds # a sanity check (this check is pointless because the interface could # never have been claimed in the first place if it failed, but I feel better # having it there). # # devio.c | 6 ++++-- # 1 files changed, 4 insertions(+), 2 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:18:20-07:00 baldrick@free.fr +4 -2 # USB usbfs: destroy submitted urbs only on the disconnected interface # # ChangeSet # 2004/04/23 16:19:14-07:00 baldrick@free.fr # [PATCH] USB usbfs: fix up releaseintf # # The semaphore is now taken in the callers. # # devio.c | 2 -- # 1 files changed, 2 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:18:08-07:00 baldrick@free.fr +0 -2 # USB usbfs: fix up releaseintf # # ChangeSet # 2004/04/23 16:18:50-07:00 baldrick@free.fr # [PATCH] USB usbfs: fix up proc_ioctl # # The semaphore is now taken in the caller. # # devio.c | 2 -- # 1 files changed, 2 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:17:56-07:00 baldrick@free.fr +0 -2 # USB usbfs: fix up proc_ioctl # # ChangeSet # 2004/04/23 16:18:24-07:00 baldrick@free.fr # [PATCH] USB usbfs: fix up proc_setconfig # # The semaphore is now taken in the caller. # # devio.c | 2 -- # 1 files changed, 2 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:17:46-07:00 baldrick@free.fr +0 -2 # USB usbfs: fix up proc_setconfig # # ChangeSet # 2004/04/23 16:17:59-07:00 baldrick@free.fr # [PATCH] USB usbfs: remove obsolete comment from proc_resetdevice # # devio.c | 3 --- # 1 files changed, 3 deletions(-) # # drivers/usb/core/devio.c # 2004/04/14 05:17:37-07:00 baldrick@free.fr +0 -3 # USB usbfs: remove obsolete comment from proc_resetdevice # # ChangeSet # 2004/04/23 16:17:35-07:00 baldrick@free.fr # [PATCH] USB usbfs: replace the per-file semaphore with the per-device semaphore # # devio.c | 43 +++++++++++++++++++++++-------------------- # usbdevice_fs.h | 1 - # 2 files changed, 23 insertions(+), 21 deletions(-) # # include/linux/usbdevice_fs.h # 2004/04/14 05:34:00-07:00 baldrick@free.fr +0 -1 # USB usbfs: replace the per-file semaphore with the per-device semaphore # # drivers/usb/core/devio.c # 2004/04/14 05:17:29-07:00 baldrick@free.fr +23 -20 # USB usbfs: replace the per-file semaphore with the per-device semaphore # # ChangeSet # 2004/04/23 16:17:09-07:00 baldrick@free.fr # [PATCH] USB usbfs: take a reference to the usb device # # Hi Greg, this is the first of a series of patches that replace the # per-file semaphore ps->devsem with the per-device semaphore # ps->dev->serialize. The role of devsem was to protect against # device disconnection. This can be done equally well using # ps->dev->serialize. On the other hand, ps->dev->serialize # protects against configuration and other changes, and has # already been introduced into usbfs in several places. Using # just one semaphore simplifies the code and removes some # remaining race conditions. It should also fix the oopses some # people have been seeing. In this first patch, a reference is # taken to the usb device as long as the usbfs file is open. That # way we can use ps->dev->serialize for as long as ps exists. # # devio.c | 27 ++++++++++++++++----------- # inode.c | 3 --- # 2 files changed, 16 insertions(+), 14 deletions(-) # # drivers/usb/core/inode.c # 2004/04/14 05:15:29-07:00 baldrick@free.fr +0 -3 # USB usbfs: take a reference to the usb device # # drivers/usb/core/devio.c # 2004/04/14 05:15:29-07:00 baldrick@free.fr +16 -11 # USB usbfs: take a reference to the usb device # # ChangeSet # 2004/04/23 15:45:24-07:00 david-b@pacbell.net # [PATCH] USB: khubd fixes # # This goes on top of the other enumeration patch I just sent, # to handle some dubious and/or broken hub configurations better. # # # Make khubd handle some cases better: # # - Track power budget for bus-powered hubs. This version only warns # when the budgets are exceeded. Eventually, the budgets should help # prevent such errors. # # - Rejects illegal USB setup: two consecutive bus powered hubs # would exceed the voltage drop budget, causing much flakiness. # # - For hosts with high speed hubs, warn when devices are hooked up # to full speed hubs if they'd be faster on a high speed one. # # - For hubs that don't do power switching, don't try to use it # # - For hubs that aren't self-powered, don't report local power status # # drivers/usb/core/hub.h # 2004/04/19 08:29:02-07:00 david-b@pacbell.net +2 -0 # USB: khubd fixes # # drivers/usb/core/hub.c # 2004/04/20 20:44:45-07:00 david-b@pacbell.net +143 -15 # USB: khubd fixes # # ChangeSet # 2004/04/23 15:44:57-07:00 david-b@pacbell.net # [PATCH] USB: re-factor enumeration logic # # This is an update to some patches from the December/January # timeframe, which will help sort out some of the mess for # drivers that need to use the reset logic. It's one of the # last significant patches in my gadget-2.6 tree that haven't # yet been merged into the main kernel tree. # # # More refactoring of the enumeration code paths: # # * The first half of usb_new_device() becomes the second half of a new # hub_port_init() routine (resets, sets address, gets descriptor) # # * The middle chunk of hub_port_connect_change() becomes the first half # of that new hub_port_init() routine. # # * Khubd uses that new routine in hub_port_connect_change(). # # * Now usb_new_device() cleans up better after faults, and has # a more useful locking policy (caller owns dev->serialize). # # * Has related minor cleanups including commenting some of # the curious request sequences coming from khubd. # # Refactoring means a lot of the current usb_reset_device() logic won't # need to stay an imperfect clone of the enumeration code ... soon, it # can just call hub_port_init(). # # Even without touching usb_reset_device(), this eliminates a deadlock. # Previously, address0_sem was used both during probe and during reset, # so probe routines can't implement DFU firmware download (involves a # reset; DFU also uncovers other problems) or safely recover from probe # faults by resetting (usb-storage can try that). Now that lock is no # longer held during probe(); so those deadlocks are gone. (And some # drivers, like at76c503, can start to remove ugly workarounds.) # # drivers/usb/core/usb.c # 2004/04/21 03:46:29-07:00 david-b@pacbell.net +13 -79 # USB: re-factor enumeration logic # # drivers/usb/core/hub.c # 2004/04/21 03:46:29-07:00 david-b@pacbell.net +215 -72 # USB: re-factor enumeration logic # # drivers/usb/core/hcd.c # 2004/04/21 03:46:29-07:00 david-b@pacbell.net +12 -0 # USB: re-factor enumeration logic # # ChangeSet # 2004/04/23 15:44:32-07:00 david-b@pacbell.net # [PATCH] USB: usbtest, smp unlink modes # # Handle some SMP-visible unlink states better. # # drivers/usb/misc/usbtest.c # 2004/04/14 20:23:11-07:00 david-b@pacbell.net +3 -3 # USB: usbtest, smp unlink modes # # ChangeSet # 2004/04/23 14:50:19-07:00 greg@kroah.com # [PATCH] USB: fix devio compiler warnings created by previous patch. # # drivers/usb/core/devio.c # 2004/04/23 07:33:30-07:00 greg@kroah.com +2 -2 # USB: fix devio compiler warnings created by previous patch. # # ChangeSet # 2004/04/23 14:49:56-07:00 stern@rowland.harvard.edu # [PATCH] USB: Eliminate dead code from the UHCI driver # # I'm not sure what this piece of code is doing in the UHCI driver. It # looks like someone envisioned queuing several URBs for the same endpoint # simultaneously. Anyway, the driver can't do that and this code can never # run. # # drivers/usb/host/uhci-hcd.c # 2004/04/16 04:02:37-07:00 stern@rowland.harvard.edu +1 -11 # USB: Eliminate dead code from the UHCI driver # # ChangeSet # 2004/04/23 14:49:33-07:00 stern@rowland.harvard.edu # [PATCH] USB: Implement endpoint_disable() for UHCI # # This patch implements the endpoint_disable method for the UHCI driver, as # you requested a while back. It guarantees that during unbinding events # (disconnect, configuration change, rmmod) the UHCI driver will have # finished using every URB for the interface being unbound. It doesn't # quite guarantee that the completion handlers will have finished running, # but it would take a pretty unlikely race to violate that assumption. (I # think it's the same with the OHCI and EHCI drivers.) # # Despite the patch numbering this one applies _after_ as249, which is a # more important bugfix. # # drivers/usb/host/uhci-hcd.h # 2004/04/19 04:05:56-07:00 stern@rowland.harvard.edu +2 -0 # USB: Implement endpoint_disable() for UHCI # # drivers/usb/host/uhci-hcd.c # 2004/04/14 03:19:54-07:00 stern@rowland.harvard.edu +49 -0 # USB: Implement endpoint_disable() for UHCI # # ChangeSet # 2004/04/23 14:49:10-07:00 stern@rowland.harvard.edu # [PATCH] USB: unusual_devs.h update # # On Tue, 20 Apr 2004, Damian Ivereigh wrote: # # > Here is the output of dmesg when plugging in an IBM USB MemKey # > # > usb-storage: This device (0a16,8888,0100 S 06 P 50) has unneeded SubClass and Protocol entries in unusual_devs.h # > Please send a copy of this message to # # Thank you for sending this in. Greg and Pete, here's the patch. # # drivers/usb/storage/unusual_devs.h # 2004/04/19 05:11:29-07:00 stern@rowland.harvard.edu +1 -1 # USB: unusual_devs.h update # # ChangeSet # 2004/04/23 14:48:47-07:00 stern@rowland.harvard.edu # [PATCH] USB: Remove unusual_devs entries for Minolta DiMAGE 7, 7Hi # # It looks safe to conclude that the unusual_devs.h entries for the Minolta # DiMAGE 7x cameras aren't needed. (Michael has tested the 7Hi and it's # definitely unnecessary.) The two other DiMAGE entries probably aren't # needed either, but we don't have any evidence of that so I'm leaving them. # # drivers/usb/storage/unusual_devs.h # 2004/04/16 04:37:06-07:00 stern@rowland.harvard.edu +0 -16 # USB: Remove unusual_devs entries for Minolta DiMAGE 7, 7Hi # # ChangeSet # 2004/04/23 14:48:28-07:00 david-b@pacbell.net # [PATCH] USB: root hubs can report remote wakeup feature # # The patch lets HCDs report the root hub remote wakeup feature to usbcore # through config descriptors, and lets usbcore say whether or not remote # wakeup (of host from sleep, by devices) should be enabled. # # Both OHCI and UHCI HCDs have some remote wakeup support already; I'm not # too sure how well it works. Given (separate) patches, their root hubs # can start to act more like other hubs in this area too. That'll make # it easier to start using USB suspend mode. # # drivers/usb/core/hcd.h # 2004/04/13 11:48:39-07:00 david-b@pacbell.net +10 -1 # USB: root hubs can report remote wakeup feature # # drivers/usb/core/hcd.c # 2004/04/13 11:33:31-07:00 david-b@pacbell.net +28 -11 # USB: root hubs can report remote wakeup feature # # ChangeSet # 2004/04/23 14:48:02-07:00 david-b@pacbell.net # [PATCH] USB: fix usbfs iso interval problem # # In 2.6, ISO transfers on USB require a value for urb->interval ... which # usbfs didn't provide (until this patch), or let user mode drivers specify. # # This patch initializes the urb->interval from the endpoint's descriptor, # so ISO transfers should now work from userspace. It also fixes a related # problem for interrupt transfers. # # drivers/usb/core/devio.c # 2004/04/14 13:36:53-07:00 david-b@pacbell.net +7 -1 # USB: fix usbfs iso interval problem # # ChangeSet # 2004/04/22 05:22:10-07:00 airlied@pdx.freedesktop.org # Merge pdx.freedesktop.org:/home/airlied/linux/linus-2.5 # into pdx.freedesktop.org:/home/airlied/linux/drm-2.6 # # drivers/char/drm/i830_irq.c # 2004/04/22 05:22:01-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i830_dma.c # 2004/04/22 05:22:00-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # drivers/char/drm/i810_dma.c # 2004/04/22 05:22:00-07:00 airlied@pdx.freedesktop.org +0 -0 # Auto merged # # ChangeSet # 2004/04/22 04:39:19-07:00 airlied@pdx.freedesktop.org # drmP.h: # remove unused structure # # drivers/char/drm/drmP.h # 2004/04/22 04:36:28-07:00 airlied@pdx.freedesktop.org +0 -7 # remove unused structure # # ChangeSet # 2004/04/22 04:25:40-07:00 airlied@pdx.freedesktop.org # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/drm_pciids.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +198 -0 # # drivers/char/drm/tdfx.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -8 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/sis.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -7 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/radeon.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -61 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/r128.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -40 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/mga.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -6 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/i830.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -7 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/i810.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -8 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/gamma.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -4 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/ffb.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -1 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # drivers/char/drm/drm_pciids.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -0 # BitKeeper file /home/airlied/linux/drm-dev/drivers/char/drm/drm_pciids.h # # drivers/char/drm/drm_drv.h # 2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +7 -4 # convert DRM to use pci device structures on Linux, move pci ids # into a separate include file (this is auto-generated from the DRM # tree) # # ChangeSet # 2004/04/22 03:43:42-04:00 jgarzik@redhat.com # [libata] Promise driver split part 4: common header # # drivers/scsi/sata_sx4.c # 2004/04/22 03:43:37-04:00 jgarzik@redhat.com +1 -124 # [libata] Promise driver split part 4: common header # # drivers/scsi/sata_promise.c # 2004/04/22 03:43:37-04:00 jgarzik@redhat.com +2 -125 # [libata] Promise driver split part 4: common header # # drivers/scsi/Kconfig # 2004/04/22 03:43:37-04:00 jgarzik@redhat.com +1 -1 # [libata] Promise driver split part 4: common header # # drivers/scsi/sata_promise.h # 2004/04/22 03:39:42-04:00 jgarzik@redhat.com +154 -0 # # drivers/scsi/sata_promise.h # 2004/04/22 03:39:42-04:00 jgarzik@redhat.com +0 -0 # BitKeeper file /spare/repo/libata-2.6/drivers/scsi/sata_promise.h # # ChangeSet # 2004/04/22 03:37:49-04:00 jgarzik@redhat.com # [libata] Promise driver split part 3: remove TX2/4 code from sata_sx4 # # drivers/scsi/sata_sx4.c # 2004/04/22 03:37:44-04:00 jgarzik@redhat.com +26 -333 # [libata] Promise driver split part 3: remove TX2/4 code from sata_sx4 # # ChangeSet # 2004/04/22 03:26:15-04:00 jgarzik@redhat.com # [libata] Promise driver split part 2: remove SX4 code from sata_promise # # drivers/scsi/sata_promise.c # 2004/04/22 03:26:10-04:00 jgarzik@redhat.com +7 -1106 # [libata] Promise driver split part 2: remove SX4 code from sata_promise # # ChangeSet # 2004/04/22 03:11:44-04:00 jgarzik@redhat.com # [libata] Promise driver split part 1: clone to sx4 # # Clone sata_promise to sata_sx4. # # drivers/scsi/Makefile # 2004/04/22 03:11:39-04:00 jgarzik@redhat.com +1 -0 # [libata] Promise driver split part 1: clone to sx4 # # Clone sata_promise to sata_sx4. # # drivers/scsi/Kconfig # 2004/04/22 03:11:39-04:00 jgarzik@redhat.com +10 -2 # [libata] Promise driver split part 1: clone to sx4 # # Clone sata_promise to sata_sx4. # # drivers/scsi/sata_sx4.c # 2004/04/22 03:06:00-04:00 jgarzik@redhat.com +0 -0 # bk cp drivers/scsi/sata_promise.c drivers/scsi/sata_sx4.c # # ChangeSet # 2004/04/22 00:51:41-04:00 jgarzik@redhat.com # [libata sata_sis] add new PCI id # # Also remove constant from linux/pci_ids.h. # # include/linux/pci_ids.h # 2004/04/22 00:49:04-04:00 jgarzik@redhat.com +0 -1 # [libata sata_sis] add new PCI id # # Also remove constant from linux/pci_ids.h. # # drivers/scsi/sata_sis.c # 2004/04/22 00:49:04-04:00 jgarzik@redhat.com +2 -1 # [libata sata_sis] add new PCI id # # Also remove constant from linux/pci_ids.h. # # ChangeSet # 2004/04/21 21:34:03-04:00 pavel@ucw.cz # [PATCH] Cleanups for b44 # # Hi! # # During some unrelated work I was confused by b44_init_hw. Its return # is checked in _open() but nowhere else. I started adding missing # checks, but then I found why its so: it only ever returns 0. # # So this turns it into void. Killed #if 0-ed piece of code and fixed # indentation at one point. Please apply, # Pavel # # ChangeSet # 2004/04/21 18:32:05-07:00 airlied@pdx.freedesktop.org # define an empty driver pci ids for ffb driver # # drivers/char/drm/ffb.h # 2004/04/21 18:31:59-07:00 airlied@pdx.freedesktop.org +2 -0 # define an empty driver pci ids for ffb driver # # drivers/net/b44.c # 2004/04/20 19:24:14-04:00 pavel@ucw.cz +4 -13 # Cleanups for b44 # # ChangeSet # 2004/04/21 20:53:56-04:00 brazilnut@us.ibm.com # [PATCH] pcnet32 timer to free tx skbs for 79C971/972 # # At the next opportunity to add new code to 2.6.6, please apply the following: # # This patch uses an on-chip timer to free completed transmit skb's for the # 79C971 and 972 versions which currently will leave completed transmit # skb's on the transmit ring until new transmit traffic occurs. # # drivers/net/pcnet32.c # 2004/04/20 11:48:49-04:00 brazilnut@us.ibm.com +43 -8 # pcnet32 timer to free tx skbs for 79C971/972 # # ChangeSet # 2004/04/21 20:53:46-04:00 brazilnut@us.ibm.com # [PATCH] pcnet32 add register dump capability # # At the next opportunity to add new code to 2.6.6, please apply the following # patch to include the capability to dump chip registers. Ethtool -d support. # # drivers/net/pcnet32.c # 2004/04/20 11:43:34-04:00 brazilnut@us.ibm.com +76 -3 # pcnet32 add register dump capability # # ChangeSet # 2004/04/21 20:40:33-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #11: cleanup and coding style # # drivers/net/fealnx.c # 2004/04/05 15:54:35-04:00 vda@port.imtp.ilyichevsk.odessa.ua +22 -26 # 2.6 fealnx.c #11: cleanup and coding style # # ChangeSet # 2004/04/21 20:40:25-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #10: replace local delay functions with udelay # # drivers/net/fealnx.c # 2004/04/05 15:54:32-04:00 vda@port.imtp.ilyichevsk.odessa.ua +6 -43 # 2.6 fealnx.c #10: replace local delay functions with udelay # # ChangeSet # 2004/04/21 20:40:18-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #9: fix locking for set_rx_mode # # drivers/net/fealnx.c # 2004/04/05 15:54:30-04:00 vda@port.imtp.ilyichevsk.odessa.ua +16 -2 # 2.6 fealnx.c #9: fix locking for set_rx_mode # # ChangeSet # 2004/04/21 20:40:10-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #8: rework error handling # # Add reset timer, fire it 1/2 sec after 'Too much work in interrupt' # Move reset code from tx_timeout into two separate routines: # reset_and_disable_rxtx() and enable_rxtx() # New function reset_tx_descriptors(): clean up tx ring # after tx_timeout. tx_timeout now does: # reset_and_disable_rxtx() # reset_tx_descriptors() # enable_rxtx() # netif_wake_queue() # Absense of netif_wake_queue() call was probably the cause of # tx_timeout() stalling all future tx. # Remove stop_nic_tx(), not used anymore # # drivers/net/fealnx.c # 2004/04/05 15:54:59-04:00 vda@port.imtp.ilyichevsk.odessa.ua +142 -41 # 2.6 fealnx.c #8: rework error handling # # ChangeSet # 2004/04/21 20:40:03-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #7: Garzik fix (IIRC): add locking to tx_timeout # # drivers/net/fealnx.c # 2004/04/05 15:54:55-04:00 vda@port.imtp.ilyichevsk.odessa.ua +8 -3 # 2.6 fealnx.c #7: Garzik fix (IIRC): add locking to tx_timeout # # ChangeSet # 2004/04/21 20:39:55-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #6: Francois' fixes for low memory handling; remove free_one_rx_descriptor (not used anymore) # # drivers/net/fealnx.c # 2004/04/05 15:54:52-04:00 vda@port.imtp.ilyichevsk.odessa.ua +26 -47 # 2.6 fealnx.c #6: Francois' fixes for low memory handling; remove free_one_rx_descriptor (not used anymore) # # ChangeSet # 2004/04/21 20:39:48-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #5: introduce stop_nic_rxtx(), use it where makes sense # # drivers/net/fealnx.c # 2004/04/05 14:16:24-04:00 vda@port.imtp.ilyichevsk.odessa.ua +15 -6 # 2.6 fealnx.c #5: introduce stop_nic_rxtx(), use it where makes sense # # ChangeSet # 2004/04/21 20:39:40-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #4: stop doing stop_nic_rx/writel(np->crvalue) in reset_rx_descriptors # # this can inadvertently (re)enable tx and/or rx. # # drivers/net/fealnx.c # 2004/04/05 11:16:51-04:00 vda@port.imtp.ilyichevsk.odessa.ua +8 -4 # 2.6 fealnx.c #4: stop doing stop_nic_rx/writel(np->crvalue) in reset_rx_descriptors # # ChangeSet # 2004/04/21 20:39:33-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #3: fix pointer substraction bug # # drivers/net/fealnx.c # 2004/04/05 11:08:07-04:00 vda@port.imtp.ilyichevsk.odessa.ua +5 -5 # 2.6 fealnx.c #3: fix pointer substraction bug # # ChangeSet # 2004/04/21 20:39:25-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #2: add 'static'; fix wrapped comment # # drivers/net/fealnx.c # 2004/04/05 11:01:53-04:00 vda@port.imtp.ilyichevsk.odessa.ua +6 -9 # 2.6 fealnx.c #2: add 'static'; fix wrapped comment # # ChangeSet # 2004/04/21 20:39:18-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #1: replace magic constants with enums # # drivers/net/fealnx.c # 2004/04/05 10:58:48-04:00 vda@port.imtp.ilyichevsk.odessa.ua +42 -33 # 2.6 fealnx.c #1: replace magic constants with enums # # ChangeSet # 2004/04/21 20:39:10-04:00 vda@port.imtp.ilyichevsk.odessa.ua # [PATCH] fealnx #0: replace dev->base_addr with ioaddr # # drivers/net/fealnx.c # 2004/04/05 10:23:40-04:00 vda@port.imtp.ilyichevsk.odessa.ua +8 -10 # 2.6 fealnx.c #0: replace dev->base_addr with ioaddr # # drivers/scsi/sata_sx4.c # 2004/04/14 17:04:43-04:00 jgarzik@redhat.com +2 -2 # [libata sata_promise] fix taskfile delivery cases # # We should only be touching the ATA shadow registers if we are doing # PIO. # # ChangeSet # 2004/04/10 06:56:43-07:00 airlied@pdx.freedesktop.org # From Jon Smirl: # This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS # # drivers/char/drm/radeon_drm.h # 2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +60 -27 # From Jon Smirl: # This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS # # drivers/char/drm/r128_drm.h # 2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +42 -19 # From Jon Smirl: # This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS # # drivers/char/drm/mga_drm.h # 2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +24 -11 # From Jon Smirl: # This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS # # drivers/char/drm/drm_sarea.h # 2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +14 -0 # From Jon Smirl: # This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS # # ChangeSet # 2004/04/10 06:27:26-07:00 airlied@pdx.freedesktop.org # * Introduce COMMIT_RING() as in radeon DRM, stop using error prone # writeback for ring read pointer (Paul Mackerras) # * Get rid of some superfluous stuff, minor fixes # # drivers/char/drm/r128_state.c # 2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +25 -9 # * Introduce COMMIT_RING() as in radeon DRM, stop using error prone # writeback for ring read pointer (Paul Mackerras) # * Get rid of some superfluous stuff, minor fixes # # drivers/char/drm/r128_drv.h # 2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +32 -25 # * Introduce COMMIT_RING() as in radeon DRM, stop using error prone # writeback for ring read pointer (Paul Mackerras) # * Get rid of some superfluous stuff, minor fixes # # drivers/char/drm/r128_cce.c # 2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +9 -30 # * Introduce COMMIT_RING() as in radeon DRM, stop using error prone # writeback for ring read pointer (Paul Mackerras) # * Get rid of some superfluous stuff, minor fixes # # ChangeSet # 2004/04/10 05:26:04-07:00 airlied@pdx.freedesktop.org # radeon_drm.h: # missing define from previous checkin # # drivers/char/drm/radeon_drm.h # 2004/04/10 05:25:29-07:00 airlied@pdx.freedesktop.org +1 -0 # missing define from previous checkin # # ChangeSet # 2004/04/10 00:52:10-07:00 airlied@pdx.freedesktop.org # Miscellaneous changes from DRM CVS # # drivers/char/drm/drm_stub.h # 2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +2 -2 # retab.. # # drivers/char/drm/drm_bufs.h # 2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +1 -1 # use correct preproc directive.. # # drivers/char/drm/drm_agpsupport.h # 2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +2 -0 # add another error test for 2.6 # # drivers/char/drm/drmP.h # 2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +0 -12 # move lock to drm.h # # drivers/char/drm/drm.h # 2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +14 -2 # move the lcok to drm.h align some preprocesor stuff # # ChangeSet # 2004/04/10 00:06:33-07:00 airlied@pdx.freedesktop.org # drm_ctx_dtor.patch # Submitted by: Erdi Chen # # drivers/char/drm/drm_memory_debug.h # 2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +1 -0 # drm_ctx_dtor.patch # Submitted by: Erdi Chen # # drivers/char/drm/drm_drv.h # 2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +27 -0 # drm_ctx_dtor.patch # Submitted by: Erdi Chen # # drivers/char/drm/drm_context.h # 2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +29 -0 # drm_ctx_dtor.patch # Submitted by: Erdi Chen # # drivers/char/drm/drmP.h # 2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +16 -0 # drm_ctx_dtor.patch # Submitted by: Erdi Chen # # ChangeSet # 2004/04/09 23:56:13-07:00 airlied@pdx.freedesktop.org # More differentiated error codes for DRM(agp_acquire) # # drivers/char/drm/drm_agpsupport.h # 2004/04/09 23:56:07-07:00 airlied@pdx.freedesktop.org +5 -1 # More differentiated error codes for DRM(agp_acquire) # # ChangeSet # 2004/04/09 23:44:36-07:00 airlied@pdx.freedesktop.org # From Michel Daenzer: # Adapt to nopage() prototype change in Linux 2.6.1. # # Reviewed by: Arjan van de Ven , additional feedback # from William Lee Irwin III and Linus Torvalds. # # drivers/char/drm/drm_vm.h # 2004/04/09 23:44:27-07:00 airlied@pdx.freedesktop.org +97 -51 # From Michel Daenzer: # Adapt to nopage() prototype change in Linux 2.6.1. # # Reviewed by: Arjan van de Ven , additional feedback # from William Lee Irwin III and Linus Torvalds. # # drivers/char/drm/drmP.h # 2004/04/09 23:44:27-07:00 airlied@pdx.freedesktop.org +0 -12 # From Michel Daenzer: # Adapt to nopage() prototype change in Linux 2.6.1. # # Reviewed by: Arjan van de Ven , additional feedback # from William Lee Irwin III and Linus Torvalds. # # ChangeSet # 2004/04/09 23:20:06-07:00 airlied@pdx.freedesktop.org # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/radeon_drv.h # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/radeon_cp.c # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -7 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/r128_drv.h # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/r128_cce.c # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -7 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/mga_drv.h # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/mga_dma.c # 2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -8 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # drivers/char/drm/drm_bufs.h # 2004/04/09 23:19:58-07:00 airlied@pdx.freedesktop.org +3 -1 # From Eric Anholt + Jon Smirl: # Don't ioremap the framebuffer area. The ioremapped area wasn't used by # anything. # # ChangeSet # 2004/04/09 23:07:59-07:00 airlied@pdx.freedesktop.org # From Eric Anholt: # Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if # dev->lock.hw_lock is already set. This fixes the case of two X Servers running # on the same head on different VTs with interface 1.1, by making the 2nd head # fail to inizialize like before. # # drivers/char/drm/drm_bufs.h # 2004/04/09 23:07:52-07:00 airlied@pdx.freedesktop.org +6 -0 # From Eric Anholt: # Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if # dev->lock.hw_lock is already set. This fixes the case of two X Servers running # on the same head on different VTs with interface 1.1, by making the 2nd head # fail to inizialize like before. # # ChangeSet # 2004/04/09 23:00:48-07:00 airlied@pdx.freedesktop.org # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/radeon_cp.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/r128_cce.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/mga_dma.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/i830_dma.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +2 -2 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/i810_dma.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/gamma_dma.c # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/drm_irq.h # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +57 -18 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/drm_ioctl.h # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +36 -137 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/drm_drv.h # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +14 -4 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # drivers/char/drm/drmP.h # 2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +12 -4 # From Eric Anholt: some cleanups from AlanH: # - Tie the DRM to a specific device: setunique no longer succeeds when given # a busid that doesn't correspond to the device the DRM is attached to. This # is a breaking of backwards-compatibility only for the multiple-DRI-head case # with X Servers that don't use interface 1.1. # - Move irq_busid to drm_irq.h and make it only return the IRQ for the current # device. Retains compatibility with previous X Servers, cleans up unnecessary # code. This means no irq_busid on !__HAVE_IRQ, but can be changed if # necessary. # - Bump interface version to 1.2. This version when set signifies that the # control ioctl should ignore the irq number passed in and enable the # interrupt handler for the attached device. Otherwise it errors out when # the passed-in irq is not equal to the device's. # - Store the highest version the interface has been set to in the device. # # ChangeSet # 2004/04/09 22:34:54-07:00 airlied@pdx.freedesktop.org # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/radeon_state.c # 2004/04/09 22:34:48-07:00 airlied@pdx.freedesktop.org +370 -42 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/radeon_drv.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +5 -0 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/radeon_drm.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +14 -1 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/radeon_cp.c # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +20 -9 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/radeon.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +19 -3 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/drm_os_linux.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +4 -0 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/drm_fops.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +2 -0 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/drm_drv.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +3 -0 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # drivers/char/drm/drmP.h # 2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +3 -0 # From: Michel Daenzer: # Memory layout transition: # # * the 2D driver initializes MC_FB_LOCATION and related registers sanely # * the DRM deduces the layout from these registers # * clients use the new SETPARAM ioctl to tell the DRM where they think the # framebuffer is located in the card's address space # * the DRM uses all this information to check client state and fix it up if # necessary # # This is a prerequisite for things like direct rendering with IGP chips and # video capturing. # # ChangeSet # 2004/04/09 21:32:02-07:00 airlied@pdx.freedesktop.org # From Eric Anholt: # Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server # or client to notify the DRM that it expects a certain version of the device # dependent or device independent interface. If the major doesn't match or minor # is too large, EINVAL is returned. A major of -1 means that the requestor # doesn't care about that portion of the interface. The ioctl returns the actual # versions in the same struct. # # drivers/char/drm/drm_ioctl.h # 2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +74 -1 # From Eric Anholt: # Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server # or client to notify the DRM that it expects a certain version of the device # dependent or device independent interface. If the major doesn't match or minor # is too large, EINVAL is returned. A major of -1 means that the requestor # doesn't care about that portion of the interface. The ioctl returns the actual # versions in the same struct. # # drivers/char/drm/drm_drv.h # 2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +1 -0 # From Eric Anholt: # Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server # or client to notify the DRM that it expects a certain version of the device # dependent or device independent interface. If the major doesn't match or minor # is too large, EINVAL is returned. A major of -1 means that the requestor # doesn't care about that portion of the interface. The ioctl returns the actual # versions in the same struct. # # drivers/char/drm/drmP.h # 2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +2 -0 # From Eric Anholt: # Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server # or client to notify the DRM that it expects a certain version of the device # dependent or device independent interface. If the major doesn't match or minor # is too large, EINVAL is returned. A major of -1 means that the requestor # doesn't care about that portion of the interface. The ioctl returns the actual # versions in the same struct. # # drivers/char/drm/drm.h # 2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +11 -0 # From Eric Anholt: # Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server # or client to notify the DRM that it expects a certain version of the device # dependent or device independent interface. If the major doesn't match or minor # is too large, EINVAL is returned. A major of -1 means that the requestor # doesn't care about that portion of the interface. The ioctl returns the actual # versions in the same struct. # # ChangeSet # 2004/04/09 20:03:25-07:00 airlied@pdx.freedesktop.org # - Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to get # the drm_file_t * based on the filp passed in ioctl handlers. # # drivers/char/drm/drm_os_linux.h # 2004/04/09 20:03:19-07:00 airlied@pdx.freedesktop.org +2 -0 # - Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to get # the drm_file_t * based on the filp passed in ioctl handlers. # # ChangeSet # 2004/04/09 19:35:05-07:00 airlied@pdx.freedesktop.org # left gamma_dma.c out of last changeset # # drivers/char/drm/gamma_dma.c # 2004/04/09 19:34:58-07:00 airlied@pdx.freedesktop.org +3 -3 # FRom Eric Anholt: # Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit. # # ChangeSet # 2004/04/09 19:12:53-07:00 airlied@pdx.freedesktop.org # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/drm_irq.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +333 -0 # # drivers/char/drm/radeon_irq.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/radeon_drv.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/radeon_cp.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/radeon.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/r128_irq.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/r128_drv.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/r128_cce.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/r128.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/mga_irq.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/mga_drv.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/mga_dma.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/mga.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i830_irq.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i830_drv.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i830_dma.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i830.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +2 -2 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i810_dma.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/i810.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/gamma_drv.c # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/gamma.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +2 -2 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/drm_irq.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +0 -0 # BitKeeper file /home/airlied/linux/drm-dev/drivers/char/drm/drm_irq.h # # drivers/char/drm/drm_drv.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +6 -6 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/drm_dma.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +5 -298 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # drivers/char/drm/drmP.h # 2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +11 -7 # From: Eric Anholt: # - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from # __HAVE_DMA. This will be useful for adding vblank sync support to sis and # tdfx. Rename dma_service to irq_handler, which is more accurately what it is. # - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have # the right number of underscores. This may have been a problem in the case # that the server died without doing its DRM_IOCTL_CONTROL to uninit # # ChangeSet # 2004/04/09 00:28:45-07:00 airlied@pdx.freedesktop.org # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. clean up tdfx to look like everyone else.. # # drivers/char/drm/tdfx_drv.c # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +0 -41 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. clean up tdfx to look like everyone else.. # # drivers/char/drm/tdfx.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +18 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. clean up tdfx to look like everyone else.. # # drivers/char/drm/sis.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/radeon.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +60 -1 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/r128.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +40 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/mga.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +6 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/i830.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/i810.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +8 -1 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/gamma.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +4 -0 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/drm_drv.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +87 -115 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # drivers/char/drm/drmP.h # 2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -4 # - Converted Linux drivers to initialize DRM instances based on PCI IDs, not # just a single instance. The PCI ID lists include a driver private field, which may be used # by drivers for chip family or other information. Based on work by jonsmirl # and Eric Anholt. I've left out the PCI device naming for this patch as # that might be a bit controversial. # # ChangeSet # 2004/04/06 08:37:52-04:00 hirofumi@mail.parknet.co.jp # [PATCH] 8139too: more useful debug info for tx_timeout # # Hi, # # I think this patch is useful for looking whether it's the real driver # bug or other bug. # # What do you think of this? If ok, please apply. # -- # OGAWA Hirofumi # # # # [PATCH] 8139too: more useful debug info for tx_timeout # # /* disable Tx ASAP, if not already */ # tmp8 = RTL_R8 (ChipCmd); # if (tmp8 & CmdTxEnb) # RTL_W8 (ChipCmd, CmdRxEnb); # # The above will clear the Tx Descs. So, this prints the debugging info # before rtl8139_tx_timeout() does it. And IntrStatus etc. also prints # anytime for the debug. # # drivers/net/8139too.c # 2004/04/05 12:35:48-04:00 hirofumi@mail.parknet.co.jp +11 -15 # 8139too: more useful debug info for tx_timeout # # drivers/scsi/sata_sx4.c # 2004/03/26 20:40:53-05:00 jgarzik@redhat.com +66 -17 # [libata sata_promise] better locking and error handling # # * Prefer spin_lock() to spin_lock_irq() in interrupt handler # * Reset each port, before probing the SATA phy # * Reset port when every time an error occurs # # drivers/scsi/sata_sx4.c # 2004/03/26 01:13:16-05:00 jgarzik@redhat.com +15 -22 # [libata sata_promise] minor initialization updates # # * remove incorrect PATA port check # * enable undocumented bit 13 in flash control register, # because the Promise driver does so. # * wait 10 ms after setting TBG mode, for the same reason. # # drivers/scsi/sata_sx4.c # 2004/03/25 01:44:03-05:00 jgarzik@redhat.com +24 -29 # [libata] consolidate data transfer mode handling # # The various ways you can send data to/from your ATA device is # known as the ATA taskfile protocol: PIO single sector, PIO # multiple sector, DMA, DMA TCQ, DMA NCQ, ... # # Prior to this change, the data direction (read/write) was encoded # implicitly into the ATA_PROT_xxx value itself. This increased # complexity in some areas, and inhibited flexibility in others. # # This change separates data direction from taskfile protocol, and also # moves the data direction flag (ATA_QCFLAG_WRITE) down to a lower # level (ATA_TFLAG_WRITE). # # drivers/scsi/sata_sx4.c # 2004/03/24 23:50:29-05:00 jgarzik@redhat.com +20 -1 # [libata sata_promise] check for PATA port on PDC20375 # # We don't handle it yet, but this prints out a message in its presence, # permitting verification of the check and informing users why their # PATA device is not recognized. # # drivers/scsi/sata_sx4.c # 2004/03/18 17:55:44-05:00 jgarzik@redhat.com +3 -0 # [libata] explicitly set consistent DMA mask to 0xffffffff # # Do not rely on the default being 0xffffffff. # # drivers/scsi/sata_sx4.c # 2004/03/18 13:22:43-05:00 jgarzik@redhat.com +0 -1 # [libata] remove unneeded linux/config.h includes # # drivers/scsi/sata_sx4.c # 2004/03/18 05:34:59-05:00 jgarzik@redhat.com +0 -2 # [libata] API cleanup # # Remove ->phy_config hook, everybody used pata_phy_config. Rename # function to ata_set_mode, and directly call internally. # # drivers/scsi/sata_sx4.c # 2004/03/12 21:28:52-05:00 jgarzik@redhat.com +1 -7 # [libata] clean up module_init() hook of sata_{promise,sil,svw} drivers # # The more verbose form existed for decreased differences with the 2.4 # backport. But differences in this area existed anyway, so why not # clean up the 2.6 versions even more. # # drivers/scsi/sata_sx4.c # 2004/03/10 21:36:23-05:00 jgarzik@redhat.com +0 -21 # [libata] make set_{pio,udma}mode hooks optional # # Only one driver actually uses them. # # drivers/scsi/sata_sx4.c # 2004/03/09 07:14:51-05:00 jeremy@sgi.com +4 -1 # [libata] Split up shared IO register locations into individual components # # Most ATA host controllers follow a standard layout for the # ATA shadow registers, where command/status, error/feature, and # devctl/altstatus share a single bus I/O address, because one register # of each pair is read-only, and the other is write-only. # # On the Vitesse/Intel chip, all registers are given distinction bus I/O # addresses, which necessitates changing the libata data structures # to cope with this. This simply involves storing a few more bus addresses. # # drivers/scsi/sata_sx4.c # 2004/03/08 22:33:20-05:00 jgarzik@redhat.com +9 -1 # [libata sata_promise] provide proper SCSI completion function # # Promise driver uses a custom error handling function, so we need # the fix that was applied to the libata core: the SCSI error # handling thread requires that we complete commands using a special # completion function, since the normal one doesn't work inside # the error handling thread. # # drivers/scsi/sata_sx4.c # 2004/02/26 21:23:26-05:00 jgarzik@redhat.com +1 -1 # [libata] limit S/G table size to 128 entries # # Agreeing with Ben H's recommendation, I reduce the max-hw-segments # number to 128, to match max-phys-segments number. This shouldn't # affect performance because 128*64K is far above the max transfer size # for most current IDE devices. Even 128*4K is OK. # # drivers/scsi/sata_sx4.c # 2004/02/25 18:29:10-05:00 jgarzik@redhat.com +1 -1 # [libata] bump versions # # drivers/scsi/sata_sx4.c # 2004/02/25 18:26:06-05:00 dmilburn@redhat.com +57 -1 # [libata sata_promise] Fix DIMM initialization on PCI-X bus # # drivers/scsi/sata_sx4.c # 2004/02/13 13:07:29-05:00 jgarzik@redhat.com +1 -1 # Bump libata, ata_piix to version 1.0. # # Also update copyrights for 2004. # # drivers/scsi/sata_sx4.c # 2003/12/17 17:35:39-05:00 jgarzik@redhat.com +35 -12 # [libata promise] fix another ugly bug # # For the SX4, only one Host DMA (local DIMM) engine is on the hardware, # while there is an ATA engine for each SATA port. This means that # Host DMA transactions must be queued. When previously fixing this problem # (the driver had previously assumed an HDMA engine per port), I stored # the HDMA packet queue in a per-port data structure. # # This was incorrect: this patch changes it to correctly use a # per-host data structure, not a per-port structure. # # drivers/scsi/sata_sx4.c # 2003/12/16 19:16:55-05:00 Michael_E_Brown@Dell.com +1 -0 # [libata] fake geometry for partition tables / setups that need such # # drivers/scsi/sata_sx4.c # 2003/12/05 13:41:01-05:00 jgarzik@redhat.com +413 -3 # [libata promise] Properly initialize DIMM, on SX4 # # On-board DIMM should be sized and initialized by the driver. Previously, # a single DIMM size was simply (and incorrectly) assumed, and # initialization was presumed to have been done by the card's BIOS. # # Contributed by Promise, updated by David Milburn @ Red Hat. # # drivers/scsi/sata_sx4.c # 2003/11/30 11:56:01-05:00 grundler@parisc-linux.org +2 -2 # [libata] use sg_dma_xxx macros # # Fixes build on some platforms, fixes issues on others. # # drivers/scsi/sata_sx4.c # 2003/11/26 16:10:43-05:00 jgarzik@redhat.com +71 -53 # [libata] Fix PDC20621: we only have one Host DMA engine, not one per port # # Whoops. So, we need to queue HDMA transactions internally. # # drivers/scsi/sata_sx4.c # 2003/11/14 19:52:35-05:00 pp@ee.oulu.fi +2 -0 # [libata] add Promise PCI id # # drivers/scsi/sata_sx4.c # 2003/11/10 10:41:07-05:00 jgarzik@redhat.com +26 -11 # [libata promise] fixes suggested by Promise # # * flush host FIFO after sending data to DIMM window # * don't set SCR addresses, as the hardware doesn't have SCRs # (cosmetic) # # drivers/scsi/sata_sx4.c # 2003/11/07 16:24:15-05:00 jgarzik@redhat.com +11 -1 # [libata] fix Promise PCI posting bugs # # drivers/scsi/sata_sx4.c # 2003/11/06 13:31:55-05:00 jgarzik@redhat.com +3 -3 # [libata] fix ugly Promise interrupt masking bug # # drivers/scsi/sata_sx4.c # 2003/10/31 09:55:43-05:00 jgarzik@redhat.com +2 -0 # [libata] add Promise SATA pci id # # drivers/scsi/sata_sx4.c # 2003/10/28 11:04:25-05:00 jgarzik@redhat.com +56 -15 # [libata] Add paranoia checks/settings suggested by Promise # # drivers/scsi/sata_sx4.c # 2003/10/23 19:27:35-04:00 jgarzik@redhat.com +5 -3 # [libata] PDC20621 hdma fixes # # drivers/scsi/sata_sx4.c # 2003/10/22 22:26:51-04:00 jgarzik@redhat.com +2 -2 # [libata] fix Promise build on older compilers # # drivers/scsi/sata_sx4.c # 2003/10/22 18:02:58-04:00 jgarzik@redhat.com +231 -79 # [libata] more pdc20621 work # # drivers/scsi/sata_sx4.c # 2003/10/22 12:33:27-04:00 jgarzik@redhat.com +346 -80 # [libata] fill in a lot more Promise PDC20621 support # # drivers/scsi/sata_sx4.c # 2003/10/22 01:05:47-04:00 jgarzik@redhat.com +102 -44 # [libata] convert Promise to packetized DMA # # drivers/scsi/sata_sx4.c # 2003/10/21 23:13:53-04:00 jgarzik@redhat.com +4 -0 # [libata] add per-driver port init/shutdown hooks, with helper defaults # # drivers/scsi/sata_sx4.c # 2003/10/21 19:21:36-04:00 jgarzik@redhat.com +766 -0 # # drivers/scsi/sata_sx4.c # 2003/10/21 19:21:36-04:00 jgarzik@redhat.com +0 -0 # BitKeeper file /spare/repo/libata-2.5-merge/drivers/scsi/sata_promise.c # diff -Nru a/CREDITS b/CREDITS --- a/CREDITS Tue May 18 23:38:08 2004 +++ b/CREDITS Tue May 18 23:38:08 2004 @@ -1284,8 +1284,8 @@ D: National Language Support D: Linux Internationalization Project D: German Localization for Linux and GNU software -S: Helenenstrasse 18 -S: 65183 Wiesbaden +S: Kriemhildring 12a +S: 65795 Hattersheim am Main S: Germany N: Christoph Hellwig diff -Nru a/Documentation/arm/IXP4xx b/Documentation/arm/IXP4xx --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/arm/IXP4xx Tue May 18 23:38:09 2004 @@ -0,0 +1,155 @@ + +------------------------------------------------------------------------- +Release Notes for Linux on Intel's IXP4xx Network Processor + +Maintained by Deepak Saxena +------------------------------------------------------------------------- + +1. Overview + +Intel's IXP4xx network processor is a highly integrated SOC that +is targeted for network applications, though it has become popular +in industrial control and other areas due to low cost and power +consumption. The IXP4xx family currently consists of several processors +that support different network offload functions such as encryption, +routing, firewalling, etc. For more information on the various +versions of the CPU, see: + + http://developer.intel.com/design/network/products/npfamily/ixp4xx.htm + +Intel also made the IXCP1100 CPU for sometime which is an IXP4xx +stripped of much of the network intelligence. + +2. Linux Support + +Linux currently supports the following features on the IXP4xx chips: + +- Dual serial ports +- PCI interface +- Flash access (MTD/JFFS) +- I2C through GPIO +- GPIO for input/output/interrupts + See include/asm-arm/arch-ixp4xx/platform.h for access functions. +- Timers (watchdog, OS) + +The following components of the chips are not supported by Linux and +require the use of Intel's propietary CSR softare: + +- USB device interface +- Network interfaces (HSS, Utopia, NPEs, etc) +- Network offload functionality + +If you need to use any of the above, you need to download Intel's +software from: + + http://developer.intel.com/design/network/products/npfamily/ixp425swr1.htm + +DO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPIETARY +SOFTWARE. + +There are several websites that provide directions/pointers on using +Intel's software: + +http://ixp4xx-osdg.sourceforge.net/ + Open Source Developer's Guide for using uClinux and the Intel libraries + +http://gatewaymaker.sourceforge.net/ + Simple one page summary of building a gateway using an IXP425 and Linux + +http://ixp425.sourceforge.net/ + ATM device driver for IXP425 that relies on Intel's libraries + +3. Known Issues/Limitations + +3a. Limited inbound PCI window + +The IXP4xx family allows for up to 256MB of memory but the PCI interface +can only expose 64MB of that memory to the PCI bus. This means that if +you are running with > 64MB, all PCI buffers outside of the accessible +range will be bounced using the routines in arch/arm/common/dmabounce.c. + +3b. Limited outbound PCI window + +IXP4xx provides two methods of accessing PCI memory space: + +1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). + To access PCI via this space, we simply ioremap() the BAR + into the kernel and we can use the standard read[bwl]/write[bwl] + macros. This is the preffered method due to speed but it + limits the system to just 64MB of PCI memory. This can be + problamatic if using video cards and other memory-heavy devices. + +2) If > 64MB of memory space is required, the IXP4xx can be + configured to use indirect registers to access PCI This allows + for up to 128MB (0x48000000 to 0x4fffffff) of memory on the bus. + The disadvantadge of this is that every PCI access requires + three local register accesses plus a spinlock, but in some + cases the performance hit is acceptable. In addition, you cannot + mmap() PCI devices in this case due to the indirect nature + of the PCI window. + +By default, the direct method is used for performance reasons. If +you need more PCI memory, enable the IXP4XX_INDIRECT_PCI config option. + +3c. GPIO as Interrupts + +Currently the code only handles level-sensitive GPIO interrupts + +4. Supported platforms + +ADI Engineering Coyote Gateway Reference Platform +http://www.adiengineering.com/productsCoyote.html + + The ADI Coyote platform is reference design for those building + small residential/office gateways. One NPE is connected to a 10/100 + interface, one to 4-port 10/100 switch, and the third to and ADSL + interface. In addition, it also supports to POTs interfaces connected + via SLICs. Note that those are not supported by Linux ATM. Finally, + the platform has two mini-PCI slots used for 802.11[bga] cards. + Finally, there is an IDE port hanging off the expansion bus. + +Gateworks Avila Network Platform +http://www.gateworks.com/avila_sbc.htm + + The Avila platform is basically and IXDP425 with the 4 PCI slots + replaced with mini-PCI slots and a CF IDE interface hanging off + the expansion bus. + +Intel IXDP425 Development Platform +http://developer.intel.com/design/network/products/npfamily/ixdp425.htm + + This is Intel's standard reference platform for the IXDP425 and is + also known as the Richfield board. It contains 4 PCI slots, 16MB + of flash, two 10/100 ports and one ADSL port. + +Motorola PrPMC1100 Processor Mezanine Card +http://www.fountainsys.com/datasheet/PrPMC1100.pdf + + The PrPMC1100 is based on the IXCP1100 and is meant to plug into + and IXP2400/2800 system to act as the system controller. It simply + contains a CPU and 16MB of flash on the board and needs to be + plugged into a carrier board to function. Currently Linux only + supports the Motorola PrPMC carrier board for this platform. + See https://mcg.motorola.com/us/ds/pdf/ds0144.pdf for info + on the carrier board. + +5. TODO LIST + +- Add support for Coyote IDE +- Add support for edge-based GPIO interrupts +- Add support for CF IDE on expansion bus + +6. Thanks + +The IXP4xx work has been funded by Intel Corp. and MontaVista Software, Inc. + +The following people have contributed patches/comments/etc: + +Lutz Jaenicke +Justin Mayfield +Robert E. Ranslam +[I know I've forgotten others, please email me to be added] + +------------------------------------------------------------------------- + +Last Update: 5/13/2004 diff -Nru a/Documentation/arm/SA1100/PCMCIA b/Documentation/arm/SA1100/PCMCIA --- a/Documentation/arm/SA1100/PCMCIA Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,374 +0,0 @@ -Kernel Low-Level PCMCIA Interface Documentation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -John G Dorsey -Updated: 30 June, 2000 - - -Note: this interface has not been finalized! -See also: http://www.cs.cmu.edu/~wearable/software/pcmcia-arm.html - - -Introduction - -Early versions of PCMCIA Card Services for StrongARM were designed to -permit a single socket driver to run on a variety of SA-1100 boards by -using a userland configuration process. During the conversion to the 2.3 -kernel series, all of the configuration has moved into sub-drivers in the -kernel proper (see linux/drivers/pcmcia/sa1100*). This document describes -the low-level interface between those sub-drivers and the sa1100 socket -driver module. - -Presently, there are six operations which must be provided by the -board-specific code. Only functions whose implementation is likely to -differ across board designs are required at this level. Some examples -include: - - - configuring card detect lines to generate interrupts - - sensing the legal voltage levels for inserted cards - - asserting the reset signal for a card - -Functions which are assumed to be the same across all designs are -performed within the generic socket driver itself. Some examples of these -kinds of operations include: - - - configuring memory access times based on the core clock frequency - - reads/writes on memory, byte swizzling, ... - -The current implementation allows the specific per-board set of low-level -operations to be determined at run time. For each specific board, the -following structure should be filled in: - - struct pcmcia_low_level { - int (*init)(struct pcmcia_init *); - int (*shutdown)(void); - int (*socket_state)(struct pcmcia_state_array *); - int (*get_irq_info)(struct pcmcia_irq_info *); - int (*configure_socket)(const struct pcmcia_configure *); - }; - -The component functions are described in detail below. Using the -machine_is_*() tests, the pointer `pcmcia_low_level' should be assigned to -the location of the table for your board. - - -0. init(struct pcmcia_init *init) - -This operation has three responsibilities: - - - perform any board-specific initialization tasks - - associate the given handler with any interrupt-generating signals - such as card detection, or battery voltage detection - - set up any necessary edge detection for card ready signals - -Argument passing for this operation is implemented by the following -structure: - - struct pcmcia_init { - void (*handler)(int irq, void *dev, struct pt_regs *regs); - struct pcmcia_maps *maps; - }; - -Here, `handler' is provided by the socket driver, and `maps' must be -modified if the default mapping isn't appropriate. This operation should -return one of two values: - - - the highest-numbered socket available, plus one - - a negative number, indicating an error in configuration - -Note that the former case is _not_ the same as "the number of sockets -available." In particular, if your design uses SA-1100 slot "one" but -not slot "zero," you MUST report "2" to the socket driver. - - -1. shutdown(void) - -This operation takes no arguments, and will be called during cleanup for -the socket driver module. Any state associated with the socket controller, -including allocated data structures, reserved IRQs, etc. should be -released in this routine. - -The return value for this operation is not examined. - - -2. socket_state(struct pcmcia_state_array *state_array) - -This operation will be invoked from the interrupt handler which was set up -in the earlier call to init(). Note, however, that it should not include -any side effects which would be inappropriate if the operation were to -occur when no interrupt is pending. (An extra invocation of this operation -currently takes place to initialize state in the socket driver.) - -Argument passing for this operation is handled by a structure which -contains an array of the following type: - - struct pcmcia_state { - unsigned detect: 1, - ready: 1, - bvd1: 1, - bvd2: 1, - wrprot: 1, - vs_3v: 1, - vs_Xv: 1; - }; - -Upon return from the operation, a struct pcmcia_state should be filled in -for each socket available in the hardware. For every array element (up to -`size' in the struct pcmcia_state_saarray) which does not correspond to an -available socket, zero the element bits. (This includes element [0] if -socket zero is not used.) - -Regardless of how the various signals are routed to the SA-1100, the bits -in struct pcmcia_state always have the following semantics: - - detect - 1 if a card is fully inserted, 0 otherwise - ready - 1 if the card ready signal is asserted, 0 otherwise - bvd1 - the value of the Battery Voltage Detect 1 signal - bvd2 - the value of the Battery Voltage Detect 2 signal - wrprot - 1 if the card is write-protected, 0 otherwise - vs_3v - 1 if the card must be operated at 3.3V, 0 otherwise - vs_Xv - 1 if the card must be operated at X.XV, 0 otherwise - -A note about the BVD signals: if your board does not make both lines -directly observable to the processor, just return reasonable values. The -standard interpretation of the BVD signals is: - - BVD1 BVD2 - - 0 x battery is dead - 1 0 battery warning - 1 1 battery ok - -Regarding the voltage sense flags (vs_3v, vs_Xv), these bits should be set -based on a sampling of the Voltage Sense pins, if available. The standard -interpretation of the VS signals (for a "low-voltage" socket) is: - - VS1 VS2 - - 0 0 X.XV, else 3.3V, else none - 0 1 3.3V, else none - 1 0 X.XV, else none - 1 1 5V, else none - -More information about the BVD and VS conventions is available in chapter -5 of "PCMCIA System Architecture," 2nd ed., by Don Anderson. - -This operation should return 1 if an IRQ is actually pending for the -socket controller, 0 if no IRQ is pending (but no error condition exists, -such as an undersized state array), or -1 on any error. - - -3. get_irq_info(struct pcmcia_irq_info *info) - -This operation obtains the IRQ assignment which is legal for the given -socket. An argument of the following type is passed: - - struct pcmcia_irq_info { - unsigned int sock; - unsigned int irq ; - }; - -The `sock' field contains the socket index being queried. The `irq' field -should contain the IRQ number corresponding to the card ready signal from -the device. - -This operation should return 0 on success, or -1 on any error. - - -4. configure_socket(const struct pcmcia_configure *configure) - -This operation allows the caller to apply power to the socket, issue a -reset, or enable various outputs. The argument is of the following type: - - struct pcmcia_configure { - unsigned sock: 8, - vcc: 8, - vpp: 8, - output: 1, - speaker: 1, - reset: 1; - }; - -The `sock' field contains the index of the socket to be configured. The -`vcc' and `vpp' fields contain the voltages to be applied for Vcc and Vpp, -respectively, in units of 0.1V. (Note that vpp==120 indicates that -programming voltage should be applied.) - -The two output enables, `output' and `speaker', refer to the card data -signal enable and the card speaker enable, respectively. The `reset' bit, -when set, indicates that the card reset should be asserted. - -This operation should return 0 on success, or -1 on any error. - - -Board-Specific Notes - -The following information is known about various SA-11x0 board designs -which may be used as reference while adding support to the kernel. - - -Carnegie Mellon Itsy/Cue (http://www.cs.cmu.edu/~wearable/itsy/) - - Itsy Chip Select 3 (CS3) Interface - ("ITSY MEMORY/PCMCIA ADD-ON BOARD with BATTERY and CHARGER CIRCUITRY," - memo dated 5-20-99, from Tim Manns to Richard Martin, et. al) - - Read: - ABVD2 (SS)D0 A slot, Battery Voltage Detect - ABVD1 (SS)D1 - AVSS2 (SS)D2 A slot, Voltage Sense - AVSS1 (SS)D3 - GND (SS)D4 - GND (SS)D5 - GND (SS)D6 - GND (SS)D7 - - BBVD2 (SS)D8 B slot, Battery Voltage Detect - BBVD1 (SS)D9 - BVSS2 (SS)D10 B slot, Voltage Sense - BVSS1 (SS)D11 - GND (SS)D12 - GND (SS)D13 - GND (SS)D14 - GND (SS)D15 - - Write: - (SS)D0 A_VPP_VCC LTC1472 VPPEN1 - (SS)D1 A_VPP_PGM LTC1472 VPPEN0 - (SS)D2 A_VCC_3 LTC1472 VCCEN0 - (SS)D3 A_VCC_5 LTC1472 VCCEN1 - (SS)D4 RESET (A SLOT) - (SS)D5 GND - (SS)D6 GND - (SS)D7 GND - - (SS)D8 B_VPP_VCC LTC1472 VPPEN1 - (SS)D9 B_VPP_PGM LTC1472 VPPEN0 - (SS)D10 B_VCC_3 LTC1472 VCCEN0 - (SS)D11 B_VCC_5 LTC1472 VCCEN1 - (SS)D12 RESET (B SLOT) - (SS)D13 GND - (SS)D14 GND - (SS)D15 GND - - GPIO pin assignments are as follows: (from schematics) - - GPIO 10 Slot 0 Card Detect - GPIO 11 Slot 1 Card Detect - GPIO 12 Slot 0 Ready/Interrupt - GPIO 13 Slot 1 Ready/Interrupt - - - -Intel SA-1100 Multimedia Board (http://developer.intel.com/design/strong/) - - CPLD Registers - SA-1100 Multimedia Development Board with Companion SA-1101 Development - Board User's Guide, p.4-42 - - This SA-1100/1101 development package uses only one GPIO pin (24) to - signal changes in card status, and requires software to inspect a - PCMCIA status register to determine the source. - - Read: (PCMCIA Power Sense Register - 0x19400000) - S0VS1 0 Slot 0 voltage sense - S0VS2 1 - S0BVD1 2 Slot 0 battery voltage sense - S0BVD2 3 - S1VS1 4 Slot 1 voltage sense - S1VS2 5 - S1BVD1 6 Slot 1 battery voltage sense - S1BVD2 7 - - Read/Write: (PCMCIA Power Control Register - 0x19400002) - S0VPP0 0 Slot 0 Vpp - S0VPP1 1 - S0VCC0 2 Slot 0 Vcc - S0VCC1 3 - S1VPP0 4 Slot 1 Vpp - S1VPP1 5 - S1VCC0 6 Slot 1 Vcc - S1VCC1 7 - - Read: (PCMCIA Status Register - 0x19400004) - S0CD1 0 Slot 0 Card Detect 1 - S0RDY 1 Slot 0 Ready/Interrupt - S0STSCHG 2 Slot 0 Status Change - S0Reset 3 Slot 0 Reset (RW) - S1CD1 4 Slot 1 Card Detect 1 - S1RDY 5 Slot 1 Ready/Interrupt - S1STSCHG 6 Slot 1 Status Change - S1Reset 7 Slot 1 Reset (RW) - - - -Intel SA-1100 Evaluation Platform (http://developer.intel.com/design/strong/) - - Brutus I/O Pins and Chipselect Register - pcmcia-brutus.c, by Ivo Clarysse - (What's the official reference for this info?) - - This SA-1100 development board uses more GPIO pins than say, the Itsy - or the SA-1100/1101 multimedia package. The pin assignments are as - follows: - - GPIO 2 Slot 0 Battery Voltage Detect 1 - GPIO 3 Slot 0 Ready/Interrupt - GPIO 4 Slot 0 Card Detect - GPIO 5 Slot 1 Battery Voltage Detect 1 - GPIO 6 Slot 1 Ready/Interrupt - GPIO 7 Slot 1 Card Detect - - Like the Itsy, Brutus uses a chipselect register in static memory - bank 3 for the other signals, such as voltage sense or reset: - - Read: - P0_VS1 8 Slot 0 Voltage Sense - P0_VS2 9 - P0_STSCHG 10 Slot 0 Status Change - P1_VS1 12 Slot 1 Voltage Sense - P1_VS2 13 - P1_STSCHG 14 Slot 1 Status Change - - Read/Write: - P0_ 16 Slot 0 MAX1600EAI control line - P0_ 17 Slot 0 MAX1600EAI control line - P0_ 18 Slot 0 MAX1600EAI control line - P0_ 19 Slot 0 MAX1600EAI control line - P0_ 20 Slot 0 12V - P0_ 21 Slot 0 Vpp to Vcc (CONFIRM?) - P0_ 22 Slot 0 enable fan-out drivers & xcvrs - P0_SW_RST 23 Slot 0 Reset - P1_ 24 Slot 1 MAX1600EAI control line - P1_ 25 Slot 1 MAX1600EAI control line - P1_ 26 Slot 1 MAX1600EAI control line - P1_ 27 Slot 1 MAX1600EAI control line - P1_ 28 Slot 1 12V - P1_ 29 Slot 1 Vpp to Vcc (CONFIRM?) - P1_ 30 Slot 1 enable fan-out drivers & xcvrs - P1_SW_RST 31 Slot 1 Reset - - For each slot, the bits labelled "MAX1600EAI" should (apparently) - be written with the value 0101 for Vcc 3.3V, and 1001 for Vcc 5V. - - - -Intel SA-1110 Development Platform (http://developer.intel.com/design/strong/) - - GPIO Pin Descriptions and Board Control Register - SA-1110 Microprocessor Development Board User's Guide, p.4-7, 4-10 - - The Assabet board contains only a single Compact Flash slot, - attached to slot 1 on the SA-1110. Card detect, ready, and BVD - signals are routed through GPIO, with power and reset placed in a - control register. Note that the CF bus must be enabled before use. - - GPIO 21 Slot 1 Compact Flash interrupt - GPIO 22 Slot 1 card detect (CD1 NOR CD2) - GPIO 24 Slot 1 Battery Voltage Detect 2 - GPIO 25 Slot 1 Battery Voltage Detect 1 - - Write-only: (Board Control Register - 0x12000000) - CF_PWR 0 CF bus power (3.3V) - CF_RST 1 CF reset - CF_Bus_On 7 CF bus enable - diff -Nru a/Documentation/arm/XScale/ADIFCC/80200EVB b/Documentation/arm/XScale/ADIFCC/80200EVB --- a/Documentation/arm/XScale/ADIFCC/80200EVB Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,110 +0,0 @@ - -Board Overview ------------------------------ - -This is an beta release of the Xscale Linux port to the ADI 80200EVB -evaluation board. - -The 80200EVB is an evaluation platform for ADI Engineering's high-performance -80200FCC chipset for the Intel 80200 XScale CPU. The 80200FCC is an open -source FPGA based system that contains a PCI unit and a high performance -memory controller. - -In addition to the 80200FCC, the board also contains a 16C550 UART, and 4MB -of flash. - -The board is still under development and currently only the UART is functional -as the PCI bits have not been programmed into the FPGA. - -For more information on the board, see http://www.adiengineering.com - -Port Status ------------------------------ - -Supported: - -- Onboard UART (Polled operation only) -- Cache/TLB locking on 80200 CPU - -TODO: - -- PCI when hardware supports it - -Building the Kernel ------------------------------ -change Linux makefile -make adi_evb_config -make oldconfig -make zImage - -Loading Linux ------------------------------ - -Before you can use Linux on the ADI board, you need to grab the following: - -ADI 80200EVB Monitor: - ftp://source.mvista.com/pub/xscale/ADI_EVB/monitor.srec - -ADI JFFS2 Image: - ftp://source.mvista.com/pub/xscale/ADI_EVB/adi.jffs2 - -Once you've got the Cygnus prompt, type in the following command: - - load - -On another terminal window: - - cat monitor.srec > /dev/ttyS0 - -(replace ttyS0 with the serial port you are using) - -Once completed, just type 'go' at the cygmon prompt and you should see: - - MontaVista IQ80310 Monitor Version 0.1 - monitor> - -Type 'b 115200' at the prompt and change your terminal speed to 115200 - -The first thing to do is to upload and burn the jffs2 filesystem image -onto the boards 4MB of flash: - - monitor> u c1000000 - Uploading file at 0xc1000000 - Now send file with ymodem - -Do as the monitor says and transfer the file adi.jffs2. Once complete, -the following will copy the jffs2 image to location 0x80000 in the flash. - - monitor> f 8000 c1000000 200000 - Erasing sector 0x00080000 - Writing sector 0x00080000 with data at 0xC1000000 - Erasing sector 0x000A0000 - Writing sector 0x000A0000 with data at 0xC1020000 - Erasing sector 0x000C0000 - ... - -Now use the same command as above to upload your zImage to location c1000000. -When you've done that, type 'j c1000000' to run Linux. Login as -root and you're all set to go. - -Misc Notes ------------------------------ - -The current version of the HW does not have an onboard timer, so the 80200 -PMU is not available for general use as it is being used for a timer source. - -By default, the MTD driver reserves the first 512K for bootloaders and -the remaining 3.5MB for the filesystem. You can edit drivers/mtd/map/adi_evb.c -to change this as needed for your application. - -Contributors ------------------------------ - -Thanks to ADI Engineering for providing the hardware for development - -Deepak Saxena - Initial port - ------------------------------ -Enjoy. If you have any problem please contact Deepak Saxena -dsaxena@mvista.com - diff -Nru a/Documentation/arm/XScale/IOP3XX/IQ80310 b/Documentation/arm/XScale/IOP3XX/IQ80310 --- a/Documentation/arm/XScale/IOP3XX/IQ80310 Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,247 +0,0 @@ - -Board Overview ------------------------------ - -The Cyclone IQ80310 board is an evaluation platform for Intel's 80200 Xscale -CPU and 80312 Intelligent I/O chipset (collectively called IOP310 chipset). - -The 80312 contains dual PCI hoses (called the ATUs), a PCI-to-PCI bridge, -three DMA channels (1 on secondary PCI, one on primary PCI ), I2C, I2O -messaging unit, XOR unit for RAID operations, a bus performance monitoring -unit, and a memory controller with ECC features. - -For more information on the board, see http://developer.intel.com/iio - -Port Status ------------------------------ - -Supported: - -- MTD/JFFS/JFFS2 -- NFS root -- RAMDISK root -- 2ndary PCI slots -- Onboard ethernet -- Serial ports (ttyS0/S1) -- Cache/TLB locking on 80200 CPU -- Performance monitoring unit on 80200 CPU -- 80200 Performance Monitoring Unit -- Acting as a system controller on Cyclone 80303BP PCI backplane -- DMA engines (EXPERIMENTAL) -- 80312 Bus Performance Monitor (EXPERIMENTAL) -- Application Accelerator Unit (XOR engine for RAID) (EXPERIMENTAL) -- Messaging Unit (EXPERIMENTAL) - -TODO: -- I2C - -Building the Kernel ------------------------------ -make iq80310_config -make oldconfig -make zImage - -This will build an image setup for BOOTP/NFS root support. To change this, -just run make menuconfig and disable nfs root or add a "root=" option. - -Preparing the Hardware ------------------------------ - -This document assumes you're using a Rev D or newer board running -Redboot as the bootloader. Note that the version of RedBoot provided -with the boards has a major issue and you need to replace it with the -latest RedBoot. You can grab the source from the ECOS CVS or you can -get a prebuilt image and burn it in using FRU at: - - ftp://source.mvista.com/pub/xscale/iq80310/redboot.bin - -Make sure you do an 'fis init' command once you boot with the new -RedBoot image. - - - -Downloading Linux ------------------------------ - -Assuming you have your development system setup to act as a bootp/dhcp -server and running tftp: - - RedBoot> load -r -b 0xa1008000 /tftpboot/zImage.xs - Raw file loaded 0xa1008000-0xa1094bd8 - -If you're not using dhcp/tftp, you can use y-modem instead: - - RedBoot> load -r -b 0xa1008000 -m y - -Note that on Rev D. of the board, tftp does not work due to intermittent -interrupt issues, so you need to download using ymodem. - -Once the download is completed: - - RedBoot> go 0xa1008000 - -Root Devices ------------------------------ - -A kernel is not useful without a root filesystem, and you have several -choices with this board: NFS root, RAMDISK, or JFFS/JFFS2. For development -purposes, it is suggested that you use NFS root for easy access to various -tools. Once you're ready to deploy, probably want to utilize JFFS/JFFS2 on -the flash device. - -MTD on the IQ80310 ------------------------------ - -Linux on the IQ80310 supports RedBoot FIS paritioning if it is enabled. -Out of the box, once you've done 'fis init' on RedBoot, you will get -the following partitioning scheme: - - root@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 0075f000 00020000 "unallocated space" - mtd3: 00001000 00020000 "RedBoot config" - mtd4: 00020000 00020000 "FIS directory" - -To create an FIS directory, you need to use the fis command in RedBoot. -As an example, you can burn the kernel into the flash once it's downloaded: - - RedBoot> fis create -b 0xa1008000 -l 0x8CBAC -r 0xa1008000 -f 0x80000 kernel - ... Erase from 0x00080000-0x00120000: ..... - ... Program from 0xa1008000-0xa1094bac at 0x00080000: ..... - ... Unlock from 0x007e0000-0x00800000: . - ... Erase from 0x007e0000-0x00800000: . - ... Program from 0xa1fdf000-0xa1fff000 at 0x007e0000: . - ... Lock from 0x007e0000-0x00800000: . - - RedBoot> fis list - Name FLASH addr Mem addr Length Entry point - RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 - RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 - RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 - FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 - kernel 0x00080000 0xA1008000 0x000A0000 0x00000000 - -This leads to the following Linux MTD setup: - - mtroot@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 000a0000 00020000 "kernel" - mtd3: 006bf000 00020000 "unallocated space" - mtd4: 00001000 00020000 "RedBoot config" - mtd5: 00020000 00020000 "FIS directory" - -Note that there is not a 1:1 mapping to the number of RedBoot paritions to -MTD partitions as unused space also gets allocated into MTD partitions. - -As an aside, the -r option when creating the Kernel entry allows you to -simply do an 'fis load kernel' to copy the image from flash into memory. -You can then do an 'fis go 0xa1008000' to start Linux. - -If you choose to use static partitioning instead of the RedBoot partioning: - - /dev/mtd0 0x00000000 - 0x0007ffff: Boot Monitor (512k) - /dev/mtd1 0x00080000 - 0x0011ffff: Kernel Image (640K) - /dev/mtd2 0x00120000 - 0x0071ffff: File System (6M) - /dev/mtd3 0x00720000 - 0x00800000: RedBoot Reserved (896K) - -To use a JFFS1/2 root FS, you need to donwload the JFFS image using either -tftp or ymodem, and then copy it to flash: - - RedBoot> load -r -b 0xa1000000 /tftpboot/jffs.img - Raw file loaded 0xa1000000-0xa1600000 - RedBoot> fis create -b 0xa1000000 -l 0x600000 -f 0x120000 jffs - ... Erase from 0x00120000-0x00720000: .................................. - ... Program from 0xa1000000-0xa1600000 at 0x00120000: .................. - ...................... - ... Unlock from 0x007e0000-0x00800000: . - ... Erase from 0x007e0000-0x00800000: . - ... Program from 0xa1fdf000-0xa1fff000 at 0x007e0000: . - ... Lock from 0x007e0000-0x00800000: . - RedBoot> fis list - Name FLASH addr Mem addr Length Entry point - RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 - RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 - RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 - FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 - kernel 0x00080000 0xA1008000 0x000A0000 0xA1008000 - jffs 0x00120000 0x00120000 0x00600000 0x00000000 - -This looks like this in Linux: - - root@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 000a0000 00020000 "kernel" - mtd3: 00600000 00020000 "jffs" - mtd4: 000bf000 00020000 "unallocated space" - mtd5: 00001000 00020000 "RedBoot config" - mtd6: 00020000 00020000 "FIS directory" - -You need to boot the kernel once and watch the boot messages to see how the -JFFS RedBoot partition mapped into the MTD partition scheme. - -You can grab a pre-built JFFS image to use as a root file system at: - - ftp://source.mvista.com/pub/xscale/iq80310/jffs.img - -For detailed info on using MTD and creating a JFFS image go to: - - http://www.linux-mtd.infradead.org. - -For details on using RedBoot's FIS commands, type 'fis help' or consult -your RedBoot manual. - -Contributors ------------------------------ - -Thanks to Intel Corporation for providing the hardware. - -John Clark - Initial discovery of RedBoot issues -Dave Jiang - IRQ demux fixes, AAU, DMA, MU -Nicolas Pitre - Initial port, cleanup, debugging -Matt Porter - PCI subsystem development, debugging -Tim Sanders - Initial PCI code -Mark Salter - RedBoot fixes -Deepak Saxena - Cleanup, debug, cache lock, PMU - ------------------------------ -Enjoy. - -If you have any problems please contact Deepak Saxena - -A few notes from rmk ------------------------------ - -These are notes of my initial experience getting the IQ80310 Rev D up and -running. In total, it has taken many hours to work out what's going on... -The version of redboot used is: - - RedBoot(tm) bootstrap and debug environment, version UNKNOWN - built 14:58:21, Aug 15 2001 - - -1. I've had a corrupted download of the redboot.bin file from Montavista's - FTP site. It would be a good idea if there were md5sums, sum or gpg - signatures available to ensure the integrity of the downloaded files. - The result of this was an apparantly 100% dead card. - -2. RedBoot Intel EtherExpress Pro 100 driver seems to be very unstable - - I've had it take out the whole of a 100mbit network for several minutes. - The Hub indiates ZERO activity, despite machines attempting to communicate. - Further to this, while tftping the kernel, the transfer will stall regularly, - and might even drop the link LED. - -3. There appears to be a bug in the Intel Documentation Pack that comes with - the IQ80310 board. Serial port 1, which is the socket next to the LEDs - is address 0xfe810000, not 0xfe800000. - - Note that RedBoot uses either serial port 1 OR serial port 2, so if you - have your console connected to the wrong port, you'll see redboot messages - but not kernel boot messages. - -4. Trying to use fconfig to setup a boot script fails - it hangs when trying - to erase the flash. diff -Nru a/Documentation/arm/XScale/IOP3XX/IQ80321 b/Documentation/arm/XScale/IOP3XX/IQ80321 --- a/Documentation/arm/XScale/IOP3XX/IQ80321 Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,215 +0,0 @@ - -Board Overview ------------------------------ - -The Worcester IQ80321 board is an evaluation platform for Intel's 80321 Xscale -CPU (sometimes called IOP321 chipset). - -The 80321 contains a single PCI hose (called the ATUs), a PCI-to-PCI bridge, -two DMA channels, I2C, I2O messaging unit, XOR unit for RAID operations, -a bus performance monitoring unit, and a memory controller with ECC features. - -For more information on the board, see http://developer.intel.com/iio - -Port Status ------------------------------ - -Supported: - -- MTD/JFFS/JFFS2 root -- NFS root -- RAMDISK root -- Serial port (ttyS0) -- Cache/TLB locking on 80321 CPU -- Performance monitoring unit on 80321 CPU - -TODO: - -- DMA engines -- I2C -- 80321 Bus Performance Monitor -- Application Accelerator Unit (XOR engine for RAID) -- I2O Messaging Unit -- I2C unit -- SSP - -Building the Kernel ------------------------------ -make iq80321_config -make oldconfig -make zImage - -This will build an image setup for BOOTP/NFS root support. To change this, -just run make menuconfig and disable nfs root or add a "root=" option. - -Preparing the Hardware ------------------------------ - -Make sure you do an 'fis init' command once you boot with the new -RedBoot image. - -Downloading Linux ------------------------------ - -Assuming you have your development system setup to act as a bootp/dhcp -server and running tftp: - -NOTE: The 80321 board uses a different default memory map than the 80310. - - RedBoot> load -r -b 0x01008000 -m y - -Once the download is completed: - - RedBoot> go 0x01008000 - -There is a version of RedBoot floating around that has DHCP support, but -I've never been able to cleanly transfer a kernel image and have it run. - -Root Devices ------------------------------ - -A kernel is not useful without a root filesystem, and you have several -choices with this board: NFS root, RAMDISK, or JFFS/JFFS2. For development -purposes, it is suggested that you use NFS root for easy access to various -tools. Once you're ready to deploy, probably want to utilize JFFS/JFFS2 on -the flash device. - -MTD on the IQ80321 ------------------------------ - -Linux on the IQ80321 supports RedBoot FIS paritioning if it is enabled. -Out of the box, once you've done 'fis init' on RedBoot, you will get -the following partitioning scheme: - - root@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 0075f000 00020000 "unallocated space" - mtd3: 00001000 00020000 "RedBoot config" - mtd4: 00020000 00020000 "FIS directory" - -To create an FIS directory, you need to use the fis command in RedBoot. -As an example, you can burn the kernel into the flash once it's downloaded: - - RedBoot> fis create -b 0x01008000 -l 0x8CBAC -r 0x01008000 -f 0x80000 kernel - ... Erase from 0x00080000-0x00120000: ..... - ... Program from 0x01008000-0x01094bac at 0x00080000: ..... - ... Unlock from 0x007e0000-0x00800000: . - ... Erase from 0x007e0000-0x00800000: . - ... Program from 0x01fdf000-0x01fff000 at 0x007e0000: . - ... Lock from 0x007e0000-0x00800000: . - - RedBoot> fis list - Name FLASH addr Mem addr Length Entry point - RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 - RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 - RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 - FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 - kernel 0x00080000 0x01008000 0x000A0000 0x00000000 - -This leads to the following Linux MTD setup: - - mtroot@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 000a0000 00020000 "kernel" - mtd3: 006bf000 00020000 "unallocated space" - mtd4: 00001000 00020000 "RedBoot config" - mtd5: 00020000 00020000 "FIS directory" - -Note that there is not a 1:1 mapping to the number of RedBoot paritions to -MTD partitions as unused space also gets allocated into MTD partitions. - -As an aside, the -r option when creating the Kernel entry allows you to -simply do an 'fis load kernel' to copy the image from flash into memory. -You can then do an 'fis go 0x01008000' to start Linux. - -If you choose to use static partitioning instead of the RedBoot partioning: - - /dev/mtd0 0x00000000 - 0x0007ffff: Boot Monitor (512k) - /dev/mtd1 0x00080000 - 0x0011ffff: Kernel Image (640K) - /dev/mtd2 0x00120000 - 0x0071ffff: File System (6M) - /dev/mtd3 0x00720000 - 0x00800000: RedBoot Reserved (896K) - -To use a JFFS1/2 root FS, you need to donwload the JFFS image using either -tftp or ymodem, and then copy it to flash: - - RedBoot> load -r -b 0x01000000 /tftpboot/jffs.img - Raw file loaded 0x01000000-0x01600000 - RedBoot> fis create -b 0x01000000 -l 0x600000 -f 0x120000 jffs - ... Erase from 0x00120000-0x00720000: .................................. - ... Program from 0x01000000-0x01600000 at 0x00120000: .................. - ...................... - ... Unlock from 0x007e0000-0x00800000: . - ... Erase from 0x007e0000-0x00800000: . - ... Program from 0x01fdf000-0x01fff000 at 0x007e0000: . - ... Lock from 0x007e0000-0x00800000: . - RedBoot> fis list - Name FLASH addr Mem addr Length Entry point - RedBoot 0x00000000 0x00000000 0x00040000 0x00000000 - RedBoot[backup] 0x00040000 0x00040000 0x00040000 0x00000000 - RedBoot config 0x007DF000 0x007DF000 0x00001000 0x00000000 - FIS directory 0x007E0000 0x007E0000 0x00020000 0x00000000 - kernel 0x00080000 0x01008000 0x000A0000 0x01008000 - jffs 0x00120000 0x00120000 0x00600000 0x00000000 - -This looks like this in Linux: - - root@192.168.0.14:~# cat /proc/mtd - dev: size erasesize name - mtd0: 00040000 00020000 "RedBoot" - mtd1: 00040000 00020000 "RedBoot[backup]" - mtd2: 000a0000 00020000 "kernel" - mtd3: 00600000 00020000 "jffs" - mtd4: 000bf000 00020000 "unallocated space" - mtd5: 00001000 00020000 "RedBoot config" - mtd6: 00020000 00020000 "FIS directory" - -You need to boot the kernel once and watch the boot messages to see how the -JFFS RedBoot partition mapped into the MTD partition scheme. - -You can grab a pre-built JFFS image to use as a root file system at: - - ftp://source.mvista.com/pub/xscale/iq80310/jffs.img - -For detailed info on using MTD and creating a JFFS image go to: - - http://www.linux-mtd.infradead.org. - -For details on using RedBoot's FIS commands, type 'fis help' or consult -your RedBoot manual. - -BUGS and ISSUES ------------------------------ - -* As shipped from Intel, pre-production boards have two issues: - -- The on board ethernet is disabled S8E1-2 is off. You will need to turn it on. - -- The PCIXCAPs are configured for a 100Mhz clock, but the clock selected is - actually only 66Mhz. This causes the wrong PPL multiplier to be used and the - board only runs at 400Mhz instead of 600Mhz. The way to observe this is to - use a independent clock to time a "sleep 10" command from the prompt. If it - takes 15 seconds instead of 10, you are running at 400Mhz. - -- The experimental IOP310 drivers for the AAU, DMA, etc. are not supported yet. - -Contributors ------------------------------ -The port to the IQ80321 was performed by: - -Rory Bolt - Initial port, debugging. - -This port was based on the IQ80310 port with the following contributors: - -Nicolas Pitre - Initial port, cleanup, debugging -Matt Porter - PCI subsystem development, debugging -Tim Sanders - Initial PCI code -Deepak Saxena - Cleanup, debug, cache lock, PMU - -The port is currently maintained by Deepak Saxena - ------------------------------ -Enjoy. diff -Nru a/Documentation/arm/XScale/IOP3XX/aau.txt b/Documentation/arm/XScale/IOP3XX/aau.txt --- a/Documentation/arm/XScale/IOP3XX/aau.txt Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,178 +0,0 @@ -Support functions for the Intel 80310 AAU -=========================================== - -Dave Jiang -Last updated: 09/18/2001 - -The Intel 80312 companion chip in the 80310 chipset contains an AAU. The -AAU is capable of processing up to 8 data block sources and perform XOR -operations on them. This unit is typically used to accelerated XOR -operations utilized by RAID storage device drivers such as RAID 5. This -API is designed to provide a set of functions to take adventage of the -AAU. The AAU can also be used to transfer data blocks and used as a memory -copier. The AAU transfer the memory faster than the operation performed by -using CPU copy therefore it is recommended to use the AAU for memory copy. - ------------------- -int aau_request(u32 *aau_context, const char *device_id); -This function allows the user the acquire the control of the the AAU. The -function will return a context of AAU to the user and allocate -an interrupt for the AAU. The user must pass the context as a parameter to -various AAU API calls. - -int aau_queue_buffer(u32 aau_context, aau_head_t *listhead); -This function starts the AAU operation. The user must create a SGL -header with a SGL attached. The format is presented below. The SGL is -built from kernel memory. - -/* hardware descriptor */ -typedef struct _aau_desc -{ - u32 NDA; /* next descriptor address [READONLY] */ - u32 SAR[AAU_SAR_GROUP]; /* src addrs */ - u32 DAR; /* destination addr */ - u32 BC; /* byte count */ - u32 DC; /* descriptor control */ - u32 SARE[AAU_SAR_GROUP]; /* extended src addrs */ -} aau_desc_t; - -/* user SGL format */ -typedef struct _aau_sgl -{ - aau_desc_t aau_desc; /* AAU HW Desc */ - u32 status; /* status of SGL [READONLY] */ - struct _aau_sgl *next; /* pointer to next SG [READONLY] */ - void *dest; /* destination addr */ - void *src[AAU_SAR_GROUP]; /* source addr[4] */ - void *ext_src[AAU_SAR_GROUP]; /* ext src addr[4] */ - u32 total_src; /* total number of source */ -} aau_sgl_t; - -/* header for user SGL */ -typedef struct _aau_head -{ - u32 total; /* total descriptors allocated */ - u32 status; /* SGL status */ - aau_sgl_t *list; /* ptr to head of list */ - aau_callback_t callback; /* callback func ptr */ -} aau_head_t; - - -The function will call aau_start() and start the AAU after it queues -the SGL to the processing queue. When the function will either -a. Sleep on the wait queue aau->wait_q if no callback has been provided, or -b. Continue and then call the provided callback function when DMA interrupt - has been triggered. - -int aau_suspend(u32 aau_context); -Stops/Suspends the AAU operation - -int aau_free(u32 aau_context); -Frees the ownership of AAU. Called when no longer need AAU service. - -aau_sgl_t * aau_get_buffer(u32 aau_context, int num_buf); -This function obtains an AAU SGL for the user. User must specify the number -of descriptors to be allocated in the chain that is returned. - -void aau_return_buffer(u32 aau_context, aau_sgl_t *list); -This function returns all SGL back to the API after user is done. - -int aau_memcpy(void *dest, void *src, u32 size); -This function is a short cut for user to do memory copy utilizing the AAU for -better large block memory copy vs using the CPU. This is similar to using -typical memcpy() call. - -* User is responsible for the source address(es) and the destination address. - The source and destination should all be cached memory. - - - -void aau_test() -{ - u32 aau; - char dev_id[] = "AAU"; - int size = 2; - int err = 0; - aau_head_t *head; - aau_sgl_t *list; - u32 i; - u32 result = 0; - void *src, *dest; - - printk("Starting AAU test\n"); - if((err = aau_request(&aau, dev_id))<0) - { - printk("test - AAU request failed: %d\n", err); - return; - } - else - { - printk("test - AAU request successful\n"); - } - - head = kmalloc(sizeof(aau_head_t), GFP_KERNEL); - head->total = size; - head->status = 0; - head->callback = NULL; - - list = aau_get_buffer(aau, size); - if(!list) - { - printk("Can't get buffers\n"); - return; - } - head->list = list; - - src = kmalloc(1024, GFP_KERNEL); - dest = kmalloc(1024, GFP_KERNEL); - - while(list) - { - list->status = 0; - list->aau_desc->SAR[0] = (u32)src; - list->aau_desc->DAR = (u32)dest; - list->aau_desc->BC = 1024; - - /* see iop310-aau.h for more DCR commands */ - list->aau_desc->DC = AAU_DCR_WRITE | AAU_DCR_BLKCTRL_1_DF; - if(!list->next) - { - list->aau_desc->DC = AAU_DCR_IE; - break; - } - list = list->next; - } - - printk("test- Queueing buffer for AAU operation\n"); - err = aau_queue_buffer(aau, head); - if(err >= 0) - { - printk("AAU Queue Buffer is done...\n"); - } - else - { - printk("AAU Queue Buffer failed...: %d\n", err); - } - - - -#if 1 - printk("freeing the AAU\n"); - aau_return_buffer(aau, head->list); - aau_free(aau); - kfree(src); - kfree(dest); - kfree((void *)head); -#endif -} - -All Disclaimers apply. Use this at your own discretion. Neither Intel nor I -will be responsible if anything goes wrong. =) - - -TODO -____ -* Testing -* Do zero-size AAU transfer/channel at init - so all we have to do is chainining - diff -Nru a/Documentation/arm/XScale/IOP3XX/dma.txt b/Documentation/arm/XScale/IOP3XX/dma.txt --- a/Documentation/arm/XScale/IOP3XX/dma.txt Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,214 +0,0 @@ -Support functions forthe Intel 80310 DMA channels -================================================== - -Dave Jiang -Last updated: 09/18/2001 - -The Intel 80310 XScale chipset provides 3 DMA channels via the 80312 I/O -companion chip. Two of them resides on the primary PCI bus and one on the -secondary PCI bus. - -The DMA API provided is not compatible with the generic interface in the -ARM tree unfortunately due to how the 80312 DMACs work. Hopefully some time -in the near future a software interface can be done to bridge the differences. -The DMA API has been modeled after Nicholas Pitre's SA11x0 DMA API therefore -they will look somewhat similar. - - -80310 DMA API -------------- - -int dma_request(dmach_t channel, const char *device_id); - -This function will attempt to allocate the channel depending on what the -user requests: - -IOP310_DMA_P0: PCI Primary 1 -IOP310_DMA_P1: PCI Primary 2 -IOP310_DMA_S0: PCI Secondary 1 -/*EOF*/ - -Once the user allocates the DMA channel it is owned until released. Although -other users can also use the same DMA channel, but no new resources will be -allocated. The function will return the allocated channel number if successful. - -int dma_queue_buffer(dmach_t channel, dma_sghead_t *listhead); - -The user will construct a SGL in the form of below: -/* - * Scattered Gather DMA List for user - */ -typedef struct _dma_desc -{ - u32 NDAR; /* next descriptor adress [READONLY] */ - u32 PDAR; /* PCI address */ - u32 PUADR; /* upper PCI address */ - u32 LADR; /* local address */ - u32 BC; /* byte count */ - u32 DC; /* descriptor control */ -} dma_desc_t; - -typedef struct _dma_sgl -{ - dma_desc_t dma_desc; /* DMA descriptor */ - u32 status; /* descriptor status [READONLY] */ - u32 data; /* user defined data */ - struct _dma_sgl *next; /* next descriptor [READONLY] */ -} dma_sgl_t; - -/* dma sgl head */ -typedef struct _dma_head -{ - u32 total; /* total elements in SGL */ - u32 status; /* status of sgl */ - u32 mode; /* read or write mode */ - dma_sgl_t *list; /* pointer to list */ - dma_callback_t callback; /* callback function */ -} dma_head_t; - - -The user shall allocate user SGL elements by calling the function: -dma_get_buffer(). This function will give the user an SGL element. The user -is responsible for creating the SGL head however. The user is also -responsible for allocating the memory for DMA data. The following code segment -shows how a DMA operation can be performed: - -#include - -void dma_test(void) -{ - char dev_id[] = "Primary 0"; - dma_head_t *sgl_head = NULL; - dma_sgl_t *sgl = NULL; - int err = 0; - int channel = -1; - u32 *test_ptr = 0; - DECLARE_WAIT_QUEUE_HEAD(wait_q); - - - *(IOP310_ATUCR) = (IOP310_ATUCR_PRIM_OUT_ENAB | - IOP310_ATUCR_DIR_ADDR_ENAB); - - channel = dma_request(IOP310_DMA_P0, dev_id); - - sgl_head = (dma_head_t *)kmalloc(sizeof(dma_head_t), GFP_KERNEL); - sgl_head->callback = NULL; /* no callback created */ - sgl_head->total = 2; /* allocating 2 DMA descriptors */ - sgl_head->mode = (DMA_MOD_WRITE); - sgl_head->status = 0; - - /* now we get the two descriptors */ - sgl = dma_get_buffer(channel, 2); - - /* we set the header to point to the list we allocated */ - sgl_head->list = sgl; - - /* allocate 1k of DMA data */ - sgl->data = (u32)kmalloc(1024, GFP_KERNEL); - - /* Local address is physical */ - sgl->dma_desc.LADR = (u32)virt_to_phys(sgl->data); - - /* write to arbitrary location over the PCI bus */ - sgl->dma_desc.PDAR = 0x00600000; - sgl->dma_desc.PUADR = 0; - sgl->dma_desc.BC = 1024; - - /* set write & invalidate PCI command */ - sgl->dma_desc.DC = DMA_DCR_PCI_MWI; - sgl->status = 0; - - /* set a pattern */ - memset(sgl->data, 0xFF, 1024); - - /* User's responsibility to keep buffers cached coherent */ - cpu_dcache_clean(sgl->data, sgl->data + 1024); - - sgl = sgl->next; - - sgl->data = (u32)kmalloc(1024, GFP_KERNEL); - sgl->dma_desc.LADR = (u32)virt_to_phys(sgl->data); - sgl->dma_desc.PDAR = 0x00610000; - sgl->dma_desc.PUADR = 0; - sgl->dma_desc.BC = 1024; - - /* second descriptor has interrupt flag enabled */ - sgl->dma_desc.DC = (DMA_DCR_PCI_MWI | DMA_DCR_IE); - - /* must set end of chain flag */ - sgl->status = DMA_END_CHAIN; /* DO NOT FORGET THIS!!!! */ - - memset(sgl->data, 0x0f, 1024); - /* User's responsibility to keep buffers cached coherent */ - cpu_dcache_clean(sgl->data, sgl->data + 1024); - - /* queuing the buffer, this function will sleep since no callback */ - err = dma_queue_buffer(channel, sgl_head); - - /* now we are woken from DMA complete */ - - /* do data operations here */ - - /* free DMA data if necessary */ - - /* return the descriptors */ - dma_return_buffer(channel, sgl_head->list); - - /* free the DMA */ - dma_free(channel); - - kfree((void *)sgl_head); -} - - -dma_sgl_t * dma_get_buffer(dmach_t channel, int buf_num); - -This call allocates DMA descriptors for the user. - - -void dma_return_buffer(dmach_t channel, dma_sgl_t *list); - -This call returns the allocated descriptors back to the API. - - -int dma_suspend(dmach_t channel); - -This call suspends any DMA transfer on the given channel. - - - -int dma_resume(dmach_t channel); - -This call resumes a DMA transfer which would have been stopped through -dma_suspend(). - - -int dma_flush_all(dmach_t channel); - -This completely flushes all queued buffers and on-going DMA transfers on a -given channel. This is called when DMA channel errors have occurred. - - -void dma_free(dmach_t channel); - -This clears all activities on a given DMA channel and releases it for future -requests. - - - -Buffer Allocation ------------------ -It is the user's responsibility to allocate, free, and keep track of the -allocated DMA data memory. Upon calling dma_queue_buffer() the user must -relinquish the control of the buffers to the kernel and not change the -state of the buffers that it has passed to the kernel. The user will regain -the control of the buffers when it has been woken up by the bottom half of -the DMA interrupt handler. The user can allocate cached buffers or non-cached -via pci_alloc_consistent(). It is the user's responsibility to ensure that -the data is cache coherent. - -*Reminder* -The user is responsble to ensure the ATU is setup properly for DMA transfers. - -All Disclaimers apply. Use this at your own discretion. Neither Intel nor I -will be responsible ifanything goes wrong. diff -Nru a/Documentation/arm/XScale/IOP3XX/message.txt b/Documentation/arm/XScale/IOP3XX/message.txt --- a/Documentation/arm/XScale/IOP3XX/message.txt Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,110 +0,0 @@ -Support functions for the Intel 80310 MU -=========================================== - -Dave Jiang -Last updated: 10/11/2001 - -The messaging unit of the IOP310 contains 4 components and is utilized for -passing messages between the PCI agents on the primary bus and the Intel(R) -80200 CPU. The four components are: -Messaging Component -Doorbell Component -Circular Queues Component -Index Registers Component - -Messaging Component: -Contains 4 32bit registers, 2 in and 2 out. Writing to the registers assert -interrupt on the PCI bus or to the 80200 depend on incoming or outgoing. - -int mu_msg_request(u32 *mu_context); -Request the usage of Messaging Component. mu_context is written back by the -API. The MU context is passed to other Messaging calls as a parameter. - -int mu_msg_set_callback(u32 mu_context, u8 reg, mu_msg_cb_t func); -Setup the callback function for incoming messages. Callback can be setup for -outbound 0, 1, or both outbound registers. - -int mu_msg_post(u32 mu_context, u32 val, u8 reg); -Posting a message in the val parameter. The reg parameter denotes whether -to use register 0, 1. - -int mu_msg_free(u32 mu_context, u8 mode); -Free the usage of messaging component. mode can be specified soft or hard. In -hardmode all resources are unallocated. - -Doorbell Component: -The doorbell registers contains 1 inbound and 1 outbound. Depending on the bits -being set different interrupts are asserted. - -int mu_db_request(u32 *mu_context); -Request the usage of the doorbell register. - -int mu_db_set_callback(u32 mu_context, mu_db_cb_t func); -Setting up the inbound callback. - -void mu_db_ring(u32 mu_context, u32 mask); -Write to the outbound db register with mask. - -int mu_db_free(u32 mu_context); -Free the usage of doorbell component. - -Circular Queues Component: -The circular queue component has 4 circular queues. Inbound post, inbound free, -outbound post, outbound free. These queues are used to pass messages. - -int mu_cq_request(u32 *mu_context, u32 q_size); -Request the usage of the queue. See code comment header for q_size. It tells -the API how big of queues to setup. - -int mu_cq_inbound_init(u32 mu_context, mfa_list_t *list, u32 size, - mu_cq_cb_t func); -Init inbound queues. The user must provide a list of free message frames to -be put in inbound free queue and the callback function to handle the inbound -messages. - -int mu_cq_enable(u32 mu_context); -Enables the circular queues mechanism. Called once all the setup functions -are called. - -u32 mu_cq_get_frame(u32 mu_context); -Obtain the address of an outbound free frame for the user. - -int mu_cq_post_frame(u32 mu_context, u32 mfa); -The user can post the frame once getting the frame and put information in the -frame. - -int mu_cq_free(u32 mu_context); -Free the usage of circular queues mechanism. - -Index Registers Component: -The index register provides the mechanism to receive inbound messages. - -int mu_ir_request(u32 *mu_context); -Request of Index Register component usage. - -int mu_ir_set_callback(u32 mu_context, mu_ir_cb_t callback); -Setting up callback for inbound messages. The callback will receive the -value of the register that IAR offsets to. - -int mu_ir_free(u32 mu_context); -Free the usage of Index Registers component. - -void mu_set_irq_threshold(u32 mu_context, int thresh); -Setup the IRQ threshold before relinquish processing in IRQ space. Default -is set at 10 loops. - - -*NOTE: Example of host driver that utilize the MU can be found in the Linux I2O -driver. Specifically i2o_pci and some functions of i2o_core. The I2O driver -only utilize the circular queues mechanism. The other 3 components are simple -enough that they can be easily setup. The MU API provides no flow control for -the messaging mechanism. Flow control of the messaging needs to be established -by a higher layer of software on the IOP or the host driver. - -All Disclaimers apply. Use this at your own discretion. Neither Intel nor I -will be responsible if anything goes wrong. =) - - -TODO -____ - diff -Nru a/Documentation/arm/XScale/IOP3XX/pmon.txt b/Documentation/arm/XScale/IOP3XX/pmon.txt --- a/Documentation/arm/XScale/IOP3XX/pmon.txt Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,71 +0,0 @@ - -Intel's XScale Microarchitecture 80312 companion processor provides a -Performance Monitoring Unit (PMON) that can be utilized to provide -information that can be useful for fine tuning of code. This text -file describes the API that's been developed for use by Linux kernel -programmers. Note that to get the most usage out of the PMON, -I highly reccomend getting the XScale reference manual from Intel[1] -and looking at chapter 12. - -To use the PMON, you must #include in your -source file. - -Since there's only one PMON, only one user can currently use the PMON -at a given time. To claim the PMON for usage, call iop310_pmon_claim() which -returns an identifier. When you are done using the PMON, call -iop310_pmon_release() with the id you were given earlier. - -The PMON consists of 14 registers that can be used for performance measurements. -By combining different statistics, you can derive complex performance metrics. - -To start the PMON, just call iop310_pmon_start(mode). Mode tells the PMON what -statistics to capture and can each be one of: - - IOP310_PMU_MODE0 - Performance Monitoring Disabled - - IOP310_PMU_MODE1 - Primary PCI bus and internal agents (bridge, dma Ch0, dam Ch1, patu) - - IOP310_PMU_MODE2 - Secondary PCI bus and internal agents (bridge, dma Ch0, dam Ch1, patu) - - IOP310_PMU_MODE3 - Secondary PCI bus and internal agents (external masters 0..2 and Intel - 80312 I/O companion chip) - - IOP310_PMU_MODE4 - Secondary PCI bus and internal agents (external masters 3..5 and Intel - 80312 I/O companion chip) - - IOP310_PMU_MODE5 - Intel 80312 I/O companion chip internal bus, DMA Channels and Application - Accelerator - - IOP310_PMU_MODE6 - Intel 80312 I/O companion chip internal bus, PATU, SATU and Intel 80200 - processor - - IOP310_PMU_MODE7 - Intel 80312 I/O companion chip internal bus, Primary PCI bus, Secondary - PCI bus and Secondary PCI agents (external masters 0..5 & Intel 80312 I/O - companion chip) - -To get the results back, call iop310_pmon_stop(&results) where results is -defined as follows: - -typedef struct _iop310_pmon_result -{ - u32 timestamp; /* Global Time Stamp Register */ - u32 timestamp_overflow; /* Time Stamp overflow count */ - u32 event_count[14]; /* Programmable Event Counter - Registers 1-14 */ - u32 event_overflow[14]; /* Overflow counter for PECR1-14 */ -} iop310_pmon_res_t; - - --- -This code is still under development, so please feel free to send patches, -questions, comments, etc to me. - -Deepak Saxena diff -Nru a/Documentation/arm/XScale/cache-lock.txt b/Documentation/arm/XScale/cache-lock.txt --- a/Documentation/arm/XScale/cache-lock.txt Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,123 +0,0 @@ - -Intel's XScale Microarchitecture provides support for locking of data -and instructions into the appropriate caches. This file provides -an overview of the API that has been developed to take advantage of this -feature from kernel space. Note that there is NO support for user space -cache locking. - -For example usage of this code, grab: - - ftp://source.mvista.com/pub/xscale/cache-test.c - -If you have any questions, comments, patches, etc, please contact me. - -Deepak Saxena - -API DESCRIPTION - - -I. Header File - - #include - -II. Cache Capability Discovery - - SYNOPSIS - - int cache_query(u8 cache_type, - struct cache_capabilities *pcache); - - struct cache_capabilities - { - u32 flags; /* Flags defining capabilities */ - u32 cache_size; /* Cache size in K (1024 bytes) */ - u32 max_lock; /* Maximum lockable region in K */ - } - - /* - * Flags - */ - - /* - * Bit 0: Cache lockability - * Bits 1-31: Reserved for future use - */ - #define CACHE_LOCKABLE 0x00000001 /* Cache can be locked */ - - /* - * Cache Types - */ - #define ICACHE 0x00 - #define DCACHE 0x01 - - DESCRIPTION - - This function fills out the pcache capability identifier for the - requested cache. cache_type is either DCACHE or ICACHE. This - function is not very useful at the moment as all XScale CPU's - have the same size Cache, but is is provided for future XScale - based processors that may have larger cache sizes. - - RETURN VALUE - - This function returns 0 if no error occurs, otherwise it returns - a negative, errno compatible value. - - -EIO Unknown hardware error - -III. Cache Locking - - SYNOPSIS - - int cache_lock(void *addr, u32 len, u8 cache_type, const char *desc); - - DESCRIPTION - - This function locks a physically contigous portion of memory starting - at the virtual address pointed to by addr into the cache referenced - by cache_type. - - The address of the data/instruction that is to be locked must be - aligned on a cache line boundary (L1_CACHE_ALIGNEMENT). - - The desc parameter is an optional (pass NULL if not used) human readable - descriptor of the locked memory region that is used by the cache - management code to build the /proc/cache_locks table. - - Note that this function does not check whether the address is valid - or not before locking it into the cache. That duty is up to the - caller. Also, it does not check for duplicate or overlaping - entries. - - RETURN VALUE - - If the function is successful in locking the entry into cache, a - zero is returned. - - If an error occurs, an appropriate error value is returned. - - -EINVAL The memory address provided was not cache line aligned - -ENOMEM Could not allocate memory to complete operation - -ENOSPC Not enough space left on cache to lock in requested region - -EIO Unknown error - -III. Cache Unlocking - - SYNOPSIS - - int cache_unlock(void *addr) - - DESCRIPTION - - This function unlocks a portion of memory that was previously locked - into either the I or D cache. - - RETURN VALUE - - If the entry is cleanly unlocked from the cache, a 0 is returned. - In the case of an error, an appropriate error is returned. - - -ENOENT No entry with given address associated with this cache - -EIO Unknown error - - diff -Nru a/Documentation/arm/XScale/pmu.txt b/Documentation/arm/XScale/pmu.txt --- a/Documentation/arm/XScale/pmu.txt Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,168 +0,0 @@ - -Intel's XScale Microarchitecture processors provide a Performance -Monitoring Unit (PMU) that can be utilized to provide information -that can be useful for fine tuning of code. This text file describes -the API that's been developed for use by Linux kernel programmers. -When I have some extra time on my hand, I will extend the code to -provide support for user mode performance monitoring (which is -probably much more useful). Note that to get the most usage out -of the PMU, I highly reccomend getting the XScale reference manual -from Intel and looking at chapter 12. - -To use the PMU, you must #include in your source file. - -Since there's only one PMU, only one user can currently use the PMU -at a given time. To claim the PMU for usage, call pmu_claim() which -returns an identifier. When you are done using the PMU, call -pmu_release() with the identifier that you were given by pmu_claim. - -In addition, the PMU can only be used on XScale based systems that -provide an external timer. Systems that the PMU is currently supported -on are: - - - Cyclone IQ80310 - -Before delving into how to use the PMU code, let's do a quick overview -of the PMU itself. The PMU consists of three registers that can be -used for performance measurements. The first is the CCNT register with -provides the number of clock cycles elapsed since the PMU was started. -The next two register, PMN0 and PMN1, are eace user programmable to -provide 1 of 20 different performance statistics. By combining different -statistics, you can derive complex performance metrics. - -To start the PMU, just call pmu_start(pm0, pmn1). pmn0 and pmn1 tell -the PMU what statistics to capture and can each be one of: - -EVT_ICACHE_MISS - Instruction fetches requiring access to external memory - -EVT_ICACHE_NO_DELIVER - Instruction cache could not deliver an instruction. Either an - ICACHE miss or an instruction TLB miss. - -EVT_ICACHE_DATA_STALL - Stall in execution due to a data dependency. This counter is - incremented each cycle in which the condition is present. - -EVT_ITLB_MISS - Instruction TLB miss - -EVT_DTLB_MISS - Data TLB miss - -EVT_BRANCH - A branch instruction was executed and it may or may not have - changed program flow - -EVT_BRANCH_MISS - A branch (B or BL instructions only) was mispredicted - -EVT_INSTRUCTION - An instruction was executed - -EVT_DCACHE_FULL_STALL - Stall because data cache buffers are full. Incremented on every - cycle in which condition is present. - -EVT_DCACHE_FULL_STALL_CONTIG - Stall because data cache buffers are full. Incremented on every - cycle in which condition is contigous. - -EVT_DCACHE_ACCESS - Data cache access (data fetch) - -EVT_DCACHE_MISS - Data cache miss - -EVT_DCACHE_WRITE_BACK - Data cache write back. This counter is incremented for every - 1/2 line (four words) that are written back. - -EVT_PC_CHANGED - Software changed the PC. This is incremented only when the - software changes the PC and there is no mode change. For example, - a MOV instruction that targets the PC would increment the counter. - An SWI would not as it triggers a mode change. - -EVT_BCU_REQUEST - The Bus Control Unit(BCU) received a request from the core - -EVT_BCU_FULL - The BCU request queue if full. A high value for this event means - that the BCU is often waiting for to complete on the external bus. - -EVT_BCU_DRAIN - The BCU queues were drained due to either a Drain Write Buffer - command or an I/O transaction for a page that was marked as - uncacheable and unbufferable. - -EVT_BCU_ECC_NO_ELOG - The BCU detected an ECC error on the memory bus but noe ELOG - register was available to to log the errors. - -EVT_BCU_1_BIT_ERR - The BCU detected a 1-bit error while reading from the bus. - -EVT_RMW - An RMW cycle occurred due to narrow write on ECC protected memory. - -To get the results back, call pmu_stop(&results) where results is defined -as a struct pmu_results: - - struct pmu_results - { - u32 ccnt; /* Clock Counter Register */ - u32 ccnt_of; / - u32 pmn0; /* Performance Counter Register 0 */ - u32 pmn0_of; - u32 pmn1; /* Performance Counter Register 1 */ - u32 pmn1_of; - }; - -Pretty simple huh? Following are some examples of how to get some commonly -wanted numbers out of the PMU data. Note that since you will be dividing -things, this isn't super useful from the kernel and you need to printk the -data out to syslog. See [1] for more examples. - -Instruction Cache Efficiency - - pmu_start(EVT_INSTRUCTION, EVT_ICACHE_MISS); - ... - pmu_stop(&results); - - icache_miss_rage = results.pmn1 / results.pmn0; - cycles_per_instruction = results.ccnt / results.pmn0; - -Data Cache Efficiency - - pmu_start(EVT_DCACHE_ACCESS, EVT_DCACHE_MISS); - ... - pmu_stop(&results); - - dcache_miss_rage = results.pmn1 / results.pmn0; - -Instruction Fetch Latency - - pmu_start(EVT_ICACHE_NO_DELIVER, EVT_ICACHE_MISS); - ... - pmu_stop(&results); - - average_stall_waiting_for_instruction_fetch = - results.pmn0 / results.pmn1; - - percent_stall_cycles_due_to_instruction_fetch = - results.pmn0 / results.ccnt; - - -ToDo: - -- Add support for usermode PMU usage. This might require hooking into - the scheduler so that we pause the PMU when the task that requested - statistics is scheduled out. - --- -This code is still under development, so please feel free to send patches, -questions, comments, etc to me. - -Deepak Saxena - diff -Nru a/Documentation/arm/XScale/tlb-lock.txt b/Documentation/arm/XScale/tlb-lock.txt --- a/Documentation/arm/XScale/tlb-lock.txt Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,64 +0,0 @@ - -Intel's XScale Microarchitecture provides support for locking of TLB -entries in both the instruction and data TLBs. This file provides -an overview of the API that has been developed to take advantage of this -feature from kernel space. Note that there is NO support for user space. - -In general, this feature should be used in conjunction with locking -data or instructions into the appropriate caches. See the file -cache-lock.txt in this directory. - -If you have any questions, comments, patches, etc, please contact me. - -Deepak Saxena - - -API DESCRIPTION - -I. Header file - - #include - -II. Locking an entry into the TLB - - SYNOPSIS - - xscale_tlb_lock(u8 tlb_type, u32 addr); - - /* - * TLB types - */ - #define ITLB 0x0 - #define DTLB 0x1 - - DESCRIPTION - - This function locks the virtual to physical mapping for virtual - address addr into the requested TLB. - - RETURN VALUE - - If the entry is properly locked into the TLB, a 0 is returned. - In case of an error, an appropriate error is returned. - - -ENOSPC No more entries left in the TLB - -EIO Unknown error - -III. Unlocking an entry from a TLB - - SYNOPSIS - - xscale_tlb_unlock(u8 tlb_type, u32 addr); - - DESCRIPTION - - This function unlocks the entry for virtual address addr from the - specified cache. - - RETURN VALUE - - If the TLB entry is properly unlocked, a 0 is returned. - In case of an error, an appropriate error is returned. - - -ENOENT No entry for given address in specified TLB - diff -Nru a/Documentation/fb/pxafb.txt b/Documentation/fb/pxafb.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/fb/pxafb.txt Tue May 18 23:38:09 2004 @@ -0,0 +1,54 @@ +Driver for PXA25x LCD controller +================================ + +The driver supports the following options, either via +options= when modular or video=pxafb: when built in. + +For example: + modprobe pxafb options=mode:640x480-8,passive +or on the kernel command line + video=pxafb:mode:640x480-8,passive + +mode:XRESxYRES[-BPP] + XRES == LCCR1_PPL + 1 + YRES == LLCR2_LPP + 1 + The resolution of the display in pixels + BPP == The bit depth. Valid values are 1, 2, 4, 8 and 16. + +pixclock:PIXCLOCK + Pixel clock in picoseconds + +left:LEFT == LCCR1_BLW + 1 +right:RIGHT == LCCR1_ELW + 1 +hsynclen:HSYNC == LCCR1_HSW + 1 +upper:UPPER == LCCR2_BFW +lower:LOWER == LCCR2_EFR +vsynclen:VSYNC == LCCR2_VSW + 1 + Display margins and sync times + +color | mono => LCCR0_CMS + umm... + +active | passive => LCCR0_PAS + Active (TFT) or Passive (STN) display + +single | dual => LCCR0_SDS + Single or dual panel passive display + +4pix | 8pix => LCCR0_DPD + 4 or 8 pixel monochrome single panel data + +hsync:HSYNC +vsync:VSYNC + Horizontal and vertical sync. 0 => active low, 1 => active + high. + +dpc:DPC + Double pixel clock. 1=>true, 0=>false + +outputen:POLARITY + Output Enable Polarity. 0 => active low, 1 => active high + +pixclockpol:POLARITY + pixel clock polarity + 0 => falling edge, 1 => rising edge diff -Nru a/Documentation/filesystems/befs.txt b/Documentation/filesystems/befs.txt --- a/Documentation/filesystems/befs.txt Tue May 18 23:38:07 2004 +++ b/Documentation/filesystems/befs.txt Tue May 18 23:38:07 2004 @@ -17,8 +17,8 @@ AUTHOR ===== -Current maintainer: Will Dyson -Has been working on the code since Aug 13, 2001. See the changelog for +The largest part of the code written by Will Dyson +He has been working on the code since Aug 13, 2001. See the changelog for details. Original Author: Makoto Kato @@ -26,6 +26,8 @@ Does anyone know of a more current email address for Makoto? He doesn't respond to the address given above... + +Current maintainer: Sergey S. Kostyliov WHAT IS THIS DRIVER? ================== diff -Nru a/Documentation/filesystems/ntfs.txt b/Documentation/filesystems/ntfs.txt --- a/Documentation/filesystems/ntfs.txt Tue May 18 23:38:07 2004 +++ b/Documentation/filesystems/ntfs.txt Tue May 18 23:38:07 2004 @@ -273,6 +273,13 @@ Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog. +2.1.11: + - Driver internal cleanups. +2.1.10: + - Force read-only (re)mounting of volumes with unsupported volume + flags and various cleanups. +2.1.9: + - Fix two bugs in handling of corner cases in the decompression engine. 2.1.8: - Read the $MFT mirror and compare it to the $MFT and if the two do not match, force a read-only mount and do not allow read-write remounts. diff -Nru a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt --- a/Documentation/filesystems/proc.txt Tue May 18 23:38:06 2004 +++ b/Documentation/filesystems/proc.txt Tue May 18 23:38:06 2004 @@ -1208,6 +1208,14 @@ and thrash the system to death, so large and/or important servers will want to set this value to 0. +nr_hugepages and hugetlb_shm_group +---------------------------------- + +nr_hugepages configures number of hugetlb page reserved for the system. + +hugetlb_shm_group contains group id that is allowed to create SysV shared +memory segment using hugetlb page. + 2.5 /proc/sys/dev - Device specific parameters ---------------------------------------------- @@ -1848,10 +1856,3 @@ command to write value into these files, thereby changing the default settings of the kernel. ------------------------------------------------------------------------------ - - - - - - - diff -Nru a/Documentation/i2c/porting-clients b/Documentation/i2c/porting-clients --- a/Documentation/i2c/porting-clients Tue May 18 23:38:06 2004 +++ b/Documentation/i2c/porting-clients Tue May 18 23:38:06 2004 @@ -62,9 +62,9 @@ patch to the Documentation/i2c/sysfs-interface file. * [Attach] For I2C drivers, the attach function should make sure - that the adapter's class has I2C_ADAP_CLASS_SMBUS, using the + that the adapter's class has I2C_CLASS_HWMON, using the following construct: - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; ISA-only drivers of course don't need this. diff -Nru a/Documentation/laptop-mode.txt b/Documentation/laptop-mode.txt --- a/Documentation/laptop-mode.txt Tue May 18 23:38:08 2004 +++ b/Documentation/laptop-mode.txt Tue May 18 23:38:08 2004 @@ -69,12 +69,10 @@ * If you have your filesystems listed as type "auto" in fstab, like I did, then the control script will not recognize them as filesystems that need remounting. -* If you have XFS, make SURE that you set the XFS_HZ value in the control script - correctly, to the value of HZ of your running kernel. Laptop mode will not - work correctly if it is set too low, and you may lose data if it is set too - high. The reason for this problem is that XFS does not export its sysctl - variables in centisecs (like most other subsystems do) but in "jiffies", - which is an internal kernel measure. Once this is fixed things will get better. +* It has been reported that some versions of the mutt mail client use file access + times to determine whether a folder contains new mail. If you use mutt and + experience this, you must disable the noatime remounting in the control script + by setting DO_REMOUNT_NOATIME=0. The details @@ -295,6 +293,9 @@ # Shall we remount journaled fs. with appropiate commit interval? (1=yes) DO_REMOUNTS=1 +# And shall we add the "noatime" option to that as well? (1=yes) +DO_REMOUNT_NOATIME=1 + # age time, in seconds. should be put into a sysconfig file MAX_AGE=600 @@ -319,11 +320,15 @@ DEF_DIRTY_RATIO=40 DEF_XFS_AGE_BUFFER=15 DEF_XFS_SYNC_INTERVAL=30 +DEF_XFS_BUFD_INTERVAL=1 -# This must be adjusted manually to the value of HZ in the running kernel, -# until the XFS people change their external interfaces to work in centisecs -# like the rest of the external world. Unfortunately this cannot be automated. :( -XFS_HZ=1000 +# This must be adjusted manually to the value of HZ in the running kernel +# on 2.4, until the XFS people change their 2.4 external interfaces to work in +# centisecs. This can be automated, but it's a work in progress that still needs +# some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for external +# interfaces, and that is currently always set to 100. So you don't need to +# change this on 2.6. +XFS_HZ=100 if [ ! -e /proc/sys/vm/laptop_mode ]; then echo "Kernel is not patched with laptop_mode patch." @@ -335,6 +340,10 @@ exit 1 fi +if [ $DO_REMOUNT_NOATIME -eq 1 ]; then + NOATIME_OPT=",noatime" +fi + case "$1" in start) AGE=$((100*$MAX_AGE)) @@ -342,19 +351,29 @@ echo -n "Starting laptop_mode" if [ -d /proc/sys/vm/pagebuf ] ; then + # (For 2.4 and early 2.6.) # This only needs to be set, not reset -- it is only used when # laptop mode is enabled. echo $XFS_AGE > /proc/sys/vm/pagebuf/lm_flush_age echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval elif [ -f /proc/sys/fs/xfs/lm_age_buffer ] ; then + # (A couple of early 2.6 laptop mode patches had these.) # The same goes for these. echo $XFS_AGE > /proc/sys/fs/xfs/lm_age_buffer echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval elif [ -f /proc/sys/fs/xfs/age_buffer ] ; then + # (2.6.6) # But not for these -- they are also used in normal # operation. echo $XFS_AGE > /proc/sys/fs/xfs/age_buffer echo $XFS_AGE > /proc/sys/fs/xfs/sync_interval + elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then + # (2.6.7 upwards) + # And not for these either. These are in centisecs, + # not USER_HZ, so we have to use $AGE, not $XFS_AGE. + echo $AGE > /proc/sys/fs/xfs/age_buffer_centisecs + echo $AGE > /proc/sys/fs/xfs/xfssyncd_centisecs + echo 3000 > /proc/sys/fs/xfs/xfsbufd_centisecs fi case "$KLEVEL" in @@ -376,10 +395,10 @@ case "$FST" in "ext3"|"reiserfs") PARSEDOPTS="$(parse_mount_opts commit "$OPTS")" - mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE,noatime + mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE$NOATIME_OPT ;; "xfs") - mount $DEV -t $FST $MP -o remount,$OPTS,noatime + mount $DEV -t $FST $MP -o remount,$OPTS$NOATIME_OPT ;; esac if [ -b $DEV ] ; then @@ -395,9 +414,14 @@ echo -n "Stopping laptop_mode" echo "0" > /proc/sys/vm/laptop_mode if [ -f /proc/sys/fs/xfs/age_buffer ] && [ ! -f /proc/sys/fs/xfs/lm_age_buffer ] ; then - # These need to be restored though, if there are no lm_*. + # These need to be restored, if there are no lm_*. echo "$(($XFS_HZ*$DEF_XFS_AGE_BUFFER))" > /proc/sys/fs/xfs/age_buffer echo "$(($XFS_HZ*$DEF_XFS_SYNC_INTERVAL))" > /proc/sys/fs/xfs/sync_interval + elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then + # These need to be restored as well. + echo "$((100*$DEF_XFS_AGE_BUFFER))" > /proc/sys/fs/xfs/age_buffer_centisecs + echo "$((100*$DEF_XFS_SYNC_INTERVAL))" > /proc/sys/fs/xfs/xfssyncd_centisecs + echo "$((100*$DEF_XFS_BUFD_INTERVAL))" > /proc/sys/fs/xfs/xfsbufd_centisecs fi case "$KLEVEL" in "2.4") @@ -473,7 +497,7 @@ case $status in "on-line") echo "Setting HD spindown to 2 hours" - /sbin/laptop-mode stop + /sbin/laptop_mode stop /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1 #echo -n $ACAD_CPU:$ACAD_THR > /proc/acpi/processor/CPU0/limit @@ -481,7 +505,7 @@ ;; "off-line") echo "Setting HD spindown to 20 seconds" - /sbin/laptop-mode start + /sbin/laptop_mode start /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1 #echo -n $BATT_CPU:$BATT_THR > /proc/acpi/processor/CPU0/limit diff -Nru a/Documentation/md.txt b/Documentation/md.txt --- a/Documentation/md.txt Tue May 18 23:38:08 2004 +++ b/Documentation/md.txt Tue May 18 23:38:08 2004 @@ -2,6 +2,8 @@ http://www..kernel.org/pub/linux/utils/raid/.... +Boot time assembly of RAID arrays +--------------------------------- You can boot with your md device with the following kernel command lines: @@ -11,6 +13,8 @@ for raid arrays with persistent superblocks md=,dev0,dev1,...,devn +or, to assemble a partitionable array: + md=d,dev0,dev1,...,devn md device no. = the number of the md device ... 0 means md0, @@ -34,7 +38,22 @@ e:\loadlin\loadlin e:\zimage root=/dev/md0 md=0,0,4,0,/dev/hdb2,/dev/hdc3 ro -------------------------------- + +Boot time autodetection of RAID arrays +-------------------------------------- + +When md is compiled into the kernel (not as module), partitions of +type 0xfd are scanned and automatically assembled into RAID arrays. +This autodetection may be suppressed with the kernel parameter +"raid=noautodetect". + +The kernel parameter "raid=partitionable" (or "raid=part") means +that all auto-detected arrays are assembled as partitionable. + + +Superblock formats +------------------ + The md driver can support a variety of different superblock formats. (It doesn't yet, but it can) @@ -82,7 +101,7 @@ Specific Rules that apply to format-0 super block arrays, and - arrays with no superblock (non-presistant). + arrays with no superblock (non-persistant). ------------------------------------------------------------- An array can be 'created' by describing the array (level, chunksize diff -Nru a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt --- a/Documentation/power/swsusp.txt Tue May 18 23:38:05 2004 +++ b/Documentation/power/swsusp.txt Tue May 18 23:38:05 2004 @@ -123,10 +123,61 @@ replace ethernet card, resume. If you are fast your users will not even see broken connections. -Any other idea you might have tell me! +Q: Maybe I'm missing something, but why doesn't the regular io paths +work? -Contacting the author -If you have any question or any patch that solves the above or detected -problems please contact me at seasons@falcon.sch.bme.hu. I might delay -answering, sorry about that. +A: (Basically) you want to replace all kernel data with kernel data saved +on disk. How do you do that using normal i/o paths? If you'll read +"new" data 4KB at a time, you'll crash... because you still need "old" +data to do the reading, and "new" data may fit on same physical spot +in memory. +There are two solutions to this: + +* require half of memory to be free during suspend. That way you can +read "new" data onto free spots, then cli and copy + +* assume we had special "polling" ide driver that only uses memory +between 0-640KB. That way, I'd have to make sure that 0-640KB is free +during suspending, but otherwise it would work... + +Q: Does linux support ACPI S4? + +A: No. + +When swsusp was created, ACPI was not too widespread, so we tried to +avoid using ACPI-specific stuff. ACPI also is/was notoriously +buggy. These days swsusp works on APM-only i386 machines and even +without any power managment at all. Some versions also work on PPC. + +That means that machine does not enter S4 on suspend-to-disk, but +simply enters S5. That has few advantages, you can for example boot +windows on next boot, and return to your Linux session later. You +could even have few different Linuxes on your box (not sharing any +partitions), and switch between them. + +It also has disadvantages. On HP nx5000, if you unplug power cord +while machine is suspended-to-disk, Linux will fail to notice that. + +Q: My machine doesn't work with ACPI. How can I use swsusp than ? + +A: Do reboot() syscall with right parameters. Warning: glibc gets in +its way, so check with strace: + +reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, 0xd000fce2) + +(Thanks to Peter Osterlund:) + +#include +#include + +#define LINUX_REBOOT_MAGIC1 0xfee1dead +#define LINUX_REBOOT_MAGIC2 672274793 +#define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2 + +int main() +{ + syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, + LINUX_REBOOT_CMD_SW_SUSPEND, 0); + return 0; +} diff -Nru a/Documentation/sched-domains.txt b/Documentation/sched-domains.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/sched-domains.txt Tue May 18 23:38:09 2004 @@ -0,0 +1,55 @@ +Each CPU has a "base" scheduling domain (struct sched_domain). These are +accessed via cpu_sched_domain(i) and this_sched_domain() macros. The domain +hierarchy is built from these base domains via the ->parent pointer. ->parent +MUST be NULL terminated, and domain structures should be per-CPU as they +are locklessly updated. + +Each scheduling domain spans a number of CPUs (stored in the ->span field). +A domain's span MUST be a superset of it child's span, and a base domain +for CPU i MUST span at least i. The top domain for each CPU will generally +span all CPUs in the system although strictly it doesn't have to, but this +could lead to a case where some CPUs will never be given tasks to run unless +the CPUs allowed mask is explicitly set. A sched domain's span means "balance +process load among these CPUs". + +Each scheduling domain must have one or more CPU groups (struct sched_group) +which are organised as a circular one way linked list from the ->groups +pointer. The union of cpumasks of these groups MUST be the same as the +domain's span. The intersection of cpumasks from any two of these groups +MUST be the empty set. The group pointed to by the ->groups pointer MUST +contain the CPU to which the domain belongs. Groups may be shared among +CPUs as they contain read only data after they have been set up. + +Balancing within a sched domain occurs between groups. That is, each group +is treated as one entity. The load of a group is defined as the sum of the +load of each of its member CPUs, and only when the load of a group becomes +out of balance are tasks moved between groups. + +In kernel/sched.c, rebalance_tick is run periodically on each CPU. This +function takes its CPU's base sched domain and checks to see if has reached +its rebalance interval. If so, then it will run load_balance on that domain. +rebalance_tick then checks the parent sched_domain (if it exists), and the +parent of the parent and so forth. + +*** Implementing sched domains *** +The "base" domain will "span" the first level of the hierarchy. In the case +of SMT, you'll span all siblings of the physical CPU, with each group being +a single virtual CPU. + +In SMP, the parent of the base domain will span all physical CPUs in the +node. Each group being a single physical CPU. Then with NUMA, the parent +of the SMP domain will span the entire machine, with each group having the +cpumask of a node. Or, you could do multi-level NUMA or Opteron, for example, +might have just one domain covering its one NUMA level. + +The implementor should read comments in include/linux/sched.h: +struct sched_domain fields, SD_FLAG_*, SD_*_INIT to get an idea of +the specifics and what to tune. + +Implementors should change the line +#undef SCHED_DOMAIN_DEBUG +to +#define SCHED_DOMAIN_DEBUG +in kernel/sched.c as this enables an error checking parse of the sched domains +which should catch most possible errors (described above). It also prints out +the domain structure in a visual format. diff -Nru a/Documentation/scsi/00-INDEX b/Documentation/scsi/00-INDEX --- a/Documentation/scsi/00-INDEX Tue May 18 23:38:07 2004 +++ b/Documentation/scsi/00-INDEX Tue May 18 23:38:07 2004 @@ -62,6 +62,8 @@ - info on API between SCSI layer and low level drivers st.txt - info on scsi tape driver +sym53c500_cs.txt + - info on PCMCIA driver for Symbios Logic 53c500 based adapters sym53c8xx_2.txt - info on second generation driver for sym53c8xx based adapters tmscsim.txt diff -Nru a/Documentation/scsi/sym53c500_cs.txt b/Documentation/scsi/sym53c500_cs.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/scsi/sym53c500_cs.txt Tue May 18 23:38:09 2004 @@ -0,0 +1,23 @@ +The sym53c500_cs driver originated as an add-on to David Hinds' pcmcia-cs +package, and was written by Tom Corner (tcorner@via.at). A rewrite was +long overdue, and the current version addresses the following concerns: + + (1) extensive kernel changes between 2.4 and 2.6. + (2) deprecated PCMCIA support outside the kernel. + +All the USE_BIOS code has been ripped out. It was never used, and could +not have worked anyway. The USE_DMA code is likewise gone. Many thanks +to YOKOTA Hiroshi (nsp_cs driver) and David Hinds (qlogic_cs driver) for +the code fragments I shamelessly adapted for this work. Thanks also to +Christoph Hellwig for his patient tutelage while I stumbled about. + +The Symbios Logic 53c500 chip was used in the "newer" (circa 1997) version +of the New Media Bus Toaster PCMCIA SCSI controller. Presumably there are +other products using this chip, but I've never laid eyes (much less hands) +on one. + +Through the years, there have been a number of downloads of the pcmcia-cs +version of this driver, and I guess it worked for those users. It worked +for Tom Corner, and it works for me. Your mileage will probably vary. + +--Bob Tracy (rct@frus.com) diff -Nru a/Documentation/sound/oss/OPL3-SA b/Documentation/sound/oss/OPL3-SA --- a/Documentation/sound/oss/OPL3-SA Tue May 18 23:38:07 2004 +++ b/Documentation/sound/oss/OPL3-SA Tue May 18 23:38:07 2004 @@ -34,7 +34,7 @@ mpu_irq: This is the MPU401's IRQ. If you'd like to use the OPL3 FM Synthesizer, make sure you enable -CONFIG_YM3812 (in 'make config'). That'll build the opl3.o module. +CONFIG_SOUND_YM3812 (in 'make config'). That'll build the opl3.o module. Then a simple 'insmod opl3 io=0x388', and you now have FM Synth. diff -Nru a/Documentation/sound/oss/VIBRA16 b/Documentation/sound/oss/VIBRA16 --- a/Documentation/sound/oss/VIBRA16 Tue May 18 23:38:06 2004 +++ b/Documentation/sound/oss/VIBRA16 Tue May 18 23:38:06 2004 @@ -62,12 +62,12 @@ Or, take the hard way: -insmod souncore -insmod sound -insmod uart401 -insmod sb io=0x220 irq=5 dma=1 dma16=3 +modprobe soundcore +modprobe sound +modprobe uart401 +modprobe sb io=0x220 irq=5 dma=1 dma16=3 # do you need MIDI? -insmod opl3=0x388 +modprobe opl3=0x388 Just in case, the kernel sound support should be: diff -Nru a/Documentation/usb/mtouchusb.txt b/Documentation/usb/mtouchusb.txt --- a/Documentation/usb/mtouchusb.txt Tue May 18 23:38:09 2004 +++ b/Documentation/usb/mtouchusb.txt Tue May 18 23:38:09 2004 @@ -1,26 +1,38 @@ CHANGES -- Created based off of scanner & INSTALL from the original touchscreen +- 0.3 - Created based off of scanner & INSTALL from the original touchscreen driver on freshmeat (http://freshmeat.net/projects/3mtouchscreendriver) - Amended for linux-2.4.18, then 2.4.19 -- Complete rewrite using Linux Input in 2.6.3 +- 0.5 - Complete rewrite using Linux Input in 2.6.3 Unfortunately no calibration support at this time +- 1.4 - Multiple changes to support the EXII 5000UC and house cleaning + Changed reset from standard USB dev reset to vendor reset + Changed data sent to host from compensated to raw coordinates + Eliminated vendor/product module params + Performed multiple successfull tests with an EXII-5010UC -DRIVER NOTES: +SUPPORTED HARDWARE: + + All controllers have the Vendor: 0x0596 & Product: 0x0001 -Installation is simple, you only need to add Linux Input, Linux USB, and the -driver to the kernel. The driver can also be optionally built as a module. -If you have another MicroTouch device that you wish to experiment with -or try using this driver with, but the Vendor and Product ID's are not -coded in, don't despair. If the driver was compiled as a module, you can -pass options to the driver. Simply try: + Controller Description Part Number + ------------------------------------------------------ - /sbin/modprobe mtouchusb vendor=0x#### product=0x**** + USB Capacitive - Pearl Case 14-205 (Discontinued) + USB Capacitive - Black Case 14-124 (Discontinued) + USB Capacitive - No Case 14-206 (Discontinued) + + USB Capacitive - Pearl Case EXII-5010UC + USB Capacitive - Black Case EXII-5030UC + USB Capacitive - No Case EXII-5050UC + +DRIVER NOTES: -If it works, send me the iVendor & iProduct (or a patch) and I will add... +Installation is simple, you only need to add Linux Input, Linux USB, and the +driver to the kernel. The driver can also be optionally built as a module. This driver appears to be one of possible 2 Linux USB Input Touchscreen drivers. Although 3M produces a binary only driver available for @@ -28,53 +40,28 @@ touchscreen for embedded apps using QTEmbedded, DirectFB, etc. So I feel the logical choice is to use Linux Imput. -A little info about the MicroTouch USB controller (14-206): - -Y is inverted, and the device has a total possible resolution of 0 - 65535. - -Y is inverted by the driver by: +Currently there is no way to calibrate the device via this driver. Even if +the device could be calibrated, the driver pulls to raw coordinate data from +the controller. This means calibration must be performed within the +userspace. + +The controller screen resolution is now 0 to 16384 for both X and Y reporting +the raw touch data. This is the same for the old and new capacitive USB +controllers. + +Perhaps at some point an abstract function will be placed into evdev so +generic functions like calibrations, resets, and vendor information can be +requested from the userspace (And the drivers would handle the vendor specific +tasks). - input.absmin[ABS_Y] = MTOUCHUSB_MAX_YC; - input.absmax[ABS_Y] = MTOUCHUSB_MIN_YC; - -absmin & absmax are also used to scale the data, sine it is rather high -resolution. - - ---------------touch screen area----------------- - I MicroTouch (xmax,ymax) @I - I X I - I ########visible monitor area############## I - I #@ (xmin,ymin) # I - I # # I - I # # I - I # # I - I # # I - I # # I - I Y # # I - I # # I - I # # I - I # # I - I # # I - I # # I - I # (xmax,ymax) @# I - I ########################################## I - I I - I@ MicroTouch (xmin,ymin) I - ------------------------------------------------- - -Currently there is no way to calibrate the device via this driver. Perhaps -at some point an abstract function will be placed into evdev so generic -functions like calibrations, resets, and vendor information can be requested -(And the drivers would handle the vendor specific tasks). - -ADDITIONAL INFORMATION/UPDATES: +ADDITIONAL INFORMATION/UPDATES/X CONFIGURATION EXAMPLE: http://groomlakelabs.com/grandamp/code/microtouch/ TODO: Implement a control urb again to handle requests to and from the device -such as calibration, etc. +such as calibration, etc once/if it becomes available. DISCLAMER: @@ -83,3 +70,7 @@ http://www.3m.com/3MTouchSystems/downloads/ +THANKS: + +A huge thank you to 3M Touch Systems for the EXII-5010UC controllers for +testing! diff -Nru a/Documentation/vm/hugetlbpage.txt b/Documentation/vm/hugetlbpage.txt --- a/Documentation/vm/hugetlbpage.txt Tue May 18 23:38:05 2004 +++ b/Documentation/vm/hugetlbpage.txt Tue May 18 23:38:05 2004 @@ -91,9 +91,12 @@ used to change the file attributes on hugetlbfs. Also, it is important to note that no such mount command is required if the -applications are going to use only shmat/shmget system calls. It is possible -for same or different applications to use any combination of mmaps and shm* -calls. Though the mount of filesystem will be required for using mmaps. +applications are going to use only shmat/shmget system calls. Users who +wish to use hugetlb page via shared memory segment should be a member of +a supplementary group and system admin needs to configure that gid into +/proc/sys/vm/hugetlb_shm_group. It is possible for same or different +applications to use any combination of mmaps and shm* calls. Though the +mount of filesystem will be required for using mmaps. /* Example of using hugepage in user application using Sys V shared memory * system calls. In this example, app is requesting memory of size 256MB that diff -Nru a/MAINTAINERS b/MAINTAINERS --- a/MAINTAINERS Tue May 18 23:38:08 2004 +++ b/MAINTAINERS Tue May 18 23:38:08 2004 @@ -168,10 +168,8 @@ AACRAID SCSI RAID DRIVER P: Adaptec OEM Raid Solutions -M: linux-aacraid-devel@dell.com -L: linux-aacraid-devel@dell.com -L: linux-aacraid-announce@dell.com -W: http://domsch.com/linux +L: linux-scsi@vger.kernel.org +W: http://linux.dell.com/storage.shtml S: Supported ACPI @@ -574,14 +572,12 @@ S: Maintained CYCLADES ASYNC MUX DRIVER -P: Henrique Gobbi -M: henrique@cyclades.com +M: async@cyclades.com W: http://www.cyclades.com/ S: Supported CYCLADES PC300 DRIVER -P: Henrique Gobbi -M: henrique@cyclades.com +M: pc300@cyclades.com W: http://www.cyclades.com/ S: Supported @@ -976,6 +972,11 @@ W: http://www.uni-mainz.de/~langm000/linux.html S: Maintained +IBM Power Linux RAID adapter +P: Brian King +M: brking@us.ibm.com +S: Supported + IBM ServeRAID RAID DRIVER P: Jack Hammer P: Dave Jeffery @@ -1228,6 +1229,13 @@ L: linux-scsi@vger.kernel.org S: Maintained +LEGO USB Tower driver +P: Juergen Stuber +M: starblue@users.sourceforge.net +L: legousb-devel@lists.sourceforge.net +W: http://legousb.sourceforge.net/ +S: Maintained + LINUX FOR IBM pSERIES (RS/6000) P: Paul Mackerras M: paulus@au.ibm.com @@ -1801,6 +1809,12 @@ L: linux-kernel@vger.kernel.org (kernel issues) L: selinux@tycho.nsa.gov (general discussion) W: http://www.nsa.gov/selinux +S: Supported + +SERIAL ATA (SATA) SUBSYSTEM: +P: Jeff Garzik +M: jgarzik@pobox.com +L: linux-ide@vger.kernel.org S: Supported SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER diff -Nru a/Makefile b/Makefile --- a/Makefile Tue May 18 23:38:08 2004 +++ b/Makefile Tue May 18 23:38:08 2004 @@ -1001,6 +1001,8 @@ -name '*.[chS]' -print; \ find arch/$(ARCH) $(RCS_FIND_IGNORE) \ -name '*.[chS]' -print; \ + find security/selinux/include $(RCS_FIND_IGNORE) \ + -name '*.[chS]' -print; \ find include $(RCS_FIND_IGNORE) \ \( -name config -o -name 'asm-*' \) -prune \ -o -name '*.[chS]' -print; \ @@ -1056,6 +1058,9 @@ find * $(RCS_FIND_IGNORE) \ -name '*.[hcS]' -type f -print | sort \ | xargs $(PERL) -w scripts/checkversion.pl + +buildcheck: + $(PERL) scripts/reference_discarded.pl endif #ifeq ($(config-targets),1) endif #ifeq ($(mixed-targets),1) diff -Nru a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c --- a/arch/alpha/kernel/module.c Tue May 18 23:38:05 2004 +++ b/arch/alpha/kernel/module.c Tue May 18 23:38:05 2004 @@ -234,6 +234,10 @@ value was resolved from somewhere else. */ if (sym->st_shndx == SHN_UNDEF) goto reloc_overflow; + if ((sym->st_other & STO_ALPHA_STD_GPLOAD) == + STO_ALPHA_STD_GPLOAD) + /* Omit the prologue. */ + value += 8; /* FALLTHRU */ case R_ALPHA_BRADDR: value -= (u64)location + 4; diff -Nru a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c --- a/arch/alpha/kernel/process.c Tue May 18 23:38:09 2004 +++ b/arch/alpha/kernel/process.c Tue May 18 23:38:09 2004 @@ -510,12 +510,6 @@ return 0; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { @@ -534,7 +528,7 @@ */ pc = thread_saved_pc(p); - if (pc >= first_sched && pc < last_sched) { + if (in_sched_functions(pc)) { schedule_frame = ((unsigned long *)p->thread_info->pcb.ksp)[6]; return ((unsigned long *)schedule_frame)[12]; } diff -Nru a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c --- a/arch/alpha/kernel/smp.c Tue May 18 23:38:06 2004 +++ b/arch/alpha/kernel/smp.c Tue May 18 23:38:06 2004 @@ -820,6 +820,9 @@ unsigned long timeout; int num_cpus_to_call; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; data.wait = wait; diff -Nru a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c --- a/arch/alpha/kernel/time.c Tue May 18 23:38:07 2004 +++ b/arch/alpha/kernel/time.c Tue May 18 23:38:07 2004 @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -254,12 +255,11 @@ * arch/i386/time.c. */ -#define PIC_TICK_RATE 1193180UL #define CALIBRATE_LATCH 0xffff #define TIMEOUT_COUNT 0x100000 static unsigned long __init -calibrate_cc_with_pic(void) +calibrate_cc_with_pit(void) { int cc, count = 0; @@ -287,7 +287,7 @@ if (count <= 1 || count == TIMEOUT_COUNT) return 0; - return ((long)cc * PIC_TICK_RATE) / (CALIBRATE_LATCH + 1); + return ((long)cc * PIT_TICK_RATE) / (CALIBRATE_LATCH + 1); } /* The Linux interpretation of the CMOS clock register contents: @@ -313,7 +313,7 @@ /* Calibrate CPU clock -- attempt #1. */ if (!est_cycle_freq) - est_cycle_freq = validate_cc_value(calibrate_cc_with_pic()); + est_cycle_freq = validate_cc_value(calibrate_cc_with_pit()); cc1 = rpcc_after_update_in_progress(); diff -Nru a/arch/arm/Kconfig b/arch/arm/Kconfig --- a/arch/arm/Kconfig Tue May 18 23:38:07 2004 +++ b/arch/arm/Kconfig Tue May 18 23:38:07 2004 @@ -111,6 +111,9 @@ config ARCH_IOP3XX bool "IOP3xx-based" +config ARCH_IXP4XX + bool "IXP4xx-based" + config ARCH_L7200 bool "LinkUp-L7200" help @@ -170,6 +173,8 @@ source "arch/arm/mach-iop3xx/Kconfig" +source "arch/arm/mach-ixp4xx/Kconfig" + source "arch/arm/mach-pxa/Kconfig" source "arch/arm/mach-sa1100/Kconfig" @@ -222,7 +227,7 @@ config DMABOUNCE bool - depends on SA1111 + depends on SA1111 || ARCH_IXP4XX default y source arch/arm/mm/Kconfig @@ -252,7 +257,7 @@ # Now handle the bus types config PCI bool "PCI support" if ARCH_INTEGRATOR_AP - default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX + default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX || ARCH_IXP4XX help Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside @@ -791,8 +796,8 @@ before it is used. config DEBUG_S3C2410_UART - int depends on DEBUG_LL && ARCH_S3C2410 + int "S3C2410 UART to use for low-level debug" default "0" help Choice for UART for kernel low-level using S3C2410 UARTS, diff -Nru a/arch/arm/Makefile b/arch/arm/Makefile --- a/arch/arm/Makefile Tue May 18 23:38:06 2004 +++ b/arch/arm/Makefile Tue May 18 23:38:06 2004 @@ -92,6 +92,7 @@ textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000 machine-$(CONFIG_ARCH_IOP3XX) := iop3xx machine-$(CONFIG_ARCH_ADIFCC) := adifcc + machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx machine-$(CONFIG_ARCH_OMAP) := omap machine-$(CONFIG_ARCH_S3C2410) := s3c2410 machine-$(CONFIG_ARCH_LH7A40X) := lh7a40x diff -Nru a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile --- a/arch/arm/boot/Makefile Tue May 18 23:38:05 2004 +++ b/arch/arm/boot/Makefile Tue May 18 23:38:05 2004 @@ -51,6 +51,8 @@ params_phys-$(CONFIG_ARCH_IOP3XX) := 0xa0000100 zreladdr-$(CONFIG_ARCH_ADIFCC) := 0xc0008000 params_phys-$(CONFIG_ARCH_ADIFCC) := 0xc0000100 + zreladdr-$(CONFIG_ARCH_IXP4XX) := 0x00008000 +params-phys-$(CONFIG_ARCH_IXP4XX) := 0x00000100 zreladdr-$(CONFIG_ARCH_OMAP) := 0x10008000 params_phys-$(CONFIG_ARCH_OMAP) := 0x10000100 initrd_phys-$(CONFIG_ARCH_OMAP) := 0x10800000 diff -Nru a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S --- a/arch/arm/boot/compressed/head.S Tue May 18 23:38:09 2004 +++ b/arch/arm/boot/compressed/head.S Tue May 18 23:38:09 2004 @@ -73,6 +73,12 @@ .macro writeb, rb str \rb, [r3, #0x14] @ UTDR .endm +#elif defined(CONFIG_ARCH_IXP4XX) + .macro loadsp, rb + mov \rb, #0xc8000000 + .endm + .macro writeb, rb + str \rb, [r3, #0] #elif defined(CONFIG_ARCH_LH7A40X) .macro loadsp, rb ldr \rb, =0x80000700 @ UART2 UARTBASE @@ -176,7 +182,7 @@ ldmia r0, {r1, r2, r3, r4, r5, r6, ip, sp} subs r0, r0, r1 @ calculate the delta offset - @ if delta is zero, we're + @ if delta is zero, we are beq not_relocated @ running at the address we @ were linked at. diff -Nru a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/configs/ixp4xx_defconfig Tue May 18 23:38:09 2004 @@ -0,0 +1,1081 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set +# CONFIG_IKCONFIG is not set +CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +CONFIG_MODVERSIONS=y +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP3XX is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_OMAP is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_VERSATILE_PB is not set + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options +# +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_IOP321 is not set + +# +# IOP3xx Chipset Features +# +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y + +# +# Intel IXP4xx Implementation Options +# + +# +# IXP4xx Platforms +# +CONFIG_ARCH_IXDP425=y +CONFIG_ARCH_IXCDP1100=y +CONFIG_ARCH_PRPMC1100=y +CONFIG_ARCH_ADI_COYOTE=y +# CONFIG_ARCH_AVILA is not set +CONFIG_ARCH_IXDP4XX=y + +# +# IXP4xx Options +# +# CONFIG_IXP4XX_INDIRECT_PCI is not set + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# TI OMAP Implementations +# + +# +# OMAP Core Type +# + +# +# OMAP Board Type +# + +# +# OMAP Feature Selections +# + +# +# S3C2410 Implementations +# + +# +# LH7A40X Implementations +# +CONFIG_DMABOUNCE=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_MINICACHE=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +CONFIG_CPU_BIG_ENDIAN=y +CONFIG_XSCALE_PMU=y + +# +# General setup +# +CONFIG_PCI=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_PCI_LEGACY_PROC=y +CONFIG_PCI_NAMES=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Generic Driver Options +# +# CONFIG_DEBUG_DRIVER is not set +CONFIG_PM=y +# CONFIG_PREEMPT is not set +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_PCI is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +CONFIG_MTD_NAND_IDS=m + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK_DEV=m +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_FWMARK=y +CONFIG_IP_ROUTE_NAT=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_TOS=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set + +# +# IP: Virtual Server Configuration +# +CONFIG_IP_VS=m +CONFIG_IP_VS_DEBUG=y +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +# CONFIG_IP_VS_PROTO_TCP is not set +# CONFIG_IP_VS_PROTO_UDP is not set +# CONFIG_IP_VS_PROTO_ESP is not set +# CONFIG_IP_VS_PROTO_AH is not set + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +# CONFIG_IP_VS_SED is not set +# CONFIG_IP_VS_NQ is not set + +# +# IPVS application helper +# +# CONFIG_IPV6 is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m +# CONFIG_IP_NF_TFTP is not set +# CONFIG_IP_NF_AMANDA is not set +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_LIMIT=m +# CONFIG_IP_NF_MATCH_IPRANGE is not set +CONFIG_IP_NF_MATCH_MAC=m +# CONFIG_IP_NF_MATCH_PKTTYPE is not set +CONFIG_IP_NF_MATCH_MARK=m +CONFIG_IP_NF_MATCH_MULTIPORT=m +CONFIG_IP_NF_MATCH_TOS=m +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_DSCP is not set +CONFIG_IP_NF_MATCH_AH_ESP=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_TCPMSS=m +# CONFIG_IP_NF_MATCH_HELPER is not set +CONFIG_IP_NF_MATCH_STATE=m +# CONFIG_IP_NF_MATCH_CONNTRACK is not set +CONFIG_IP_NF_MATCH_OWNER=m +# CONFIG_IP_NF_MATCH_PHYSDEV is not set +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +# CONFIG_IP_NF_TARGET_NETMAP is not set +# CONFIG_IP_NF_TARGET_SAME is not set +CONFIG_IP_NF_NAT_LOCAL=y +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m +CONFIG_IP_NF_NAT_FTP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_DSCP is not set +CONFIG_IP_NF_TARGET_MARK=m +# CONFIG_IP_NF_TARGET_CLASSIFY is not set +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_TARGET_TCPMSS=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +# CONFIG_IP_NF_ARP_MANGLE is not set +CONFIG_IP_NF_COMPAT_IPCHAINS=m +CONFIG_IP_NF_COMPAT_IPFWADM=m +# CONFIG_IP_NF_RAW is not set + +# +# Bridge: Netfilter Configuration +# +# CONFIG_BRIDGE_NF_EBTABLES is not set +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +CONFIG_ATM=y +CONFIG_ATM_CLIP=y +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=y +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +CONFIG_X25=m +CONFIG_LAPB=m +# CONFIG_NET_DIVERT is not set +CONFIG_ECONET=m +CONFIG_ECONET_AUNUDP=y +CONFIG_ECONET_NATIVE=y +CONFIG_WAN_ROUTER=m +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +# CONFIG_NET_SCH_HFSC is not set +CONFIG_NET_SCH_CSZ=m +# CONFIG_NET_SCH_ATM is not set +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +# CONFIG_NET_SCH_DELAY is not set +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_QOS=y +CONFIG_NET_ESTIMATOR=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_POLICE=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +CONFIG_EEPRO100=y +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y + +# +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +# CONFIG_AIRO is not set +CONFIG_HERMES=y +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +CONFIG_PCI_HERMES=y +# CONFIG_ATMEL is not set + +# +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support +# +CONFIG_NET_WIRELESS=y + +# +# Wan interfaces +# +CONFIG_WAN=y +# CONFIG_DSCC4 is not set +# CONFIG_LANMEDIA is not set +# CONFIG_SYNCLINK_SYNCPPP is not set +CONFIG_HDLC=m +CONFIG_HDLC_RAW=y +# CONFIG_HDLC_RAW_ETH is not set +CONFIG_HDLC_CISCO=y +CONFIG_HDLC_FR=y +CONFIG_HDLC_PPP=y +CONFIG_HDLC_X25=y +# CONFIG_PCI200SYN is not set +# CONFIG_WANXL is not set +# CONFIG_PC300 is not set +# CONFIG_FARSYNC is not set +CONFIG_DLCI=m +CONFIG_DLCI_COUNT=24 +CONFIG_DLCI_MAX=8 +CONFIG_WAN_ROUTER_DRIVERS=y +# CONFIG_CYCLADES_SYNC is not set +# CONFIG_LAPBETHER is not set +# CONFIG_X25_ASY is not set + +# +# ATM drivers +# +CONFIG_ATM_TCP=m +# CONFIG_ATM_LANAI is not set +# CONFIG_ATM_ENI is not set +# CONFIG_ATM_FIRESTREAM is not set +# CONFIG_ATM_ZATM is not set +# CONFIG_ATM_NICSTAR is not set +# CONFIG_ATM_IDT77252 is not set +# CONFIG_ATM_AMBASSADOR is not set +# CONFIG_ATM_HORIZON is not set +# CONFIG_ATM_IA is not set +# CONFIG_ATM_FORE200E_MAYBE is not set +# CONFIG_ATM_HE is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_IDEPCI_SHARE_IRQ is not set +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_SL82C105 is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +# CONFIG_IDEDMA_PCI_AUTO is not set +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +CONFIG_BLK_DEV_CMD64X=y +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +CONFIG_BLK_DEV_HPT366=y +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +CONFIG_BLK_DEV_PDC202XX_NEW=y +# CONFIG_PDC202XX_FORCE is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set +# CONFIG_SERIO_I8042 is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_IXP4XX_WATCHDOG=y + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_ISA is not set +CONFIG_I2C_IXP4XX=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Hardware Sensors Chip support +# +CONFIG_I2C_SENSOR=y +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set + +# +# Other I2C Chip support +# +CONFIG_SENSORS_EEPROM=y +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +# CONFIG_EXT2_FS_SECURITY is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set +# CONFIG_DEBUG_BDI2000_XSCALE is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/arm/configs/smdk2410_defconfig b/arch/arm/configs/smdk2410_defconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/configs/smdk2410_defconfig Tue May 18 23:38:09 2004 @@ -0,0 +1,667 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set +# CONFIG_IKCONFIG is not set +# CONFIG_EMBEDDED is not set +CONFIG_KALLSYMS=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP3XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set +CONFIG_ARCH_S3C2410=y +# CONFIG_ARCH_OMAP is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_VERSATILE_PB is not set + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options +# +# CONFIG_ARCH_IOP310 is not set +# CONFIG_ARCH_IOP321 is not set + +# +# IOP3xx Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# TI OMAP Implementations +# + +# +# OMAP Core Type +# + +# +# OMAP Board Type +# + +# +# OMAP Feature Selections +# + +# +# S3C2410 Implementations +# +# CONFIG_ARCH_BAST is not set +# CONFIG_ARCH_H1940 is not set +CONFIG_ARCH_SMDK2410=y +# CONFIG_MACH_VR1000 is not set + +# +# LH7A40X Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM920T=y +CONFIG_CPU_32v4=y +CONFIG_CPU_ABRT_EV4T=y +CONFIG_CPU_CACHE_V4WT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set + +# +# General setup +# +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 + +# +# At least one math emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=y +# CONFIG_BINFMT_MISC is not set + +# +# Generic Driver Options +# +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_PM is not set +# CONFIG_PREEMPT is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=1f04 mem=32M" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_CONCAT is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_EDB7312 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_IPV6 is not set +# CONFIG_NETFILTER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set + +# +# Fusion MPT device support +# + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_S3C2410=y +CONFIG_SERIAL_S3C2410_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +# CONFIG_TMPFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Graphics support +# +CONFIG_FB=y +CONFIG_FB_VIRTUAL=y + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +# CONFIG_LOGO is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# USB support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set +CONFIG_DEBUG_LL_PRINTK=y +CONFIG_DEBUG_S3C2410_PORT=y +CONFIG_DEBUG_S3C2410_UART=0 + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_CRC32=y +CONFIG_LIBCRC32C=y diff -Nru a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c --- a/arch/arm/kernel/armksyms.c Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/armksyms.c Tue May 18 23:38:06 2004 @@ -7,41 +7,16 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include #include -#include #include -#include -#include -#include -#include #include #include -#include -#include -#include -#include -#include #include -#include -#include +#include #include -#include -#include -#include -#include #include #include -#include -#include - -extern void dump_thread(struct pt_regs *, struct user *); -extern int dump_fpu(struct pt_regs *, struct user_fp_struct *); -extern void inswb(unsigned int port, void *to, int len); -extern void outswb(unsigned int port, const void *to, int len); - -extern void __bad_xchg(volatile void *ptr, int size); /* * libgcc functions - functions that are used internally by the @@ -61,12 +36,9 @@ extern void __udivsi3(void); extern void __umodsi3(void); extern void __do_div64(void); -extern void abort(void); -extern void ret_from_exception(void); extern void fpundefinstr(void); extern void fp_enter(void); -extern void fp_init(union fp_state *); /* * This has a special calling convention; it doesn't @@ -88,32 +60,7 @@ EXPORT_SYMBOL_NOVERS(__backtrace); /* platform dependent support */ -EXPORT_SYMBOL(dump_thread); -EXPORT_SYMBOL(dump_fpu); EXPORT_SYMBOL(udelay); -EXPORT_SYMBOL(__ioremap); -EXPORT_SYMBOL(__iounmap); -EXPORT_SYMBOL(kernel_thread); -EXPORT_SYMBOL(system_rev); -EXPORT_SYMBOL(system_serial_low); -EXPORT_SYMBOL(system_serial_high); -#ifdef CONFIG_DEBUG_BUGVERBOSE -EXPORT_SYMBOL(__bug); -#endif -EXPORT_SYMBOL(__bad_xchg); -EXPORT_SYMBOL(__readwrite_bug); -EXPORT_SYMBOL(enable_irq); -EXPORT_SYMBOL(disable_irq); -EXPORT_SYMBOL(probe_irq_mask); -EXPORT_SYMBOL(set_irq_type); -EXPORT_SYMBOL(enable_irq_wake); -EXPORT_SYMBOL(disable_irq_wake); -EXPORT_SYMBOL(pm_idle); -EXPORT_SYMBOL(pm_power_off); -EXPORT_SYMBOL(fp_init); - - /* processor dependencies */ -EXPORT_SYMBOL(__machine_arch_type); /* networking */ EXPORT_SYMBOL(csum_partial); @@ -140,20 +87,6 @@ EXPORT_SYMBOL_NOVERS(__raw_writesl); #endif - /* address translation */ -#ifndef __virt_to_phys__is_a_macro -EXPORT_SYMBOL(__virt_to_phys); -#endif -#ifndef __phys_to_virt__is_a_macro -EXPORT_SYMBOL(__phys_to_virt); -#endif -#ifndef __virt_to_bus__is_a_macro -EXPORT_SYMBOL(__virt_to_bus); -#endif -#ifndef __bus_to_virt__is_a_macro -EXPORT_SYMBOL(__bus_to_virt); -#endif - /* string / mem functions */ EXPORT_SYMBOL_NOVERS(strcpy); EXPORT_SYMBOL_NOVERS(strncpy); @@ -227,10 +160,6 @@ EXPORT_SYMBOL(_find_next_zero_bit_be); #endif - /* elf */ -EXPORT_SYMBOL(elf_platform); -EXPORT_SYMBOL(elf_hwcap); - /* syscalls */ EXPORT_SYMBOL(sys_write); EXPORT_SYMBOL(sys_read); @@ -238,11 +167,3 @@ EXPORT_SYMBOL(sys_open); EXPORT_SYMBOL(sys_exit); EXPORT_SYMBOL(sys_wait4); - - /* semaphores */ -EXPORT_SYMBOL_NOVERS(__down_failed); -EXPORT_SYMBOL_NOVERS(__down_interruptible_failed); -EXPORT_SYMBOL_NOVERS(__down_trylock_failed); -EXPORT_SYMBOL_NOVERS(__up_wakeup); - -EXPORT_SYMBOL(get_wchan); diff -Nru a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c --- a/arch/arm/kernel/bios32.c Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/bios32.c Tue May 18 23:38:06 2004 @@ -156,6 +156,30 @@ } /* + * Same as above. The PrPMC800 carrier board for the PrPMC1100 + * card maps the host-bridge @ 00:01:00 for some reason and it + * ends up getting scanned. Note that we only want to do this + * fixup when we find the IXP4xx on a PrPMC system, which is why + * we check the machine type. We could be running on a board + * with an IXP4xx target device and we don't want to kill the + * resources in that case. + */ +static void __devinit pci_fixup_prpmc1100(struct pci_dev *dev) +{ + int i; + + if (machine_is_prpmc1100()) { + dev->class &= 0xff; + dev->class |= PCI_CLASS_BRIDGE_HOST << 8; + for (i = 0; i < PCI_NUM_RESOURCES; i++) { + dev->resource[i].start = 0; + dev->resource[i].end = 0; + dev->resource[i].flags = 0; + } + } +} + +/* * PCI IDE controllers use non-standard I/O port decoding, respect it. */ static void __devinit pci_fixup_ide_bases(struct pci_dev *dev) @@ -273,6 +297,10 @@ PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases + }, { + PCI_FIXUP_HEADER, + PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IXP4XX, + pci_fixup_prpmc1100 }, { 0 } }; diff -Nru a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S --- a/arch/arm/kernel/debug.S Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/debug.S Tue May 18 23:38:06 2004 @@ -465,13 +465,53 @@ beq 1001b .endm +#elif defined(CONFIG_ARCH_IXP4XX) + + .macro addruart,rx + mrc p15, 0, \rx, c1, c0 + tst \rx, #1 @ MMU enabled? + moveq \rx, #0xc8000000 + movne \rx, #0xff000000 + add \rx,\rx,#3 @ Uart regs are at off set of 3 if + @ byte writes used - Big Endian. + .endm + + .macro senduart,rd,rx + strb \rd, [\rx] + .endm + + .macro waituart,rd,rx +1002: ldrb \rd, [\rx, #0x14] + and \rd, \rd, #0x60 @ check THRE and TEMT bits + teq \rd, #0x60 + bne 1002b + .endm + + .macro busyuart,rd,rx + .endm + #elif defined(CONFIG_ARCH_OMAP) #include +#ifdef CONFIG_ARCH_OMAP730 +#define OMAP_SERIAL_REG_SHIFT 0 +#else +#define OMAP_SERIAL_REG_SHIFT 2 +#endif + /* See also __create_page_tables in head.S */ .macro addruart,rx - mov \rx, #0xff000000 + mrc p15, 0, \rx, c1, c0 + tst \rx, #1 @ MMU enabled? + moveq \rx, #0xff000000 @ physical base address + movne \rx, #0xfe000000 @ virtual base orr \rx, \rx, #0x00fb0000 +#ifdef CONFIG_OMAP_LL_DEBUG_UART3 + orr \rx, \rx, #0x00009000 @ UART 3 +#endif +#if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3) + orr \rx, \rx, #0x00000800 @ UART 2 & 3 +#endif .endm .macro senduart,rd,rx @@ -486,9 +526,6 @@ .endm .macro waituart,rd,rx -1001: ldrb \rd, [\rx, #(0x6 << OMAP_SERIAL_REG_SHIFT)] - tst \rd, #0x10 - beq 1001b .endm #elif defined(CONFIG_ARCH_S3C2410) @@ -551,7 +588,7 @@ .endm #elif defined(CONFIG_ARCH_LH7A40X) - @ It isn't known if this will be appropriate for every 40x + @ It is not known if this will be appropriate for every 40x @ board. .macro addruart,rx diff -Nru a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S --- a/arch/arm/kernel/entry-armv.S Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/entry-armv.S Tue May 18 23:38:06 2004 @@ -623,10 +623,15 @@ .endm .macro get_irqnr_and_base, irqnr, irqstat, base, tmp +#ifdef CONFIG_PXA27x + mrc p6, 0, \irqstat, c0, c0, 0 @ ICIP + mrc p6, 0, \irqnr, c1, c0, 0 @ ICMR +#else mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000 add \base, \base, #0x00d00000 ldr \irqstat, [\base, #0] @ ICIP ldr \irqnr, [\base, #4] @ ICMR +#endif ands \irqnr, \irqstat, \irqnr beq 1001f rsb \irqstat, \irqnr, #0 @@ -639,6 +644,34 @@ .macro irq_prio_table .endm +#elif defined (CONFIG_ARCH_IXP4XX) + + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) + ldr \irqstat, [\irqstat] @ get interrupts + cmp \irqstat, #0 + beq 1002f + clz \irqnr, \irqstat + mov \base, #31 + subs \irqnr, \base, \irqnr + +/* +1001: tst \irqstat, #1 + addeq \irqnr, \irqnr, #1 + moveq \irqstat, \irqstat, lsr #1 + tsteq \irqnr, #32 + beq 1001b + teq \irqnr, #32 +*/ +1002: + .endm + + .macro irq_prio_table + .endm + #elif defined(CONFIG_ARCH_OMAP) .macro disable_fiq @@ -1219,7 +1252,7 @@ /* * Register switch for ARMv3 and ARMv4 processors - * r0 = previous thread_info, r1 = next thread_info + * r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info * previous and next are guaranteed not to be the same. */ ENTRY(__switch_to) diff -Nru a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c --- a/arch/arm/kernel/irq.c Tue May 18 23:38:05 2004 +++ b/arch/arm/kernel/irq.c Tue May 18 23:38:05 2004 @@ -47,7 +47,7 @@ #define MAX_IRQ_CNT 100000 static volatile unsigned long irq_err_count; -static spinlock_t irq_controller_lock; +static spinlock_t irq_controller_lock = SPIN_LOCK_UNLOCKED; static LIST_HEAD(irq_pending); struct irqdesc irq_desc[NR_IRQS]; @@ -103,6 +103,7 @@ list_del_init(&desc->pend); spin_unlock_irqrestore(&irq_controller_lock, flags); } +EXPORT_SYMBOL(disable_irq); /** * enable_irq - enable interrupt handling on an irq @@ -142,6 +143,7 @@ } spin_unlock_irqrestore(&irq_controller_lock, flags); } +EXPORT_SYMBOL(enable_irq); /* * Enable wake on selected irq @@ -156,6 +158,7 @@ desc->chip->wake(irq, 1); spin_unlock_irqrestore(&irq_controller_lock, flags); } +EXPORT_SYMBOL(enable_irq_wake); void disable_irq_wake(unsigned int irq) { @@ -167,6 +170,7 @@ desc->chip->wake(irq, 0); spin_unlock_irqrestore(&irq_controller_lock, flags); } +EXPORT_SYMBOL(disable_irq_wake); int show_interrupts(struct seq_file *p, void *v) { @@ -541,6 +545,7 @@ return ret; } +EXPORT_SYMBOL(set_irq_type); void set_irq_flags(unsigned int irq, unsigned int iflags) { @@ -798,6 +803,7 @@ return mask; } +EXPORT_SYMBOL(probe_irq_mask); /* * Possible return values: diff -Nru a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c --- a/arch/arm/kernel/process.c Tue May 18 23:38:09 2004 +++ b/arch/arm/kernel/process.c Tue May 18 23:38:09 2004 @@ -73,7 +73,10 @@ * The following aren't currently used. */ void (*pm_idle)(void); +EXPORT_SYMBOL(pm_idle); + void (*pm_power_off)(void); +EXPORT_SYMBOL(pm_power_off); /* * This is our default idle handler. We need to disable @@ -301,6 +304,7 @@ } void (*fp_init)(union fp_state *) = default_fp_init; +EXPORT_SYMBOL(fp_init); void flush_thread(void) { @@ -350,6 +354,7 @@ return used_math != 0; } +EXPORT_SYMBOL(dump_fpu); /* * fill in the user structure for a core dump.. @@ -378,6 +383,7 @@ dump->regs = *regs; dump->u_fpvalid = dump_fpu (regs, &dump->u_fp); } +EXPORT_SYMBOL(dump_thread); /* * Shuffle the argument into the correct register before calling the @@ -385,13 +391,15 @@ * the thread function, and r3 points to the exit function. */ extern void kernel_thread_helper(void); -asm( ".align\n" +asm( ".section .text\n" +" .align\n" " .type kernel_thread_helper, #function\n" "kernel_thread_helper:\n" " mov r0, r1\n" " mov lr, r3\n" " mov pc, r2\n" -" .size kernel_thread_helper, . - kernel_thread_helper"); +" .size kernel_thread_helper, . - kernel_thread_helper\n" +" .previous"); /* * Create a kernel thread. @@ -410,12 +418,7 @@ return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); } - -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) +EXPORT_SYMBOL(kernel_thread); unsigned long get_wchan(struct task_struct *p) { @@ -431,9 +434,10 @@ if (fp < stack_page || fp > 4092+stack_page) return 0; lr = pc_pointer (((unsigned long *)fp)[-1]); - if (lr < first_sched || lr > last_sched) + if (!in_sched_functions(lr)) return lr; fp = *(unsigned long *) (fp - 12); } while (count ++ < 16); return 0; } +EXPORT_SYMBOL(get_wchan); diff -Nru a/arch/arm/kernel/semaphore.c b/arch/arm/kernel/semaphore.c --- a/arch/arm/kernel/semaphore.c Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/semaphore.c Tue May 18 23:38:06 2004 @@ -11,6 +11,7 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ +#include #include #include #include @@ -213,3 +214,7 @@ ldmfd sp!, {r0 - r3, pc} \n\ "); +EXPORT_SYMBOL_NOVERS(__down_failed); +EXPORT_SYMBOL_NOVERS(__down_interruptible_failed); +EXPORT_SYMBOL_NOVERS(__down_trylock_failed); +EXPORT_SYMBOL_NOVERS(__up_wakeup); diff -Nru a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c --- a/arch/arm/kernel/setup.c Tue May 18 23:38:07 2004 +++ b/arch/arm/kernel/setup.c Tue May 18 23:38:07 2004 @@ -8,6 +8,7 @@ * published by the Free Software Foundation. */ #include +#include #include #include #include @@ -61,10 +62,20 @@ unsigned int processor_id; unsigned int __machine_arch_type; +EXPORT_SYMBOL(__machine_arch_type); + unsigned int system_rev; +EXPORT_SYMBOL(system_rev); + unsigned int system_serial_low; +EXPORT_SYMBOL(system_serial_low); + unsigned int system_serial_high; +EXPORT_SYMBOL(system_serial_high); + unsigned int elf_hwcap; +EXPORT_SYMBOL(elf_hwcap); + #ifdef MULTI_CPU struct processor processor; @@ -80,7 +91,10 @@ #endif unsigned char aux_device_present; + char elf_platform[ELF_PLATFORM_SIZE]; +EXPORT_SYMBOL(elf_platform); + char saved_command_line[COMMAND_LINE_SIZE]; unsigned long phys_initrd_start __initdata = 0; unsigned long phys_initrd_size __initdata = 0; diff -Nru a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c --- a/arch/arm/kernel/sys_arm.c Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/sys_arm.c Tue May 18 23:38:06 2004 @@ -12,6 +12,7 @@ * have a non-standard calling sequence on the Linux/arm * platform. */ +#include #include #include #include @@ -282,3 +283,43 @@ out: return error; } + +long execve(const char *filename, char **argv, char **envp) +{ + struct pt_regs regs; + int ret; + + memset(®s, 0, sizeof(struct pt_regs)); + ret = do_execve((char *)filename, (char __user * __user *)argv, + (char __user * __user *)envp, ®s); + if (ret < 0) + goto out; + + /* + * Save argc to the register structure for userspace. + */ + regs.ARM_r0 = ret; + + /* + * We were successful. We won't be returning to our caller, but + * instead to user space by manipulating the kernel stack. + */ + asm( "add r0, %0, %1\n\t" + "mov r1, %2\n\t" + "mov r2, %3\n\t" + "bl memmove\n\t" /* copy regs to top of stack */ + "mov r8, #0\n\t" /* not a syscall */ + "mov r9, %0\n\t" /* thread structure */ + "mov sp, r0\n\t" /* reposition stack pointer */ + "b ret_to_user" + : + : "r" (current_thread_info()), + "Ir" (THREAD_SIZE - 8 - sizeof(regs)), + "r" (®s), + "Ir" (sizeof(regs)) + : "r0", "r1", "r2", "r3", "ip", "memory"); + + out: + return ret; +} +EXPORT_SYMBOL(execve); diff -Nru a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c --- a/arch/arm/kernel/traps.c Tue May 18 23:38:06 2004 +++ b/arch/arm/kernel/traps.c Tue May 18 23:38:06 2004 @@ -495,6 +495,7 @@ __builtin_return_address(0), ptr, size); BUG(); } +EXPORT_SYMBOL(__bad_xchg); /* * A data abort trap was taken, but we did not handle the instruction. @@ -532,12 +533,14 @@ printk("\n"); *(int *)0 = 0; } +EXPORT_SYMBOL(__bug); void __readwrite_bug(const char *fn) { printk("%s called, but not implemented", fn); BUG(); } +EXPORT_SYMBOL(__readwrite_bug); void __pte_error(const char *file, int line, unsigned long val) { @@ -559,6 +562,7 @@ printk("Division by zero in kernel.\n"); dump_stack(); } +EXPORT_SYMBOL_NOVERS(__div0); void abort(void) { @@ -567,6 +571,7 @@ /* if that doesn't kill us, halt */ panic("Oops failed to kill thread"); } +EXPORT_SYMBOL(abort); void __init trap_init(void) { diff -Nru a/arch/arm/mach-footbridge/mm.c b/arch/arm/mach-footbridge/mm.c --- a/arch/arm/mach-footbridge/mm.c Tue May 18 23:38:08 2004 +++ b/arch/arm/mach-footbridge/mm.c Tue May 18 23:38:08 2004 @@ -87,6 +87,7 @@ return (res - PAGE_OFFSET) + (*CSR_PCISDRAMBASE & 0xfffffff0); } +EXPORT_SYMBOL(__virt_to_bus); unsigned long __bus_to_virt(unsigned long res) { @@ -97,5 +98,6 @@ return res; } +EXPORT_SYMBOL(__bus_to_virt); #endif diff -Nru a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/Kconfig Tue May 18 23:38:09 2004 @@ -0,0 +1,89 @@ + +config ARCH_SUPPORTS_BIG_ENDIAN + bool + depends on ARCH_IXP4XX + default y + +menu "Intel IXP4xx Implementation Options" + +comment "IXP4xx Platforms" + +config ARCH_AVILA + bool "Avila" + depends on ARCH_IXP4XX + help + Say 'Y' here if you want your kernel to support the Gateworks + Avila Network Platform. For more information on this platform, + see Documentation/arm/IXP4xx. + +config ARCH_ADI_COYOTE + bool "Coyote" + depends on ARCH_IXP4XX + help + Say 'Y' here if you want your kernel to support the ADI + Engineering Coyote Gateway Reference Platform. For more + information on this platform, see Documentation/arm/IXP4xx. + +config ARCH_IXDP425 + bool "IXDP425" + depends on ARCH_IXP4XX + help + Say 'Y' here if you want your kernel to support Intel's + IXDP425 Development Platform (Also known as Richfield). + For more information on this platform, see Documentation/arm/IXP4xx. + +# +# IXCDP1100 is the exact same HW as IXDP425, but with a different machine +# number from the bootloader due to marketing monkeys, so we just enable it +# by default if IXDP425 is enabled. +# +config ARCH_IXCDP1100 + bool + depends on ARCH_IXDP425 + default y + +config ARCH_PRPMC1100 + bool "PrPMC1100" + depends on ARCH_IXP4XX + help + Say 'Y' here if you want your kernel to support the Motorola + PrPCM1100 Processor Mezanine Module. For more information on + this platform, see Documentation/arm/IXP4xx. + +# +# Avila and IXDP share the same source for now. Will change in future +# +config ARCH_IXDP4XX + bool + depends on ARCH_IXDP425 || ARCH_AVILA + default y + +comment "IXP4xx Options" + +config IXP4XX_INDIRECT_PCI + bool "Use indirect PCI memory access" + depends on ARCH_IXP4XX + help + IXP4xx provides two methods of accessing PCI memory space: + + 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). + To access PCI via this space, we simply ioremap() the BAR + into the kernel and we can use the standard read[bwl]/write[bwl] + macros. This is the preffered method due to speed but it + limits the system to just 64MB of PCI memory. This can be + problamatic if using video cards and other memory-heavy devices. + + 2) If > 64MB of memory space is required, the IXP4xx can be + configured to use indirect registers to access PCI This allows + for up to 128MB (0x48000000 to 0x4fffffff) of memory on the bus. + The disadvantadge of this is that every PCI access requires + three local register accesses plus a spinlock, but in some + cases the performance hit is acceptable. In addition, you cannot + mmap() PCI devices in this case due to the indirect nature + of the PCI window. + + By default, the direct method is used. Choose this option if you + need to use the indirect method instead. If you don't know + what you need, leave this option unselected. + +endmenu diff -Nru a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/Makefile Tue May 18 23:38:09 2004 @@ -0,0 +1,10 @@ +# +# Makefile for the linux kernel. +# + +obj-y += common.o common-pci.o + +obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o ixdp425-setup.o +obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o +obj-$(CONFIG_ARCH_PRPMC1100) += prpmc1100-pci.o prpmc1100-setup.o + diff -Nru a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/common-pci.c Tue May 18 23:38:09 2004 @@ -0,0 +1,543 @@ +/* + * arch/arm/mach-ixp4xx/common-pci.c + * + * IXP4XX PCI routines for all platforms + * + * Maintainer: Deepak Saxena + * + * Copyright (C) 2002 Intel Corporation. + * Copyright (C) 2003 Greg Ungerer + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +/* + * IXP4xx PCI read function is dependent on whether we are + * running A0 or B0 (AppleGate) silicon. + */ +int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data); + +/* + * Base address for PCI regsiter region + */ +unsigned long ixp4xx_pci_reg_base = 0; + +/* + * PCI cfg an I/O routines are done by programming a + * command/byte enable register, and then read/writing + * the data from a data regsiter. We need to ensure + * these transactions are atomic or we will end up + * with corrupt data on the bus or in a driver. + */ +static spinlock_t ixp4xx_pci_lock = SPIN_LOCK_UNLOCKED; + +/* + * Read from PCI config space + */ +static void crp_read(u32 ad_cbe, u32 *data) +{ + unsigned long flags; + spin_lock_irqsave(&ixp4xx_pci_lock, flags); + *PCI_CRP_AD_CBE = ad_cbe; + *data = *PCI_CRP_RDATA; + spin_unlock_irqrestore(&ixp4xx_pci_lock, flags); +} + +/* + * Write to PCI config space + */ +static void crp_write(u32 ad_cbe, u32 data) +{ + unsigned long flags; + spin_lock_irqsave(&ixp4xx_pci_lock, flags); + *PCI_CRP_AD_CBE = CRP_AD_CBE_WRITE | ad_cbe; + *PCI_CRP_WDATA = data; + spin_unlock_irqrestore(&ixp4xx_pci_lock, flags); +} + +static inline int check_master_abort(void) +{ + /* check Master Abort bit after access */ + unsigned long isr = *PCI_ISR; + + if (isr & PCI_ISR_PFE) { + /* make sure the Master Abort bit is reset */ + *PCI_ISR = PCI_ISR_PFE; + pr_debug("%s failed\n", __FUNCTION__); + return 1; + } + + return 0; +} + +int ixp4xx_pci_read_errata(u32 addr, u32 cmd, u32* data) +{ + unsigned long flags; + int retval = 0; + int i; + + spin_lock_irqsave(&ixp4xx_pci_lock, flags); + + *PCI_NP_AD = addr; + + /* + * PCI workaround - only works if NP PCI space reads have + * no side effects!!! Read 8 times. last one will be good. + */ + for (i = 0; i < 8; i++) { + *PCI_NP_CBE = cmd; + *data = *PCI_NP_RDATA; + *data = *PCI_NP_RDATA; + } + + if(check_master_abort()) + retval = 1; + + spin_unlock_irqrestore(&ixp4xx_pci_lock, flags); + return retval; +} + +int ixp4xx_pci_read_no_errata(u32 addr, u32 cmd, u32* data) +{ + unsigned long flags; + int retval = 0; + + spin_lock_irqsave(&ixp4xx_pci_lock, flags); + + *PCI_NP_AD = addr; + + /* set up and execute the read */ + *PCI_NP_CBE = cmd; + + /* the result of the read is now in NP_RDATA */ + *data = *PCI_NP_RDATA; + + if(check_master_abort()) + retval = 1; + + spin_unlock_irqrestore(&ixp4xx_pci_lock, flags); + return retval; +} + +int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data) +{ + unsigned long flags; + int retval = 0; + + spin_lock_irqsave(&ixp4xx_pci_lock, flags); + + *PCI_NP_AD = addr; + + /* set up the write */ + *PCI_NP_CBE = cmd; + + /* execute the write by writing to NP_WDATA */ + *PCI_NP_WDATA = data; + + if(check_master_abort()) + retval = 1; + + spin_unlock_irqrestore(&ixp4xx_pci_lock, flags); + return retval; +} + +static u32 ixp4xx_config_addr(u8 bus_num, u16 devfn, int where) +{ + u32 addr; + if (!bus_num) { + /* type 0 */ + addr = BIT(32-PCI_SLOT(devfn)) | ((PCI_FUNC(devfn)) << 8) | + (where & ~3); + } else { + /* type 1 */ + addr = (bus_num << 16) | ((PCI_SLOT(devfn)) << 11) | + ((PCI_FUNC(devfn)) << 8) | (where & ~3) | 1; + } + return addr; +} + +/* + * Mask table, bits to mask for quantity of size 1, 2 or 4 bytes. + * 0 and 3 are not valid indexes... + */ +static u32 bytemask[] = { + /*0*/ 0, + /*1*/ 0xff, + /*2*/ 0xffff, + /*3*/ 0, + /*4*/ 0xffffffff, +}; + +static u32 local_byte_lane_enable_bits(u32 n, int size) +{ + if (size == 1) + return (0xf & ~BIT(n)) << CRP_AD_CBE_BESL; + if (size == 2) + return (0xf & ~(BIT(n) | BIT(n+1))) << CRP_AD_CBE_BESL; + if (size == 4) + return 0; + return 0xffffffff; +} + +static int local_read_config(int where, int size, u32 *value) +{ + u32 n, data; + pr_debug("local_read_config from %d size %d\n", where, size); + n = where % 4; + crp_read(where & ~3, &data); + *value = (data >> (8*n)) & bytemask[size]; + pr_debug("local_read_config read %#x\n", *value); + return PCIBIOS_SUCCESSFUL; +} + +static int local_write_config(int where, int size, u32 value) +{ + u32 n, byte_enables, data; + pr_debug("local_write_config %#x to %d size %d\n", value, where, size); + n = where % 4; + byte_enables = local_byte_lane_enable_bits(n, size); + if (byte_enables == 0xffffffff) + return PCIBIOS_BAD_REGISTER_NUMBER; + data = value << (8*n); + crp_write((where & ~3) | byte_enables, data); + return PCIBIOS_SUCCESSFUL; +} + +static u32 byte_lane_enable_bits(u32 n, int size) +{ + if (size == 1) + return (0xf & ~BIT(n)) << 4; + if (size == 2) + return (0xf & ~(BIT(n) | BIT(n+1))) << 4; + if (size == 4) + return 0; + return 0xffffffff; +} + +static int read_config(u8 bus_num, u16 devfn, int where, int size, u32 *value) +{ + u32 n, byte_enables, addr, data; + + pr_debug("read_config from %d size %d dev %d:%d:%d\n", where, size, + bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn)); + + *value = 0xffffffff; + n = where % 4; + byte_enables = byte_lane_enable_bits(n, size); + if (byte_enables == 0xffffffff) + return PCIBIOS_BAD_REGISTER_NUMBER; + + addr = ixp4xx_config_addr(bus_num, devfn, where); + if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_CONFIGREAD, &data)) + return PCIBIOS_DEVICE_NOT_FOUND; + + *value = (data >> (8*n)) & bytemask[size]; + pr_debug("read_config_byte read %#x\n", *value); + return PCIBIOS_SUCCESSFUL; +} + +static int write_config(u8 bus_num, u16 devfn, int where, int size, u32 value) +{ + u32 n, byte_enables, addr, data; + + pr_debug("write_config_byte %#x to %d size %d dev %d:%d:%d\n", value, where, + size, bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn)); + + n = where % 4; + byte_enables = byte_lane_enable_bits(n, size); + if (byte_enables == 0xffffffff) + return PCIBIOS_BAD_REGISTER_NUMBER; + + addr = ixp4xx_config_addr(bus_num, devfn, where); + data = value << (8*n); + if (ixp4xx_pci_write(addr, byte_enables | NP_CMD_CONFIGWRITE, data)) + return PCIBIOS_DEVICE_NOT_FOUND; + + return PCIBIOS_SUCCESSFUL; +} + +/* + * Generalized PCI config access functions. + */ +static int ixp4xx_read_config(struct pci_bus *bus, unsigned int devfn, + int where, int size, u32 *value) +{ + if (bus->number && !PCI_SLOT(devfn)) + return local_read_config(where, size, value); + return read_config(bus->number, devfn, where, size, value); +} + +static int ixp4xx_write_config(struct pci_bus *bus, unsigned int devfn, + int where, int size, u32 value) +{ + if (bus->number && !PCI_SLOT(devfn)) + return local_write_config(where, size, value); + return write_config(bus->number, devfn, where, size, value); +} + +struct pci_ops ixp4xx_ops = { + .read = ixp4xx_read_config, + .write = ixp4xx_write_config, +}; + + +/* + * PCI abort handler + */ +static int abort_handler(unsigned long addr, unsigned int fsr, struct pt_regs *regs) +{ + u32 isr, status; + + isr = *PCI_ISR; + local_read_config(PCI_STATUS, 2, &status); + pr_debug("PCI: abort_handler addr = %#lx, isr = %#x, " + "status = %#x\n", addr, isr, status); + + /* make sure the Master Abort bit is reset */ + *PCI_ISR = PCI_ISR_PFE; + status |= PCI_STATUS_REC_MASTER_ABORT; + local_write_config(PCI_STATUS, 2, status); + + /* + * If it was an imprecise abort, then we need to correct the + * return address to be _after_ the instruction. + */ + if (fsr & (1 << 10)) + regs->ARM_pc += 4; + + return 0; +} + + +/* + * Setup DMA mask to 64MB on PCI devices. Ignore all other devices. + */ +static int ixp4xx_pci_platform_notify(struct device *dev) +{ + if(dev->bus == &pci_bus_type) { + *dev->dma_mask = SZ_64M - 1; + dev->coherent_dma_mask = SZ_64M - 1; + dmabounce_register_dev(dev, 2048, 4096); + } + return 0; +} + +static int ixp4xx_pci_platform_notify_remove(struct device *dev) +{ + if(dev->bus == &pci_bus_type) { + dmabounce_unregister_dev(dev); + } + return 0; +} + +int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size) +{ + return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M); +} + +void __init ixp4xx_pci_preinit(void) +{ + unsigned long processor_id; + + asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); + + /* + * Determine which PCI read method to use + */ + if (!(processor_id & 0xf)) { + printk("PCI: IXP4xx A0 silicon detected - " + "PCI Non-Prefetch Workaround Enabled\n"); + ixp4xx_pci_read = ixp4xx_pci_read_errata; + } else + ixp4xx_pci_read = ixp4xx_pci_read_no_errata; + + + /* hook in our fault handler for PCI errors */ + hook_fault_code(16+6, abort_handler, SIGBUS, "imprecise external abort"); + + pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n"); + + /* + * We use identity AHB->PCI address translation + * in the 0x48000000 to 0x4bffffff address space + */ + *PCI_PCIMEMBASE = 0x48494A4B; + + /* + * We also use identity PCI->AHB address translation + * in 4 16MB BARs that begin at the physical memory start + */ + *PCI_AHBMEMBASE = (PHYS_OFFSET & 0xFF000000) + + ((PHYS_OFFSET & 0xFF000000) >> 8) + + ((PHYS_OFFSET & 0xFF000000) >> 16) + + ((PHYS_OFFSET & 0xFF000000) >> 24) + + 0x00010203; + + if (*PCI_CSR & PCI_CSR_HOST) { + printk("PCI: IXP4xx is host\n"); + + pr_debug("setup BARs in controller\n"); + + /* + * We configure the PCI inbound memory windows to be + * 1:1 mapped to SDRAM + */ + local_write_config(PCI_BASE_ADDRESS_0, 4, PHYS_OFFSET + 0x00000000); + local_write_config(PCI_BASE_ADDRESS_1, 4, PHYS_OFFSET + 0x01000000); + local_write_config(PCI_BASE_ADDRESS_2, 4, PHYS_OFFSET + 0x02000000); + local_write_config(PCI_BASE_ADDRESS_3, 4, PHYS_OFFSET + 0x03000000); + + /* + * Enable CSR window at 0xff000000. + */ + local_write_config(PCI_BASE_ADDRESS_4, 4, 0xff000008); + + /* + * Enable the IO window to be way up high, at 0xfffffc00 + */ + local_write_config(PCI_BASE_ADDRESS_5, 4, 0xfffffc01); + } else { + printk("PCI: IXP4xx is target - No bus scan performed\n"); + } + + printk("PCI: IXP4xx Using %s access for memory space\n", +#ifndef CONFIG_IXP4XX_INDIRECT_PCI + "direct" +#else + "indirect" +#endif + ); + + pr_debug("clear error bits in ISR\n"); + *PCI_ISR = PCI_ISR_PSE | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE; + + /* + * Set Initialize Complete in PCI Control Register: allow IXP4XX to + * respond to PCI configuration cycles. Specify that the AHB bus is + * operating in big endian mode. Set up byte lane swapping between + * little-endian PCI and the big-endian AHB bus + */ +#ifdef __ARMEB__ + *PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; +#else + *PCI_CSR = PCI_CSR_IC; +#endif + + pr_debug("DONE\n"); +} + +int ixp4xx_setup(int nr, struct pci_sys_data *sys) +{ + struct resource *res; + + if (nr >= 1) + return 0; + + res = kmalloc(sizeof(*res) * 2, GFP_KERNEL); + if (res == NULL) { + /* + * If we're out of memory this early, something is wrong, + * so we might as well catch it here. + */ + panic("PCI: unable to allocate resources?\n"); + } + memset(res, 0, sizeof(*res) * 2); + + local_write_config(PCI_COMMAND, 2, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY); + + res[0].name = "PCI I/O Space"; + res[0].start = 0x00001000; + res[0].end = 0xffff0000; + res[0].flags = IORESOURCE_IO; + + res[1].name = "PCI Memory Space"; + res[1].start = 0x48000000; +#ifndef CONFIG_IXP4XX_INDIRECT_PCI + res[1].end = 0x4bffffff; +#else + res[1].end = 0x4fffffff; +#endif + res[1].flags = IORESOURCE_MEM; + + request_resource(&ioport_resource, &res[0]); + request_resource(&iomem_resource, &res[1]); + + sys->resource[0] = &res[0]; + sys->resource[1] = &res[1]; + sys->resource[2] = NULL; + + platform_notify = ixp4xx_pci_platform_notify; + platform_notify_remove = ixp4xx_pci_platform_notify_remove; + + return 1; +} + +struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys) +{ + return pci_scan_bus(sys->busnr, &ixp4xx_ops, sys); +} + +/* + * We override these so we properly do dmabounce otherwise drivers + * are able to set the dma_mask to 0xffffffff and we can no longer + * trap bounces. :( + * + * We just return true on everyhing except for < 64MB in which case + * we will fail miseralby and die since we can't handle that case. + */ +int +pci_set_dma_mask(struct pci_dev *dev, u64 mask) +{ + if (mask >= SZ_64M - 1 ) + return 0; + + return -EIO; +} + +int +pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) +{ + if (mask >= SZ_64M - 1 ) + return 0; + + return -EIO; +} + +int +pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) +{ + if (mask >= SZ_64M - 1 ) + return 0; + + return -EIO; +} + +EXPORT_SYMBOL(pci_set_dma_mask); +EXPORT_SYMBOL(pci_dac_set_dma_mask); +EXPORT_SYMBOL(pci_set_consistent_dma_mask); + diff -Nru a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/common.c Tue May 18 23:38:09 2004 @@ -0,0 +1,264 @@ +/* + * arch/arm/mach-ixp4xx/common.c + * + * Generic code shared across all IXP4XX platforms + * + * Maintainer: Deepak Saxena + * + * Copyright 2002 (c) Intel Corporation + * Copyright 2003-2004 (c) MontaVista, Software, Inc. + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + + +/************************************************************************* + * GPIO acces functions + *************************************************************************/ + +/* + * Configure GPIO line for input, interrupt, or output operation + * + * TODO: Enable/disable the irq_desc based on interrupt or output mode. + * TODO: Should these be named ixp4xx_gpio_? + */ +void gpio_line_config(u8 line, u32 style) +{ + u32 enable; + volatile u32 *int_reg; + u32 int_style; + + enable = *IXP4XX_GPIO_GPOER; + + if (style & IXP4XX_GPIO_OUT) { + enable &= ~((1) << line); + } else if (style & IXP4XX_GPIO_IN) { + enable |= ((1) << line); + + switch (style & IXP4XX_GPIO_INTSTYLE_MASK) + { + case (IXP4XX_GPIO_ACTIVE_HIGH): + int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; + break; + case (IXP4XX_GPIO_ACTIVE_LOW): + int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; + break; + case (IXP4XX_GPIO_RISING_EDGE): + int_style = IXP4XX_GPIO_STYLE_RISING_EDGE; + break; + case (IXP4XX_GPIO_FALLING_EDGE): + int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE; + break; + case (IXP4XX_GPIO_TRANSITIONAL): + int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL; + break; + default: + int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH; + break; + } + + if (line >= 8) { /* pins 8-15 */ + line -= 8; + int_reg = IXP4XX_GPIO_GPIT2R; + } + else { /* pins 0-7 */ + int_reg = IXP4XX_GPIO_GPIT1R; + } + + /* Clear the style for the appropriate pin */ + *int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR << + (line * IXP4XX_GPIO_STYLE_SIZE)); + + /* Set the new style */ + *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); + } + + *IXP4XX_GPIO_GPOER = enable; +} + +EXPORT_SYMBOL(gpio_line_config); + +/************************************************************************* + * IXP4xx chipset I/O mapping + *************************************************************************/ +static struct map_desc ixp4xx_io_desc[] __initdata = { + { /* UART, Interrupt ctrl, GPIO, timers, NPEs, MACs, USB .... */ + .virtual = IXP4XX_PERIPHERAL_BASE_VIRT, + .physical = IXP4XX_PERIPHERAL_BASE_PHYS, + .length = IXP4XX_PERIPHERAL_REGION_SIZE, + .type = MT_DEVICE + }, { /* Expansion Bus Config Registers */ + .virtual = IXP4XX_EXP_CFG_BASE_VIRT, + .physical = IXP4XX_EXP_CFG_BASE_PHYS, + .length = IXP4XX_EXP_CFG_REGION_SIZE, + .type = MT_DEVICE + }, { /* PCI Registers */ + .virtual = IXP4XX_PCI_CFG_BASE_VIRT, + .physical = IXP4XX_PCI_CFG_BASE_PHYS, + .length = IXP4XX_PCI_CFG_REGION_SIZE, + .type = MT_DEVICE + } +}; + +void __init ixp4xx_map_io(void) +{ + iotable_init(ixp4xx_io_desc, ARRAY_SIZE(ixp4xx_io_desc)); +} + + +/************************************************************************* + * IXP4xx chipset IRQ handling + * + * TODO: GPIO IRQs should be marked invalid until the user of the IRQ + * (be it PCI or something else) configures that GPIO line + * as an IRQ. Also, we should use a different chip structure for + * level-based GPIO vs edge-based GPIO. Currently nobody needs this as + * all HW that's publically available uses level IRQs, so we'll + * worry about it if/when we have HW to test. + **************************************************************************/ +static void ixp4xx_irq_mask(unsigned int irq) +{ + *IXP4XX_ICMR &= ~(1 << irq); +} + +static void ixp4xx_irq_mask_ack(unsigned int irq) +{ + ixp4xx_irq_mask(irq); +} + +static void ixp4xx_irq_unmask(unsigned int irq) +{ + static int irq2gpio[NR_IRQS] = { + -1, -1, -1, -1, -1, -1, 0, 1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, -1, -1, + }; + int line = irq2gpio[irq]; + + /* + * This only works for LEVEL gpio IRQs as per the IXP4xx developer's + * manual. If edge-triggered, need to move it to the mask_ack. + * Nobody seems to be using the edge-triggered mode on the GPIOs. + */ + if (line >= 0) + gpio_line_isr_clear(line); + + *IXP4XX_ICMR |= (1 << irq); +} + +static struct irqchip ixp4xx_irq_chip = { + .ack = ixp4xx_irq_mask_ack, + .mask = ixp4xx_irq_mask, + .unmask = ixp4xx_irq_unmask, +}; + +void __init ixp4xx_init_irq(void) +{ + int i = 0; + + /* Route all sources to IRQ instead of FIQ */ + *IXP4XX_ICLR = 0x0; + + /* Disable all interrupt */ + *IXP4XX_ICMR = 0x0; + + for(i = 0; i < NR_IRQS; i++) + { + set_irq_chip(i, &ixp4xx_irq_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID); + } +} + + +/************************************************************************* + * IXP4xx timer tick + * We use OS timer1 on the CPU for the timer tick and the timestamp + * counter as a source of real clock ticks to account for missed jiffies. + *************************************************************************/ + +static unsigned volatile last_jiffy_time; + +#define CLOCK_TICKS_PER_USEC (CLOCK_TICK_RATE / USEC_PER_SEC) + +/* IRQs are disabled before entering here from do_gettimeofday() */ +static unsigned long ixp4xx_gettimeoffset(void) +{ + u32 elapsed; + + elapsed = *IXP4XX_OSTS - last_jiffy_time; + + return elapsed / CLOCK_TICKS_PER_USEC; +} + +static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + /* Clear Pending Interrupt by writing '1' to it */ + *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND; + + /* + * Catch up with the real idea of time + */ + do { + do_timer(regs); + last_jiffy_time += LATCH; + } while((*IXP4XX_OSTS - last_jiffy_time) > LATCH); + + return IRQ_HANDLED; +} + +extern unsigned long (*gettimeoffset)(void); + +static struct irqaction timer_irq = { + .name = "IXP4xx Timer Tick", + .flags = SA_INTERRUPT +}; + +void __init time_init(void) +{ + gettimeoffset = ixp4xx_gettimeoffset; + timer_irq.handler = ixp4xx_timer_interrupt; + + /* Clear Pending Interrupt by writing '1' to it */ + *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND; + + /* Setup the Timer counter value */ + *IXP4XX_OSRT1 = (LATCH & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE; + + /* Reset time-stamp counter */ + *IXP4XX_OSTS = 0; + last_jiffy_time = 0; + + /* Connect the interrupt handler and enable the interrupt */ + setup_irq(IRQ_IXP4XX_TIMER1, &timer_irq); +} + + diff -Nru a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/coyote-pci.c Tue May 18 23:38:09 2004 @@ -0,0 +1,69 @@ +/* + * arch/arch/mach-ixp4xx/coyote-pci.c + * + * PCI setup routines for ADI Engineering Coyote platform + * + * Copyright (C) 2002 Jungo Software Technologies. + * Copyright (C) 2003 MontaVista Softwrae, Inc. + * + * Maintainer: Deepak Saxena + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include + +#include +#include +#include + +#include + +extern void ixp4xx_pci_preinit(void); +extern int ixp4xx_setup(int nr, struct pci_sys_data *sys); +extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys); + +void __init coyote_pci_preinit(void) +{ + gpio_line_config(COYOTE_PCI_SLOT0_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + + gpio_line_config(COYOTE_PCI_SLOT1_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + + gpio_line_isr_clear(COYOTE_PCI_SLOT0_PIN); + gpio_line_isr_clear(COYOTE_PCI_SLOT1_PIN); + + ixp4xx_pci_preinit(); +} + +static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + if (slot == COYOTE_PCI_SLOT0_DEVID) + return IRQ_COYOTE_PCI_SLOT0; + else if (slot == COYOTE_PCI_SLOT1_DEVID) + return IRQ_COYOTE_PCI_SLOT1; + else return -1; +} + +struct hw_pci coyote_pci __initdata = { + .nr_controllers = 1, + .preinit = coyote_pci_preinit, + .swizzle = pci_std_swizzle, + .setup = ixp4xx_setup, + .scan = ixp4xx_scan_bus, + .map_irq = coyote_map_irq, +}; + +int __init coyote_pci_init(void) +{ + if (machine_is_adi_coyote()) + pci_common_init(&coyote_pci); + return 0; +} + +subsys_initcall(coyote_pci_init); diff -Nru a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/coyote-setup.c Tue May 18 23:38:09 2004 @@ -0,0 +1,90 @@ +/* + * arch/arm/mach-ixp4xx/coyote-setup.c + * + * ADI Engineering Coyote board-setup + * + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Author: Deepak Saxena + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __ARMEB__ +#define REG_OFFSET 3 +#else +#define REG_OFFSET 0 +#endif + +/* + * Only one serial port is connected on the Coyote. + */ +static struct uart_port coyote_serial_port = { + .membase = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART2_BASE_PHYS), + .irq = IRQ_IXP4XX_UART2, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 0, + .type = PORT_XSCALE, + .fifosize = 32 +}; + +void __init coyote_map_io(void) +{ + early_serial_setup(&coyote_serial_port); + + ixp4xx_map_io(); +} + +static struct flash_platform_data coyote_flash_data = { + .map_name = "cfi_probe", + .width = 2, +}; + +static struct resource coyote_flash_resource = { + .start = COYOTE_FLASH_BASE, + .end = COYOTE_FLASH_BASE + COYOTE_FLASH_SIZE, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device coyote_flash_device = { + .name = "IXP4XX-Flash", + .id = 0, + .dev = { + .platform_data = &coyote_flash_data, + }, + .num_resources = 1, + .resource = &coyote_flash_resource, +}; + +static void __init coyote_init(void) +{ + platform_add_device(&coyote_flash_device); +} + +MACHINE_START(ADI_COYOTE, "ADI Engineering IXP4XX Coyote Development Platform") + MAINTAINER("MontaVista Software, Inc.") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(coyote_map_io) + INITIRQ(ixp4xx_init_irq) + BOOT_PARAMS(0x0100) + INIT_MACHINE(coyote_init) +MACHINE_END + diff -Nru a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c Tue May 18 23:38:09 2004 @@ -0,0 +1,84 @@ +/* + * arch/arm/mach-ixp4xx/ixdp425-pci.c + * + * IXDP425 board-level PCI initialization + * + * Copyright (C) 2002 Intel Corporation. + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Maintainer: Deepak Saxena + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +void __init ixdp425_pci_preinit(void) +{ + gpio_line_config(IXDP425_PCI_INTA_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(IXDP425_PCI_INTB_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(IXDP425_PCI_INTC_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(IXDP425_PCI_INTD_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + + gpio_line_isr_clear(IXDP425_PCI_INTA_PIN); + gpio_line_isr_clear(IXDP425_PCI_INTB_PIN); + gpio_line_isr_clear(IXDP425_PCI_INTC_PIN); + gpio_line_isr_clear(IXDP425_PCI_INTD_PIN); + + ixp4xx_pci_preinit(); +} + +static int __init ixdp425_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + static int pci_irq_table[IXDP425_PCI_IRQ_LINES] = { + IRQ_IXDP425_PCI_INTA, + IRQ_IXDP425_PCI_INTB, + IRQ_IXDP425_PCI_INTC, + IRQ_IXDP425_PCI_INTD + }; + + int irq = -1; + + if (slot >= 1 && slot <= IXDP425_PCI_MAX_DEV && + pin >= 1 && pin <= IXDP425_PCI_IRQ_LINES) { + irq = pci_irq_table[(slot + pin - 2) % 4]; + } + + return irq; +} + +struct hw_pci ixdp425_pci __initdata = { + .nr_controllers = 1, + .preinit = ixdp425_pci_preinit, + .swizzle = pci_std_swizzle, + .setup = ixp4xx_setup, + .scan = ixp4xx_scan_bus, + .map_irq = ixdp425_map_irq, +}; + +int __init ixdp425_pci_init(void) +{ + if (machine_is_ixdp425() || + machine_is_ixcdp1100() || + machine_is_avila()) + pci_common_init(&ixdp425_pci); + return 0; +} + +subsys_initcall(ixdp425_pci_init); + diff -Nru a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c Tue May 18 23:38:09 2004 @@ -0,0 +1,147 @@ +/* + * arch/arm/mach-ixp4xx/ixdp425-setup.c + * + * IXDP425/IXCDP1100 board-setup + * + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Author: Deepak Saxena + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __ARMEB__ +#define REG_OFFSET 3 +#else +#define REG_OFFSET 0 +#endif + +/* + * IXDP425 uses both chipset serial ports + */ +static struct uart_port ixdp425_serial_ports[] = { + { + .membase = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART1_BASE_PHYS), + .irq = IRQ_IXP4XX_UART1, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 0, + .type = PORT_XSCALE, + .fifosize = 32 + } , { + .membase = (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART2_BASE_PHYS), + .irq = IRQ_IXP4XX_UART2, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 1, + .type = PORT_XSCALE, + .fifosize = 32 + } +}; + +void __init ixdp425_map_io(void) +{ + early_serial_setup(&ixdp425_serial_ports[0]); + early_serial_setup(&ixdp425_serial_ports[1]); + + ixp4xx_map_io(); +} + +static struct flash_platform_data ixdp425_flash_data = { + .map_name = "cfi_probe", + .width = 2, +}; + +static struct resource ixdp425_flash_resource = { + .start = IXDP425_FLASH_BASE, + .end = IXDP425_FLASH_BASE + IXDP425_FLASH_SIZE, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device ixdp425_flash_device = { + .name = "IXP4XX-Flash", + .id = 0, + .dev = { + .platform_data = &ixdp425_flash_data, + }, + .num_resources = 1, + .resource = &ixdp425_flash_resource, +}; + +static struct ixp4xx_i2c_pins ixdp425_i2c_gpio_pins = { + .sda_pin = IXDP425_SDA_PIN, + .scl_pin = IXDP425_SCL_PIN, +}; + +static struct platform_device ixdp425_i2c_controller = { + .name = "IXP4XX-I2C", + .id = 0, + .dev = { + .platform_data = &ixdp425_i2c_gpio_pins, + }, + .num_resources = 0 +}; + +static void __init ixdp425_init(void) +{ + platform_add_device(&ixdp425_flash_device); + platform_add_device(&ixdp425_i2c_controller); +} + +MACHINE_START(IXDP425, "Intel IXDP425 Development Platform") + MAINTAINER("MontaVista Software, Inc.") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(ixdp425_map_io) + INITIRQ(ixp4xx_init_irq) + BOOT_PARAMS(0x0100) + INIT_MACHINE(ixdp425_init) +MACHINE_END + +MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform") + MAINTAINER("MontaVista Software, Inc.") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(ixdp425_map_io) + INITIRQ(ixp4xx_init_irq) + BOOT_PARAMS(0x0100) + INIT_MACHINE(ixdp425_init) +MACHINE_END + +/* + * Avila is functionally equivalent to IXDP425 except that it adds + * a CF IDE slot hanging off the expansion bus. When we have a + * driver for IXP4xx CF IDE with driver model support we'll move + * Avila to it's own setup file. + */ +#ifdef CONFIG_ARCH_AVILA +MACHINE_START(AVILA, "Gateworks Avila Network Platform") + MAINTAINER("Deepak Saxena ") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(ixdp425_map_io) + INITIRQ(ixp4xx_init_irq) + BOOT_PARAMS(0x0100) + INIT_MACHINE(ixdp425_init) +MACHINE_END +#endif + diff -Nru a/arch/arm/mach-ixp4xx/prpmc1100-pci.c b/arch/arm/mach-ixp4xx/prpmc1100-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/prpmc1100-pci.c Tue May 18 23:38:09 2004 @@ -0,0 +1,119 @@ +/* + * arch/arm/mach-ixp4xx/prpmc1100-pci.c + * + * PrPMC1100 PCI initialization + * + * Copyright (C) 2003-2004 MontaVista Sofwtare, Inc. + * Based on IXDP425 code originally (C) Intel Corporation + * + * Author: Deepak Saxena + * + * PrPMC1100 PCI init code. GPIO usage is similar to that on + * IXDP425, but the IRQ routing is completely different and + * depends on what carrier you are using. This code is written + * to work on the Motorola PrPMC800 ATX carrier board. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include + +#include +#include +#include + +#include + + +void __init prpmc1100_pci_preinit(void) +{ + gpio_line_config(PRPMC1100_PCI_INTA_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(PRPMC1100_PCI_INTB_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(PRPMC1100_PCI_INTC_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + gpio_line_config(PRPMC1100_PCI_INTD_PIN, + IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW); + + gpio_line_isr_clear(PRPMC1100_PCI_INTA_PIN); + gpio_line_isr_clear(PRPMC1100_PCI_INTB_PIN); + gpio_line_isr_clear(PRPMC1100_PCI_INTC_PIN); + gpio_line_isr_clear(PRPMC1100_PCI_INTD_PIN); + + ixp4xx_pci_preinit(); +} + + +static int __init prpmc1100_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + int irq = -1; + + static int pci_irq_table[][4] = { + { /* IDSEL 16 - PMC A1 */ + IRQ_PRPMC1100_PCI_INTD, + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB, + IRQ_PRPMC1100_PCI_INTC + }, { /* IDSEL 17 - PRPMC-A-B */ + IRQ_PRPMC1100_PCI_INTD, + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB, + IRQ_PRPMC1100_PCI_INTC + }, { /* IDSEL 18 - PMC A1-B */ + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB, + IRQ_PRPMC1100_PCI_INTC, + IRQ_PRPMC1100_PCI_INTD + }, { /* IDSEL 19 - Unused */ + 0, 0, 0, 0 + }, { /* IDSEL 20 - P2P Bridge */ + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB, + IRQ_PRPMC1100_PCI_INTC, + IRQ_PRPMC1100_PCI_INTD + }, { /* IDSEL 21 - PMC A2 */ + IRQ_PRPMC1100_PCI_INTC, + IRQ_PRPMC1100_PCI_INTD, + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB + }, { /* IDSEL 22 - PMC A2-B */ + IRQ_PRPMC1100_PCI_INTD, + IRQ_PRPMC1100_PCI_INTA, + IRQ_PRPMC1100_PCI_INTB, + IRQ_PRPMC1100_PCI_INTC + }, + }; + + if (slot >= PRPMC1100_PCI_MIN_DEVID && slot <= PRPMC1100_PCI_MAX_DEVID + && pin >= 1 && pin <= PRPMC1100_PCI_IRQ_LINES) { + irq = pci_irq_table[slot - PRPMC1100_PCI_MIN_DEVID][pin - 1]; + } + + return irq; +} + + +struct hw_pci prpmc1100_pci __initdata = { + .nr_controllers = 1, + .preinit = prpmc1100_pci_preinit, + .swizzle = pci_std_swizzle, + .setup = ixp4xx_setup, + .scan = ixp4xx_scan_bus, + .map_irq = prpmc1100_map_irq, +}; + +int __init prpmc1100_pci_init(void) +{ + if (machine_is_prpmc1100()) + pci_common_init(&prpmc1100_pci); + return 0; +} + +subsys_initcall(prpmc1100_pci_init); + diff -Nru a/arch/arm/mach-ixp4xx/prpmc1100-setup.c b/arch/arm/mach-ixp4xx/prpmc1100-setup.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-ixp4xx/prpmc1100-setup.c Tue May 18 23:38:09 2004 @@ -0,0 +1,90 @@ +/* + * arch/arm/mach-ixp4xx/prpmc1100-setup.c + * + * Motorola PrPMC1100 board setup + * + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + * Author: Deepak Saxena + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __ARMEB__ +#define REG_OFFSET 3 +#else +#define REG_OFFSET 0 +#endif + +/* + * Only one serial port is connected on the PrPMC1100 + */ +static struct uart_port prpmc1100_serial_port = { + .membase = (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET), + .mapbase = (IXP4XX_UART1_BASE_PHYS), + .irq = IRQ_IXP4XX_UART1, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 2, + .uartclk = IXP4XX_UART_XTAL, + .line = 0, + .type = PORT_XSCALE, + .fifosize = 32 +}; + +void __init prpmc1100_map_io(void) +{ + early_serial_setup(&prpmc1100_serial_port); + + ixp4xx_map_io(); +} + +static struct flash_platform_data prpmc1100_flash_data = { + .map_name = "cfi_probe", + .width = 2, +}; + +static struct resource prpmc1100_flash_resource = { + .start = PRPMC1100_FLASH_BASE, + .end = PRPMC1100_FLASH_BASE + PRPMC1100_FLASH_SIZE, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device prpmc1100_flash_device = { + .name = "IXP4XX-Flash", + .id = 0, + .dev = { + .platform_data = &prpmc1100_flash_data, + }, + .num_resources = 1, + .resource = &prpmc1100_flash_resource, +}; + +static void __init prpmc1100_init(void) +{ + platform_add_device(&prpmc1100_flash_device); +} + +MACHINE_START(PRPMC1100, "Motorola PrPMC1100") + MAINTAINER("MontaVista Software, Inc.") + BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, + IXP4XX_PERIPHERAL_BASE_VIRT) + MAPIO(prpmc1100_map_io) + INITIRQ(ixp4xx_init_irq) + BOOT_PARAMS(0x0100) + INIT_MACHINE(prpmc1100_init) +MACHINE_END + diff -Nru a/arch/arm/mach-omap/innovator1510.c b/arch/arm/mach-omap/innovator1510.c --- a/arch/arm/mach-omap/innovator1510.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,99 +0,0 @@ -/* - * linux/arch/arm/mach-omap/innovator1510.c - * - * Board specific inits for OMAP-1510 Innovator - * - * Copyright (C) 2001 RidgeRun, Inc. - * Author: Greg Lonnon - * - * Copyright (C) 2002 MontaVista Software, Inc. - * - * Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6 - * Copyright (C) 2004 Nokia Corporation by Tony Lindrgen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include "common.h" - -extern int omap_gpio_init(void); - -void innovator_init_irq(void) -{ - omap_init_irq(); - omap_gpio_init(); - fpga_init_irq(); -} - -static struct resource smc91x_resources[] = { - [0] = { - .start = OMAP1510P1_FPGA_ETHR_START, /* Physical */ - .end = OMAP1510P1_FPGA_ETHR_START + 16, - .flags = IORESOURCE_MEM, - }, - [1] = { - .start = INT_ETHER, - .end = INT_ETHER, - .flags = IORESOURCE_IRQ, - }, -}; - -static struct platform_device smc91x_device = { - .name = "smc91x", - .id = 0, - .num_resources = ARRAY_SIZE(smc91x_resources), - .resource = smc91x_resources, -}; - -static struct platform_device *devices[] __initdata = { - &smc91x_device, -}; - -static void __init innovator_init(void) -{ - if (!machine_is_innovator()) - return; - - (void) platform_add_devices(devices, ARRAY_SIZE(devices)); -} - -/* Only FPGA needs to be mapped here. All others are done with ioremap */ -static struct map_desc innovator_io_desc[] __initdata = { -{ OMAP1510P1_FPGA_BASE, OMAP1510P1_FPGA_START, OMAP1510P1_FPGA_SIZE, - MT_DEVICE }, -}; - -static void __init innovator_map_io(void) -{ - omap_map_io(); - iotable_init(innovator_io_desc, ARRAY_SIZE(innovator_io_desc)); - - /* Dump the Innovator FPGA rev early - useful info for support. */ - printk("Innovator FPGA Rev %d.%d Board Rev %d\n", - fpga_read(OMAP1510P1_FPGA_REV_HIGH), - fpga_read(OMAP1510P1_FPGA_REV_LOW), - fpga_read(OMAP1510P1_FPGA_BOARD_REV)); -} - -MACHINE_START(INNOVATOR, "TI-Innovator/OMAP1510") - MAINTAINER("MontaVista Software, Inc.") - BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000) - BOOT_PARAMS(0x10000100) - MAPIO(innovator_map_io) - INITIRQ(innovator_init_irq) - INIT_MACHINE(innovator_init) -MACHINE_END diff -Nru a/arch/arm/mach-omap/innovator1610.c b/arch/arm/mach-omap/innovator1610.c --- a/arch/arm/mach-omap/innovator1610.c Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,91 +0,0 @@ -/* - * linux/arch/arm/mach-omap/innovator1610.c - * - * This file contains Innovator-specific code. - * - * Copyright (C) 2002 MontaVista Software, Inc. - * - * Copyright (C) 2001 RidgeRun, Inc. - * Author: Greg Lonnon - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "common.h" - -void -innovator_init_irq(void) -{ - omap_init_irq(); -} - -static struct resource smc91x_resources[] = { - [0] = { - .start = OMAP1610_ETHR_START, /* Physical */ - .end = OMAP1610_ETHR_START + SZ_4K, - .flags = IORESOURCE_MEM, - }, - [1] = { - .start = 0, /* Really GPIO 0 */ - .end = 0, - .flags = IORESOURCE_IRQ, - }, -}; - -static struct platform_device smc91x_device = { - .name = "smc91x", - .id = 0, - .num_resources = ARRAY_SIZE(smc91x_resources), - .resource = smc91x_resources, -}; - -static struct platform_device *devices[] __initdata = { - &smc91x_device, -}; - -static void __init innovator_init(void) -{ - if (!machine_is_innovator()) - return; - - (void) platform_add_devices(devices, ARRAY_SIZE(devices)); -} - -static struct map_desc innovator_io_desc[] __initdata = { -{ OMAP1610_ETHR_BASE, OMAP1610_ETHR_START, OMAP1610_ETHR_SIZE,MT_DEVICE }, -{ OMAP1610_NOR_FLASH_BASE, OMAP1610_NOR_FLASH_START, OMAP1610_NOR_FLASH_SIZE, - MT_DEVICE }, -}; - -static void __init innovator_map_io(void) -{ - omap_map_io(); - iotable_init(innovator_io_desc, ARRAY_SIZE(innovator_io_desc)); -} - -MACHINE_START(INNOVATOR, "TI-Innovator/OMAP1610") - MAINTAINER("MontaVista Software, Inc.") - BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000) - BOOT_PARAMS(0x10000100) - MAPIO(innovator_map_io) - INITIRQ(innovator_init_irq) - INIT_MACHINE(innovator_init) -MACHINE_END - diff -Nru a/arch/arm/mach-omap/omap-generic.c b/arch/arm/mach-omap/omap-generic.c --- a/arch/arm/mach-omap/omap-generic.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,77 +0,0 @@ -/* - * linux/arch/arm/mach-omap/generic.c - * - * Modified from innovator.c - * - * Code for generic OMAP board. Should work on many OMAP systems where - * the device drivers take care of all the necessary hardware initialization. - * Do not put any board specific code to this file; create a new machine - * type if you need custom low-level initializations. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include "common.h" - -static void __init omap_generic_init_irq(void) -{ - omap_init_irq(); -} - -/* - * Muxes the serial ports on - */ -static void __init omap_early_serial_init(void) -{ - omap_cfg_reg(UART1_TX); - omap_cfg_reg(UART1_RTS); - - omap_cfg_reg(UART2_TX); - omap_cfg_reg(UART2_RTS); - - omap_cfg_reg(UART3_TX); - omap_cfg_reg(UART3_RX); -} - -static void __init omap_generic_init(void) -{ - if (!machine_is_omap_generic()) - return; - - /* - * Make sure the serial ports are muxed on at this point. - * You have to mux them off in device drivers later on - * if not needed. - */ - if (cpu_is_omap1510()) { - omap_early_serial_init(); - } -} - -static void __init omap_generic_map_io(void) -{ - omap_map_io(); -} - -MACHINE_START(OMAP_GENERIC, "Generic OMAP-1510/1610") - MAINTAINER("Tony Lindgren ") - BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000) - BOOT_PARAMS(0x10000100) - MAPIO(omap_generic_map_io) - INITIRQ(omap_generic_init_irq) - INIT_MACHINE(omap_generic_init) -MACHINE_END diff -Nru a/arch/arm/mach-omap/omap-perseus2.c b/arch/arm/mach-omap/omap-perseus2.c --- a/arch/arm/mach-omap/omap-perseus2.c Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,116 +0,0 @@ -/* - * linux/arch/arm/mach-omap/omap-perseus2.c - * - * Modified from omap-generic.c - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "common.h" - -void omap_perseus2_init_irq(void) -{ - omap_init_irq(); -} - -static struct resource smc91x_resources[] = { - [0] = { - .start = OMAP730_FPGA_ETHR_START, /* Physical */ - .end = OMAP730_FPGA_ETHR_START + SZ_4K, - .flags = IORESOURCE_MEM, - }, - [1] = { - .start = 0, - .end = 0, - .flags = INT_ETHER, - }, -}; - -static struct platform_device smc91x_device = { - .name = "smc91x", - .id = 0, - .num_resources = ARRAY_SIZE(smc91x_resources), - .resource = smc91x_resources, -}; - -static struct platform_device *devices[] __initdata = { - &smc91x_device, -}; - -static void __init omap_perseus2_init(void) -{ - if (!machine_is_omap_perseus2()) - return; - - (void) platform_add_devices(devices, ARRAY_SIZE(devices)); -} - -/* Only FPGA needs to be mapped here. All others are done with ioremap */ -static struct map_desc omap_perseus2_io_desc[] __initdata = { - {OMAP730_FPGA_BASE, OMAP730_FPGA_START, OMAP730_FPGA_SIZE, - MT_DEVICE}, -}; - -static void __init omap_perseus2_map_io(void) -{ - omap_map_io(); - iotable_init(omap_perseus2_io_desc, - ARRAY_SIZE(omap_perseus2_io_desc)); - - /* Early, board-dependent init */ - - /* - * Hold GSM Reset until needed - */ - *DSP_M_CTL &= ~1; - - /* - * UARTs -> done automagically by 8250 driver - */ - - /* - * CSx timings, GPIO Mux ... setup - */ - - /* Flash: CS0 timings setup */ - *((volatile __u32 *) OMAP_FLASH_CFG_0) = 0x0000fff3; - *((volatile __u32 *) OMAP_FLASH_ACFG_0) = 0x00000088; - - /* - * Ethernet support trough the debug board - * CS1 timings setup - */ - *((volatile __u32 *) OMAP_FLASH_CFG_1) = 0x0000fff3; - *((volatile __u32 *) OMAP_FLASH_ACFG_1) = 0x00000000; - - /* - * Configure MPU_EXT_NIRQ IO in IO_CONF9 register, - * It is used as the Ethernet controller interrupt - */ - *((volatile __u32 *) PERSEUS2_IO_CONF_9) &= 0x1FFFFFFF; -} - -MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2") - MAINTAINER("Kevin Hilman ") - BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000) - BOOT_PARAMS(0x10000100) - MAPIO(omap_perseus2_map_io) - INITIRQ(omap_perseus2_init_irq) - INIT_MACHINE(omap_perseus2_init) -MACHINE_END diff -Nru a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig --- a/arch/arm/mach-pxa/Kconfig Tue May 18 23:38:06 2004 +++ b/arch/arm/mach-pxa/Kconfig Tue May 18 23:38:06 2004 @@ -1,13 +1,25 @@ -menu "Intel PXA250/210 Implementations" +menu "Intel PXA2xx Implementations" config ARCH_LUBBOCK bool "Intel DBPXA250 Development Platform" depends on ARCH_PXA + select PXA25x config ARCH_PXA_IDP bool "Accelent Xscale IDP" depends on ARCH_PXA + select PXA25x endmenu + +config PXA25x + bool + help + Select code specific to PXA21x/25x/26x variants + +config PXA27x + bool + help + Select code specific to PXA27x variants diff -Nru a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile --- a/arch/arm/mach-pxa/Makefile Tue May 18 23:38:07 2004 +++ b/arch/arm/mach-pxa/Makefile Tue May 18 23:38:07 2004 @@ -4,6 +4,8 @@ # Common support (must be linked before board specific support) obj-y += generic.o irq.o dma.o +obj-$(CONFIG_PXA25x) += pxa25x.o +obj-$(CONFIG_PXA27x) += pxa27x.o # Specific board support obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o diff -Nru a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c --- a/arch/arm/mach-pxa/dma.c Tue May 18 23:38:09 2004 +++ b/arch/arm/mach-pxa/dma.c Tue May 18 23:38:09 2004 @@ -28,7 +28,7 @@ char *name; void (*irq_handler)(int, void *, struct pt_regs *); void *data; -} dma_channels[16]; +} dma_channels[PXA_DMA_CHANNELS]; int pxa_request_dma (char *name, pxa_dma_prio prio, @@ -45,7 +45,7 @@ local_irq_save(flags); /* try grabbing a DMA channel with the requested priority */ - for (i = prio; i < prio + (prio == DMA_PRIO_LOW) ? 8 : 4; i++) { + for (i = prio; i < prio + PXA_DMA_NBCH(prio); i++) { if (!dma_channels[i].name) { found = 1; break; @@ -97,7 +97,7 @@ { int i, dint = DINT; - for (i = 0; i < 16; i++) { + for (i = 0; i < PXA_DMA_CHANNELS; i++) { if (dint & (1 << i)) { struct dma_channel *channel = &dma_channels[i]; if (channel->name && channel->irq_handler) { diff -Nru a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c --- a/arch/arm/mach-pxa/generic.c Tue May 18 23:38:06 2004 +++ b/arch/arm/mach-pxa/generic.c Tue May 18 23:38:06 2004 @@ -31,77 +31,11 @@ #include #include +#include #include "generic.h" /* - * Various clock factors driven by the CCCR register. - */ - -/* Crystal Frequency to Memory Frequency Multiplier (L) */ -static unsigned char L_clk_mult[32] = { 0, 27, 32, 36, 40, 45, 0, }; - -/* Memory Frequency to Run Mode Frequency Multiplier (M) */ -static unsigned char M_clk_mult[4] = { 0, 1, 2, 4 }; - -/* Run Mode Frequency to Turbo Mode Frequency Multiplier (N) */ -/* Note: we store the value N * 2 here. */ -static unsigned char N2_clk_mult[8] = { 0, 0, 2, 3, 4, 0, 6, 0 }; - -/* Crystal clock */ -#define BASE_CLK 3686400 - -/* - * Get the clock frequency as reflected by CCCR and the turbo flag. - * We assume these values have been applied via a fcs. - * If info is not 0 we also display the current settings. - */ -unsigned int get_clk_frequency_khz(int info) -{ - unsigned long cccr, turbo; - unsigned int l, L, m, M, n2, N; - - cccr = CCCR; - asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) ); - - l = L_clk_mult[(cccr >> 0) & 0x1f]; - m = M_clk_mult[(cccr >> 5) & 0x03]; - n2 = N2_clk_mult[(cccr >> 7) & 0x07]; - - L = l * BASE_CLK; - M = m * L; - N = n2 * M / 2; - - if(info) - { - L += 5000; - printk( KERN_INFO "Memory clock: %d.%02dMHz (*%d)\n", - L / 1000000, (L % 1000000) / 10000, l ); - M += 5000; - printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n", - M / 1000000, (M % 1000000) / 10000, m ); - N += 5000; - printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n", - N / 1000000, (N % 1000000) / 10000, n2 / 2, (n2 % 2) * 5, - (turbo & 1) ? "" : "in" ); - } - - return (turbo & 1) ? (N/1000) : (M/1000); -} - -EXPORT_SYMBOL(get_clk_frequency_khz); - -/* - * Return the current lclk requency in units of 10kHz - */ -unsigned int get_lclk_frequency_10khz(void) -{ - return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000; -} - -EXPORT_SYMBOL(get_lclk_frequency_10khz); - -/* * Handy function to set GPIO alternate functions */ @@ -125,16 +59,21 @@ EXPORT_SYMBOL(pxa_gpio_mode); /* - * Note that 0xfffe0000-0xffffffff is reserved for the vector table and - * cache flush area. + * Intel PXA2xx internal register mapping. + * + * Note 1: not all PXA2xx variants implement all those addresses. + * + * Note 2: virtual 0xfffe0000-0xffffffff is reserved for the vector table + * and cache flush area. */ static struct map_desc standard_io_desc[] __initdata = { /* virtual physical length type */ - { 0xf6000000, 0x20000000, 0x01000000, MT_DEVICE }, /* PCMCIA0 IO */ - { 0xf7000000, 0x30000000, 0x01000000, MT_DEVICE }, /* PCMCIA1 IO */ - { 0xf8000000, 0x40000000, 0x01400000, MT_DEVICE }, /* Devs */ - { 0xfa000000, 0x44000000, 0x00100000, MT_DEVICE }, /* LCD */ - { 0xfc000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Mem Ctl */ + { 0xf2000000, 0x40000000, 0x01800000, MT_DEVICE }, /* Devs */ + { 0xf4000000, 0x44000000, 0x00100000, MT_DEVICE }, /* LCD */ + { 0xf6000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Mem Ctl */ + { 0xf8000000, 0x4c000000, 0x00100000, MT_DEVICE }, /* USB host */ + { 0xfa000000, 0x50000000, 0x00100000, MT_DEVICE }, /* Camera */ + { 0xfe000000, 0x58000000, 0x00100000, MT_DEVICE }, /* IMem ctl */ { 0xff000000, 0x00000000, 0x00100000, MT_DEVICE } /* UNCACHED_PHYS_0 */ }; @@ -205,9 +144,45 @@ } }; +static struct pxafb_mach_info pxa_fb_info; + +void __init set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info) +{ + memcpy(&pxa_fb_info,hard_pxa_fb_info,sizeof(struct pxafb_mach_info)); +} +EXPORT_SYMBOL(set_pxa_fb_info); + +static struct resource pxafb_resources[] = { + [0] = { + .start = 0x44000000, + .end = 0x4400ffff, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = IRQ_LCD, + .end = IRQ_LCD, + .flags = IORESOURCE_IRQ, + }, +}; + +static u64 fb_dma_mask = ~(u64)0; + +static struct platform_device pxafb_device = { + .name = "pxafb", + .id = 0, + .dev = { + .platform_data = &pxa_fb_info, + .dma_mask = &fb_dma_mask, + .coherent_dma_mask = 0xffffffff, + }, + .num_resources = ARRAY_SIZE(pxafb_resources), + .resource = pxafb_resources, +}; + static struct platform_device *devices[] __initdata = { &pxamci_device, &udc_device, + &pxafb_device, }; static int __init pxa_init(void) diff -Nru a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c --- a/arch/arm/mach-pxa/pm.c Tue May 18 23:38:08 2004 +++ b/arch/arm/mach-pxa/pm.c Tue May 18 23:38:08 2004 @@ -32,6 +32,11 @@ #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] +#define RESTORE_GPLEVEL(n) do { \ + GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ + GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ +} while (0) + /* * List of global PXA peripheral registers to preserve. * More ones like CP and general purpose register values are preserved @@ -42,16 +47,13 @@ SLEEP_SAVE_OSCR, SLEEP_SAVE_OIER, SLEEP_SAVE_OSMR0, SLEEP_SAVE_OSMR1, SLEEP_SAVE_OSMR2, SLEEP_SAVE_OSMR3, + SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR0_U, SLEEP_SAVE_GAFR1_U, SLEEP_SAVE_GAFR2_U, - SLEEP_SAVE_FFIER, SLEEP_SAVE_FFLCR, SLEEP_SAVE_FFMCR, - SLEEP_SAVE_FFSPR, SLEEP_SAVE_FFISR, - SLEEP_SAVE_FFDLL, SLEEP_SAVE_FFDLH, - SLEEP_SAVE_ICMR, SLEEP_SAVE_CKEN, @@ -74,21 +76,6 @@ /* preserve current time */ delta = xtime.tv_sec - RCNR; - /* - * Temporary solution. This won't be necessary once - * we move pxa support into the serial driver - * Save the FF UART - */ - SAVE(FFIER); - SAVE(FFLCR); - SAVE(FFMCR); - SAVE(FFSPR); - SAVE(FFISR); - FFLCR |= 0x80; - SAVE(FFDLL); - SAVE(FFDLH); - FFLCR &= 0xef; - /* save vital registers */ SAVE(OSCR); SAVE(OSMR0); @@ -97,6 +84,7 @@ SAVE(OSMR3); SAVE(OIER); + SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); @@ -146,14 +134,15 @@ PSPR = 0; /* restore registers */ - RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); - RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); - RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); RESTORE(GAFR0_L); RESTORE(GAFR0_U); RESTORE(GAFR1_L); RESTORE(GAFR1_U); RESTORE(GAFR2_L); RESTORE(GAFR2_U); + RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); + RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); + RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); + RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); - PSSR = PSSR_PH; + PSSR = PSSR_RDH | PSSR_PH; RESTORE(OSMR0); RESTORE(OSMR1); @@ -167,22 +156,6 @@ ICLR = 0; ICCR = 1; RESTORE(ICMR); - - /* - * Temporary solution. This won't be necessary once - * we move pxa support into the serial driver. - * Restore the FF UART. - */ - RESTORE(FFMCR); - RESTORE(FFSPR); - RESTORE(FFLCR); - FFLCR |= 0x80; - RESTORE(FFDLH); - RESTORE(FFDLL); - RESTORE(FFLCR); - RESTORE(FFISR); - FFFCR = 0x07; - RESTORE(FFIER); /* restore current time */ xtime.tv_sec = RCNR + delta; diff -Nru a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-pxa/pxa25x.c Tue May 18 23:38:09 2004 @@ -0,0 +1,94 @@ +/* + * linux/arch/arm/mach-pxa/pxa25x.c + * + * Author: Nicolas Pitre + * Created: Jun 15, 2001 + * Copyright: MontaVista Software Inc. + * + * Code specific to PXA21x/25x/26x variants. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Since this file should be linked before any other machine specific file, + * the __initcall() here will be executed first. This serves as default + * initialization stuff for PXA machines which can be overridden later if + * need be. + */ +#include +#include +#include +#include + +#include + +#include "generic.h" + +/* + * Various clock factors driven by the CCCR register. + */ + +/* Crystal Frequency to Memory Frequency Multiplier (L) */ +static unsigned char L_clk_mult[32] = { 0, 27, 32, 36, 40, 45, 0, }; + +/* Memory Frequency to Run Mode Frequency Multiplier (M) */ +static unsigned char M_clk_mult[4] = { 0, 1, 2, 4 }; + +/* Run Mode Frequency to Turbo Mode Frequency Multiplier (N) */ +/* Note: we store the value N * 2 here. */ +static unsigned char N2_clk_mult[8] = { 0, 0, 2, 3, 4, 0, 6, 0 }; + +/* Crystal clock */ +#define BASE_CLK 3686400 + +/* + * Get the clock frequency as reflected by CCCR and the turbo flag. + * We assume these values have been applied via a fcs. + * If info is not 0 we also display the current settings. + */ +unsigned int get_clk_frequency_khz(int info) +{ + unsigned long cccr, turbo; + unsigned int l, L, m, M, n2, N; + + cccr = CCCR; + asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) ); + + l = L_clk_mult[(cccr >> 0) & 0x1f]; + m = M_clk_mult[(cccr >> 5) & 0x03]; + n2 = N2_clk_mult[(cccr >> 7) & 0x07]; + + L = l * BASE_CLK; + M = m * L; + N = n2 * M / 2; + + if(info) + { + L += 5000; + printk( KERN_INFO "Memory clock: %d.%02dMHz (*%d)\n", + L / 1000000, (L % 1000000) / 10000, l ); + M += 5000; + printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n", + M / 1000000, (M % 1000000) / 10000, m ); + N += 5000; + printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n", + N / 1000000, (N % 1000000) / 10000, n2 / 2, (n2 % 2) * 5, + (turbo & 1) ? "" : "in" ); + } + + return (turbo & 1) ? (N/1000) : (M/1000); +} + +EXPORT_SYMBOL(get_clk_frequency_khz); + +/* + * Return the current lclk requency in units of 10kHz + */ +unsigned int get_lclk_frequency_10khz(void) +{ + return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000; +} + +EXPORT_SYMBOL(get_lclk_frequency_10khz); + diff -Nru a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-pxa/pxa27x.c Tue May 18 23:38:09 2004 @@ -0,0 +1,120 @@ +/* + * linux/arch/arm/mach-pxa/pxa27x.c + * + * Author: Nicolas Pitre + * Created: Nov 05, 2002 + * Copyright: MontaVista Software Inc. + * + * Code specific to PXA27x aka Bulverde. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include +#include +#include +#include + +#include + +#include "generic.h" + +/* Crystal clock : 13-MHZ*/ +#define BASE_CLK 13000000 + +/* + * Get the clock frequency as reflected by CCSR and the turbo flag. + * We assume these values have been applied via a fcs. + * If info is not 0 we also display the current settings. + * + * For more details, refer to Bulverde Manual, section 3.8.2.1 + */ +unsigned int get_clk_frequency_khz( int info) +{ + unsigned long ccsr, turbo, b, ht; + unsigned int l, L, m, M, n2, N, S, cccra; + + ccsr = CCSR; + cccra = CCCR & (0x1 << 25); + + /* Read clkcfg register: it has turbo, b, half-turbo (and f) */ + asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) ); + b = (turbo & (0x1 << 3)); + ht = (turbo & (0x1 << 2)); + + l = ccsr & 0x1f; + n2 = (ccsr>>7) & 0xf; + if (l == 31) { + /* The calculation from the Yellow Book is incorrect: + it says M=4 for L=21-30 (which is easy to calculate + by subtracting 1 and then dividing by 10, but not + with 31, so we'll do it manually */ + m = 1 << 2; + } else { + m = 1 << ((l-1)/10); + } + + L = l * BASE_CLK; + N = (n2 * L) / 2; + S = (b) ? L : (L/2); + if (cccra == 0) + M = L/m; + else + M = (b) ? L : (L/2); + + if (info) { + printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n", + L / 1000000, (L % 1000000) / 10000, l ); + printk( KERN_INFO "Memory clock: %d.%02dMHz (/%d)\n", + M / 1000000, (M % 1000000) / 10000, m ); + printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n", + N / 1000000, (N % 1000000)/10000, n2 / 2, (n2 % 2)*5, + (turbo & 1) ? "" : "in" ); + printk( KERN_INFO "System bus clock: %d.%02dMHz \n", + S / 1000000, (S % 1000000) / 10000 ); + } + + return (turbo & 1) ? (N/1000) : (L/1000); +} + +/* + * Return the current mem clock frequency in units of 10kHz as + * reflected by CCCR[A], B, and L + */ +unsigned int get_lclk_frequency_10khz(void) +{ + unsigned long ccsr, clkcfg, b; + unsigned int l, L, m, M, cccra; + + cccra = CCCR & (0x1 << 25); + + /* Read clkcfg register to obtain b */ + asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) ); + b = (clkcfg & (0x1 << 3)); + + ccsr = CCSR; + l = ccsr & 0x1f; + if (l == 31) { + /* The calculation from the Yellow Book is incorrect: + it says M=4 for L=21-30 (which is easy to calculate + by subtracting 1 and then dividing by 10, but not + with 31, so we'll do it manually */ + m = 1 << 2; + } else { + m = 1 << ((l-1)/10); + } + + L = l * BASE_CLK; + if (cccra == 0) + M = L/m; + else + M = (b) ? L : L/2; + + return (M / 10000); +} + +EXPORT_SYMBOL(get_clk_frequency_khz); +EXPORT_SYMBOL(get_lclk_frequency_10khz); + diff -Nru a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig --- a/arch/arm/mach-s3c2410/Kconfig Tue May 18 23:38:06 2004 +++ b/arch/arm/mach-s3c2410/Kconfig Tue May 18 23:38:06 2004 @@ -16,6 +16,13 @@ Say Y here if you are using the HP IPAQ H1940 . +config ARCH_SMDK2410 + bool "SMDK2410/A9M2410" + depends on ARCH_S3C2410 + help + Say Y here if you are using the SMDK2410 or the derived module A9M2410 + + config MACH_VR1000 bool "Simtec VR1000" depends on ARCH_S3C2410 diff -Nru a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile --- a/arch/arm/mach-s3c2410/Makefile Tue May 18 23:38:05 2004 +++ b/arch/arm/mach-s3c2410/Makefile Tue May 18 23:38:05 2004 @@ -12,6 +12,7 @@ obj-$(CONFIG_ARCH_BAST) += mach-bast.o obj-$(CONFIG_MACH_H1940) += mach-h1940.o obj-$(CONFIG_ARCH_H1940) += mach-h1940.o +obj-$(CONFIG_ARCH_SMDK2410) += mach-smdk2410.o obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o #obj-$(CONFIG_PCI) +=$(pci-y) diff -Nru a/arch/arm/mach-s3c2410/mach-smdk2410.c b/arch/arm/mach-s3c2410/mach-smdk2410.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-s3c2410/mach-smdk2410.c Tue May 18 23:38:09 2004 @@ -0,0 +1,109 @@ +/*********************************************************************** + * + * linux/arch/arm/mach-s3c2410/mach-smdk2410.c + * + * Copyright (C) 2004 by FS Forth-Systeme GmbH + * All rights reserved. + * + * $Id: mach-smdk2410.c,v 1.1 2004/05/11 14:15:38 mpietrek Exp $ + * @Author: Jonas Dietsche + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * @History: + * derived from linux/arch/arm/mach-s3c2410/mach-bast.c, written by + * Ben Dooks + ***********************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "s3c2410.h" + + +static struct map_desc smdk2410_iodesc[] __initdata = { + /* nothing here yet */ +}; + +#define UCON S3C2410_UCON_DEFAULT +#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB +#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE + +/* base baud rate for all our UARTs */ +static unsigned long smdk2410_serial_clock = 24*1000*1000; + +static struct s3c2410_uartcfg smdk2410_uartcfgs[] = { + [0] = { + .hwport = 0, + .flags = 0, + .clock = &smdk2410_serial_clock, + .ucon = UCON, + .ulcon = ULCON, + .ufcon = UFCON, + }, + [1] = { + .hwport = 1, + .flags = 0, + .clock = &smdk2410_serial_clock, + .ucon = UCON, + .ulcon = ULCON, + .ufcon = UFCON, + }, + [2] = { + .hwport = 2, + .flags = 0, + .clock = &smdk2410_serial_clock, + .ucon = UCON, + .ulcon = ULCON, + .ufcon = UFCON, + } +}; + + +void __init smdk2410_map_io(void) +{ + s3c2410_map_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc)); + s3c2410_uartcfgs = smdk2410_uartcfgs; +} + +void __init smdk2410_init_irq(void) +{ + s3c2410_init_irq(); +} + +MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch + * to SMDK2410 */ + MAINTAINER("Jonas Dietsche") + BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART) + BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100) + MAPIO(smdk2410_map_io) + INITIRQ(smdk2410_init_irq) +MACHINE_END diff -Nru a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig --- a/arch/arm/mm/Kconfig Tue May 18 23:38:06 2004 +++ b/arch/arm/mm/Kconfig Tue May 18 23:38:06 2004 @@ -220,7 +220,7 @@ # XScale config CPU_XSCALE bool - depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA + depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA || ARCH_IXP4XX default y select CPU_32v5 select CPU_ABRT_EV5T diff -Nru a/arch/arm/mm/blockops.c b/arch/arm/mm/blockops.c --- a/arch/arm/mm/blockops.c Tue May 18 23:38:09 2004 +++ b/arch/arm/mm/blockops.c Tue May 18 23:38:09 2004 @@ -133,7 +133,7 @@ unsigned int cache_type; int i; - asm("mcr p15, 0, %0, c0, c0, 1" : "=r" (cache_type)); + asm("mrc p15, 0, %0, c0, c0, 1" : "=r" (cache_type)); printk("Checking V6 block cache operations:\n"); register_undef_hook(&blockops_hook); diff -Nru a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S --- a/arch/arm/mm/cache-v6.S Tue May 18 23:38:05 2004 +++ b/arch/arm/mm/cache-v6.S Tue May 18 23:38:05 2004 @@ -151,6 +151,7 @@ add r0, r0, #D_CACHE_LINE_SIZE cmp r0, r1 blo 1b + mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer mov pc, lr @@ -188,6 +189,7 @@ mcr p15, 0, r0, c7, c15, 1 @ clean & invalidate line #endif add r0, r0, #D_CACHE_LINE_SIZE + cmp r0, r1 blo 1b mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer diff -Nru a/arch/arm/mm/init.c b/arch/arm/mm/init.c --- a/arch/arm/mm/init.c Tue May 18 23:38:05 2004 +++ b/arch/arm/mm/init.c Tue May 18 23:38:05 2004 @@ -77,7 +77,7 @@ else if (!page_count(page)) free++; else - shared += atomic_read(&page->count) - 1; + shared += page_count(page) - 1; page++; } while (page < end); } diff -Nru a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c --- a/arch/arm/mm/ioremap.c Tue May 18 23:38:08 2004 +++ b/arch/arm/mm/ioremap.c Tue May 18 23:38:08 2004 @@ -20,6 +20,7 @@ * We use MMU protection domains to trap any attempt to access the bank * that is not currently mapped. (This isn't fully implemented yet.) */ +#include #include #include #include @@ -162,8 +163,10 @@ } return (void *) (offset + (char *)addr); } +EXPORT_SYMBOL(__ioremap); void __iounmap(void *addr) { vfree((void *) (PAGE_MASK & (unsigned long) addr)); } +EXPORT_SYMBOL(__iounmap); diff -Nru a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c --- a/arch/arm/mm/mm-armv.c Tue May 18 23:38:08 2004 +++ b/arch/arm/mm/mm-armv.c Tue May 18 23:38:08 2004 @@ -305,27 +305,27 @@ [MT_DEVICE] = { .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_WRITE, - .prot_l1 = PMD_TYPE_TABLE | PMD_BIT4, - .prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_UNCACHED | + .prot_l1 = PMD_TYPE_TABLE, + .prot_sect = PMD_TYPE_SECT | PMD_SECT_UNCACHED | PMD_SECT_AP_WRITE, .domain = DOMAIN_IO, }, [MT_CACHECLEAN] = { - .prot_sect = PMD_TYPE_SECT | PMD_BIT4, + .prot_sect = PMD_TYPE_SECT, .domain = DOMAIN_KERNEL, }, [MT_MINICLEAN] = { - .prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_MINICACHE, + .prot_sect = PMD_TYPE_SECT | PMD_SECT_MINICACHE, .domain = DOMAIN_KERNEL, }, [MT_VECTORS] = { .prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_EXEC, - .prot_l1 = PMD_TYPE_TABLE | PMD_BIT4, + .prot_l1 = PMD_TYPE_TABLE, .domain = DOMAIN_USER, }, [MT_MEMORY] = { - .prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_AP_WRITE, + .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, .domain = DOMAIN_KERNEL, } }; @@ -353,6 +353,15 @@ ecc_mask = 0; } + if (cpu_arch <= CPU_ARCH_ARMv5) { + mem_types[MT_DEVICE].prot_l1 |= PMD_BIT4; + mem_types[MT_DEVICE].prot_sect |= PMD_BIT4; + mem_types[MT_CACHECLEAN].prot_sect |= PMD_BIT4; + mem_types[MT_MINICLEAN].prot_sect |= PMD_BIT4; + mem_types[MT_VECTORS].prot_l1 |= PMD_BIT4; + mem_types[MT_MEMORY].prot_sect |= PMD_BIT4; + } + /* * ARMv6 and above have extended page tables. */ @@ -482,6 +491,7 @@ pgd_t *pgd; pmd_t *pmd; int i; + int cpu_arch = cpu_architecture(); if (current->mm && current->mm->pgd) pgd = current->mm->pgd; @@ -491,7 +501,9 @@ for (i = 0; i < FIRST_USER_PGD_NR + USER_PTRS_PER_PGD; i++) { pmdval = (i << PGDIR_SHIFT) | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | - PMD_BIT4 | PMD_TYPE_SECT; + PMD_TYPE_SECT; + if (cpu_arch <= CPU_ARCH_ARMv5) + pmdval |= PMD_BIT4; pmd = pmd_offset(pgd + i, i << PGDIR_SHIFT); set_pmd(pmd, __pmd(pmdval)); } diff -Nru a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S --- a/arch/arm/mm/proc-xscale.S Tue May 18 23:38:08 2004 +++ b/arch/arm/mm/proc-xscale.S Tue May 18 23:38:08 2004 @@ -298,7 +298,7 @@ add r0, r0, #CACHELINESIZE cmp r0, r1 blo 1b - mcr p15, 0, r0, c7, c10, 1 @ Drain Write (& Fill) Buffer + mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer mov pc, lr /* @@ -315,7 +315,7 @@ add r0, r0, #CACHELINESIZE cmp r0, r1 blo 1b - mcr p15, 0, r0, c7, c10, 1 @ Drain Write (& Fill) Buffer + mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer mov pc, lr /* @@ -333,7 +333,7 @@ add r0, r0, #CACHELINESIZE cmp r0, r1 blo 1b - mcr p15, 0, r0, c7, c10, 1 @ Drain Write (& Fill) Buffer + mcr p15, 0, r0, c7, c10, 4 @ Drain Write (& Fill) Buffer mov pc, lr ENTRY(xscale_cache_fns) @@ -647,6 +647,11 @@ .asciz "XScale-PXA210" .size cpu_pxa210_name, . - cpu_pxa210_name + .type cpu_ixp42x_name, #object +cpu_ixp42x_name: + .asciz "XScale-IXP42x Family" + .size cpu_ixp42x_name, . - cpu_ixp42x_name + .type cpu_pxa255_name, #object cpu_pxa255_name: .asciz "XScale-PXA255" @@ -724,6 +729,22 @@ .long xscale_mc_user_fns .long xscale_cache_fns .size __pxa210_proc_info, . - __pxa210_proc_info + + .type __ixp42x_proc_info, #object +__ixp42x_proc_info: + .long 0x690541c0 + .long 0xffffffc0 + .long 0x00000c0e + b __xscale_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP + .long cpu_ixp42x_name + .long xscale_processor_functions + .long v4wbi_tlb_fns + .long xscale_mc_user_fns + .long xscale_cache_fns + .size __ixp42x_proc_info, . - __ixp42x_proc_info .type __pxa255_proc_info,#object __pxa255_proc_info: diff -Nru a/arch/arm26/kernel/process.c b/arch/arm26/kernel/process.c --- a/arch/arm26/kernel/process.c Tue May 18 23:38:09 2004 +++ b/arch/arm26/kernel/process.c Tue May 18 23:38:09 2004 @@ -397,12 +397,6 @@ return __ret; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long fp, lr; @@ -417,7 +411,7 @@ if (fp < stack_page || fp > 4092+stack_page) return 0; lr = pc_pointer (((unsigned long *)fp)[-1]); - if (lr < first_sched || lr > last_sched) + if (!in_sched_functions(lr)) return lr; fp = *(unsigned long *) (fp - 12); } while (count ++ < 16); diff -Nru a/arch/cris/arch-v10/drivers/pcf8563.c b/arch/cris/arch-v10/drivers/pcf8563.c --- a/arch/cris/arch-v10/drivers/pcf8563.c Tue May 18 23:38:06 2004 +++ b/arch/cris/arch-v10/drivers/pcf8563.c Tue May 18 23:38:06 2004 @@ -53,14 +53,10 @@ { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); -int pcf8563_open(struct inode *, struct file *); -int pcf8563_release(struct inode *, struct file *); static struct file_operations pcf8563_fops = { .owner = THIS_MODULE, .ioctl = pcf8563_ioctl, - .open = pcf8563_open, - .release = pcf8563_release, }; unsigned char @@ -266,20 +262,6 @@ return -ENOTTY; } - return 0; -} - -int -pcf8563_open(struct inode *inode, struct file *filp) -{ - MOD_INC_USE_COUNT; - return 0; -} - -int -pcf8563_release(struct inode *inode, struct file *filp) -{ - MOD_DEC_USE_COUNT; return 0; } diff -Nru a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c --- a/arch/cris/arch-v10/kernel/process.c Tue May 18 23:38:08 2004 +++ b/arch/cris/arch-v10/kernel/process.c Tue May 18 23:38:08 2004 @@ -217,8 +217,8 @@ * These bracket the sleeping functions.. */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) +#define first_sched ((unsigned long)__sched_text_start) +#define last_sched ((unsigned long)__sched_text_end) unsigned long get_wchan(struct task_struct *p) { diff -Nru a/arch/h8300/Kconfig b/arch/h8300/Kconfig --- a/arch/h8300/Kconfig Tue May 18 23:38:08 2004 +++ b/arch/h8300/Kconfig Tue May 18 23:38:08 2004 @@ -43,122 +43,7 @@ source "init/Kconfig" -menu "Processor type and features" - -choice - prompt "H8/300 platform" - default H8300H_GENERIC - -config H8300H_GENERIC - bool "Generic" - help - H8/300H CPU Generic Hardware Support - -config H8300H_AKI3068NET - bool "AE-3068/69" - help - AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support - More Information. (Japanese Only) - - AE-3068/69 Evaluation Board Support - More Information. - - -config H8300H_H8MAX - bool "H8MAX" - help - H8MAX Evaluation Board Support - More Information. (Japanese Only) - - -config H8300H_SIM - bool "H8/300H Simulator" - help - GDB Simulator Support - More Information. - arch/h8300/Doc/simulator.txt - -config H8S_EDOSK2674 - bool "EDOSK-2674" - help - Renesas EDOSK-2674 Evaluation Board Support - More Information. - - - -config H8S_SIM - bool "H8S Simulator" - help - GDB Simulator Support - More Information. - arch/h8300/Doc/simulator.txt - -endchoice - -choice - prompt "CPU Selection" - -config H83002 - bool "H8/3001,3002,3003" - depends on H8300H_GENERIC - -config H83007 - bool "H8/3006,3007" - depends on (H8300H_GENERIC || H8300H_SIM) - -config H83048 - bool "H8/3044,3045,3046,3047,3048,3052" - depends on H8300H_GENERIC - -config H83068 - bool "H8/3065,3066,3067,3068,3069" - depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX) - -config H8S2678 - bool "H8S/2670,2673,2674R,2675,2676" - depends on (H8S_GENERIC || H8S_EDOSK2674 || H8S_SIM) - -endchoice - -config CPU_H8300H - bool - depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX || H8300H_SIM) - default y - -config CPU_H8S - bool - depends on (H8S_GENERIC || H8S_EDOSK2674 || H8S_SIM) - default y - -config CPU_CLOCK - int "CPU Clock Frequency (/1KHz)" - default "20000" if H8300H_AKI3068NET - default "25000" if H8300H_H8MAX - default "16000" if H8300H_SIM - default "16000" if H8300H_GENERIC - default "33000" if H8S_GENERIC - default "33000" if H8S_SIM - default "33000" if H8S_EDOSK2674 - help - CPU Clock Frequency divide to 1000 -choice - prompt "Kernel executes from" - ---help--- - Choose the memory type that the kernel will be running in. - -config RAMKERNEL - bool "RAM" - help - The kernel will be resident in RAM when running. - -config ROMKERNEL - bool "ROM" - help - The kernel will be resident in FLASH/ROM when running. - -endchoice - -endmenu +source "arch/h8300/Kconfig.cpu" menu "Executable file formats" diff -Nru a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/Kconfig.cpu Tue May 18 23:38:09 2004 @@ -0,0 +1,183 @@ +menu "Processor type and features" + +choice + prompt "H8/300 platform" + default H8300H_GENERIC + +config H8300H_GENERIC + bool "H8/300H Generic" + help + H8/300H CPU Generic Hardware Support + +config H8300H_AKI3068NET + bool "AE-3068/69" + help + AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support + More Information. (Japanese Only) + + AE-3068/69 Evaluation Board Support + More Information. + + +config H8300H_H8MAX + bool "H8MAX" + help + H8MAX Evaluation Board Support + More Information. (Japanese Only) + + +config H8300H_SIM + bool "H8/300H Simulator" + help + GDB Simulator Support + More Information. + arch/h8300/Doc/simulator.txt + +config H8S_GENERIC + bool "H8S Generic" + help + H8S CPU Generic Hardware Support + +config H8S_EDOSK2674 + bool "EDOSK-2674" + help + Renesas EDOSK-2674 Evaluation Board Support + More Information. + + + +config H8S_SIM + bool "H8S Simulator" + help + GDB Simulator Support + More Information. + arch/h8300/Doc/simulator.txt + +endchoice + +if (H8300H_GENERIC || H8S_GENERIC) +menu "Detail Selection" +if (H8300H_GENERIC) +choice + prompt "CPU Selection" + +config H83002 + bool "H8/3001,3002,3003" + +config H83007 + bool "H8/3006,3007" + +config H83048 + bool "H8/3044,3045,3046,3047,3048,3052" + +config H83068 + bool "H8/3065,3066,3067,3068,3069" +endchoice +endif + +if (H8S_GENERIC) +choice + prompt "CPU Selection" + +config H8S2678 + bool "H8S/2670,2673,2674R,2675,2676" +endchoice +endif + +config CPU_CLOCK + int "CPU Clock Frequency (/1KHz)" + default "20000" + help + CPU Clock Frequency divide to 1000 +endmenu +endif + +if (H8300H_GENERIC || H8S_GENERIC || H8300H_SIM || H8S_SIM || H8S_EDOSK2674) +choice + prompt "Kernel executes from" + ---help--- + Choose the memory type that the kernel will be running in. + +config RAMKERNEL + bool "RAM" + help + The kernel will be resident in RAM when running. + +config ROMKERNEL + bool "ROM" + help + The kernel will be resident in FLASH/ROM when running. + +endchoice +endif + +if (H8300H_AKI3068NET) +config H83068 + bool + default y + +config CPU_CLOCK + int + default "20000" + +config RAMKERNEL + bool + default y +endif + +if (H8300H_H8MAX) +config H83068 + bool + default y + +config CPU_CLOCK + int + default 25000 + +config RAMKERNEL + bool + default y +endif + +if (H8300H_SIM) +config H83007 + bool + default y + +config CPU_CLOCK + int + default "16000" +endif + +if (H8S_EDOSK2674) +config H8S2678 + bool + default y +config CPU_CLOCK + int + default 33000 +endif + +if (H8S_SIM) +config H8S2678 + bool + default y +config CPU_CLOCK + int + default 33000 +endif + +config CPU_H8300H + bool + depends on (H8002 || H83007 || H83048 || H83068) + default y + +config CPU_H8S + bool + depends on H8S2678 + default y + +config PREEMPT + bool "Preemptible Kernel" + default n +endmenu diff -Nru a/arch/h8300/Makefile b/arch/h8300/Makefile --- a/arch/h8300/Makefile Tue May 18 23:38:05 2004 +++ b/arch/h8300/Makefile Tue May 18 23:38:05 2004 @@ -62,12 +62,7 @@ archclean: $(Q)$(MAKE) $(clean)=$(boot) -prepare: include/asm-$(ARCH)/machine-depend.h include/asm-$(ARCH)/asm-offsets.h - -include/asm-$(ARCH)/machine-depend.h: include/asm-$(ARCH)/$(BOARD)/machine-depend.h - $(Q)ln -sf $(BOARD)/machine-depend.h \ - include/asm-$(ARCH)/machine-depend.h - @echo ' Create include/asm-$(ARCH)/machine-depend.h' +prepare: include/asm-$(ARCH)/asm-offsets.h include/asm-$(ARCH)/asm-offsets.h: arch/$(ARCH)/kernel/asm-offsets.s \ include/asm include/linux/version.h @@ -81,4 +76,4 @@ echo 'vmlinux.srec - Create srec binary' endef -CLEAN_FILES += include/asm-$(ARCH)/asm-offsets.h include/asm-$(ARCH)/machine-depend.h +CLEAN_FILES += include/asm-$(ARCH)/asm-offsets.h diff -Nru a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c --- a/arch/h8300/kernel/process.c Tue May 18 23:38:05 2004 +++ b/arch/h8300/kernel/process.c Tue May 18 23:38:05 2004 @@ -55,9 +55,9 @@ { while(1) { if (need_resched()) { - sti(); + local_irq_enable(); __asm__("sleep"); - cli(); + local_irq_disable(); } schedule(); } @@ -112,14 +112,13 @@ void show_regs(struct pt_regs * regs) { - printk("\n"); - printk("PC: %08lx Status: %02x\n", + printk("\nPC: %08lx Status: %02x", regs->pc, regs->ccr); - printk("ORIG_ER0: %08lx ER0: %08lx ER1: %08lx\n", + printk("\nORIG_ER0: %08lx ER0: %08lx ER1: %08lx", regs->orig_er0, regs->er0, regs->er1); - printk("ER2: %08lx ER3: %08lx ER4: %08lx ER5: %08lx\n", + printk("\nER2: %08lx ER3: %08lx ER4: %08lx ER5: %08lx", regs->er2, regs->er3, regs->er4, regs->er5); - printk("ER6' %08lx ",regs->er6); + printk("\nER6' %08lx ",regs->er6); if (user_mode(regs)) printk("USP: %08lx\n", rdusp()); else @@ -261,12 +260,6 @@ return error; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long thread_saved_pc(struct task_struct *tsk) { return ((struct pt_regs *)tsk->thread.esp0)->pc; @@ -287,7 +280,7 @@ fp >= 8184+stack_page) return 0; pc = ((unsigned long *)fp)[1]; - if (pc < first_sched || pc >= last_sched) + if (!in_sched_functions(pc)) return pc; fp = *(unsigned long *) fp; } while (count++ < 16); diff -Nru a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c --- a/arch/h8300/kernel/signal.c Tue May 18 23:38:07 2004 +++ b/arch/h8300/kernel/signal.c Tue May 18 23:38:07 2004 @@ -192,6 +192,7 @@ regs->er1 = context.sc_er1; regs->er2 = context.sc_er2; regs->er3 = context.sc_er3; + regs->er5 = context.sc_er5; regs->ccr = (regs->ccr & 0x10)|(context.sc_ccr & 0xef); regs->pc = context.sc_pc; regs->orig_er0 = -1; /* disable syscall checks */ @@ -308,6 +309,7 @@ sc->sc_er1 = regs->er1; sc->sc_er2 = regs->er2; sc->sc_er3 = regs->er3; + sc->sc_er5 = regs->er5; sc->sc_ccr = regs->ccr; sc->sc_pc = regs->pc; } @@ -384,6 +386,7 @@ ? current_thread_info()->exec_domain->signal_invmap[sig] : sig); regs->er1 = (unsigned long)&(frame->sc); + regs->er5 = current->mm->start_data; /* GOT base */ return; @@ -435,6 +438,7 @@ : sig); regs->er1 = (unsigned long)&(frame->info); regs->er2 = (unsigned long)&frame->uc; + regs->er5 = current->mm->start_data; /* GOT base */ return; diff -Nru a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S --- a/arch/h8300/kernel/syscalls.S Tue May 18 23:38:06 2004 +++ b/arch/h8300/kernel/syscalls.S Tue May 18 23:38:06 2004 @@ -265,8 +265,8 @@ .long SYMBOL_NAME(sys_io_getevents) .long SYMBOL_NAME(sys_io_submit) .long SYMBOL_NAME(sys_io_cancel) - .long SYMBOL_NAME(sys_ni_syscall) /* 250 */ /* sys_alloc_hugepages */ - .long SYMBOL_NAME(sys_ni_syscall) /* sys_freec_hugepages */ + .long SYMBOL_NAME(sys_fadvise64) /* 250 */ + .long SYMBOL_NAME(sys_ni_syscall) .long SYMBOL_NAME(sys_exit_group) .long SYMBOL_NAME(sys_lookup_dcookie) .long SYMBOL_NAME(sys_epoll_create) @@ -287,36 +287,39 @@ .long SYMBOL_NAME(sys_fstatfs64) .long SYMBOL_NAME(sys_tgkill) /* 270 */ .long SYMBOL_NAME(sys_utimes) + .long SYMBOL_NAME(sys_fadvise64_64) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_vserver */ .rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4 .long SYMBOL_NAME(sys_ni_syscall) .endr + .macro call_sp addr + mov.l #SYMBOL_NAME(\addr),er6 + bra SYMBOL_NAME(syscall_trampoline):8 + .endm + SYMBOL_NAME_LABEL(sys_clone) - mov.l #SYMBOL_NAME(h8300_clone),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp h8300_clone SYMBOL_NAME_LABEL(sys_sigsuspend) - mov.l #SYMBOL_NAME(do_sigsuspend),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp do_sigsuspend SYMBOL_NAME_LABEL(sys_rt_sigsuspend) - mov.l #SYMBOL_NAME(do_rt_sigsuspend),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp do_rt_sigsuspend SYMBOL_NAME_LABEL(sys_sigreturn) - mov.l #SYMBOL_NAME(do_sigreturn),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp do_sigreturn SYMBOL_NAME_LABEL(sys_rt_sigreturn) - mov.l #SYMBOL_NAME(do_rt_sigreturn),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp do_rt_sigreturn SYMBOL_NAME_LABEL(sys_fork) - mov.l #SYMBOL_NAME(h8300_fork),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp h8300_fork SYMBOL_NAME_LABEL(sys_vfork) - mov.l #SYMBOL_NAME(h8300_vfork),er0 - jmp @SYMBOL_NAME(syscall_trampoline) + call_sp h8300_vfork +SYMBOL_NAME_LABEL(syscall_trampoline) + mov.l sp,er0 + jmp @er6 diff -Nru a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c --- a/arch/h8300/kernel/traps.c Tue May 18 23:38:05 2004 +++ b/arch/h8300/kernel/traps.c Tue May 18 23:38:05 2004 @@ -156,8 +156,14 @@ printk("\n"); } +void show_trace_task(struct task_struct *tsk) +{ + show_stack(tsk,(unsigned long *)tsk->thread.esp0); +} + void dump_stack(void) { show_stack(NULL,NULL); } + EXPORT_SYMBOL(dump_stack); diff -Nru a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S --- a/arch/h8300/kernel/vmlinux.lds.S Tue May 18 23:38:08 2004 +++ b/arch/h8300/kernel/vmlinux.lds.S Tue May 18 23:38:08 2004 @@ -1,3 +1,6 @@ +#define VMLINUX_SYMBOL(_sym_) _##_sym_ +#include +#include #include #ifdef CONFIG_H8300H_GENERIC diff -Nru a/arch/h8300/mm/init.c b/arch/h8300/mm/init.c --- a/arch/h8300/mm/init.c Tue May 18 23:38:07 2004 +++ b/arch/h8300/mm/init.c Tue May 18 23:38:07 2004 @@ -162,7 +162,7 @@ unsigned long end_mem = memory_end; /* DAVIDM - this must not include kernel stack at top */ #ifdef DEBUG - printk("Mem_init: start=%lx, end=%lx\n", start_mem, end_mem); + printk(KERN_DEBUG "Mem_init: start=%lx, end=%lx\n", start_mem, end_mem); #endif end_mem &= PAGE_MASK; @@ -179,7 +179,7 @@ initk = (&__init_begin - &__init_end) >> 10; tmp = nr_free_pages() << PAGE_SHIFT; - printk("Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n", + printk(KERN_INFO "Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n", tmp >> 10, len >> 10, (rom_length > 0) ? ((rom_length >> 10) - codek) : 0, @@ -223,7 +223,7 @@ free_page(addr); totalram_pages++; } - printk("Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n", + printk(KERN_INFO "Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n", (addr - PAGE_ALIGN((long) &__init_begin)) >> 10, (int)(PAGE_ALIGN((unsigned long)(&__init_begin))), (int)(addr - PAGE_SIZE)); diff -Nru a/arch/h8300/platform/h8300h/aki3068net/timer.c b/arch/h8300/platform/h8300h/aki3068net/timer.c --- a/arch/h8300/platform/h8300h/aki3068net/timer.c Tue May 18 23:38:05 2004 +++ b/arch/h8300/platform/h8300h/aki3068net/timer.c Tue May 18 23:38:05 2004 @@ -25,12 +25,19 @@ #define CMFA 6 +#define CMIEA 0x40 +#define CCLR_CMA 0x08 +#define CLK_DIV8192 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */ + void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2); - ctrl_outb(0x00,_8TCSR2); - request_irq(40,timer_int,0,"timer",0); - ctrl_outb(0x40|0x08|0x03,_8TCR2); + /* setup 8bit timer ch2 */ + ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2); /* set interval */ + ctrl_outb(0x00, _8TCSR2); /* no output */ + request_irq(40, timer_int, 0, "timer", 0); + ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */ } void platform_timer_eoi(void) diff -Nru a/arch/h8300/platform/h8300h/entry.S b/arch/h8300/platform/h8300h/entry.S --- a/arch/h8300/platform/h8300h/entry.S Tue May 18 23:38:06 2004 +++ b/arch/h8300/platform/h8300h/entry.S Tue May 18 23:38:06 2004 @@ -109,12 +109,10 @@ .globl SYMBOL_NAME(system_call) .globl SYMBOL_NAME(ret_from_exception) .globl SYMBOL_NAME(ret_from_fork) -.globl SYMBOL_NAME(ret_from_signal) .globl SYMBOL_NAME(ret_from_interrupt) .globl SYMBOL_NAME(interrupt_redirect_table) .globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp) .globl SYMBOL_NAME(resume) -.globl SYMBOL_NAME(syscall_trampoline) .globl SYMBOL_NAME(interrupt_redirect_table) .globl SYMBOL_NAME(interrupt_entry) .globl SYMBOL_NAME(system_call) @@ -173,7 +171,7 @@ beq 1f jsr @SYMBOL_NAME(do_softirq) 1: - jmp @SYMBOL_NAME(ret_from_exception) + jmp @SYMBOL_NAME(ret_from_interrupt) SYMBOL_NAME_LABEL(system_call) subs #4,sp /* dummy LVEC */ @@ -205,11 +203,11 @@ mov.l @(LER2:16,sp),er1 mov.l @(LER3:16,sp),er2 jsr @er4 - mov.l er0,@(LER0,sp) /* save the return value */ + mov.l er0,@(LER0:16,sp) /* save the return value */ #if defined(CONFIG_SYSCALL_PRINT) jsr @SYMBOL_NAME(syscall_print) #endif - jmp @SYMBOL_NAME(ret_from_exception) + bra SYMBOL_NAME(ret_from_exception):8 1: jsr SYMBOL_NAME(syscall_trace) mov.l @(LER1:16,sp),er0 @@ -218,44 +216,66 @@ jsr @er4 mov.l er0,@(LER0:16,sp) /* save the return value */ jsr @SYMBOL_NAME(syscall_trace) + bra SYMBOL_NAME(ret_from_exception):8 + +SYMBOL_NAME_LABEL(ret_from_fork) + mov.l er2,er0 + jsr @SYMBOL_NAME(schedule_tail) + bra SYMBOL_NAME(ret_from_exception):8 -SYMBOL_NAME_LABEL(ret_from_signal) +SYMBOL_NAME_LABEL(reschedule) + /* save top of frame */ + mov.l sp,er0 + jsr @SYMBOL_NAME(set_esp0) + jsr @SYMBOL_NAME(schedule) SYMBOL_NAME_LABEL(ret_from_exception) +#if defined(CONFIG_PREEMPT) + orc #0x80,ccr +#endif +SYMBOL_NAME_LABEL(ret_from_interrupt) mov.b @(LCCR+1:16,sp),r0l btst #4,r0l /* check if returning to kernel */ - bne 3f /* if so, skip resched, signals */ + bne done:8 /* if so, skip resched, signals */ andc #0x7f,ccr - mov.l sp,er2 - and.w #0xe000,r2 - mov.l @(TI_FLAGS:16,er2),er1 + mov.l sp,er4 + and.w #0xe000,r4 + mov.l @(TI_FLAGS:16,er4),er1 and.l #_TIF_WORK_MASK,er1 - beq 3f + beq done:8 1: - mov.l @(TI_FLAGS:16,er2),er1 + mov.l @(TI_FLAGS:16,er4),er1 btst #TIF_NEED_RESCHED,r1l bne SYMBOL_NAME(reschedule):16 mov.l sp,er1 subs #4,er1 /* adjust retpc */ mov.l er2,er0 jsr @SYMBOL_NAME(do_signal) -3: +#if defined(CONFIG_PREEMPT) + bra done:8 /* userspace thoru */ +3: + btst #4,r0l + beq done:8 /* userspace thoru */ +4: + mov.l @(TI_PRE_COUNT:16,er4),er1 + bne done:8 + mov.l @(TI_FLAGS:16,er4),er1 + btst #TIF_NEED_RESCHED,r1l + beq done:8 + mov.b r0l,r0l + bpl done:8 /* interrupt off (exception path?) */ + mov.l #PREEMPT_ACTIVE,er1 + mov.l er1,@(TI_PRE_COUNT:16,er4) + andc #0x7f,ccr + jsr @SYMBOL_NAME(schedule) + sub.l er1,er1 + mov.l er1,@(TI_PRE_COUNT:16,er4) + orc #0x80,ccr + bra 4b:8 +#endif +done: RESTORE_ALL /* Does RTE */ -SYMBOL_NAME_LABEL(reschedule) - /* save top of frame */ - mov.l sp,er0 - jsr @SYMBOL_NAME(set_esp0) - - mov.l #SYMBOL_NAME(ret_from_exception),er0 - mov.l er0,@-sp - jmp @SYMBOL_NAME(schedule) - -SYMBOL_NAME_LABEL(ret_from_fork) - mov.l er2,er0 - jsr @SYMBOL_NAME(schedule_tail) - jmp @SYMBOL_NAME(ret_from_exception) - SYMBOL_NAME_LABEL(resume) /* * Beware - when entering resume, offset of tss is in d1, @@ -305,11 +325,6 @@ mov.l er1,er0 jsr @SYMBOL_NAME(trace_trap) jmp @SYMBOL_NAME(ret_from_exception) - -SYMBOL_NAME_LABEL(syscall_trampoline) - mov.l er0,er6 - mov.l sp,er0 - jmp @er6 .section .bss SYMBOL_NAME_LABEL(sw_ksp) diff -Nru a/arch/h8300/platform/h8300h/generic/timer.c b/arch/h8300/platform/h8300h/generic/timer.c --- a/arch/h8300/platform/h8300h/generic/timer.c Tue May 18 23:38:06 2004 +++ b/arch/h8300/platform/h8300h/generic/timer.c Tue May 18 23:38:06 2004 @@ -22,22 +22,23 @@ #include -extern int request_irq_boot(unsigned int, - irqreturn_t (*handler)(int, void *, struct pt_regs *), - unsigned long, const char *, void *); - - #if defined(CONFIG_H83007) || defined(CONFIG_H83068) #include #define CMFA 6 +#define CMIEA 0x40 +#define CCLR_CMA 0x08 +#define CLK_DIV8192 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */ + int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2); - ctrl_outb(0x00,_8TCSR2); - request_irq(40,timer_int,0,"timer",0); - ctrl_outb(0x40|0x08|0x03,_8TCR2); - return 0; + /* setup 8bit timer ch2 */ + ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2); /* set interval */ + ctrl_outb(0x00, _8TCSR2); /* no output */ + request_irq(40, timer_int, 0, "timer", 0); + ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */ } void platform_timer_eoi(void) @@ -46,7 +47,7 @@ } #endif -#if defined(H8_3002) || defined(CONFIG_H83048) +#if defined(CONFIG_H83002) || defined(CONFIG_H83048) /* FIXME! */ #define TSTR 0x00ffff60 #define TSNC 0x00ffff61 @@ -54,6 +55,7 @@ #define TFCR 0x00ffff63 #define TOER 0x00ffff90 #define TOCR 0x00ffff91 +/* ITU0 */ #define TCR 0x00ffff64 #define TIOR 0x00ffff65 #define TIER 0x00ffff66 @@ -62,23 +64,28 @@ #define GRA 0x00ffff6a #define GRB 0x00ffff6c +#define CCLR_CMGRA 0x20 +#define CLK_DIV8 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8 /* Timer input freq. */ + int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - *(unsigned short *)GRA= H8300_TIMER_COUNT_DATA; - *(unsigned short *)TCNT=0; - ctrl_outb(0x23,TCR); - ctrl_outb(0x00,TIOR); - request_timer_irq(26,timer_int,0,"timer",0); - ctrl_outb(inb(TIER) | 0x01,TIER); - ctrl_outb(inb(TSNC) & ~0x01,TSNC); - ctrl_outb(inb(TMDR) & ~0x01,TMDR); - ctrl_outb(inb(TSTR) | 0x01,TSTR); + *(unsigned short *)GRA= H8300_TIMER_FREQ / HZ; /* set interval */ + *(unsigned short *)TCNT=0; /* clear counter */ + ctrl_outb(0x80|CCLR_CMGRA|CLK_DIV8, TCR); /* set ITU0 clock */ + ctrl_outb(0x88, TIOR); /* no output */ + request_irq(26, timer_int, 0, "timer", 0); + ctrl_outb(0xf9, TIER); /* compare match GRA interrupt */ + ctrl_outb(ctrl_inb(TSNC) & ~0x01, TSNC); /* ITU0 async */ + ctrl_outb(ctrl_inb(TMDR) & ~0x01, TMDR); /* ITU0 normal mode */ + ctrl_outb(ctrl_inb(TSTR) | 0x01, TSTR); /* ITU0 Start */ return 0; } void platform_timer_eoi(void) { - ctrl_outb(inb(TSR) & ~0x01,TSR); + ctrl_outb(ctrl_inb(TSR) & ~0x01,TSR); } #endif diff -Nru a/arch/h8300/platform/h8300h/h8max/timer.c b/arch/h8300/platform/h8300h/h8max/timer.c --- a/arch/h8300/platform/h8300h/h8max/timer.c Tue May 18 23:38:05 2004 +++ b/arch/h8300/platform/h8300h/h8max/timer.c Tue May 18 23:38:05 2004 @@ -25,12 +25,19 @@ #define CMFA 6 +#define CMIEA 0x40 +#define CCLR_CMA 0x08 +#define CLK_DIV8192 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */ + void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2); - ctrl_outb(0x00,_8TCSR2); - request_irq(40,timer_int,0,"timer",0); - ctrl_outb(0x40|0x08|0x03,_8TCR2); + /* setup 8bit timer ch2 */ + ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2); /* set interval */ + ctrl_outb(0x00, _8TCSR2); /* no output */ + request_irq(40, timer_int, 0, "timer", 0); + ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */ } void platform_timer_eoi(void) diff -Nru a/arch/h8300/platform/h8300h/ptrace_h8300h.c b/arch/h8300/platform/h8300h/ptrace_h8300h.c --- a/arch/h8300/platform/h8300h/ptrace_h8300h.c Tue May 18 23:38:06 2004 +++ b/arch/h8300/platform/h8300h/ptrace_h8300h.c Tue May 18 23:38:06 2004 @@ -246,11 +246,13 @@ return (unsigned short *)addr; case relb: if ((inst = 0x55) || isbranch(child,inst & 0x0f)) - (unsigned char *)pc += (signed char)(*fetch_p); + pc = (unsigned short *)((unsigned long)pc + + ((signed char)(*fetch_p))); return pc+1; /* skip myself */ case relw: if ((inst = 0x5c) || isbranch(child,(*fetch_p & 0xf0) >> 4)) - (unsigned char *)pc += (signed short)(*(pc+1)); + pc = (unsigned short *)((unsigned long)pc + + ((signed short)(*(pc+1)))); return pc+2; /* skip myself */ } } diff -Nru a/arch/h8300/platform/h8s/edosk2674/timer.c b/arch/h8300/platform/h8s/edosk2674/timer.c --- a/arch/h8300/platform/h8s/edosk2674/timer.c Tue May 18 23:38:07 2004 +++ b/arch/h8300/platform/h8s/edosk2674/timer.c Tue May 18 23:38:07 2004 @@ -1,5 +1,5 @@ /* - * linux/arch/h8300/platform/h8s/generic/timer.c + * linux/arch/h8300/platform/h8s/edosk2674/timer.c * * Yoshinori Sato * @@ -23,25 +23,28 @@ #include #include -#define REGS(regs) __REGS(regs) -#define __REGS(regs) #regs +#define CMFA 6 -int __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) +#define CMIEA 0x40 +#define CCLR_CMA 0x08 +#define CLK_DIV8192 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */ + +void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - unsigned char mstpcrl; - mstpcrl = ctrl_inb(MSTPCRL); /* Enable timer */ - mstpcrl &= ~0x01; - ctrl_outb(mstpcrl,MSTPCRL); - ctrl_outb(H8300_TIMER_COUNT_DATA,_8TCORA1); - ctrl_outb(0x00,_8TCSR1); - request_irq(76,timer_int,0,"timer",0); - ctrl_outb(0x40|0x08|0x03,_8TCR1); - return 0; + /* 8bit timer module enabled */ + ctrl_outb(ctrl_inb(MSTPCRL) & ~0x01, MSTPCRL); + /* setup 8bit timer ch1 */ + ctrl_outb(H8300_TIMER_FREQ / HZ, _8TCORA1); /* set interval */ + ctrl_outb(0x00, _8TCSR1); /* no output */ + request_irq(76, timer_int, 0, "timer" ,0); + ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR1); /* start count */ } void platform_timer_eoi(void) { - __asm__("bclr #6,@" REGS(_8TCSR1) ":8"); + *(volatile unsigned char *)_8TCSR1 &= ~(1 << CMFA); } void platform_gettod(int *year, int *mon, int *day, int *hour, diff -Nru a/arch/h8300/platform/h8s/entry.S b/arch/h8300/platform/h8s/entry.S --- a/arch/h8300/platform/h8s/entry.S Tue May 18 23:38:08 2004 +++ b/arch/h8300/platform/h8s/entry.S Tue May 18 23:38:08 2004 @@ -109,12 +109,10 @@ .globl SYMBOL_NAME(system_call) .globl SYMBOL_NAME(ret_from_exception) .globl SYMBOL_NAME(ret_from_fork) -.globl SYMBOL_NAME(ret_from_signal) .globl SYMBOL_NAME(ret_from_interrupt) .globl SYMBOL_NAME(interrupt_redirect_table) .globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp) .globl SYMBOL_NAME(resume) -.globl SYMBOL_NAME(syscall_trampoline) .globl SYMBOL_NAME(trace_break) .globl SYMBOL_NAME(interrupt_entry) @@ -201,11 +199,11 @@ mov.l @(LER2:16,sp),er1 mov.l @(LER3:16,sp),er2 jsr @er4 - mov.l er0,@(LER0,sp) /* save the return value */ + mov.l er0,@(LER0:16,sp) /* save the return value */ #if defined(CONFIG_SYSCALL_PRINT) jsr @SYMBOL_NAME(syscall_print) #endif - jmp @SYMBOL_NAME(ret_from_exception) + bra SYMBOL_NAME(ret_from_exception):8 1: jsr SYMBOL_NAME(syscall_trace) mov.l @(LER1:16,sp),er0 @@ -214,45 +212,67 @@ jsr @er4 mov.l er0,@(LER0:16,sp) /* save the return value */ jsr @SYMBOL_NAME(syscall_trace) + bra SYMBOL_NAME(ret_from_exception):8 + -SYMBOL_NAME_LABEL(ret_from_signal) +SYMBOL_NAME_LABEL(ret_from_fork) + mov.l er2,er0 + jsr @SYMBOL_NAME(schedule_tail) + bra SYMBOL_NAME(ret_from_exception):8 + +SYMBOL_NAME_LABEL(reschedule) + /* save top of frame */ + mov.l sp,er0 + jsr @SYMBOL_NAME(set_esp0) + jsr @SYMBOL_NAME(schedule) SYMBOL_NAME_LABEL(ret_from_exception) +#if defined(CONFIG_PREEMPT) + orc #0x80,ccr +#endif +SYMBOL_NAME_LABEL(ret_from_interrupt) mov.b @(LCCR+1:16,sp),r0l btst #4,r0l /* check if returning to kernel */ - bne 3f /* if so, skip resched, signals */ + bne done:8 /* if so, skip resched, signals */ andc #0x7f,ccr - mov.l sp,er2 - and.w #0xe000,r2 - mov.l @(TI_FLAGS:16,er2),er1 + mov.l sp,er4 + and.w #0xe000,r4 + mov.l @(TI_FLAGS:16,er4),er1 and.l #_TIF_WORK_MASK,er1 - beq 3f + beq done:8 1: - mov.l @(TI_FLAGS:16,er2),er1 + mov.l @(TI_FLAGS:16,er4),er1 btst #TIF_NEED_RESCHED,r1l bne SYMBOL_NAME(reschedule):16 mov.l sp,er1 subs #4,er1 /* adjust retpc */ mov.l er2,er0 jsr @SYMBOL_NAME(do_signal) -3: +#if defined(CONFIG_PREEMPT) + bra done:8 /* userspace thoru */ +3: + btst #4,r0l + beq done:8 /* userspace thoru */ +4: + mov.l @(TI_PRE_COUNT:16,er4),er1 + bne done:8 + mov.l @(TI_FLAGS:16,er4),er1 + btst #TIF_NEED_RESCHED,r1l + beq done:8 + mov.b r0l,r0l + bpl done:8 /* interrupt off (exception path?) */ + mov.l #PREEMPT_ACTIVE,er1 + mov.l er1,@(TI_PRE_COUNT:16,er4) + andc #0x7f,ccr + jsr @SYMBOL_NAME(schedule) + sub.l er1,er1 + mov.l er1,@(TI_PRE_COUNT:16,er4) + orc #0x80,ccr + bra 4b:8 +#endif +done: RESTORE_ALL /* Does RTE */ -SYMBOL_NAME_LABEL(reschedule) - /* save top of frame */ - mov.l sp,er0 - jsr @SYMBOL_NAME(set_esp0) - - mov.l #SYMBOL_NAME(ret_from_exception),er0 - mov.l er0,@-sp - jmp @SYMBOL_NAME(schedule) - -SYMBOL_NAME_LABEL(ret_from_fork) - mov.l er2,er0 - jsr @SYMBOL_NAME(schedule_tail) - jmp @SYMBOL_NAME(ret_from_exception) - - SYMBOL_NAME_LABEL(resume) /* * er0 = prev @@ -284,7 +304,7 @@ ldc r3l,ccr ldc r3h,exr - + rts SYMBOL_NAME_LABEL(trace_break) @@ -303,11 +323,6 @@ mov.l er1,er0 jsr @SYMBOL_NAME(trace_trap) jmp @SYMBOL_NAME(ret_from_exception) - -SYMBOL_NAME_LABEL(syscall_trampoline) - mov.l er0,er6 - mov.l sp,er0 - jmp @er6 .section .bss SYMBOL_NAME_LABEL(sw_ksp) diff -Nru a/arch/h8300/platform/h8s/generic/timer.c b/arch/h8300/platform/h8s/generic/timer.c --- a/arch/h8300/platform/h8s/generic/timer.c Tue May 18 23:38:07 2004 +++ b/arch/h8300/platform/h8s/generic/timer.c Tue May 18 23:38:07 2004 @@ -23,18 +23,28 @@ #include #include -int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) +#define CMFA 6 + +#define CMIEA 0x40 +#define CCLR_CMA 0x08 +#define CLK_DIV8192 0x03 + +#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */ + +void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *)) { - ctrl_outb(H8300_TIMER_COUNT_DATA,_8TCORA1); - ctrl_outb(0x00,_8TCSR1); - request_irq(76,timer_int,0,"timer",0); - ctrl_outb(0x40|0x08|0x03,_8TCR1); - return 0; + /* 8bit timer module enabled */ + ctrl_outb(ctrl_inb(MSTPCRL) & ~0x01, MSTPCRL); + /* setup 8bit timer ch1 */ + ctrl_outb(H8300_TIMER_FREQ / HZ, _8TCORA1); /* set interval */ + ctrl_outb(0x00, _8TCSR1); /* no output */ + request_irq(76, timer_int, 0, "timer" ,0); + ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR1); /* start count */ } void platform_timer_eoi(void) { - __asm__("bclr #6,@0xffffb3:8"); + *(volatile unsigned char *)_8TCSR1 &= ~(1 << CMFA); } void platform_gettod(int *year, int *mon, int *day, int *hour, diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig --- a/arch/i386/Kconfig Tue May 18 23:38:05 2004 +++ b/arch/i386/Kconfig Tue May 18 23:38:05 2004 @@ -102,10 +102,10 @@ and vice versa. See for details. config X86_GENERICARCH - bool "Generic architecture (Summit, bigsmp, default)" + bool "Generic architecture (Summit, bigsmp, ES7000, default)" depends on SMP help - This option compiles in the Summit, bigsmp, default subarchitectures. + This option compiles in the Summit, bigsmp, ES7000, default subarchitectures. It is intended for a generic binary kernel. config X86_ES7000 @@ -479,6 +479,16 @@ This is purely to save memory - each supported CPU adds approximately eight kilobytes to the kernel image. +config SCHED_SMT + bool "SMT (Hyperthreading) scheduler support" + depends on SMP + default off + help + SMT scheduler support improves the CPU scheduler's decision making + when dealing with Intel Pentium 4 chips with HyperThreading at a + cost of slightly increased overhead in some places. If unsure say + N here. + config PREEMPT bool "Preemptible Kernel" help @@ -709,7 +719,7 @@ # Common NUMA Features config NUMA - bool "Numa Memory Allocation Support" + bool "Numa Memory Allocation and Scheduler Support" depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI)) default n if X86_PC default y if (X86_NUMAQ || X86_SUMMIT) diff -Nru a/arch/i386/Makefile b/arch/i386/Makefile --- a/arch/i386/Makefile Tue May 18 23:38:06 2004 +++ b/arch/i386/Makefile Tue May 18 23:38:06 2004 @@ -19,7 +19,7 @@ OBJCOPYFLAGS := -O binary -R .note -R .comment -S LDFLAGS_vmlinux := -CFLAGS += -pipe +CFLAGS += -pipe -msoft-float # prevent gcc from keeping the stack 16 byte aligned CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,) @@ -92,7 +92,8 @@ # ES7000 subarch support mflags-$(CONFIG_X86_ES7000) := -Iinclude/asm-i386/mach-es7000 -mcore-$(CONFIG_X86_ES7000) := mach-es7000 +mcore-$(CONFIG_X86_ES7000) := mach-default +core-$(CONFIG_X86_ES7000) := arch/i386/mach-es7000/ # default subarch .h files mflags-y += -Iinclude/asm-i386/mach-default diff -Nru a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S --- a/arch/i386/boot/setup.S Tue May 18 23:38:07 2004 +++ b/arch/i386/boot/setup.S Tue May 18 23:38:07 2004 @@ -133,7 +133,7 @@ ramdisk_size: .long 0 # its size in bytes bootsect_kludge: - .word bootsect_helper, SETUPSEG + .long 0 # obsolete heap_end_ptr: .word modelist+1024 # (Header version 0x0201 or later) # space from here (exclusive) down to @@ -156,7 +156,8 @@ # can be located anywhere in # low memory 0x10000 or higher. -ramdisk_max: .long MAXMEM-1 # (Header version 0x0203 or later) +ramdisk_max: .long (MAXMEM-1) & 0x7fffffff + # (Header version 0x0203 or later) # The highest safe address for # the contents of an initrd @@ -837,7 +838,7 @@ subw $DELTA_INITSEG, %si shll $4, %esi # Convert to 32-bit pointer -# jump to startup_32 in arch/i386/kernel/head.S +# jump to startup_32 in arch/i386/boot/compressed/head.S # # NOTE: For high loaded big kernels we need a # jmpi 0x100000,__BOOT_CS @@ -871,88 +872,6 @@ # sequence outb %al, $0x70 lret - -# This routine only gets called, if we get loaded by the simple -# bootsect loader _and_ have a bzImage to load. -# Because there is no place left in the 512 bytes of the boot sector, -# we must emigrate to code space here. -bootsect_helper: - cmpw $0, %cs:bootsect_es - jnz bootsect_second - - movb $0x20, %cs:type_of_loader - movw %es, %ax - shrw $4, %ax - movb %ah, %cs:bootsect_src_base+2 - movw %es, %ax - movw %ax, %cs:bootsect_es - subw $SYSSEG, %ax - lret # nothing else to do for now - -bootsect_second: - pushw %cx - pushw %si - pushw %bx - testw %bx, %bx # 64K full? - jne bootsect_ex - - movw $0x8000, %cx # full 64K, INT15 moves words - pushw %cs - popw %es - movw $bootsect_gdt, %si - movw $0x8700, %ax - int $0x15 - jc bootsect_panic # this, if INT15 fails - - movw %cs:bootsect_es, %es # we reset %es to always point - incb %cs:bootsect_dst_base+2 # to 0x10000 -bootsect_ex: - movb %cs:bootsect_dst_base+2, %ah - shlb $4, %ah # we now have the number of - # moved frames in %ax - xorb %al, %al - popw %bx - popw %si - popw %cx - lret - -bootsect_gdt: - .word 0, 0, 0, 0 - .word 0, 0, 0, 0 - -bootsect_src: - .word 0xffff - -bootsect_src_base: - .byte 0x00, 0x00, 0x01 # base = 0x010000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - -bootsect_dst: - .word 0xffff - -bootsect_dst_base: - .byte 0x00, 0x00, 0x10 # base = 0x100000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - .word 0, 0, 0, 0 # BIOS CS - .word 0, 0, 0, 0 # BIOS DS - -bootsect_es: - .word 0 - -bootsect_panic: - pushw %cs - popw %ds - cld - leaw bootsect_panic_mess, %si - call prtstr - -bootsect_panic_loop: - jmp bootsect_panic_loop - -bootsect_panic_mess: - .string "INT15 refuses to access high mem, giving up." #ifndef CONFIG_X86_VOYAGER diff -Nru a/arch/i386/boot98/setup.S b/arch/i386/boot98/setup.S --- a/arch/i386/boot98/setup.S Tue May 18 23:38:05 2004 +++ b/arch/i386/boot98/setup.S Tue May 18 23:38:05 2004 @@ -146,7 +146,7 @@ ramdisk_size: .long 0 # its size in bytes bootsect_kludge: - .word bootsect_helper, SETUPSEG + .long 0 # obsolete heap_end_ptr: .word modelist+1024 # (Header version 0x0201 or later) # space from here (exclusive) down to @@ -691,91 +691,6 @@ # sequence lret -# This routine only gets called, if we get loaded by the simple -# bootsect loader _and_ have a bzImage to load. -# Because there is no place left in the 512 bytes of the boot sector, -# we must emigrate to code space here. -bootsect_helper: - cmpw $0, %cs:bootsect_es - jnz bootsect_second - - movb $0x20, %cs:type_of_loader - movw %es, %ax - shrw $4, %ax - movb %ah, %cs:bootsect_src_base+2 - movw %es, %ax - movw %ax, %cs:bootsect_es - subw $SYSSEG, %ax - lret # nothing else to do for now - -bootsect_second: - pushw %bx - pushw %cx - pushw %si - pushw %di - testw %bp, %bp # 64K full ? - jne bootsect_ex - - xorw %cx, %cx # zero means full 64K - pushw %cs - popw %es - movw $bootsect_gdt, %bx - xorw %si, %si # source address - xorw %di, %di # destination address - movb $0x90, %ah - int $0x1f - jc bootsect_panic # this, if INT1F fails - - movw %cs:bootsect_es, %es # we reset %es to always point - incb %cs:bootsect_dst_base+2 # to 0x10000 -bootsect_ex: - movb %cs:bootsect_dst_base+2, %ah - shlb $4, %ah # we now have the number of - # moved frames in %ax - xorb %al, %al - popw %di - popw %si - popw %cx - popw %bx - lret - -bootsect_gdt: - .word 0, 0, 0, 0 - .word 0, 0, 0, 0 - -bootsect_src: - .word 0xffff - -bootsect_src_base: - .byte 0x00, 0x00, 0x01 # base = 0x010000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - -bootsect_dst: - .word 0xffff - -bootsect_dst_base: - .byte 0x00, 0x00, 0x10 # base = 0x100000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - .word 0, 0, 0, 0 # BIOS CS - .word 0, 0, 0, 0 # BIOS DS - -bootsect_es: - .word 0 - -bootsect_panic: - pushw %cs - popw %ds - cld - leaw bootsect_panic_mess, %si - call prtstr - -bootsect_panic_loop: - jmp bootsect_panic_loop - -bootsect_panic_mess: - .string "INT1F refuses to access high mem, giving up." # This routine prints one character (in %al) on console. # PC-9800 doesn't have BIOS-function to do it like IBM PC's INT 10h - 0Eh, diff -Nru a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c --- a/arch/i386/kernel/acpi/boot.c Tue May 18 23:38:09 2004 +++ b/arch/i386/kernel/acpi/boot.c Tue May 18 23:38:09 2004 @@ -417,16 +417,6 @@ #endif /* CONFIG_ACPI_BUS */ -#ifdef CONFIG_X86_IO_APIC -/* deprecated in favor of acpi_gsi_to_irq */ -int acpi_irq_to_vector(u32 irq) -{ - if (use_pci_vector() && !platform_legacy_irq(irq)) - irq = IO_APIC_VECTOR(irq); - return irq; -} -#endif - int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) { #ifdef CONFIG_X86_IO_APIC diff -Nru a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c --- a/arch/i386/kernel/cpu/common.c Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/cpu/common.c Tue May 18 23:38:05 2004 @@ -138,8 +138,7 @@ } - -void __init get_cpu_vendor(struct cpuinfo_x86 *c) +void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early) { char *v = c->x86_vendor_id; int i; @@ -150,7 +149,8 @@ (cpu_devs[i]->c_ident[1] && !strcmp(v,cpu_devs[i]->c_ident[1]))) { c->x86_vendor = i; - this_cpu = cpu_devs[i]; + if (!early) + this_cpu = cpu_devs[i]; break; } } @@ -194,6 +194,44 @@ return flag_is_changeable_p(X86_EFLAGS_ID); } +/* Do minimum CPU detection early. + Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment. + The others are not touched to avoid unwanted side effects. */ +void __init early_cpu_detect(void) +{ + struct cpuinfo_x86 *c = &boot_cpu_data; + + if (!have_cpuid_p()) + return; + + /* Get vendor name */ + cpuid(0x00000000, &c->cpuid_level, + (int *)&c->x86_vendor_id[0], + (int *)&c->x86_vendor_id[8], + (int *)&c->x86_vendor_id[4]); + + get_cpu_vendor(c, 1); + + c->x86 = 4; + c->x86_cache_alignment = 32; + + if (c->cpuid_level >= 0x00000001) { + u32 junk, tfms, cap0, misc; + cpuid(0x00000001, &tfms, &misc, &junk, &cap0); + c->x86 = (tfms >> 8) & 15; + c->x86_model = (tfms >> 4) & 15; + if (c->x86 == 0xf) { + c->x86 += (tfms >> 20) & 0xff; + c->x86_model += ((tfms >> 16) & 0xF) << 4; + } + c->x86_mask = tfms & 15; + if (cap0 & (1<<19)) + c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8; + } + + early_intel_workaround(c); +} + void __init generic_identify(struct cpuinfo_x86 * c) { u32 tfms, xlvl; @@ -206,7 +244,7 @@ (int *)&c->x86_vendor_id[8], (int *)&c->x86_vendor_id[4]); - get_cpu_vendor(c); + get_cpu_vendor(c, 0); /* Initialize the standard set of capabilities */ /* Note that the vendor-specific code below might override */ @@ -384,7 +422,6 @@ void __init dodgy_tsc(void) { - get_cpu_vendor(&boot_cpu_data); if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) || ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC )) cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data); @@ -432,9 +469,11 @@ extern int rise_init_cpu(void); extern int nexgen_init_cpu(void); extern int umc_init_cpu(void); +void early_cpu_detect(void); void __init early_cpu_init(void) { + early_cpu_detect(); intel_cpu_init(); cyrix_init_cpu(); nsc_init_cpu(); diff -Nru a/arch/i386/kernel/cpu/cpu.h b/arch/i386/kernel/cpu/cpu.h --- a/arch/i386/kernel/cpu/cpu.h Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/cpu/cpu.h Tue May 18 23:38:05 2004 @@ -26,3 +26,6 @@ extern void generic_identify(struct cpuinfo_x86 * c); extern int have_cpuid_p(void); + +extern void early_intel_workaround(struct cpuinfo_x86 *c); + diff -Nru a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c --- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c Tue May 18 23:38:09 2004 +++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c Tue May 18 23:38:09 2004 @@ -57,8 +57,7 @@ u32 l, h; cpumask_t cpus_allowed, affected_cpu_map; struct cpufreq_freqs freqs; - int hyperthreading = 0; - int sibling = 0; + int j; if (!cpu_online(cpu) || (newstate > DC_DISABLE) || (newstate == DC_RESV)) @@ -68,13 +67,10 @@ cpus_allowed = current->cpus_allowed; /* only run on CPU to be set, or on its sibling */ - affected_cpu_map = cpumask_of_cpu(cpu); -#ifdef CONFIG_X86_HT - hyperthreading = ((cpu_has_ht) && (smp_num_siblings == 2)); - if (hyperthreading) { - sibling = cpu_sibling_map[cpu]; - cpu_set(sibling, affected_cpu_map); - } +#ifdef CONFIG_SMP + affected_cpu_map = cpu_sibling_map[cpu]; +#else + affected_cpu_map = cpumask_of_cpu(cpu); #endif set_cpus_allowed(current, affected_cpu_map); BUG_ON(!cpu_isset(smp_processor_id(), affected_cpu_map)); @@ -97,11 +93,11 @@ /* notifiers */ freqs.old = stock_freq * l / 8; freqs.new = stock_freq * newstate / 8; - freqs.cpu = cpu; - cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - if (hyperthreading) { - freqs.cpu = sibling; - cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + for_each_cpu(j) { + if (cpu_isset(j, affected_cpu_map)) { + freqs.cpu = j; + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + } } rdmsr(MSR_IA32_THERM_STATUS, l, h); @@ -132,10 +128,11 @@ set_cpus_allowed(current, cpus_allowed); /* notifiers */ - cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - if (hyperthreading) { - freqs.cpu = cpu; - cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); + for_each_cpu(j) { + if (cpu_isset(j, affected_cpu_map)) { + freqs.cpu = j; + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); + } } return 0; diff -Nru a/arch/i386/kernel/cpu/intel.c b/arch/i386/kernel/cpu/intel.c --- a/arch/i386/kernel/cpu/intel.c Tue May 18 23:38:06 2004 +++ b/arch/i386/kernel/cpu/intel.c Tue May 18 23:38:06 2004 @@ -28,6 +28,15 @@ struct movsl_mask movsl_mask; #endif +void __init early_intel_workaround(struct cpuinfo_x86 *c) +{ + if (c->x86_vendor != X86_VENDOR_INTEL) + return; + /* Netburst reports 64 bytes clflush size, but does IO in 128 bytes */ + if (c->x86 == 15 && c->x86_cache_alignment == 64) + c->x86_cache_alignment = 128; +} + /* * Early probe support logic for ppro memory erratum #50 * @@ -36,42 +45,14 @@ int __init ppro_with_ram_bug(void) { - char vendor_id[16]; - int ident; - - /* Must have CPUID */ - if(!have_cpuid_p()) - return 0; - if(cpuid_eax(0)<1) - return 0; - - /* Must be Intel */ - cpuid(0, &ident, - (int *)&vendor_id[0], - (int *)&vendor_id[8], - (int *)&vendor_id[4]); - - if(memcmp(vendor_id, "IntelInside", 12)) - return 0; - - ident = cpuid_eax(1); - - /* Model 6 */ - - if(((ident>>8)&15)!=6) - return 0; - - /* Pentium Pro */ - - if(((ident>>4)&15)!=1) - return 0; - - if((ident&15) < 8) - { + /* Uses data from early_cpu_detect now */ + if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && + boot_cpu_data.x86 == 6 && + boot_cpu_data.x86_model == 1 && + boot_cpu_data.x86_mask < 8) { printk(KERN_INFO "Pentium Pro with Errata#50 detected. Taking evasive action.\n"); return 1; } - printk(KERN_INFO "Your Pentium Pro seems ok.\n"); return 0; } diff -Nru a/arch/i386/kernel/cpu/mcheck/p4.c b/arch/i386/kernel/cpu/mcheck/p4.c --- a/arch/i386/kernel/cpu/mcheck/p4.c Tue May 18 23:38:08 2004 +++ b/arch/i386/kernel/cpu/mcheck/p4.c Tue May 18 23:38:08 2004 @@ -38,7 +38,8 @@ #ifdef CONFIG_X86_MCE_P4THERMAL static void unexpected_thermal_interrupt(struct pt_regs *regs) { - printk(KERN_ERR "CPU#%d: Unexpected LVT TMR interrupt!\n", smp_processor_id()); + printk(KERN_ERR "CPU%d: Unexpected LVT TMR interrupt!\n", + smp_processor_id()); } /* P4/Xeon Thermal transition interrupt handler */ @@ -46,15 +47,21 @@ { u32 l, h; unsigned int cpu = smp_processor_id(); + static unsigned long next[NR_CPUS]; ack_APIC_irq(); - rdmsr (MSR_IA32_THERM_STATUS, l, h); - if (l & 1) { - printk(KERN_EMERG "CPU#%d: Temperature above threshold\n", cpu); - printk(KERN_EMERG "CPU#%d: Running in modulated clock mode\n", cpu); + if (time_after(next[cpu], jiffies)) + return; + + next[cpu] = jiffies + HZ*5; + rdmsr(MSR_IA32_THERM_STATUS, l, h); + if (l & 0x1) { + printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu); + printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n", + cpu); } else { - printk(KERN_INFO "CPU#%d: Temperature/speed normal\n", cpu); + printk(KERN_INFO "CPU%d: Temperature/speed normal\n", cpu); } } @@ -89,13 +96,15 @@ rdmsr (MSR_IA32_MISC_ENABLE, l, h); h = apic_read(APIC_LVTTHMR); if ((l & (1<<3)) && (h & APIC_DM_SMI)) { - printk(KERN_DEBUG "CPU#%d: Thermal monitoring handled by SMI\n", cpu); + printk(KERN_DEBUG "CPU%d: Thermal monitoring handled by SMI\n", + cpu); return; /* -EBUSY */ } /* check whether a vector already exists, temporarily masked? */ if (h & APIC_VECTOR_MASK) { - printk(KERN_DEBUG "CPU#%d: Thermal LVT vector (%#x) already installed\n", + printk(KERN_DEBUG "CPU%d: Thermal LVT vector (%#x) already " + "installed\n", cpu, (h & APIC_VECTOR_MASK)); return; /* -EBUSY */ } @@ -116,7 +125,7 @@ l = apic_read (APIC_LVTTHMR); apic_write_around (APIC_LVTTHMR, l & ~APIC_LVT_MASKED); - printk (KERN_INFO "CPU#%d: Thermal monitoring enabled\n", cpu); + printk (KERN_INFO "CPU%d: Thermal monitoring enabled\n", cpu); return; } #endif /* CONFIG_X86_MCE_P4THERMAL */ @@ -247,7 +256,8 @@ rdmsr (MSR_IA32_MCG_CAP, l, h); if (l & (1<<9)) {/* MCG_EXT_P */ mce_num_extended_msrs = (l >> 16) & 0xff; - printk (KERN_INFO "CPU#%d: Intel P4/Xeon Extended MCE MSRs (%d) available\n", + printk (KERN_INFO "CPU%d: Intel P4/Xeon Extended MCE MSRs (%d)" + " available\n", smp_processor_id(), mce_num_extended_msrs); #ifdef CONFIG_X86_MCE_P4THERMAL diff -Nru a/arch/i386/kernel/cpuid.c b/arch/i386/kernel/cpuid.c --- a/arch/i386/kernel/cpuid.c Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/cpuid.c Tue May 18 23:38:05 2004 @@ -10,7 +10,6 @@ * * ----------------------------------------------------------------------- */ - /* * cpuid.c * @@ -46,131 +45,132 @@ #ifdef CONFIG_SMP struct cpuid_command { - int cpu; - u32 reg; - u32 *data; + int cpu; + u32 reg; + u32 *data; }; static void cpuid_smp_cpuid(void *cmd_block) { - struct cpuid_command *cmd = (struct cpuid_command *) cmd_block; - - if ( cmd->cpu == smp_processor_id() ) - cpuid(cmd->reg, &cmd->data[0], &cmd->data[1], &cmd->data[2], &cmd->data[3]); + struct cpuid_command *cmd = (struct cpuid_command *)cmd_block; + + if (cmd->cpu == smp_processor_id()) + cpuid(cmd->reg, &cmd->data[0], &cmd->data[1], &cmd->data[2], + &cmd->data[3]); } -static inline void do_cpuid(int cpu, u32 reg, u32 *data) +static inline void do_cpuid(int cpu, u32 reg, u32 * data) { - struct cpuid_command cmd; - - preempt_disable(); - if ( cpu == smp_processor_id() ) { - cpuid(reg, &data[0], &data[1], &data[2], &data[3]); - } else { - cmd.cpu = cpu; - cmd.reg = reg; - cmd.data = data; - - smp_call_function(cpuid_smp_cpuid, &cmd, 1, 1); - } - preempt_enable(); + struct cpuid_command cmd; + + preempt_disable(); + if (cpu == smp_processor_id()) { + cpuid(reg, &data[0], &data[1], &data[2], &data[3]); + } else { + cmd.cpu = cpu; + cmd.reg = reg; + cmd.data = data; + + smp_call_function(cpuid_smp_cpuid, &cmd, 1, 1); + } + preempt_enable(); } -#else /* ! CONFIG_SMP */ +#else /* ! CONFIG_SMP */ -static inline void do_cpuid(int cpu, u32 reg, u32 *data) +static inline void do_cpuid(int cpu, u32 reg, u32 * data) { - cpuid(reg, &data[0], &data[1], &data[2], &data[3]); + cpuid(reg, &data[0], &data[1], &data[2], &data[3]); } -#endif /* ! CONFIG_SMP */ +#endif /* ! CONFIG_SMP */ static loff_t cpuid_seek(struct file *file, loff_t offset, int orig) { - loff_t ret; + loff_t ret; + + lock_kernel(); - lock_kernel(); + switch (orig) { + case 0: + file->f_pos = offset; + ret = file->f_pos; + break; + case 1: + file->f_pos += offset; + ret = file->f_pos; + break; + default: + ret = -EINVAL; + } + + unlock_kernel(); + return ret; +} + +static ssize_t cpuid_read(struct file *file, char *buf, + size_t count, loff_t * ppos) +{ + u32 *tmp = (u32 *) buf; + u32 data[4]; + size_t rv; + u32 reg = *ppos; + int cpu = iminor(file->f_dentry->d_inode); + + if (count % 16) + return -EINVAL; /* Invalid chunk size */ + + for (rv = 0; count; count -= 16) { + do_cpuid(cpu, reg, data); + if (copy_to_user(tmp, &data, 16)) + return -EFAULT; + tmp += 4; + *ppos = reg++; + } - switch (orig) { - case 0: - file->f_pos = offset; - ret = file->f_pos; - break; - case 1: - file->f_pos += offset; - ret = file->f_pos; - break; - default: - ret = -EINVAL; - } - - unlock_kernel(); - return ret; -} - -static ssize_t cpuid_read(struct file * file, char * buf, - size_t count, loff_t *ppos) -{ - u32 *tmp = (u32 *)buf; - u32 data[4]; - size_t rv; - u32 reg = *ppos; - int cpu = iminor(file->f_dentry->d_inode); - - if ( count % 16 ) - return -EINVAL; /* Invalid chunk size */ - - for ( rv = 0 ; count ; count -= 16 ) { - do_cpuid(cpu, reg, data); - if ( copy_to_user(tmp,&data,16) ) - return -EFAULT; - tmp += 4; - *ppos = reg++; - } - - return ((char *)tmp) - buf; + return ((char *)tmp) - buf; } static int cpuid_open(struct inode *inode, struct file *file) { - int cpu = iminor(file->f_dentry->d_inode); - struct cpuinfo_x86 *c = &(cpu_data)[cpu]; + int cpu = iminor(file->f_dentry->d_inode); + struct cpuinfo_x86 *c = &(cpu_data)[cpu]; + + if (!cpu_online(cpu)) + return -ENXIO; /* No such CPU */ + if (c->cpuid_level < 0) + return -EIO; /* CPUID not supported */ - if (!cpu_online(cpu)) - return -ENXIO; /* No such CPU */ - if ( c->cpuid_level < 0 ) - return -EIO; /* CPUID not supported */ - - return 0; + return 0; } /* * File operations we support */ static struct file_operations cpuid_fops = { - .owner = THIS_MODULE, - .llseek = cpuid_seek, - .read = cpuid_read, - .open = cpuid_open, + .owner = THIS_MODULE, + .llseek = cpuid_seek, + .read = cpuid_read, + .open = cpuid_open, }; int __init cpuid_init(void) { - if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) { - printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n", - CPUID_MAJOR); - return -EBUSY; - } + if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) { + printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n", + CPUID_MAJOR); + return -EBUSY; + } - return 0; + return 0; } void __exit cpuid_exit(void) { - unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); + unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); } module_init(cpuid_init); -module_exit(cpuid_exit) +module_exit(cpuid_exit); MODULE_AUTHOR("H. Peter Anvin "); MODULE_DESCRIPTION("x86 generic CPUID driver"); diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c --- a/arch/i386/kernel/io_apic.c Tue May 18 23:38:06 2004 +++ b/arch/i386/kernel/io_apic.c Tue May 18 23:38:06 2004 @@ -317,8 +317,7 @@ #define IRQ_ALLOWED(cpu, allowed_mask) cpu_isset(cpu, allowed_mask) -#define CPU_TO_PACKAGEINDEX(i) \ - ((physical_balance && i > cpu_sibling_map[i]) ? cpu_sibling_map[i] : i) +#define CPU_TO_PACKAGEINDEX(i) (first_cpu(cpu_sibling_map[i])) #define MAX_BALANCED_IRQ_INTERVAL (5*HZ) #define MIN_BALANCED_IRQ_INTERVAL (HZ/2) @@ -401,6 +400,7 @@ unsigned long max_cpu_irq = 0, min_cpu_irq = (~0); unsigned long move_this_load = 0; int max_loaded = 0, min_loaded = 0; + int load; unsigned long useful_load_threshold = balanced_irq_interval + 10; int selected_irq; int tmp_loaded, first_attempt = 1; @@ -452,7 +452,7 @@ for (i = 0; i < NR_CPUS; i++) { if (!cpu_online(i)) continue; - if (physical_balance && i > cpu_sibling_map[i]) + if (i != CPU_TO_PACKAGEINDEX(i)) continue; if (min_cpu_irq > CPU_IRQ(i)) { min_cpu_irq = CPU_IRQ(i); @@ -471,7 +471,7 @@ for (i = 0; i < NR_CPUS; i++) { if (!cpu_online(i)) continue; - if (physical_balance && i > cpu_sibling_map[i]) + if (i != CPU_TO_PACKAGEINDEX(i)) continue; if (max_cpu_irq <= CPU_IRQ(i)) continue; @@ -551,9 +551,14 @@ * We seek the least loaded sibling by making the comparison * (A+B)/2 vs B */ - if (physical_balance && (CPU_IRQ(min_loaded) >> 1) > - CPU_IRQ(cpu_sibling_map[min_loaded])) - min_loaded = cpu_sibling_map[min_loaded]; + load = CPU_IRQ(min_loaded) >> 1; + for_each_cpu_mask(j, cpu_sibling_map[min_loaded]) { + if (load > CPU_IRQ(j)) { + /* This won't change cpu_sibling_map[min_loaded] */ + load = CPU_IRQ(j); + min_loaded = j; + } + } cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]); target_cpu_mask = cpumask_of_cpu(min_loaded); diff -Nru a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c --- a/arch/i386/kernel/nmi.c Tue May 18 23:38:07 2004 +++ b/arch/i386/kernel/nmi.c Tue May 18 23:38:07 2004 @@ -33,7 +33,8 @@ unsigned int nmi_watchdog = NMI_NONE; static unsigned int nmi_hz = HZ; -unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */ +static unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */ +static unsigned int nmi_p4_cccr_val; extern void show_registers(struct pt_regs *regs); /* @@ -80,7 +81,8 @@ #define P4_ESCR_EVENT_SELECT(N) ((N)<<25) #define P4_ESCR_OS (1<<3) #define P4_ESCR_USR (1<<2) -#define P4_CCCR_OVF_PMI (1<<26) +#define P4_CCCR_OVF_PMI0 (1<<26) +#define P4_CCCR_OVF_PMI1 (1<<27) #define P4_CCCR_THRESHOLD(N) ((N)<<20) #define P4_CCCR_COMPLEMENT (1<<19) #define P4_CCCR_COMPARE (1<<18) @@ -93,7 +95,7 @@ #define MSR_P4_IQ_COUNTER0 0x30C #define P4_NMI_CRU_ESCR0 (P4_ESCR_EVENT_SELECT(0x3F)|P4_ESCR_OS|P4_ESCR_USR) #define P4_NMI_IQ_CCCR0 \ - (P4_CCCR_OVF_PMI|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT| \ + (P4_CCCR_OVF_PMI0|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT| \ P4_CCCR_COMPARE|P4_CCCR_REQUIRED|P4_CCCR_ESCR_SELECT(4)|P4_CCCR_ENABLE) int __init check_nmi_watchdog (void) @@ -364,6 +366,11 @@ return 0; nmi_perfctr_msr = MSR_P4_IQ_COUNTER0; + nmi_p4_cccr_val = P4_NMI_IQ_CCCR0; +#ifdef CONFIG_SMP + if (smp_num_siblings == 2) + nmi_p4_cccr_val |= P4_CCCR_OVF_PMI1; +#endif if (!(misc_enable & MSR_P4_MISC_ENABLE_PEBS_UNAVAIL)) clear_msr_range(0x3F1, 2); @@ -381,7 +388,7 @@ Dprintk("setting P4_IQ_COUNTER0 to 0x%08lx\n", -(cpu_khz/nmi_hz*1000)); wrmsr(MSR_P4_IQ_COUNTER0, -(cpu_khz/nmi_hz*1000), -1); apic_write(APIC_LVTPC, APIC_DM_NMI); - wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0); + wrmsr(MSR_P4_IQ_CCCR0, nmi_p4_cccr_val, 0); return 1; } @@ -498,7 +505,7 @@ * - LVTPC is masked on interrupt and must be * unmasked by the LVTPC handler. */ - wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0); + wrmsr(MSR_P4_IQ_CCCR0, nmi_p4_cccr_val, 0); apic_write(APIC_LVTPC, APIC_DM_NMI); } else if (nmi_perfctr_msr == MSR_P6_PERFCTR0) { diff -Nru a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c --- a/arch/i386/kernel/process.c Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/process.c Tue May 18 23:38:05 2004 @@ -633,11 +633,6 @@ return error; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) #define top_esp (THREAD_SIZE - sizeof(unsigned long)) #define top_ebp (THREAD_SIZE - 2*sizeof(unsigned long)) @@ -658,14 +653,12 @@ if (ebp < stack_page || ebp > top_ebp+stack_page) return 0; eip = *(unsigned long *) (ebp+4); - if (eip < first_sched || eip >= last_sched) + if (!in_sched_functions(eip)) return eip; ebp = *(unsigned long *) ebp; } while (count++ < 16); return 0; } -#undef last_sched -#undef first_sched /* * sys_alloc_thread_area: get a yet unused TLS descriptor index. @@ -744,7 +737,7 @@ ((desc)->a & 0x0ffff) | \ ((desc)->b & 0xf0000) ) -#define GET_32BIT(desc) (((desc)->b >> 23) & 1) +#define GET_32BIT(desc) (((desc)->b >> 22) & 1) #define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) #define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) #define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) diff -Nru a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c --- a/arch/i386/kernel/ptrace.c Tue May 18 23:38:06 2004 +++ b/arch/i386/kernel/ptrace.c Tue May 18 23:38:06 2004 @@ -174,7 +174,7 @@ ((desc)->a & 0x0ffff) | \ ((desc)->b & 0xf0000) ) -#define GET_32BIT(desc) (((desc)->b >> 23) & 1) +#define GET_32BIT(desc) (((desc)->b >> 22) & 1) #define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) #define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) #define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) diff -Nru a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c --- a/arch/i386/kernel/setup.c Tue May 18 23:38:07 2004 +++ b/arch/i386/kernel/setup.c Tue May 18 23:38:07 2004 @@ -65,6 +65,7 @@ #ifdef CONFIG_EFI int efi_enabled = 0; +EXPORT_SYMBOL(efi_enabled); #endif /* cpu data as detected by the assembly code in head.S */ diff -Nru a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c --- a/arch/i386/kernel/smp.c Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/smp.c Tue May 18 23:38:05 2004 @@ -519,6 +519,9 @@ if (!cpus) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c --- a/arch/i386/kernel/smpboot.c Tue May 18 23:38:07 2004 +++ b/arch/i386/kernel/smpboot.c Tue May 18 23:38:07 2004 @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -936,7 +937,7 @@ /* Where the IO area was mapped on multiquad, always 0 otherwise */ void *xquad_portio; -int cpu_sibling_map[NR_CPUS] __cacheline_aligned; +cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned; static void __init smp_boot_cpus(unsigned int max_cpus) { @@ -955,6 +956,8 @@ current_thread_info()->cpu = 0; smp_tune_scheduling(); + cpus_clear(cpu_sibling_map[0]); + cpu_set(0, cpu_sibling_map[0]); /* * If we couldn't find an SMP configuration at boot time, @@ -1081,34 +1084,39 @@ Dprintk("Boot done.\n"); /* - * If Hyper-Threading is avaialble, construct cpu_sibling_map[], so - * that we can tell the sibling CPU efficiently. + * construct cpu_sibling_map[], so that we can tell sibling CPUs + * efficiently. */ - if (cpu_has_ht && smp_num_siblings > 1) { - for (cpu = 0; cpu < NR_CPUS; cpu++) - cpu_sibling_map[cpu] = NO_PROC_ID; - - for (cpu = 0; cpu < NR_CPUS; cpu++) { - int i; - if (!cpu_isset(cpu, cpu_callout_map)) - continue; + for (cpu = 0; cpu < NR_CPUS; cpu++) + cpus_clear(cpu_sibling_map[cpu]); + + for (cpu = 0; cpu < NR_CPUS; cpu++) { + int siblings = 0; + int i; + if (!cpu_isset(cpu, cpu_callout_map)) + continue; + if (smp_num_siblings > 1) { for (i = 0; i < NR_CPUS; i++) { - if (i == cpu || !cpu_isset(i, cpu_callout_map)) + if (!cpu_isset(i, cpu_callout_map)) continue; if (phys_proc_id[cpu] == phys_proc_id[i]) { - cpu_sibling_map[cpu] = i; - printk("cpu_sibling_map[%d] = %d\n", cpu, cpu_sibling_map[cpu]); - break; + siblings++; + cpu_set(i, cpu_sibling_map[cpu]); } } - if (cpu_sibling_map[cpu] == NO_PROC_ID) { - smp_num_siblings = 1; - printk(KERN_WARNING "WARNING: No sibling found for CPU %d.\n", cpu); - } + } else { + siblings++; + cpu_set(cpu, cpu_sibling_map[cpu]); } + + if (siblings != smp_num_siblings) + printk(KERN_WARNING "WARNING: %d siblings found for CPU%d, should be %d\n", siblings, cpu, smp_num_siblings); } + if (nmi_watchdog == NMI_LOCAL_APIC) + check_nmi_watchdog(); + smpboot_setup_io_apic(); setup_boot_APIC_clock(); @@ -1119,6 +1127,209 @@ if (cpu_has_tsc && cpucount && cpu_khz) synchronize_tsc_bp(); } + +#ifdef CONFIG_SCHED_SMT +#ifdef CONFIG_NUMA +static struct sched_group sched_group_cpus[NR_CPUS]; +static struct sched_group sched_group_phys[NR_CPUS]; +static struct sched_group sched_group_nodes[MAX_NUMNODES]; +static DEFINE_PER_CPU(struct sched_domain, cpu_domains); +static DEFINE_PER_CPU(struct sched_domain, phys_domains); +static DEFINE_PER_CPU(struct sched_domain, node_domains); +__init void arch_init_sched_domains(void) +{ + int i; + struct sched_group *first = NULL, *last = NULL; + + /* Set up domains */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_domain *phys_domain = &per_cpu(phys_domains, i); + struct sched_domain *node_domain = &per_cpu(node_domains, i); + int node = cpu_to_node(i); + cpumask_t nodemask = node_to_cpumask(node); + + *cpu_domain = SD_SIBLING_INIT; + cpu_domain->span = cpu_sibling_map[i]; + cpu_domain->parent = phys_domain; + cpu_domain->groups = &sched_group_cpus[i]; + + *phys_domain = SD_CPU_INIT; + phys_domain->span = nodemask; + phys_domain->parent = node_domain; + phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)]; + + *node_domain = SD_NODE_INIT; + node_domain->span = cpu_possible_map; + node_domain->groups = &sched_group_nodes[cpu_to_node(i)]; + } + + /* Set up CPU (sibling) groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + int j; + first = last = NULL; + + if (i != first_cpu(cpu_domain->span)) + continue; + + for_each_cpu_mask(j, cpu_domain->span) { + struct sched_group *cpu = &sched_group_cpus[j]; + + cpu->cpumask = CPU_MASK_NONE; + cpu_set(j, cpu->cpumask); + cpu->cpu_power = SCHED_LOAD_SCALE; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + for (i = 0; i < MAX_NUMNODES; i++) { + int j; + cpumask_t nodemask; + struct sched_group *node = &sched_group_nodes[i]; + cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map); + + if (cpus_empty(nodemask)) + continue; + + first = last = NULL; + /* Set up physical groups */ + for_each_cpu_mask(j, nodemask) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, j); + struct sched_group *cpu = &sched_group_phys[j]; + + if (j != first_cpu(cpu_domain->span)) + continue; + + cpu->cpumask = cpu_domain->span; + /* + * Make each extra sibling increase power by 10% of + * the basic CPU. This is very arbitrary. + */ + cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10; + node->cpu_power += cpu->cpu_power; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + /* Set up nodes */ + first = last = NULL; + for (i = 0; i < MAX_NUMNODES; i++) { + struct sched_group *cpu = &sched_group_nodes[i]; + cpumask_t nodemask; + cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map); + + if (cpus_empty(nodemask)) + continue; + + cpu->cpumask = nodemask; + /* ->cpu_power already setup */ + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + + mb(); + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + cpu_attach_domain(cpu_domain, i); + } +} +#else /* !CONFIG_NUMA */ +static struct sched_group sched_group_cpus[NR_CPUS]; +static struct sched_group sched_group_phys[NR_CPUS]; +static DEFINE_PER_CPU(struct sched_domain, cpu_domains); +static DEFINE_PER_CPU(struct sched_domain, phys_domains); +__init void arch_init_sched_domains(void) +{ + int i; + struct sched_group *first = NULL, *last = NULL; + + /* Set up domains */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_domain *phys_domain = &per_cpu(phys_domains, i); + + *cpu_domain = SD_SIBLING_INIT; + cpu_domain->span = cpu_sibling_map[i]; + cpu_domain->parent = phys_domain; + cpu_domain->groups = &sched_group_cpus[i]; + + *phys_domain = SD_CPU_INIT; + phys_domain->span = cpu_possible_map; + phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)]; + } + + /* Set up CPU (sibling) groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + int j; + first = last = NULL; + + if (i != first_cpu(cpu_domain->span)) + continue; + + for_each_cpu_mask(j, cpu_domain->span) { + struct sched_group *cpu = &sched_group_cpus[j]; + + cpus_clear(cpu->cpumask); + cpu_set(j, cpu->cpumask); + cpu->cpu_power = SCHED_LOAD_SCALE; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + first = last = NULL; + /* Set up physical groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_group *cpu = &sched_group_phys[i]; + + if (i != first_cpu(cpu_domain->span)) + continue; + + cpu->cpumask = cpu_domain->span; + /* See SMT+NUMA setup for comment */ + cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + + mb(); + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + cpu_attach_domain(cpu_domain, i); + } +} +#endif /* CONFIG_NUMA */ +#endif /* CONFIG_SCHED_SMT */ /* These are wrappers to interface to the new boot process. Someone who understands all this stuff should rewrite it properly. --RR 15/Jul/02 */ diff -Nru a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c --- a/arch/i386/kernel/traps.c Tue May 18 23:38:05 2004 +++ b/arch/i386/kernel/traps.c Tue May 18 23:38:05 2004 @@ -94,27 +94,70 @@ static int kstack_depth_to_print = 24; -void show_trace(struct task_struct *task, unsigned long * stack) +static int valid_stack_ptr(struct task_struct *task, void *p) +{ + if (p <= (void *)task->thread_info) + return 0; + if (kstack_end(p)) + return 0; + return 1; +} + +#ifdef CONFIG_FRAME_POINTER +void print_context_stack(struct task_struct *task, unsigned long *stack, + unsigned long ebp) { unsigned long addr; - if (!stack) - stack = (unsigned long*)&stack; + while (valid_stack_ptr(task, (void *)ebp)) { + addr = *(unsigned long *)(ebp + 4); + printk(" [<%08lx>] ", addr); + print_symbol("%s", addr); + printk("\n"); + ebp = *(unsigned long *)ebp; + } +} +#else +void print_context_stack(struct task_struct *task, unsigned long *stack, + unsigned long ebp) +{ + unsigned long addr; - printk("Call Trace:"); -#ifdef CONFIG_KALLSYMS - printk("\n"); + while (!kstack_end(stack)) { + addr = *stack++; + if (kernel_text_address(addr)) { + printk(" [<%08lx>] ", addr); + print_symbol("%s\n", addr); + } + } +} #endif + +void show_trace(struct task_struct *task, unsigned long * stack) +{ + unsigned long ebp; + + if (!task) + task = current; + + if (!valid_stack_ptr(task, stack)) { + printk("Stack pointer is garbage, not printing trace\n"); + return; + } + + if (task == current) { + /* Grab ebp right from our regs */ + asm ("movl %%ebp, %0" : "=r" (ebp) : ); + } else { + /* ebp is the last reg pushed by switch_to */ + ebp = *(unsigned long *) task->thread.esp; + } + while (1) { struct thread_info *context; - context = (struct thread_info*) ((unsigned long)stack & (~(THREAD_SIZE - 1))); - while (!kstack_end(stack)) { - addr = *stack++; - if (kernel_text_address(addr)) { - printk(" [<%08lx>] ", addr); - print_symbol("%s\n", addr); - } - } + context = (struct thread_info *) + ((unsigned long)stack & (~(THREAD_SIZE - 1))); + print_context_stack(task, stack, ebp); stack = (unsigned long*)context->previous_esp; if (!stack) break; @@ -143,7 +186,7 @@ printk("\n "); printk("%08lx ", *stack++); } - printk("\n"); + printk("\nCall Trace:\n"); show_trace(task, esp); } diff -Nru a/arch/i386/mach-es7000/Makefile b/arch/i386/mach-es7000/Makefile --- a/arch/i386/mach-es7000/Makefile Tue May 18 23:38:07 2004 +++ b/arch/i386/mach-es7000/Makefile Tue May 18 23:38:07 2004 @@ -2,4 +2,5 @@ # Makefile for the linux kernel. # -obj-y := setup.o topology.o es7000.o +obj-$(CONFIG_X86_ES7000) := es7000plat.o +obj-$(CONFIG_X86_GENERICARCH) := es7000plat.o diff -Nru a/arch/i386/mach-es7000/es7000.c b/arch/i386/mach-es7000/es7000.c --- a/arch/i386/mach-es7000/es7000.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,279 +0,0 @@ -/* - * Written by: Garry Forsgren, Unisys Corporation - * Natalie Protasevich, Unisys Corporation - * This file contains the code to configure and interface - * with Unisys ES7000 series hardware system manager. - * - * Copyright (c) 2003 Unisys Corporation. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Unisys Corporation, Township Line & Union Meeting - * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or: - * - * http://www.unisys.com - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "es7000.h" - -/* - * ES7000 Globals - */ - -volatile unsigned long *psai = NULL; -struct mip_reg *mip_reg; -struct mip_reg *host_reg; -int mip_port; -unsigned long mip_addr, host_addr; - -/* - * Parse the OEM Table - */ - -void __init -parse_unisys_oem (char *oemptr, int oem_entries) -{ - int i; - int success = 0; - unsigned char type, size; - unsigned long val; - char *tp = NULL; - struct psai *psaip = NULL; - struct mip_reg_info *mi; - struct mip_reg *host, *mip; - - tp = oemptr; - - tp += 8; - - for (i=0; i <= oem_entries; i++) { - type = *tp++; - size = *tp++; - tp -= 2; - switch (type) { - case MIP_REG: - mi = (struct mip_reg_info *)tp; - val = MIP_RD_LO(mi->host_reg); - host_addr = val; - host = (struct mip_reg *)val; - host_reg = __va(host); - val = MIP_RD_LO(mi->mip_reg); - mip_addr = val; - mip = (struct mip_reg *)val; - mip_reg = __va(mip); - Dprintk("es7000_mipcfg: host_reg = 0x%lx \n", - (unsigned long)host_reg); - Dprintk("es7000_mipcfg: mip_reg = 0x%lx \n", - (unsigned long)mip_reg); - success++; - break; - case MIP_PSAI_REG: - psaip = (struct psai *)tp; - if (tp != NULL) { - if (psaip->addr) - psai = __va(psaip->addr); - else - psai = NULL; - success++; - } - break; - default: - break; - } - if (i == 6) break; - tp += size; - } - - if (success < 2) { - printk("\nNo ES7000 found.\n"); - es7000_plat = 0; - } else { - printk("\nEnabling ES7000 specific features...\n"); - es7000_plat = 1; - } - return; -} - -int __init -find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length) -{ - struct acpi_table_rsdp *rsdp = NULL; - unsigned long rsdp_phys = 0; - struct acpi_table_header *header = NULL; - int i; - struct acpi_table_sdt sdt; - - rsdp_phys = acpi_find_rsdp(); - rsdp = __va(rsdp_phys); - if (rsdp->rsdt_address) { - struct acpi_table_rsdt *mapped_rsdt = NULL; - sdt.pa = rsdp->rsdt_address; - - header = (struct acpi_table_header *) - __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header)); - if (!header) - return -ENODEV; - - sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3; - mapped_rsdt = (struct acpi_table_rsdt *) - __acpi_map_table(sdt.pa, header->length); - if (!mapped_rsdt) - return -ENODEV; - - header = &mapped_rsdt->header; - - for (i = 0; i < sdt.count; i++) - sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i]; - }; - for (i = 0; i < sdt.count; i++) { - - header = (struct acpi_table_header *) - __acpi_map_table(sdt.entry[i].pa, - sizeof(struct acpi_table_header)); - if (!header) - continue; - if (!strncmp((char *) &header->signature, "OEM1", 4)) { - if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) { - void *addr; - struct oem_table *t; - acpi_table_print(header, sdt.entry[i].pa); - t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length); - addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize); - *length = header->length; - *oem_addr = (unsigned long) addr; - return 0; - } - } - } - printk("ES7000: did not find Unisys ACPI OEM table!\n"); - return -1; -} - -static void -es7000_spin(int n) -{ - int i = 0; - - while (i++ < n) - rep_nop(); -} - -static int __init -es7000_mip_write(struct mip_reg *mip_reg) -{ - int status = 0; - int spin; - - spin = MIP_SPIN; - while (((unsigned long long)host_reg->off_38 & - (unsigned long long)MIP_VALID) != 0) { - if (--spin <= 0) { - printk("es7000_mip_write: Timeout waiting for Host Valid Flag"); - return -1; - } - es7000_spin(MIP_SPIN); - } - - memcpy(host_reg, mip_reg, sizeof(struct mip_reg)); - outb(1, mip_port); - - spin = MIP_SPIN; - - while (((unsigned long long)mip_reg->off_38 & - (unsigned long long)MIP_VALID) == 0) { - if (--spin <= 0) { - printk("es7000_mip_write: Timeout waiting for MIP Valid Flag"); - return -1; - } - es7000_spin(MIP_SPIN); - } - - status = ((unsigned long long)mip_reg->off_0 & - (unsigned long long)0xffff0000000000) >> 48; - mip_reg->off_38 = ((unsigned long long)mip_reg->off_38 & - (unsigned long long)~MIP_VALID); - return status; -} - -int -es7000_start_cpu(int cpu, unsigned long eip) -{ - unsigned long vect = 0, psaival = 0; - - if (psai == NULL) - return -1; - - vect = ((unsigned long)__pa(eip)/0x1000) << 16; - psaival = (0x1000000 | vect | cpu); - - while (*psai & 0x1000000) - ; - - *psai = psaival; - - return 0; - -} - -int -es7000_stop_cpu(int cpu) -{ - int startup; - - if (psai == NULL) - return -1; - - startup= (0x1000000 | cpu); - - while ((*psai & 0xff00ffff) != startup) - ; - - startup = (*psai & 0xff0000) >> 16; - *psai &= 0xffffff; - - return 0; - -} - -void __init -es7000_sw_apic() -{ - if (es7000_plat) { - int mip_status; - struct mip_reg es7000_mip_reg; - - printk("ES7000: Enabling APIC mode.\n"); - memset(&es7000_mip_reg, 0, sizeof(struct mip_reg)); - es7000_mip_reg.off_0 = MIP_SW_APIC; - es7000_mip_reg.off_38 = (MIP_VALID); - while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) - printk("es7000_sw_apic: command failed, status = %x\n", - mip_status); - return; - } -} diff -Nru a/arch/i386/mach-es7000/es7000.h b/arch/i386/mach-es7000/es7000.h --- a/arch/i386/mach-es7000/es7000.h Tue May 18 23:38:05 2004 +++ b/arch/i386/mach-es7000/es7000.h Tue May 18 23:38:05 2004 @@ -30,6 +30,7 @@ #define MIP_BUSY 1 #define MIP_SPIN 0xf0000 #define MIP_VALID 0x0100000000000000 +#define MIP_PORT(VALUE) ((VALUE >> 32) & 0xffff) #define MIP_RD_LO(VALUE) (VALUE & 0xffffffff) @@ -103,7 +104,7 @@ #define MIP_SW_APIC 0x1020b #define MIP_FUNC(VALUE) (VALUE & 0xff) -extern void parse_unisys_oem (char *oemptr, int oem_entries); +extern int parse_unisys_oem (char *oemptr, int oem_entries); extern int find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length); extern int es7000_start_cpu(int cpu, unsigned long eip); extern void es7000_sw_apic(void); diff -Nru a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/i386/mach-es7000/es7000plat.c Tue May 18 23:38:09 2004 @@ -0,0 +1,280 @@ +/* + * Written by: Garry Forsgren, Unisys Corporation + * Natalie Protasevich, Unisys Corporation + * This file contains the code to configure and interface + * with Unisys ES7000 series hardware system manager. + * + * Copyright (c) 2003 Unisys Corporation. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write the Free Software Foundation, Inc., 59 + * Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Unisys Corporation, Township Line & Union Meeting + * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or: + * + * http://www.unisys.com + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "es7000.h" + +/* + * ES7000 Globals + */ + +volatile unsigned long *psai = NULL; +struct mip_reg *mip_reg; +struct mip_reg *host_reg; +int mip_port; +unsigned long mip_addr, host_addr; + +/* + * Parse the OEM Table + */ + +int __init +parse_unisys_oem (char *oemptr, int oem_entries) +{ + int i; + int success = 0; + unsigned char type, size; + unsigned long val; + char *tp = NULL; + struct psai *psaip = NULL; + struct mip_reg_info *mi; + struct mip_reg *host, *mip; + + tp = oemptr; + + tp += 8; + + for (i=0; i <= oem_entries; i++) { + type = *tp++; + size = *tp++; + tp -= 2; + switch (type) { + case MIP_REG: + mi = (struct mip_reg_info *)tp; + val = MIP_RD_LO(mi->host_reg); + host_addr = val; + host = (struct mip_reg *)val; + host_reg = __va(host); + val = MIP_RD_LO(mi->mip_reg); + mip_port = MIP_PORT(mi->mip_info); + mip_addr = val; + mip = (struct mip_reg *)val; + mip_reg = __va(mip); + Dprintk("es7000_mipcfg: host_reg = 0x%lx \n", + (unsigned long)host_reg); + Dprintk("es7000_mipcfg: mip_reg = 0x%lx \n", + (unsigned long)mip_reg); + success++; + break; + case MIP_PSAI_REG: + psaip = (struct psai *)tp; + if (tp != NULL) { + if (psaip->addr) + psai = __va(psaip->addr); + else + psai = NULL; + success++; + } + break; + default: + break; + } + if (i == 6) break; + tp += size; + } + + if (success < 2) { + printk("\nNo ES7000 found.\n"); + es7000_plat = 0; + } else { + printk("\nEnabling ES7000 specific features...\n"); + es7000_plat = 1; + } + return es7000_plat; +} + +int __init +find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length) +{ + struct acpi_table_rsdp *rsdp = NULL; + unsigned long rsdp_phys = 0; + struct acpi_table_header *header = NULL; + int i; + struct acpi_table_sdt sdt; + + rsdp_phys = acpi_find_rsdp(); + rsdp = __va(rsdp_phys); + if (rsdp->rsdt_address) { + struct acpi_table_rsdt *mapped_rsdt = NULL; + sdt.pa = rsdp->rsdt_address; + + header = (struct acpi_table_header *) + __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header)); + if (!header) + return -ENODEV; + + sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3; + mapped_rsdt = (struct acpi_table_rsdt *) + __acpi_map_table(sdt.pa, header->length); + if (!mapped_rsdt) + return -ENODEV; + + header = &mapped_rsdt->header; + + for (i = 0; i < sdt.count; i++) + sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i]; + }; + for (i = 0; i < sdt.count; i++) { + + header = (struct acpi_table_header *) + __acpi_map_table(sdt.entry[i].pa, + sizeof(struct acpi_table_header)); + if (!header) + continue; + if (!strncmp((char *) &header->signature, "OEM1", 4)) { + if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) { + void *addr; + struct oem_table *t; + acpi_table_print(header, sdt.entry[i].pa); + t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length); + addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize); + *length = header->length; + *oem_addr = (unsigned long) addr; + return 0; + } + } + } + printk("ES7000: did not find Unisys ACPI OEM table!\n"); + return -1; +} + +static void +es7000_spin(int n) +{ + int i = 0; + + while (i++ < n) + rep_nop(); +} + +static int __init +es7000_mip_write(struct mip_reg *mip_reg) +{ + int status = 0; + int spin; + + spin = MIP_SPIN; + while (((unsigned long long)host_reg->off_38 & + (unsigned long long)MIP_VALID) != 0) { + if (--spin <= 0) { + printk("es7000_mip_write: Timeout waiting for Host Valid Flag"); + return -1; + } + es7000_spin(MIP_SPIN); + } + + memcpy(host_reg, mip_reg, sizeof(struct mip_reg)); + outb(1, mip_port); + + spin = MIP_SPIN; + + while (((unsigned long long)mip_reg->off_38 & + (unsigned long long)MIP_VALID) == 0) { + if (--spin <= 0) { + printk("es7000_mip_write: Timeout waiting for MIP Valid Flag"); + return -1; + } + es7000_spin(MIP_SPIN); + } + + status = ((unsigned long long)mip_reg->off_0 & + (unsigned long long)0xffff0000000000) >> 48; + mip_reg->off_38 = ((unsigned long long)mip_reg->off_38 & + (unsigned long long)~MIP_VALID); + return status; +} + +int +es7000_start_cpu(int cpu, unsigned long eip) +{ + unsigned long vect = 0, psaival = 0; + + if (psai == NULL) + return -1; + + vect = ((unsigned long)__pa(eip)/0x1000) << 16; + psaival = (0x1000000 | vect | cpu); + + while (*psai & 0x1000000) + ; + + *psai = psaival; + + return 0; + +} + +int +es7000_stop_cpu(int cpu) +{ + int startup; + + if (psai == NULL) + return -1; + + startup= (0x1000000 | cpu); + + while ((*psai & 0xff00ffff) != startup) + ; + + startup = (*psai & 0xff0000) >> 16; + *psai &= 0xffffff; + + return 0; + +} + +void __init +es7000_sw_apic() +{ + if (es7000_plat) { + int mip_status; + struct mip_reg es7000_mip_reg; + + printk("ES7000: Enabling APIC mode.\n"); + memset(&es7000_mip_reg, 0, sizeof(struct mip_reg)); + es7000_mip_reg.off_0 = MIP_SW_APIC; + es7000_mip_reg.off_38 = (MIP_VALID); + while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0) + printk("es7000_sw_apic: command failed, status = %x\n", + mip_status); + return; + } +} diff -Nru a/arch/i386/mach-es7000/setup.c b/arch/i386/mach-es7000/setup.c --- a/arch/i386/mach-es7000/setup.c Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,106 +0,0 @@ -/* - * Machine specific setup for es7000 - */ - -#include -#include -#include -#include -#include -#include -#include - -/** - * pre_intr_init_hook - initialisation prior to setting up interrupt vectors - * - * Description: - * Perform any necessary interrupt initialisation prior to setting up - * the "ordinary" interrupt call gates. For legacy reasons, the ISA - * interrupts should be initialised here if the machine emulates a PC - * in any way. - **/void __init pre_intr_init_hook(void) -{ - init_ISA_irqs(); -} - -/* - * IRQ2 is cascade interrupt to second interrupt controller - */ -static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; - -/** - * intr_init_hook - post gate setup interrupt initialisation - * - * Description: - * Fill in any interrupts that may have been left out by the general - * init_IRQ() routine. interrupts having to do with the machine rather - * than the devices on the I/O bus (like APIC interrupts in intel MP - * systems) are started here. - **/ -void __init intr_init_hook(void) -{ -#ifdef CONFIG_X86_LOCAL_APIC - apic_intr_init(); -#endif - - if (!acpi_ioapic) - setup_irq(2, &irq2); -} - -/** - * pre_setup_arch_hook - hook called prior to any setup_arch() execution - * - * Description: - * generally used to activate any machine specific identification - * routines that may be needed before setup_arch() runs. On VISWS - * this is used to get the board revision and type. - **/ -void __init pre_setup_arch_hook(void) -{ -} - -/** - * trap_init_hook - initialise system specific traps - * - * Description: - * Called as the final act of trap_init(). Used in VISWS to initialise - * the various board specific APIC traps. - **/ -void __init trap_init_hook(void) -{ -} - -static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; - -/** - * time_init_hook - do any specific initialisations for the system timer. - * - * Description: - * Must plug the system timer interrupt source at HZ into the IRQ listed - * in irq_vectors.h:TIMER_IRQ - **/ -void __init time_init_hook(void) -{ - setup_irq(0, &irq0); -} - -#ifdef CONFIG_MCA -/** - * mca_nmi_hook - hook into MCA specific NMI chain - * - * Description: - * The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources - * along the MCA bus. Use this to hook into that chain if you will need - * it. - **/ -void __init mca_nmi_hook(void) -{ - /* If I recall correctly, there's a whole bunch of other things that - * we can do to check for NMI problems, but that's all I know about - * at the moment. - */ - - printk("NMI generated from unknown source!\n"); -} - -#endif diff -Nru a/arch/i386/mach-es7000/topology.c b/arch/i386/mach-es7000/topology.c --- a/arch/i386/mach-es7000/topology.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,64 +0,0 @@ -/* - * arch/i386/mach-generic/topology.c - Populate driverfs with topology information - * - * Written by: Matthew Dobson, IBM Corporation - * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL - * - * Copyright (C) 2002, IBM Corp. - * - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or - * NON INFRINGEMENT. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Send feedback to - */ -#include -#include -#include - -struct i386_cpu cpu_devices[NR_CPUS]; - -#ifdef CONFIG_NUMA -#include -#include - -struct i386_node node_devices[MAX_NUMNODES]; - -static int __init topology_init(void) -{ - int i; - - for (i = 0; i < num_online_nodes(); i++) - arch_register_node(i); - for (i = 0; i < NR_CPUS; i++) - if (cpu_possible(i)) arch_register_cpu(i); - return 0; -} - -#else /* !CONFIG_NUMA */ - -static int __init topology_init(void) -{ - int i; - - for (i = 0; i < NR_CPUS; i++) - if (cpu_possible(i)) arch_register_cpu(i); - return 0; -} - -#endif /* CONFIG_NUMA */ - -subsys_initcall(topology_init); diff -Nru a/arch/i386/mach-generic/Makefile b/arch/i386/mach-generic/Makefile --- a/arch/i386/mach-generic/Makefile Tue May 18 23:38:07 2004 +++ b/arch/i386/mach-generic/Makefile Tue May 18 23:38:07 2004 @@ -4,15 +4,4 @@ EXTRA_CFLAGS += -I../kernel -obj-y := probe.o summit.o bigsmp.o default.o - - -# -# Makefile for the generic architecture -# - -EXTRA_CFLAGS += -I../kernel - -obj-y := probe.o summit.o bigsmp.o default.o - - +obj-y := probe.o summit.o bigsmp.o es7000.o default.o ../mach-es7000/ diff -Nru a/arch/i386/mach-generic/es7000.c b/arch/i386/mach-generic/es7000.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/i386/mach-generic/es7000.c Tue May 18 23:38:09 2004 @@ -0,0 +1,28 @@ +/* + * APIC driver for the Unisys ES7000 chipset. + */ +#define APIC_DEFINITION 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static __init int probe_es7000(void) +{ + /* probed later in mptable/ACPI hooks */ + return 0; +} + +struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000); diff -Nru a/arch/i386/mach-generic/probe.c b/arch/i386/mach-generic/probe.c --- a/arch/i386/mach-generic/probe.c Tue May 18 23:38:05 2004 +++ b/arch/i386/mach-generic/probe.c Tue May 18 23:38:05 2004 @@ -17,6 +17,7 @@ extern struct genapic apic_summit; extern struct genapic apic_bigsmp; +extern struct genapic apic_es7000; extern struct genapic apic_default; struct genapic *genapic = &apic_default; @@ -24,6 +25,7 @@ struct genapic *apic_probe[] __initdata = { &apic_summit, &apic_bigsmp, + &apic_es7000, &apic_default, /* must be last */ NULL, }; diff -Nru a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c --- a/arch/i386/mach-voyager/voyager_smp.c Tue May 18 23:38:06 2004 +++ b/arch/i386/mach-voyager/voyager_smp.c Tue May 18 23:38:06 2004 @@ -1106,6 +1106,9 @@ if (!mask) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; data.started = mask; diff -Nru a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c --- a/arch/i386/mm/hugetlbpage.c Tue May 18 23:38:09 2004 +++ b/arch/i386/mm/hugetlbpage.c Tue May 18 23:38:09 2004 @@ -264,8 +264,9 @@ goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); - unlock_page(page); - if (ret) { + if (! ret) { + unlock_page(page); + } else { hugetlb_put_quota(mapping); free_huge_page(page); goto out; diff -Nru a/arch/i386/mm/pageattr.c b/arch/i386/mm/pageattr.c --- a/arch/i386/mm/pageattr.c Tue May 18 23:38:06 2004 +++ b/arch/i386/mm/pageattr.c Tue May 18 23:38:06 2004 @@ -121,20 +121,20 @@ pte_t standard = mk_pte(page, PAGE_KERNEL); set_pte_atomic(kpte, mk_pte(page, prot)); if (pte_same(old,standard)) - atomic_inc(&kpte_page->count); + get_page(kpte_page); } else { struct page *split = split_large_page(address, prot); if (!split) return -ENOMEM; - atomic_inc(&kpte_page->count); + get_page(kpte_page); set_pmd_pte(kpte,address,mk_pte(split, PAGE_KERNEL)); } } else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL)); - atomic_dec(&kpte_page->count); + __put_page(kpte_page); } - if (cpu_has_pse && (atomic_read(&kpte_page->count) == 1)) { + if (cpu_has_pse && (page_count(kpte_page) == 1)) { list_add(&kpte_page->lru, &df_list); revert_page(kpte_page, address); } diff -Nru a/arch/i386/oprofile/op_model_p4.c b/arch/i386/oprofile/op_model_p4.c --- a/arch/i386/oprofile/op_model_p4.c Tue May 18 23:38:05 2004 +++ b/arch/i386/oprofile/op_model_p4.c Tue May 18 23:38:05 2004 @@ -382,11 +382,8 @@ static unsigned int get_stagger(void) { #ifdef CONFIG_SMP - int cpu; - if (smp_num_siblings > 1) { - cpu = smp_processor_id(); - return (cpu_sibling_map[cpu] > cpu) ? 0 : 1; - } + int cpu = smp_processor_id(); + return (cpu != first_cpu(cpu_sibling_map[cpu])); #endif return 0; } diff -Nru a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c --- a/arch/i386/pci/fixup.c Tue May 18 23:38:08 2004 +++ b/arch/i386/pci/fixup.c Tue May 18 23:38:08 2004 @@ -92,6 +92,15 @@ int i; /* + * Runs the fixup only for the first IDE controller + * (Shai Fultheim - shai@ftcon.com) + */ + static int called = 0; + if (called) + return; + called = 1; + + /* * There exist PCI IDE controllers which have utter garbage * in first four base registers. Ignore that. */ diff -Nru a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c --- a/arch/i386/pci/irq.c Tue May 18 23:38:09 2004 +++ b/arch/i386/pci/irq.c Tue May 18 23:38:09 2004 @@ -476,8 +476,9 @@ case PCI_DEVICE_ID_INTEL_82801DB_0: case PCI_DEVICE_ID_INTEL_82801E_0: case PCI_DEVICE_ID_INTEL_82801EB_0: - case PCI_DEVICE_ID_INTEL_ESB_0: + case PCI_DEVICE_ID_INTEL_ESB_1: case PCI_DEVICE_ID_INTEL_ICH6_0: + case PCI_DEVICE_ID_INTEL_ICH6_1: r->name = "PIIX/ICH"; r->get = pirq_piix_get; r->set = pirq_piix_set; @@ -540,8 +541,6 @@ r->name = "SIS"; r->get = pirq_sis_get; r->set = pirq_sis_set; - DBG("PCI: Detecting SiS router at %02x:%02x\n", - rt->rtr_bus, rt->rtr_devfn); return 1; } @@ -898,7 +897,7 @@ { DBG("PCI: IRQ init\n"); - if (pcibios_enable_irq) + if (pcibios_enable_irq || raw_pci_ops == NULL) return 0; pirq_table = pirq_find_routing_table(); diff -Nru a/arch/ia64/Kconfig b/arch/ia64/Kconfig --- a/arch/ia64/Kconfig Tue May 18 23:38:09 2004 +++ b/arch/ia64/Kconfig Tue May 18 23:38:09 2004 @@ -78,6 +78,15 @@ endchoice +config HOTPLUG_CPU + bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" + depends on SMP && HOTPLUG && EXPERIMENTAL + default n + ---help--- + Say Y here to experiment with turning CPUs off and on. CPUs + can be controlled through /sys/devices/system/cpu/cpu#. + Say N if you want to disable cpu hotplug. + choice prompt "Processor type" default ITANIUM diff -Nru a/arch/ia64/dig/Makefile b/arch/ia64/dig/Makefile --- a/arch/ia64/dig/Makefile Tue May 18 23:38:08 2004 +++ b/arch/ia64/dig/Makefile Tue May 18 23:38:08 2004 @@ -6,4 +6,9 @@ # obj-y := setup.o + +ifndef CONFIG_NUMA +obj-$(CONFIG_IA64_DIG) += topology.o +endif + obj-$(CONFIG_IA64_GENERIC) += machvec.o diff -Nru a/arch/ia64/dig/topology.c b/arch/ia64/dig/topology.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/dig/topology.c Tue May 18 23:38:09 2004 @@ -0,0 +1,43 @@ +/* + * arch/ia64/dig/topology.c + * Popuate driverfs with topology information. + * Derived entirely from i386/mach-default.c + * Intel Corporation - Ashok Raj + */ +#include +#include +#include +#include +#include +#include +#include + +static DEFINE_PER_CPU(struct ia64_cpu, cpu_devices); + +/* + * First Pass: simply borrowed code for now. Later should hook into + * hotplug notification for node/cpu/memory as applicable + */ + +static int arch_register_cpu(int num) +{ + struct node *parent = NULL; + +#ifdef CONFIG_NUMA + //parent = &node_devices[cpu_to_node(num)].node; +#endif + + return register_cpu(&per_cpu(cpu_devices,num).cpu, num, parent); +} + +static int __init topology_init(void) +{ + int i; + + for_each_cpu(i) { + arch_register_cpu(i); + } + return 0; +} + +subsys_initcall(topology_init); diff -Nru a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S --- a/arch/ia64/ia32/ia32_entry.S Tue May 18 23:38:07 2004 +++ b/arch/ia64/ia32/ia32_entry.S Tue May 18 23:38:07 2004 @@ -350,11 +350,11 @@ data8 sys_setfsgid /* 16-bit version */ data8 sys_llseek /* 140 */ data8 sys32_getdents - data8 sys32_select + data8 compat_sys_select data8 sys_flock data8 sys32_msync - data8 sys32_readv /* 145 */ - data8 sys32_writev + data8 compat_sys_readv /* 145 */ + data8 compat_sys_writev data8 sys_getsid data8 sys_fdatasync data8 sys32_sysctl diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c --- a/arch/ia64/ia32/sys_ia32.c Tue May 18 23:38:08 2004 +++ b/arch/ia64/ia32/sys_ia32.c Tue May 18 23:38:08 2004 @@ -90,58 +90,17 @@ /* XXX make per-mm: */ static DECLARE_MUTEX(ia32_mmap_sem); -static int -nargs (unsigned int arg, char **ap) -{ - unsigned int addr; - int n, err; - - if (!arg) - return 0; - - n = 0; - do { - err = get_user(addr, (unsigned int *)A(arg)); - if (err) - return err; - if (ap) - *ap++ = (char *) A(addr); - arg += sizeof(unsigned int); - n++; - } while (addr); - return n - 1; -} - asmlinkage long -sys32_execve (char *filename, unsigned int argv, unsigned int envp, - struct pt_regs *regs) +sys32_execve (char *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, struct pt_regs *regs) { + long error; + char *filename; unsigned long old_map_base, old_task_size, tssd; - char **av, **ae; - int na, ne, len; - long r; - - na = nargs(argv, NULL); - if (na < 0) - return na; - ne = nargs(envp, NULL); - if (ne < 0) - return ne; - len = (na + ne + 2) * sizeof(*av); - av = kmalloc(len, GFP_KERNEL); - if (!av) - return -ENOMEM; - ae = av + na + 1; - av[na] = NULL; - ae[ne] = NULL; - - r = nargs(argv, av); - if (r < 0) - goto out; - r = nargs(envp, ae); - if (r < 0) - goto out; + filename = getname(name); + error = PTR_ERR(filename); + if (IS_ERR(filename)) + return error; old_map_base = current->thread.map_base; old_task_size = current->thread.task_size; @@ -153,19 +112,18 @@ ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob); ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1); - set_fs(KERNEL_DS); - r = sys_execve(filename, av, ae, regs); - if (r < 0) { + error = compat_do_execve(filename, argv, envp, regs); + putname(filename); + + if (error < 0) { /* oops, execve failed, switch back to old values... */ ia64_set_kr(IA64_KR_IO_BASE, IA32_IOBASE); ia64_set_kr(IA64_KR_TSSD, tssd); current->thread.map_base = old_map_base; current->thread.task_size = old_task_size; - set_fs(USER_DS); /* establish new task-size as the address-limit */ } - out: - kfree(av); - return r; + + return error; } int cp_compat_stat(struct kstat *stat, struct compat_stat *ubuf) @@ -818,110 +776,6 @@ return error; } -/* - * We can actually return ERESTARTSYS instead of EINTR, but I'd - * like to be certain this leads to no problems. So I return - * EINTR just for safety. - * - * Update: ERESTARTSYS breaks at least the xview clock binary, so - * I'm trying ERESTARTNOHAND which restart only when you want to. - */ -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) -#define ROUND_UP_TIME(x,y) (((x)+(y)-1)/(y)) - -asmlinkage long -sys32_select (int n, fd_set *inp, fd_set *outp, fd_set *exp, struct compat_timeval *tvp32) -{ - fd_set_bits fds; - char *bits; - long timeout; - int ret, size; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp32) { - time_t sec, usec; - - ret = -EFAULT; - if (get_user(sec, &tvp32->tv_sec) || get_user(usec, &tvp32->tv_usec)) - goto out_nofds; - - ret = -EINVAL; - if (sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = ROUND_UP_TIME(usec, 1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - if ((ret = get_fd_set(n, inp, fds.in)) || - (ret = get_fd_set(n, outp, fds.out)) || - (ret = get_fd_set(n, exp, fds.ex))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp32 && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - if (put_user(sec, &tvp32->tv_sec) || put_user(usec, &tvp32->tv_usec)) { - ret = -EFAULT; - goto out; - } - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set(n, inp, fds.res_in); - set_fd_set(n, outp, fds.res_out); - set_fd_set(n, exp, fds.res_ex); - -out: - kfree(bits); -out_nofds: - return ret; -} - struct sel_arg_struct { unsigned int n; unsigned int inp; @@ -937,87 +791,8 @@ if (copy_from_user(&a, arg, sizeof(a))) return -EFAULT; - return sys32_select(a.n, (fd_set *) A(a.inp), (fd_set *) A(a.outp), (fd_set *) A(a.exp), - (struct compat_timeval *) A(a.tvp)); -} - -static struct iovec * -get_compat_iovec (struct compat_iovec *iov32, struct iovec *iov_buf, u32 count, int type) -{ - u32 i, buf, len; - struct iovec *ivp, *iov; - - /* Get the "struct iovec" from user memory */ - - if (!count) - return 0; - if (verify_area(VERIFY_READ, iov32, sizeof(struct compat_iovec)*count)) - return NULL; - if (count > UIO_MAXIOV) - return NULL; - if (count > UIO_FASTIOV) { - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - return NULL; - } else - iov = iov_buf; - - ivp = iov; - for (i = 0; i < count; i++) { - if (__get_user(len, &iov32->iov_len) || __get_user(buf, &iov32->iov_base)) { - if (iov != iov_buf) - kfree(iov); - return NULL; - } - if (verify_area(type, (void *)A(buf), len)) { - if (iov != iov_buf) - kfree(iov); - return((struct iovec *)0); - } - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t) len; - iov32++; - ivp++; - } - return iov; -} - -asmlinkage long -sys32_readv (int fd, struct compat_iovec *vector, u32 count) -{ - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov; - long ret; - mm_segment_t old_fs = get_fs(); - - iov = get_compat_iovec(vector, iovstack, count, VERIFY_WRITE); - if (!iov) - return -EFAULT; - set_fs(KERNEL_DS); - ret = sys_readv(fd, iov, count); - set_fs(old_fs); - if (iov != iovstack) - kfree(iov); - return ret; -} - -asmlinkage long -sys32_writev (int fd, struct compat_iovec *vector, u32 count) -{ - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov; - long ret; - mm_segment_t old_fs = get_fs(); - - iov = get_compat_iovec(vector, iovstack, count, VERIFY_READ); - if (!iov) - return -EFAULT; - set_fs(KERNEL_DS); - ret = sys_writev(fd, iov, count); - set_fs(old_fs); - if (iov != iovstack) - kfree(iov); - return ret; + return compat_sys_select(a.n, compat_ptr(a.inp), compat_ptr(a.outp), + compat_ptr(a.exp), compat_ptr(a.tvp)); } #define SEMOP 1 @@ -2298,7 +2073,7 @@ ((desc)->a & 0x0ffff) | \ ((desc)->b & 0xf0000) ) -#define GET_32BIT(desc) (((desc)->b >> 23) & 1) +#define GET_32BIT(desc) (((desc)->b >> 22) & 1) #define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) #define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) #define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) @@ -2423,176 +2198,6 @@ segid = (egid == (compat_gid_t)-1) ? ((gid_t)-1) : ((gid_t)egid); ssgid = (sgid == (compat_gid_t)-1) ? ((gid_t)-1) : ((gid_t)sgid); return sys_setresgid(srgid, segid, ssgid); -} - -/* Stuff for NFS server syscalls... */ -struct nfsctl_svc32 { - u16 svc32_port; - s32 svc32_nthreads; -}; - -struct nfsctl_client32 { - s8 cl32_ident[NFSCLNT_IDMAX+1]; - s32 cl32_naddr; - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; - s32 cl32_fhkeytype; - s32 cl32_fhkeylen; - u8 cl32_fhkey[NFSCLNT_KEYMAX]; -}; - -struct nfsctl_export32 { - s8 ex32_client[NFSCLNT_IDMAX+1]; - s8 ex32_path[NFS_MAXPATHLEN+1]; - compat_dev_t ex32_dev; - compat_ino_t ex32_ino; - s32 ex32_flags; - compat_uid_t ex32_anon_uid; - compat_gid_t ex32_anon_gid; -}; - -struct nfsctl_arg32 { - s32 ca32_version; /* safeguard */ - union { - struct nfsctl_svc32 u32_svc; - struct nfsctl_client32 u32_client; - struct nfsctl_export32 u32_export; - u32 u32_debug; - } u; -#define ca32_svc u.u32_svc -#define ca32_client u.u32_client -#define ca32_export u.u32_export -#define ca32_debug u.u32_debug -}; - -union nfsctl_res32 { - struct knfs_fh cr32_getfh; - u32 cr32_debug; -}; - -static int -nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port); - err |= __get_user(karg->ca_svc.svc_nthreads, - &arg32->ca32_svc.svc32_nthreads); - return err; -} - -static int -nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_client.cl_ident[0], - &arg32->ca32_client.cl32_ident[0], - NFSCLNT_IDMAX); - err |= __get_user(karg->ca_client.cl_naddr, - &arg32->ca32_client.cl32_naddr); - err |= copy_from_user(&karg->ca_client.cl_addrlist[0], - &arg32->ca32_client.cl32_addrlist[0], - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)); - err |= __get_user(karg->ca_client.cl_fhkeytype, - &arg32->ca32_client.cl32_fhkeytype); - err |= __get_user(karg->ca_client.cl_fhkeylen, - &arg32->ca32_client.cl32_fhkeylen); - err |= copy_from_user(&karg->ca_client.cl_fhkey[0], - &arg32->ca32_client.cl32_fhkey[0], - NFSCLNT_KEYMAX); - return err; -} - -static int -nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_export.ex_client[0], - &arg32->ca32_export.ex32_client[0], - NFSCLNT_IDMAX); - err |= copy_from_user(&karg->ca_export.ex_path[0], - &arg32->ca32_export.ex32_path[0], - NFS_MAXPATHLEN); - err |= __get_user(karg->ca_export.ex_dev, - &arg32->ca32_export.ex32_dev); - err |= __get_user(karg->ca_export.ex_ino, - &arg32->ca32_export.ex32_ino); - err |= __get_user(karg->ca_export.ex_flags, - &arg32->ca32_export.ex32_flags); - err |= __get_user(karg->ca_export.ex_anon_uid, - &arg32->ca32_export.ex32_anon_uid); - err |= __get_user(karg->ca_export.ex_anon_gid, - &arg32->ca32_export.ex32_anon_gid); - return err; -} - -static int -nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32) -{ - int err; - - err = copy_to_user(&res32->cr32_getfh, - &kres->cr_getfh, - sizeof(res32->cr32_getfh)); - err |= __put_user(kres->cr_debug, &res32->cr32_debug); - return err; -} - -int asmlinkage -sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32) -{ - struct nfsctl_arg *karg = NULL; - union nfsctl_res *kres = NULL; - mm_segment_t oldfs; - int err; - - karg = kmalloc(sizeof(*karg), GFP_USER); - if(!karg) - return -ENOMEM; - if(res32) { - kres = kmalloc(sizeof(*kres), GFP_USER); - if(!kres) { - kfree(karg); - return -ENOMEM; - } - } - switch(cmd) { - case NFSCTL_SVC: - err = nfs_svc32_trans(karg, arg32); - break; - case NFSCTL_ADDCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_DELCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_EXPORT: - err = nfs_exp32_trans(karg, arg32); - break; - default: - err = -EINVAL; - break; - } - if(err) - goto done; - oldfs = get_fs(); - set_fs(KERNEL_DS); - err = sys_nfsservctl(cmd, karg, kres); - set_fs(oldfs); - - if(!err && cmd == NFSCTL_GETFS) - err = nfs_getfh32_res_trans(kres, res32); - -done: - if(karg) - kfree(karg); - if(kres) - kfree(kres); - return err; } /* Handle adjtimex compatibility. */ diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c --- a/arch/ia64/kernel/acpi.c Tue May 18 23:38:07 2004 +++ b/arch/ia64/kernel/acpi.c Tue May 18 23:38:07 2004 @@ -632,16 +632,6 @@ return 0; } -/* deprecated in favor of acpi_gsi_to_irq */ -int -acpi_irq_to_vector (u32 gsi) -{ - if (has_8259 && gsi < 16) - return isa_irq_to_vector(gsi); - - return gsi_to_vector(gsi); -} - int acpi_gsi_to_irq (u32 gsi, unsigned int *irq) { diff -Nru a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S --- a/arch/ia64/kernel/head.S Tue May 18 23:38:08 2004 +++ b/arch/ia64/kernel/head.S Tue May 18 23:38:08 2004 @@ -866,12 +866,14 @@ * Inputs: * ar.pfs - saved CFM of caller * ar.ccv - 0 (and available for use) + * r27 - flags from spin_lock_irqsave or 0. Must be preserved. * r28 - available for use. * r29 - available for use. * r30 - available for use. * r31 - address of lock, available for use. * b6 - return address * p14 - available for use. + * p15 - used to track flag status. * * If you patch this code to use more registers, do not forget to update * the clobber lists for spin_lock() in include/asm-ia64/spinlock.h. @@ -885,22 +887,26 @@ .save rp, r28 .body nop 0 - nop 0 + tbit.nz p15,p0=r27,IA64_PSR_I_BIT .restore sp // pop existing prologue after next insn mov b6 = r28 .prologue .save ar.pfs, r0 .altrp b6 .body + ;; +(p15) ssm psr.i // reenable interrupts if they were on + // DavidM says that srlz.d is slow and is not required in this case .wait: // exponential backoff, kdb, lockmeter etc. go in here hint @pause ld4 r30=[r31] // don't use ld4.bias; if it's contended, we won't write the word nop 0 ;; - cmp4.eq p14,p0=r30,r0 -(p14) br.cond.sptk.few b6 // lock is now free, try to acquire - br.cond.sptk.few .wait + cmp4.ne p14,p0=r30,r0 +(p14) br.cond.sptk.few .wait +(p15) rsm psr.i // disable interrupts if we reenabled them + br.cond.sptk.few b6 // lock is now free, try to acquire END(ia64_spinlock_contention_pre3_4) #else @@ -909,14 +915,20 @@ .prologue .altrp b6 .body + tbit.nz p15,p0=r27,IA64_PSR_I_BIT + ;; .wait: +(p15) ssm psr.i // reenable interrupts if they were on + // DavidM says that srlz.d is slow and is not required in this case +.wait2: // exponential backoff, kdb, lockmeter etc. go in here hint @pause ld4 r30=[r31] // don't use ld4.bias; if it's contended, we won't write the word ;; cmp4.ne p14,p0=r30,r0 mov r30 = 1 -(p14) br.cond.sptk.few .wait +(p14) br.cond.sptk.few .wait2 +(p15) rsm psr.i // disable interrupts if we reenabled them ;; cmpxchg4.acq r30=[r31], r30, ar.ccv ;; diff -Nru a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c --- a/arch/ia64/kernel/iosapic.c Tue May 18 23:38:07 2004 +++ b/arch/ia64/kernel/iosapic.c Tue May 18 23:38:07 2004 @@ -32,6 +32,8 @@ * 03/02/19 B. Helgaas Make pcat_compat system-wide, not per-IOSAPIC. * Remove iosapic_address & gsi_base from external interfaces. * Rationalize __init/__devinit attributes. + * 04/12/04 Ashok Raj Intel Corporation 2004 + * Updated to work with irq migration necessary for CPU Hotplug */ /* * Here is what the interrupt logic between a PCI device and the kernel looks like: @@ -98,6 +100,7 @@ #endif static spinlock_t iosapic_lock = SPIN_LOCK_UNLOCKED; +cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS]; /* These tables map IA-64 vectors to the IOSAPIC pin that generates this vector. */ @@ -188,8 +191,10 @@ pol = iosapic_intr_info[vector].polarity; trigger = iosapic_intr_info[vector].trigger; dmode = iosapic_intr_info[vector].dmode; + vector &= (~IA64_IRQ_REDIRECTED); redir = (dmode == IOSAPIC_LOWEST_PRIORITY) ? 1 : 0; + #ifdef CONFIG_SMP { unsigned int irq; @@ -311,9 +316,8 @@ spin_lock_irqsave(&iosapic_lock, flags); { - /* get current delivery mode by reading the low32 */ - writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT); low32 = iosapic_intr_info[vec].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT); + if (redir) /* change delivery mode to lowest priority */ low32 |= (IOSAPIC_LOWEST_PRIORITY << IOSAPIC_DELIVERY_SHIFT); @@ -331,6 +335,21 @@ #endif } +static inline void move_irq(int irq) +{ + /* note - we hold desc->lock */ + cpumask_t tmp; + irq_desc_t *desc = irq_descp(irq); + + if (!cpus_empty(pending_irq_cpumask[irq])) { + cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map); + if (unlikely(!cpus_empty(tmp))) { + desc->handler->set_affinity(irq, pending_irq_cpumask[irq]); + } + cpus_clear(pending_irq_cpumask[irq]); + } +} + /* * Handlers for level-triggered interrupts. */ @@ -347,6 +366,7 @@ { ia64_vector vec = irq_to_vector(irq); + move_irq(irq); writel(vec, iosapic_intr_info[vec].addr + IOSAPIC_EOI); } @@ -386,6 +406,8 @@ iosapic_ack_edge_irq (unsigned int irq) { irq_desc_t *idesc = irq_descp(irq); + + move_irq(irq); /* * Once we have recorded IRQ_PENDING already, we can mask the * interrupt for real. This prevents IRQ storms from unhandled diff -Nru a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c --- a/arch/ia64/kernel/irq.c Tue May 18 23:38:09 2004 +++ b/arch/ia64/kernel/irq.c Tue May 18 23:38:09 2004 @@ -8,6 +8,12 @@ * instead of just grabbing them. Thus setups with different IRQ numbers * shouldn't result in any weird surprises, and installing new handlers * should be easier. + * + * Copyright (C) Ashok Raj, Intel Corporation 2004 + * + * 4/14/2004: Added code to handle cpu migration and do safe irq + * migration without lossing interrupts for iosapic + * architecture. */ /* @@ -27,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -35,18 +42,21 @@ #include #include #include +#include #include +#include #include #include #include #include #include #include +#include #include #include - +extern cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS]; /* * Linux has a controller-independent x86 interrupt architecture. @@ -938,7 +948,9 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data) { - int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]); + int len = sprintf(page, "%s", irq_redir[(long)data] ? "r " : ""); + + len += cpumask_scnprintf(page+len, count, irq_affinity[(long)data]); if (count - len < 2) return -EINVAL; len += sprintf(page + len, "\n"); @@ -956,6 +968,7 @@ int rlen; int prelen; irq_desc_t *desc = irq_descp(irq); + unsigned long flags; if (!desc->handler->set_affinity) return -EIO; @@ -994,11 +1007,107 @@ if (cpus_empty(tmp)) return -EINVAL; - desc->handler->set_affinity(irq, new_value); + spin_lock_irqsave(&desc->lock, flags); + pending_irq_cpumask[irq] = new_value; + spin_unlock_irqrestore(&desc->lock, flags); + return full_count; } #endif /* CONFIG_SMP */ + +#ifdef CONFIG_HOTPLUG_CPU +unsigned int vectors_in_migration[NR_IRQS]; + +/* + * Since cpu_online_map is already updated, we just need to check for + * affinity that has zeros + */ +static void migrate_irqs(void) +{ + cpumask_t mask; + irq_desc_t *desc; + int irq, new_cpu; + + for (irq=0; irq < NR_IRQS; irq++) { + desc = irq_descp(irq); + + /* + * No handling for now. + * TBD: Implement a disable function so we can now + * tell CPU not to respond to these local intr sources. + * such as ITV,CPEI,MCA etc. + */ + if (desc->status == IRQ_PER_CPU) + continue; + + cpus_and(mask, irq_affinity[irq], cpu_online_map); + if (any_online_cpu(mask) == NR_CPUS) { + /* + * Save it for phase 2 processing + */ + vectors_in_migration[irq] = irq; + + new_cpu = any_online_cpu(cpu_online_map); + mask = cpumask_of_cpu(new_cpu); + + /* + * Al three are essential, currently WARN_ON.. maybe panic? + */ + if (desc->handler && desc->handler->disable && + desc->handler->enable && desc->handler->set_affinity) { + desc->handler->disable(irq); + desc->handler->set_affinity(irq, mask); + desc->handler->enable(irq); + } else { + WARN_ON((!(desc->handler) || !(desc->handler->disable) || + !(desc->handler->enable) || + !(desc->handler->set_affinity))); + } + } + } +} + +void fixup_irqs(void) +{ + unsigned int irq; + extern void ia64_process_pending_intr(void); + + ia64_set_itv(1<<16); + /* + * Phase 1: Locate irq's bound to this cpu and + * relocate them for cpu removal. + */ + migrate_irqs(); + + /* + * Phase 2: Perform interrupt processing for all entries reported in + * local APIC. + */ + ia64_process_pending_intr(); + + /* + * Phase 3: Now handle any interrupts not captured in local APIC. + * This is to account for cases that device interrupted during the time the + * rte was being disabled and re-programmed. + */ + for (irq=0; irq < NR_IRQS; irq++) { + if (vectors_in_migration[irq]) { + vectors_in_migration[irq]=0; + do_IRQ(irq, NULL); + } + } + + /* + * Now let processor die. We do irq disable and max_xtp() to + * ensure there is no more interrupts routed to this processor. + * But the local timer interrupt can have 1 pending which we + * take care in timer_interrupt(). + */ + max_xtp(); + local_irq_disable(); +} +#endif static int prof_cpu_mask_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data) diff -Nru a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c --- a/arch/ia64/kernel/irq_ia64.c Tue May 18 23:38:06 2004 +++ b/arch/ia64/kernel/irq_ia64.c Tue May 18 23:38:06 2004 @@ -10,6 +10,8 @@ * * 09/15/00 Goutham Rao Implemented pci_irq_to_vector * PCI to vector allocation routine. + * 04/14/2004 Ashok Raj + * Added CPU Hotplug handling for IPF. */ #include @@ -85,6 +87,11 @@ extern unsigned int do_IRQ(unsigned long irq, struct pt_regs *regs); +#ifdef CONFIG_SMP +# define IS_RESCHEDULE(vec) (vec == IA64_IPI_RESCHEDULE) +#else +# define IS_RESCHEDULE(vec) (0) +#endif /* * That's where the IVT branches when we get an external * interrupt. This branches to the correct hardware IRQ handler via @@ -94,11 +101,6 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) { unsigned long saved_tpr; -#ifdef CONFIG_SMP -# define IS_RESCHEDULE(vec) (vec == IA64_IPI_RESCHEDULE) -#else -# define IS_RESCHEDULE(vec) (0) -#endif #if IRQ_DEBUG { @@ -161,6 +163,54 @@ */ irq_exit(); } + +#ifdef CONFIG_HOTPLUG_CPU +/* + * This function emulates a interrupt processing when a cpu is about to be + * brought down. + */ +void ia64_process_pending_intr(void) +{ + ia64_vector vector; + unsigned long saved_tpr; + extern unsigned int vectors_in_migration[NR_IRQS]; + + vector = ia64_get_ivr(); + + irq_enter(); + saved_tpr = ia64_getreg(_IA64_REG_CR_TPR); + ia64_srlz_d(); + + /* + * Perform normal interrupt style processing + */ + while (vector != IA64_SPURIOUS_INT_VECTOR) { + if (!IS_RESCHEDULE(vector)) { + ia64_setreg(_IA64_REG_CR_TPR, vector); + ia64_srlz_d(); + + /* + * Now try calling normal ia64_handle_irq as it would have got called + * from a real intr handler. Try passing null for pt_regs, hopefully + * it will work. I hope it works!. + * Probably could shared code. + */ + vectors_in_migration[local_vector_to_irq(vector)]=0; + do_IRQ(local_vector_to_irq(vector), NULL); + + /* + * Disable interrupts and send EOI + */ + local_irq_disable(); + ia64_setreg(_IA64_REG_CR_TPR, saved_tpr); + } + ia64_eoi(); + vector = ia64_get_ivr(); + } + irq_exit(); +} +#endif + #ifdef CONFIG_SMP extern irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs); diff -Nru a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c --- a/arch/ia64/kernel/palinfo.c Tue May 18 23:38:05 2004 +++ b/arch/ia64/kernel/palinfo.c Tue May 18 23:38:05 2004 @@ -8,11 +8,14 @@ * * Copyright (C) 2000-2001, 2003 Hewlett-Packard Co * Stephane Eranian + * Copyright (C) 2004 Intel Corporation + * Ashok Raj * * 05/26/2000 S.Eranian initial release * 08/21/2000 S.Eranian updated to July 2000 PAL specs * 02/05/2001 S.Eranian fixed module support * 10/23/2001 S.Eranian updated pal_perf_mon_info bug fixes + * 03/24/2004 Ashok Raj updated to work with CPU Hotplug */ #include #include @@ -22,6 +25,9 @@ #include #include #include +#include +#include +#include #include #include @@ -768,13 +774,12 @@ * does not do recursion of deletion * * Notes: - * - first +1 accounts for the cpuN entry - * - second +1 account for toplevel palinfo - * + * - +1 accounts for the cpuN directory entry in /proc/pal */ -#define NR_PALINFO_PROC_ENTRIES (NR_CPUS*(NR_PALINFO_ENTRIES+1)+1) +#define NR_PALINFO_PROC_ENTRIES (NR_CPUS*(NR_PALINFO_ENTRIES+1)) static struct proc_dir_entry *palinfo_proc_entries[NR_PALINFO_PROC_ENTRIES]; +static struct proc_dir_entry *palinfo_dir; /* * This data structure is used to pass which cpu,function is being requested @@ -888,47 +893,107 @@ return len; } -static int __init -palinfo_init(void) +static void +create_palinfo_proc_entries(unsigned int cpu) { # define CPUSTR "cpu%d" pal_func_cpu_u_t f; - struct proc_dir_entry **pdir = palinfo_proc_entries; - struct proc_dir_entry *palinfo_dir, *cpu_dir; - int i, j; + struct proc_dir_entry **pdir; + struct proc_dir_entry *cpu_dir; + int j; char cpustr[sizeof(CPUSTR)]; - printk(KERN_INFO "PAL Information Facility v%s\n", PALINFO_VERSION); - - palinfo_dir = proc_mkdir("pal", NULL); /* * we keep track of created entries in a depth-first order for * cleanup purposes. Each entry is stored into palinfo_proc_entries */ - for (i=0; i < NR_CPUS; i++) { + sprintf(cpustr,CPUSTR, cpu); - if (!cpu_online(i)) continue; + cpu_dir = proc_mkdir(cpustr, palinfo_dir); - sprintf(cpustr,CPUSTR, i); + f.req_cpu = cpu; - cpu_dir = proc_mkdir(cpustr, palinfo_dir); + /* + * Compute the location to store per cpu entries + * We dont store the top level entry in this list, but + * remove it finally after removing all cpu entries. + */ + pdir = &palinfo_proc_entries[cpu*(NR_PALINFO_ENTRIES+1)]; + *pdir++ = cpu_dir; + for (j=0; j < NR_PALINFO_ENTRIES; j++) { + f.func_id = j; + *pdir = create_proc_read_entry( + palinfo_entries[j].name, 0, cpu_dir, + palinfo_read_entry, (void *)f.value); + if (*pdir) + (*pdir)->owner = THIS_MODULE; + pdir++; + } +} - f.req_cpu = i; +static void +remove_palinfo_proc_entries(unsigned int hcpu) +{ + int j; + struct proc_dir_entry *cpu_dir, **pdir; - for (j=0; j < NR_PALINFO_ENTRIES; j++) { - f.func_id = j; - *pdir = create_proc_read_entry( - palinfo_entries[j].name, 0, cpu_dir, - palinfo_read_entry, (void *)f.value); - if (*pdir) - (*pdir)->owner = THIS_MODULE; - pdir++; + pdir = &palinfo_proc_entries[hcpu*(NR_PALINFO_ENTRIES+1)]; + cpu_dir = *pdir; + *pdir++=NULL; + for (j=0; j < (NR_PALINFO_ENTRIES); j++) { + if ((*pdir)) { + remove_proc_entry ((*pdir)->name, cpu_dir); + *pdir ++= NULL; } - *pdir++ = cpu_dir; } - *pdir = palinfo_dir; + + if (cpu_dir) { + remove_proc_entry(cpu_dir->name, palinfo_dir); + } +} + +static int __devinit palinfo_cpu_callback(struct notifier_block *nfb, + unsigned long action, + void *hcpu) +{ + unsigned int hotcpu = (unsigned long)hcpu; + + switch (action) { + case CPU_ONLINE: + create_palinfo_proc_entries(hotcpu); + break; +#ifdef CONFIG_HOTPLUG_CPU + case CPU_DEAD: + remove_palinfo_proc_entries(hotcpu); + break; +#endif + } + return NOTIFY_OK; +} + +static struct notifier_block palinfo_cpu_notifier = +{ + .notifier_call = palinfo_cpu_callback, + .priority = 0, +}; + +static int __init +palinfo_init(void) +{ + int i = 0; + + printk(KERN_INFO "PAL Information Facility v%s\n", PALINFO_VERSION); + palinfo_dir = proc_mkdir("pal", NULL); + + /* Create palinfo dirs in /proc for all online cpus */ + for_each_online_cpu(i) { + create_palinfo_proc_entries(i); + } + + /* Register for future delivery via notify registration */ + register_cpu_notifier(&palinfo_cpu_notifier); return 0; } @@ -939,10 +1004,19 @@ int i = 0; /* remove all nodes: depth first pass. Could optimize this */ - for (i=0; i< NR_PALINFO_PROC_ENTRIES ; i++) { - if (palinfo_proc_entries[i]) - remove_proc_entry (palinfo_proc_entries[i]->name, NULL); + for_each_online_cpu(i) { + remove_palinfo_proc_entries(i); } + + /* + * Remove the top level entry finally + */ + remove_proc_entry(palinfo_dir->name, NULL); + + /* + * Unregister from cpu notifier callbacks + */ + unregister_cpu_notifier(&palinfo_cpu_notifier); } module_init(palinfo_init); diff -Nru a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c --- a/arch/ia64/kernel/process.c Tue May 18 23:38:07 2004 +++ b/arch/ia64/kernel/process.c Tue May 18 23:38:07 2004 @@ -7,6 +7,7 @@ #define __KERNEL_SYSCALLS__ /* see */ #include +#include #include #include #include @@ -14,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -22,13 +24,17 @@ #include #include #include +#include +#include #include #include #include +#include #include #include #include +#include #include #include #include @@ -180,6 +186,40 @@ safe_halt(); } +#ifdef CONFIG_HOTPLUG_CPU +/* We don't actually take CPU down, just spin without interrupts. */ +static inline void play_dead(void) +{ + extern void ia64_cpu_local_tick (void); + /* Ack it */ + __get_cpu_var(cpu_state) = CPU_DEAD; + + /* We shouldn't have to disable interrupts while dead, but + * some interrupts just don't seem to go away, and this makes + * it "work" for testing purposes. */ + max_xtp(); + local_irq_disable(); + /* Death loop */ + while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) + cpu_relax(); + + /* + * Enable timer interrupts from now on + * Not required if we put processor in SAL_BOOT_RENDEZ mode. + */ + local_flush_tlb_all(); + cpu_set(smp_processor_id(), cpu_online_map); + wmb(); + ia64_cpu_local_tick (); + local_irq_enable(); +} +#else +static inline void play_dead(void) +{ + BUG(); +} +#endif /* CONFIG_HOTPLUG_CPU */ + void __attribute__((noreturn)) cpu_idle (void *unused) { @@ -195,7 +235,6 @@ if (!need_resched()) min_xtp(); #endif - while (!need_resched()) { if (mark_idle) (*mark_idle)(1); @@ -210,6 +249,8 @@ #endif schedule(); check_pgt_cache(); + if (cpu_is_offline(smp_processor_id())) + play_dead(); } } @@ -657,11 +698,6 @@ struct unw_frame_info info; unsigned long ip; int count = 0; - /* - * These bracket the sleeping functions.. - */ -# define first_sched ((unsigned long) scheduling_functions_start_here) -# define last_sched ((unsigned long) scheduling_functions_end_here) /* * Note: p may not be a blocked task (it could be current or @@ -676,12 +712,10 @@ if (unw_unwind(&info) < 0) return 0; unw_get_ip(&info, &ip); - if (ip < first_sched || ip >= last_sched) + if (!in_sched_functions(ip)) return ip; } while (count++ < 16); return 0; -# undef first_sched -# undef last_sched } void diff -Nru a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c --- a/arch/ia64/kernel/sal.c Tue May 18 23:38:09 2004 +++ b/arch/ia64/kernel/sal.c Tue May 18 23:38:09 2004 @@ -122,10 +122,23 @@ static void __init set_smp_redirect (int flag) { +#ifndef CONFIG_HOTPLUG_CPU if (no_int_routing) smp_int_redirect &= ~flag; else smp_int_redirect |= flag; +#else + /* + * For CPU Hotplug we dont want to do any chipset supported + * interrupt redirection. The reason is this would require that + * All interrupts be stopped and hard bind the irq to a cpu. + * Later when the interrupt is fired we need to set the redir hint + * on again in the vector. This is combersome for something that the + * user mode irq balancer will solve anyways. + */ + no_int_routing=1; + smp_int_redirect &= ~flag; +#endif } #else #define set_smp_redirect(flag) do { } while (0) diff -Nru a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c --- a/arch/ia64/kernel/setup.c Tue May 18 23:38:05 2004 +++ b/arch/ia64/kernel/setup.c Tue May 18 23:38:05 2004 @@ -575,7 +575,7 @@ void cpu_init (void) { - extern void __init ia64_mmu_init (void *); + extern void __devinit ia64_mmu_init (void *); unsigned long num_phys_stacked; pal_vm_info_2_u_t vmi; unsigned int max_ctx; diff -Nru a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c --- a/arch/ia64/kernel/smp.c Tue May 18 23:38:09 2004 +++ b/arch/ia64/kernel/smp.c Tue May 18 23:38:09 2004 @@ -71,10 +71,23 @@ /* This needs to be cacheline aligned because it is written to by *other* CPUs. */ static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned; +extern void cpu_halt (void); + +void +lock_ipi_calllock(void) +{ + spin_lock_irq(&call_lock); +} + +void +unlock_ipi_calllock(void) +{ + spin_unlock_irq(&call_lock); +} + static void stop_this_cpu (void) { - extern void cpu_halt (void); /* * Remove this CPU: */ @@ -84,6 +97,17 @@ cpu_halt(); } +void +cpu_die(void) +{ + max_xtp(); + local_irq_disable(); + cpu_halt(); + /* Should never be here */ + BUG(); + for (;;); +} + irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs) { @@ -307,6 +331,9 @@ if (!cpus) return 0; + + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); data.func = func; data.info = info; diff -Nru a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c --- a/arch/ia64/kernel/smpboot.c Tue May 18 23:38:06 2004 +++ b/arch/ia64/kernel/smpboot.c Tue May 18 23:38:06 2004 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -22,10 +23,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -44,6 +47,7 @@ #include #include #include +#include #include #define SMP_DEBUG 0 @@ -69,17 +73,22 @@ #define DEBUG_ITC_SYNC 0 -extern void __init calibrate_delay (void); +extern void __devinit calibrate_delay (void); extern void start_ap (void); extern unsigned long ia64_iobase; task_t *task_for_booting_cpu; -/* Bitmask of currently online CPUs */ +/* + * State for each CPU + */ +DEFINE_PER_CPU(int, cpu_state); + +/* Bitmasks of currently online, and possible CPUs */ cpumask_t cpu_online_map; EXPORT_SYMBOL(cpu_online_map); -cpumask_t phys_cpu_present_map; -EXPORT_SYMBOL(phys_cpu_present_map); +cpumask_t cpu_possible_map; +EXPORT_SYMBOL(cpu_possible_map); /* which logical CPU number maps to which CPU (physical APIC ID) */ volatile int ia64_cpu_to_sapicid[NR_CPUS]; @@ -99,6 +108,7 @@ nointroute (char *str) { no_int_routing = 1; + printk ("no_int_routing on\n"); return 1; } @@ -262,12 +272,12 @@ /* * Ideally sets up per-cpu profiling hooks. Doesn't do much now... */ -static inline void __init +static inline void __devinit smp_setup_percpu_timer (void) { } -static void __init +static void __devinit smp_callin (void) { int cpuid, phys_id; @@ -280,12 +290,16 @@ cpuid = smp_processor_id(); phys_id = hard_smp_processor_id(); - if (cpu_test_and_set(cpuid, cpu_online_map)) { + if (cpu_online(cpuid)) { printk(KERN_ERR "huh, phys CPU#0x%x, CPU#0x%x already present??\n", phys_id, cpuid); BUG(); } + lock_ipi_calllock(); + cpu_set(cpuid, cpu_online_map); + unlock_ipi_calllock(); + smp_setup_percpu_timer(); /* @@ -333,7 +347,7 @@ /* * Activate a secondary processor. head.S calls this. */ -int __init +int __devinit start_secondary (void *unused) { extern int cpu_idle (void); @@ -346,7 +360,7 @@ return cpu_idle(); } -static struct task_struct * __init +static struct task_struct * __devinit fork_by_hand (void) { /* @@ -356,29 +370,51 @@ return copy_process(CLONE_VM|CLONE_IDLETASK, 0, 0, 0, NULL, NULL); } -static int __init +struct create_idle { + struct task_struct *idle; + struct completion done; +}; + +void +do_fork_idle(void *_c_idle) +{ + struct create_idle *c_idle = _c_idle; + + c_idle->idle = fork_by_hand(); + complete(&c_idle->done); +} + +static int __devinit do_boot_cpu (int sapicid, int cpu) { - struct task_struct *idle; int timeout; + struct create_idle c_idle; + DECLARE_WORK(work, do_fork_idle, &c_idle); + init_completion(&c_idle.done); /* * We can't use kernel_thread since we must avoid to reschedule the child. */ - idle = fork_by_hand(); - if (IS_ERR(idle)) + if (!keventd_up() || current_is_keventd()) + work.func(work.data); + else { + schedule_work(&work); + wait_for_completion(&c_idle.done); + } + + if (IS_ERR(c_idle.idle)) panic("failed fork for CPU %d", cpu); - wake_up_forked_process(idle); + wake_up_forked_process(c_idle.idle); /* * We remove it from the pidhash and the runqueue * once we got the process: */ - init_idle(idle, cpu); + init_idle(c_idle.idle, cpu); - unhash_process(idle); + unhash_process(c_idle.idle); - task_for_booting_cpu = idle; + task_for_booting_cpu = c_idle.idle; Dprintk("Sending wakeup vector %lu to AP 0x%x/0x%x.\n", ap_wakeup_vector, cpu, sapicid); @@ -437,18 +473,23 @@ int sapicid, cpu, i; int boot_cpu_id = hard_smp_processor_id(); - for (cpu = 0; cpu < NR_CPUS; cpu++) + for (cpu = 0; cpu < NR_CPUS; cpu++) { ia64_cpu_to_sapicid[cpu] = -1; +#ifdef CONFIG_HOTPLUG_CPU + cpu_set(cpu, cpu_possible_map); +#endif + } ia64_cpu_to_sapicid[0] = boot_cpu_id; - cpus_clear(phys_cpu_present_map); - cpu_set(0, phys_cpu_present_map); - + cpus_clear(cpu_present_map); + cpu_set(0, cpu_present_map); + cpu_set(0, cpu_possible_map); for (cpu = 1, i = 0; i < smp_boot_data.cpu_count; i++) { sapicid = smp_boot_data.cpu_phys_id[i]; if (sapicid == boot_cpu_id) continue; - cpu_set(cpu, phys_cpu_present_map); + cpu_set(cpu, cpu_present_map); + cpu_set(cpu, cpu_possible_map); ia64_cpu_to_sapicid[cpu] = sapicid; cpu++; } @@ -529,9 +570,11 @@ if (!max_cpus) { printk(KERN_INFO "SMP mode deactivated.\n"); cpus_clear(cpu_online_map); - cpus_clear(phys_cpu_present_map); + cpus_clear(cpu_present_map); + cpus_clear(cpu_possible_map); cpu_set(0, cpu_online_map); - cpu_set(0, phys_cpu_present_map); + cpu_set(0, cpu_present_map); + cpu_set(0, cpu_possible_map); return; } } @@ -542,6 +585,74 @@ cpu_set(smp_processor_id(), cpu_callin_map); } +#ifdef CONFIG_HOTPLUG_CPU +extern void fixup_irqs(void); +/* must be called with cpucontrol mutex held */ +static int __devinit cpu_enable(unsigned int cpu) +{ + per_cpu(cpu_state,cpu) = CPU_UP_PREPARE; + wmb(); + + while (!cpu_online(cpu)) + cpu_relax(); + return 0; +} + +int __cpu_disable(void) +{ + int cpu = smp_processor_id(); + + /* + * dont permit boot processor for now + */ + if (cpu == 0) + return -EBUSY; + + fixup_irqs(); + local_flush_tlb_all(); + printk ("Disabled cpu %u\n", smp_processor_id()); + return 0; +} + +void __cpu_die(unsigned int cpu) +{ + unsigned int i; + + for (i = 0; i < 100; i++) { + /* They ack this in play_dead by setting CPU_DEAD */ + if (per_cpu(cpu_state, cpu) == CPU_DEAD) + { + /* + * TBD: Enable this when physical removal + * or when we put the processor is put in + * SAL_BOOT_RENDEZ mode + * cpu_clear(cpu, cpu_callin_map); + */ + return; + } + current->state = TASK_UNINTERRUPTIBLE; + schedule_timeout(HZ/10); + } + printk(KERN_ERR "CPU %u didn't die...\n", cpu); +} +#else /* !CONFIG_HOTPLUG_CPU */ +static int __devinit cpu_enable(unsigned int cpu) +{ + return 0; +} + +int __cpu_disable(void) +{ + return -ENOSYS; +} + +void __cpu_die(unsigned int cpu) +{ + /* We said "no" in __cpu_disable */ + BUG(); +} +#endif /* CONFIG_HOTPLUG_CPU */ + void smp_cpus_done (unsigned int dummy) { @@ -570,6 +681,17 @@ if (sapicid == -1) return -EINVAL; + /* + * Already booted.. just enable and get outa idle lool + */ + if (cpu_isset(cpu, cpu_callin_map)) + { + cpu_enable(cpu); + local_irq_enable(); + while (!cpu_isset(cpu, cpu_online_map)) + mb(); + return 0; + } /* Processor goes to start_secondary(), sets online flag */ ret = do_boot_cpu(sapicid, cpu); if (ret < 0) diff -Nru a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c --- a/arch/ia64/kernel/time.c Tue May 18 23:38:06 2004 +++ b/arch/ia64/kernel/time.c Tue May 18 23:38:06 2004 @@ -10,6 +10,7 @@ */ #include +#include #include #include #include @@ -244,6 +245,10 @@ { unsigned long new_itm; + if (unlikely(cpu_is_offline(smp_processor_id()))) { + return IRQ_HANDLED; + } + platform_timer_interrupt(irq, dev_id, regs); new_itm = local_cpu_data->itm_next; @@ -326,7 +331,7 @@ ia64_set_itm(local_cpu_data->itm_next); } -void __init +void __devinit ia64_init_itm (void) { unsigned long platform_base_freq, itc_freq; diff -Nru a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c --- a/arch/ia64/mm/hugetlbpage.c Tue May 18 23:38:07 2004 +++ b/arch/ia64/mm/hugetlbpage.c Tue May 18 23:38:07 2004 @@ -293,8 +293,9 @@ goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); - unlock_page(page); - if (ret) { + if (! ret) { + unlock_page(page); + } else { hugetlb_put_quota(mapping); free_huge_page(page); goto out; diff -Nru a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c --- a/arch/ia64/mm/init.c Tue May 18 23:38:06 2004 +++ b/arch/ia64/mm/init.c Tue May 18 23:38:06 2004 @@ -275,11 +275,11 @@ ia64_patch_gate(); } -void __init +void __devinit ia64_mmu_init (void *my_cpu_data) { unsigned long psr, pta, impl_va_bits; - extern void __init tlb_init (void); + extern void __devinit tlb_init (void); int cpu; #ifdef CONFIG_DISABLE_VHPT diff -Nru a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c --- a/arch/ia64/mm/tlb.c Tue May 18 23:38:08 2004 +++ b/arch/ia64/mm/tlb.c Tue May 18 23:38:08 2004 @@ -166,7 +166,7 @@ } EXPORT_SYMBOL(flush_tlb_range); -void __init +void __devinit ia64_tlb_init (void) { ia64_ptce_info_t ptce_info; diff -Nru a/arch/m68k/Kconfig b/arch/m68k/Kconfig --- a/arch/m68k/Kconfig Tue May 18 23:38:08 2004 +++ b/arch/m68k/Kconfig Tue May 18 23:38:08 2004 @@ -76,9 +76,9 @@ select MMU_SUN3 if MMU help This option enables support for the Sun 3 series of workstations - (3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires - that all other hardware types must be disabled, as Sun 3 kernels - are incompatible with all other m68k targets (including Sun 3x!). + (3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires + that all other hardware types must be disabled, as Sun 3 kernels + are incompatible with all other m68k targets (including Sun 3x!). If you don't want to compile a kernel exclusively for a Sun 3, say N. @@ -687,7 +687,7 @@ debugging info resulting in a larger kernel image. Say Y here only if you plan to use gdb to debug the kernel. If you don't debug the kernel, you can say N. - + endmenu source "security/Kconfig" diff -Nru a/arch/m68k/Makefile b/arch/m68k/Makefile --- a/arch/m68k/Makefile Tue May 18 23:38:09 2004 +++ b/arch/m68k/Makefile Tue May 18 23:38:09 2004 @@ -56,7 +56,7 @@ head-y := arch/m68k/kernel/head.o else head-y := arch/m68k/kernel/sun3-head.o -endif +endif core-y += arch/m68k/kernel/ arch/m68k/mm/ libs-y += arch/m68k/lib/ diff -Nru a/arch/m68k/amiga/amisound.c b/arch/m68k/amiga/amisound.c --- a/arch/m68k/amiga/amisound.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/amiga/amisound.c Tue May 18 23:38:09 2004 @@ -88,7 +88,7 @@ custom.aud[2].audlen = sizeof(sine_data)/2; custom.aud[2].audper = (unsigned short)period; custom.aud[2].audvol = 32; /* 50% of maxvol */ - + if (ticks) { sound_timer.expires = jiffies + ticks; add_timer( &sound_timer ); diff -Nru a/arch/m68k/amiga/chipram.c b/arch/m68k/amiga/chipram.c --- a/arch/m68k/amiga/chipram.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/amiga/chipram.c Tue May 18 23:38:08 2004 @@ -42,7 +42,7 @@ chipavail = amiga_chip_size; } - + void *amiga_chip_alloc(unsigned long size, const char *name) { struct resource *res; diff -Nru a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c --- a/arch/m68k/amiga/config.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/amiga/config.c Tue May 18 23:38:05 2004 @@ -332,7 +332,7 @@ case AMI_DRACO: panic("No support for Draco yet"); - + default: panic("Unknown Amiga Model"); } @@ -426,7 +426,7 @@ */ mach_set_clock_mmss = amiga_set_clock_mmss; - mach_get_ss = amiga_get_ss; + mach_get_ss = amiga_get_ss; #ifdef CONFIG_AMIGA_FLOPPY mach_floppy_setup = amiga_floppy_setup; #endif @@ -679,13 +679,13 @@ tod_3000.second2 = real_seconds % 10; tod_3000.minute1 = real_minutes / 10; tod_3000.minute2 = real_minutes % 10; - + tod_3000.cntrl1 = TOD3000_CNTRL1_FREE; } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ { int cnt = 5; tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD; - + while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt--) { tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD; @@ -715,7 +715,7 @@ tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD; s = tod_3000.second1 * 10 + tod_3000.second2; tod_3000.cntrl1 = TOD3000_CNTRL1_FREE; - } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ { + } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ { s = tod_2000.second1 * 10 + tod_2000.second2; } return s; @@ -758,7 +758,7 @@ : "a" (jmp_addr)); jmp_addr_label040: /* disable translation on '040 now */ - __asm__ __volatile__ + __asm__ __volatile__ ("moveq #0,%/d0\n\t" ".chip 68040\n\t" "movec %%d0,%%tc\n\t" /* disable MMU */ @@ -783,7 +783,7 @@ "1:\n\t" "reset\n\t" "jmp %/a0@" : /* Just that gcc scans it for % escapes */ ); - + for (;;); } diff -Nru a/arch/m68k/apollo/config.c b/arch/m68k/apollo/config.c --- a/arch/m68k/apollo/config.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/apollo/config.c Tue May 18 23:38:09 2004 @@ -62,19 +62,19 @@ const unsigned long *data = record->data; switch(record->tag) { - case BI_APOLLO_MODEL: - apollo_model=*data; + case BI_APOLLO_MODEL: + apollo_model=*data; break; default: unknown=1; } - + return unknown; } void dn_setup_model(void) { - + printk("Apollo hardware found: "); printk("[%s]\n", apollo_models[apollo_model - APOLLO_DN3000]); @@ -85,19 +85,19 @@ break; case APOLLO_DN3000: case APOLLO_DN3010: - sio01_physaddr=SAU8_SIO01_PHYSADDR; - rtc_physaddr=SAU8_RTC_PHYSADDR; - pica_physaddr=SAU8_PICA; - picb_physaddr=SAU8_PICB; + sio01_physaddr=SAU8_SIO01_PHYSADDR; + rtc_physaddr=SAU8_RTC_PHYSADDR; + pica_physaddr=SAU8_PICA; + picb_physaddr=SAU8_PICB; cpuctrl_physaddr=SAU8_CPUCTRL; timer_physaddr=SAU8_TIMER; break; case APOLLO_DN4000: - sio01_physaddr=SAU7_SIO01_PHYSADDR; - sio23_physaddr=SAU7_SIO23_PHYSADDR; - rtc_physaddr=SAU7_RTC_PHYSADDR; - pica_physaddr=SAU7_PICA; - picb_physaddr=SAU7_PICB; + sio01_physaddr=SAU7_SIO01_PHYSADDR; + sio23_physaddr=SAU7_SIO23_PHYSADDR; + rtc_physaddr=SAU7_RTC_PHYSADDR; + pica_physaddr=SAU7_PICA; + picb_physaddr=SAU7_PICB; cpuctrl_physaddr=SAU7_CPUCTRL; timer_physaddr=SAU7_TIMER; break; @@ -105,11 +105,11 @@ panic("Apollo model not yet supported"); break; case APOLLO_DN3500: - sio01_physaddr=SAU7_SIO01_PHYSADDR; - sio23_physaddr=SAU7_SIO23_PHYSADDR; - rtc_physaddr=SAU7_RTC_PHYSADDR; - pica_physaddr=SAU7_PICA; - picb_physaddr=SAU7_PICB; + sio01_physaddr=SAU7_SIO01_PHYSADDR; + sio23_physaddr=SAU7_SIO23_PHYSADDR; + rtc_physaddr=SAU7_RTC_PHYSADDR; + pica_physaddr=SAU7_PICA; + picb_physaddr=SAU7_PICB; cpuctrl_physaddr=SAU7_CPUCTRL; timer_physaddr=SAU7_TIMER; break; @@ -131,17 +131,17 @@ void dn_serial_console_write (struct console *co, const char *str,unsigned int count) { while(count--) { - if (*str == '\n') { - sio01.rhrb_thrb = (unsigned char)'\r'; - while (!(sio01.srb_csrb & 0x4)) + if (*str == '\n') { + sio01.rhrb_thrb = (unsigned char)'\r'; + while (!(sio01.srb_csrb & 0x4)) ; - } + } sio01.rhrb_thrb = (unsigned char)*str++; while (!(sio01.srb_csrb & 0x4)) ; - } + } } - + void dn_serial_print (const char *str) { while (*str) { @@ -160,7 +160,7 @@ int i; - dn_setup_model(); + dn_setup_model(); mach_sched_init=dn_sched_init; /* */ mach_init_IRQ=dn_init_IRQ; @@ -180,24 +180,24 @@ conswitchp = &dummy_con; #endif #ifdef CONFIG_HEARTBEAT - mach_heartbeat = dn_heartbeat; + mach_heartbeat = dn_heartbeat; #endif mach_get_model = dn_get_model; cpuctrl=0xaa00; /* clear DMA translation table */ - for(i=0;i<0x400;i++) + for(i=0;i<0x400;i++) addr_xlat_map[i]=0; -} +} irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) { volatile unsigned char x; sched_timer_handler(irq,dev_id,fp); - + x=*(volatile unsigned char *)(timer+3); x=*(volatile unsigned char *)(timer+5); @@ -206,7 +206,7 @@ void dn_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) { - /* program timer 1 */ + /* program timer 1 */ *(volatile unsigned char *)(timer+3)=0x01; *(volatile unsigned char *)(timer+1)=0x40; *(volatile unsigned char *)(timer+5)=0x09; @@ -272,7 +272,7 @@ for(;;); } - + void dn_dummy_waitbut(void) { dn_serial_print("waitbut\n"); @@ -291,7 +291,7 @@ static void dn_heartbeat(int on) { - if(on) { + if(on) { dn_cpuctrl&=~0x100; cpuctrl=dn_cpuctrl; } diff -Nru a/arch/m68k/apollo/dma.c b/arch/m68k/apollo/dma.c --- a/arch/m68k/apollo/dma.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/apollo/dma.c Tue May 18 23:38:08 2004 @@ -34,7 +34,7 @@ next_free_xlat_entry+=2; if(next_free_xlat_entry>125) next_free_xlat_entry=0; - + #if 0 printk("next_free_xlat_entry: %d\n",next_free_xlat_entry); #endif diff -Nru a/arch/m68k/apollo/dn_debug.c b/arch/m68k/apollo/dn_debug.c --- a/arch/m68k/apollo/dn_debug.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/apollo/dn_debug.c Tue May 18 23:38:05 2004 @@ -14,9 +14,9 @@ i=vsprintf(current_dbg_ptr,fmt,args); va_end(args); current_dbg_ptr+=i; - + return i; } - else + else return 0; } diff -Nru a/arch/m68k/apollo/dn_ints.c b/arch/m68k/apollo/dn_ints.c --- a/arch/m68k/apollo/dn_ints.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/apollo/dn_ints.c Tue May 18 23:38:08 2004 @@ -40,7 +40,7 @@ dn_irqs[i].dev_id=NULL; dn_irqs[i].devname=NULL; } - + } int dn_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { @@ -79,7 +79,7 @@ if(irq<8) *(volatile unsigned char *)(pica+1)|=(1<): Autovector interrupts are 1..7, then follow ST-MFP, * TT-MFP, SCC, and finally VME interrupts. Vector numbers for the latter can * be allocated by atari_register_vme_int(). * * Each interrupt can be of three types: - * + * * - SLOW: The handler runs with all interrupts enabled, except the one it * was called by (to avoid reentering). This should be the usual method. * But it is currently possible only for MFP ints, since only the MFP @@ -179,16 +179,16 @@ " movew %%d1,%%sr\n" /* set IPL = previous value */ \ " addql #1,%a0\n" \ " lea %a1,%%a0\n" \ -" pea %%sp@\n" /* push addr of frame */ \ +" pea %%sp@\n" /* push addr of frame */ \ " movel %%a0@(4),%%sp@-\n" /* push handler data */ \ -" pea (%c3+8)\n" /* push int number */ \ +" pea (%c3+8)\n" /* push int number */ \ " movel %%a0@,%%a0\n" \ " jbsr %%a0@\n" /* call the handler */ \ " addql #8,%%sp\n" \ " addql #4,%%sp\n" \ " orw #0x0600,%%sr\n" \ " andw #0xfeff,%%sr\n" /* set IPL = 6 again */ \ -" orb #(1<<(%c3&7)),%a4:w\n" /* now unmask the int again */ \ +" orb #(1<<(%c3&7)),%a4:w\n" /* now unmask the int again */ \ " jbra ret_from_interrupt\n" \ : : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \ "n" (PT_OFF_SR), "n" (n), \ @@ -274,7 +274,7 @@ void atari_fast_prio_irq_dummy (void) { __asm__ (__ALIGN_STR "\n" "atari_fast_irq_handler:\n\t" - "orw #0x700,%%sr\n" /* disable all interrupts */ + "orw #0x700,%%sr\n" /* disable all interrupts */ "atari_prio_irq_handler:\n\t" "addl %3,%2\n\t" /* preempt_count() += HARDIRQ_OFFSET */ SAVE_ALL_INT "\n\t" @@ -282,13 +282,13 @@ /* get vector number from stack frame and convert to source */ "bfextu %%sp@(%c1){#4,#10},%%d0\n\t" "subw #(0x40-8),%%d0\n\t" - "jpl 1f\n\t" + "jpl 1f\n\t" "addw #(0x40-8-0x18),%%d0\n" "1:\tlea %a0,%%a0\n\t" "addql #1,%%a0@(%%d0:l:4)\n\t" "lea irq_handler,%%a0\n\t" "lea %%a0@(%%d0:l:8),%%a0\n\t" - "pea %%sp@\n\t" /* push frame address */ + "pea %%sp@\n\t" /* push frame address */ "movel %%a0@(4),%%sp@-\n\t" /* push handler data */ "movel %%d0,%%sp@-\n\t" /* push int number */ "movel %%a0@,%%a0\n\t" @@ -395,7 +395,7 @@ be in an atasound_init(), that doesn't exist yet. */ atari_microwire_cmd(MW_LM1992_PSG_HIGH); } - + stdma_init(); /* Initialize the PSG: all sounds off, both ports output */ @@ -460,7 +460,7 @@ __FUNCTION__, irq, devname); return -EINVAL; } - + if (vectors[vector] == bad_interrupt) { /* int has no handler yet */ irq_handler[irq].handler = handler; @@ -594,7 +594,7 @@ for(i = 0; i < 32; i++) if((free_vme_vec_bitmap & (1 << i)) == 0) break; - + if(i == 16) return 0; @@ -641,7 +641,7 @@ } if (num_spurious) seq_printf(p, "spurio.: %10u\n", num_spurious); - + return 0; } diff -Nru a/arch/m68k/atari/atasound.c b/arch/m68k/atari/atasound.c --- a/arch/m68k/atari/atasound.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/atari/atasound.c Tue May 18 23:38:05 2004 @@ -70,7 +70,7 @@ if (hz) { /* Convert from frequency value to PSG period value (base frequency 125 kHz). */ - + period = PSG_FREQ / hz; if (period > 0xfff) period = 0xfff; diff -Nru a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c --- a/arch/m68k/atari/config.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/atari/config.c Tue May 18 23:38:08 2004 @@ -7,7 +7,7 @@ * Added setting of time_adj to get a better clock. * * 5/14/94 Roman Hodek: - * gettod() for TT + * gettod() for TT * * 5/15/94 Roman Hodek: * hard_reset_now() for Atari (and others?) @@ -92,7 +92,7 @@ * for posterity. * -- Peter Maydell , 05/1998 */ - + #if 0 static int __init hwreg_present_bywrite(volatile void *regp, unsigned char val) @@ -100,7 +100,7 @@ int ret; long save_sp, save_vbr; static long tmp_vectors[3] = { [2] = (long)&&after_test }; - + __asm__ __volatile__ ( "movec %/vbr,%2\n\t" /* save vbr value */ "movec %4,%/vbr\n\t" /* set up temporary vectors */ @@ -141,14 +141,14 @@ *ctla = 2; MFPDELAY(); *ctla = 0x40; MFPDELAY(); - + *ctla = 2; MFPDELAY(); if (*ctla != 0x40) return( 0 ); MFPDELAY(); *ctla = 2; MFPDELAY(); *ctla = 0x60; MFPDELAY(); - + *ctla = 2; MFPDELAY(); if (*ctla != 0x60) return( 0 ); @@ -199,7 +199,7 @@ p += 3; ovsc_shift = ATARI_SWITCH_OVSC_SHIFT; } - + if (strcmp( p, "ikbd" ) == 0) { /* RTS line of IKBD ACIA */ atari_switches |= ATARI_SWITCH_IKBD << ovsc_shift; @@ -269,8 +269,8 @@ ((atari_switches&ATARI_SWITCH_SND6) ? 0x40 : 0) | ((atari_switches&ATARI_SWITCH_SND7) ? 0x80 : 0); } - - /* ++bjoern: + + /* ++bjoern: * Determine hardware present */ @@ -446,7 +446,7 @@ : /* no outputs */ : /* no inputs */ : "d0"); - + /* allocator for memory that must reside in st-ram */ atari_stram_init (); @@ -507,7 +507,7 @@ if (atari_dont_touch_floppy_select) return; - + local_irq_save(flags); sound_ym.rd_data_reg_sel = 14; /* Select PSG Port A */ tmp = sound_ym.rd_data_reg_sel; @@ -544,7 +544,7 @@ * address of a C label. No hope to compile this with another compiler * than GCC! */ - + /* ++andreas: no need for complicated code, just depend on prefetch */ static void atari_reset (void) @@ -563,7 +563,7 @@ acia.key_ctrl = ACIA_RESET; if (atari_switches & ATARI_SWITCH_OVSC_MIDI) acia.mid_ctrl = ACIA_RESET; - + /* processor independent: turn off interrupts and reset the VBR; * the caches must be left enabled, else prefetching the final jump * instruction doesn't work. */ @@ -572,7 +572,7 @@ ("moveq #0,%/d0\n\t" "movec %/d0,%/vbr" : : : "d0" ); - + if (CPU_IS_040_OR_060) { unsigned long jmp_addr040 = virt_to_phys(&&jmp_addr_label040); if (CPU_IS_060) { @@ -584,7 +584,7 @@ ".chip 68k" : : : "d0" ); } - + __asm__ __volatile__ ("movel %0,%/d0\n\t" "andl #0xff000000,%/d0\n\t" diff -Nru a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c --- a/arch/m68k/atari/debug.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/atari/debug.c Tue May 18 23:38:06 2004 @@ -4,7 +4,7 @@ * Atari debugging and serial console stuff * * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek - * + * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. @@ -99,7 +99,7 @@ while( (mfp.par_dt_reg & 1) && --i ) /* wait for BUSY == L */ ; if (!i) return( 0 ); - + sound_ym.rd_data_reg_sel = 15; /* select port B */ sound_ym.wd_data = c; /* put char onto port */ sound_ym.rd_data_reg_sel = 14; /* select port A */ @@ -177,7 +177,7 @@ if (baud < B1200 || baud > B38400+2) baud = B9600; /* use default 9600bps for non-implemented rates */ baud -= B1200; /* baud_table[] starts at 1200bps */ - + mfp.trn_stat &= ~0x01; /* disable TX */ mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */ mfp.tim_ct_cd &= 0x70; /* stop timer D */ @@ -204,7 +204,7 @@ for( i = 100; i > 0; --i ) \ MFPDELAY(); \ } while(0) - + #ifndef CONFIG_SERIAL_CONSOLE static void __init atari_init_scc_port( int cflag ) #else @@ -214,20 +214,20 @@ extern int atari_SCC_reset_done; static int clksrc_table[9] = /* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */ - { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 }; + { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 }; static int brgsrc_table[9] = /* reg 14: 0 = RTxC, 2 = PCLK */ - { 2, 2, 2, 2, 2, 2, 0, 2, 2 }; + { 2, 2, 2, 2, 2, 2, 0, 2, 2 }; static int clkmode_table[9] = /* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */ - { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 }; + { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 }; static int div_table[9] = /* reg12 (BRG low) */ - { 208, 138, 103, 50, 24, 11, 1, 0, 0 }; + { 208, 138, 103, 50, 24, 11, 1, 0, 0 }; int baud = cflag & CBAUD; int clksrc, clkmode, div, reg3, reg5; - + if (cflag & CBAUDEX) baud += B38400; if (baud < B1200 || baud > B38400+2) @@ -248,7 +248,7 @@ reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40; reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */; - + (void)scc.cha_b_ctrl; /* reset reg pointer */ SCC_WRITE( 9, 0xc0 ); /* reset */ LONG_DELAY(); /* extra delay after WR9 access */ @@ -267,12 +267,12 @@ SCC_WRITE( 14, brgsrc_table[baud] | (div ? 1 : 0) ); SCC_WRITE( 3, reg3 | 1 ); SCC_WRITE( 5, reg5 | 8 ); - + atari_SCC_reset_done = 1; atari_SCC_init_done = 1; } -#ifndef CONFIG_SERIAL_CONSOLE +#ifndef CONFIG_SERIAL_CONSOLE static void __init atari_init_midi_port( int cflag ) #else void atari_init_midi_port( int cflag ) diff -Nru a/arch/m68k/atari/stdma.c b/arch/m68k/atari/stdma.c --- a/arch/m68k/atari/stdma.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/atari/stdma.c Tue May 18 23:38:06 2004 @@ -97,7 +97,7 @@ /* * Function: void stdma_release( void ) * - * Purpose: Releases the lock on the ST-DMA chip. + * Purpose: Releases the lock on the ST-DMA chip. * * Inputs: none * diff -Nru a/arch/m68k/atari/stram.c b/arch/m68k/atari/stram.c --- a/arch/m68k/atari/stram.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/atari/stram.c Tue May 18 23:38:08 2004 @@ -52,7 +52,7 @@ /* Pre-swapping comments: * * ++roman: - * + * * New version of ST-Ram buffer allocation. Instead of using the * 1 MB - 4 KB that remain when the ST-Ram chunk starts at $1000 * (1 MB granularity!), such buffers are reserved like this: @@ -60,14 +60,14 @@ * - If the kernel resides in ST-Ram anyway, we can take the buffer * from behind the current kernel data space the normal way * (incrementing start_mem). - * + * * - If the kernel is in TT-Ram, stram_init() initializes start and * end of the available region. Buffers are allocated from there * and mem_init() later marks the such used pages as reserved. * Since each TT-Ram chunk is at least 4 MB in size, I hope there * won't be an overrun of the ST-Ram region by normal kernel data * space. - * + * * For that, ST-Ram may only be allocated while kernel initialization * is going on, or exactly: before mem_init() is called. There is also * no provision now for freeing ST-Ram buffers. It seems that isn't @@ -105,7 +105,7 @@ * visible on a TT, where the speed difference between ST- and TT-RAM isn't * that dramatic, but it should on machines where TT-RAM is really much faster * (e.g. Afterburner). - * + * * [1]: __get_free_pages() does a fine job if you only want one page, but if * you want more (contiguous) pages, it can give you such a block only if * there's already a free one. The algorithm can't try to free buffers or swap @@ -318,7 +318,7 @@ swap_end = swap_start + max_swap_size; DPRINTK( "atari_stram_reserve_pages: swapping enabled; " "swap=%p-%p\n", swap_start, swap_end); - + /* reserve some amount of memory for maintainance of * swapping itself: one page for each 2048 (PAGE_SIZE/2) * swap pages. (2 bytes for each page) */ @@ -328,7 +328,7 @@ /* correct swap_start if necessary */ if (swap_start + PAGE_SIZE == swap_data) swap_start = start_mem - PAGE_SIZE; - + if (!swap_init( start_mem, swap_data )) { printk( KERN_ERR "ST-RAM swap space initialization failed\n" ); max_swap_size = 0; @@ -368,13 +368,13 @@ /* * This is main public interface: somehow allocate a ST-RAM block * There are three strategies: - * + * * - If we're before mem_init(), we have to make a static allocation. The * region is taken in the kernel data area (if the kernel is in ST-RAM) or * from the start of ST-RAM (if the kernel is in TT-RAM) and added to the * rsvd_stram_* region. The ST-RAM is somewhere in the middle of kernel * address space in the latter case. - * + * * - If mem_init() already has been called and ST-RAM swapping is enabled, * try to get the memory from the (pseudo) swap-space, either free already * or by moving some other pages out of the swap. @@ -383,7 +383,7 @@ * enabled, the only possibility is to try with __get_dma_pages(). This has * the disadvantage that it's very hard to get more than 1 page, and it is * likely to fail :-( - * + * */ void *atari_stram_alloc(long size, const char *owner) { @@ -450,7 +450,7 @@ } DPRINTK( "atari_stram_free: found block (%p): size=%08lx, owner=%s, " "flags=%02x\n", block, block->size, block->owner, block->flags ); - + #ifdef CONFIG_STRAM_SWAP if (!max_swap_size) { #endif @@ -503,14 +503,14 @@ DPRINTK("swap_init(start_mem=%p, swap_data=%p)\n", start_mem, swap_data); - + /* need at least one page for swapping to (and this also isn't very * much... :-) */ if (swap_end - swap_start < 2*PAGE_SIZE) { printk( KERN_WARNING "stram_swap_init: swap space too small\n" ); return( 0 ); } - + /* find free slot in swap_info */ for( p = swap_info, type = 0; type < nr_swapfiles; type++, p++ ) if (!(p->flags & SWP_USED)) @@ -531,7 +531,7 @@ fake_dentry.d_name.name = "stram (internal)"; fake_dentry.d_name.len = 16; fake_vfsmnt.mnt_parent = &fake_vfsmnt; - + p->flags = SWP_USED; p->swap_file = &fake_dentry; p->swap_vfsmnt = &fake_vfsmnt; @@ -706,7 +706,7 @@ } while (start < end); } -static void unswap_process(struct mm_struct * mm, swp_entry_t entry, +static void unswap_process(struct mm_struct * mm, swp_entry_t entry, struct page *page) { struct vm_area_struct* vma; @@ -799,7 +799,7 @@ unsigned long start, total_free, region_free; int err; void *ret = NULL; - + DPRINTK( "get_stram_region(n_pages=%lu)\n", n_pages ); down(&stram_swap_sem); @@ -874,7 +874,7 @@ static int in_some_region(void *addr) { BLOCK *p; - + for( p = alloc_list; p; p = p->next ) { if (p->start <= addr && addr < p->start + p->size) return( 1 ); @@ -920,7 +920,7 @@ /* don't need more free pages... :-) */ goto out; } - + /* now shift the window and look for the area where as much pages as * possible are free */ while( tail < max ) { @@ -1130,7 +1130,7 @@ static BLOCK *find_region( void *addr ) { BLOCK *p; - + for( p = alloc_list; p; p = p->next ) { if (p->start == addr) return( p ); @@ -1145,7 +1145,7 @@ static int remove_region( BLOCK *block ) { BLOCK **p; - + for( p = &alloc_list; *p; p = &((*p)->next) ) if (*p == block) break; if (!*p) diff -Nru a/arch/m68k/atari/time.c b/arch/m68k/atari/time.c --- a/arch/m68k/atari/time.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/atari/time.c Tue May 18 23:38:08 2004 @@ -4,7 +4,7 @@ * Atari time and real time clock stuff * * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek - * + * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. @@ -25,7 +25,7 @@ /* set Timer C data Register */ mfp.tim_dt_c = INT_TICKS; /* start timer C, div = 1:100 */ - mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60; + mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60; /* install interrupt service routine for MFP Timer C */ request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW, "timer", timer_routine); @@ -34,7 +34,7 @@ /* ++andreas: gettimeoffset fixed to check for pending interrupt */ #define TICK_SIZE 10000 - + /* This is always executed with interrupts disabled. */ unsigned long atari_gettimeoffset (void) { @@ -59,9 +59,9 @@ { #define COPY(v) val->v=(mste_rtc.v & 0xf) do { - COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; - COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; - COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; + COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; + COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; + COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ; COPY(year_tens) ; /* prevent from reading the clock while it changed */ @@ -73,9 +73,9 @@ { #define COPY(v) mste_rtc.v=val->v do { - COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; - COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; - COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; + COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; + COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; + COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ; COPY(year_tens) ; /* prevent from writing the clock while it changed */ @@ -104,14 +104,14 @@ int hour, year; int hr24=0; struct MSTE_RTC val; - + mste_rtc.mode=(mste_rtc.mode | 1); hr24=mste_rtc.mon_tens & 1; mste_rtc.mode=(mste_rtc.mode & ~1); if (op) { /* write: prepare values */ - + val.sec_ones = t->tm_sec % 10; val.sec_tens = t->tm_sec / 10; val.min_ones = t->tm_min % 10; @@ -160,8 +160,8 @@ int atari_tt_hwclk( int op, struct rtc_time *t ) { - int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0; - unsigned long flags; + int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0; + unsigned long flags; unsigned char ctrl; int pm = 0; @@ -170,7 +170,7 @@ if (op) { /* write: prepare values */ - + sec = t->tm_sec; min = t->tm_min; hour = t->tm_hour; @@ -178,7 +178,7 @@ mon = t->tm_mon + 1; year = t->tm_year - atari_rtc_year_offset; wday = t->tm_wday + (t->tm_wday >= 0); - + if (!(ctrl & RTC_24H)) { if (hour > 11) { pm = 0x80; @@ -188,7 +188,7 @@ else if (hour == 0) hour = 12; } - + if (!(ctrl & RTC_DM_BINARY)) { BIN_TO_BCD(sec); BIN_TO_BCD(min); @@ -199,7 +199,7 @@ if (wday >= 0) BIN_TO_BCD(wday); } } - + /* Reading/writing the clock registers is a bit critical due to * the regular update cycle of the RTC. While an update is in * progress, registers 0..9 shouldn't be touched. @@ -242,7 +242,7 @@ if (!op) { /* read: adjust values */ - + if (hour & 0x80) { hour &= ~0x80; pm = 1; @@ -284,7 +284,7 @@ struct MSTE_RTC val; unsigned char rtc_minutes; - mste_read(&val); + mste_read(&val); rtc_minutes= val.min_ones + val.min_tens * 10; if ((rtc_minutes < real_minutes ? real_minutes - rtc_minutes diff -Nru a/arch/m68k/bvme6000/rtc.c b/arch/m68k/bvme6000/rtc.c --- a/arch/m68k/bvme6000/rtc.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/bvme6000/rtc.c Tue May 18 23:38:08 2004 @@ -44,7 +44,7 @@ volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE; unsigned char msr; unsigned long flags; - struct rtc_time wtime; + struct rtc_time wtime; switch (cmd) { case RTC_RD_TIME: /* Read the time/date from RTC */ @@ -105,7 +105,7 @@ if (yrs >= 2070) return -EINVAL; - + local_irq_save(flags); /* Ensure clock and real-time-mode-register are accessible */ msr = rtc->msr & 0xc0; diff -Nru a/arch/m68k/defconfig b/arch/m68k/defconfig --- a/arch/m68k/defconfig Tue May 18 23:38:05 2004 +++ b/arch/m68k/defconfig Tue May 18 23:38:05 2004 @@ -101,7 +101,7 @@ # CONFIG_ATM is not set # -# +# # # CONFIG_IPX is not set # CONFIG_ATALK is not set diff -Nru a/arch/m68k/fpsp040/README b/arch/m68k/fpsp040/README --- a/arch/m68k/fpsp040/README Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/README Tue May 18 23:38:06 2004 @@ -12,7 +12,7 @@ INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) -and any accompanying written materials. +and any accompanying written materials. To the maximum extent permitted by applicable law, IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER @@ -20,7 +20,7 @@ PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. Motorola assumes no responsibility for the maintenance -and support of the SOFTWARE. +and support of the SOFTWARE. You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE so long as this entire notice is retained diff -Nru a/arch/m68k/fpsp040/bindec.S b/arch/m68k/fpsp040/bindec.S --- a/arch/m68k/fpsp040/bindec.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/bindec.S Tue May 18 23:38:06 2004 @@ -19,7 +19,7 @@ | | Algorithm: | -| A1. Set RM and size ext; Set SIGMA = sign of input. +| A1. Set RM and size ext; Set SIGMA = sign of input. | The k-factor is saved for use in d7. Clear the | BINDEC_FLG for separating normalized/denormalized | input. If input is unnormalized or denormalized, @@ -29,15 +29,15 @@ | | A3. Compute ILOG. | ILOG is the log base 10 of the input value. It is -| approximated by adding e + 0.f when the original -| value is viewed as 2^^e * 1.f in extended precision. +| approximated by adding e + 0.f when the original +| value is viewed as 2^^e * 1.f in extended precision. | This value is stored in d6. | | A4. Clr INEX bit. -| The operation in A3 above may have set INEX2. +| The operation in A3 above may have set INEX2. | | A5. Set ICTR = 0; -| ICTR is a flag used in A13. It must be set before the +| ICTR is a flag used in A13. It must be set before the | loop entry A6. | | A6. Calculate LEN. @@ -59,9 +59,9 @@ | of ISCALE and X. A table is given in the code. | | A8. Clr INEX; Force RZ. -| The operation in A3 above may have set INEX2. +| The operation in A3 above may have set INEX2. | RZ mode is forced for the scaling operation to insure -| only one rounding error. The grs bits are collected in +| only one rounding error. The grs bits are collected in | the INEX flag for use in A10. | | A9. Scale X -> Y. @@ -90,11 +90,11 @@ | the mantissa by 10. | | A14. Convert the mantissa to bcd. -| The binstr routine is used to convert the LEN digit +| The binstr routine is used to convert the LEN digit | mantissa to bcd in memory. The input to binstr is | to be a fraction; i.e. (mantissa)/10^LEN and adjusted | such that the decimal point is to the left of bit 63. -| The bcd digits are stored in the correct position in +| The bcd digits are stored in the correct position in | the final string area in memory. | | A15. Convert the exponent to bcd. @@ -114,7 +114,7 @@ | d2: upper 32-bits of mantissa for binstr | d3: scratch;lower 32-bits of mantissa for binstr | d4: LEN -| d5: LAMBDA/ICTR +| d5: LAMBDA/ICTR | d6: ILOG | d7: k-factor | a0: ptr for original operand/final result @@ -131,8 +131,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package @@ -142,16 +142,16 @@ |section 8 | Constants in extended precision -LOG2: .long 0x3FFD0000,0x9A209A84,0xFBCFF798,0x00000000 +LOG2: .long 0x3FFD0000,0x9A209A84,0xFBCFF798,0x00000000 LOG2UP1: .long 0x3FFD0000,0x9A209A84,0xFBCFF799,0x00000000 | Constants in single precision -FONE: .long 0x3F800000,0x00000000,0x00000000,0x00000000 +FONE: .long 0x3F800000,0x00000000,0x00000000,0x00000000 FTWO: .long 0x40000000,0x00000000,0x00000000,0x00000000 -FTEN: .long 0x41200000,0x00000000,0x00000000,0x00000000 +FTEN: .long 0x41200000,0x00000000,0x00000000,0x00000000 F4933: .long 0x459A2800,0x00000000,0x00000000,0x00000000 -RBDTBL: .byte 0,0,0,0 +RBDTBL: .byte 0,0,0,0 .byte 3,3,2,2 .byte 3,2,2,3 .byte 2,3,3,2 @@ -171,7 +171,7 @@ | separating normalized/denormalized input. If the input | is a denormalized number, set the BINDEC_FLG memory word | to signal denorm. If the input is unnormalized, normalize -| the input and test for denormalized result. +| the input and test for denormalized result. | fmovel #rm_mode,%FPCR |set RM and ext movel (%a0),L_SCR2(%a6) |save exponent for sign check @@ -251,7 +251,7 @@ subw #0x3fff,%d0 |strip off bias faddw %d0,%fp0 |add in exp fsubs FONE,%fp0 |subtract off 1.0 - fbge pos_res |if pos, branch + fbge pos_res |if pos, branch fmulx LOG2UP1,%fp0 |if neg, mul by LOG2UP1 fmovel %fp0,%d6 |put ILOG in d6 as a lword bras A4_str |go move out ILOG @@ -261,14 +261,14 @@ | A4. Clr INEX bit. -| The operation in A3 above may have set INEX2. +| The operation in A3 above may have set INEX2. -A4_str: +A4_str: fmovel #0,%FPSR |zero all of fpsr - nothing needed | A5. Set ICTR = 0; -| ICTR is a flag used in A13. It must be set before the +| ICTR is a flag used in A13. It must be set before the | loop entry A6. The lower word of d5 is used for ICTR. clrw %d5 |clear ICTR @@ -303,7 +303,7 @@ | L_SCR1:x/x | L_SCR2:first word of X packed/Unchanged -A6_str: +A6_str: tstl %d7 |branch on sign of k bles k_neg |if k <= 0, LEN = ILOG + 1 - k movel %d7,%d4 |if k > 0, LEN = k @@ -375,13 +375,13 @@ | L_SCR1:x/x | L_SCR2:first word of X packed/Unchanged -A7_str: +A7_str: tstl %d7 |test sign of k bgts k_pos |if pos and > 0, skip this cmpl %d6,%d7 |test k - ILOG blts k_pos |if ILOG >= k, skip this movel %d7,%d6 |if ((k<0) & (ILOG < k)) ILOG = k -k_pos: +k_pos: movel %d6,%d0 |calc ILOG + 1 - LEN in d0 addql #1,%d0 |add the 1 subl %d4,%d0 |sub off LEN @@ -395,9 +395,9 @@ bgts no_inf |if false, skip rest addil #24,%d0 |add in 24 to iscale movel #24,%d2 |put 24 in d2 for A9 -no_inf: +no_inf: negl %d0 |and take abs of ISCALE -iscale: +iscale: fmoves FONE,%fp1 |init fp1 to 1 bfextu USER_FPCR(%a6){#26:#2},%d1 |get initial rmode bits lslw #1,%d1 |put them in bits 2:1 @@ -425,33 +425,33 @@ leal PTENRM,%a1 |load a1 with RM table base rmode: clrl %d3 |clr table index -e_loop: +e_loop: lsrl #1,%d0 |shift next bit into carry bccs e_next |if zero, skip the mul fmulx (%a1,%d3),%fp1 |mul by 10**(d3_bit_no) -e_next: +e_next: addl #12,%d3 |inc d3 to next pwrten table entry tstl %d0 |test if ISCALE is zero bnes e_loop |if not, loop | A8. Clr INEX; Force RZ. -| The operation in A3 above may have set INEX2. +| The operation in A3 above may have set INEX2. | RZ mode is forced for the scaling operation to insure -| only one rounding error. The grs bits are collected in +| only one rounding error. The grs bits are collected in | the INEX flag for use in A10. | | Register usage: | Input/Output - fmovel #0,%FPSR |clr INEX + fmovel #0,%FPSR |clr INEX fmovel #rz_mode,%FPCR |set RZ rounding mode | A9. Scale X -> Y. | The mantissa is scaled to the desired number of significant | digits. The excess digits are collected in INEX2. If mul, -| Check d2 for excess 10 exponential value. If not zero, +| Check d2 for excess 10 exponential value. If not zero, | the iscale value would have caused the pwrten calculation | to overflow. Only a negative iscale can cause this, so | multiply by 10^(d2), which is now only allowed to be 24, @@ -480,7 +480,7 @@ | L_SCR1:x/x | L_SCR2:first word of X packed/Unchanged -A9_str: +A9_str: fmovex (%a0),%fp0 |load X from memory fabsx %fp0 |use abs(X) tstw %d5 |LAMBDA is in lower word of d5 @@ -498,9 +498,9 @@ movel #18,%d3 |load count for busy stack A9_loop: clrl -(%a7) |clear lword on stack - dbf %d3,A9_loop + dbf %d3,A9_loop moveb VER_TMP(%a6),(%a7) |write current version number - moveb #BUSY_SIZE-4,1(%a7) |write current busy size + moveb #BUSY_SIZE-4,1(%a7) |write current busy size moveb #0x10,0x44(%a7) |set fcefpte[15] bit movew #0x0023,0x40(%a7) |load cmdreg1b with mul command moveb #0xfe,0x8(%a7) |load all 1s to cu savepc @@ -537,7 +537,7 @@ | fp1: 10^ISCALE/Unchanged | fp2: x/x -A10_st: +A10_st: fmovel %FPSR,%d0 |get FPSR fmovex %fp0,FP_SCR2(%a6) |move Y to memory leal FP_SCR2(%a6),%a2 |load a2 with ptr to FP_SCR2 @@ -553,9 +553,9 @@ | routine expects the FPCR value to be in USER_FPCR for | mode and precision. The original FPCR is saved in L_SCR1. -A11_st: +A11_st: movel USER_FPCR(%a6),L_SCR1(%a6) |save it for later - andil #0x00000030,USER_FPCR(%a6) |set size to ext, + andil #0x00000030,USER_FPCR(%a6) |set size to ext, | ;block exceptions @@ -584,13 +584,13 @@ | L_SCR2:first word of X packed/Unchanged A12_st: - moveml %d0-%d1/%a0-%a1,-(%a7) |save regs used by sintd0 + moveml %d0-%d1/%a0-%a1,-(%a7) |save regs used by sintd0 movel L_SCR1(%a6),-(%a7) movel L_SCR2(%a6),-(%a7) leal FP_SCR2(%a6),%a0 |a0 is ptr to F_SCR2(a6) fmovex %fp0,(%a0) |move Y to memory at FP_SCR2(a6) tstl L_SCR2(%a6) |test sign of original operand - bges do_fint |if pos, use Y + bges do_fint |if pos, use Y orl #0x80000000,(%a0) |if neg, use -Y do_fint: movel USER_FPSR(%a6),-(%a7) @@ -599,7 +599,7 @@ addl #4,%a7 movel (%a7)+,L_SCR2(%a6) movel (%a7)+,L_SCR1(%a6) - moveml (%a7)+,%d0-%d1/%a0-%a1 |restore regs used by sint + moveml (%a7)+,%d0-%d1/%a0-%a1 |restore regs used by sint movel L_SCR2(%a6),FP_SCR2(%a6) |restore original exponent movel L_SCR1(%a6),USER_FPCR(%a6) |restore user's FPCR @@ -635,7 +635,7 @@ | L_SCR1:original USER_FPCR/Unchanged | L_SCR2:first word of X packed/Unchanged -A13_st: +A13_st: swap %d5 |put ICTR in lower word of d5 tstw %d5 |check if ICTR = 0 bne not_zr |if non-zero, go to second test @@ -646,7 +646,7 @@ movel %d4,%d0 |put LEN in d0 subql #1,%d0 |d0 = LEN -1 clrl %d3 |clr table index -l_loop: +l_loop: lsrl #1,%d0 |shift next bit into carry bccs l_next |if zero, skip the mul fmulx (%a1,%d3),%fp2 |mul by 10**(d3_bit_no) @@ -672,7 +672,7 @@ subql #1,%d6 |subtract 1 from ILOG movew #1,%d5 |set ICTR fmovel #rm_mode,%FPCR |set rmode to RM - fmuls FTEN,%fp2 |compute 10^LEN + fmuls FTEN,%fp2 |compute 10^LEN bra A6_str |return to A6 and recompute YINT test_2: fmuls FTEN,%fp2 |compute 10^LEN @@ -688,7 +688,7 @@ fmovel #rm_mode,%FPCR |set rmode to RM bra A6_str |return to A6 and recompute YINT | -| Since ICTR <> 0, we have already been through one adjustment, +| Since ICTR <> 0, we have already been through one adjustment, | and shouldn't have another; this is to check if abs(YINT) = 10^LEN | 10^LEN is again computed using whatever table is in a1 since the | value calculated cannot be inexact. @@ -715,11 +715,11 @@ | A14. Convert the mantissa to bcd. -| The binstr routine is used to convert the LEN digit +| The binstr routine is used to convert the LEN digit | mantissa to bcd in memory. The input to binstr is | to be a fraction; i.e. (mantissa)/10^LEN and adjusted | such that the decimal point is to the left of bit 63. -| The bcd digits are stored in the correct position in +| The bcd digits are stored in the correct position in | the final string area in memory. | | @@ -745,7 +745,7 @@ | L_SCR1:original USER_FPCR/Unchanged | L_SCR2:first word of X packed/Unchanged -A14_st: +A14_st: fmovel #rz_mode,%FPCR |force rz for conversion fdivx %fp2,%fp0 |divide abs(YINT) by 10^LEN leal FP_SCR1(%a6),%a0 @@ -762,7 +762,7 @@ bgts no_sft |if so, don't shift negl %d0 |make exp positive m_loop: - lsrl #1,%d2 |shift d2:d3 right, add 0s + lsrl #1,%d2 |shift d2:d3 right, add 0s roxrl #1,%d3 |the number of places dbf %d0,m_loop |given in d0 no_sft: @@ -787,9 +787,9 @@ | | Digits are stored in L_SCR1(a6) on return from BINDEC as: | -| 32 16 15 0 +| 32 16 15 0 | ----------------------------------------- -| | 0 | e3 | e2 | e1 | e4 | X | X | X | +| | 0 | e3 | e2 | e1 | e4 | X | X | X | | ----------------------------------------- | | And are moved into their proper places in FP_SCR1. If digit e4 @@ -817,7 +817,7 @@ | L_SCR1:original USER_FPCR/Exponent digits on return from binstr | L_SCR2:first word of X packed/Unchanged -A15_st: +A15_st: tstb BINDEC_FLG(%a6) |check for denorm beqs not_denorm ftstx %fp0 |test for zero @@ -839,7 +839,7 @@ fbne not_zero |if zero, force exponent fmoves FONE,%fp0 |force exponent to 1 bras convrt |do it -not_zero: +not_zero: fmovel %d6,%fp0 |float ILOG fabsx %fp0 |get abs of ILOG convrt: @@ -852,7 +852,7 @@ subiw #0x3ffd,%d0 |subtract off bias negw %d0 |make exp positive x_loop: - lsrl #1,%d2 |shift d2:d3 right + lsrl #1,%d2 |shift d2:d3 right roxrl #1,%d3 |the number of places dbf %d0,x_loop |given in d0 x_loop_fin: @@ -863,12 +863,12 @@ movel #4,%d0 |put 4 in d0 for binstr call leal L_SCR1(%a6),%a0 |a0 is ptr to L_SCR1 for exp digits bsr binstr |call binstr to convert exp - movel L_SCR1(%a6),%d0 |load L_SCR1 lword to d0 + movel L_SCR1(%a6),%d0 |load L_SCR1 lword to d0 movel #12,%d1 |use d1 for shift count lsrl %d1,%d0 |shift d0 right by 12 bfins %d0,FP_SCR1(%a6){#4:#12} |put e3:e2:e1 in FP_SCR1 lsrl %d1,%d0 |shift d0 right by 12 - bfins %d0,FP_SCR1(%a6){#16:#4} |put e4 in FP_SCR1 + bfins %d0,FP_SCR1(%a6){#16:#4} |put e4 in FP_SCR1 tstb %d0 |check if e4 is zero beqs A16_st |if zero, skip rest orl #opaop_mask,USER_FPSR(%a6) |set OPERR & AIOP in USER_FPSR @@ -899,14 +899,14 @@ A16_st: clrl %d0 |clr d0 for collection of signs - andib #0x0f,FP_SCR1(%a6) |clear first nibble of FP_SCR1 + andib #0x0f,FP_SCR1(%a6) |clear first nibble of FP_SCR1 tstl L_SCR2(%a6) |check sign of original mantissa bges mant_p |if pos, don't set SM moveql #2,%d0 |move 2 in to d0 for SM mant_p: tstl %d6 |check sign of ILOG bges wr_sgn |if pos, don't set SE - addql #1,%d0 |set bit 0 in d0 for SE + addql #1,%d0 |set bit 0 in d0 for SE wr_sgn: bfins %d0,FP_SCR1(%a6){#0:#2} |insert SM and SE into FP_SCR1 diff -Nru a/arch/m68k/fpsp040/binstr.S b/arch/m68k/fpsp040/binstr.S --- a/arch/m68k/fpsp040/binstr.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/binstr.S Tue May 18 23:38:06 2004 @@ -60,8 +60,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/fpsp040/bugfix.S b/arch/m68k/fpsp040/bugfix.S --- a/arch/m68k/fpsp040/bugfix.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/bugfix.S Tue May 18 23:38:07 2004 @@ -7,7 +7,7 @@ | | Fixes for bugs: 1238 | -| Bug: 1238 +| Bug: 1238 | | | /* The following dirty_bit clear should be left in @@ -152,8 +152,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package @@ -167,8 +167,8 @@ .global b1238_fix b1238_fix: | -| This code is entered only on completion of the handling of an -| nu-generated ovfl, unfl, or inex exception. If the version +| This code is entered only on completion of the handling of an +| nu-generated ovfl, unfl, or inex exception. If the version | number of the fsave is not $40, this handler is not necessary. | Simply branch to fix_done and exit normally. | @@ -180,11 +180,11 @@ | moveb CU_SAVEPC(%a6),%d0 andib #0xFE,%d0 - beq fix_done |if zero, this is not bug #1238 + beq fix_done |if zero, this is not bug #1238 | | Test the register conflict aspect. If opclass0, check for -| cu src equal to xu dest or equal to nu dest. If so, go to +| cu src equal to xu dest or equal to nu dest. If so, go to | op0. Else, or if opclass2, check for cu dest equal to | xu dest or equal to nu dest. If so, go to tst_opcl. Else, | exit, it is not the bug case. @@ -196,17 +196,17 @@ bne op2sgl |not opclass 0, check op2 | | Check for cu and nu register conflict. If one exists, this takes -| priority over a cu and xu conflict. +| priority over a cu and xu conflict. | - bfextu CMDREG1B(%a6){#3:#3},%d0 |get 1st src + bfextu CMDREG1B(%a6){#3:#3},%d0 |get 1st src bfextu CMDREG3B(%a6){#6:#3},%d1 |get 3rd dest cmpb %d0,%d1 beqs op0 |if equal, continue bugfix | -| Check for cu dest equal to nu dest. If so, go and fix the +| Check for cu dest equal to nu dest. If so, go and fix the | bug condition. Otherwise, exit. | - bfextu CMDREG1B(%a6){#6:#3},%d0 |get 1st dest + bfextu CMDREG1B(%a6){#6:#3},%d0 |get 1st dest cmpb %d0,%d1 |cmp 1st dest with 3rd dest beqs op0 |if equal, continue bugfix | @@ -215,7 +215,7 @@ bfextu CMDREG2B(%a6){#6:#3},%d1 |get 2nd dest cmpb %d0,%d1 |cmp 1st dest with 2nd dest beqs op0_xu |if equal, continue bugfix - bfextu CMDREG1B(%a6){#3:#3},%d0 |get 1st src + bfextu CMDREG1B(%a6){#3:#3},%d0 |get 1st src cmpb %d0,%d1 |cmp 1st src with 2nd dest beq op0_xu bne fix_done |if the reg checks fail, exit @@ -245,7 +245,7 @@ | | We have the case in which a conflict exists between the cu src or -| dest and the dest of the xu. We must clear the instruction in +| dest and the dest of the xu. We must clear the instruction in | the cu and restore the state, allowing the instruction in the | xu to complete. Remember, the instruction in the nu | was exceptional, and was completed by the appropriate handler. @@ -255,7 +255,7 @@ | exceptional, we choose to kill the process. | | Items saved from the stack: -| +| | $3c stag - L_SCR1 | $40 cmdreg1b - L_SCR2 | $44 dtag - L_SCR3 @@ -264,8 +264,8 @@ | fpu. | op0_xu: - movel STAG(%a6),L_SCR1(%a6) - movel CMDREG1B(%a6),L_SCR2(%a6) + movel STAG(%a6),L_SCR1(%a6) + movel CMDREG1B(%a6),L_SCR2(%a6) movel DTAG(%a6),L_SCR3(%a6) andil #0xe0000000,L_SCR3(%a6) moveb #0,CU_SAVEPC(%a6) @@ -274,13 +274,13 @@ fsave -(%a7) | | Check if the instruction which just completed was exceptional. -| +| cmpw #0x4060,(%a7) beq op0_xb -| +| | It is necessary to isolate the result of the instruction in the | xu if it is to fp0 - fp3 and write that value to the USER_FPn -| locations on the stack. The correct destination register is in +| locations on the stack. The correct destination register is in | cmdreg2b. | bfextu CMDREG2B(%a6){#6:#3},%d0 |get dest register no @@ -339,7 +339,7 @@ | | The frame returned is busy. It is not possible to reconstruct -| the code sequence to allow completion. We will jump to +| the code sequence to allow completion. We will jump to | fpsp_fmt_error and allow the kernel to kill the process. | op0_xb: @@ -354,20 +354,20 @@ cmpiw #0x4400,%d0 |test for opclass 2 and size=sgl bne fix_done |if not, it is not bug 1238 | -| Check for cu dest equal to nu dest or equal to xu dest, with +| Check for cu dest equal to nu dest or equal to xu dest, with | a cu and nu conflict taking priority an nu conflict. If either, | go and fix the bug condition. Otherwise, exit. | - bfextu CMDREG1B(%a6){#6:#3},%d0 |get 1st dest + bfextu CMDREG1B(%a6){#6:#3},%d0 |get 1st dest bfextu CMDREG3B(%a6){#6:#3},%d1 |get 3rd dest cmpb %d0,%d1 |cmp 1st dest with 3rd dest beq op2_com |if equal, continue bugfix - bfextu CMDREG2B(%a6){#6:#3},%d1 |get 2nd dest + bfextu CMDREG2B(%a6){#6:#3},%d1 |get 2nd dest cmpb %d0,%d1 |cmp 1st dest with 2nd dest bne fix_done |if the reg checks fail, exit | | We have the case in which a conflict exists between the cu src or -| dest and the dest of the xu. We must clear the instruction in +| dest and the dest of the xu. We must clear the instruction in | the cu and restore the state, allowing the instruction in the | xu to complete. Remember, the instruction in the nu | was exceptional, and was completed by the appropriate handler. @@ -377,7 +377,7 @@ | exceptional, we choose to kill the process. | | Items saved from the stack: -| +| | $3c stag - L_SCR1 | $40 cmdreg1b - L_SCR2 | $44 dtag - L_SCR3 @@ -387,9 +387,9 @@ | fpu. | op2_xu: - movel STAG(%a6),L_SCR1(%a6) - movel CMDREG1B(%a6),L_SCR2(%a6) - movel DTAG(%a6),L_SCR3(%a6) + movel STAG(%a6),L_SCR1(%a6) + movel CMDREG1B(%a6),L_SCR2(%a6) + movel DTAG(%a6),L_SCR3(%a6) andil #0xe0000000,L_SCR3(%a6) moveb #0,CU_SAVEPC(%a6) movel ETEMP(%a6),FP_SCR2(%a6) @@ -400,13 +400,13 @@ fsave -(%a7) | | Check if the instruction which just completed was exceptional. -| +| cmpw #0x4060,(%a7) beq op2_xb -| +| | It is necessary to isolate the result of the instruction in the | xu if it is to fp0 - fp3 and write that value to the USER_FPn -| locations on the stack. The correct destination register is in +| locations on the stack. The correct destination register is in | cmdreg2b. | bfextu CMDREG2B(%a6){#6:#3},%d0 |get dest register no @@ -459,12 +459,12 @@ bnes case2 movew #0x43FF,ETEMP_EX(%a6) |to double +max bra finish -case2: +case2: cmpw #0xC07F,ETEMP_EX(%a6) |single -max bnes case3 movew #0xC3FF,ETEMP_EX(%a6) |to double -max bra finish -case3: +case3: cmpw #0x3F80,ETEMP_EX(%a6) |single +min bnes case4 movew #0x3C00,ETEMP_EX(%a6) |to double +min @@ -480,7 +480,7 @@ | an fline illegal instruction to be executed. | | You should replace the jump to fpsp_fmt_error with a jump -| to the entry point used to kill a process. +| to the entry point used to kill a process. | op2_xb: jmp fpsp_fmt_error diff -Nru a/arch/m68k/fpsp040/decbin.S b/arch/m68k/fpsp040/decbin.S --- a/arch/m68k/fpsp040/decbin.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/decbin.S Tue May 18 23:38:08 2004 @@ -60,17 +60,17 @@ | it is negative. | | Clean up and return. Check if the final mul or div resulted -| in an inex2 exception. If so, set inex1 in the fpsr and +| in an inex2 exception. If so, set inex1 in the fpsr and | check if the inex1 exception is enabled. If so, set d7 upper | word to $0100. This will signal unimp.sa that an enabled inex1 | exception occurred. Unimp will fix the stack. -| +| | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package @@ -107,12 +107,12 @@ .set FSTRT,0 | .set ESTRT,4 - .set EDIGITS,2 | + .set EDIGITS,2 | | | Constants in single precision -FZERO: .long 0x00000000 -FONE: .long 0x3F800000 -FTEN: .long 0x41200000 +FZERO: .long 0x00000000 +FONE: .long 0x3F800000 +FTEN: .long 0x41200000 .set TEN,10 @@ -224,7 +224,7 @@ addql #1,%d1 |inc lw pointer in mantissa cmpl #2,%d1 |test for last lw ble loadlw |if not, get last one - + | | Check the sign of the mant and make the value in fp0 the same sign. | @@ -232,7 +232,7 @@ btst #31,(%a0) |test sign of the mantissa beq ap_st_z |if clear, go to append/strip zeros fnegx %fp0 |if set, negate fp0 - + | | Append/strip zeros: | @@ -407,7 +407,7 @@ | | Pwrten calculates the exponent factor in the selected rounding mode | according to the following table: -| +| | Sign of Mant Sign of Exp Rounding Mode PWRTEN Rounding Mode | | ANY ANY RN RN @@ -495,7 +495,7 @@ | it will be inex2, but will be reported as inex1 by get_op. | end_dec: - fmovel %FPSR,%d0 |get status register + fmovel %FPSR,%d0 |get status register bclrl #inex2_bit+8,%d0 |test for inex2 and clear it fmovel %d0,%FPSR |return status reg w/o inex2 beqs no_exc |skip this if no exc diff -Nru a/arch/m68k/fpsp040/do_func.S b/arch/m68k/fpsp040/do_func.S --- a/arch/m68k/fpsp040/do_func.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/do_func.S Tue May 18 23:38:08 2004 @@ -4,11 +4,11 @@ | Do_func performs the unimplemented operation. The operation | to be performed is determined from the lower 7 bits of the | extension word (except in the case of fmovecr and fsincos). -| The opcode and tag bits form an index into a jump table in -| tbldo.sa. Cases of zero, infinity and NaN are handled in +| The opcode and tag bits form an index into a jump table in +| tbldo.sa. Cases of zero, infinity and NaN are handled in | do_func by forcing the default result. Normalized and | denormalized (there are no unnormalized numbers at this -| point) are passed onto the emulation code. +| point) are passed onto the emulation code. | | CMDREG1B and STAG are extracted from the fsave frame | and combined to form the table index. The function called @@ -22,8 +22,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -35,7 +35,7 @@ |xref t_dz2 |xref t_operr |xref t_inx2 - |xref t_resdnrm + |xref t_resdnrm |xref dst_nan |xref src_nan |xref nrm_set @@ -68,7 +68,7 @@ | directly. | bfextu CMDREG1B(%a6){#0:#6},%d0 |get opclass and src fields - cmpil #0x17,%d0 |if op class and size fields are $17, + cmpil #0x17,%d0 |if op class and size fields are $17, | ;it is FMOVECR; if not, continue bnes not_fmovecr jmp smovcr |fmovecr; jmp directly to emulation @@ -76,7 +76,7 @@ not_fmovecr: movew CMDREG1B(%a6),%d0 andl #0x7F,%d0 - cmpil #0x38,%d0 |if the extension is >= $38, + cmpil #0x38,%d0 |if the extension is >= $38, bge serror |it is illegal bfextu STAG(%a6){#0:#3},%d1 lsll #3,%d0 |make room for STAG @@ -111,7 +111,7 @@ bsr ld_mzero |if neg, load neg zero, return here bra t_inx2 |now, set the inx for the next inst | -| Load a signed zero to fp0; do not set inex2/ainex +| Load a signed zero to fp0; do not set inex2/ainex | .global szero szero: @@ -119,7 +119,7 @@ bne ld_mzero |if neg, load neg zero bra ld_pzero |load positive zero | -| Load a signed infinity to fp0; do not set inex2/ainex +| Load a signed infinity to fp0; do not set inex2/ainex | .global sinf sinf: @@ -127,7 +127,7 @@ bne ld_minf |if negative branch bra ld_pinf | -| Load a signed one to fp0; do not set inex2/ainex +| Load a signed one to fp0; do not set inex2/ainex | .global sone sone: @@ -135,7 +135,7 @@ bne ld_mone bra ld_pone | -| Load a signed pi/2 to fp0; do not set inex2/ainex +| Load a signed pi/2 to fp0; do not set inex2/ainex | .global spi_2 spi_2: @@ -160,13 +160,13 @@ bne t_operr bra ld_pinf | -| FLOGNP1 +| FLOGNP1 | .global sslognp1 sslognp1: fmovemx (%a0),%fp0-%fp0 fcmpb #-1,%fp0 - fbgt slognp1 + fbgt slognp1 fbeq t_dz2 |if = -1, divide by zero exception fmovel #0,%FPSR |clr N flag bra t_operr |take care of operands < -1 @@ -186,7 +186,7 @@ | .global sslogn sslogn: - btstb #sign_bit,LOCAL_EX(%a0) + btstb #sign_bit,LOCAL_EX(%a0) bne t_operr |take care of operands < 0 cmpiw #0x3fff,LOCAL_EX(%a0) |test for 1.0 input bne slogn @@ -199,7 +199,7 @@ .global sslognd sslognd: - btstb #sign_bit,LOCAL_EX(%a0) + btstb #sign_bit,LOCAL_EX(%a0) beq slognd bra t_operr |take care of operands < 0 @@ -221,7 +221,7 @@ .global sslog10d sslog10d: - btstb #sign_bit,LOCAL_EX(%a0) + btstb #sign_bit,LOCAL_EX(%a0) beq slog10d bra t_operr |take care of operands < 0 @@ -243,7 +243,7 @@ .global sslog2d sslog2d: - btstb #sign_bit,LOCAL_EX(%a0) + btstb #sign_bit,LOCAL_EX(%a0) beq slog2d bra t_operr |take care of operands < 0 @@ -310,7 +310,7 @@ btstl #7,%d0 |test if + or - beq ld_pzero |if pos then load +0 bra ld_mzero |else neg load -0 - + smod_fpn: moveb ETEMP(%a6),%d1 |get sign of src op moveb FPTEMP(%a6),%d0 |get sign of dst op @@ -327,7 +327,7 @@ fmovel USER_FPCR(%a6),%fpcr |use user's rmode and precision fmovex FPTEMP(%a6),%fp0 |return dest to fp0 rts - + | | FREM | @@ -372,7 +372,7 @@ lea premt,%a1 movel (%a1,%d1.w*4),%a1 jmp (%a1) - + srem_snan: bra src_nan srem_dnan: @@ -390,7 +390,7 @@ btstl #7,%d0 |test if + or - beq ld_pzero |if pos then load +0 bra ld_mzero |else neg load -0 - + srem_fpn: moveb ETEMP(%a6),%d1 |get sign of src op moveb FPTEMP(%a6),%d0 |get sign of dst op @@ -424,10 +424,10 @@ .long scl_inf | 10,00 inf,norm = +-inf .long scl_inf | 10,01 inf,zero = +-inf .long scl_opr | 10,10 inf,inf = nan with operr - .long scl_snan | 10,11 inf,nan = nan - .long scl_dnan | 11,00 nan,norm = nan - .long scl_dnan | 11,01 nan,zero = nan - .long scl_dnan | 11,10 nan,inf = nan + .long scl_snan | 10,11 inf,nan = nan + .long scl_dnan | 11,00 nan,norm = nan + .long scl_dnan | 11,01 nan,zero = nan + .long scl_dnan | 11,10 nan,inf = nan .long scl_dnan | 11,11 nan,nan = nan .global pscale @@ -478,7 +478,7 @@ sincosp: fmovex PZERO,%fp0 sincoscom: - fmovemx PONE,%fp1-%fp1 |do not allow FPSR to be affected + fmovemx PONE,%fp1-%fp1 |do not allow FPSR to be affected bra sto_cos |store cosine result .global ssincosi @@ -498,7 +498,7 @@ bsr sto_cos bra src_nan | -| This code forces default values for the zero, inf, and nan cases +| This code forces default values for the zero, inf, and nan cases | in the transcendentals code. The CC bits must be set in the | stacked FPSR to be correctly reported. | diff -Nru a/arch/m68k/fpsp040/fpsp.h b/arch/m68k/fpsp040/fpsp.h --- a/arch/m68k/fpsp040/fpsp.h Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/fpsp.h Tue May 18 23:38:08 2004 @@ -5,15 +5,15 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. | fpsp.h --- stack frame offsets during FPSP exception handling | | These equates are used to access the exception frame, the fsave | frame and any local variables needed by the FPSP package. -| +| | All FPSP handlers begin by executing: | | link a6,#-LOCAL_SIZE @@ -90,13 +90,13 @@ .set USER_FP2,LV+40 | saved user FP2 .set USER_FP3,LV+52 | saved user FP3 .set USER_FPCR,LV+64 | saved user FPCR - .set FPCR_ENABLE,USER_FPCR+2 | FPCR exception enable - .set FPCR_MODE,USER_FPCR+3 | FPCR rounding mode control + .set FPCR_ENABLE,USER_FPCR+2 | FPCR exception enable + .set FPCR_MODE,USER_FPCR+3 | FPCR rounding mode control .set USER_FPSR,LV+68 | saved user FPSR - .set FPSR_CC,USER_FPSR+0 | FPSR condition code - .set FPSR_QBYTE,USER_FPSR+1 | FPSR quotient - .set FPSR_EXCEPT,USER_FPSR+2 | FPSR exception - .set FPSR_AEXCEPT,USER_FPSR+3 | FPSR accrued exception + .set FPSR_CC,USER_FPSR+0 | FPSR condition code + .set FPSR_QBYTE,USER_FPSR+1 | FPSR quotient + .set FPSR_EXCEPT,USER_FPSR+2 | FPSR exception + .set FPSR_AEXCEPT,USER_FPSR+3 | FPSR accrued exception .set USER_FPIAR,LV+72 | saved user FPIAR .set FP_SCR1,LV+76 | room for a temporary float value .set FP_SCR2,LV+92 | room for a temporary float value @@ -143,8 +143,8 @@ .set CMDREG3B,LV-48 | cmd reg for E3 exceptions (2 bytes) | .set NMNEXC,LV-44 | NMNEXC (unsup,snan bits only) - .set nmn_unsup_bit,1 | - .set nmn_snan_bit,0 | + .set nmn_unsup_bit,1 | + .set nmn_snan_bit,0 | | .set NMCEXC,LV-43 | NMNEXC & NMCEXC .set nmn_operr_bit,7 @@ -249,7 +249,7 @@ .set inf_mask,0x02000000 .set nan_mask,0x01000000 | - .set bsun_mask,0x00008000 | + .set bsun_mask,0x00008000 | .set snan_mask,0x00004000 .set operr_mask,0x00002000 .set ovfl_mask,0x00001000 @@ -268,7 +268,7 @@ | .set dzinf_mask,inf_mask+dz_mask+adz_mask .set opnan_mask,nan_mask+operr_mask+aiop_mask - .set nzi_mask,0x01ffffff | clears N, Z, and I + .set nzi_mask,0x01ffffff | clears N, Z, and I .set unfinx_mask,unfl_mask+inex2_mask+aunfl_mask+ainex_mask .set unf2inx_mask,unfl_mask+inex2_mask+ainex_mask .set ovfinx_mask,ovfl_mask+inex2_mask+aovfl_mask+ainex_mask diff -Nru a/arch/m68k/fpsp040/gen_except.S b/arch/m68k/fpsp040/gen_except.S --- a/arch/m68k/fpsp040/gen_except.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/gen_except.S Tue May 18 23:38:06 2004 @@ -2,10 +2,10 @@ | gen_except.sa 3.7 1/16/92 | | gen_except --- FPSP routine to detect reportable exceptions -| +| | This routine compares the exception enable byte of the | user_fpcr on the stack with the exception status byte -| of the user_fpsr. +| of the user_fpsr. | | Any routine which may report an exceptions must load | the stack frame in memory with the exceptional operand(s). @@ -23,14 +23,14 @@ | | Note: The IEEE standard specifies that inex2 is to be | reported if ovfl occurs and the ovfl enable bit is not -| set but the inex2 enable bit is. +| set but the inex2 enable bit is. | | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -70,12 +70,12 @@ | movel ETEMP_EX(%a6),ETEMP_EX(%a1) |copy etemp from unimp movel ETEMP_HI(%a6),ETEMP_HI(%a1) |frame to busy frame - movel ETEMP_LO(%a6),ETEMP_LO(%a1) + movel ETEMP_LO(%a6),ETEMP_LO(%a1) movel CMDREG1B(%a6),CMDREG1B(%a1) |set inst in frame to unimp movel CMDREG1B(%a6),%d0 |fix cmd1b to make it andl #0x03c30000,%d0 |work for cmd3b bfextu CMDREG1B(%a6){#13:#1},%d1 |extract bit 2 - lsll #5,%d1 + lsll #5,%d1 swap %d1 orl %d1,%d0 |put it in the right place bfextu CMDREG1B(%a6){#10:#3},%d1 |extract bit 3,4,5 @@ -86,7 +86,7 @@ | | Or in the FPSR from the emulation with the USER_FPSR on the stack. | - fmovel %FPSR,%d0 + fmovel %FPSR,%d0 orl %d0,USER_FPSR(%a6) movel USER_FPSR(%a6),FPSR_SHADOW(%a1) |set exc bits orl #sx_mask,E_BYTE(%a1) @@ -108,7 +108,7 @@ cmpib #UNIMP_41_SIZE-4,1(%a7) |test for rev unimp frame bnel fpsp_fmt_error |if not $28 or $30 leal UNIMP_41_SIZE+LOCAL_SIZE(%a7),%a1 - + unimp_con: | | Fix up the new unimp frame with entries from the old unimp frame @@ -117,23 +117,23 @@ | | Or in the FPSR from the emulation with the USER_FPSR on the stack. | - fmovel %FPSR,%d0 + fmovel %FPSR,%d0 orl %d0,USER_FPSR(%a6) bra do_clean | | Frame is idle, so check for exceptions reported through -| USER_FPSR and set the unimp frame accordingly. +| USER_FPSR and set the unimp frame accordingly. | A7 must be incremented to the point before the | idle fsave vector to the unimp vector. | - + do_check: addl #4,%a7 |point A7 back to unimp frame | | Or in the FPSR from the emulation with the USER_FPSR on the stack. | - fmovel %FPSR,%d0 + fmovel %FPSR,%d0 orl %d0,USER_FPSR(%a6) | | On a busy frame, we must clear the nmnexc bits. @@ -165,10 +165,10 @@ bsun_exc: bra do_clean | -| The typical work to be done to the unimp frame to report an +| The typical work to be done to the unimp frame to report an | exception is to set the E1/E3 byte and clr the U flag. -| commonE1 does this for E1 exceptions, which are snan, -| operr, and dz. commonE3 does this for E3 exceptions, which +| commonE1 does this for E1 exceptions, which are snan, +| operr, and dz. commonE3 does this for E3 exceptions, which | are inex2 and inex1, and also clears the E1 exception bit | left over from the unimp exception. | @@ -186,7 +186,7 @@ unsE3: tstb RES_FLG(%a6) - bnes unsE3_0 + bnes unsE3_0 unsE3_1: bsetb #E3,E_BYTE(%a6) |set E3 flag unsE3_0: @@ -194,7 +194,7 @@ movel CMDREG1B(%a6),%d0 andl #0x03c30000,%d0 |work for cmd3b bfextu CMDREG1B(%a6){#13:#1},%d1 |extract bit 2 - lsll #5,%d1 + lsll #5,%d1 swap %d1 orl %d1,%d0 |put it in the right place bfextu CMDREG1B(%a6){#10:#3},%d1 |extract bit 3,4,5 @@ -218,8 +218,8 @@ beqs no_exc |if clear, exit bras ovfl_unfl |go to unfl_ovfl to determine if | ;it is an unsupp or unimp exc - -| No exceptions are to be reported. If the instruction was + +| No exceptions are to be reported. If the instruction was | unimplemented, no FPU restore is necessary. If it was | unsupported, we must perform the restore. no_exc: @@ -227,7 +227,7 @@ beqs uni_no_exc uns_no_exc: tstb RES_FLG(%a6) |check if frestore is needed - bne do_clean |if clear, no frestore needed + bne do_clean |if clear, no frestore needed uni_no_exc: moveml USER_DA(%a6),%d0-%d1/%a0-%a1 fmovemx USER_FP0(%a6),%fp0-%fp3 @@ -243,13 +243,13 @@ | | Unimplemented Instruction Handler: | Ovfl: -| Only scosh, setox, ssinh, stwotox, and scale can set overflow in +| Only scosh, setox, ssinh, stwotox, and scale can set overflow in | this manner. | Unfl: | Stwotox, setox, and scale can set underflow in this manner. | Any of the other Library Routines such that f(x)=x in which -| x is an extended denorm can report an underflow exception. -| It is the responsibility of the exception-causing exception +| x is an extended denorm can report an underflow exception. +| It is the responsibility of the exception-causing exception | to make sure that WBTEMP is correct. | | The exceptional operand is in FP_SCR1. @@ -306,7 +306,7 @@ movel CMDREG1B(%a6),%d0 |fix cmd1b to make it andl #0x03c30000,%d0 |work for cmd3b bfextu CMDREG1B(%a6){#13:#1},%d1 |extract bit 2 - lsll #5,%d1 + lsll #5,%d1 swap %d1 orl %d1,%d0 |put it in the right place bfextu CMDREG1B(%a6){#10:#3},%d1 |extract bit 3,4,5 @@ -318,10 +318,10 @@ | | Check if the frame to be restored is busy or unimp. |** NOTE *** Bug fix for errata (0d43b #3) -| If the frame is unimp, we must create a busy frame to +| If the frame is unimp, we must create a busy frame to | fix the bug with the nmnexc bits in cases in which they | are set by a previous instruction and not cleared by -| the save. The frame will be unimp only if the final +| the save. The frame will be unimp only if the final | instruction in an emulation routine caused the exception | by doing an fmove ,fp0. The exception operand, in | internal format, is in fptemp. @@ -353,7 +353,7 @@ leal BUSY_SIZE+LOCAL_SIZE(%a7),%a1 |init a1 for new frame moveb VER_TMP(%a6),(%a7) |write busy fmt word moveb #BUSY_SIZE-4,1(%a7) - movel FP_SCR1(%a6),WBTEMP_EX(%a1) |write + movel FP_SCR1(%a6),WBTEMP_EX(%a1) |write movel FP_SCR1+4(%a6),WBTEMP_HI(%a1) |exceptional op to movel FP_SCR1+8(%a6),WBTEMP_LO(%a1) |wbtemp | btst.b #E1,E_BYTE(%a1) @@ -362,7 +362,7 @@ bfins %d0,NMCEXC(%a1){#4:#4} |and insert them in nmcexc movel USER_FPSR(%a6),FPSR_SHADOW(%a1) |set exc bits orl #sx_mask,E_BYTE(%a1) - + do_restore: moveml USER_DA(%a6),%d0-%d1/%a0-%a1 fmovemx USER_FP0(%a6),%fp0-%fp3 @@ -374,10 +374,10 @@ cont: unlk %a6 | -| If trace mode enabled, then go to trace handler. This handler -| cannot have any fp instructions. If there are fp inst's and an -| exception has been restored into the machine then the exception -| will occur upon execution of the fp inst. This is not desirable +| If trace mode enabled, then go to trace handler. This handler +| cannot have any fp instructions. If there are fp inst's and an +| exception has been restored into the machine then the exception +| will occur upon execution of the fp inst. This is not desirable | in the kernel (supervisor mode). See MC68040 manual Section 9.3.8. | finish_up: @@ -436,12 +436,12 @@ movel USER_D1(%a6),%d1 | restore d1 movel #0x40280000,-(%sp) frestore (%sp)+ - unlk %a5 + unlk %a5 rts frame_41: tstb 1(%sp) | check to see if idle - bne notidle + bne notidle idle41: clrl (%sp) | get rid of old fsave frame movel %d1,USER_D1(%a6) | save d1 @@ -451,18 +451,18 @@ movel USER_D1(%a6),%d1 | restore d1 movel #0x41300000,-(%sp) frestore (%sp)+ - unlk %a5 + unlk %a5 rts notidle: - bclrb #etemp15_bit,-40(%a5) + bclrb #etemp15_bit,-40(%a5) frestore (%sp)+ - unlk %a5 + unlk %a5 rts nofix: frestore (%sp)+ - unlk %a5 + unlk %a5 rts |end diff -Nru a/arch/m68k/fpsp040/get_op.S b/arch/m68k/fpsp040/get_op.S --- a/arch/m68k/fpsp040/get_op.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/get_op.S Tue May 18 23:38:06 2004 @@ -16,7 +16,7 @@ | | - For unnormalized numbers (opclass 0, 2, or 3) the | number(s) is normalized and the operand type tag is updated. -| +| | - For a packed number (opclass 2) the number is unpacked and the | operand type tag is updated. | @@ -41,7 +41,7 @@ | the '040. The '040 then re-executes the fadd.x fpm,fpn with | a normalized number in the source and the instruction is | successful. -| +| | Next consider if in the process of normalizing the un- | normalized number it becomes a denormalized number. The | routine which converts the unnorm to a norm (called mk_norm) @@ -54,8 +54,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -194,7 +194,7 @@ uni_getop: bfextu CMDREG1B(%a6){#0:#6},%d0 |get opclass and src fields - cmpil #0x17,%d0 |if op class and size fields are $17, + cmpil #0x17,%d0 |if op class and size fields are $17, | ;it is FMOVECR; if not, continue | | If the instruction is fmovecr, exit get_op. It is handled @@ -226,21 +226,21 @@ movew FPTEMP_EX(%a6),%d0 |get destination exponent andiw #0x7fff,%d0 |mask sign, check if exp = 0000 beqs src_op_ck |if denorm then check source op. -| ;denorms are taken care of in res_func +| ;denorms are taken care of in res_func | ;(unsupp) or do_func (unimp) | ;else unnorm fall through leal FPTEMP(%a6),%a0 |point a0 to dop - used in mk_norm bsr mk_norm |go normalize - mk_norm returns: -| ;L_SCR1{7:5} = operand tag +| ;L_SCR1{7:5} = operand tag | ; (000 = norm, 100 = denorm) -| ;L_SCR1{4} = fpte15 or ete15 +| ;L_SCR1{4} = fpte15 or ete15 | ; 0 = exp > $3fff | ; 1 = exp <= $3fff -| ;and puts the normalized num back +| ;and puts the normalized num back | ;on the fsave stack | - moveb L_SCR1(%a6),DTAG(%a6) |write the new tag & fpte15 -| ;to the fsave stack and fall + moveb L_SCR1(%a6),DTAG(%a6) |write the new tag & fpte15 +| ;to the fsave stack and fall | ;through to check source operand | src_op_ck: @@ -255,19 +255,19 @@ src_ex_dnrm: movew ETEMP_EX(%a6),%d0 |get source exponent andiw #0x7fff,%d0 |mask sign, check if exp = 0000 - beq end_getop |if denorm then exit, denorms are + beq end_getop |if denorm then exit, denorms are | ;handled in do_func leal ETEMP(%a6),%a0 |point a0 to sop - used in mk_norm bsr mk_norm |go normalize - mk_norm returns: -| ;L_SCR1{7:5} = operand tag +| ;L_SCR1{7:5} = operand tag | ; (000 = norm, 100 = denorm) -| ;L_SCR1{4} = fpte15 or ete15 +| ;L_SCR1{4} = fpte15 or ete15 | ; 0 = exp > $3fff | ; 1 = exp <= $3fff -| ;and puts the normalized num back +| ;and puts the normalized num back | ;on the fsave stack | - moveb L_SCR1(%a6),STAG(%a6) |write the new tag & ete15 + moveb L_SCR1(%a6),STAG(%a6) |write the new tag & ete15 rts |end_getop | @@ -285,7 +285,7 @@ movew #0x3c01,%d1 |write the bias for a dbl denorm common: btstb #sign_bit,ETEMP_EX(%a6) |grab sign bit of mantissa - beqs pos + beqs pos bset #15,%d1 |set sign bit because it is negative pos: movew %d1,ETEMP_EX(%a6) @@ -297,7 +297,7 @@ movew %d1,CMDREG1B(%a6) |write back to the command word in stack | ;this is needed to fix unsupp data stack leal ETEMP(%a6),%a0 |point a0 to sop - + bsr mk_norm |convert sgl/dbl denorm to norm moveb L_SCR1(%a6),STAG(%a6) |put tag into source tag reg - d0 rts |end_getop @@ -306,7 +306,7 @@ | instruction is dyadic or monadic is still unknown | pack_source: - movel FPTEMP_LO(%a6),ETEMP(%a6) |write ms part of packed + movel FPTEMP_LO(%a6),ETEMP(%a6) |write ms part of packed | ;number to etemp slot bsr chk_dy_mo |set dyadic/monadic flag bsr unpack @@ -325,7 +325,7 @@ btstb #7,DTAG(%a6) |check dest tag for unnorm or denorm bne dst_ex_dnrm |else, handle the unnorm or ext denorm | -| Dest is not denormalized. Check for norm, and set fpte15 +| Dest is not denormalized. Check for norm, and set fpte15 | accordingly. | moveb DTAG(%a6),%d0 @@ -357,13 +357,13 @@ | unsupported data type exception. Set if dyadic. | chk_dy_mo: - movew CMDREG1B(%a6),%d0 + movew CMDREG1B(%a6),%d0 btstl #5,%d0 |testing extension command word beqs set_mon |if bit 5 = 0 then monadic btstl #4,%d0 |know that bit 5 = 1 beqs set_dya |if bit 4 = 0 then dyadic andiw #0x007f,%d0 |get rid of all but extension bits {6:0} - cmpiw #0x0038,%d0 |if extension = $38 then fcmp (dyadic) + cmpiw #0x0038,%d0 |if extension = $38 then fcmp (dyadic) bnes set_mon set_dya: st DY_MO_FLG(%a6) |set the inst flag type to dyadic @@ -406,7 +406,7 @@ | L_SCR1{7:5} = operand tag (000 = norm, 100 = denorm) | L_SCR1{4} = fpte15 or ete15 (0 = exp > $3fff, 1 = exp <=$3fff) | the normalized operand is placed back on the fsave stack -mk_norm: +mk_norm: clrl L_SCR1(%a6) bclrb #sign_bit,LOCAL_EX(%a0) sne LOCAL_SGN(%a0) |transform into internal extended format @@ -426,11 +426,11 @@ cmpw #0x3fff,LOCAL_EX(%a0) |if exp > $3fff bgts end_mk | fpte15/ete15 already set to 0 bsetb #4,L_SCR1(%a6) |else set fpte15/ete15 to 1 -| ;calling routine actually sets the -| ;value on the stack (along with the -| ;tag), since this routine doesn't +| ;calling routine actually sets the +| ;value on the stack (along with the +| ;tag), since this routine doesn't | ;know if it should set ete15 or fpte15 -| ;ie, it doesn't know if this is the +| ;ie, it doesn't know if this is the | ;src op or dest op. end_mk: bfclr LOCAL_SGN(%a0){#0:#8} @@ -455,7 +455,7 @@ | uns_opx: bsr nrm_zero |normalize the number - btstb #7,LOCAL_HI(%a0) |check if integer bit (j-bit) is set + btstb #7,LOCAL_HI(%a0) |check if integer bit (j-bit) is set beqs uns_den |if clear then now have a denorm uns_nrm: orb #norm_tag,L_SCR1(%a6) |set tag to norm @@ -468,7 +468,7 @@ | uni_inst: bsr nrm_zero - btstb #7,LOCAL_HI(%a0) |check if integer bit (j-bit) is set + btstb #7,LOCAL_HI(%a0) |check if integer bit (j-bit) is set beqs uni_den |if clear then now have a denorm uni_nrm: orb #norm_tag,L_SCR1(%a6) |set tag to norm @@ -480,9 +480,9 @@ | | Decimal to binary conversion | -| Special cases of inf and NaNs are completed outside of decbin. +| Special cases of inf and NaNs are completed outside of decbin. | If the input is an snan, the snan bit is not set. -| +| | input: | ETEMP(a6) - points to packed decimal string in memory | output: @@ -610,16 +610,16 @@ finish: movew CMDREG1B(%a6),%d0 |get the command word - andw #0xfbff,%d0 |change the source specifier field to + andw #0xfbff,%d0 |change the source specifier field to | ;extended (was packed). movew %d0,CMDREG1B(%a6) |write command word back to fsave stack -| ;we need to do this so the 040 will -| ;re-execute the inst. without taking +| ;we need to do this so the 040 will +| ;re-execute the inst. without taking | ;another packed trap. fix_stag: -|Converted result is now in etemp on fsave stack, now set the source -|tag (stag) +|Converted result is now in etemp on fsave stack, now set the source +|tag (stag) | if (ete =$7fff) then INF or NAN | if (etemp = $x.0----0) then | stag = INF @@ -632,12 +632,12 @@ | stag = NORM | | Note also that the etemp_15 bit (just right of the stag) must -| be set accordingly. +| be set accordingly. | movew ETEMP_EX(%a6),%d1 andiw #0x7fff,%d1 |strip sign - cmpw #0x7fff,%d1 - bnes z_or_nrm + cmpw #0x7fff,%d1 + bnes z_or_nrm movel ETEMP_HI(%a6),%d1 bnes is_nan movel ETEMP_LO(%a6),%d1 @@ -651,7 +651,7 @@ movel #0x60,%d0 rts z_or_nrm: - tstw %d1 + tstw %d1 bnes is_nrm is_zro: | For a zero, set etemp_15 @@ -670,7 +670,7 @@ movel #0,%d0 end_fix: rts - + end_get: rts |end diff -Nru a/arch/m68k/fpsp040/kernel_ex.S b/arch/m68k/fpsp040/kernel_ex.S --- a/arch/m68k/fpsp040/kernel_ex.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/kernel_ex.S Tue May 18 23:38:08 2004 @@ -1,19 +1,19 @@ | -| kernel_ex.sa 3.3 12/19/90 +| kernel_ex.sa 3.3 12/19/90 | -| This file contains routines to force exception status in the +| This file contains routines to force exception status in the | fpu for exceptional cases detected or reported within the | transcendental functions. Typically, the t_xx routine will | set the appropriate bits in the USER_FPSR word on the stack. | The bits are tested in gen_except.sa to determine if an exceptional -| situation needs to be created on return from the FPSP. +| situation needs to be created on return from the FPSP. | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -31,7 +31,7 @@ |xref unf_sub |xref nrm_set - .global t_dz + .global t_dz .global t_dz2 .global t_operr .global t_unfl @@ -49,7 +49,7 @@ | | if dz trap disabled | store properly signed inf (use sign of etemp) into fp0 -| set FPSR exception status dz bit, condition code +| set FPSR exception status dz bit, condition code | inf bit, and accrued dz bit | return | frestore the frame into the machine (done by unimp_hd) @@ -61,7 +61,7 @@ | frestore the frame into the machine (done by unimp_hd) | | t_dz2 is used by monadic functions such as flogn (from do_func). -| t_dz is used by monadic functions such as satanh (from the +| t_dz is used by monadic functions such as satanh (from the | transcendental function). | t_dz2: @@ -104,10 +104,10 @@ | OPERR exception | | if (operr trap disabled) -| set FPSR exception status operr bit, condition code +| set FPSR exception status operr bit, condition code | nan bit; Store default NAN into fp0 | frestore the frame into the machine (done by unimp_hd) -| +| | else (operr trap enabled) | set FPSR exception status operr bit, accrued operr bit | set flag to disable sto_res from corrupting fp register @@ -159,13 +159,13 @@ unfl_dis: bfextu FPCR_MODE(%a6){#0:#2},%d0 |get round precision - + bclrb #sign_bit,LOCAL_EX(%a0) sne LOCAL_SGN(%a0) |convert to internal ext format bsr unf_sub |returns IEEE result at a0 | ;and sets FPSR_CC accordingly - + bfclr LOCAL_SGN(%a0){#0:#8} |convert back to IEEE ext format beqs unfl_fin @@ -175,7 +175,7 @@ unfl_fin: fmovemx (%a0),%fp0-%fp0 |store result in fp0 rts - + | | t_ovfl2 --- OVFL exception (without inex2 returned) @@ -280,7 +280,7 @@ | DST_NAN | | Determine if the destination nan is signalling or non-signalling, -| and set the FPSR bits accordingly. See the MC68040 User's Manual +| and set the FPSR bits accordingly. See the MC68040 User's Manual | section 3.2.2.5 NOT-A-NUMBERS. | dst_nan: @@ -288,7 +288,7 @@ beqs dst_pos |if clr, it was positive bsetb #neg_bit,FPSR_CC(%a6) |set N bit dst_pos: - btstb #signan_bit,FPTEMP_HI(%a6) |check if signalling + btstb #signan_bit,FPTEMP_HI(%a6) |check if signalling beqs dst_snan |branch if signalling fmovel %d1,%fpcr |restore user's rmode/prec @@ -300,14 +300,14 @@ andib #0xe0,%d0 cmpib #0x60,%d0 bnes no_snan - btstb #signan_bit,ETEMP_HI(%a6) |check if signalling + btstb #signan_bit,ETEMP_HI(%a6) |check if signalling bnes no_snan orl #snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP no_snan: - rts + rts dst_snan: - btstb #snan_bit,FPCR_ENABLE(%a6) |check if trap enabled + btstb #snan_bit,FPCR_ENABLE(%a6) |check if trap enabled beqs dst_dis |branch if disabled orb #nan_tag,DTAG(%a6) |set up dtag for nan @@ -316,9 +316,9 @@ rts dst_dis: - bsetb #signan_bit,FPTEMP_HI(%a6) |set SNAN bit in sop + bsetb #signan_bit,FPTEMP_HI(%a6) |set SNAN bit in sop fmovel %d1,%fpcr |restore user's rmode/prec - fmovex FPTEMP(%a6),%fp0 |load non-sign. nan + fmovex FPTEMP(%a6),%fp0 |load non-sign. nan orl #snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP rts @@ -326,7 +326,7 @@ | SRC_NAN | | Determine if the source nan is signalling or non-signalling, -| and set the FPSR bits accordingly. See the MC68040 User's Manual +| and set the FPSR bits accordingly. See the MC68040 User's Manual | section 3.2.2.5 NOT-A-NUMBERS. | src_nan: @@ -334,16 +334,16 @@ beqs src_pos |if clr, it was positive bsetb #neg_bit,FPSR_CC(%a6) |set N bit src_pos: - btstb #signan_bit,ETEMP_HI(%a6) |check if signalling + btstb #signan_bit,ETEMP_HI(%a6) |check if signalling beqs src_snan |branch if signalling fmovel %d1,%fpcr |restore user's rmode/prec fmovex ETEMP(%a6),%fp0 |return the non-signalling nan - rts + rts src_snan: - btstb #snan_bit,FPCR_ENABLE(%a6) |check if trap enabled + btstb #snan_bit,FPCR_ENABLE(%a6) |check if trap enabled beqs src_dis |branch if disabled - bsetb #signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop + bsetb #signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop orb #norm_tag,DTAG(%a6) |set up dtag for norm orb #nan_tag,STAG(%a6) |set up stag for nan st STORE_FLG(%a6) |do not store a result @@ -351,9 +351,9 @@ rts src_dis: - bsetb #signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop + bsetb #signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop fmovel %d1,%fpcr |restore user's rmode/prec - fmovex ETEMP(%a6),%fp0 |load non-sign. nan + fmovex ETEMP(%a6),%fp0 |load non-sign. nan orl #snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP rts @@ -367,7 +367,7 @@ bras xdnrm_con | | Entry point for scale with extended denorm. The function does -| not set inex2, aunfl, or ainex. +| not set inex2, aunfl, or ainex. | t_resdnrm: orl #unfl_mask,USER_FPSR(%a6) @@ -402,7 +402,7 @@ bfclr LOCAL_SGN(%a0){#0:#8} |change back to IEEE ext format beqs xdep bsetb #sign_bit,LOCAL_EX(%a0) -xdep: +xdep: bfclr STAG(%a6){#5:#3} |clear wbtm66,wbtm1,wbtm0 bsetb #wbtemp15_bit,WB_BYTE(%a6) |set wbtemp15 bclrb #sticky_bit,STICKY(%a6) |clear sticky bit @@ -439,7 +439,7 @@ | .global t_avoid_unsupp t_avoid_unsupp: - link %a2,#-LOCAL_SIZE |so that a2 fpsp.h negative + link %a2,#-LOCAL_SIZE |so that a2 fpsp.h negative | ;offsets may be used fsave -(%a7) tstb 1(%a7) |check if idle, exit if so diff -Nru a/arch/m68k/fpsp040/res_func.S b/arch/m68k/fpsp040/res_func.S --- a/arch/m68k/fpsp040/res_func.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/res_func.S Tue May 18 23:38:05 2004 @@ -8,7 +8,7 @@ | (Exception vector 55). | | For packed move out (fmove.p fpm,) the operation is -| completed here; data is packed and moved to user memory. +| completed here; data is packed and moved to user memory. | The stack is restored to the 040 only in the case of a | reportable exception in the conversion. | @@ -16,8 +16,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -48,7 +48,7 @@ |xref t_unfl .global res_func - .global p_move + .global p_move res_func: clrb DNRM_FLG(%a6) @@ -100,7 +100,7 @@ movew CMDREG1B(%a6),%d0 |get command register andil #0x7f,%d0 |strip to only command word | -| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and +| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and | fdsqrt are possible. | For cases fabs, fneg, fsmove, and fdmove goto spos (do not normalize) | For cases fsqrt, fssqrt, and fdsqrt goto nrm_src (do normalize) @@ -143,7 +143,7 @@ rts cu_ntn: orl #nan_mask,USER_FPSR(%a6) - movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for + movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for | ;snan handler rts @@ -206,7 +206,7 @@ cu_nmrd: movel #2,%d0 |set up the size for denorm movew LOCAL_EX(%a0),%d1 |compare exponent to double threshold - andw #0x7fff,%d1 + andw #0x7fff,%d1 cmpw #0x3c01,%d1 bls cu_nunfl bfextu FPCR_MODE(%a6){#2:#2},%d1 |get rmode @@ -359,7 +359,7 @@ | ;write the new tag & ete15 to the fstack mon_dnrm: | -| At this point, check for the cases in which normalizing the +| At this point, check for the cases in which normalizing the | denorm produces incorrect results. | tstb DY_MO_FLG(%a6) |all cases of dyadic instructions would @@ -374,7 +374,7 @@ movew CMDREG1B(%a6),%d0 |get command register andil #0x7f,%d0 |strip to only command word | -| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and +| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and | fdsqrt are possible. | For cases fabs, fneg, fsmove, and fdmove goto spos (do not normalize) | For cases fsqrt, fssqrt, and fdsqrt goto nrm_src (do normalize) @@ -382,12 +382,12 @@ btstl #0,%d0 bnes nrm_src |weed out fsqrt instructions st CU_ONLY(%a6) |set cu-only inst flag - bra cu_dnrm |fmove, fabs, fneg, ftst + bra cu_dnrm |fmove, fabs, fneg, ftst | ;cases go to cu_dnrm nrm_src: bclrb #sign_bit,LOCAL_EX(%a0) sne LOCAL_SGN(%a0) - bsr nrm_set |normalize number (exponent will go + bsr nrm_set |normalize number (exponent will go | ; negative) bclrb #sign_bit,LOCAL_EX(%a0) |get rid of false sign @@ -413,7 +413,7 @@ | | cu_dnrm handles all cu-only instructions (fmove, fabs, fneg, and -| ftst) completely in software without an frestore to the 040. +| ftst) completely in software without an frestore to the 040. | cu_dnrm: st CU_ONLY(%a6) @@ -446,7 +446,7 @@ rts cu_dtn: orl #nan_mask,USER_FPSR(%a6) - movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for + movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for | ;snan handler rts cu_dtcz: @@ -525,7 +525,7 @@ bra cu_sndr |load single neg zero w/lsb | | The precision is extended, so the result in etemp is correct. -| Simply set unfl (not inex2 or aunfl) and write the result to +| Simply set unfl (not inex2 or aunfl) and write the result to | the correct fp register. cu_wrexd: orl #unfl_mask,USER_FPSR(%a6) @@ -597,7 +597,7 @@ orl #neg_mask,USER_FPSR(%a6) orl #unfinx_mask,USER_FPSR(%a6) bra wr_etemp - + | | This code checks for 16-bit overflow conditions on dyadic | operations which are not restorable into the floating-point @@ -613,7 +613,7 @@ | $ff for both ops denormalized | | The wrap-around condition occurs for add, sub, div, and cmp -| when +| when | | abs(dest_exp - src_exp) >= $8000 | @@ -627,7 +627,7 @@ | for this condition. The restore flag (RES_FLG) is left clear. | No frestore is done unless an exception is to be reported. | -| For fadd: +| For fadd: | if(sign_of(dest) != sign_of(src)) | replace exponent of src with $3fff (keep sign) | use fpu to perform dest+new_src (user's rmode and X) @@ -689,10 +689,10 @@ cmpiw #cmpcode,%d0 beq wrap_cmp | -| Inst is fdiv. +| Inst is fdiv. | wrap_div: - cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, + cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, beq fix_stk |restore to fpu | | One of the ops is denormalized. Test for wrap condition @@ -722,7 +722,7 @@ bra ck_in_com ckinf_nd: moveb DTAG(%a6),%d0 |check destination tag for inf or nan -ck_in_com: +ck_in_com: andib #0x60,%d0 |isolate tag bits cmpb #0x40,%d0 |is it inf? beq nan_or_inf |not wrap case @@ -755,7 +755,7 @@ beqs force_ovf st WBTEMP_SGN(%a6) | -| This code handles the case of the instruction resulting in +| This code handles the case of the instruction resulting in | an overflow condition. | force_ovf: @@ -777,7 +777,7 @@ bfextu FPCR_MODE(%a6){#0:#2},%d0 |inst not forced - use fpcr prec frcovf_rnd: -| The 881/882 does not set inex2 for the following case, so the +| The 881/882 does not set inex2 for the following case, so the | line is commented out to be compatible with 881/882 | tst.b %d0 | beq.b frcovf_x @@ -785,7 +785,7 @@ |frcovf_x: bsrl ovf_res |get correct result based on -| ;round precision/mode. This +| ;round precision/mode. This | ;sets FPSR_CC correctly | ;returns in external format bfclr WBTEMP_SGN(%a6){#0:#8} @@ -796,7 +796,7 @@ | Inst is fadd. | wrap_add: - cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, + cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, beq fix_stk |restore to fpu | | One of the ops is denormalized. Test for wrap condition @@ -964,14 +964,14 @@ | and aovfl, and clr the mantissa (incorrectly set by the | round routine.) | - orl #inf_mask+ovfl_inx_mask,USER_FPSR(%a6) + orl #inf_mask+ovfl_inx_mask,USER_FPSR(%a6) clrl 4(%a0) bra frcfpnr | | Inst is fsub. | wrap_sub: - cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, + cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, beq fix_stk |restore to fpu | | One of the ops is denormalized. Test for wrap condition @@ -1145,14 +1145,14 @@ | and aovfl, and clr the mantissa (incorrectly set by the | round routine.) | - orl #inf_mask+ovfl_inx_mask,USER_FPSR(%a6) + orl #inf_mask+ovfl_inx_mask,USER_FPSR(%a6) clrl 4(%a0) bra frcfpnr | | Inst is fcmp. | wrap_cmp: - cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, + cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, beq fix_stk |restore to fpu | | One of the ops is denormalized. Test for wrap condition @@ -1190,7 +1190,7 @@ | Inst is fmul. | wrap_mul: - cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, + cmpb #0xff,DNRM_FLG(%a6) |if both ops denorm, beq force_unf |force an underflow (really!) | | One of the ops is denormalized. Test for wrap condition @@ -1213,9 +1213,9 @@ bfexts ETEMP_EX(%a6){#1:#15},%d1 |get src exp (always neg) addl %d1,%d0 |subtract src from dest bgt fix_stk - + | -| This code handles the case of the instruction resulting in +| This code handles the case of the instruction resulting in | an underflow condition. | force_unf: @@ -1245,7 +1245,7 @@ bfextu FPCR_MODE(%a6){#0:#2},%d0 |inst not forced - use fpcr prec frcunf_rnd: bsrl unf_sub |get correct result based on -| ;round precision/mode. This +| ;round precision/mode. This | ;sets FPSR_CC correctly bfclr WBTEMP_SGN(%a6){#0:#8} |convert back to IEEE ext format beqs frcfpn @@ -1277,14 +1277,14 @@ bclrb #sign_bit,WBTEMP_EX(%a6) sne WBTEMP_SGN(%a6) bsrl ovf_res |get correct result based on -| ;round precision/mode. This +| ;round precision/mode. This | ;sets FPSR_CC correctly bfclr WBTEMP_SGN(%a6){#0:#8} |convert back to IEEE ext format beqs frcfpn_clr bsetb #sign_bit,WBTEMP_EX(%a6) frcfpn_clr: orl #ovfinx_mask,USER_FPSR(%a6) -| +| | Perform the write. | frcfpn: @@ -1301,9 +1301,9 @@ cmpib #0,%d0 beqs frc0_dst cmpib #1,%d0 - beqs frc1_dst + beqs frc1_dst cmpib #2,%d0 - beqs frc2_dst + beqs frc2_dst frc3_dst: movel WBTEMP_EX(%a6),USER_FP3(%a6) movel WBTEMP_HI(%a6),USER_FP3+4(%a6) @@ -1337,7 +1337,7 @@ beqs fmoveinc |enabled, force restore btstb #snan_bit,FPCR_ENABLE(%a6) |and don't overwrite beqs fmoveinc |the dest - movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for + movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for | ;snan handler tstb ETEMP(%a6) |check for negative blts snan_neg @@ -1361,7 +1361,7 @@ cmpib #0x60,%d0 |check if stag is NaN bnes fminc_czero orl #nan_mask,USER_FPSR(%a6) |if nan, nothing yet has set NaN - movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for + movel ETEMP_EX(%a6),FPTEMP_EX(%a6) |set up fptemp sign for | ;snan handler tstw LOCAL_EX(%a0) |check sign bges fminc_con @@ -1389,9 +1389,9 @@ cmpib #0,%d0 beqs fp0_dst cmpib #1,%d0 - beqs fp1_dst + beqs fp1_dst cmpib #2,%d0 - beqs fp2_dst + beqs fp2_dst fp3_dst: movel ETEMP_EX(%a6),USER_FP3(%a6) movel ETEMP_HI(%a6),USER_FP3+4(%a6) @@ -1421,20 +1421,20 @@ beq pack_out |else it is norm or denorm bra mv_out - + | | MOVE OUT | mv_tbl: .long li - .long sgp - .long xp - .long mvout_end |should never be taken - .long wi - .long dp - .long bi - .long mvout_end |should never be taken + .long sgp + .long xp + .long mvout_end |should never be taken + .long wi + .long dp + .long bi + .long mvout_end |should never be taken mv_out: bfextu CMDREG1B(%a6){#3:#3},%d1 |put source specifier in d1 leal mv_tbl,%a0 @@ -1442,7 +1442,7 @@ jmp (%a0) | -| This exit is for move-out to memory. The aunfl bit is +| This exit is for move-out to memory. The aunfl bit is | set if the result is inex and unfl is signalled. | mvout_end: @@ -1466,7 +1466,7 @@ mvout_con: rts | -| This exit is for move-out to int register. The aunfl bit is +| This exit is for move-out to int register. The aunfl bit is | not set in any case for this move. | mvouti_end: @@ -1496,7 +1496,7 @@ fmovemx ETEMP(%a6),%fp0-%fp0 fcmpd #0x41dfffffffc00000,%fp0 | 41dfffffffc00000 in dbl prec = 401d0000fffffffe00000000 in ext prec - fbge lo_plrg + fbge lo_plrg fcmpd #0xc1e0000000000000,%fp0 | c1e0000000000000 in dbl prec = c01e00008000000000000000 in ext prec fble lo_nlrg @@ -1541,7 +1541,7 @@ fmovemx ETEMP(%a6),%fp0-%fp0 fcmps #0x46fffe00,%fp0 | 46fffe00 in sgl prec = 400d0000fffe000000000000 in ext prec - fbge wo_plrg + fbge wo_plrg fcmps #0xc7000000,%fp0 | c7000000 in sgl prec = c00e00008000000000000000 in ext prec fble wo_nlrg @@ -1586,7 +1586,7 @@ fmovemx ETEMP(%a6),%fp0-%fp0 fcmps #0x42fe0000,%fp0 | 42fe0000 in sgl prec = 40050000fe00000000000000 in ext prec - fbge by_plrg + fbge by_plrg fcmps #0xc3000000,%fp0 | c3000000 in sgl prec = c00600008000000000000000 in ext prec fble by_nlrg @@ -1629,7 +1629,7 @@ int_dnrm: movel #0,L_SCR1(%a6) | initialize result to 0 bfextu FPCR_MODE(%a6){#2:#2},%d1 | d1 is the rounding mode - cmpb #2,%d1 + cmpb #2,%d1 bmis int_inx | if RN or RZ, done bnes int_rp | if RP, continue below tstw ETEMP(%a6) | RM: store -1 in L_SCR1 if src is negative @@ -1642,7 +1642,7 @@ bmis int_inx | otherwise, result is 0 lea L_SCR1(%a6),%a1 | a1 is address of L_SCR1 addal %d0,%a1 | offset by destination width -1 - subal #1,%a1 + subal #1,%a1 bsetb #0,(%a1) | set low bit at a1 address int_inx: oril #inx2a_mask,USER_FPSR(%a6) @@ -1656,10 +1656,10 @@ oril #opaop_mask,USER_FPSR(%a6) | ;fall through to perform int_wrt -int_wrt: +int_wrt: movel EXC_EA(%a6),%a1 |load destination address tstl %a1 |check to see if it is a dest register - beqs wrt_dn |write data register + beqs wrt_dn |write data register lea L_SCR1(%a6),%a0 |point to supervisor source address bsrl mem_write bra mvouti_end @@ -1680,7 +1680,7 @@ sz_con: movel %d0,%d1 |reg_dest expects size:reg in d1 bsrl reg_dest |load proper data register - bra mvouti_end + bra mvouti_end xp: lea ETEMP(%a6),%a0 bclrb #sign_bit,LOCAL_EX(%a0) @@ -1718,7 +1718,7 @@ blt dp_under cmpw 2(%a1),%d0 bgt dp_over - + movel #2,%d0 |set destination format to double | ;fall through to do_fp | @@ -1726,10 +1726,10 @@ bfextu FPCR_MODE(%a6){#2:#2},%d1 |rnd mode in d1 swap %d0 |rnd prec in upper word addl %d0,%d1 |d1 has PREC/MODE info - - clrl %d0 |clear g,r,s - bsrl round |round + clrl %d0 |clear g,r,s + + bsrl round |round movel %a0,%a1 movel EXC_EA(%a6),%a0 @@ -1764,12 +1764,12 @@ bsrl dest_ext |store to memory bsetb #unfl_bit,FPSR_EXCEPT(%a6) bra mvout_end - + sp_under: bsetb #etemp15_bit,STAG(%a6) cmpw 4(%a1),%d0 - blts sp_catas |catastrophic underflow case + blts sp_catas |catastrophic underflow case movel #1,%d0 |load in round precision movel #sgl_thresh,%d1 |load in single denorm threshold @@ -1784,9 +1784,9 @@ cmpw 4(%a1),%d0 blts dp_catas |catastrophic underflow case - + movel #dbl_thresh,%d1 |load in double precision threshold - movel #2,%d0 + movel #2,%d0 bsrl dpspdnrm |expects d1 to have proper | ;denorm threshold | ;expects d0 to have round precision @@ -1813,11 +1813,11 @@ movel %a0,%a1 |a1 has the operand input movel EXC_EA(%a6),%a0 |a0 has the destination pointer - + bsrl dest_sgl |store the result oril #unfinx_mask,USER_FPSR(%a6) bra mvout_end - + dp_catas: | Temp fix for z bit set in unf_sub movel USER_FPSR(%a6),-(%a7) @@ -1828,12 +1828,12 @@ movel (%a7)+,USER_FPSR(%a6) movel #1,%d0 - subw %d0,LOCAL_EX(%a0) |account for difference between + subw %d0,LOCAL_EX(%a0) |account for difference between | ;denorm/norm bias movel %a0,%a1 |a1 has the operand input movel EXC_EA(%a6),%a0 |a0 has the destination pointer - + bsrl dest_dbl |store the result oril #unfinx_mask,USER_FPSR(%a6) bra mvout_end @@ -1880,7 +1880,7 @@ bra mvout_end | -| DPSPDNRM +| DPSPDNRM | | This subroutine takes an extended normalized number and denormalizes | it to the given round precision. This subroutine also decrements @@ -1894,7 +1894,7 @@ | | Output: (In the format for dest_sgl or dest_dbl) | a0 points to the destination -| a1 points to the operand +| a1 points to the operand | | Exceptions: Reports inexact 2 exception by setting USER_FPSR bits | @@ -1905,7 +1905,7 @@ bfextu FPCR_MODE(%a6){#2:#2},%d1 |get rounding mode swap %d1 - movew 2(%a7),%d1 |set rounding precision + movew 2(%a7),%d1 |set rounding precision swap %d1 |at this point d1 has PREC/MODE info bsrl round |round result, sets the inex bit in | ;USER_FPSR if needed @@ -1952,20 +1952,20 @@ .long p_dyd7 pack_out: - leal p_movet,%a0 |load jmp table address + leal p_movet,%a0 |load jmp table address movew STAG(%a6),%d0 |get source tag bfextu %d0{#16:#3},%d0 |isolate source bits movel (%a0,%d0.w*4),%a0 |load a0 with routine label for tag jmp (%a0) |go to the routine p_write: - movel #0x0c,%d0 |get byte count + movel #0x0c,%d0 |get byte count movel EXC_EA(%a6),%a1 |get the destination address - bsr mem_write |write the user's destination + bsr mem_write |write the user's destination moveb #0,CU_SAVEPC(%a6) |set the cu save pc to all 0's | -| Also note that the dtag must be set to norm here - this is because +| Also note that the dtag must be set to norm here - this is because | the 040 uses the dtag to execute the correct microcode. | bfclr DTAG(%a6){#0:#3} |set dtag to norm diff -Nru a/arch/m68k/fpsp040/round.S b/arch/m68k/fpsp040/round.S --- a/arch/m68k/fpsp040/round.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/round.S Tue May 18 23:38:08 2004 @@ -8,8 +8,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |ROUND idnt 2,1 | Motorola 040 Floating Point Software Package @@ -21,7 +21,7 @@ | | round --- round result according to precision/mode | -| a0 points to the input operand in the internal extended format +| a0 points to the input operand in the internal extended format | d1(high word) contains rounding precision: | ext = $0000xxxx | sgl = $0001xxxx @@ -44,15 +44,15 @@ .global round round: -| If g=r=s=0 then result is exact and round is done, else set -| the inex flag in status reg and continue. +| If g=r=s=0 then result is exact and round is done, else set +| the inex flag in status reg and continue. | - bsrs ext_grs |this subroutine looks at the -| :rounding precision and sets + bsrs ext_grs |this subroutine looks at the +| :rounding precision and sets | ;the appropriate g-r-s bits. tstl %d0 |if grs are zero, go force bne rnd_cont |lower bits to zero for size - + swap %d1 |set up d1.w for round prec. bra truncate @@ -79,7 +79,7 @@ | If sign of fp number = 0 (positive), then add 1 to l. | rnd_plus: - swap %d1 |set up d1 for round prec. + swap %d1 |set up d1 for round prec. tstb LOCAL_SGN(%a0) |check for sign bmi truncate |if positive then truncate movel #0xffffffff,%d0 |force g,r,s to be all f's @@ -92,8 +92,8 @@ | If sign of fp number = 1 (negative), then add 1 to l. | rnd_mnus: - swap %d1 |set up d1 for round prec. - tstb LOCAL_SGN(%a0) |check for sign + swap %d1 |set up d1 for round prec. + tstb LOCAL_SGN(%a0) |check for sign bpl truncate |if negative then truncate movel #0xffffffff,%d0 |force g,r,s to be all f's lea add_to_l,%a1 @@ -104,7 +104,7 @@ | | Always truncate. rnd_zero: - swap %d1 |set up d1 for round prec. + swap %d1 |set up d1 for round prec. bra truncate | | @@ -114,7 +114,7 @@ | Note that this will round to even in case of a tie. | rnd_near: - swap %d1 |set up d1 for round prec. + swap %d1 |set up d1 for round prec. asll #1,%d0 |shift g-bit to c-bit bcc truncate |if (g=1) then lea add_to_l,%a1 @@ -125,11 +125,11 @@ | ext_grs --- extract guard, round and sticky bits | | Input: d1 = PREC:ROUND -| Output: d0{31:29}= guard, round, sticky +| Output: d0{31:29}= guard, round, sticky | | The ext_grs extract the guard/round/sticky bits according to the | selected rounding precision. It is called by the round subroutine -| only. All registers except d0 are kept intact. d0 becomes an +| only. All registers except d0 are kept intact. d0 becomes an | updated guard,round,sticky in d0{31:29} | | Notes: the ext_grs uses the round PREC, and therefore has to swap d1 @@ -140,7 +140,7 @@ cmpiw #0,%d1 bnes sgl_or_dbl bras end_ext_grs - + sgl_or_dbl: moveml %d2/%d3,-(%a7) |make some temp registers cmpiw #1,%d1 @@ -150,19 +150,19 @@ movel #30,%d2 |of the sgl prec. limits lsll %d2,%d3 |shift g-r bits to MSB of d3 movel LOCAL_HI(%a0),%d2 |get word 2 for s-bit test - andil #0x0000003f,%d2 |s bit is the or of all other + andil #0x0000003f,%d2 |s bit is the or of all other bnes st_stky |bits to the right of g-r tstl LOCAL_LO(%a0) |test lower mantissa bnes st_stky |if any are set, set sticky tstl %d0 |test original g,r,s bnes st_stky |if any are set, set sticky bras end_sd |if words 3 and 4 are clr, exit -grs_dbl: +grs_dbl: bfextu LOCAL_LO(%a0){#21:#2},%d3 |dbl-prec. g-r are 2 bits right movel #30,%d2 |of the dbl prec. limits lsll %d2,%d3 |shift g-r bits to the MSB of d3 movel LOCAL_LO(%a0),%d2 |get lower mantissa for s-bit test - andil #0x000001ff,%d2 |s bit is the or-ing of all + andil #0x000001ff,%d2 |s bit is the or-ing of all bnes st_stky |other bits to the right of g-r tstl %d0 |test word original g,r,s bnes st_stky |if any are set, set sticky @@ -269,20 +269,20 @@ | | NORMALIZE | -| These routines (nrm_zero & nrm_set) normalize the unnorm. This -| is done by shifting the mantissa left while decrementing the +| These routines (nrm_zero & nrm_set) normalize the unnorm. This +| is done by shifting the mantissa left while decrementing the | exponent. | -| NRM_SET shifts and decrements until there is a 1 set in the integer +| NRM_SET shifts and decrements until there is a 1 set in the integer | bit of the mantissa (msb in d1). | -| NRM_ZERO shifts and decrements until there is a 1 set in the integer -| bit of the mantissa (msb in d1) unless this would mean the exponent -| would go less than 0. In that case the number becomes a denorm - the -| exponent (d0) is set to 0 and the mantissa (d1 & d2) is not +| NRM_ZERO shifts and decrements until there is a 1 set in the integer +| bit of the mantissa (msb in d1) unless this would mean the exponent +| would go less than 0. In that case the number becomes a denorm - the +| exponent (d0) is set to 0 and the mantissa (d1 & d2) is not | normalized. | -| Note that both routines have been optimized (for the worst case) and +| Note that both routines have been optimized (for the worst case) and | therefore do not have the easy to follow decrement/shift loop. | | NRM_ZERO @@ -304,34 +304,34 @@ .global nrm_zero nrm_zero: movew LOCAL_EX(%a0),%d0 - cmpw #64,%d0 |see if exp > 64 + cmpw #64,%d0 |see if exp > 64 bmis d0_less - bsr nrm_set |exp > 64 so exp won't exceed 0 + bsr nrm_set |exp > 64 so exp won't exceed 0 rts d0_less: moveml %d2/%d3/%d5/%d6,-(%a7) movel LOCAL_HI(%a0),%d1 movel LOCAL_LO(%a0),%d2 - bfffo %d1{#0:#32},%d3 |get the distance to the first 1 + bfffo %d1{#0:#32},%d3 |get the distance to the first 1 | ;in ms mant beqs ms_clr |branch if no bits were set cmpw %d3,%d0 |of X>Y - bmis greater |then exp will go past 0 (neg) if + bmis greater |then exp will go past 0 (neg) if | ;it is just shifted bsr nrm_set |else exp won't go past 0 moveml (%a7)+,%d2/%d3/%d5/%d6 - rts + rts greater: movel %d2,%d6 |save ls mant in d6 lsll %d0,%d2 |shift ls mant by count lsll %d0,%d1 |shift ms mant by count movel #32,%d5 - subl %d0,%d5 |make op a denorm by shifting bits - lsrl %d5,%d6 |by the number in the exp, then + subl %d0,%d5 |make op a denorm by shifting bits + lsrl %d5,%d6 |by the number in the exp, then | ;set exp = 0. orl %d6,%d1 |shift the ls mant bits into the ms mant - movel #0,%d0 |same as if decremented exp to 0 + movel #0,%d0 |same as if decremented exp to 0 | ;while shifting movew %d0,LOCAL_EX(%a0) movel %d1,LOCAL_HI(%a0) @@ -380,7 +380,7 @@ rts | -| We get here if ms mant was = 0, and we assume ls mant has bits +| We get here if ms mant was = 0, and we assume ls mant has bits | set (otherwise this would have been tagged a zero not a denorm). | lower: @@ -400,26 +400,26 @@ | | Used by underflow. | -| Input: +| Input: | a0 points to the operand to be denormalized | (in the internal extended format) -| -| d0: rounding precision +| +| d0: rounding precision | Output: | a0 points to the denormalized result | (in the internal extended format) | -| d0 is guard,round,sticky +| d0 is guard,round,sticky | -| d0 comes into this routine with the rounding precision. It -| is then loaded with the denormalized exponent threshold for the +| d0 comes into this routine with the rounding precision. It +| is then loaded with the denormalized exponent threshold for the | rounding precision. | .global denorm denorm: btstb #6,LOCAL_EX(%a0) |check for exponents between $7fff-$4000 - beqs no_sgn_ext + beqs no_sgn_ext bsetb #7,LOCAL_EX(%a0) |sign extend if it is so no_sgn_ext: @@ -442,7 +442,7 @@ movel %d1,%d0 |copy d1 into d0 subw LOCAL_EX(%a0),%d0 |diff = threshold - exp cmpw #67,%d0 |if diff > 67 (mant + grs bits) - bpls chk_stky |then branch (all bits would be + bpls chk_stky |then branch (all bits would be | ; shifted off in denorm routine) clrl %d0 |else clear the sticky flag bsr dnrm_lp |denormalize the number @@ -455,7 +455,7 @@ movel %d1,%d0 |copy d1 into d0 subw LOCAL_EX(%a0),%d0 |diff = threshold - exp cmpw #67,%d0 |if diff > 67 (mant + grs bits) - bpls chk_stky |then branch (all bits would be + bpls chk_stky |then branch (all bits would be | ; shifted off in denorm routine) clrl %d0 |else clear the sticky flag bsr dnrm_lp |denormalize the number @@ -474,7 +474,7 @@ movel #0x20000000,%d0 |set sticky bit in return value clr_mant: movew %d1,LOCAL_EX(%a0) |load exp with threshold - movel #0,LOCAL_HI(%a0) |set d1 = 0 (ms mantissa) + movel #0,LOCAL_HI(%a0) |set d1 = 0 (ms mantissa) movel #0,LOCAL_LO(%a0) |set d2 = 0 (ms mantissa) rts dnrm_inex: @@ -487,7 +487,7 @@ | | Input: | a0 points to the operand to be denormalized -| d0{31:29} initial guard,round,sticky +| d0{31:29} initial guard,round,sticky | d1{15:0} denormalization threshold | Output: | a0 points to the denormalized operand @@ -496,7 +496,7 @@ | | The LOCAL_LO and LOCAL_GRS parts of the value are copied to FP_SCR2 | so that bfext can be used to extract the new low part of the mantissa. -| Dnrm_lp can be called with a0 pointing to ETEMP or WBTEMP and there +| Dnrm_lp can be called with a0 pointing to ETEMP or WBTEMP and there | is no LOCAL_GRS scratch word following it on the fsave frame. | .global dnrm_lp @@ -515,8 +515,8 @@ movel %d1,%d0 |copy the denorm threshold subw LOCAL_EX(%a0),%d1 |d1 = threshold - uns exponent bles no_lp |d1 <= 0 - cmpw #32,%d1 - blts case_1 |0 = d1 < 32 + cmpw #32,%d1 + blts case_1 |0 = d1 < 32 cmpw #64,%d1 blts case_2 |32 <= d1 < 64 bra case_3 |d1 >= 64 @@ -542,7 +542,7 @@ movel %d2,LOCAL_HI(%a0) |store new LOCAL_HI movel %d1,LOCAL_LO(%a0) |store new LOCAL_LO clrb %d1 - bftst %d0{#2:#30} + bftst %d0{#2:#30} beqs c1nstky bsetl #rnd_stky_bit,%d0 st %d1 @@ -585,7 +585,7 @@ movel FP_SCR2+LOCAL_GRS(%a6),%d2 |restore original g,r,s andil #0xe0000000,%d2 |clear all but G,R,S tstl %d2 |test if original G,R,S are clear - beqs clear_grs + beqs clear_grs orl #0x20000000,%d0 |set sticky bit in d0 clear_grs: andil #0xe0000000,%d0 |get rid of all but G,R,S @@ -621,7 +621,7 @@ bfextu %d0{#2:#30},%d1 andil #0xc0000000,%d0 bras c3com - + sixty_five: movel LOCAL_HI(%a0),%d0 bfextu %d0{#1:#31},%d1 diff -Nru a/arch/m68k/fpsp040/sacos.S b/arch/m68k/fpsp040/sacos.S --- a/arch/m68k/fpsp040/sacos.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/sacos.S Tue May 18 23:38:07 2004 @@ -12,7 +12,7 @@ | | Accuracy and Monotonicity: The returned result is within 3 ulps in | 64 significant bit, i.e. within 0.5001 ulp to 53 bits if the -| result is subsequently rounded to double precision. The +| result is subsequently rounded to double precision. The | result is provably monotonic in double precision. | | Speed: The program sCOS takes approximately 310 cycles. @@ -38,8 +38,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SACOS idnt 2,1 | Motorola 040 Floating Point Software Package @@ -74,17 +74,17 @@ |--ACOS(X) = 2 * ATAN( SQRT( (1-X)/(1+X) ) ) fmoves #0x3F800000,%fp1 - faddx %fp0,%fp1 | ...1+X - fnegx %fp0 | ... -X + faddx %fp0,%fp1 | ...1+X + fnegx %fp0 | ... -X fadds #0x3F800000,%fp0 | ...1-X - fdivx %fp1,%fp0 | ...(1-X)/(1+X) + fdivx %fp1,%fp0 | ...(1-X)/(1+X) fsqrtx %fp0 | ...SQRT((1-X)/(1+X)) fmovemx %fp0-%fp0,(%a0) | ...overwrite input movel %d1,-(%sp) |save original users fpcr clrl %d1 bsr satan | ...ATAN(SQRT([1-X]/[1+X])) fmovel (%sp)+,%fpcr |restore users exceptions - faddx %fp0,%fp0 | ...2 * ATAN( STUFF ) + faddx %fp0,%fp0 | ...2 * ATAN( STUFF ) bra t_frcinx ACOSBIG: @@ -110,6 +110,6 @@ ACOSP1: fmovel %d1,%FPCR fmoves #0x00000000,%fp0 - rts |Facos ; of +1 is exact + rts |Facos ; of +1 is exact |end diff -Nru a/arch/m68k/fpsp040/sasin.S b/arch/m68k/fpsp040/sasin.S --- a/arch/m68k/fpsp040/sasin.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/sasin.S Tue May 18 23:38:07 2004 @@ -12,7 +12,7 @@ | | Accuracy and Monotonicity: The returned result is within 3 ulps in | 64 significant bit, i.e. within 0.5001 ulp to 53 bits if the -| result is subsequently rounded to double precision. The +| result is subsequently rounded to double precision. The | result is provably monotonic in double precision. | | Speed: The program sASIN takes approximately 310 cycles. @@ -38,8 +38,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SASIN idnt 2,1 | Motorola 040 Floating Point Software Package @@ -80,7 +80,7 @@ fmulx %fp2,%fp1 | ...(1+X)(1-X) fmovemx (%a7)+,%fp2-%fp2 fsqrtx %fp1 | ...SQRT([1-X][1+X]) - fdivx %fp1,%fp0 | ...X/SQRT([1-X][1+X]) + fdivx %fp1,%fp0 | ...X/SQRT([1-X][1+X]) fmovemx %fp0-%fp0,(%a0) bsr satan bra t_frcinx @@ -97,7 +97,7 @@ andil #0x80000000,%d0 | ...SIGN BIT OF X oril #0x3F800000,%d0 | ...+-1 IN SGL FORMAT movel %d0,-(%sp) | ...push SIGN(X) IN SGL-FMT - fmovel %d1,%FPCR + fmovel %d1,%FPCR fmuls (%sp)+,%fp0 bra t_frcinx diff -Nru a/arch/m68k/fpsp040/satan.S b/arch/m68k/fpsp040/satan.S --- a/arch/m68k/fpsp040/satan.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/satan.S Tue May 18 23:38:07 2004 @@ -43,8 +43,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |satan idnt 2,1 | Motorola 040 Floating Point Software Package @@ -52,7 +52,7 @@ |section 8 #include "fpsp.h" - + BOUNDS1: .long 0x3FFB8000,0x4002FFFF ONE: .long 0x3F800000 @@ -322,7 +322,7 @@ |--THE REASON FOR THIS REARRANGEMENT IS TO MAKE THE INDEPENDENT |--PARTS A1*U*V AND (A2 + ... STUFF) MORE LOAD-BALANCED - + fmovex %fp0,%fp1 fmulx %fp1,%fp1 fmoved ATANA3,%fp2 @@ -332,7 +332,7 @@ faddd ATANA2,%fp2 | ...A2+V*(A3+V) fmuld ATANA1,%fp1 | ...A1*U*V fmulx %fp2,%fp1 | ...A1*U*V*(A2+V*(A3+V)) - + faddx %fp1,%fp0 | ...ATAN(U), FP1 RELEASED fmovel %d1,%FPCR |restore users exceptions faddx ATANF(%a6),%fp0 | ...ATAN(X) @@ -356,7 +356,7 @@ |--COMPUTE POLYNOMIAL fmulx %fp0,%fp0 | ...FP0 IS Y = X*X - + movew #0x0000,XDCARE(%a6) fmovex %fp0,%fp1 @@ -381,7 +381,7 @@ fmulx X(%a6),%fp0 | ...X*Y faddx %fp2,%fp1 | ...[B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))] - + fmulx %fp1,%fp0 | ...X*Y*([B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))]) @@ -413,7 +413,7 @@ fmoves #0xBF800000,%fp1 | ...LOAD -1 fdivx %fp0,%fp1 | ...FP1 IS -1/X - + |--DIVIDE IS STILL CRANKING fmovex %fp1,%fp0 | ...FP0 IS X' @@ -439,14 +439,14 @@ fmulx X(%a6),%fp0 | ...X'*Y faddx %fp2,%fp1 | ...[Y*(C2+Z*C4)]+[C1+Z*(C3+Z*C5)] - + fmulx %fp1,%fp0 | ...X'*Y*([B1+Z*(B3+Z*B5)] | ... +[Y*(B2+Z*(B4+Z*B6))]) faddx X(%a6),%fp0 fmovel %d1,%FPCR |restore users exceptions - + btstb #7,(%a0) beqs pos_big @@ -474,5 +474,5 @@ fmovel %d1,%fpcr fsubx PTINY,%fp0 bra t_frcinx - + |end diff -Nru a/arch/m68k/fpsp040/satanh.S b/arch/m68k/fpsp040/satanh.S --- a/arch/m68k/fpsp040/satanh.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/satanh.S Tue May 18 23:38:05 2004 @@ -13,7 +13,7 @@ | | Accuracy and Monotonicity: The returned result is within 3 ulps in | 64 significant bit, i.e. within 0.5001 ulp to 53 bits if the -| result is subsequently rounded to double precision. The +| result is subsequently rounded to double precision. The | result is provably monotonic in double precision. | | Speed: The program satanh takes approximately 270 cycles. @@ -33,7 +33,7 @@ | 3. If |X| > 1, go to 5. | | 4. (|X| = 1) Generate infinity with an appropriate sign and -| divide-by-zero by +| divide-by-zero by | sgn := sign(X) | atan(X) := sgn / (+0). | Exit. @@ -45,8 +45,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |satanh idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/fpsp040/scale.S b/arch/m68k/fpsp040/scale.S --- a/arch/m68k/fpsp040/scale.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/scale.S Tue May 18 23:38:09 2004 @@ -9,7 +9,7 @@ | The entry point sscale is called from do_func to emulate | the fscale unimplemented instruction. | -| Input: Double-extended destination operand in FPTEMP, +| Input: Double-extended destination operand in FPTEMP, | double-extended source operand in ETEMP. | | Output: The function returns scale(X,Y) to fp0. @@ -17,12 +17,12 @@ | Modifies: fp0. | | Algorithm: -| +| | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SCALE idnt 2,1 | Motorola 040 Floating Point Software Package @@ -147,7 +147,7 @@ src_neg: addl %d0,%d1 |add src to dest beqs denorm |if zero, result is denorm - blts fix_dnrm |if negative, result is + blts fix_dnrm |if negative, result is | ;needing denormalization tstb L_SCR1(%a6) beqs sneg_pos @@ -161,7 +161,7 @@ | | The result exponent is below denorm value. Test for catastrophic -| underflow and force zero if true. If not, try to shift the +| underflow and force zero if true. If not, try to shift the | mantissa right until a zero exponent exists. | fix_dnrm: @@ -229,7 +229,7 @@ rts | -| The rounding mode changed the zero to a smallest denorm. Call +| The rounding mode changed the zero to a smallest denorm. Call | t_resdnrm with exceptional operand in ETEMP. | sm_dnrm: @@ -250,7 +250,7 @@ fix_exit: bras sm_dnrm - + | | The result has underflowed to zero. Return zero and set | unfl, aunfl, and ainex. @@ -284,7 +284,7 @@ clrl FP_SCR1(%a6) |clear the exceptional operand clrl FP_SCR1+4(%a6) |for gen_except. clrl FP_SCR1+8(%a6) - fmoves #0x80000000,%fp0 + fmoves #0x80000000,%fp0 rts pos_zero: clrl FP_SCR1(%a6) |clear the exceptional operand @@ -299,7 +299,7 @@ | then adding the remainder of the source to the exponent. | dst_dnrm: - moveml %d2/%d3,-(%a7) + moveml %d2/%d3,-(%a7) movew FPTEMP_EX(%a6),%d1 movel FPTEMP_HI(%a6),%d2 movel FPTEMP_LO(%a6),%d3 @@ -313,7 +313,7 @@ roxll #1,%d2 bras dst_loop | -| Destination became normalized. Simply add the remaining +| Destination became normalized. Simply add the remaining | portion of the src to the exponent. | dst_norm: diff -Nru a/arch/m68k/fpsp040/scosh.S b/arch/m68k/fpsp040/scosh.S --- a/arch/m68k/fpsp040/scosh.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/scosh.S Tue May 18 23:38:05 2004 @@ -49,8 +49,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package @@ -99,7 +99,7 @@ movel (%sp)+,%d1 fmoves #0x3E800000,%fp1 | ...(1/4) - fdivx %fp0,%fp1 | ...1/(2 EXP(|X|)) + fdivx %fp0,%fp1 | ...1/(2 EXP(|X|)) fmovel %d1,%FPCR faddx %fp1,%fp0 diff -Nru a/arch/m68k/fpsp040/setox.S b/arch/m68k/fpsp040/setox.S --- a/arch/m68k/fpsp040/setox.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/setox.S Tue May 18 23:38:06 2004 @@ -331,8 +331,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |setox idnt 2,1 | Motorola 040 Floating Point Software Package @@ -505,7 +505,7 @@ fmovex %fp0,%fp2 fmuls #0xBC317218,%fp0 | ...N * L1, L1 = lead(-log2/64) fmulx L2,%fp2 | ...N * L2, L1+L2 = -log2/64 - faddx %fp1,%fp0 | ...X + N*L1 + faddx %fp1,%fp0 | ...X + N*L1 faddx %fp2,%fp0 | ...fp0 is R, reduced arg. | MOVE.W #$3FA5,EXPA3 ...load EXPA3 in cache @@ -516,46 +516,46 @@ |--[R+R*S*(A2+S*A4)] + [S*(A1+S*(A3+S*A5))] fmovex %fp0,%fp1 - fmulx %fp1,%fp1 | ...fp1 IS S = R*R + fmulx %fp1,%fp1 | ...fp1 IS S = R*R fmoves #0x3AB60B70,%fp2 | ...fp2 IS A5 | MOVE.W #0,2(%a1) ...load 2^(J/64) in cache - fmulx %fp1,%fp2 | ...fp2 IS S*A5 + fmulx %fp1,%fp2 | ...fp2 IS S*A5 fmovex %fp1,%fp3 fmuls #0x3C088895,%fp3 | ...fp3 IS S*A4 faddd EXPA3,%fp2 | ...fp2 IS A3+S*A5 faddd EXPA2,%fp3 | ...fp3 IS A2+S*A4 - fmulx %fp1,%fp2 | ...fp2 IS S*(A3+S*A5) + fmulx %fp1,%fp2 | ...fp2 IS S*(A3+S*A5) movew %d0,SCALE(%a6) | ...SCALE is 2^(M) in extended clrw SCALE+2(%a6) movel #0x80000000,SCALE+4(%a6) clrl SCALE+8(%a6) - fmulx %fp1,%fp3 | ...fp3 IS S*(A2+S*A4) + fmulx %fp1,%fp3 | ...fp3 IS S*(A2+S*A4) fadds #0x3F000000,%fp2 | ...fp2 IS A1+S*(A3+S*A5) - fmulx %fp0,%fp3 | ...fp3 IS R*S*(A2+S*A4) + fmulx %fp0,%fp3 | ...fp3 IS R*S*(A2+S*A4) - fmulx %fp1,%fp2 | ...fp2 IS S*(A1+S*(A3+S*A5)) - faddx %fp3,%fp0 | ...fp0 IS R+R*S*(A2+S*A4), + fmulx %fp1,%fp2 | ...fp2 IS S*(A1+S*(A3+S*A5)) + faddx %fp3,%fp0 | ...fp0 IS R+R*S*(A2+S*A4), | ...fp3 released fmovex (%a1)+,%fp1 | ...fp1 is lead. pt. of 2^(J/64) - faddx %fp2,%fp0 | ...fp0 is EXP(R) - 1 + faddx %fp2,%fp0 | ...fp0 is EXP(R) - 1 | ...fp2 released |--Step 5 |--final reconstruction process |--EXP(X) = 2^M * ( 2^(J/64) + 2^(J/64)*(EXP(R)-1) ) - fmulx %fp1,%fp0 | ...2^(J/64)*(Exp(R)-1) + fmulx %fp1,%fp0 | ...2^(J/64)*(Exp(R)-1) fmovemx (%a7)+,%fp2-%fp2/%fp3 | ...fp2 restored fadds (%a1),%fp0 | ...accurate 2^(J/64) - faddx %fp1,%fp0 | ...2^(J/64) + 2^(J/64)*... + faddx %fp1,%fp0 | ...2^(J/64) + 2^(J/64)*... movel ADJFLAG(%a6),%d0 |--Step 6 @@ -564,7 +564,7 @@ ADJUST: fmulx ADJSCALE(%a6),%fp0 NORMAL: - fmovel %d1,%FPCR | ...restore user FPCR + fmovel %d1,%FPCR | ...restore user FPCR fmulx SCALE(%a6),%fp0 | ...multiply 2^(M) bra t_frcinx diff -Nru a/arch/m68k/fpsp040/sgetem.S b/arch/m68k/fpsp040/sgetem.S --- a/arch/m68k/fpsp040/sgetem.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/sgetem.S Tue May 18 23:38:07 2004 @@ -1,14 +1,14 @@ | | sgetem.sa 3.1 12/10/90 | -| The entry point sGETEXP returns the exponent portion +| The entry point sGETEXP returns the exponent portion | of the input argument. The exponent bias is removed -| and the exponent value is returned as an extended +| and the exponent value is returned as an extended | precision number in fp0. sGETEXPD handles denormalized | numbers. | -| The entry point sGETMAN extracts the mantissa of the -| input argument. The mantissa is converted to an +| The entry point sGETMAN extracts the mantissa of the +| input argument. The mantissa is converted to an | extended precision number and returned in fp0. The | range of the result is [1.0 - 2.0). | @@ -24,8 +24,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package @@ -81,7 +81,7 @@ fmovel %d0,%fpcr |this fpcr setting is used by the 882 movew LOCAL_EX(%a0),%d0 |get the exp (really just want sign bit) orw #0x7fff,%d0 |clear old exp - bclrl #14,%d0 |make it the new exp +-3fff + bclrl #14,%d0 |make it the new exp +-3fff movew %d0,LOCAL_EX(%a0) |move the sign & exp back to fsave stack fmovex (%a0),%fp0 |put new value back in fp0 rts diff -Nru a/arch/m68k/fpsp040/sint.S b/arch/m68k/fpsp040/sint.S --- a/arch/m68k/fpsp040/sint.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/sint.S Tue May 18 23:38:09 2004 @@ -1,8 +1,8 @@ | | sint.sa 3.1 12/10/90 | -| The entry point sINT computes the rounded integer -| equivalent of the input argument, sINTRZ computes +| The entry point sINT computes the rounded integer +| equivalent of the input argument, sINTRZ computes | the integer rounded to zero of the input argument. | | Entry points sint and sintrz are called from do_func @@ -24,10 +24,10 @@ | | Algorithm: (sint and sintrz) | -| 1. If exp(X) >= 63, return X. +| 1. If exp(X) >= 63, return X. | If exp(X) < 0, return +/- 0 or +/- 1, according to | the rounding mode. -| +| | 2. (X is in range) set rsc = 63 - exp(X). Unnormalize the | result to the exponent $403e. | @@ -51,8 +51,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SINT idnt 2,1 | Motorola 040 Floating Point Software Package @@ -78,9 +78,9 @@ sint: bfextu FPCR_MODE(%a6){#2:#2},%d1 |use user's mode for rounding | ;implicitly has extend precision -| ;in upper word. +| ;in upper word. movel %d1,L_SCR1(%a6) |save mode bits - bras sintexc + bras sintexc | | FINT with extended denorm inputs. @@ -115,13 +115,13 @@ sintrz: movel #1,L_SCR1(%a6) |use rz mode for rounding | ;implicitly has extend precision -| ;in upper word. - bras sintexc +| ;in upper word. + bras sintexc | | SINTDO | | Input: a0 points to an IEEE extended format operand -| Output: fp0 has the result +| Output: fp0 has the result | | Exceptions: | @@ -133,7 +133,7 @@ sintdo: bfextu FPCR_MODE(%a6){#2:#2},%d1 |use user's mode for rounding | ;implicitly has ext precision -| ;in upper word. +| ;in upper word. movel %d1,L_SCR1(%a6) |save mode bits | | Real work of sint is in sintexc @@ -141,7 +141,7 @@ sintexc: bclrb #sign_bit,LOCAL_EX(%a0) |convert to internal extended | ;format - sne LOCAL_SGN(%a0) + sne LOCAL_SGN(%a0) cmpw #0x403e,LOCAL_EX(%a0) |check if (unbiased) exp > 63 bgts out_rnge |branch if exp < 63 cmpw #0x3ffd,LOCAL_EX(%a0) |check if (unbiased) exp < 0 @@ -187,7 +187,7 @@ un_rnrz_neg: bsr ld_mzero bra t_inx2 - + | | Input is greater than 2^63. All bits are significant. Return | the input. @@ -206,7 +206,7 @@ rts in_rnge: -| ;shift off fraction bits +| ;shift off fraction bits clrl %d0 |clear d0 - initial g,r,s for | ;dnrm_lp movel #0x403e,%d1 |set threshold for dnrm_lp diff -Nru a/arch/m68k/fpsp040/skeleton.S b/arch/m68k/fpsp040/skeleton.S --- a/arch/m68k/fpsp040/skeleton.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/skeleton.S Tue May 18 23:38:08 2004 @@ -18,20 +18,20 @@ | to handle the exception. | | If the exception was completely handled by the package, then -| the return will be via a 'jmp fpsp_done'. Unless there is +| the return will be via a 'jmp fpsp_done'. Unless there is | OS specific work to be done (such as handling a context switch or | interrupt) the user program can be resumed via 'rte'. | | In the following skeleton code, some typical 'real_xxxx' handling | code is shown. This code may need to be moved to an appropriate | place in the target system, or rewritten. -| +| | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. | @@ -50,7 +50,7 @@ | |section 8 - + #include "fpsp.h" |xref b1238_fix @@ -72,7 +72,7 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception @@ -82,7 +82,7 @@ | | All inexact exceptions are real, but the 'real' handler | will probably want to clear the pending exception. -| The provided code will clear the E3 exception (if pending), +| The provided code will clear the E3 exception (if pending), | otherwise clear the E1 exception. The frestore is not really | necessary for E1 exceptions. | @@ -96,7 +96,7 @@ | to the appropriate handler for the exception in the fpsr. Note | that this fix is only for d43b parts, and is skipped if the | version number is not $40. -| +| | .global real_inex .global inex @@ -116,7 +116,7 @@ bra snan inex_ckofl: btstb #ovfl_bit,2(%sp) |test for ovfl - beq inex_ckufl + beq inex_ckufl addl #4,%sp frestore (%sp)+ unlk %a6 @@ -163,11 +163,11 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception - + | | Overflow exception | @@ -189,11 +189,11 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception - + | | Underflow exception | @@ -215,11 +215,11 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception - + | | Signalling NAN exception | @@ -237,11 +237,11 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception - + | | Operand Error exception | @@ -259,12 +259,12 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception - + | | BSUN exception | @@ -287,7 +287,7 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception @@ -295,7 +295,7 @@ | | F-line exception | -| A 'real' F-line exception is one that the FPSP isn't supposed to +| A 'real' F-line exception is one that the FPSP isn't supposed to | handle. E.g. an instruction with a co-processor ID that is not 1. | | @@ -308,7 +308,7 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception @@ -330,7 +330,7 @@ SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp bral ret_from_exception @@ -355,14 +355,14 @@ | {4028, 4130} - unimp frame | {4000, 4100} - idle frame | -| This entry point simply holds an f-line illegal value. +| This entry point simply holds an f-line illegal value. | Replace this with a call to your kernel panic code or | code to handle future revisions of the fpu. | .global fpsp_fmt_error fpsp_fmt_error: - .long 0xf27f0000 |f-line illegal + .long 0xf27f0000 |f-line illegal | | fpsp_done --- FPSP exit point @@ -442,7 +442,7 @@ | a1 - supervisor destination address | d0 - number of bytes to read (maximum count is 12) | -| Like mem_write, mem_read always reads with a supervisor +| Like mem_write, mem_read always reads with a supervisor | destination address on the supervisor stack. Also like mem_write, | the EXC_SR is checked and a simple memory copy is done if reading | from supervisor space is indicated. diff -Nru a/arch/m68k/fpsp040/slog2.S b/arch/m68k/fpsp040/slog2.S --- a/arch/m68k/fpsp040/slog2.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/slog2.S Tue May 18 23:38:09 2004 @@ -1,28 +1,28 @@ | | slog2.sa 3.1 12/10/90 | -| The entry point slog10 computes the base-10 +| The entry point slog10 computes the base-10 | logarithm of an input argument X. -| slog10d does the same except the input value is a -| denormalized number. +| slog10d does the same except the input value is a +| denormalized number. | sLog2 and sLog2d are the base-2 analogues. | -| INPUT: Double-extended value in memory location pointed to +| INPUT: Double-extended value in memory location pointed to | by address register a0. | -| OUTPUT: log_10(X) or log_2(X) returned in floating-point +| OUTPUT: log_10(X) or log_2(X) returned in floating-point | register fp0. | -| ACCURACY and MONOTONICITY: The returned result is within 1.7 -| ulps in 64 significant bit, i.e. within 0.5003 ulp -| to 53 bits if the result is subsequently rounded -| to double precision. The result is provably monotonic +| ACCURACY and MONOTONICITY: The returned result is within 1.7 +| ulps in 64 significant bit, i.e. within 0.5003 ulp +| to 53 bits if the result is subsequently rounded +| to double precision. The result is provably monotonic | in double precision. | -| SPEED: Two timings are measured, both in the copy-back mode. -| The first one is measured when the function is invoked -| the first time (so the instructions and data are not -| in cache), and the second one is measured when the +| SPEED: Two timings are measured, both in the copy-back mode. +| The first one is measured when the function is invoked +| the first time (so the instructions and data are not +| in cache), and the second one is measured when the | function is reinvoked at the same input argument. | | ALGORITHM and IMPLEMENTATION NOTES: @@ -42,7 +42,7 @@ | 2.2 Return ans := Y * INV_L10. | | -| slog10: +| slog10: | | Step 0. If X < 0, create a NaN and raise the invalid operation | flag. Otherwise, save FPCR in D1; set FpCR to default. @@ -96,15 +96,15 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package |section 8 - |xref t_frcinx + |xref t_frcinx |xref t_operr |xref slogn |xref slognd diff -Nru a/arch/m68k/fpsp040/slogn.S b/arch/m68k/fpsp040/slogn.S --- a/arch/m68k/fpsp040/slogn.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/slogn.S Tue May 18 23:38:07 2004 @@ -13,11 +13,11 @@ | | Accuracy and Monotonicity: The returned result is within 2 ulps in | 64 significant bit, i.e. within 0.5001 ulp to 53 bits if the -| result is subsequently rounded to double precision. The +| result is subsequently rounded to double precision. The | result is provably monotonic in double precision. | -| Speed: The program slogn takes approximately 190 cycles for input -| argument X such that |X-1| >= 1/16, which is the usual +| Speed: The program slogn takes approximately 190 cycles for input +| argument X such that |X-1| >= 1/16, which is the usual | situation. For those arguments, slognp1 takes approximately | 210 cycles. For the less common arguments, the program will | run no worse than 10% slower. @@ -45,26 +45,26 @@ | Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done in Step 2 | of the algorithm for LOGN and compute log(1+X) as | k*log(2) + log(F) + poly where poly approximates log(1+u), -| u = (Y-F)/F. +| u = (Y-F)/F. | | Implementation Notes: | Note 1. There are 64 different possible values for F, thus 64 log(F)'s -| need to be tabulated. Moreover, the values of 1/F are also +| need to be tabulated. Moreover, the values of 1/F are also | tabulated so that the division in (Y-F)/F can be performed by a | multiplication. | | Note 2. In Step 2 of lognp1, in order to preserved accuracy, the value -| Y-F has to be calculated carefully when 1/2 <= X < 3/2. +| Y-F has to be calculated carefully when 1/2 <= X < 3/2. | | Note 3. To fully exploit the pipeline, polynomials are usually separated | into two parts evaluated independently before being added up. -| +| | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |slogn idnt 2,1 | Motorola 040 Floating Point Software Package @@ -262,7 +262,7 @@ |----the value TWOTO100 is no longer needed. |----Note that this code assumes the denormalized input is NON-ZERO. - moveml %d2-%d7,-(%a7) | ...save some registers + moveml %d2-%d7,-(%a7) | ...save some registers movel #0x00000000,%d3 | ...D3 is exponent of smallest norm. # movel 4(%a0),%d4 movel 8(%a0),%d5 | ...(D4,D5) is (Hi_X,Lo_X) @@ -347,14 +347,14 @@ |--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING |--LOG(1+U) CAN BE VERY EFFICIENT. |--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO -|--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. +|--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. |--GET K, Y, F, AND ADDRESS OF 1/F. asrl #8,%d0 asrl #8,%d0 | ...SHIFTED 16 BITS, BIASED EXPO. OF X - subil #0x3FFF,%d0 | ...THIS IS K + subil #0x3FFF,%d0 | ...THIS IS K addl ADJK(%a6),%d0 | ...ADJUST K, ORIGINAL INPUT MAY BE DENORM. - lea LOGTBL,%a0 | ...BASE ADDRESS OF 1/F AND LOG(F) + lea LOGTBL,%a0 | ...BASE ADDRESS OF 1/F AND LOG(F) fmovel %d0,%fp1 | ...CONVERT K TO FLOATING-POINT FORMAT |--WHILE THE CONVERSION IS GOING ON, WE GET F AND ADDRESS OF 1/F @@ -363,7 +363,7 @@ andil #0xFE000000,FFRAC(%a6) | ...FIRST 7 BITS OF Y oril #0x01000000,FFRAC(%a6) | ...GET F: ATTACH A 1 AT THE EIGHTH BIT movel FFRAC(%a6),%d0 | ...READY TO GET ADDRESS OF 1/F - andil #0x7E000000,%d0 + andil #0x7E000000,%d0 asrl #8,%d0 asrl #8,%d0 asrl #4,%d0 | ...SHIFTED 20, D0 IS THE DISPLACEMENT @@ -390,7 +390,7 @@ |--[U + V*(A1+V*(A3+V*A5))] + [U*V*(A2+V*(A4+V*A6))] fmovex %fp2,%fp3 - fmovex %fp2,%fp1 + fmovex %fp2,%fp1 fmuld LOGA6,%fp1 | ...V*A6 fmuld LOGA5,%fp2 | ...V*A5 @@ -440,7 +440,7 @@ fmovex %fp1,%fp0 fmulx %fp0,%fp0 | ...FP0 IS V fmovex %fp1,SAVEU(%a6) | ...STORE U IN MEMORY, FREE FP1 - fmovex %fp0,%fp1 + fmovex %fp0,%fp1 fmulx %fp1,%fp1 | ...FP1 IS W fmoved LOGB5,%fp3 @@ -465,7 +465,7 @@ fmulx %fp1,%fp0 | ...U*V*( [B1+W*(B3+W*B5)] + [V*(B2+W*B4)] ) fmovel %d1,%fpcr - faddx SAVEU(%a6),%fp0 + faddx SAVEU(%a6),%fp0 bra t_frcinx rts @@ -549,7 +549,7 @@ asrl #8,%d0 asrl #4,%d0 | ...D0 CONTAINS DISPLACEMENT FOR 1/F faddx %fp1,%fp1 | ...GET 2Z - fmovemx %fp2-%fp2/%fp3,-(%sp) | ...SAVE FP2 + fmovemx %fp2-%fp2/%fp3,-(%sp) | ...SAVE FP2 faddx %fp1,%fp0 | ...FP0 IS Y-F = (2-F)+2Z lea LOGTBL,%a0 | ...A0 IS ADDRESS OF 1/F addal %d0,%a0 @@ -569,7 +569,7 @@ faddx %fp1,%fp0 | ...FP0 IS Y-F fmovemx %fp2-%fp2/%fp3,-(%sp) | ...FP2 SAVED lea LOGTBL,%a0 - addal %d0,%a0 | ...A0 IS ADDRESS OF 1/F + addal %d0,%a0 | ...A0 IS ADDRESS OF 1/F fmoves zero,%fp1 | ...FP1 IS K = 0 bra LP1CONT1 diff -Nru a/arch/m68k/fpsp040/smovecr.S b/arch/m68k/fpsp040/smovecr.S --- a/arch/m68k/fpsp040/smovecr.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/smovecr.S Tue May 18 23:38:09 2004 @@ -15,8 +15,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package @@ -39,7 +39,7 @@ FZERO: .long 00000000 | -| FMOVECR +| FMOVECR | .global smovcr smovcr: @@ -55,9 +55,9 @@ cmpib #0x0e,%d0 |check range $0b - $0e bles SM_TBL |valid constants in this range cmpib #0x2f,%d0 |check range $10 - $2f - bles Z_VAL |if in this range, return zero + bles Z_VAL |if in this range, return zero cmpib #0x3f,%d0 |check range $30 - $3f - ble BG_TBL |valid constants in this range + ble BG_TBL |valid constants in this range Z_VAL: fmoves FZERO,%fp0 rts @@ -149,7 +149,7 @@ lea FP_SCR1(%a6),%a0 btstb #sign_bit,LOCAL_EX(%a0) sne LOCAL_SGN(%a0) |convert to internal ext. format - + bsr round |go round the mantissa bfclr LOCAL_SGN(%a0){#0:#8} |convert back to IEEE ext format diff -Nru a/arch/m68k/fpsp040/srem_mod.S b/arch/m68k/fpsp040/srem_mod.S --- a/arch/m68k/fpsp040/srem_mod.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/srem_mod.S Tue May 18 23:38:05 2004 @@ -21,7 +21,7 @@ | --------- | | Step 1. Save and strip signs of X and Y: signX := sign(X), -| signY := sign(Y), X := |X|, Y := |Y|, +| signY := sign(Y), X := |X|, Y := |Y|, | signQ := signX EOR signY. Record whether MOD or REM | is requested. | @@ -41,7 +41,7 @@ | | Step 4. At this point, R = X - QY = MOD(X,Y). Set | Last_Subtract := false (used in Step 7 below). If -| MOD is requested, go to Step 6. +| MOD is requested, go to Step 6. | | Step 5. R = MOD(X,Y), but REM(X,Y) is requested. | 5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to @@ -61,13 +61,13 @@ | X = 2^(j)*(Q+1)Y. set Q := 2^(j)*(Q+1), | R := 0. Return signQ, last 7 bits of Q, and R. | -| - +| + | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -362,10 +362,10 @@ |..Get Q | Get_Q: - clrl %d6 + clrl %d6 movew SignQ(%a6),%d6 | ...D6 is sign(Q) movel #8,%d7 - lsrl %d7,%d6 + lsrl %d7,%d6 andil #0x0000007F,%d3 | ...7 bits of Q orl %d6,%d3 | ...sign and bits of Q swap %d3 @@ -391,7 +391,7 @@ Rem_is_0: |..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1) addql #1,%d3 - cmpil #8,%d0 | ...D0 is j + cmpil #8,%d0 | ...D0 is j bges Q_Big lsll %d0,%d3 diff -Nru a/arch/m68k/fpsp040/ssin.S b/arch/m68k/fpsp040/ssin.S --- a/arch/m68k/fpsp040/ssin.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/fpsp040/ssin.S Tue May 18 23:38:07 2004 @@ -83,8 +83,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SSIN idnt 2,1 | Motorola 040 Floating Point Software Package @@ -204,7 +204,7 @@ |--HIDE THE NEXT THREE INSTRUCTIONS lea PITBL+0x200,%a1 | ...TABLE OF N*PI/2, N = -32,...,32 - + |--FP1 IS NOW READY fmovel %fp1,N(%a6) | ...CONVERT TO INTEGER @@ -273,7 +273,7 @@ faddx %fp2,%fp1 | ...[A1+T(A3+T(A5+TA7))]+[S(A2+T(A4+TA6))] |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADVANTAGE OF HIDING |--FP2 RELEASED, RESTORE NOW AND TAKE FULL ADVANTAGE OF HIDING - + fmulx %fp1,%fp0 | ...SIN(R')-R' |--FP1 RELEASED. @@ -335,7 +335,7 @@ fmulx %fp2,%fp0 | ...S(B2+T(B4+T(B6+TB8))) |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADVANTAGE OF HIDING |--FP2 RELEASED. - + faddx %fp1,%fp0 |--FP1 RELEASED @@ -352,7 +352,7 @@ |--IF |X| < 2**(-40), RETURN X OR 1. cmpil #0x3FFF8000,%d0 bgts REDUCEX - + SINSM: movel ADJN(%a6),%d0 @@ -466,7 +466,7 @@ movew %d2,FP_SCR2(%a6) clrw FP_SCR2+2(%a6) movel #0xC90FDAA2,FP_SCR2+4(%a6) - clrl FP_SCR2+8(%a6) | ...FP_SCR2 is 2**(L) * Piby2_1 + clrl FP_SCR2+8(%a6) | ...FP_SCR2 is 2**(L) * Piby2_1 |--FP2 IS READY fsubs TWOTO63(%a6),%fp2 | ...FP2 is N @@ -514,7 +514,7 @@ movel (%a7)+,%d2 fmovemx (%a7)+,%fp2-%fp5 - + movel ADJN(%a6),%d0 cmpil #4,%d0 @@ -559,7 +559,7 @@ |--HIDE THE NEXT THREE INSTRUCTIONS lea PITBL+0x200,%a1 | ...TABLE OF N*PI/2, N = -32,...,32 - + |--FP1 IS NOW READY fmovel %fp1,N(%a6) | ...CONVERT TO INTEGER @@ -577,7 +577,7 @@ |--HIDE THE NEXT TWO movel N(%a6),%d0 rorl #1,%d0 - + cmpil #0,%d0 | ...D0 < 0 IFF N IS ODD bge NEVEN @@ -641,7 +641,7 @@ fmulx %fp0,%fp1 | ...S(A1+...) fmulx %fp2,%fp0 | ...S(B2+...) - + fmulx RPRIME(%a6),%fp1 | ...R'S(A1+...) fadds COSB1,%fp0 | ...B1+S(B2...) @@ -709,7 +709,7 @@ fmulx %fp0,%fp1 | ...S(B2+...) fmulx %fp2,%fp0 | ...s(a1+...) - + fadds COSB1,%fp1 | ...B1+S(B2...) fmulx RPRIME(%a6),%fp0 | ...R'S(A1+...) @@ -728,7 +728,7 @@ SCBORS: cmpil #0x3FFF8000,%d0 bgt REDUCEX - + SCSM: movew #0x0000,XDCARE(%a6) diff -Nru a/arch/m68k/fpsp040/ssinh.S b/arch/m68k/fpsp040/ssinh.S --- a/arch/m68k/fpsp040/ssinh.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/ssinh.S Tue May 18 23:38:08 2004 @@ -5,7 +5,7 @@ | an input argument; sSinhd does the same except for denormalized | input. | -| Input: Double-extended number X in location pointed to +| Input: Double-extended number X in location pointed to | by address register a0. | | Output: The value sinh(X) returned in floating-point register Fp0. @@ -49,8 +49,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |SSINH idnt 2,1 | Motorola 040 Floating Point Software Package @@ -91,7 +91,7 @@ moveml %a1/%d1,-(%sp) fmovemx %fp0-%fp0,(%a0) clrl %d1 - bsr setoxm1 | ...FP0 IS Z = EXPM1(Y) + bsr setoxm1 | ...FP0 IS Z = EXPM1(Y) fmovel #0,%fpcr moveml (%sp)+,%a1/%d1 diff -Nru a/arch/m68k/fpsp040/stan.S b/arch/m68k/fpsp040/stan.S --- a/arch/m68k/fpsp040/stan.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/stan.S Tue May 18 23:38:05 2004 @@ -50,8 +50,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |STAN idnt 2,1 | Motorola 040 Floating Point Software Package @@ -213,34 +213,34 @@ blt NODD fmovex %fp0,%fp1 - fmulx %fp1,%fp1 | ...S = R*R + fmulx %fp1,%fp1 | ...S = R*R fmoved TANQ4,%fp3 fmoved TANP3,%fp2 - fmulx %fp1,%fp3 | ...SQ4 - fmulx %fp1,%fp2 | ...SP3 + fmulx %fp1,%fp3 | ...SQ4 + fmulx %fp1,%fp2 | ...SP3 faddd TANQ3,%fp3 | ...Q3+SQ4 faddx TANP2,%fp2 | ...P2+SP3 - fmulx %fp1,%fp3 | ...S(Q3+SQ4) - fmulx %fp1,%fp2 | ...S(P2+SP3) + fmulx %fp1,%fp3 | ...S(Q3+SQ4) + fmulx %fp1,%fp2 | ...S(P2+SP3) faddx TANQ2,%fp3 | ...Q2+S(Q3+SQ4) faddx TANP1,%fp2 | ...P1+S(P2+SP3) - fmulx %fp1,%fp3 | ...S(Q2+S(Q3+SQ4)) - fmulx %fp1,%fp2 | ...S(P1+S(P2+SP3)) + fmulx %fp1,%fp3 | ...S(Q2+S(Q3+SQ4)) + fmulx %fp1,%fp2 | ...S(P1+S(P2+SP3)) faddx TANQ1,%fp3 | ...Q1+S(Q2+S(Q3+SQ4)) - fmulx %fp0,%fp2 | ...RS(P1+S(P2+SP3)) + fmulx %fp0,%fp2 | ...RS(P1+S(P2+SP3)) - fmulx %fp3,%fp1 | ...S(Q1+S(Q2+S(Q3+SQ4))) - + fmulx %fp3,%fp1 | ...S(Q1+S(Q2+S(Q3+SQ4))) + + + faddx %fp2,%fp0 | ...R+RS(P1+S(P2+SP3)) - faddx %fp2,%fp0 | ...R+RS(P1+S(P2+SP3)) - fadds #0x3F800000,%fp1 | ...1+S(Q1+...) @@ -251,40 +251,40 @@ NODD: fmovex %fp0,%fp1 - fmulx %fp0,%fp0 | ...S = R*R + fmulx %fp0,%fp0 | ...S = R*R fmoved TANQ4,%fp3 fmoved TANP3,%fp2 - fmulx %fp0,%fp3 | ...SQ4 - fmulx %fp0,%fp2 | ...SP3 + fmulx %fp0,%fp3 | ...SQ4 + fmulx %fp0,%fp2 | ...SP3 faddd TANQ3,%fp3 | ...Q3+SQ4 faddx TANP2,%fp2 | ...P2+SP3 - fmulx %fp0,%fp3 | ...S(Q3+SQ4) - fmulx %fp0,%fp2 | ...S(P2+SP3) + fmulx %fp0,%fp3 | ...S(Q3+SQ4) + fmulx %fp0,%fp2 | ...S(P2+SP3) faddx TANQ2,%fp3 | ...Q2+S(Q3+SQ4) faddx TANP1,%fp2 | ...P1+S(P2+SP3) - fmulx %fp0,%fp3 | ...S(Q2+S(Q3+SQ4)) - fmulx %fp0,%fp2 | ...S(P1+S(P2+SP3)) + fmulx %fp0,%fp3 | ...S(Q2+S(Q3+SQ4)) + fmulx %fp0,%fp2 | ...S(P1+S(P2+SP3)) faddx TANQ1,%fp3 | ...Q1+S(Q2+S(Q3+SQ4)) - fmulx %fp1,%fp2 | ...RS(P1+S(P2+SP3)) + fmulx %fp1,%fp2 | ...RS(P1+S(P2+SP3)) + + fmulx %fp3,%fp0 | ...S(Q1+S(Q2+S(Q3+SQ4))) - fmulx %fp3,%fp0 | ...S(Q1+S(Q2+S(Q3+SQ4))) - - faddx %fp2,%fp1 | ...R+RS(P1+S(P2+SP3)) + faddx %fp2,%fp1 | ...R+RS(P1+S(P2+SP3)) fadds #0x3F800000,%fp0 | ...1+S(Q1+...) - + fmovex %fp1,-(%sp) eoril #0x80000000,(%sp) - fmovel %d1,%fpcr |restore users exceptions + fmovel %d1,%fpcr |restore users exceptions fdivx (%sp)+,%fp0 |last inst - possible exception set bra t_frcinx @@ -397,7 +397,7 @@ movew %d2,FP_SCR2(%a6) clrw FP_SCR2+2(%a6) movel #0xC90FDAA2,FP_SCR2+4(%a6) - clrl FP_SCR2+8(%a6) | ...FP_SCR2 is 2**(L) * Piby2_1 + clrl FP_SCR2+8(%a6) | ...FP_SCR2 is 2**(L) * Piby2_1 |--FP2 IS READY fsubs TWOTO63(%a6),%fp2 | ...FP2 is N @@ -445,7 +445,7 @@ movel (%a7)+,%d2 fmovemx (%a7)+,%fp2-%fp5 - + movel N(%a6),%d0 rorl #1,%d0 diff -Nru a/arch/m68k/fpsp040/stanh.S b/arch/m68k/fpsp040/stanh.S --- a/arch/m68k/fpsp040/stanh.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/stanh.S Tue May 18 23:38:06 2004 @@ -49,14 +49,14 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |STANH idnt 2,1 | Motorola 040 Floating Point Software Package |section 8 - + #include "fpsp.h" .set X,FP_SCR5 @@ -106,7 +106,7 @@ movel %d1,-(%a7) clrl %d1 fmovemx %fp0-%fp0,(%a0) - bsr setoxm1 | ...FP0 IS Z = EXPM1(Y) + bsr setoxm1 | ...FP0 IS Z = EXPM1(Y) movel (%a7)+,%d1 fmovex %fp0,%fp1 @@ -149,7 +149,7 @@ eorl #0xC0000000,%d0 | ...-SIGN(X)*2 fmoves %d0,%fp1 | ...-SIGN(X)*2 IN SGL FMT - fdivx %fp0,%fp1 | ...-SIGN(X)2 / [EXP(Y)+1 ] + fdivx %fp0,%fp1 | ...-SIGN(X)2 / [EXP(Y)+1 ] movel SGN(%a6),%d0 orl #0x3F800000,%d0 | ...SGN diff -Nru a/arch/m68k/fpsp040/sto_res.S b/arch/m68k/fpsp040/sto_res.S --- a/arch/m68k/fpsp040/sto_res.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/sto_res.S Tue May 18 23:38:08 2004 @@ -5,9 +5,9 @@ | Library functions return result in fp0. If fp0 is not the | users destination register then fp0 is moved to the | correct floating-point destination register. fp0 and fp1 -| are then restored to the original contents. +| are then restored to the original contents. | -| Input: result in fp0,fp1 +| Input: result in fp0,fp1 | | d2 & a0 should be kept unmodified | @@ -19,8 +19,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/fpsp040/stwotox.S b/arch/m68k/fpsp040/stwotox.S --- a/arch/m68k/fpsp040/stwotox.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/stwotox.S Tue May 18 23:38:06 2004 @@ -76,8 +76,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package @@ -222,17 +222,17 @@ cmpil #0x400D80C0,%d0 | ...|X| > 16480? bles TWOMAIN bra EXPBORS - + TWOMAIN: |--USUAL CASE, 2^(-70) <= |X| <= 16480 fmovex %fp0,%fp1 fmuls #0x42800000,%fp1 | ...64 * X - + fmovel %fp1,N(%a6) | ...N = ROUND-TO-INT(64 X) movel %d2,-(%sp) - lea EXPTBL,%a1 | ...LOAD ADDRESS OF TABLE OF 2^(J/64) + lea EXPTBL,%a1 | ...LOAD ADDRESS OF TABLE OF 2^(J/64) fmovel N(%a6),%fp1 | ...N --> FLOATING FMT movel N(%a6),%d0 movel %d0,%d2 @@ -244,7 +244,7 @@ asrl #1,%d0 | ...D0 IS M subl %d0,%d2 | ...d2 IS M', N = 64(M+M') + J addil #0x3FFF,%d2 - movew %d2,ADJFACT(%a6) | ...ADJFACT IS 2^(M') + movew %d2,ADJFACT(%a6) | ...ADJFACT IS 2^(M') movel (%sp)+,%d2 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64), |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |M| <= 16140 BY DESIGN. @@ -258,13 +258,13 @@ movew (%a1)+,FACT2(%a6) clrw FACT2+2(%a6) - fsubx %fp1,%fp0 | ...X - (1/64)*INT(64 X) + fsubx %fp1,%fp0 | ...X - (1/64)*INT(64 X) movew (%a1)+,FACT2HI(%a6) clrw FACT2HI+2(%a6) clrl FACT2LOW(%a6) addw %d0,FACT1(%a6) - + fmulx LOG2,%fp0 | ...FP0 IS R addw %d0,FACT2(%a6) @@ -332,10 +332,10 @@ fmovex %fp0,%fp1 fmuld L2TEN64,%fp1 | ...X*64*LOG10/LOG2 - + fmovel %fp1,N(%a6) | ...N=INT(X*64*LOG10/LOG2) movel %d2,-(%sp) - lea EXPTBL,%a1 | ...LOAD ADDRESS OF TABLE OF 2^(J/64) + lea EXPTBL,%a1 | ...LOAD ADDRESS OF TABLE OF 2^(J/64) fmovel N(%a6),%fp1 | ...N --> FLOATING FMT movel N(%a6),%d0 movel %d0,%d2 @@ -347,7 +347,7 @@ asrl #1,%d0 | ...D0 IS M subl %d0,%d2 | ...d2 IS M', N = 64(M+M') + J addil #0x3FFF,%d2 - movew %d2,ADJFACT(%a6) | ...ADJFACT IS 2^(M') + movew %d2,ADJFACT(%a6) | ...ADJFACT IS 2^(M') movel (%sp)+,%d2 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64), @@ -375,7 +375,7 @@ clrl FACT2LOW(%a6) fmulx LOG10,%fp0 | ...FP0 IS R - + addw %d0,FACT1(%a6) addw %d0,FACT2(%a6) @@ -405,9 +405,9 @@ fmulx %fp1,%fp2 | ...FP2 IS S*(A1+S*(A3+S*A5)) faddx %fp3,%fp0 | ...FP0 IS R+R*S*(A2+S*A4) - + faddx %fp2,%fp0 | ...FP0 IS EXP(R) - 1 - + |--FINAL RECONSTRUCTION PROCESS |--EXP(X) = 2^M*2^(J/64) + 2^M*2^(J/64)*(EXP(R)-1) - (1 OR 0) diff -Nru a/arch/m68k/fpsp040/tbldo.S b/arch/m68k/fpsp040/tbldo.S --- a/arch/m68k/fpsp040/tbldo.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/tbldo.S Tue May 18 23:38:08 2004 @@ -6,19 +6,19 @@ | of indirection in do_func for monadic | functions. Dyadic functions require two | levels, and the tables are still contained -| in do_func. The table is arranged for +| in do_func. The table is arranged for | index with a 10-bit index, with the first | 7 bits the opcode, and the remaining 3 | the stag. For dyadic functions, all | valid addresses are to the generic entry -| point. +| point. | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package @@ -57,7 +57,7 @@ .long smovcr |$00-7 fmovecr all .long sint |$01-0 fint norm - .long szero |$01-1 fint zero + .long szero |$01-1 fint zero .long sinf |$01-2 fint inf .long src_nan |$01-3 fint nan .long sintd |$01-4 fint denorm inx diff -Nru a/arch/m68k/fpsp040/util.S b/arch/m68k/fpsp040/util.S --- a/arch/m68k/fpsp040/util.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/util.S Tue May 18 23:38:08 2004 @@ -4,20 +4,20 @@ | This file contains routines used by other programs. | | ovf_res: used by overflow to force the correct -| result. ovf_r_k, ovf_r_x2, ovf_r_x3 are +| result. ovf_r_k, ovf_r_x2, ovf_r_x3 are | derivatives of this routine. | get_fline: get user's opcode word | g_dfmtou: returns the destination format. | g_opcls: returns the opclass of the float instruction. -| g_rndpr: returns the rounding precision. +| g_rndpr: returns the rounding precision. | reg_dest: write byte, word, or long data to Dn | | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. |UTIL idnt 2,1 | Motorola 040 Floating Point Software Package @@ -39,13 +39,13 @@ | are unnecessary as ovf_res always returns the sign separately from | the exponent. | ;+inf -EXT_PINF: .long 0x7fff0000,0x00000000,0x00000000,0x00000000 +EXT_PINF: .long 0x7fff0000,0x00000000,0x00000000,0x00000000 | ;largest +ext -EXT_PLRG: .long 0x7ffe0000,0xffffffff,0xffffffff,0x00000000 +EXT_PLRG: .long 0x7ffe0000,0xffffffff,0xffffffff,0x00000000 | ;largest magnitude +sgl in ext -SGL_PLRG: .long 0x407e0000,0xffffff00,0x00000000,0x00000000 +SGL_PLRG: .long 0x407e0000,0xffffff00,0x00000000,0x00000000 | ;largest magnitude +dbl in ext -DBL_PLRG: .long 0x43fe0000,0xffffffff,0xfffff800,0x00000000 +DBL_PLRG: .long 0x43fe0000,0xffffffff,0xfffff800,0x00000000 | ;largest -ext tblovfl: @@ -70,7 +70,7 @@ | | ovf_r_k --- overflow result calculation | -| This entry point is used by kernel_ex. +| This entry point is used by kernel_ex. | | This forces the destination precision to be extended | @@ -79,7 +79,7 @@ | .global ovf_r_k ovf_r_k: - lea ETEMP(%a6),%a0 |a0 points to source operand + lea ETEMP(%a6),%a0 |a0 points to source operand bclrb #sign_bit,ETEMP_EX(%a6) sne ETEMP_SGN(%a6) |convert to internal IEEE format @@ -112,10 +112,10 @@ beql ovff_dbl |force precision is double movew CMDREG3B(%a6),%d0 |get the command word again andil #0x7f,%d0 |clear all except operation - cmpil #0x33,%d0 + cmpil #0x33,%d0 beql ovf_fsgl |fsglmul or fsgldiv cmpil #0x30,%d0 - beql ovf_fsgl + beql ovf_fsgl bra ovf_fpcr |instruction is none of the above | ;use FPCR ovf_e1_exc: @@ -129,10 +129,10 @@ andil #0x0000007f,%d0 |clear all except the op code cmpil #0x00000027,%d0 beql ovf_fsgl |fsglmul - cmpil #0x00000024,%d0 + cmpil #0x00000024,%d0 beql ovf_fsgl |fsgldiv bra ovf_fpcr |none of the above, use FPCR -| +| | | Inst is either fsgldiv or fsglmul. Force extended precision. | @@ -152,7 +152,7 @@ ovf_fpcr: bfextu FPCR_MODE(%a6){#0:#2},%d0 |set round precision bra ovf_res - + | | | ovf_r_x3 --- overflow result calculation @@ -174,9 +174,9 @@ | ovf_res --- overflow result calculation | | Input: -| a0 points to operand in internal extended format +| a0 points to operand in internal extended format | Output: -| a0 points to result in internal extended format +| a0 points to result in internal extended format | .global ovf_res ovf_res: @@ -192,7 +192,7 @@ EXT_RN: leal EXT_PINF,%a1 |answer is +/- infinity bsetb #inf_bit,FPSR_CC(%a6) - bra set_sign |now go set the sign + bra set_sign |now go set the sign EXT_RZ: leal EXT_PLRG,%a1 |answer is +/- large number bra set_sign |now go set the sign @@ -312,10 +312,10 @@ movel (%a7)+,%d0 rts | -| g_rndpr --- put rounding precision in d0{1:0} -| +| g_rndpr --- put rounding precision in d0{1:0} +| | valid return codes are: -| 00 - extended +| 00 - extended | 01 - single | 10 - double | @@ -350,7 +350,7 @@ | For move out instructions (opclass 011) the destination format | is the same as the rounding precision. Pass results from g_dfmtou. | - bsr g_dfmtou + bsr g_dfmtou rts op_0x0: btstb #E3,E_BYTE(%a6) @@ -364,7 +364,7 @@ beql unff_dbl movew CMDREG3B(%a6),%d0 |get the command word again andil #0x7f,%d0 |clear all except operation - cmpil #0x33,%d0 + cmpil #0x33,%d0 beql unf_fsgl |fsglmul or fsgldiv cmpil #0x30,%d0 beql unf_fsgl |fsgldiv or fsglmul @@ -408,7 +408,7 @@ | Force extended | unf_fsgl: - movel #0,%d0 + movel #0,%d0 rts | | Get rounding precision set in FPCR{7:6}. @@ -436,7 +436,7 @@ | If E1, the format is from cmdreg1b{12:10} | If E3, the format is extended. | -| Dest. Fmt. +| Dest. Fmt. | extended 010 -> 00 | single 001 -> 01 | double 101 -> 10 @@ -468,26 +468,26 @@ | are unnecessary as unf_sub always returns the sign separately from | the exponent. | ;+zero -EXT_PZRO: .long 0x00000000,0x00000000,0x00000000,0x00000000 +EXT_PZRO: .long 0x00000000,0x00000000,0x00000000,0x00000000 | ;+zero -SGL_PZRO: .long 0x3f810000,0x00000000,0x00000000,0x00000000 +SGL_PZRO: .long 0x3f810000,0x00000000,0x00000000,0x00000000 | ;+zero -DBL_PZRO: .long 0x3c010000,0x00000000,0x00000000,0x00000000 +DBL_PZRO: .long 0x3c010000,0x00000000,0x00000000,0x00000000 | ;smallest +ext denorm -EXT_PSML: .long 0x00000000,0x00000000,0x00000001,0x00000000 +EXT_PSML: .long 0x00000000,0x00000000,0x00000001,0x00000000 | ;smallest +sgl denorm -SGL_PSML: .long 0x3f810000,0x00000100,0x00000000,0x00000000 +SGL_PSML: .long 0x3f810000,0x00000100,0x00000000,0x00000000 | ;smallest +dbl denorm -DBL_PSML: .long 0x3c010000,0x00000000,0x00000800,0x00000000 +DBL_PSML: .long 0x3c010000,0x00000000,0x00000800,0x00000000 | | UNF_SUB --- underflow result calculation | | Input: -| d0 contains round precision +| d0 contains round precision | a0 points to input operand in the internal extended format | | Output: -| a0 points to correct internal extended precision result. +| a0 points to correct internal extended precision result. | tblunf: @@ -522,7 +522,7 @@ uEXT_RN: leal EXT_PZRO,%a1 |answer is +/- zero bsetb #z_bit,FPSR_CC(%a6) - bra uset_sign |now go set the sign + bra uset_sign |now go set the sign uEXT_RZ: leal EXT_PZRO,%a1 |answer is +/- zero bsetb #z_bit,FPSR_CC(%a6) @@ -629,7 +629,7 @@ | | | Input: -| L_SCR1: Data +| L_SCR1: Data | d1: data size and dest register number formatted as: | | 32 5 4 3 2 1 0 diff -Nru a/arch/m68k/fpsp040/x_bsun.S b/arch/m68k/fpsp040/x_bsun.S --- a/arch/m68k/fpsp040/x_bsun.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/x_bsun.S Tue May 18 23:38:08 2004 @@ -13,8 +13,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/fpsp040/x_fline.S b/arch/m68k/fpsp040/x_fline.S --- a/arch/m68k/fpsp040/x_fline.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/x_fline.S Tue May 18 23:38:05 2004 @@ -13,8 +13,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -52,7 +52,7 @@ leal L_SCR1(%a6),%a1 |use L_SCR1 as scratch movel #4,%d0 addl #4,%a6 |to offset the sub.l #4,a7 above so that -| ;a6 can point correctly to the stack frame +| ;a6 can point correctly to the stack frame | ;before branching to mem_read bsrl mem_read subl #4,%a6 @@ -62,7 +62,7 @@ bne not_mvcr |exit if not bfextu %d0{#16:#6},%d1 cmpib #0x17,%d1 |check if it is an FMOVECR encoding - bne not_mvcr + bne not_mvcr | ;if an FMOVECR instruction, fix stack | ;and go to FPSP_UNIMP fix_stack: diff -Nru a/arch/m68k/fpsp040/x_operr.S b/arch/m68k/fpsp040/x_operr.S --- a/arch/m68k/fpsp040/x_operr.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/x_operr.S Tue May 18 23:38:08 2004 @@ -13,8 +13,8 @@ | the dest format is integer (b, w, l) and the operr is caused by | integer overflow, or the source op is inf, then the result stored is | garbage. -| There are three cases in which operr is incorrectly signaled on the -| 040. This occurs for move_out of format b, w, or l for the largest +| There are three cases in which operr is incorrectly signaled on the +| 040. This occurs for move_out of format b, w, or l for the largest | negative integer (-2^7 for b, -2^15 for w, -2^31 for l). | | On opclass = 011 fmove.(b,w,l) that causes a conversion @@ -36,15 +36,15 @@ | Note 2: For trap enabled 040 does the following: | If the inst is move_out, then same as Note 1. | If the inst is not move_out, the dest is not modified. -| The exceptional operand is not defined for integer overflow +| The exceptional operand is not defined for integer overflow | during a move_out. | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -77,7 +77,7 @@ beqs operr_end | -| If the destination size is B,W,or L, the operr must be +| If the destination size is B,W,or L, the operr must be | handled here. | movel CMDREG1B(%a6),%d0 @@ -90,9 +90,9 @@ beq operr_byte | -| The size is not B,W,or L, so the operr is handled by the +| The size is not B,W,or L, so the operr is handled by the | kernel handler. Set the operr bits and clean up, leaving -| only the integer exception frame on the stack, and the +| only the integer exception frame on the stack, and the | fpu in the original exceptional state. | operr_end: @@ -111,7 +111,7 @@ moveb STAG(%a6),%d0 |test stag for nan andib #0xe0,%d0 |clr all but tag cmpib #0x60,%d0 |check for nan - beq operr_nan + beq operr_nan cmpil #0x80000000,FPTEMP_LO(%a6) |test if ls lword is special bnes chklerr |if not equal, check for incorrect operr bsr check_upper |check if exp and ms mant are special @@ -158,7 +158,7 @@ moveb STAG(%a6),%d0 |test stag for nan andib #0xe0,%d0 |clr all but tag cmpib #0x60,%d0 |check for nan - beq operr_nan + beq operr_nan cmpil #0xffff8000,FPTEMP_LO(%a6) |test if ls lword is special bnes chkwerr |if not equal, check for incorrect operr bsr check_upper |check if exp and ms mant are special @@ -185,7 +185,7 @@ moveb STAG(%a6),%d0 |test stag for nan andib #0xe0,%d0 |clr all but tag cmpib #0x60,%d0 |check for nan - beqs operr_nan + beqs operr_nan cmpil #0xffffff80,FPTEMP_LO(%a6) |test if ls lword is special bnes chkberr |if not equal, check for incorrect operr bsr check_upper |check if exp and ms mant are special @@ -229,7 +229,7 @@ bclrb #inex2_bit,FPSR_EXCEPT(%a6) bclrb #ainex_bit,FPSR_AEXCEPT(%a6) fmovel #0,%FPSR - + tstw FPTEMP_EX(%a6) |check sign blts load_neg movel #0x7fffffff,%d0 @@ -280,7 +280,7 @@ bsrl mem_write rts | -| Check the exponent for $c000 and the upper 32 bits of the +| Check the exponent for $c000 and the upper 32 bits of the | mantissa for $ffffffff. If both are true, return d0 clr | and store the lower n bits of the least lword of FPTEMP | to d0 for write out. If not, it is a real operr, and set d0. diff -Nru a/arch/m68k/fpsp040/x_ovfl.S b/arch/m68k/fpsp040/x_ovfl.S --- a/arch/m68k/fpsp040/x_ovfl.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/fpsp040/x_ovfl.S Tue May 18 23:38:06 2004 @@ -8,7 +8,7 @@ | or when storing to memory, the contents of a floating-point | data register are too large to be represented in the | destination format. -| +| | Trap disabled results | | If the instruction is move_out, then garbage is stored in the @@ -35,8 +35,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -73,7 +73,7 @@ | if overflow traps not enabled check for inexact exception | btstb #ovfl_bit,FPCR_ENABLE(%a6) - beqs ck_inex + beqs ck_inex | btstb #E3,E_BYTE(%a6) beqs no_e3_1 @@ -120,7 +120,7 @@ frestore (%a7)+ unlk %a6 bral real_inex - + ovfl_exit: bclrb #E3,E_BYTE(%a6) |test and clear E3 bit beqs e1_set @@ -152,7 +152,7 @@ | ovf_adj: | -| Have a0 point to the correct operand. +| Have a0 point to the correct operand. | btstb #E3,E_BYTE(%a6) |test E3 bit beqs ovf_e1 @@ -175,10 +175,10 @@ | CCs are defined to be 'not affected' for the opclass3 instruction. | moveb FPSR_CC(%a6),L_SCR1(%a6) - bsrl ovf_r_x3 |returns a0 pointing to result + bsrl ovf_r_x3 |returns a0 pointing to result moveb L_SCR1(%a6),FPSR_CC(%a6) bral store |stores to memory or register - + not_opc011: bsrl ovf_r_x2 |returns a0 pointing to result bral store |stores to memory or register diff -Nru a/arch/m68k/fpsp040/x_snan.S b/arch/m68k/fpsp040/x_snan.S --- a/arch/m68k/fpsp040/x_snan.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/x_snan.S Tue May 18 23:38:09 2004 @@ -14,7 +14,7 @@ | of the mantissa are sent to the integer unit). | | For trap enabled the 040 does the following: -| If the inst is move_out, then the results are the same as for trap +| If the inst is move_out, then the results are the same as for trap | disabled with the exception posted. If the instruction is not move_ | out, the dest. is not modified, and the exception is posted. | @@ -22,8 +22,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -139,7 +139,7 @@ bral fpsp_done | -| Move_out +| Move_out | move_out: movel EXC_EA(%a6),%a0 |get from exc frame @@ -147,18 +147,18 @@ bfextu CMDREG1B(%a6){#3:#3},%d0 |move rx field to d0{2:0} cmpil #0,%d0 |check for long beqs sto_long |branch if move_out long - + cmpil #4,%d0 |check for word beqs sto_word |branch if move_out word - + cmpil #6,%d0 |check for byte beqs sto_byte |branch if move_out byte - + | | Not byte, word or long | rts -| +| | Get the 32 most significant bits of etemp mantissa | sto_long: @@ -167,13 +167,13 @@ | | Set signalling nan bit | - bsetl #30,%d1 + bsetl #30,%d1 | | Store to the users destination address | tstl %a0 |check if is 0 beqs wrt_dn |destination is a data register - + movel %d1,-(%a7) |move the snan onto the stack movel %a0,%a1 |load dest addr into a1 movel %a7,%a0 |load src addr of snan into a0 @@ -189,7 +189,7 @@ | | Set signalling nan bit | - bsetl #30,%d1 + bsetl #30,%d1 | | Store to the users destination address | @@ -211,7 +211,7 @@ | | Set signalling nan bit | - bsetl #30,%d1 + bsetl #30,%d1 | | Store to the users destination address | @@ -253,7 +253,7 @@ | Check if it is a src nan or dst nan | not_out: - movel DTAG(%a6),%d0 + movel DTAG(%a6),%d0 bfextu %d0{#0:#3},%d0 |isolate dtag in lsbs cmpib #3,%d0 |check for nan in destination diff -Nru a/arch/m68k/fpsp040/x_store.S b/arch/m68k/fpsp040/x_store.S --- a/arch/m68k/fpsp040/x_store.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/x_store.S Tue May 18 23:38:09 2004 @@ -11,8 +11,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -54,7 +54,7 @@ | in the USER_FPn variable on the stack because all exception | handlers restore fp0-fp3 from there. | - cmpb #0x80,%d0 + cmpb #0x80,%d0 bnes not_fp0 fmovemx %fp0-%fp0,USER_FP0(%a6) rts @@ -115,18 +115,18 @@ | get rid of ext integer bit | dbl_mant = ext_mant{62:12} | -| --------------- --------------- --------------- +| --------------- --------------- --------------- | extended -> |s| exp | |1| ms mant | | ls mant | -| --------------- --------------- --------------- -| 95 64 63 62 32 31 11 0 +| --------------- --------------- --------------- +| 95 64 63 62 32 31 11 0 | | | | | | | | | -| v v -| --------------- --------------- -| double -> |s|exp| mant | | mant | -| --------------- --------------- -| 63 51 32 31 0 +| v v +| --------------- --------------- +| double -> |s|exp| mant | | mant | +| --------------- --------------- +| 63 51 32 31 0 | dest_dbl: clrl %d0 |clear d0 @@ -137,7 +137,7 @@ addw #0x3ff,%d0 |add double precision bias swap %d0 |d0 now in upper word lsll #4,%d0 |d0 now in proper place for dbl prec exp - tstb LOCAL_SGN(%a1) + tstb LOCAL_SGN(%a1) beqs get_mant |if positive, go process mantissa bsetl #31,%d0 |if negative, put in sign information | ; before continuing @@ -186,18 +186,18 @@ | get rid of ext integer bit | sgl_mant = ext_mant{62:12} | -| --------------- --------------- --------------- +| --------------- --------------- --------------- | extended -> |s| exp | |1| ms mant | | ls mant | -| --------------- --------------- --------------- -| 95 64 63 62 40 32 31 12 0 +| --------------- --------------- --------------- +| 95 64 63 62 40 32 31 12 0 | | | | | | | | | -| v v -| --------------- -| single -> |s|exp| mant | -| --------------- -| 31 22 0 +| v v +| --------------- +| single -> |s|exp| mant | +| --------------- +| 31 22 0 | dest_sgl: clrl %d0 @@ -208,7 +208,7 @@ addw #0x7f,%d0 |add single precision bias swap %d0 |put exp in upper word of d0 lsll #7,%d0 |shift it into single exp bits - tstb LOCAL_SGN(%a1) + tstb LOCAL_SGN(%a1) beqs get_sman |if positive, continue bsetl #31,%d0 |if negative, put in sign first bras get_sman |get mantissa @@ -240,7 +240,7 @@ orl #0x10,%d1 |reg_dest wants size added to reg# bral reg_dest |size is X, rts in reg_dest will | ;return to caller of dest_sgl - + dest_ext: tstb LOCAL_SGN(%a1) |put back sign into exponent word beqs dstx_cont diff -Nru a/arch/m68k/fpsp040/x_unfl.S b/arch/m68k/fpsp040/x_unfl.S --- a/arch/m68k/fpsp040/x_unfl.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/fpsp040/x_unfl.S Tue May 18 23:38:05 2004 @@ -4,25 +4,25 @@ | fpsp_unfl --- FPSP handler for underflow exception | | Trap disabled results -| For 881/2 compatibility, sw must denormalize the intermediate -| result, then store the result. Denormalization is accomplished -| by taking the intermediate result (which is always normalized) and -| shifting the mantissa right while incrementing the exponent until -| it is equal to the denormalized exponent for the destination -| format. After denormalization, the result is rounded to the +| For 881/2 compatibility, sw must denormalize the intermediate +| result, then store the result. Denormalization is accomplished +| by taking the intermediate result (which is always normalized) and +| shifting the mantissa right while incrementing the exponent until +| it is equal to the denormalized exponent for the destination +| format. After denormalization, the result is rounded to the | destination format. -| +| | Trap enabled results -| All trap disabled code applies. In addition the exceptional -| operand needs to made available to the user with a bias of $6000 +| All trap disabled code applies. In addition the exceptional +| operand needs to made available to the user with a bias of $6000 | added to the exponent. | | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package @@ -91,7 +91,7 @@ | | Inexact enabled and reported, and we must take an inexact exception -| +| take_inex: btstb #E3,E_BYTE(%a6) beqs no_e3_2 @@ -145,7 +145,7 @@ | ;1=sgl, 2=dbl | ;we need the RND_PREC in the | ;upper word for round - movew #0,-(%a7) + movew #0,-(%a7) movew %d0,-(%a7) |copy RND_PREC to stack | | @@ -199,7 +199,7 @@ | must not corrupt a0 and d0. | | -| Perform Round +| Perform Round | Input: a0 points to input operand | d0{31:29} has guard, round, sticky | d1{01:00} has rounding mode @@ -222,7 +222,7 @@ bsrl g_dfmtou tstb %d0 beqs ext_opc011 |If extended, do not subtract -| ;If destination format is sgl/dbl, +| ;If destination format is sgl/dbl, tstb LOCAL_HI(%a0) |If rounded result is normal,don't | ;subtract bmis ext_opc011 @@ -252,12 +252,12 @@ bnes ck_sgn bsetb #z_bit,FPSR_CC(%a6) |set condition codes if zero ck_sgn: - btstb #sign_bit,LOCAL_EX(%a0) |check the sign bit + btstb #sign_bit,LOCAL_EX(%a0) |check the sign bit beqs unf_done bsetb #neg_bit,FPSR_CC(%a6) | -| Finish. +| Finish. | unf_done: btstb #inex2_bit,FPSR_EXCEPT(%a6) diff -Nru a/arch/m68k/fpsp040/x_unimp.S b/arch/m68k/fpsp040/x_unimp.S --- a/arch/m68k/fpsp040/x_unimp.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/fpsp040/x_unimp.S Tue May 18 23:38:08 2004 @@ -1,14 +1,14 @@ | | x_unimp.sa 3.3 7/1/91 | -| fpsp_unimp --- FPSP handler for unimplemented instruction +| fpsp_unimp --- FPSP handler for unimplemented instruction | exception. | | Invoked when the user program encounters a floating-point | op-code that hardware does not support. Trap vector# 11 | (See table 8-1 MC68030 User's Manual). | -| +| | Note: An fsave for an unimplemented inst. will create a short | fsave stack. | @@ -22,8 +22,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/fpsp040/x_unsupp.S b/arch/m68k/fpsp040/x_unsupp.S --- a/arch/m68k/fpsp040/x_unsupp.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/fpsp040/x_unsupp.S Tue May 18 23:38:09 2004 @@ -3,18 +3,18 @@ | | fpsp_unsupp --- FPSP handler for unsupported data type exception | -| Trap vector #55 (See table 8-1 Mc68030 User's manual). +| Trap vector #55 (See table 8-1 Mc68030 User's manual). | Invoked when the user program encounters a data format (packed) that | hardware does not support or a data type (denormalized numbers or un- | normalized numbers). -| Normalizes denorms and unnorms, unpacks packed numbers then stores -| them back into the machine to let the 040 finish the operation. +| Normalizes denorms and unnorms, unpacks packed numbers then stores +| them back into the machine to let the 040 finish the operation. | | Unsupp calls two routines: -| 1. get_op - gets the operand(s) -| 2. res_func - restore the function back into the 040 or -| if fmove.p fpm, then pack source (fpm) -| and store in users memory . +| 1. get_op - gets the operand(s) +| 2. res_func - restore the function back into the 040 or +| if fmove.p fpm, then pack source (fpm) +| and store in users memory . | | Input: Long fsave stack frame | @@ -23,8 +23,8 @@ | Copyright (C) Motorola, Inc. 1990 | All Rights Reserved | -| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA -| The copyright notice above does not evidence any +| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA +| The copyright notice above does not evidence any | actual or intended publication of such source code. X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package diff -Nru a/arch/m68k/hp300/hp300map.map b/arch/m68k/hp300/hp300map.map --- a/arch/m68k/hp300/hp300map.map Tue May 18 23:38:09 2004 +++ b/arch/m68k/hp300/hp300map.map Tue May 18 23:38:09 2004 @@ -3,29 +3,29 @@ # Change the above line into # keymaps 0-2,4-6,8,12 # in case you want the entries -# altgr control keycode 83 = Boot -# altgr control keycode 111 = Boot +# altgr control keycode 83 = Boot +# altgr control keycode 111 = Boot # below. # # In fact AltGr is used very little, and one more keymap can # be saved by mapping AltGr to Alt (and adapting a few entries): # keycode 100 = Alt # -keycode 1 = +keycode 1 = keycode 2 = Alt keycode 3 = Alt keycode 4 = Shift keycode 5 = Shift keycode 6 = Control -keycode 7 = -keycode 8 = -keycode 9 = -keycode 10 = -keycode 11 = -keycode 12 = -keycode 13 = +keycode 7 = +keycode 8 = +keycode 9 = +keycode 10 = +keycode 11 = +keycode 12 = +keycode 13 = keycode 14 = -keycode 15 = +keycode 15 = keycode 16 = keycode 17 = keycode 18 = @@ -34,12 +34,12 @@ keycode 21 = keycode 22 = keycode 23 = -keycode 24 = b -keycode 25 = v +keycode 24 = b +keycode 25 = v keycode 26 = c keycode 27 = x keycode 28 = z -keycode 29 = +keycode 29 = keycode 30 = keycode 31 = Escape Delete keycode 32 = @@ -55,7 +55,7 @@ keycode 42 = f keycode 43 = d keycode 44 = s -keycode 45 = a +keycode 45 = a keycode 46 = keycode 47 = Caps_Lock keycode 48 = u @@ -65,8 +65,8 @@ keycode 52 = e keycode 53 = w keycode 54 = q -keycode 55 = Tab Tab - alt keycode 55 = Meta_Tab +keycode 55 = Tab Tab + alt keycode 55 = Meta_Tab keycode 56 = seven ampersand keycode 57 = six asciicircum keycode 58 = five percent @@ -74,19 +74,19 @@ keycode 60 = three numbersign keycode 61 = two at at keycode 62 = one exclam exclam -keycode 63 = grave asciitilde - control keycode 63 = nul - alt keycode 63 = Meta_grave -keycode 64 = -keycode 65 = -keycode 66 = -keycode 67 = -keycode 68 = -keycode 69 = -keycode 70 = -keycode 71 = +keycode 63 = grave asciitilde + control keycode 63 = nul + alt keycode 63 = Meta_grave +keycode 64 = +keycode 65 = +keycode 66 = +keycode 67 = +keycode 68 = +keycode 69 = +keycode 70 = +keycode 71 = keycode 72 = -keycode 73 = F4 +keycode 73 = F4 control keycode 73 = Console_4 keycode 74 = F3 control keycode 74 = Console_3 @@ -107,8 +107,8 @@ keycode 84 = F8 control keycode 84 = Console_8 keycode 85 = -keycode 86 = -keycode 87 = +keycode 86 = +keycode 87 = keycode 88 = eight asterisk asterisk keycode 89 = nine parenleft bracketleft keycode 90 = zero parenright bracketright @@ -122,30 +122,30 @@ keycode 98 = p keycode 99 = bracketleft braceleft keycode 100 = bracketright braceright -keycode 101 = backslash bar +keycode 101 = backslash bar control keycode 101 = Control_backslash - alt keycode 101 = Meta_backslash -keycode 102 = -keycode 103 = + alt keycode 101 = Meta_backslash +keycode 102 = +keycode 103 = keycode 104 = j keycode 105 = k keycode 106 = l keycode 107 = semicolon colon - alt keycode 107 = Meta_semicolon -keycode 108 = apostrophe quotedbl - control keycode 108 = Control_g - alt keycode 108 = Meta_apostrophe + alt keycode 107 = Meta_semicolon +keycode 108 = apostrophe quotedbl + control keycode 108 = Control_g + alt keycode 108 = Meta_apostrophe keycode 109 = Return -keycode 110 = -keycode 111 = +keycode 110 = +keycode 111 = keycode 112 = m keycode 113 = comma less keycode 114 = period greater keycode 115 = slash question -keycode 116 = -keycode 117 = -keycode 118 = -keycode 119 = +keycode 116 = +keycode 117 = +keycode 118 = +keycode 119 = keycode 120 = n keycode 121 = space space keycode 122 = diff -Nru a/arch/m68k/hp300/ints.c b/arch/m68k/hp300/ints.c --- a/arch/m68k/hp300/ints.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/hp300/ints.c Tue May 18 23:38:08 2004 @@ -29,7 +29,7 @@ * Service routines are added via hp300_request_irq() and removed * via hp300_free_irq(). The device driver should set IRQ_FLG_FAST * if it needs to be serviced early (eg FIFOless UARTs); this will - * cause it to be added at the front of the queue rather than + * cause it to be added at the front of the queue rather than * the back. * Currently IRQ_FLG_SLOW and flags=0 are treated identically; if * we needed three levels of priority we could distinguish them @@ -52,7 +52,7 @@ t->handler(irq, t->dev_id, fp); /* We could put in some accounting routines, checks for stray interrupts, * etc, in here. Note that currently we can't tell whether or not - * a handler handles the interrupt, though. + * a handler handles the interrupt, though. */ return IRQ_HANDLED; } @@ -80,7 +80,7 @@ unsigned long flags, const char *devname, void *dev_id) { irq_node_t *t, *n = new_irq_node(); - + if (!n) /* oops, no free nodes */ return -ENOMEM; @@ -117,7 +117,7 @@ unsigned long flags; spin_lock_irqsave(&irqlist_lock, flags); - + t = hp300_irq_list[irq]; if (!t) /* no handlers at all for that IRQ */ { @@ -125,7 +125,7 @@ spin_unlock_irqrestore(&irqlist_lock, flags); return; } - + if (t->dev_id == dev_id) { /* removing first handler on chain */ t->flags = IRQ_FLG_STD; /* we probably don't really need these */ @@ -136,9 +136,9 @@ spin_unlock_irqrestore(&irqlist_lock, flags); return; } - + /* OK, must be removing from middle of the chain */ - + for (t = hp300_irq_list[irq]; t->next && t->next->dev_id != dev_id; t = t->next) /* do nothing */; if (!t->next) @@ -153,7 +153,7 @@ t->next->devname = NULL; t->next->handler = NULL; t->next = t->next->next; - + spin_unlock_irqrestore(&irqlist_lock, flags); } diff -Nru a/arch/m68k/ifpsp060/CHANGES b/arch/m68k/ifpsp060/CHANGES --- a/arch/m68k/ifpsp060/CHANGES Tue May 18 23:38:09 2004 +++ b/arch/m68k/ifpsp060/CHANGES Tue May 18 23:38:09 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -31,7 +31,7 @@ --------------------------- 1) "movep" emulation where data was being read from memory -was reading the intermediate bytes. Emulation now only +was reading the intermediate bytes. Emulation now only reads the required bytes. 2) "flogn", "flog2", and "flog10" of "1" was setting the @@ -57,7 +57,7 @@ For example, if a user executed "fsin.x ADDR,fp0" where ADDR should cause a "segmentation violation", the memory read requested by the package should return a failing value - to the package. Since the package currently ignores this + to the package. Since the package currently ignores this return value, the user program will continue to the next instruction, and the result created in fp0 will be undefined. @@ -76,16 +76,16 @@ as described in the MC68060 User's Manual. For instruction read access errors, the info stacked is: - SR = SR at time of exception - PC = PC of instruction being emulated + SR = SR at time of exception + PC = PC of instruction being emulated VOFF = $4008 (stack frame format type) ADDRESS = PC of instruction being emulated FSLW = FAULT STATUS LONGWORD The valid FSLW bits are: - bit 27 = 1 (misaligned bit) - bit 24 = 1 (read) - bit 23 = 0 (write) + bit 27 = 1 (misaligned bit) + bit 24 = 1 (read) + bit 23 = 0 (write) bit 22:21 = 10 (SIZE = word) bit 20:19 = 00 (TT) bit 18:16 = x10 (TM; x = 1 for supervisor mode) @@ -98,15 +98,15 @@ other bits. For data read/write access errors, the info stacked is: - SR = SR at time of exception - PC = PC of instruction being emulated + SR = SR at time of exception + PC = PC of instruction being emulated VOFF = $4008 (stack frame format type) ADDRESS = Address of source or destination operand FSLW = FAULT STATUS LONGWORD The valid FSLW bits are: - bit 27 = 0 (misaligned bit) - bit 24 = x (read; 1 if read, 0 if write) + bit 27 = 0 (misaligned bit) + bit 24 = x (read; 1 if read, 0 if write) bit 23 = x (write; 1 if write, 0 if read) bit 22:21 = xx (SIZE; see MC68060 User's Manual) bit 20:19 = 00 (TT) diff -Nru a/arch/m68k/ifpsp060/MISC b/arch/m68k/ifpsp060/MISC --- a/arch/m68k/ifpsp060/MISC Tue May 18 23:38:06 2004 +++ b/arch/m68k/ifpsp060/MISC Tue May 18 23:38:06 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -176,7 +176,7 @@ imovep.s : 2.8 ichk2cmp2.s : 2.6 idiv64.s : 2.10 -imul64.s : +imul64.s : icas2.s : 2.11 icas.s : 2.12 icas2_core.s: 2.6 diff -Nru a/arch/m68k/ifpsp060/README b/arch/m68k/ifpsp060/README --- a/arch/m68k/ifpsp060/README Tue May 18 23:38:07 2004 +++ b/arch/m68k/ifpsp060/README Tue May 18 23:38:07 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. diff -Nru a/arch/m68k/ifpsp060/TEST.DOC b/arch/m68k/ifpsp060/TEST.DOC --- a/arch/m68k/ifpsp060/TEST.DOC Tue May 18 23:38:09 2004 +++ b/arch/m68k/ifpsp060/TEST.DOC Tue May 18 23:38:09 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -56,7 +56,7 @@ ----------------------- (top of module) - ----------------- + ----------------- | | - 128 byte-sized section (1) | Call-Out | - 4 bytes per entry (user fills these in) | | @@ -74,8 +74,8 @@ The first section of this module is the "Call-out" section. This section is NOT INCLUDED in {i,f}test.sa (an example "Call-out" section is provided at the end of this file). The purpose of this section is to allow the test -routines to reference external printing functions that must be provided -by the host operating system. This section MUST be exactly 128 bytes in +routines to reference external printing functions that must be provided +by the host operating system. This section MUST be exactly 128 bytes in size. There are 32 fields, each 4 bytes in size. Each field corresponds to a function required by the test packages (these functions and their location are listed in "68060{ISP,FPSP}-TEST call-outs" below). Each field @@ -152,7 +152,7 @@ (2) unsupported data type exceptions (3) non-maskable overflow/underflow exceptions -FP unimplemented: tests FP unimplemented exception. this one is +FP unimplemented: tests FP unimplemented exception. this one is separate from the previous tests for systems that don't want FP unimplemented instructions. @@ -194,7 +194,7 @@ # beginning of "Call-out" section; provided by integrator. # MUST be 128 bytes long. _060FPSP_TEST: - long _print_str - _060FPSP_TEST + long _print_str - _060FPSP_TEST long _print_num - _060FPSP_TEST space 120 diff -Nru a/arch/m68k/ifpsp060/fplsp.doc b/arch/m68k/ifpsp060/fplsp.doc --- a/arch/m68k/ifpsp060/fplsp.doc Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/fplsp.doc Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -34,7 +34,7 @@ 68060SP Floating-Point Software Package. The routines included in this module can be used to emulate the FP instructions not implemented in 68060 hardware. These -instructions normally take exception vector #11 +instructions normally take exception vector #11 "FP Unimplemented Instruction". By re-compiling a program that uses these instructions, and diff -Nru a/arch/m68k/ifpsp060/fpsp.doc b/arch/m68k/ifpsp060/fpsp.doc --- a/arch/m68k/ifpsp060/fpsp.doc Tue May 18 23:38:06 2004 +++ b/arch/m68k/ifpsp060/fpsp.doc Tue May 18 23:38:06 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -31,7 +31,7 @@ The file fpsp.sa contains the 68060 Floating-Point Software Package. This package is essentially a set of exception handlers -that can be integrated into an operating system. +that can be integrated into an operating system. These exception handlers emulate Unimplemented FP instructions, instructions using unimplemented data types, and instructions using unimplemented addressing modes. In addition, this package @@ -62,14 +62,14 @@ ----------------------- (top of module) - ----------------- + ----------------- | | - 128 byte-sized section (1) | Call-Out | - 4 bytes per entry (user fills these in) | | - example routines in fskeleton.s ----------------- | | - 8 bytes per entry (2) | Entry Point | - user does "bra" or "jmp" to this address - | | + | | ----------------- | | - code section (3) ~ ~ @@ -79,14 +79,14 @@ The first section of this module is the "Call-out" section. This section is NOT INCLUDED in fpsp.sa (an example "Call-out" section is provided at -the end of the file fskeleton.s). The purpose of this section is to allow -the FPSP routines to reference external functions that must be provided -by the host operating system. This section MUST be exactly 128 bytes in +the end of the file fskeleton.s). The purpose of this section is to allow +the FPSP routines to reference external functions that must be provided +by the host operating system. This section MUST be exactly 128 bytes in size. There are 32 fields, each 4 bytes in size. Each field corresponds to a function required by the FPSP (these functions and their location are listed in "68060FPSP call-outs" below). Each field entry should contain the address of the corresponding function RELATIVE to the starting address -of the "call-out" section. The "Call-out" section must sit adjacent to the +of the "call-out" section. The "Call-out" section must sit adjacent to the fpsp.sa image in memory. The second section, the "Entry-point" section, is used by external routines @@ -97,7 +97,7 @@ would simply execute a "bra" or "jmp" that jumped to the selected function entry-point. -For example, if the 68060 hardware took a "Line-F Emulator" exception +For example, if the 68060 hardware took a "Line-F Emulator" exception (vector #11), the operating system should execute something similar to: bra _060FPSP_TOP+128+48 diff -Nru a/arch/m68k/ifpsp060/fskeleton.S b/arch/m68k/ifpsp060/fskeleton.S --- a/arch/m68k/ifpsp060/fskeleton.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/ifpsp060/fskeleton.S Tue May 18 23:38:06 2004 @@ -5,10 +5,10 @@ |Production Release P1.00 -- October 10, 1994 | |M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. -| +| |THE SOFTWARE is provided on an "AS IS" basis and without warranty. |To the maximum extent permitted by applicable law, -|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE |and any warranty against infringement with regard to the SOFTWARE |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -68,7 +68,7 @@ | _060_real_ovfl(): | | This is the exit point for the 060FPSP when an enabled overflow exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled overflow conditions. The exception stack frame is an overflow | stack frame. The FP state frame holds the EXCEPTIONAL OPERAND. | @@ -87,7 +87,7 @@ | _060_real_unfl(): | | This is the exit point for the 060FPSP when an enabled underflow exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled underflow conditions. The exception stack frame is an underflow | stack frame. The FP state frame holds the EXCEPTIONAL OPERAND. | @@ -105,7 +105,7 @@ | _060_real_operr(): | | This is the exit point for the 060FPSP when an enabled operand error exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled operand error exceptions. The exception stack frame is an operand error | stack frame. The FP state frame holds the source operand of the faulting | instruction. @@ -124,7 +124,7 @@ | _060_real_snan(): | | This is the exit point for the 060FPSP when an enabled signalling NaN exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled signalling NaN exceptions. The exception stack frame is a signalling NaN | stack frame. The FP state frame holds the source operand of the faulting | instruction. @@ -143,7 +143,7 @@ | _060_real_dz(): | | This is the exit point for the 060FPSP when an enabled divide-by-zero exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled divide-by-zero exceptions. The exception stack frame is a divide-by-zero | stack frame. The FP state frame holds the source operand of the faulting | instruction. @@ -162,7 +162,7 @@ | _060_real_inex(): | | This is the exit point for the 060FPSP when an enabled inexact exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled inexact exceptions. The exception stack frame is an inexact | stack frame. The FP state frame holds the source operand of the faulting | instruction. @@ -181,12 +181,12 @@ | _060_real_bsun(): | | This is the exit point for the 060FPSP when an enabled bsun exception -| is present. The routine below should point to the operating system handler +| is present. The routine below should point to the operating system handler | for enabled bsun exceptions. The exception stack frame is a bsun | stack frame. | | The sample routine below clears the exception status bit, clears the NaN -| bit in the FPSR, and does an "rte". The instruction that caused the +| bit in the FPSR, and does an "rte". The instruction that caused the | bsun will now be re-executed but with the NaN FPSR bit cleared. | .global _060_real_bsun @@ -202,13 +202,13 @@ | | _060_real_fline(): | -| This is the exit point for the 060FPSP when an F-Line Illegal exception is +| This is the exit point for the 060FPSP when an F-Line Illegal exception is | encountered. Three different types of exceptions can enter the F-Line exception | vector number 11: FP Unimplemented Instructions, FP implemented instructions when | the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module | _fpsp_fline() distinguishes between the three and acts appropriately. F-Line | Illegals branch here. -| +| .global _060_real_fline _060_real_fline: bral trap | jump to trap handler @@ -216,7 +216,7 @@ | | _060_real_fpu_disabled(): | -| This is the exit point for the 060FPSP when an FPU disabled exception is +| This is the exit point for the 060FPSP when an FPU disabled exception is | encountered. Three different types of exceptions can enter the F-Line exception | vector number 11: FP Unimplemented Instructions, FP implemented instructions when | the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module diff -Nru a/arch/m68k/ifpsp060/ilsp.doc b/arch/m68k/ifpsp060/ilsp.doc --- a/arch/m68k/ifpsp060/ilsp.doc Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/ilsp.doc Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -32,11 +32,11 @@ The file ilsp.s contains the "Library version" of the 68060 Integer Software Package. Routines included in this module can be used to emulate 64-bit divide and multiply, -and the "cmp2" instruction. These instructions are not -implemented in hardware on the 68060 and normally take +and the "cmp2" instruction. These instructions are not +implemented in hardware on the 68060 and normally take exception vector #61 "Unimplemented Integer Instruction". -By re-compiling a program that uses these instructions, and +By re-compiling a program that uses these instructions, and making subroutine calls in place of the unimplemented instructions, a program can avoid the overhead associated with taking the exception. @@ -63,7 +63,7 @@ Release file structure: ----------------------- -The file ilsp.sa contains an "Entry-Point" section and a +The file ilsp.sa contains an "Entry-Point" section and a code section. The ILSP has no "Call-Out" section. The first section is the "Entry-Point" section. In order to access a function in the package, a program must "bsr" or "jsr" to the location listed @@ -77,7 +77,7 @@ For example, to use a 64-bit multiply instruction, do a "bsr" or "jsr" to the entry point defined by -the 060ILSP entry table. A compiler generated code sequence +the 060ILSP entry table. A compiler generated code sequence for unsigned multiply could look like: # mulu.l ,Dh:Dl @@ -107,7 +107,7 @@ mov.l (%sp)+,%d1 # load remainder mov.l (%sp)+,%d0 # load quotient -The library routines also return the correct condition code +The library routines also return the correct condition code register value. If this is important, then the caller of the library routine must make sure that the value isn't lost while popping other items off of the stack. diff -Nru a/arch/m68k/ifpsp060/iskeleton.S b/arch/m68k/ifpsp060/iskeleton.S --- a/arch/m68k/ifpsp060/iskeleton.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/iskeleton.S Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ |Production Release P1.00 -- October 10, 1994 | |M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. -| +| |THE SOFTWARE is provided on an "AS IS" basis and without warranty. |To the maximum extent permitted by applicable law, -|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE |and any warranty against infringement with regard to the SOFTWARE |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -40,7 +40,7 @@ |################################ -| (1) EXAMPLE CALL-OUTS # +| (1) EXAMPLE CALL-OUTS # | # | _060_isp_done() # | _060_real_chk() # @@ -56,7 +56,7 @@ | _060_isp_done(): | | This is and example main exit point for the Unimplemented Integer -| Instruction exception handler. For a normal exit, the +| Instruction exception handler. For a normal exit, the | _isp_unimp() branches to here so that the operating system | can do any clean-up desired. The stack frame is the | Unimplemented Integer Instruction stack frame with @@ -118,9 +118,9 @@ | | _060_real_divbyzero: | -| This is an alternate exit point for the Unimplemented Integer +| This is an alternate exit point for the Unimplemented Integer | Instruction exception handler isp_unimp(). If the instruction is a 64-bit -| integer divide where the source operand is a zero, then the _isp_unimp() +| integer divide where the source operand is a zero, then the _isp_unimp() | creates a Divide-by-zero exception stack frame from the Unimplemented | Integer Instruction stack frame and branches to this routine. | @@ -128,7 +128,7 @@ | no action associated with the "chk" exception. If tracing is enabled, | then it create a Trace exception stack frame from the "chk" exception | stack frame and branches to the _real_trace() entry point. -| +| | Linux/68k: commented out test for tracing .global _060_real_divbyzero @@ -185,7 +185,7 @@ | Entry point for the operating system`s routine to "lock" a page | from being paged out. This routine is needed by the cas/cas2 | algorithms so that no page faults occur within the "core" code -| region. Note: the routine must lock two pages if the operand +| region. Note: the routine must lock two pages if the operand | spans two pages. | NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE | SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME. @@ -212,7 +212,7 @@ | Note: the routine must unlock two pages if the operand spans | two pages. | Arguments: -| a0 = operand address +| a0 = operand address | d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user | d1 = `xxxxxxff -> longword; `xxxxxx00 -> word | diff -Nru a/arch/m68k/ifpsp060/isp.doc b/arch/m68k/ifpsp060/isp.doc --- a/arch/m68k/ifpsp060/isp.doc Tue May 18 23:38:08 2004 +++ b/arch/m68k/ifpsp060/isp.doc Tue May 18 23:38:08 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -77,7 +77,7 @@ ----------------- | | - 8 bytes per entry (2) | Entry Point | - user does a "bra" or "jmp" to this address - | | + | | ----------------- | | - code section (3) ~ ~ @@ -87,14 +87,14 @@ The first section of this module is the "Call-out" section. This section is NOT INCLUDED in isp.sa (an example "Call-out" section is provided at -the end of the file iskeleton.s). The purpose of this section is to allow -the ISP routines to reference external functions that must be provided -by the host operating system. This section MUST be exactly 128 bytes in +the end of the file iskeleton.s). The purpose of this section is to allow +the ISP routines to reference external functions that must be provided +by the host operating system. This section MUST be exactly 128 bytes in size. There are 32 fields, each 4 bytes in size. Each field corresponds to a function required by the ISP (these functions and their location are listed in "68060ISP call-outs" below). Each field entry should contain the address of the corresponding function RELATIVE to the starting address -of the "call-out" section. The "Call-out" section must sit adjacent to the +of the "call-out" section. The "Call-out" section must sit adjacent to the isp.sa image in memory. The second section, the "Entry-point" section, is used by external routines @@ -112,7 +112,7 @@ bra _060ISP_TOP+128+0 (_060ISP_TOP is the starting address of the "Call-out" section; the "Call-out" -section is 128 bytes long; and the Unimplemented Integer ISP handler entry +section is 128 bytes long; and the Unimplemented Integer ISP handler entry point is located 0 bytes from the top of the "Entry-point" section.) The third section is the code section. After entering through an "Entry-point", @@ -177,7 +177,7 @@ _060_isp_unimp() entry point of the ISP. After the 060ISP decodes the instruction type and fetches the appropriate -data registers, and BEFORE the actual emulated transfers occur, the +data registers, and BEFORE the actual emulated transfers occur, the package calls either the "Call-out" _060_real_cas() or _060_real_cas2(). If the emulation code provided by the 060ISP is sufficient for the host system (see isp.s source code), then these "Call-out"s should be diff -Nru a/arch/m68k/ifpsp060/os.S b/arch/m68k/ifpsp060/os.S --- a/arch/m68k/ifpsp060/os.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/ifpsp060/os.S Tue May 18 23:38:07 2004 @@ -5,10 +5,10 @@ |Production Release P1.00 -- October 10, 1994 | |M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. -| +| |THE SOFTWARE is provided on an "AS IS" basis and without warranty. |To the maximum extent permitted by applicable law, -|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE |and any warranty against infringement with regard to the SOFTWARE |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -35,8 +35,8 @@ #include |################################ -| EXAMPLE CALL-OUTS # -| # +| EXAMPLE CALL-OUTS # +| # | _060_dmem_write() # | _060_dmem_read() # | _060_imem_read() # @@ -53,12 +53,12 @@ | _060_real_access() # |################################ -| +| | Each IO routine checks to see if the memory write/read is to/from user | or supervisor application space. The examples below use simple "move" | instructions for supervisor mode applications and call _copyin()/_copyout() | for user mode applications. -| When installing the 060SP, the _copyin()/_copyout() equivalents for a +| When installing the 060SP, the _copyin()/_copyout() equivalents for a | given operating system should be substituted. | | The addresses within the 060SP are guaranteed to be on the stack. @@ -76,10 +76,10 @@ | Writes to data memory while in supervisor mode. | | INPUTS: -| a0 - supervisor source address +| a0 - supervisor source address | a1 - user destination address -| d0 - number of bytes to write -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| d0 - number of bytes to write +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d1 - 0 = success, !0 = failure | @@ -110,11 +110,11 @@ | a0 - user source address | a1 - supervisor destination address | d0 - number of bytes to read -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d1 - 0 = success, !0 = failure | - .global _060_imem_read + .global _060_imem_read .global _060_dmem_read _060_imem_read: _060_dmem_read: @@ -136,17 +136,17 @@ | | _060_dmem_read_byte(): -| +| | Read a data byte from user memory. | | INPUTS: | a0 - user source address -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d0 - data byte in d0 | d1 - 0 = success, !0 = failure | - .global _060_dmem_read_byte + .global _060_dmem_read_byte _060_dmem_read_byte: clr.l %d0 | clear whole longword clr.l %d1 | assume success @@ -159,29 +159,29 @@ | | _060_dmem_read_word(): -| +| | Read a data word from user memory. | | INPUTS: | a0 - user source address -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d0 - data word in d0 | d1 - 0 = success, !0 = failure | | _060_imem_read_word(): -| +| | Read an instruction word from user memory. | | INPUTS: | a0 - user source address -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d0 - instruction word in d0 | d1 - 0 = success, !0 = failure | - .global _060_dmem_read_word - .global _060_imem_read_word + .global _060_dmem_read_word + .global _060_imem_read_word _060_dmem_read_word: _060_imem_read_word: clr.l %d1 | assume success @@ -195,29 +195,29 @@ | | _060_dmem_read_long(): -| +| | | INPUTS: | a0 - user source address -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d0 - data longword in d0 | d1 - 0 = success, !0 = failure | | _060_imem_read_long(): -| +| | Read an instruction longword from user memory. | | INPUTS: | a0 - user source address -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d0 - instruction longword in d0 | d1 - 0 = success, !0 = failure | - .global _060_dmem_read_long - .global _060_imem_read_long + .global _060_dmem_read_long + .global _060_imem_read_long _060_dmem_read_long: _060_imem_read_long: clr.l %d1 | assume success @@ -235,12 +235,12 @@ | | INPUTS: | a0 - user destination address -| d0 - data byte in d0 -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| d0 - data byte in d0 +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d1 - 0 = success, !0 = failure | - .global _060_dmem_write_byte + .global _060_dmem_write_byte _060_dmem_write_byte: clr.l %d1 | assume success btst #0x5,0x4(%a6) | check for supervisor state @@ -257,12 +257,12 @@ | | INPUTS: | a0 - user destination address -| d0 - data word in d0 -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| d0 - data word in d0 +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d1 - 0 = success, !0 = failure | - .global _060_dmem_write_word + .global _060_dmem_write_word _060_dmem_write_word: clr.l %d1 | assume success btst #0x5,0x4(%a6) | check for supervisor state @@ -281,12 +281,12 @@ | | INPUTS: | a0 - user destination address -| d0 - data longword in d0 -| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode +| d0 - data longword in d0 +| 0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode | OUTPUTS: | d1 - 0 = success, !0 = failure | - .global _060_dmem_write_long + .global _060_dmem_write_long _060_dmem_write_long: clr.l %d1 | assume success btst #0x5,0x4(%a6) | check for supervisor state @@ -313,7 +313,7 @@ | | int _copyout(supervisor_addr, user_addr, nbytes) | - .global _copyout + .global _copyout _copyout: move.l 4(%sp),%a0 | source move.l 8(%sp),%a1 | destination @@ -330,14 +330,14 @@ | | int _copyin(user_addr, supervisor_addr, nbytes) | - .global _copyin + .global _copyin _copyin: move.l 4(%sp),%a0 | source move.l 8(%sp),%a1 | destination move.l 12(%sp),%d0 | count subq.l #1,%d0 morein: -copyinae: +copyinae: movs.b (%a0)+,%d1 | fetch user byte move.b %d1,(%a1)+ | write supervisor byte dbra %d0,morein | are we through yet? @@ -378,7 +378,7 @@ -| Execption handling for movs access to illegal memory +| Execption handling for movs access to illegal memory .section .fixup,#alloc,#execinstr .even 1: moveq #-1,%d1 diff -Nru a/arch/m68k/ifpsp060/src/fplsp.S b/arch/m68k/ifpsp060/src/fplsp.S --- a/arch/m68k/ifpsp060/src/fplsp.S Tue May 18 23:38:08 2004 +++ b/arch/m68k/ifpsp060/src/fplsp.S Tue May 18 23:38:08 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -304,33 +304,33 @@ set EXC_D1, EXC_DREGS+(1*4) set EXC_D0, EXC_DREGS+(0*4) -set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 -set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 -set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) +set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 +set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 +set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) -set FP_SCR1, LV+80 # fp scratch 1 -set FP_SCR1_EX, FP_SCR1+0 +set FP_SCR1, LV+80 # fp scratch 1 +set FP_SCR1_EX, FP_SCR1+0 set FP_SCR1_SGN, FP_SCR1+2 -set FP_SCR1_HI, FP_SCR1+4 -set FP_SCR1_LO, FP_SCR1+8 +set FP_SCR1_HI, FP_SCR1+4 +set FP_SCR1_LO, FP_SCR1+8 -set FP_SCR0, LV+68 # fp scratch 0 -set FP_SCR0_EX, FP_SCR0+0 +set FP_SCR0, LV+68 # fp scratch 0 +set FP_SCR0_EX, FP_SCR0+0 set FP_SCR0_SGN, FP_SCR0+2 -set FP_SCR0_HI, FP_SCR0+4 -set FP_SCR0_LO, FP_SCR0+8 +set FP_SCR0_HI, FP_SCR0+4 +set FP_SCR0_LO, FP_SCR0+8 -set FP_DST, LV+56 # fp destination operand -set FP_DST_EX, FP_DST+0 +set FP_DST, LV+56 # fp destination operand +set FP_DST_EX, FP_DST+0 set FP_DST_SGN, FP_DST+2 -set FP_DST_HI, FP_DST+4 -set FP_DST_LO, FP_DST+8 +set FP_DST_HI, FP_DST+4 +set FP_DST_LO, FP_DST+8 -set FP_SRC, LV+44 # fp source operand -set FP_SRC_EX, FP_SRC+0 +set FP_SRC, LV+44 # fp source operand +set FP_SRC_EX, FP_SRC+0 set FP_SRC_SGN, FP_SRC+2 -set FP_SRC_HI, FP_SRC+4 -set FP_SRC_LO, FP_SRC+8 +set FP_SRC_HI, FP_SRC+4 +set FP_SRC_LO, FP_SRC+8 set USER_FPIAR, LV+40 # FP instr address register @@ -354,7 +354,7 @@ set EXC_TEMP, LV+16 # temporary space set DTAG, LV+15 # destination operand type -set STAG, LV+14 # source operand type +set STAG, LV+14 # source operand type set SPCOND_FLG, LV+10 # flag: special case (see below) @@ -369,17 +369,17 @@ # Helpful macros set FTEMP, 0 # offsets within an -set FTEMP_EX, 0 # extended precision +set FTEMP_EX, 0 # extended precision set FTEMP_SGN, 2 # value saved in memory. -set FTEMP_HI, 4 -set FTEMP_LO, 8 +set FTEMP_HI, 4 +set FTEMP_LO, 8 set FTEMP_GRS, 12 set LOCAL, 0 # offsets within an -set LOCAL_EX, 0 # extended precision +set LOCAL_EX, 0 # extended precision set LOCAL_SGN, 2 # value saved in memory. -set LOCAL_HI, 4 -set LOCAL_LO, 8 +set LOCAL_HI, 4 +set LOCAL_LO, 8 set LOCAL_GRS, 12 set DST, 0 # offsets within an @@ -469,17 +469,17 @@ ###################################### set dzinf_mask, inf_mask+dz_mask+adz_mask set opnan_mask, nan_mask+operr_mask+aiop_mask -set nzi_mask, 0x01ffffff #clears N, Z, and I +set nzi_mask, 0x01ffffff #clears N, Z, and I set unfinx_mask, unfl_mask+inex2_mask+aunfl_mask+ainex_mask set unf2inx_mask, unfl_mask+inex2_mask+ainex_mask set ovfinx_mask, ovfl_mask+inex2_mask+aovfl_mask+ainex_mask set inx1a_mask, inex1_mask+ainex_mask set inx2a_mask, inex2_mask+ainex_mask -set snaniop_mask, nan_mask+snan_mask+aiop_mask +set snaniop_mask, nan_mask+snan_mask+aiop_mask set snaniop2_mask, snan_mask+aiop_mask set naniop_mask, nan_mask+aiop_mask set neginf_mask, neg_mask+inf_mask -set infaiop_mask, inf_mask+aiop_mask +set infaiop_mask, inf_mask+aiop_mask set negz_mask, neg_mask+z_mask set opaop_mask, operr_mask+aiop_mask set unfl_inx_mask, unfl_mask+aunfl_mask+ainex_mask @@ -508,8 +508,8 @@ set mantissalen, 64 # length of mantissa in bits set BYTE, 1 # len(byte) == 1 byte -set WORD, 2 # len(word) == 2 bytes -set LONG, 4 # len(longword) == 2 bytes +set WORD, 2 # len(word) == 2 bytes +set LONG, 4 # len(longword) == 2 bytes set BSUN_VEC, 0xc0 # bsun vector offset set INEX_VEC, 0xc4 # inexact vector offset @@ -4903,7 +4903,7 @@ # d0 = round precision,mode # # # # OUTPUT ************************************************************** # -# fp0 = sin(X) or cos(X) # +# fp0 = sin(X) or cos(X) # # # # For ssincos(X): # # fp0 = sin(X) # @@ -4911,7 +4911,7 @@ # # # ACCURACY and MONOTONICITY ******************************************* # # The returned result is within 1 ulp in 64 significant bit, i.e. # -# within 0.5001 ulp to 53 bits if the result is subsequently # +# within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # # # @@ -4928,8 +4928,8 @@ # # # 4. If k is even, go to 6. # # # -# 5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. # -# Return sgn*cos(r) where cos(r) is approximated by an # +# 5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. # +# Return sgn*cos(r) where cos(r) is approximated by an # # even polynomial in r, 1 + r*r*(B1+s*(B2+ ... + s*B8)), # # s = r*r. # # Exit. # @@ -4941,10 +4941,10 @@ # # # 7. If |X| > 1, go to 9. # # # -# 8. (|X|<2**(-40)) If SIN is invoked, return X; # +# 8. (|X|<2**(-40)) If SIN is invoked, return X; # # otherwise return 1. # # # -# 9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # +# 9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # # go back to 3. # # # # SINCOS: # @@ -4959,19 +4959,19 @@ # j1 exclusive or with the l.s.b. of k. # # sgn1 := (-1)**j1, sgn2 := (-1)**j2. # # SIN(X) = sgn1 * cos(r) and COS(X) = sgn2*sin(r) where # -# sin(r) and cos(r) are computed as odd and even # +# sin(r) and cos(r) are computed as odd and even # # polynomials in r, respectively. Exit # # # # 5. (k is even) Set j1 := k/2, sgn1 := (-1)**j1. # # SIN(X) = sgn1 * sin(r) and COS(X) = sgn1*cos(r) where # -# sin(r) and cos(r) are computed as odd and even # +# sin(r) and cos(r) are computed as odd and even # # polynomials in r, respectively. Exit # # # # 6. If |X| > 1, go to 8. # # # # 7. (|X|<2**(-40)) SIN(X) = X and COS(X) = 1. Exit. # # # -# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # +# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # # go back to 2. # # # ######################################################################### @@ -5046,9 +5046,9 @@ #--THE ARGUMENT REDUCTION IS DONE BY TABLE LOOK UP. SINMAIN: fmov.x %fp0,%fp1 - fmul.d TWOBYPI(%pc),%fp1 # X*2/PI + fmul.d TWOBYPI(%pc),%fp1 # X*2/PI - lea PITBL+0x200(%pc),%a1 # TABLE OF N*PI/2, N = -32,...,32 + lea PITBL+0x200(%pc),%a1 # TABLE OF N*PI/2, N = -32,...,32 fmov.l %fp1,INT(%a6) # CONVERT TO INTEGER @@ -5058,8 +5058,8 @@ # A1 IS THE ADDRESS OF N*PIBY2 # ...WHICH IS IN TWO PIECES Y1 & Y2 - fsub.x (%a1)+,%fp0 # X-Y1 - fsub.s (%a1),%fp0 # fp0 = R = (X-Y1)-Y2 + fsub.x (%a1)+,%fp0 # X-Y1 + fsub.s (%a1),%fp0 # fp0 = R = (X-Y1)-Y2 SINCONT: #--continuation from REDUCEX @@ -5213,7 +5213,7 @@ COSTINY: fmov.s &0x3F800000,%fp0 # fp0 = 1.0 fmov.l %d0,%fpcr # restore users round mode,prec - fadd.s &0x80800000,%fp0 # last inst - possible exception set + fadd.s &0x80800000,%fp0 # last inst - possible exception set bra t_pinx2 ################################################ @@ -5645,7 +5645,7 @@ # # # 7. (|X|<2**(-40)) Tan(X) = X. Exit. # # # -# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back # +# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back # # to 2. # # # ######################################################################### @@ -6048,27 +6048,27 @@ # The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # -# in double precision. # +# in double precision. # # # # ALGORITHM *********************************************************** # # Step 1. If |X| >= 16 or |X| < 1/16, go to Step 5. # # # -# Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. # +# Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. # # Note that k = -4, -3,..., or 3. # -# Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 # +# Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 # # significant bits of X with a bit-1 attached at the 6-th # # bit position. Define u to be u = (X-F) / (1 + X*F). # # # # Step 3. Approximate arctan(u) by a polynomial poly. # # # -# Step 4. Return arctan(F) + poly, arctan(F) is fetched from a # +# Step 4. Return arctan(F) + poly, arctan(F) is fetched from a # # table of values calculated beforehand. Exit. # # # # Step 5. If |X| >= 16, go to Step 7. # # # # Step 6. Approximate arctan(X) by an odd polynomial in X. Exit. # # # -# Step 7. Define X' = -1/X. Approximate arctan(X') by an odd # +# Step 7. Define X' = -1/X. Approximate arctan(X') by an odd # # polynomial in X'. # # Arctan(X) = sign(X)*Pi/2 + arctan(X'). Exit. # # # @@ -6334,7 +6334,7 @@ fmul.x %fp2,%fp1 # A1*U*V*(A2+V*(A3+V)) fadd.x %fp1,%fp0 # ATAN(U), FP1 RELEASED - fmovm.x (%sp)+,&0x20 # restore fp2 + fmovm.x (%sp)+,&0x20 # restore fp2 fmov.l %d0,%fpcr # restore users rnd mode,prec fadd.x ATANF(%a6),%fp0 # ATAN(X) @@ -6491,7 +6491,7 @@ # a0 = pointer to extended precision input # # d0 = round precision,mode # # # -# OUTPUT ************************************************************** # +# OUTPUT ************************************************************** # # fp0 = arcsin(X) # # # # ACCURACY and MONOTONICITY ******************************************* # @@ -6531,7 +6531,7 @@ # This catch is added here for the '060 QSP. Originally, the call to # satan() would handle this case by causing the exception which would -# not be caught until gen_except(). Now, with the exceptions being +# not be caught until gen_except(). Now, with the exceptions being # detected inside of satan(), the exception would have been handled there # instead of inside sasin() as expected. cmp.l %d1,&0x3FD78000 @@ -6680,7 +6680,7 @@ ######################################################################### # setox(): computes the exponential for a normalized input # -# setoxd(): computes the exponential for a denormalized input # +# setoxd(): computes the exponential for a denormalized input # # setoxm1(): computes the exponential minus 1 for a normalized input # # setoxm1d(): computes the exponential minus 1 for a denormalized input # # # @@ -6692,9 +6692,9 @@ # fp0 = exp(X) or exp(X)-1 # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 0.85 ulps in 64 significant bit, # +# The returned result is within 0.85 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # -# rounded to double precision. The result is provably monotonic # +# rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM and IMPLEMENTATION **************************************** # @@ -6718,14 +6718,14 @@ # Notes: The usual case should take the branches 1.1 -> 1.3 -> 2.# # To avoid the use of floating-point comparisons, a # # compact representation of |X| is used. This format is a # -# 32-bit integer, the upper (more significant) 16 bits # -# are the sign and biased exponent field of |X|; the # +# 32-bit integer, the upper (more significant) 16 bits # +# are the sign and biased exponent field of |X|; the # # lower 16 bits are the 16 most significant fraction # # (including the explicit bit) bits of |X|. Consequently, # # the comparisons in Steps 1.1 and 1.3 can be performed # # by integer comparison. Note also that the constant # # 16380 log(2) used in Step 1.3 is also in the compact # -# form. Thus taking the branch to Step 2 guarantees # +# form. Thus taking the branch to Step 2 guarantees # # |X| < 16380 log(2). There is no harm to have a small # # number of cases where |X| is less than, but close to, # # 16380 log(2) and the branch to Step 9 is taken. # @@ -6737,7 +6737,7 @@ # 2.3 Calculate J = N mod 64; so J = 0,1,2,..., # # or 63. # # 2.4 Calculate M = (N - J)/64; so N = 64M + J. # -# 2.5 Calculate the address of the stored value of # +# 2.5 Calculate the address of the stored value of # # 2^(J/64). # # 2.6 Create the value Scale = 2^M. # # Notes: The calculation in 2.2 is really performed by # @@ -6746,26 +6746,26 @@ # where # # constant := single-precision( 64/log 2 ). # # # -# Using a single-precision constant avoids memory # +# Using a single-precision constant avoids memory # # access. Another effect of using a single-precision # -# "constant" is that the calculated value Z is # +# "constant" is that the calculated value Z is # # # # Z = X*(64/log2)*(1+eps), |eps| <= 2^(-24). # # # # This error has to be considered later in Steps 3 and 4. # # # # Step 3. Calculate X - N*log2/64. # -# 3.1 R := X + N*L1, # +# 3.1 R := X + N*L1, # # where L1 := single-precision(-log2/64). # -# 3.2 R := R + N*L2, # +# 3.2 R := R + N*L2, # # L2 := extended-precision(-log2/64 - L1).# -# Notes: a) The way L1 and L2 are chosen ensures L1+L2 # +# Notes: a) The way L1 and L2 are chosen ensures L1+L2 # # approximate the value -log2/64 to 88 bits of accuracy. # # b) N*L1 is exact because N is no longer than 22 bits # # and L1 is no longer than 24 bits. # -# c) The calculation X+N*L1 is also exact due to # +# c) The calculation X+N*L1 is also exact due to # # cancellation. Thus, R is practically X+N(L1+L2) to full # -# 64 bits. # +# 64 bits. # # d) It is important to estimate how large can |R| be # # after Step 3.2. # # # @@ -6783,11 +6783,11 @@ # # # Step 4. Approximate exp(R)-1 by a polynomial # # p = R + R*R*(A1 + R*(A2 + R*(A3 + R*(A4 + R*A5)))) # -# Notes: a) In order to reduce memory access, the coefficients # +# Notes: a) In order to reduce memory access, the coefficients # # are made as "short" as possible: A1 (which is 1/2), A4 # # and A5 are single precision; A2 and A3 are double # -# precision. # -# b) Even with the restrictions above, # +# precision. # +# b) Even with the restrictions above, # # |p - (exp(R)-1)| < 2^(-68.8) for all |R| <= 0.0062. # # Note that 0.0062 is slightly bigger than 0.57 log2/64. # # c) To fully utilize the pipeline, p is separated into # @@ -6801,11 +6801,11 @@ # where T and t are the stored values for 2^(J/64). # # Notes: 2^(J/64) is stored as T and t where T+t approximates # # 2^(J/64) to roughly 85 bits; T is in extended precision # -# and t is in single precision. Note also that T is # -# rounded to 62 bits so that the last two bits of T are # -# zero. The reason for such a special form is that T-1, # +# and t is in single precision. Note also that T is # +# rounded to 62 bits so that the last two bits of T are # +# zero. The reason for such a special form is that T-1, # # T-2, and T-8 will all be exact --- a property that will # -# give much more accurate computation of the function # +# give much more accurate computation of the function # # EXPM1. # # # # Step 6. Reconstruction of exp(X) # @@ -6821,11 +6821,11 @@ # X = (M1+M)log2 + Jlog2/64 + R, |M1+M| >= 16380. # # Hence, exp(X) may overflow or underflow or neither. # # When that is the case, AdjScale = 2^(M1) where M1 is # -# approximately M. Thus 6.2 will never cause # +# approximately M. Thus 6.2 will never cause # # over/underflow. Possible exception in 6.4 is overflow # # or underflow. The inexact exception is not generated in # # 6.4. Although one can argue that the inexact flag # -# should always be raised, to simulate that exception # +# should always be raised, to simulate that exception # # cost to much than the flag is worth in practical uses. # # # # Step 7. Return 1 + X. # @@ -6838,7 +6838,7 @@ # in Step 7.1 to avoid unnecessary trapping. (Although # # the FMOVEM may not seem relevant since X is normalized, # # the precaution will be useful in the library version of # -# this code where the separate entry for denormalized # +# this code where the separate entry for denormalized # # inputs will be done away with.) # # # # Step 8. Handle exp(X) where |X| >= 16380log2. # @@ -6846,9 +6846,9 @@ # (mimic 2.2 - 2.6) # # 8.2 N := round-to-integer( X * 64/log2 ) # # 8.3 Calculate J = N mod 64, J = 0,1,...,63 # -# 8.4 K := (N-J)/64, M1 := truncate(K/2), M = K-M1, # +# 8.4 K := (N-J)/64, M1 := truncate(K/2), M = K-M1, # # AdjFlag := 1. # -# 8.5 Calculate the address of the stored value # +# 8.5 Calculate the address of the stored value # # 2^(J/64). # # 8.6 Create the values Scale = 2^M, AdjScale = 2^M1. # # 8.7 Go to Step 3. # @@ -6885,8 +6885,8 @@ # 1.4 Go to Step 10. # # Notes: The usual case should take the branches 1.1 -> 1.3 -> 2.# # However, it is conceivable |X| can be small very often # -# because EXPM1 is intended to evaluate exp(X)-1 # -# accurately when |X| is small. For further details on # +# because EXPM1 is intended to evaluate exp(X)-1 # +# accurately when |X| is small. For further details on # # the comparisons, see the notes on Step 1 of setox. # # # # Step 2. Calculate N = round-to-nearest-int( X * 64/log2 ). # @@ -6894,16 +6894,16 @@ # 2.2 Calculate J = N mod 64; so J = 0,1,2,..., # # or 63. # # 2.3 Calculate M = (N - J)/64; so N = 64M + J. # -# 2.4 Calculate the address of the stored value of # +# 2.4 Calculate the address of the stored value of # # 2^(J/64). # -# 2.5 Create the values Sc = 2^M and # +# 2.5 Create the values Sc = 2^M and # # OnebySc := -2^(-M). # # Notes: See the notes on Step 2 of setox. # # # # Step 3. Calculate X - N*log2/64. # -# 3.1 R := X + N*L1, # +# 3.1 R := X + N*L1, # # where L1 := single-precision(-log2/64). # -# 3.2 R := R + N*L2, # +# 3.2 R := R + N*L2, # # L2 := extended-precision(-log2/64 - L1).# # Notes: Applying the analysis of Step 3 of setox in this case # # shows that |R| <= 0.0055 (note that |X| <= 70 log2 in # @@ -6911,10 +6911,10 @@ # # # Step 4. Approximate exp(R)-1 by a polynomial # # p = R+R*R*(A1+R*(A2+R*(A3+R*(A4+R*(A5+R*A6))))) # -# Notes: a) In order to reduce memory access, the coefficients # -# are made as "short" as possible: A1 (which is 1/2), A5 # -# and A6 are single precision; A2, A3 and A4 are double # -# precision. # +# Notes: a) In order to reduce memory access, the coefficients # +# are made as "short" as possible: A1 (which is 1/2), A5 # +# and A6 are single precision; A2, A3 and A4 are double # +# precision. # # b) Even with the restriction above, # # |p - (exp(R)-1)| < |R| * 2^(-72.7) # # for all |R| <= 0.0055. # @@ -6929,9 +6929,9 @@ # where T and t are the stored values for 2^(J/64). # # Notes: 2^(J/64) is stored as T and t where T+t approximates # # 2^(J/64) to roughly 85 bits; T is in extended precision # -# and t is in single precision. Note also that T is # -# rounded to 62 bits so that the last two bits of T are # -# zero. The reason for such a special form is that T-1, # +# and t is in single precision. Note also that T is # +# rounded to 62 bits so that the last two bits of T are # +# zero. The reason for such a special form is that T-1, # # T-2, and T-8 will all be exact --- a property that will # # be exploited in Step 6 below. The total relative error # # in p is no bigger than 2^(-67.7) compared to the final # @@ -6946,7 +6946,7 @@ # 6.5 ans := (T + OnebySc) + (p + t). # # 6.6 Restore user FPCR. # # 6.7 Return ans := Sc * ans. Exit. # -# Notes: The various arrangements of the expressions give # +# Notes: The various arrangements of the expressions give # # accurate evaluations. # # # # Step 7. exp(X)-1 for |X| < 1/4. # @@ -6962,8 +6962,8 @@ # Return ans := ans*2^(140). Exit # # Notes: The idea is to return "X - tiny" under the user # # precision and rounding modes. To avoid unnecessary # -# inefficiency, we stay away from denormalized numbers # -# the best we can. For |X| >= 2^(-16312), the # +# inefficiency, we stay away from denormalized numbers # +# the best we can. For |X| >= 2^(-16312), the # # straightforward 8.2 generates the inexact exception as # # the case warrants. # # # @@ -6971,13 +6971,13 @@ # p = X + X*X*(B1 + X*(B2 + ... + X*B12)) # # Notes: a) In order to reduce memory access, the coefficients # # are made as "short" as possible: B1 (which is 1/2), B9 # -# to B12 are single precision; B3 to B8 are double # +# to B12 are single precision; B3 to B8 are double # # precision; and B2 is double extended. # # b) Even with the restriction above, # # |p - (exp(X)-1)| < |X| 2^(-70.6) # # for all |X| <= 0.251. # # Note that 0.251 is slightly bigger than 1/4. # -# c) To fully preserve accuracy, the polynomial is # +# c) To fully preserve accuracy, the polynomial is # # computed as # # X + ( S*B1 + Q ) where S = X*X and # # Q = X*S*(B2 + X*(B3 + ... + X*B12)) # @@ -6987,11 +6987,11 @@ # [ S*S*(B3 + S*(B5 + ... + S*B11)) ] # # # # Step 10. Calculate exp(X)-1 for |X| >= 70 log 2. # -# 10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all # +# 10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all # # practical purposes. Therefore, go to Step 1 of setox. # # 10.2 If X <= -70log2, exp(X) - 1 = -1 for all practical # -# purposes. # -# ans := -1 # +# purposes. # +# ans := -1 # # Restore user FPCR # # Return ans := ans + 2^(-126). Exit. # # Notes: 10.2 will always create an inexact and return -1 + tiny # @@ -7496,10 +7496,10 @@ # sgetexp(): returns the exponent portion of the input argument. # # The exponent bias is removed and the exponent value is # # returned as an extended precision number in fp0. # -# sgetexpd(): handles denormalized numbers. # +# sgetexpd(): handles denormalized numbers. # # # -# sgetman(): extracts the mantissa of the input argument. The # -# mantissa is converted to an extended precision number w/ # +# sgetman(): extracts the mantissa of the input argument. The # +# mantissa is converted to an extended precision number w/ # # an exponent of $3fff and is returned in fp0. The range of # # the result is [1.0 - 2.0). # # sgetmand(): handles denormalized numbers. # @@ -7573,9 +7573,9 @@ # fp0 = cosh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # -# rounded to double precision. The result is provably monotonic # +# rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM *********************************************************** # @@ -7592,7 +7592,7 @@ # # # 4. (16380 log2 < |X| <= 16480 log2) # # cosh(X) = sign(X) * exp(|X|)/2. # -# However, invoking exp(|X|) may cause premature # +# However, invoking exp(|X|) may cause premature # # overflow. Thus, we calculate sinh(X) as follows: # # Y := |X| # # Fact := 2**(16380) # @@ -7687,7 +7687,7 @@ # fp0 = sinh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -7805,7 +7805,7 @@ # fp0 = tanh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -7971,51 +7971,51 @@ # fp0 = log(X) or log(1+X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 2 ulps in 64 significant bit, # +# The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM *********************************************************** # # LOGN: # -# Step 1. If |X-1| < 1/16, approximate log(X) by an odd # -# polynomial in u, where u = 2(X-1)/(X+1). Otherwise, # +# Step 1. If |X-1| < 1/16, approximate log(X) by an odd # +# polynomial in u, where u = 2(X-1)/(X+1). Otherwise, # # move on to Step 2. # # # # Step 2. X = 2**k * Y where 1 <= Y < 2. Define F to be the first # -# seven significant bits of Y plus 2**(-7), i.e. # -# F = 1.xxxxxx1 in base 2 where the six "x" match those # +# seven significant bits of Y plus 2**(-7), i.e. # +# F = 1.xxxxxx1 in base 2 where the six "x" match those # # of Y. Note that |Y-F| <= 2**(-7). # # # -# Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a # +# Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a # # polynomial in u, log(1+u) = poly. # # # -# Step 4. Reconstruct # +# Step 4. Reconstruct # # log(X) = log( 2**k * Y ) = k*log(2) + log(F) + log(1+u) # # by k*log(2) + (log(F) + poly). The values of log(F) are # # calculated beforehand and stored in the program. # # # # lognp1: # -# Step 1: If |X| < 1/16, approximate log(1+X) by an odd # +# Step 1: If |X| < 1/16, approximate log(1+X) by an odd # # polynomial in u where u = 2X/(2+X). Otherwise, move on # # to Step 2. # # # # Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done # -# in Step 2 of the algorithm for LOGN and compute # -# log(1+X) as k*log(2) + log(F) + poly where poly # -# approximates log(1+u), u = (Y-F)/F. # +# in Step 2 of the algorithm for LOGN and compute # +# log(1+X) as k*log(2) + log(F) + poly where poly # +# approximates log(1+u), u = (Y-F)/F. # # # # Implementation Notes: # -# Note 1. There are 64 different possible values for F, thus 64 # +# Note 1. There are 64 different possible values for F, thus 64 # # log(F)'s need to be tabulated. Moreover, the values of # # 1/F are also tabulated so that the division in (Y-F)/F # # can be performed by a multiplication. # # # -# Note 2. In Step 2 of lognp1, in order to preserved accuracy, # -# the value Y-F has to be calculated carefully when # -# 1/2 <= X < 3/2. # +# Note 2. In Step 2 of lognp1, in order to preserved accuracy, # +# the value Y-F has to be calculated carefully when # +# 1/2 <= X < 3/2. # # # -# Note 3. To fully exploit the pipeline, polynomials are usually # +# Note 3. To fully exploit the pipeline, polynomials are usually # # separated into two parts evaluated independently before # # being added up. # # # @@ -8228,9 +8228,9 @@ cmp.l %d1,&0 # CHECK IF X IS NEGATIVE blt.w LOGNEG # LOG OF NEGATIVE ARGUMENT IS INVALID # X IS POSITIVE, CHECK IF X IS NEAR 1 - cmp.l %d1,&0x3ffef07d # IS X < 15/16? + cmp.l %d1,&0x3ffef07d # IS X < 15/16? blt.b LOGMAIN # YES - cmp.l %d1,&0x3fff8841 # IS X > 17/16? + cmp.l %d1,&0x3fff8841 # IS X > 17/16? ble.w LOGNEAR1 # NO LOGMAIN: @@ -8243,7 +8243,7 @@ #--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING #--LOG(1+U) CAN BE VERY EFFICIENT. #--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO -#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. +#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. #--GET K, Y, F, AND ADDRESS OF 1/F. asr.l &8,%d1 @@ -8458,10 +8458,10 @@ mov.l X(%a6),%d1 cmp.l %d1,&0 ble.w LP1NEG0 # LOG OF ZERO OR -VE - cmp.l %d1,&0x3ffe8000 # IS BOUNDS [1/2,3/2]? + cmp.l %d1,&0x3ffe8000 # IS BOUNDS [1/2,3/2]? blt.w LOGMAIN cmp.l %d1,&0x3fffc000 - bgt.w LOGMAIN + bgt.w LOGMAIN #--IF 1+Z > 3/2 OR 1+Z < 1/2, THEN X, WHICH IS ROUNDING 1+Z, #--CONTAINS AT LEAST 63 BITS OF INFORMATION OF Z. IN THAT CASE, #--SIMPLY INVOKE LOG(X) FOR LOG(1+Z). @@ -8562,7 +8562,7 @@ # a0 = pointer to extended precision input # # d0 = round precision,mode # # # -# OUTPUT ************************************************************** # +# OUTPUT ************************************************************** # # fp0 = arctanh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # @@ -8677,7 +8677,7 @@ # 2.1 Restore the user FPCR # # 2.2 Return ans := Y * INV_L10. # # # -# slog10: # +# slog10: # # # # Step 0. If X < 0, create a NaN and raise the invalid operation # # flag. Otherwise, save FPCR in D1; set FpCR to default. # @@ -8820,7 +8820,7 @@ # fp0 = 2**X or 10**X # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 2 ulps in 64 significant bit, # +# The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -8851,7 +8851,7 @@ # # # 4. Define r as # # r := ((X - N*L1)-N*L2) * L10 # -# where L1, L2 are the leading and trailing parts of # +# where L1, L2 are the leading and trailing parts of # # log_10(2)/64 and L10 is the natural log of 10. Then # # 10**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r). # # Go to expr to compute that expression. # @@ -8872,7 +8872,7 @@ # Exit. # # # # ExpBig # -# 1. Generate overflow by Huge * Huge if X > 0; otherwise, # +# 1. Generate overflow by Huge * Huge if X > 0; otherwise, # # generate underflow by Tiny * Tiny. # # # # ExpSm # @@ -9203,7 +9203,7 @@ ######################################################################### # sscale(): computes the destination operand scaled by the source # -# operand. If the absoulute value of the source operand is # +# operand. If the absoulute value of the source operand is # # >= 2^14, an overflow or underflow is returned. # # # # INPUT *************************************************************** # @@ -9265,7 +9265,7 @@ bge.b sok_norm2 # thank goodness no # the multiply factor that we're trying to create should be a denorm -# for the multiply to work. therefore, we're going to actually do a +# for the multiply to work. therefore, we're going to actually do a # multiply with a denorm which will cause an unimplemented data type # exception to be put into the machine which will be caught and corrected # later. we don't do this with the DENORMs above because this method @@ -9280,7 +9280,7 @@ clr.l -(%sp) # insert zero low mantissa mov.l %d1,-(%sp) # insert new high mantissa clr.l -(%sp) # make zero exponent - bra.b sok_norm_cont + bra.b sok_norm_cont sok_dnrm_32: subi.b &0x20,%d0 # get shift count lsr.l %d0,%d1 # make low mantissa longword @@ -9288,7 +9288,7 @@ clr.l -(%sp) # insert zero high mantissa clr.l -(%sp) # make zero exponent bra.b sok_norm_cont - + # the src will force the dst to a DENORM value or worse. so, let's # create an fp multiply that will create the result. sok_norm: @@ -9346,7 +9346,7 @@ # a1 = pointer to extended precision input Y # # d0 = round precision,mode # # # -# The input operands X and Y can be either normalized or # +# The input operands X and Y can be either normalized or # # denormalized. # # # # OUTPUT ************************************************************** # @@ -9355,7 +9355,7 @@ # ALGORITHM *********************************************************** # # # # Step 1. Save and strip signs of X and Y: signX := sign(X), # -# signY := sign(Y), X := |X|, Y := |Y|, # +# signY := sign(Y), X := |X|, Y := |Y|, # # signQ := signX EOR signY. Record whether MOD or REM # # is requested. # # # @@ -9375,7 +9375,7 @@ # # # Step 4. At this point, R = X - QY = MOD(X,Y). Set # # Last_Subtract := false (used in Step 7 below). If # -# MOD is requested, go to Step 6. # +# MOD is requested, go to Step 6. # # # # Step 5. R = MOD(X,Y), but REM(X,Y) is requested. # # 5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to # @@ -9701,8 +9701,8 @@ mov.b &FMUL_OP,%d1 # last inst is MUL fmul.x Scale(%pc),%fp0 # may cause underflow bra t_catch2 -# the '040 package did this apparently to see if the dst operand for the -# preceding fmul was a denorm. but, it better not have been since the +# the '040 package did this apparently to see if the dst operand for the +# preceding fmul was a denorm. but, it better not have been since the # algorithm just got done playing with fp0 and expected no exceptions # as a result. trust me... # bra t_avoid_unsupp # check for denorm as a @@ -9716,7 +9716,7 @@ Rem_is_0: #..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1) addq.l &1,%d3 - cmp.l %d0,&8 # D0 is j + cmp.l %d0,&8 # D0 is j bge.b Q_Big lsl.l %d0,%d3 @@ -9746,7 +9746,7 @@ ######################################################################### # XDEF **************************************************************** # -# tag(): return the optype of the input ext fp number # +# tag(): return the optype of the input ext fp number # # # # This routine is used by the 060FPLSP. # # # @@ -9755,13 +9755,13 @@ # # # INPUT *************************************************************** # # a0 = pointer to extended precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # If it's an unnormalized zero, alter the operand and force it # # to be a normal zero. # @@ -9829,15 +9829,15 @@ # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand. # -# # +# # # OUTPUT ************************************************************** # # fp0 = default DZ result. # # # # ALGORITHM *********************************************************** # -# Transcendental emulation for the 060FPLSP has detected that # +# Transcendental emulation for the 060FPLSP has detected that # # a DZ exception should occur for the instruction. If DZ is disabled, # # return the default result. # -# If DZ is enabled, the dst operand should be returned unscathed # +# If DZ is enabled, the dst operand should be returned unscathed # # in fp0 while fp1 is used to create a DZ exception so that the # # operating system can log that such an event occurred. # # # @@ -9898,7 +9898,7 @@ # # # INPUT *************************************************************** # # fp1 = source operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # fp1 = unchanged # @@ -9927,7 +9927,7 @@ # but use fp2 instead. return the dst operand unscathed in fp0. operr_ena: fmovm.x EXC_FP0(%a6),&0x80 # return fp0 unscathed - fmov.l USER_FPCR(%a6),%fpcr + fmov.l USER_FPCR(%a6),%fpcr fmovm.x &0x04,-(%sp) # save fp2 fmov.s &0x7f800000,%fp2 # load +INF fmul.s &0x00000000,%fp2 # +INF x 0 @@ -9956,7 +9956,7 @@ # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default underflow result # # # @@ -10003,8 +10003,8 @@ # (monadic) # # t_ovfl2(): Handle 060FPLSP overflow exception during # # emulation. result always positive. (dyadic) # -# t_ovfl_sc(): Handle 060FPLSP overflow exception during # -# emulation for "fscale". # +# t_ovfl_sc(): Handle 060FPLSP overflow exception during # +# emulation for "fscale". # # # # This routine is used by the 060FPLSP package. # # # @@ -10013,7 +10013,7 @@ # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default underflow result # # # @@ -10113,12 +10113,12 @@ # # # INPUT *************************************************************** # # fp0 = default underflow or overflow result # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # # ALGORITHM *********************************************************** # -# If an overflow or underflow occurred during the last # +# If an overflow or underflow occurred during the last # # instruction of transcendental 060FPLSP emulation, then it has already # # occurred and has been logged. Now we need to see if an inexact # # exception should occur. # @@ -10147,16 +10147,16 @@ # # # INPUT *************************************************************** # # fp0 = default result # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # # ALGORITHM *********************************************************** # -# The last instruction of transcendental emulation for the # +# The last instruction of transcendental emulation for the # # 060FPLSP should be inexact. So, if inexact is enabled, then we create # # the event here by adding a large and very small number together # # so that the operating system can log the event. # -# Must check, too, if the result was zero, in which case we just # +# Must check, too, if the result was zero, in which case we just # # set the FPSR bits and return. # # # ######################################################################### @@ -10178,7 +10178,7 @@ inx2_work: btst &inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled? bne.b inx2_work_ena # yes - rts + rts inx2_work_ena: fmov.l USER_FPCR(%a6),%fpcr # insert user's exceptions fmov.s &0x3f800000,%fp1 # load +1 @@ -10202,7 +10202,7 @@ # # # INPUT *************************************************************** # # a0 = pointer to extended precision input operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # @@ -10235,7 +10235,7 @@ # # sto_cos: -# This is used by fsincos library emulation. The correct +# This is used by fsincos library emulation. The correct # values are already in fp0 and fp1 so we do nothing here. # global sto_cos @@ -10485,7 +10485,7 @@ ######################################################################### global dst_zero dst_zero: - tst.b DST_EX(%a1) # get sign of dst operand + tst.b DST_EX(%a1) # get sign of dst operand bmi.b ld_mzero # if neg, load neg zero bra.b ld_pzero # load positive zero @@ -10494,7 +10494,7 @@ ######################################################################### global src_inf src_inf: - tst.b SRC_EX(%a0) # get sign of src operand + tst.b SRC_EX(%a0) # get sign of src operand bmi.b ld_minf # if negative branch # @@ -10520,7 +10520,7 @@ ######################################################################### global dst_inf dst_inf: - tst.b DST_EX(%a1) # get sign of dst operand + tst.b DST_EX(%a1) # get sign of dst operand bmi.b ld_minf # if negative branch bra.b ld_pinf @@ -10562,7 +10562,7 @@ ######################################################################### global src_one src_one: - tst.b SRC_EX(%a0) # check sign of source + tst.b SRC_EX(%a0) # check sign of source bmi.b ld_mone # @@ -10591,7 +10591,7 @@ ################################################################# global spi_2 spi_2: - tst.b SRC_EX(%a0) # check sign of source + tst.b SRC_EX(%a0) # check sign of source bmi.b ld_mpi2 # @@ -10618,7 +10618,7 @@ # # ssincosz(): When the src operand is ZERO, store a one in the -# cosine register and return a ZERO in fp0 w/ the same sign +# cosine register and return a ZERO in fp0 w/ the same sign # as the src operand. # global ssincosz @@ -10646,7 +10646,7 @@ # # ssincosqnan(): When the src operand is a QNAN, store the QNAN in the cosine -# register and branch to the src QNAN routine. +# register and branch to the src QNAN routine. # global ssincosqnan ssincosqnan: @@ -10827,7 +10827,7 @@ # a0 = pointer fp extended precision operand to normalize # # # # OUTPUT ************************************************************** # -# d0 = number of bit positions the mantissa was shifted # +# d0 = number of bit positions the mantissa was shifted # # a0 = the input operand's mantissa is normalized; the exponent # # is unchanged. # # # @@ -10854,7 +10854,7 @@ mov.l %d1, FTEMP_LO(%a0) # store new lo(man) mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -10869,7 +10869,7 @@ clr.l FTEMP_LO(%a0) # lo(man) is now zero mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -10974,7 +10974,7 @@ # whole mantissa is zero so this UNNORM is actually a zero # unnorm_zero: - and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero + and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero mov.b &ZERO, %d0 # fix optype tag rts diff -Nru a/arch/m68k/ifpsp060/src/fpsp.S b/arch/m68k/ifpsp060/src/fpsp.S --- a/arch/m68k/ifpsp060/src/fpsp.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/ifpsp060/src/fpsp.S Tue May 18 23:38:09 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -90,7 +90,7 @@ bra.l _fpsp_effadd short 0x0000 - space 56 + space 56 ############################################################### global _fpsp_done @@ -324,33 +324,33 @@ set EXC_D1, EXC_DREGS+(1*4) set EXC_D0, EXC_DREGS+(0*4) -set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 -set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 -set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) +set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 +set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 +set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) -set FP_SCR1, LV+80 # fp scratch 1 -set FP_SCR1_EX, FP_SCR1+0 +set FP_SCR1, LV+80 # fp scratch 1 +set FP_SCR1_EX, FP_SCR1+0 set FP_SCR1_SGN, FP_SCR1+2 -set FP_SCR1_HI, FP_SCR1+4 -set FP_SCR1_LO, FP_SCR1+8 +set FP_SCR1_HI, FP_SCR1+4 +set FP_SCR1_LO, FP_SCR1+8 -set FP_SCR0, LV+68 # fp scratch 0 -set FP_SCR0_EX, FP_SCR0+0 +set FP_SCR0, LV+68 # fp scratch 0 +set FP_SCR0_EX, FP_SCR0+0 set FP_SCR0_SGN, FP_SCR0+2 -set FP_SCR0_HI, FP_SCR0+4 -set FP_SCR0_LO, FP_SCR0+8 +set FP_SCR0_HI, FP_SCR0+4 +set FP_SCR0_LO, FP_SCR0+8 -set FP_DST, LV+56 # fp destination operand -set FP_DST_EX, FP_DST+0 +set FP_DST, LV+56 # fp destination operand +set FP_DST_EX, FP_DST+0 set FP_DST_SGN, FP_DST+2 -set FP_DST_HI, FP_DST+4 -set FP_DST_LO, FP_DST+8 +set FP_DST_HI, FP_DST+4 +set FP_DST_LO, FP_DST+8 -set FP_SRC, LV+44 # fp source operand -set FP_SRC_EX, FP_SRC+0 +set FP_SRC, LV+44 # fp source operand +set FP_SRC_EX, FP_SRC+0 set FP_SRC_SGN, FP_SRC+2 -set FP_SRC_HI, FP_SRC+4 -set FP_SRC_LO, FP_SRC+8 +set FP_SRC_HI, FP_SRC+4 +set FP_SRC_LO, FP_SRC+8 set USER_FPIAR, LV+40 # FP instr address register @@ -374,7 +374,7 @@ set EXC_TEMP, LV+16 # temporary space set DTAG, LV+15 # destination operand type -set STAG, LV+14 # source operand type +set STAG, LV+14 # source operand type set SPCOND_FLG, LV+10 # flag: special case (see below) @@ -389,17 +389,17 @@ # Helpful macros set FTEMP, 0 # offsets within an -set FTEMP_EX, 0 # extended precision +set FTEMP_EX, 0 # extended precision set FTEMP_SGN, 2 # value saved in memory. -set FTEMP_HI, 4 -set FTEMP_LO, 8 +set FTEMP_HI, 4 +set FTEMP_LO, 8 set FTEMP_GRS, 12 set LOCAL, 0 # offsets within an -set LOCAL_EX, 0 # extended precision +set LOCAL_EX, 0 # extended precision set LOCAL_SGN, 2 # value saved in memory. -set LOCAL_HI, 4 -set LOCAL_LO, 8 +set LOCAL_HI, 4 +set LOCAL_LO, 8 set LOCAL_GRS, 12 set DST, 0 # offsets within an @@ -489,17 +489,17 @@ ###################################### set dzinf_mask, inf_mask+dz_mask+adz_mask set opnan_mask, nan_mask+operr_mask+aiop_mask -set nzi_mask, 0x01ffffff #clears N, Z, and I +set nzi_mask, 0x01ffffff #clears N, Z, and I set unfinx_mask, unfl_mask+inex2_mask+aunfl_mask+ainex_mask set unf2inx_mask, unfl_mask+inex2_mask+ainex_mask set ovfinx_mask, ovfl_mask+inex2_mask+aovfl_mask+ainex_mask set inx1a_mask, inex1_mask+ainex_mask set inx2a_mask, inex2_mask+ainex_mask -set snaniop_mask, nan_mask+snan_mask+aiop_mask +set snaniop_mask, nan_mask+snan_mask+aiop_mask set snaniop2_mask, snan_mask+aiop_mask set naniop_mask, nan_mask+aiop_mask set neginf_mask, neg_mask+inf_mask -set infaiop_mask, inf_mask+aiop_mask +set infaiop_mask, inf_mask+aiop_mask set negz_mask, neg_mask+z_mask set opaop_mask, operr_mask+aiop_mask set unfl_inx_mask, unfl_mask+aunfl_mask+ainex_mask @@ -528,8 +528,8 @@ set mantissalen, 64 # length of mantissa in bits set BYTE, 1 # len(byte) == 1 byte -set WORD, 2 # len(word) == 2 bytes -set LONG, 4 # len(longword) == 2 bytes +set WORD, 2 # len(word) == 2 bytes +set LONG, 4 # len(longword) == 2 bytes set BSUN_VEC, 0xc0 # bsun vector offset set INEX_VEC, 0xc4 # inexact vector offset @@ -599,7 +599,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Ovfl exception stack frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # Overflow Exception enabled: # # - The system stack is unchanged # @@ -610,24 +610,24 @@ # # # ALGORITHM *********************************************************** # # On the 060, if an FP overflow is present as the result of any # -# instruction, the 060 will take an overflow exception whether the # -# exception is enabled or disabled in the FPCR. For the disabled case, # +# instruction, the 060 will take an overflow exception whether the # +# exception is enabled or disabled in the FPCR. For the disabled case, # # This handler emulates the instruction to determine what the correct # # default result should be for the operation. This default result is # -# then stored in either the FP regfile, data regfile, or memory. # -# Finally, the handler exits through the "callout" _fpsp_done() # +# then stored in either the FP regfile, data regfile, or memory. # +# Finally, the handler exits through the "callout" _fpsp_done() # # denoting that no exceptional conditions exist within the machine. # -# If the exception is enabled, then this handler must create the # +# If the exception is enabled, then this handler must create the # # exceptional operand and plave it in the fsave state frame, and store # -# the default result (only if the instruction is opclass 3). For # -# exceptions enabled, this handler must exit through the "callout" # +# the default result (only if the instruction is opclass 3). For # +# exceptions enabled, this handler must exit through the "callout" # # _real_ovfl() so that the operating system enabled overflow handler # # can handle this case. # -# Two other conditions exist. First, if overflow was disabled # -# but the inexact exception was enabled, this handler must exit # +# Two other conditions exist. First, if overflow was disabled # +# but the inexact exception was enabled, this handler must exit # # through the "callout" _real_inex() regardless of whether the result # # was inexact. # -# Also, in the case of an opclass three instruction where # +# Also, in the case of an opclass three instruction where # # overflow was disabled and the trace exception was enabled, this # # handler must exit through the "callout" _real_trace(). # # # @@ -642,9 +642,9 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) @@ -668,7 +668,7 @@ bsr.l set_tag_x # tag the operand type mov.b %d0,STAG(%a6) # maybe NORM,DENORM -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # that can pass through fpsp_ovfl(). remember that fcmp, ftst, and fsincos # will never take this exception. btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? @@ -741,7 +741,7 @@ fovfl_ovfl_on: fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack - mov.w &0xe005,2+FP_SRC(%a6) # save exc status + mov.w &0xe005,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -757,10 +757,10 @@ # we must jump to real_inex(). fovfl_inex_on: - fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack + fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack mov.b &0xc4,1+EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # save exc status + mov.w &0xe001,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -811,7 +811,7 @@ btst &0x7,(%sp) # is trace on? beq.l _fpsp_done # no - fmov.l %fpiar,0x8(%sp) # "Current PC" is in FPIAR + fmov.l %fpiar,0x8(%sp) # "Current PC" is in FPIAR mov.w &0x2024,0x6(%sp) # stk fmt = 0x2; voff = 0x024 bra.l _real_trace @@ -839,7 +839,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Unfl exception stack frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # Underflow Exception enabled: # # - The system stack is unchanged # @@ -850,24 +850,24 @@ # # # ALGORITHM *********************************************************** # # On the 060, if an FP underflow is present as the result of any # -# instruction, the 060 will take an underflow exception whether the # -# exception is enabled or disabled in the FPCR. For the disabled case, # +# instruction, the 060 will take an underflow exception whether the # +# exception is enabled or disabled in the FPCR. For the disabled case, # # This handler emulates the instruction to determine what the correct # # default result should be for the operation. This default result is # -# then stored in either the FP regfile, data regfile, or memory. # -# Finally, the handler exits through the "callout" _fpsp_done() # +# then stored in either the FP regfile, data regfile, or memory. # +# Finally, the handler exits through the "callout" _fpsp_done() # # denoting that no exceptional conditions exist within the machine. # -# If the exception is enabled, then this handler must create the # +# If the exception is enabled, then this handler must create the # # exceptional operand and plave it in the fsave state frame, and store # -# the default result (only if the instruction is opclass 3). For # -# exceptions enabled, this handler must exit through the "callout" # +# the default result (only if the instruction is opclass 3). For # +# exceptions enabled, this handler must exit through the "callout" # # _real_unfl() so that the operating system enabled overflow handler # # can handle this case. # -# Two other conditions exist. First, if underflow was disabled # -# but the inexact exception was enabled and the result was inexact, # +# Two other conditions exist. First, if underflow was disabled # +# but the inexact exception was enabled and the result was inexact, # # this handler must exit through the "callout" _real_inex(). # # was inexact. # -# Also, in the case of an opclass three instruction where # +# Also, in the case of an opclass three instruction where # # underflow was disabled and the trace exception was enabled, this # # handler must exit through the "callout" _real_trace(). # # # @@ -882,12 +882,12 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction - mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) + mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -906,13 +906,13 @@ bsr.l set_tag_x # tag the operand type mov.b %d0,STAG(%a6) # maybe NORM,DENORM -# bit five of the fp ext word separates the monadic and dyadic operations +# bit five of the fp ext word separates the monadic and dyadic operations # that can pass through fpsp_unfl(). remember that fcmp, and ftst # will never take this exception. btst &0x5,1+EXC_CMDREG(%a6) # is op monadic or dyadic? beq.b funfl_extract # monadic -# now, what's left that's not dyadic is fsincos. we can distinguish it +# now, what's left that's not dyadic is fsincos. we can distinguish it # from all dyadics by the '0110xxx pattern btst &0x4,1+EXC_CMDREG(%a6) # is op an fsincos? bne.b funfl_extract # yes @@ -963,7 +963,7 @@ # (0x00000000_80000000_00000000), then the machine will take an # underflow exception. Since this is incorrect, we need to check # if our emulation, after re-doing the operation, decided that -# no underflow was called for. We do these checks only in +# no underflow was called for. We do these checks only in # funfl_{unfl,inex}_on() because w/ both exceptions disabled, this # special case will simply exit gracefully with the correct result. @@ -1003,7 +1003,7 @@ funfl_unfl_on2: fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack - mov.w &0xe003,2+FP_SRC(%a6) # save exc status + mov.w &0xe003,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -1022,7 +1022,7 @@ # The `060 FPU multiplier hardware is such that if the result of a # multiply operation is the smallest possible normalized number # (0x00000000_80000000_00000000), then the machine will take an -# underflow exception. +# underflow exception. # But, whether bogus or not, if inexact is enabled AND it occurred, # then we have to branch to real_inex. @@ -1031,10 +1031,10 @@ funfl_inex_on2: - fmovm.x &0x40,FP_SRC(%a6) # save EXOP to stack + fmovm.x &0x40,FP_SRC(%a6) # save EXOP to stack mov.b &0xc4,1+EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # save exc status + mov.w &0xe001,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -1120,7 +1120,7 @@ # INPUT *************************************************************** # # - The system stack contains the "Unimp Data Type" stk frame # # - The fsave frame contains the ssrc op (for UNNORM/DENORM) # -# # +# # # OUTPUT ************************************************************** # # If Inexact exception (opclass 3): # # - The system stack is changed to an Inexact exception stk frame # @@ -1139,12 +1139,12 @@ # # # ALGORITHM *********************************************************** # # Two main instruction types can enter here: (1) DENORM or UNNORM # -# unimplemented data types. These can be either opclass 0,2 or 3 # +# unimplemented data types. These can be either opclass 0,2 or 3 # # instructions, and (2) PACKED unimplemented data format instructions # # also of opclasses 0,2, or 3. # # For UNNORM/DENORM opclass 0 and 2, the handler fetches the src # # operand from the fsave state frame and the dst operand (if dyadic) # -# from the FP register file. The instruction is then emulated by # +# from the FP register file. The instruction is then emulated by # # choosing an emulation routine from a table of routines indexed by # # instruction type. Once the instruction has been emulated and result # # saved, then we check to see if any enabled exceptions resulted from # @@ -1166,7 +1166,7 @@ # (a Trace stack frame must be created here, too). If an FP exception # # should occur, then we must create an exception stack frame of that # # type and jump to either _real_snan(), _real_operr(), _real_inex(), # -# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 # +# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 # # emulation is performed in a similar manner. # # # ######################################################################### @@ -1178,7 +1178,7 @@ # ***************** # * EA * # pre-instruction * * -# ***************** ***************** +# ***************** ***************** # * 0x0 * 0x0dc * * 0x3 * 0x0dc * # ***************** ***************** # * Next * * Next * @@ -1207,9 +1207,9 @@ fsave FP_SRC(%a6) # save fp state - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack btst &0x5,EXC_SR(%a6) # user or supervisor mode? bne.b fu_s @@ -1258,7 +1258,7 @@ fmov.l &0x0,%fpsr # Opclass two w/ memory-to-fpn operation will have an incorrect extended -# precision format if the src format was single or double and the +# precision format if the src format was single or double and the # source data type was an INF, NAN, DENORM, or UNNORM lea FP_SRC(%a6),%a0 # pass ptr to input bsr.l fix_skewed_ops @@ -1277,7 +1277,7 @@ bfextu EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # at this point btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? beq.b fu_extract # monadic @@ -1308,13 +1308,13 @@ # # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : all dyadic ops # OPERR : fsqrt(-NORM) # OVFL : all except ftst,fcmp # UNFL : all except ftst,fcmp # DZ : fdiv -# INEX2 : all except ftst,fcmp +# INEX2 : all except ftst,fcmp # INEX1 : none (packed doesn't go through here) # @@ -1351,16 +1351,16 @@ # # No exceptions occurred that were also enabled. Now: # -# if (OVFL && ovfl_disabled && inexact_enabled) { +# if (OVFL && ovfl_disabled && inexact_enabled) { # branch to _real_inex() (even if the result was exact!); -# } else { +# } else { # save the result in the proper fp reg (unless the op is fcmp or ftst); # return; -# } +# } # btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? beq.b fu_in_cont # no - + fu_in_ovflchk: btst &inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled? beq.b fu_in_cont # no @@ -1380,7 +1380,7 @@ # } else { # restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU; # } -# +# fu_in_exc: subi.l &24,%d0 # fix offset to be 0-8 cmpi.b %d0,&0x6 # is exception INEX? (6) @@ -1393,7 +1393,7 @@ bne.w fu_in_exc_ovfl # yes # here, we insert the correct fsave status value into the fsave frame for the -# corresponding exception. the operand in the fsave frame should be the original +# corresponding exception. the operand in the fsave frame should be the original # src operand. fu_in_exc_exit: mov.l %d0,-(%sp) # save d0 @@ -1424,8 +1424,8 @@ bra.b fu_in_exc_exit # If the input operand to this operation was opclass two and a single -# or double precision denorm, inf, or nan, the operand needs to be -# "corrected" in order to have the proper equivalent extended precision +# or double precision denorm, inf, or nan, the operand needs to be +# "corrected" in order to have the proper equivalent extended precision # number. global fix_skewed_ops fix_skewed_ops: @@ -1453,7 +1453,7 @@ bsr.l norm # normalize mantissa neg.w %d0 # -shft amt addi.w &0x3f81,%d0 # adjust new exponent - andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent + andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent or.w %d0,LOCAL_EX(%a0) # insert new exponent rts @@ -1462,7 +1462,7 @@ rts fso_infnan: - andi.b &0x7f,LOCAL_HI(%a0) # clear j-bit + andi.b &0x7f,LOCAL_HI(%a0) # clear j-bit ori.w &0x7fff,LOCAL_EX(%a0) # make exponent = $7fff rts @@ -1485,7 +1485,7 @@ bsr.l norm # normalize mantissa neg.w %d0 # -shft amt addi.w &0x3c01,%d0 # adjust new exponent - andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent + andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent or.w %d0,LOCAL_EX(%a0) # insert new exponent rts @@ -1537,13 +1537,13 @@ bsr.l fout # call fmove out routine # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : none # OPERR : fmove.{b,w,l} out of large UNNORM # OVFL : fmove.{s,d} # UNFL : fmove.{s,d,x} # DZ : none -# INEX2 : all +# INEX2 : all # INEX1 : none (packed doesn't travel through here) # determine the highest priority exception(if any) set by the @@ -1555,7 +1555,7 @@ mov.l EXC_A6(%a6),(%a6) # in case a6 changed -# on extended precision opclass three instructions using pre-decrement or +# on extended precision opclass three instructions using pre-decrement or # post-increment addressing mode, the address register is not updated. is the # address register was the stack pointer used from user mode, then let's update # it here. if it was used from supervisor mode, then we have to handle this @@ -1579,7 +1579,7 @@ bra.l _fpsp_done # is the ea mode pre-decrement of the stack pointer from supervisor mode? -# ("fmov.x fpm,-(a7)") if so, +# ("fmov.x fpm,-(a7)") if so, fu_out_done_s: cmpi.b SPCOND_FLG(%a6),&mda7_flg bne.b fu_out_done_cont @@ -1617,7 +1617,7 @@ bfffo %d0{&24:&8},%d0 # find highest priority exception bne.b fu_out_exc # there is at least one set -# no exceptions were set. +# no exceptions were set. # if a disabled overflow occurred and inexact was enabled but the result # was exact, then a branch to _real_inex() is made. btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? @@ -1634,7 +1634,7 @@ # from FPIAR and put it in the trace stack frame then jump to _real_trace(). # # UNSUPP FRAME TRACE FRAME -# ***************** ***************** +# ***************** ***************** # * EA * * Current * # * * * PC * # ***************** ***************** @@ -1651,7 +1651,7 @@ fmov.l %fpiar,0x8(%sp) bra.l _real_trace -# an exception occurred and that exception was enabled. +# an exception occurred and that exception was enabled. fu_out_exc: subi.l &24,%d0 # fix offset to be 0-8 @@ -1663,15 +1663,15 @@ swbeg &0x8 tbl_fu_out: short tbl_fu_out - tbl_fu_out # BSUN can't happen - short tbl_fu_out - tbl_fu_out # SNAN can't happen + short tbl_fu_out - tbl_fu_out # SNAN can't happen short fu_operr - tbl_fu_out # OPERR - short fu_ovfl - tbl_fu_out # OVFL - short fu_unfl - tbl_fu_out # UNFL + short fu_ovfl - tbl_fu_out # OVFL + short fu_unfl - tbl_fu_out # UNFL short tbl_fu_out - tbl_fu_out # DZ can't happen - short fu_inex - tbl_fu_out # INEX2 + short fu_inex - tbl_fu_out # INEX2 short tbl_fu_out - tbl_fu_out # INEX1 won't make it here -# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just +# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just # frestore it. fu_snan: fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0/fp1 @@ -1722,7 +1722,7 @@ # underflow can happen for extended precision. extended precision opclass # three instruction exceptions don't update the stack pointer. so, if the # exception occurred from user mode, then simply update a7 and exit normally. -# if the exception occurred from supervisor mode, check if +# if the exception occurred from supervisor mode, check if fu_unfl: mov.l EXC_A6(%a6),(%a6) # restore a6 @@ -1731,7 +1731,7 @@ mov.l EXC_A7(%a6),%a0 # restore a7 whether we need mov.l %a0,%usp # to or not... - + fu_unfl_cont: fmovm.x &0x40,FP_SRC(%a6) # save EXOP to the stack @@ -1822,7 +1822,7 @@ bfextu EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # at this point btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? beq.b fu_extract_p # monadic @@ -1853,13 +1853,13 @@ # # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : all dyadic ops # OPERR : fsqrt(-NORM) # OVFL : all except ftst,fcmp # UNFL : all except ftst,fcmp # DZ : fdiv -# INEX2 : all except ftst,fcmp +# INEX2 : all except ftst,fcmp # INEX1 : all # @@ -1929,16 +1929,16 @@ # # No exceptions occurred that were also enabled. Now: # -# if (OVFL && ovfl_disabled && inexact_enabled) { +# if (OVFL && ovfl_disabled && inexact_enabled) { # branch to _real_inex() (even if the result was exact!); -# } else { +# } else { # save the result in the proper fp reg (unless the op is fcmp or ftst); # return; -# } +# } # btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? beq.w fu_in_cont_p # no - + fu_in_ovflchk_p: btst &inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled? beq.w fu_in_cont_p # no @@ -1958,7 +1958,7 @@ # } else { # restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU; # } -# +# fu_in_exc_p: subi.l &24,%d0 # fix offset to be 0-8 cmpi.b %d0,&0x6 # is exception INEX? (6 or 7) @@ -1971,7 +1971,7 @@ bne.w fu_in_exc_ovfl_p # yes # here, we insert the correct fsave status value into the fsave frame for the -# corresponding exception. the operand in the fsave frame should be the original +# corresponding exception. the operand in the fsave frame should be the original # src operand. # as a reminder for future predicted pain and agony, we are passing in fsave the # "non-skewed" operand for cases of sgl and dbl src INFs,NANs, and DENORMs. @@ -2034,21 +2034,21 @@ bne.b fu_trace_p # yes bra.l _fpsp_done # exit to os - + # -# The opclass two PACKED instruction that took an "Unimplemented Data Type" -# exception was being traced. Make the "current" PC the FPIAR and put it in the +# The opclass two PACKED instruction that took an "Unimplemented Data Type" +# exception was being traced. Make the "current" PC the FPIAR and put it in the # trace stack frame then jump to _real_trace(). -# +# # UNSUPP FRAME TRACE FRAME # ***************** ***************** # * EA * * Current * # * * * PC * # ***************** ***************** -# * 0x2 * 0x0dc * * 0x2 * 0x024 * +# * 0x2 * 0x0dc * * 0x2 * 0x024 * # ***************** ***************** # * Next * * Next * -# * PC * * PC * +# * PC * * PC * # ***************** ***************** # * SR * * SR * # ***************** ***************** @@ -2094,13 +2094,13 @@ bsr.l fout # call fmove out routine # Exceptions in order of precedence: -# BSUN : no +# BSUN : no # SNAN : yes # OPERR : if ((k_factor > +17) || (dec. exp exceeds 3 digits)) # OVFL : no # UNFL : no # DZ : no -# INEX2 : yes +# INEX2 : yes # INEX1 : no # determine the highest priority exception(if any) set by the @@ -2164,7 +2164,7 @@ mov.l EXC_A6(%a6),(%a6) # restore a6 -# an exception occurred and that exception was enabled. +# an exception occurred and that exception was enabled. # the only exception possible on packed move out are INEX, OPERR, and SNAN. fu_out_exc_p: cmpi.b %d0,&0x1a @@ -2191,7 +2191,7 @@ movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.w &0x30d8,EXC_VOFF(%a6) # vector offset = 0xd0 - mov.w &0xe006,2+FP_SRC(%a6) # set fsave status + mov.w &0xe006,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2231,7 +2231,7 @@ movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.w &0x30d0,EXC_VOFF(%a6) # vector offset = 0xd0 - mov.w &0xe004,2+FP_SRC(%a6) # set fsave status + mov.w &0xe004,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2270,8 +2270,8 @@ fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 - mov.w &0x30c4,EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # set fsave status + mov.w &0x30c4,EXC_VOFF(%a6) # vector offset = 0xc4 + mov.w &0xe001,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2312,7 +2312,7 @@ andi.w &0x7fff,%d0 # strip sign beq.b funimp_skew_sgl_not cmpi.w %d0,&0x3f80 - bgt.b funimp_skew_sgl_not + bgt.b funimp_skew_sgl_not neg.w %d0 # make exponent negative addi.w &0x3f81,%d0 # find amt to shift mov.l FP_SRC_HI(%a6),%d1 # fetch DENORM hi(man) @@ -2329,7 +2329,7 @@ andi.w &0x7fff,%d0 # strip sign beq.b funimp_skew_dbl_not cmpi.w %d0,&0x3c00 - bgt.b funimp_skew_dbl_not + bgt.b funimp_skew_dbl_not tst.b FP_SRC_EX(%a6) # make "internal format" smi.b 0x2+FP_SRC(%a6) @@ -2362,7 +2362,7 @@ ######################################################################### # XDEF **************************************************************** # # _fpsp_effadd(): 060FPSP entry point for FP "Unimplemented # -# effective address" exception. # +# effective address" exception. # # # # This handler should be the first code executed upon taking the # # FP Unimplemented Effective Address exception in an operating # @@ -2387,7 +2387,7 @@ # # # INPUT *************************************************************** # # - The system stack contains the "Unimplemented " stk frame # -# # +# # # OUTPUT ************************************************************** # # If access error: # # - The system stack is changed to an access error stack frame # @@ -2408,17 +2408,17 @@ # For immediate data operations, the data is read in w/ a # # _mem_read() "callout", converted to FP binary (if packed), and used # # as the source operand to the instruction specified by the instruction # -# word. If no FP exception should be reported ads a result of the # +# word. If no FP exception should be reported ads a result of the # # emulation, then the result is stored to the destination register and # # the handler exits through _fpsp_done(). If an enabled exc has been # # signalled as a result of emulation, then an fsave state frame # # corresponding to the FP exception type must be entered into the 060 # -# FPU before exiting. In either the enabled or disabled cases, we # +# FPU before exiting. In either the enabled or disabled cases, we # # must also check if a Trace exception is pending, in which case, we # # must create a Trace exception stack frame from the current exception # # stack frame. If no Trace is pending, we simply exit through # # _fpsp_done(). # -# For "fmovm.x", call the routine fmovm_dynamic() which will # +# For "fmovm.x", call the routine fmovm_dynamic() which will # # decode and emulate the instruction. No FP exceptions can be pending # # as a result of this operation emulation. A Trace exception can be # # pending, though, which means the current stack frame must be changed # @@ -2437,11 +2437,11 @@ # before the "FPU disabled" exception, but the "FPU disabled" exception # # has higher priority, we check the disabled bit in the PCR. If set, # # then we must create an 8 word "FPU disabled" exception stack frame # -# from the current 4 word exception stack frame. This includes # -# reproducing the effective address of the instruction to put on the # +# from the current 4 word exception stack frame. This includes # +# reproducing the effective address of the instruction to put on the # # new stack frame. # # # -# In the process of all emulation work, if a _mem_read() # +# In the process of all emulation work, if a _mem_read() # # "callout" returns a failing result indicating an access error, then # # we must create an access error stack frame from the current stack # # frame. This information includes a faulting address and a fault- # @@ -2482,18 +2482,18 @@ # # here, we will have: -# fabs fdabs fsabs facos fmod +# fabs fdabs fsabs facos fmod # fadd fdadd fsadd fasin frem -# fcmp fatan fscale +# fcmp fatan fscale # fdiv fddiv fsdiv fatanh fsin # fint fcos fsincos # fintrz fcosh fsinh # fmove fdmove fsmove fetox ftan -# fmul fdmul fsmul fetoxm1 ftanh +# fmul fdmul fsmul fetoxm1 ftanh # fneg fdneg fsneg fgetexp ftentox # fsgldiv fgetman ftwotox -# fsglmul flog10 -# fsqrt flog2 +# fsglmul flog10 +# fsqrt flog2 # fsub fdsub fssub flogn # ftst flognp1 # which can all use f.{x,p} @@ -2585,8 +2585,8 @@ # store a result. then, only fcmp will branch back and pick up a dst operand. st STORE_FLG(%a6) # don't store a final result btst &0x1,1+EXC_CMDREG(%a6) # is operation fcmp? - beq.b iea_op_loaddst # yes - + beq.b iea_op_loaddst # yes + iea_op_extract: clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass: rnd mode,prec @@ -2659,7 +2659,7 @@ btst &inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled? beq.b iea_op_store # no bra.b iea_op_exc_ovfl # yes - + # an enabled exception occurred. we have to insert the exception type back into # the machine. iea_op_exc: @@ -2698,7 +2698,7 @@ fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 - frestore FP_SRC(%a6) # restore exceptional state + frestore FP_SRC(%a6) # restore exceptional state unlk %a6 # unravel the frame @@ -2706,12 +2706,12 @@ bne.b iea_op_trace # yes bra.l _fpsp_done # exit to os - + # # The opclass two instruction that took an "Unimplemented Effective Address" # exception was being traced. Make the "current" PC the FPIAR and put it in # the trace stack frame then jump to _real_trace(). -# +# # UNIMP EA FRAME TRACE FRAME # ***************** ***************** # * 0x0 * 0x0f0 * * Current * @@ -2744,7 +2744,7 @@ iea_fmovm_data_u: mov.l %usp,%a0 - mov.l %a0,EXC_A7(%a6) # store current a7 + mov.l %a0,EXC_A7(%a6) # store current a7 bsr.l fmovm_dynamic # do dynamic fmovm mov.l EXC_A7(%a6),%a0 # load possibly new a7 mov.l %a0,%usp # update usp @@ -2775,10 +2775,10 @@ lea (EXC_SR,%a6,%d0),%a0 mov.l %a0,EXC_SR(%a6) - + fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 mov.l (%sp)+,%sp @@ -2792,15 +2792,15 @@ lea (EXC_SR-0x4,%a6,%d0),%a0 mov.l %a0,EXC_SR(%a6) - + fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 mov.l (%sp)+,%sp bra.l _real_trace - + # right now, d1 = size and d0 = the strg. iea_fmovm_data_predec: mov.b %d1,EXC_VOFF(%a6) # store strg @@ -2808,7 +2808,7 @@ fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.l (%a6),-(%sp) # make a copy of a6 mov.l %d0,-(%sp) # save d0 @@ -2910,10 +2910,10 @@ # # The control reg instruction that took an "Unimplemented Effective Address" -# exception was being traced. The "Current PC" for the trace frame is the +# exception was being traced. The "Current PC" for the trace frame is the # PC stacked for Unimp EA. The "Next PC" is in EXC_EXTWPTR. # After fixing the stack frame, jump to _real_trace(). -# +# # UNIMP EA FRAME TRACE FRAME # ***************** ***************** # * 0x0 * 0x0f0 * * Current * @@ -3066,7 +3066,7 @@ # _fpsp_operr(): 060FPSP entry point for FP Operr exception. # # # # This handler should be the first code executed upon taking the # -# FP Operand Error exception in an operating system. # +# FP Operand Error exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3079,7 +3079,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Operr exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # No access error: # # - The system stack is unchanged # @@ -3088,16 +3088,16 @@ # ALGORITHM *********************************************************** # # In a system where the FP Operr exception is enabled, the goal # # is to get to the handler specified at _real_operr(). But, on the 060, # -# for opclass zero and two instruction taking this exception, the # +# for opclass zero and two instruction taking this exception, the # # input operand in the fsave frame may be incorrect for some cases # # and needs to be corrected. This handler calls fix_skewed_ops() to # # do just this and then exits through _real_operr(). # # For opclass 3 instructions, the 060 doesn't store the default # # operr result out to memory or data register file as it should. # # This code must emulate the move out before finally exiting through # -# _real_inex(). The move out, if to memory, is performed using # +# _real_inex(). The move out, if to memory, is performed using # # _mem_write() "callout" routines that may return a failing result. # -# In this special case, the handler must exit through facc_out() # +# In this special case, the handler must exit through facc_out() # # which creates an access error stack frame from the current operr # # stack frame. # # # @@ -3110,13 +3110,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3130,7 +3130,7 @@ # here, we simply see if the operand in the fsave frame needs to be "unskewed". # this would be the case for opclass two operations with a source infinity or -# denorm operand in the sgl or dbl format. NANs also become skewed, but can't +# denorm operand in the sgl or dbl format. NANs also become skewed, but can't # cause an operr so we don't need to check for them here. lea FP_SRC(%a6),%a0 # pass: ptr to src op bsr.l fix_skewed_ops # fix src op @@ -3201,7 +3201,7 @@ short tbl_operr - tbl_operr # dbl prec shouldn't happen short foperr_out_b - tbl_operr # byte integer short tbl_operr - tbl_operr # packed won't enter here - + foperr_out_b: mov.b L_SCR1(%a6),%d0 # load positive default result cmpi.b %d1,&0x7 # is mode a data reg? @@ -3255,7 +3255,7 @@ # _fpsp_snan(): 060FPSP entry point for FP SNAN exception. # # # # This handler should be the first code executed upon taking the # -# FP Signalling NAN exception in an operating system. # +# FP Signalling NAN exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3269,7 +3269,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP SNAN exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # No access error: # # - The system stack is unchanged # @@ -3278,16 +3278,16 @@ # ALGORITHM *********************************************************** # # In a system where the FP SNAN exception is enabled, the goal # # is to get to the handler specified at _real_snan(). But, on the 060, # -# for opclass zero and two instructions taking this exception, the # +# for opclass zero and two instructions taking this exception, the # # input operand in the fsave frame may be incorrect for some cases # # and needs to be corrected. This handler calls fix_skewed_ops() to # # do just this and then exits through _real_snan(). # # For opclass 3 instructions, the 060 doesn't store the default # # SNAN result out to memory or data register file as it should. # # This code must emulate the move out before finally exiting through # -# _real_snan(). The move out, if to memory, is performed using # +# _real_snan(). The move out, if to memory, is performed using # # _mem_write() "callout" routines that may return a failing result. # -# In this special case, the handler must exit through facc_out() # +# In this special case, the handler must exit through facc_out() # # which creates an access error stack frame from the current SNAN # # stack frame. # # For the case of an extended precision opclass 3 instruction, # @@ -3306,13 +3306,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3340,7 +3340,7 @@ unlk %a6 bra.l _real_snan - + ######################################################################## # @@ -3350,7 +3350,7 @@ # # byte, word, long, and packed destination format operations can pass # through here. since packed format operations already were handled by -# fpsp_unsupp(), then we need to do nothing else for them here. +# fpsp_unsupp(), then we need to do nothing else for them here. # for byte, word, and long, we simply need to test the sign of the src # operand and save the appropriate minimum or maximum integer value # to the effective address as pointed to by the stacked effective address. @@ -3371,7 +3371,7 @@ short fsnan_out_d - tbl_snan # dbl prec shouldn't happen short fsnan_out_b - tbl_snan # byte integer short tbl_snan - tbl_snan # packed needs no help - + fsnan_out_b: mov.b FP_SRC_HI(%a6),%d0 # load upper byte of SNAN bset &6,%d0 # set SNAN bit @@ -3497,7 +3497,7 @@ mov.l %usp,%a0 # fetch user stack pointer mov.l %a0,EXC_A7(%a6) # save on stack for calc_ea() mov.l (%a6),EXC_A6(%a6) - + bsr.l _calc_ea_fout # find the correct ea,update An mov.l %a0,%a1 mov.l %a0,EXC_EA(%a6) # stack correct @@ -3546,7 +3546,7 @@ mov.l LOCAL_SIZE+FP_SCR0_LO(%sp),LOCAL_SIZE+EXC_EA(%sp) add.l &LOCAL_SIZE-0x8,%sp - + bra.l _real_snan ######################################################################### @@ -3554,7 +3554,7 @@ # _fpsp_inex(): 060FPSP entry point for FP Inexact exception. # # # # This handler should be the first code executed upon taking the # -# FP Inexact exception in an operating system. # +# FP Inexact exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3571,7 +3571,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Inexact exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # - The system stack is unchanged # # - The fsave frame contains the adjusted src op for opclass 0,2 # @@ -3579,10 +3579,10 @@ # ALGORITHM *********************************************************** # # In a system where the FP Inexact exception is enabled, the goal # # is to get to the handler specified at _real_inex(). But, on the 060, # -# for opclass zero and two instruction taking this exception, the # +# for opclass zero and two instruction taking this exception, the # # hardware doesn't store the correct result to the destination FP # -# register as did the '040 and '881/2. This handler must emulate the # -# instruction in order to get this value and then store it to the # +# register as did the '040 and '881/2. This handler must emulate the # +# instruction in order to get this value and then store it to the # # correct register before calling _real_inex(). # # For opclass 3 instructions, the 060 doesn't store the default # # inexact result out to memory or data register file as it should. # @@ -3598,13 +3598,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3616,7 +3616,7 @@ bne.w finex_out # fmove out -# the hardware, for "fabs" and "fneg" w/ a long source format, puts the +# the hardware, for "fabs" and "fneg" w/ a long source format, puts the # longword integer directly into the upper longword of the mantissa along # w/ an exponent value of 0x401e. we convert this to extended precision here. bfextu %d0{&19:&3},%d0 # fetch instr size @@ -3750,7 +3750,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP DZ exception stack. # # - The fsave frame contains the source operand. # -# # +# # # OUTPUT ************************************************************** # # - The system stack contains the FP DZ exception stack. # # - The fsave frame contains the adjusted source operand. # @@ -3761,7 +3761,7 @@ # exception is taken, the input operand in the fsave state frame may # # be incorrect for some cases and need to be adjusted. So, this package # # adjusts the operand using fix_skewed_ops() and then branches to # -# _real_dz(). # +# _real_dz(). # # # ######################################################################### @@ -3772,13 +3772,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3819,7 +3819,7 @@ # INPUT *************************************************************** # # - The system stack contains a "Line F Emulator" exception # # stack frame. # -# # +# # # OUTPUT ************************************************************** # # - The system stack is unchanged # # # @@ -3830,7 +3830,7 @@ # (2) FPU disabled (8 word stack frame) # # (3) Line F (4 word stack frame) # # # -# This module determines which and forks the flow off to the # +# This module determines which and forks the flow off to the # # appropriate "callout" (for "disabled" and "Line F") or to the # # correct emulation code (for "FPU unimplemented"). # # This code also must check for "fmovecr" instructions w/ a # @@ -3943,11 +3943,11 @@ # _fdbcc() - emulate an "fdbcc" instruction # # _fscc() - emulate an "fscc" instruction # # _real_trap() - "callout" for Trap exception # -# _real_bsun() - "callout" for enabled Bsun exception # +# _real_bsun() - "callout" for enabled Bsun exception # # # # INPUT *************************************************************** # # - The system stack contains the "Unimplemented Instr" stk frame # -# # +# # # OUTPUT ************************************************************** # # If access error: # # - The system stack is changed to an access error stack frame # @@ -3962,21 +3962,21 @@ # unimplemented on the 040, and (2) "ftrapcc", "fscc", and "fdbcc". # # For the first set, this handler calls the routine load_fop() # # to load the source and destination (for dyadic) operands to be used # -# for instruction emulation. The correct emulation routine is then # -# chosen by decoding the instruction type and indexing into an # -# emulation subroutine index table. After emulation returns, this # +# for instruction emulation. The correct emulation routine is then # +# chosen by decoding the instruction type and indexing into an # +# emulation subroutine index table. After emulation returns, this # # handler checks to see if an exception should occur as a result of the # # FP instruction emulation. If so, then an FP exception of the correct # # type is inserted into the FPU state frame using the "frestore" # -# instruction before exiting through _fpsp_done(). In either the # +# instruction before exiting through _fpsp_done(). In either the # # exceptional or non-exceptional cases, we must check to see if the # # Trace exception is enabled. If so, then we must create a Trace # # exception frame from the current exception frame and exit through # # _real_trace(). # -# For "fdbcc", "ftrapcc", and "fscc", the emulation subroutines # +# For "fdbcc", "ftrapcc", and "fscc", the emulation subroutines # # _fdbcc(), _ftrapcc(), and _fscc() respectively are used. All three # -# may flag that a BSUN exception should be taken. If so, then the # -# current exception stack frame is converted into a BSUN exception # +# may flag that a BSUN exception should be taken. If so, then the # +# current exception stack frame is converted into a BSUN exception # # stack frame and an exit is made through _real_bsun(). If the # # instruction was "ftrapcc" and a Trap exception should result, a Trap # # exception stack frame is created from the current frame and an exit # @@ -3985,7 +3985,7 @@ # is made to _real_trace(). Finally, if none of these conditions exist, # # then the handler exits though the callout _fpsp_done(). # # # -# In any of the above scenarios, if a _mem_read() or _mem_write() # +# In any of the above scenarios, if a _mem_read() or _mem_write() # # "callout" returns a failing value, then an access error stack frame # # is created from the current stack frame and an exit is made through # # _real_access(). # @@ -4077,7 +4077,7 @@ beq.w funimp_fmovcr # yes funimp_gen_op: - bsr.l _load_fop # load + bsr.l _load_fop # load clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # fetch rnd mode @@ -4104,7 +4104,7 @@ funimp_gen_exit: fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 funimp_gen_exit_cmp: cmpi.b SPCOND_FLG(%a6),&mia7_flg # was the ea mode (sp)+ ? @@ -4129,7 +4129,7 @@ frestore (%sp)+ mov.w &0x2024,0x6(%sp) # stk fmt = 0x2; voff = 0x24 bra.l _real_trace - + funimp_gen_exit_a7: btst &0x5,EXC_SR(%a6) # supervisor or user mode? bne.b funimp_gen_exit_a7_s # supervisor @@ -4156,7 +4156,7 @@ unlk %a6 add.w (%sp),%sp # stack frame shifted - bra.b funimp_gen_exit_cont2 + bra.b funimp_gen_exit_cont2 ###################### # fmovecr.x #ccc,fpn # @@ -4212,7 +4212,7 @@ btst &unfl_bit,FPSR_EXCEPT(%a6) # did underflow occur? bne.b funimp_exc_unfl # yes -# force the fsave exception status bits to signal an exception of the +# force the fsave exception status bits to signal an exception of the # appropriate type. don't forget to "skew" the source operand in case we # "unskewed" the one the hardware initially gave us. funimp_exc_force: @@ -4242,7 +4242,7 @@ funimp_gen_exit2: fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 frestore FP_SRC(%a6) # insert exceptional status @@ -4262,7 +4262,7 @@ beq.w funimp_fdbcc # yes cmpi.b %d1,&0x7 # is it an fs? bne.w funimp_fscc # yes - bfextu %d0{&13:&3},%d1 + bfextu %d0{&13:&3},%d1 cmpi.b %d1,&0x2 # is it an fs? blt.w funimp_fscc # yes @@ -4302,7 +4302,7 @@ fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 bra.l _real_trap @@ -4346,7 +4346,7 @@ funimp_fscc_u: mov.l EXC_A7(%a6),%a0 # yes; set new USP mov.l %a0,%usp - bra.w funimp_done # branch to finish + bra.w funimp_done # branch to finish # remember, I'm assuming that post-increment is bogus...(it IS!!!) # so, the least significant WORD of the stacked effective address got @@ -4361,7 +4361,7 @@ fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 @@ -4381,7 +4381,7 @@ fmov.l %fpiar,0x8(%sp) # insert "current PC" bra.l _real_trace - + # # The ftrap, fs, or fdb is to take an enabled bsun. we must convert # the fp unimplemented instruction exception stack frame into a bsun stack frame, @@ -4409,7 +4409,7 @@ fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 frestore FP_SRC(%a6) # restore bsun exception @@ -4424,13 +4424,13 @@ # and return. # # as usual, we have to check for trace mode being on here. since instructions -# modifying the supervisor stack frame don't pass through here, this is a +# modifying the supervisor stack frame don't pass through here, this is a # relatively easy task. # funimp_done: fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 @@ -4465,16 +4465,16 @@ global tbl_trans swbeg &0x1c0 tbl_trans: - short tbl_trans - tbl_trans # $00-0 fmovecr all - short tbl_trans - tbl_trans # $00-1 fmovecr all - short tbl_trans - tbl_trans # $00-2 fmovecr all - short tbl_trans - tbl_trans # $00-3 fmovecr all - short tbl_trans - tbl_trans # $00-4 fmovecr all - short tbl_trans - tbl_trans # $00-5 fmovecr all - short tbl_trans - tbl_trans # $00-6 fmovecr all - short tbl_trans - tbl_trans # $00-7 fmovecr all + short tbl_trans - tbl_trans # $00-0 fmovecr all + short tbl_trans - tbl_trans # $00-1 fmovecr all + short tbl_trans - tbl_trans # $00-2 fmovecr all + short tbl_trans - tbl_trans # $00-3 fmovecr all + short tbl_trans - tbl_trans # $00-4 fmovecr all + short tbl_trans - tbl_trans # $00-5 fmovecr all + short tbl_trans - tbl_trans # $00-6 fmovecr all + short tbl_trans - tbl_trans # $00-7 fmovecr all - short tbl_trans - tbl_trans # $01-0 fint norm + short tbl_trans - tbl_trans # $01-0 fint norm short tbl_trans - tbl_trans # $01-1 fint zero short tbl_trans - tbl_trans # $01-2 fint inf short tbl_trans - tbl_trans # $01-3 fint qnan @@ -4599,7 +4599,7 @@ short src_snan - tbl_trans # $0e-4 fsin snan short tbl_trans - tbl_trans # $0e-6 fsin unnorm short tbl_trans - tbl_trans # $0e-7 ERROR - + short stan - tbl_trans # $0f-0 ftan norm short src_zero - tbl_trans # $0f-1 ftan zero short t_operr - tbl_trans # $0f-2 ftan inf @@ -5009,7 +5009,7 @@ # d0 = round precision,mode # # # # OUTPUT ************************************************************** # -# fp0 = sin(X) or cos(X) # +# fp0 = sin(X) or cos(X) # # # # For ssincos(X): # # fp0 = sin(X) # @@ -5017,7 +5017,7 @@ # # # ACCURACY and MONOTONICITY ******************************************* # # The returned result is within 1 ulp in 64 significant bit, i.e. # -# within 0.5001 ulp to 53 bits if the result is subsequently # +# within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # # # @@ -5034,8 +5034,8 @@ # # # 4. If k is even, go to 6. # # # -# 5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. # -# Return sgn*cos(r) where cos(r) is approximated by an # +# 5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. # +# Return sgn*cos(r) where cos(r) is approximated by an # # even polynomial in r, 1 + r*r*(B1+s*(B2+ ... + s*B8)), # # s = r*r. # # Exit. # @@ -5047,10 +5047,10 @@ # # # 7. If |X| > 1, go to 9. # # # -# 8. (|X|<2**(-40)) If SIN is invoked, return X; # +# 8. (|X|<2**(-40)) If SIN is invoked, return X; # # otherwise return 1. # # # -# 9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # +# 9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # # go back to 3. # # # # SINCOS: # @@ -5065,19 +5065,19 @@ # j1 exclusive or with the l.s.b. of k. # # sgn1 := (-1)**j1, sgn2 := (-1)**j2. # # SIN(X) = sgn1 * cos(r) and COS(X) = sgn2*sin(r) where # -# sin(r) and cos(r) are computed as odd and even # +# sin(r) and cos(r) are computed as odd and even # # polynomials in r, respectively. Exit # # # # 5. (k is even) Set j1 := k/2, sgn1 := (-1)**j1. # # SIN(X) = sgn1 * sin(r) and COS(X) = sgn1*cos(r) where # -# sin(r) and cos(r) are computed as odd and even # +# sin(r) and cos(r) are computed as odd and even # # polynomials in r, respectively. Exit # # # # 6. If |X| > 1, go to 8. # # # # 7. (|X|<2**(-40)) SIN(X) = X and COS(X) = 1. Exit. # # # -# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # +# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, # # go back to 2. # # # ######################################################################### @@ -5152,9 +5152,9 @@ #--THE ARGUMENT REDUCTION IS DONE BY TABLE LOOK UP. SINMAIN: fmov.x %fp0,%fp1 - fmul.d TWOBYPI(%pc),%fp1 # X*2/PI + fmul.d TWOBYPI(%pc),%fp1 # X*2/PI - lea PITBL+0x200(%pc),%a1 # TABLE OF N*PI/2, N = -32,...,32 + lea PITBL+0x200(%pc),%a1 # TABLE OF N*PI/2, N = -32,...,32 fmov.l %fp1,INT(%a6) # CONVERT TO INTEGER @@ -5164,8 +5164,8 @@ # A1 IS THE ADDRESS OF N*PIBY2 # ...WHICH IS IN TWO PIECES Y1 & Y2 - fsub.x (%a1)+,%fp0 # X-Y1 - fsub.s (%a1),%fp0 # fp0 = R = (X-Y1)-Y2 + fsub.x (%a1)+,%fp0 # X-Y1 + fsub.s (%a1),%fp0 # fp0 = R = (X-Y1)-Y2 SINCONT: #--continuation from REDUCEX @@ -5319,7 +5319,7 @@ COSTINY: fmov.s &0x3F800000,%fp0 # fp0 = 1.0 fmov.l %d0,%fpcr # restore users round mode,prec - fadd.s &0x80800000,%fp0 # last inst - possible exception set + fadd.s &0x80800000,%fp0 # last inst - possible exception set bra t_pinx2 ################################################ @@ -5751,7 +5751,7 @@ # # # 7. (|X|<2**(-40)) Tan(X) = X. Exit. # # # -# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back # +# 8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back # # to 2. # # # ######################################################################### @@ -6154,27 +6154,27 @@ # The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # -# in double precision. # +# in double precision. # # # # ALGORITHM *********************************************************** # # Step 1. If |X| >= 16 or |X| < 1/16, go to Step 5. # # # -# Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. # +# Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. # # Note that k = -4, -3,..., or 3. # -# Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 # +# Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 # # significant bits of X with a bit-1 attached at the 6-th # # bit position. Define u to be u = (X-F) / (1 + X*F). # # # # Step 3. Approximate arctan(u) by a polynomial poly. # # # -# Step 4. Return arctan(F) + poly, arctan(F) is fetched from a # +# Step 4. Return arctan(F) + poly, arctan(F) is fetched from a # # table of values calculated beforehand. Exit. # # # # Step 5. If |X| >= 16, go to Step 7. # # # # Step 6. Approximate arctan(X) by an odd polynomial in X. Exit. # # # -# Step 7. Define X' = -1/X. Approximate arctan(X') by an odd # +# Step 7. Define X' = -1/X. Approximate arctan(X') by an odd # # polynomial in X'. # # Arctan(X) = sign(X)*Pi/2 + arctan(X'). Exit. # # # @@ -6440,7 +6440,7 @@ fmul.x %fp2,%fp1 # A1*U*V*(A2+V*(A3+V)) fadd.x %fp1,%fp0 # ATAN(U), FP1 RELEASED - fmovm.x (%sp)+,&0x20 # restore fp2 + fmovm.x (%sp)+,&0x20 # restore fp2 fmov.l %d0,%fpcr # restore users rnd mode,prec fadd.x ATANF(%a6),%fp0 # ATAN(X) @@ -6597,7 +6597,7 @@ # a0 = pointer to extended precision input # # d0 = round precision,mode # # # -# OUTPUT ************************************************************** # +# OUTPUT ************************************************************** # # fp0 = arcsin(X) # # # # ACCURACY and MONOTONICITY ******************************************* # @@ -6637,7 +6637,7 @@ # This catch is added here for the '060 QSP. Originally, the call to # satan() would handle this case by causing the exception which would -# not be caught until gen_except(). Now, with the exceptions being +# not be caught until gen_except(). Now, with the exceptions being # detected inside of satan(), the exception would have been handled there # instead of inside sasin() as expected. cmp.l %d1,&0x3FD78000 @@ -6786,7 +6786,7 @@ ######################################################################### # setox(): computes the exponential for a normalized input # -# setoxd(): computes the exponential for a denormalized input # +# setoxd(): computes the exponential for a denormalized input # # setoxm1(): computes the exponential minus 1 for a normalized input # # setoxm1d(): computes the exponential minus 1 for a denormalized input # # # @@ -6798,9 +6798,9 @@ # fp0 = exp(X) or exp(X)-1 # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 0.85 ulps in 64 significant bit, # +# The returned result is within 0.85 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # -# rounded to double precision. The result is provably monotonic # +# rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM and IMPLEMENTATION **************************************** # @@ -6824,14 +6824,14 @@ # Notes: The usual case should take the branches 1.1 -> 1.3 -> 2.# # To avoid the use of floating-point comparisons, a # # compact representation of |X| is used. This format is a # -# 32-bit integer, the upper (more significant) 16 bits # -# are the sign and biased exponent field of |X|; the # +# 32-bit integer, the upper (more significant) 16 bits # +# are the sign and biased exponent field of |X|; the # # lower 16 bits are the 16 most significant fraction # # (including the explicit bit) bits of |X|. Consequently, # # the comparisons in Steps 1.1 and 1.3 can be performed # # by integer comparison. Note also that the constant # # 16380 log(2) used in Step 1.3 is also in the compact # -# form. Thus taking the branch to Step 2 guarantees # +# form. Thus taking the branch to Step 2 guarantees # # |X| < 16380 log(2). There is no harm to have a small # # number of cases where |X| is less than, but close to, # # 16380 log(2) and the branch to Step 9 is taken. # @@ -6843,7 +6843,7 @@ # 2.3 Calculate J = N mod 64; so J = 0,1,2,..., # # or 63. # # 2.4 Calculate M = (N - J)/64; so N = 64M + J. # -# 2.5 Calculate the address of the stored value of # +# 2.5 Calculate the address of the stored value of # # 2^(J/64). # # 2.6 Create the value Scale = 2^M. # # Notes: The calculation in 2.2 is really performed by # @@ -6852,26 +6852,26 @@ # where # # constant := single-precision( 64/log 2 ). # # # -# Using a single-precision constant avoids memory # +# Using a single-precision constant avoids memory # # access. Another effect of using a single-precision # -# "constant" is that the calculated value Z is # +# "constant" is that the calculated value Z is # # # # Z = X*(64/log2)*(1+eps), |eps| <= 2^(-24). # # # # This error has to be considered later in Steps 3 and 4. # # # # Step 3. Calculate X - N*log2/64. # -# 3.1 R := X + N*L1, # +# 3.1 R := X + N*L1, # # where L1 := single-precision(-log2/64). # -# 3.2 R := R + N*L2, # +# 3.2 R := R + N*L2, # # L2 := extended-precision(-log2/64 - L1).# -# Notes: a) The way L1 and L2 are chosen ensures L1+L2 # +# Notes: a) The way L1 and L2 are chosen ensures L1+L2 # # approximate the value -log2/64 to 88 bits of accuracy. # # b) N*L1 is exact because N is no longer than 22 bits # # and L1 is no longer than 24 bits. # -# c) The calculation X+N*L1 is also exact due to # +# c) The calculation X+N*L1 is also exact due to # # cancellation. Thus, R is practically X+N(L1+L2) to full # -# 64 bits. # +# 64 bits. # # d) It is important to estimate how large can |R| be # # after Step 3.2. # # # @@ -6889,11 +6889,11 @@ # # # Step 4. Approximate exp(R)-1 by a polynomial # # p = R + R*R*(A1 + R*(A2 + R*(A3 + R*(A4 + R*A5)))) # -# Notes: a) In order to reduce memory access, the coefficients # +# Notes: a) In order to reduce memory access, the coefficients # # are made as "short" as possible: A1 (which is 1/2), A4 # # and A5 are single precision; A2 and A3 are double # -# precision. # -# b) Even with the restrictions above, # +# precision. # +# b) Even with the restrictions above, # # |p - (exp(R)-1)| < 2^(-68.8) for all |R| <= 0.0062. # # Note that 0.0062 is slightly bigger than 0.57 log2/64. # # c) To fully utilize the pipeline, p is separated into # @@ -6907,11 +6907,11 @@ # where T and t are the stored values for 2^(J/64). # # Notes: 2^(J/64) is stored as T and t where T+t approximates # # 2^(J/64) to roughly 85 bits; T is in extended precision # -# and t is in single precision. Note also that T is # -# rounded to 62 bits so that the last two bits of T are # -# zero. The reason for such a special form is that T-1, # +# and t is in single precision. Note also that T is # +# rounded to 62 bits so that the last two bits of T are # +# zero. The reason for such a special form is that T-1, # # T-2, and T-8 will all be exact --- a property that will # -# give much more accurate computation of the function # +# give much more accurate computation of the function # # EXPM1. # # # # Step 6. Reconstruction of exp(X) # @@ -6927,11 +6927,11 @@ # X = (M1+M)log2 + Jlog2/64 + R, |M1+M| >= 16380. # # Hence, exp(X) may overflow or underflow or neither. # # When that is the case, AdjScale = 2^(M1) where M1 is # -# approximately M. Thus 6.2 will never cause # +# approximately M. Thus 6.2 will never cause # # over/underflow. Possible exception in 6.4 is overflow # # or underflow. The inexact exception is not generated in # # 6.4. Although one can argue that the inexact flag # -# should always be raised, to simulate that exception # +# should always be raised, to simulate that exception # # cost to much than the flag is worth in practical uses. # # # # Step 7. Return 1 + X. # @@ -6944,7 +6944,7 @@ # in Step 7.1 to avoid unnecessary trapping. (Although # # the FMOVEM may not seem relevant since X is normalized, # # the precaution will be useful in the library version of # -# this code where the separate entry for denormalized # +# this code where the separate entry for denormalized # # inputs will be done away with.) # # # # Step 8. Handle exp(X) where |X| >= 16380log2. # @@ -6952,9 +6952,9 @@ # (mimic 2.2 - 2.6) # # 8.2 N := round-to-integer( X * 64/log2 ) # # 8.3 Calculate J = N mod 64, J = 0,1,...,63 # -# 8.4 K := (N-J)/64, M1 := truncate(K/2), M = K-M1, # +# 8.4 K := (N-J)/64, M1 := truncate(K/2), M = K-M1, # # AdjFlag := 1. # -# 8.5 Calculate the address of the stored value # +# 8.5 Calculate the address of the stored value # # 2^(J/64). # # 8.6 Create the values Scale = 2^M, AdjScale = 2^M1. # # 8.7 Go to Step 3. # @@ -6991,8 +6991,8 @@ # 1.4 Go to Step 10. # # Notes: The usual case should take the branches 1.1 -> 1.3 -> 2.# # However, it is conceivable |X| can be small very often # -# because EXPM1 is intended to evaluate exp(X)-1 # -# accurately when |X| is small. For further details on # +# because EXPM1 is intended to evaluate exp(X)-1 # +# accurately when |X| is small. For further details on # # the comparisons, see the notes on Step 1 of setox. # # # # Step 2. Calculate N = round-to-nearest-int( X * 64/log2 ). # @@ -7000,16 +7000,16 @@ # 2.2 Calculate J = N mod 64; so J = 0,1,2,..., # # or 63. # # 2.3 Calculate M = (N - J)/64; so N = 64M + J. # -# 2.4 Calculate the address of the stored value of # +# 2.4 Calculate the address of the stored value of # # 2^(J/64). # -# 2.5 Create the values Sc = 2^M and # +# 2.5 Create the values Sc = 2^M and # # OnebySc := -2^(-M). # # Notes: See the notes on Step 2 of setox. # # # # Step 3. Calculate X - N*log2/64. # -# 3.1 R := X + N*L1, # +# 3.1 R := X + N*L1, # # where L1 := single-precision(-log2/64). # -# 3.2 R := R + N*L2, # +# 3.2 R := R + N*L2, # # L2 := extended-precision(-log2/64 - L1).# # Notes: Applying the analysis of Step 3 of setox in this case # # shows that |R| <= 0.0055 (note that |X| <= 70 log2 in # @@ -7017,10 +7017,10 @@ # # # Step 4. Approximate exp(R)-1 by a polynomial # # p = R+R*R*(A1+R*(A2+R*(A3+R*(A4+R*(A5+R*A6))))) # -# Notes: a) In order to reduce memory access, the coefficients # -# are made as "short" as possible: A1 (which is 1/2), A5 # -# and A6 are single precision; A2, A3 and A4 are double # -# precision. # +# Notes: a) In order to reduce memory access, the coefficients # +# are made as "short" as possible: A1 (which is 1/2), A5 # +# and A6 are single precision; A2, A3 and A4 are double # +# precision. # # b) Even with the restriction above, # # |p - (exp(R)-1)| < |R| * 2^(-72.7) # # for all |R| <= 0.0055. # @@ -7035,9 +7035,9 @@ # where T and t are the stored values for 2^(J/64). # # Notes: 2^(J/64) is stored as T and t where T+t approximates # # 2^(J/64) to roughly 85 bits; T is in extended precision # -# and t is in single precision. Note also that T is # -# rounded to 62 bits so that the last two bits of T are # -# zero. The reason for such a special form is that T-1, # +# and t is in single precision. Note also that T is # +# rounded to 62 bits so that the last two bits of T are # +# zero. The reason for such a special form is that T-1, # # T-2, and T-8 will all be exact --- a property that will # # be exploited in Step 6 below. The total relative error # # in p is no bigger than 2^(-67.7) compared to the final # @@ -7052,7 +7052,7 @@ # 6.5 ans := (T + OnebySc) + (p + t). # # 6.6 Restore user FPCR. # # 6.7 Return ans := Sc * ans. Exit. # -# Notes: The various arrangements of the expressions give # +# Notes: The various arrangements of the expressions give # # accurate evaluations. # # # # Step 7. exp(X)-1 for |X| < 1/4. # @@ -7068,8 +7068,8 @@ # Return ans := ans*2^(140). Exit # # Notes: The idea is to return "X - tiny" under the user # # precision and rounding modes. To avoid unnecessary # -# inefficiency, we stay away from denormalized numbers # -# the best we can. For |X| >= 2^(-16312), the # +# inefficiency, we stay away from denormalized numbers # +# the best we can. For |X| >= 2^(-16312), the # # straightforward 8.2 generates the inexact exception as # # the case warrants. # # # @@ -7077,13 +7077,13 @@ # p = X + X*X*(B1 + X*(B2 + ... + X*B12)) # # Notes: a) In order to reduce memory access, the coefficients # # are made as "short" as possible: B1 (which is 1/2), B9 # -# to B12 are single precision; B3 to B8 are double # +# to B12 are single precision; B3 to B8 are double # # precision; and B2 is double extended. # # b) Even with the restriction above, # # |p - (exp(X)-1)| < |X| 2^(-70.6) # # for all |X| <= 0.251. # # Note that 0.251 is slightly bigger than 1/4. # -# c) To fully preserve accuracy, the polynomial is # +# c) To fully preserve accuracy, the polynomial is # # computed as # # X + ( S*B1 + Q ) where S = X*X and # # Q = X*S*(B2 + X*(B3 + ... + X*B12)) # @@ -7093,11 +7093,11 @@ # [ S*S*(B3 + S*(B5 + ... + S*B11)) ] # # # # Step 10. Calculate exp(X)-1 for |X| >= 70 log 2. # -# 10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all # +# 10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all # # practical purposes. Therefore, go to Step 1 of setox. # # 10.2 If X <= -70log2, exp(X) - 1 = -1 for all practical # -# purposes. # -# ans := -1 # +# purposes. # +# ans := -1 # # Restore user FPCR # # Return ans := ans + 2^(-126). Exit. # # Notes: 10.2 will always create an inexact and return -1 + tiny # @@ -7602,10 +7602,10 @@ # sgetexp(): returns the exponent portion of the input argument. # # The exponent bias is removed and the exponent value is # # returned as an extended precision number in fp0. # -# sgetexpd(): handles denormalized numbers. # +# sgetexpd(): handles denormalized numbers. # # # -# sgetman(): extracts the mantissa of the input argument. The # -# mantissa is converted to an extended precision number w/ # +# sgetman(): extracts the mantissa of the input argument. The # +# mantissa is converted to an extended precision number w/ # # an exponent of $3fff and is returned in fp0. The range of # # the result is [1.0 - 2.0). # # sgetmand(): handles denormalized numbers. # @@ -7679,9 +7679,9 @@ # fp0 = cosh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # -# rounded to double precision. The result is provably monotonic # +# rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM *********************************************************** # @@ -7698,7 +7698,7 @@ # # # 4. (16380 log2 < |X| <= 16480 log2) # # cosh(X) = sign(X) * exp(|X|)/2. # -# However, invoking exp(|X|) may cause premature # +# However, invoking exp(|X|) may cause premature # # overflow. Thus, we calculate sinh(X) as follows: # # Y := |X| # # Fact := 2**(16380) # @@ -7793,7 +7793,7 @@ # fp0 = sinh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -7911,7 +7911,7 @@ # fp0 = tanh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 3 ulps in 64 significant bit, # +# The returned result is within 3 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -8077,51 +8077,51 @@ # fp0 = log(X) or log(1+X) # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 2 ulps in 64 significant bit, # +# The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # # # # ALGORITHM *********************************************************** # # LOGN: # -# Step 1. If |X-1| < 1/16, approximate log(X) by an odd # -# polynomial in u, where u = 2(X-1)/(X+1). Otherwise, # +# Step 1. If |X-1| < 1/16, approximate log(X) by an odd # +# polynomial in u, where u = 2(X-1)/(X+1). Otherwise, # # move on to Step 2. # # # # Step 2. X = 2**k * Y where 1 <= Y < 2. Define F to be the first # -# seven significant bits of Y plus 2**(-7), i.e. # -# F = 1.xxxxxx1 in base 2 where the six "x" match those # +# seven significant bits of Y plus 2**(-7), i.e. # +# F = 1.xxxxxx1 in base 2 where the six "x" match those # # of Y. Note that |Y-F| <= 2**(-7). # # # -# Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a # +# Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a # # polynomial in u, log(1+u) = poly. # # # -# Step 4. Reconstruct # +# Step 4. Reconstruct # # log(X) = log( 2**k * Y ) = k*log(2) + log(F) + log(1+u) # # by k*log(2) + (log(F) + poly). The values of log(F) are # # calculated beforehand and stored in the program. # # # # lognp1: # -# Step 1: If |X| < 1/16, approximate log(1+X) by an odd # +# Step 1: If |X| < 1/16, approximate log(1+X) by an odd # # polynomial in u where u = 2X/(2+X). Otherwise, move on # # to Step 2. # # # # Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done # -# in Step 2 of the algorithm for LOGN and compute # -# log(1+X) as k*log(2) + log(F) + poly where poly # -# approximates log(1+u), u = (Y-F)/F. # +# in Step 2 of the algorithm for LOGN and compute # +# log(1+X) as k*log(2) + log(F) + poly where poly # +# approximates log(1+u), u = (Y-F)/F. # # # # Implementation Notes: # -# Note 1. There are 64 different possible values for F, thus 64 # +# Note 1. There are 64 different possible values for F, thus 64 # # log(F)'s need to be tabulated. Moreover, the values of # # 1/F are also tabulated so that the division in (Y-F)/F # # can be performed by a multiplication. # # # -# Note 2. In Step 2 of lognp1, in order to preserved accuracy, # -# the value Y-F has to be calculated carefully when # -# 1/2 <= X < 3/2. # +# Note 2. In Step 2 of lognp1, in order to preserved accuracy, # +# the value Y-F has to be calculated carefully when # +# 1/2 <= X < 3/2. # # # -# Note 3. To fully exploit the pipeline, polynomials are usually # +# Note 3. To fully exploit the pipeline, polynomials are usually # # separated into two parts evaluated independently before # # being added up. # # # @@ -8334,9 +8334,9 @@ cmp.l %d1,&0 # CHECK IF X IS NEGATIVE blt.w LOGNEG # LOG OF NEGATIVE ARGUMENT IS INVALID # X IS POSITIVE, CHECK IF X IS NEAR 1 - cmp.l %d1,&0x3ffef07d # IS X < 15/16? + cmp.l %d1,&0x3ffef07d # IS X < 15/16? blt.b LOGMAIN # YES - cmp.l %d1,&0x3fff8841 # IS X > 17/16? + cmp.l %d1,&0x3fff8841 # IS X > 17/16? ble.w LOGNEAR1 # NO LOGMAIN: @@ -8349,7 +8349,7 @@ #--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING #--LOG(1+U) CAN BE VERY EFFICIENT. #--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO -#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. +#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. #--GET K, Y, F, AND ADDRESS OF 1/F. asr.l &8,%d1 @@ -8564,10 +8564,10 @@ mov.l X(%a6),%d1 cmp.l %d1,&0 ble.w LP1NEG0 # LOG OF ZERO OR -VE - cmp.l %d1,&0x3ffe8000 # IS BOUNDS [1/2,3/2]? + cmp.l %d1,&0x3ffe8000 # IS BOUNDS [1/2,3/2]? blt.w LOGMAIN cmp.l %d1,&0x3fffc000 - bgt.w LOGMAIN + bgt.w LOGMAIN #--IF 1+Z > 3/2 OR 1+Z < 1/2, THEN X, WHICH IS ROUNDING 1+Z, #--CONTAINS AT LEAST 63 BITS OF INFORMATION OF Z. IN THAT CASE, #--SIMPLY INVOKE LOG(X) FOR LOG(1+Z). @@ -8668,7 +8668,7 @@ # a0 = pointer to extended precision input # # d0 = round precision,mode # # # -# OUTPUT ************************************************************** # +# OUTPUT ************************************************************** # # fp0 = arctanh(X) # # # # ACCURACY and MONOTONICITY ******************************************* # @@ -8783,7 +8783,7 @@ # 2.1 Restore the user FPCR # # 2.2 Return ans := Y * INV_L10. # # # -# slog10: # +# slog10: # # # # Step 0. If X < 0, create a NaN and raise the invalid operation # # flag. Otherwise, save FPCR in D1; set FpCR to default. # @@ -8926,7 +8926,7 @@ # fp0 = 2**X or 10**X # # # # ACCURACY and MONOTONICITY ******************************************* # -# The returned result is within 2 ulps in 64 significant bit, # +# The returned result is within 2 ulps in 64 significant bit, # # i.e. within 0.5001 ulp to 53 bits if the result is subsequently # # rounded to double precision. The result is provably monotonic # # in double precision. # @@ -8957,7 +8957,7 @@ # # # 4. Define r as # # r := ((X - N*L1)-N*L2) * L10 # -# where L1, L2 are the leading and trailing parts of # +# where L1, L2 are the leading and trailing parts of # # log_10(2)/64 and L10 is the natural log of 10. Then # # 10**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r). # # Go to expr to compute that expression. # @@ -8978,7 +8978,7 @@ # Exit. # # # # ExpBig # -# 1. Generate overflow by Huge * Huge if X > 0; otherwise, # +# 1. Generate overflow by Huge * Huge if X > 0; otherwise, # # generate underflow by Tiny * Tiny. # # # # ExpSm # @@ -9309,10 +9309,10 @@ ######################################################################### # smovcr(): returns the ROM constant at the offset specified in d1 # -# rounded to the mode and precision specified in d0. # +# rounded to the mode and precision specified in d0. # # # # INPUT *************************************************************** # -# d0 = rnd prec,mode # +# d0 = rnd prec,mode # # d1 = ROM offset # # # # OUTPUT ************************************************************** # @@ -9325,7 +9325,7 @@ mov.l %d1,-(%sp) # save rom offset for a sec lsr.b &0x4,%d0 # shift ctrl bits to lo - mov.l %d0,%d1 # make a copy + mov.l %d0,%d1 # make a copy andi.w &0x3,%d1 # extract rnd mode andi.w &0xc,%d0 # extract rnd prec swap %d0 # put rnd prec in hi @@ -9343,7 +9343,7 @@ cmpi.b %d1,&0x0e # check range $0b - $0e ble.b sm_tbl # valid constants in this range cmpi.b %d1,&0x2f # check range $10 - $2f - ble.b z_val # if in this range, return zero + ble.b z_val # if in this range, return zero cmpi.b %d1,&0x3f # check range $30 - $3f ble.b bg_tbl # valid constants in this range @@ -9378,7 +9378,7 @@ # $0C e (inexact) # $0D log2(e) (inexact) # $0E log10(e) (exact) -# +# # fetch a pointer to the answer table relating to the proper rounding # precision. # @@ -9465,7 +9465,7 @@ swap %d0 # rnd prec in upper word # call round() to round the answer to the proper precision. -# exponents out of range for single or double DO NOT cause underflow +# exponents out of range for single or double DO NOT cause underflow # or overflow. mov.w 0x0(%a0,%d1.w),FP_SCR1_EX(%a6) # load first word mov.l 0x4(%a0,%d1.w),FP_SCR1_HI(%a6) # load second word @@ -9562,7 +9562,7 @@ ######################################################################### # sscale(): computes the destination operand scaled by the source # -# operand. If the absoulute value of the source operand is # +# operand. If the absoulute value of the source operand is # # >= 2^14, an overflow or underflow is returned. # # # # INPUT *************************************************************** # @@ -9624,7 +9624,7 @@ bge.b sok_norm2 # thank goodness no # the multiply factor that we're trying to create should be a denorm -# for the multiply to work. therefore, we're going to actually do a +# for the multiply to work. therefore, we're going to actually do a # multiply with a denorm which will cause an unimplemented data type # exception to be put into the machine which will be caught and corrected # later. we don't do this with the DENORMs above because this method @@ -9639,7 +9639,7 @@ clr.l -(%sp) # insert zero low mantissa mov.l %d1,-(%sp) # insert new high mantissa clr.l -(%sp) # make zero exponent - bra.b sok_norm_cont + bra.b sok_norm_cont sok_dnrm_32: subi.b &0x20,%d0 # get shift count lsr.l %d0,%d1 # make low mantissa longword @@ -9647,7 +9647,7 @@ clr.l -(%sp) # insert zero high mantissa clr.l -(%sp) # make zero exponent bra.b sok_norm_cont - + # the src will force the dst to a DENORM value or worse. so, let's # create an fp multiply that will create the result. sok_norm: @@ -9705,7 +9705,7 @@ # a1 = pointer to extended precision input Y # # d0 = round precision,mode # # # -# The input operands X and Y can be either normalized or # +# The input operands X and Y can be either normalized or # # denormalized. # # # # OUTPUT ************************************************************** # @@ -9714,7 +9714,7 @@ # ALGORITHM *********************************************************** # # # # Step 1. Save and strip signs of X and Y: signX := sign(X), # -# signY := sign(Y), X := |X|, Y := |Y|, # +# signY := sign(Y), X := |X|, Y := |Y|, # # signQ := signX EOR signY. Record whether MOD or REM # # is requested. # # # @@ -9734,7 +9734,7 @@ # # # Step 4. At this point, R = X - QY = MOD(X,Y). Set # # Last_Subtract := false (used in Step 7 below). If # -# MOD is requested, go to Step 6. # +# MOD is requested, go to Step 6. # # # # Step 5. R = MOD(X,Y), but REM(X,Y) is requested. # # 5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to # @@ -10060,8 +10060,8 @@ mov.b &FMUL_OP,%d1 # last inst is MUL fmul.x Scale(%pc),%fp0 # may cause underflow bra t_catch2 -# the '040 package did this apparently to see if the dst operand for the -# preceding fmul was a denorm. but, it better not have been since the +# the '040 package did this apparently to see if the dst operand for the +# preceding fmul was a denorm. but, it better not have been since the # algorithm just got done playing with fp0 and expected no exceptions # as a result. trust me... # bra t_avoid_unsupp # check for denorm as a @@ -10075,7 +10075,7 @@ Rem_is_0: #..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1) addq.l &1,%d3 - cmp.l %d0,&8 # D0 is j + cmp.l %d0,&8 # D0 is j bge.b Q_Big lsl.l %d0,%d3 @@ -10117,20 +10117,20 @@ # # # INPUT *************************************************************** # # a0 = pointer to source operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # # ALGORITHM *********************************************************** # # - Store properly signed INF into fp0. # -# - Set FPSR exception status dz bit, ccode inf bit, and # +# - Set FPSR exception status dz bit, ccode inf bit, and # # accrued dz bit. # # # ######################################################################### global t_dz t_dz: - tst.b SRC_EX(%a0) # no; is src negative? + tst.b SRC_EX(%a0) # no; is src negative? bmi.b t_dz2 # yes dz_pinf: @@ -10146,7 +10146,7 @@ ################################################################# # OPERR exception: # -# - set FPSR exception status operr bit, condition code # +# - set FPSR exception status operr bit, condition code # # nan bit; Store default NAN into fp0 # ################################################################# global t_operr @@ -10157,7 +10157,7 @@ ################################################################# # Extended DENORM: # -# - For all functions that have a denormalized input and # +# - For all functions that have a denormalized input and # # that f(x)=x, this is the entry point. # # - we only return the EXOP here if either underflow or # # inexact is enabled. # @@ -10224,13 +10224,13 @@ ################################################################# # UNFL exception: # -# - This routine is for cases where even an EXOP isn't # -# large enough to hold the range of this result. # +# - This routine is for cases where even an EXOP isn't # +# large enough to hold the range of this result. # # In such a case, the EXOP equals zero. # -# - Return the default result to the proper precision # +# - Return the default result to the proper precision # # with the sign of this result being the same as that # # of the src operand. # -# - t_unfl2() is provided to force the result sign to # +# - t_unfl2() is provided to force the result sign to # # positive which is the desired result for fetox(). # ################################################################# global t_unfl @@ -10259,15 +10259,15 @@ ################################################################# # OVFL exception: # -# - This routine is for cases where even an EXOP isn't # -# large enough to hold the range of this result. # -# - Return the default result to the proper precision # -# with the sign of this result being the same as that # +# - This routine is for cases where even an EXOP isn't # +# large enough to hold the range of this result. # +# - Return the default result to the proper precision # +# with the sign of this result being the same as that # # of the src operand. # -# - t_ovfl2() is provided to force the result sign to # +# - t_ovfl2() is provided to force the result sign to # # positive which is the desired result for fcosh(). # -# - t_ovfl_sc() is provided for scale() which only sets # -# the inexact bits if the number is inexact for the # +# - t_ovfl_sc() is provided for scale() which only sets # +# the inexact bits if the number is inexact for the # # precision indicated. # ################################################################# @@ -10338,10 +10338,10 @@ rts ################################################################# -# t_catch(): # +# t_catch(): # # - the last operation of a transcendental emulation # -# routine may have caused an underflow or overflow. # -# we find out if this occurred by doing an fsave and # +# routine may have caused an underflow or overflow. # +# we find out if this occurred by doing an fsave and # # checking the exception bit. if one did occur, then we # # jump to fgen_except() which creates the default # # result and EXOP for us. # @@ -10407,8 +10407,8 @@ # unf_res(): underflow default result calculation for transcendentals # # # # INPUT: # -# d0 : rnd mode,precision # -# d1.b : sign bit of result ('11111111 = (-) ; '00000000 = (+)) # +# d0 : rnd mode,precision # +# d1.b : sign bit of result ('11111111 = (-) ; '00000000 = (+)) # # OUTPUT: # # a0 : points to result (in instruction memory) # ######################################################################### @@ -10457,7 +10457,7 @@ long 0x0,0x0,0x0,0x0 long 0x0,0x0,0x0,0x0 long 0x0,0x0,0x0,0x0 - + long 0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext long 0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext long 0x80000000, 0x00000000, 0x00000001, 0x0 # MIN; ext @@ -10504,7 +10504,7 @@ ######################################################################### global dst_zero dst_zero: - tst.b DST_EX(%a1) # get sign of dst operand + tst.b DST_EX(%a1) # get sign of dst operand bmi.b ld_mzero # if neg, load neg zero bra.b ld_pzero # load positive zero @@ -10513,7 +10513,7 @@ ######################################################################### global src_inf src_inf: - tst.b SRC_EX(%a0) # get sign of src operand + tst.b SRC_EX(%a0) # get sign of src operand bmi.b ld_minf # if negative branch # @@ -10539,7 +10539,7 @@ ######################################################################### global dst_inf dst_inf: - tst.b DST_EX(%a1) # get sign of dst operand + tst.b DST_EX(%a1) # get sign of dst operand bmi.b ld_minf # if negative branch bra.b ld_pinf @@ -10581,7 +10581,7 @@ ######################################################################### global src_one src_one: - tst.b SRC_EX(%a0) # check sign of source + tst.b SRC_EX(%a0) # check sign of source bmi.b ld_mone # @@ -10610,7 +10610,7 @@ ################################################################# global spi_2 spi_2: - tst.b SRC_EX(%a0) # check sign of source + tst.b SRC_EX(%a0) # check sign of source bmi.b ld_mpi2 # @@ -10637,7 +10637,7 @@ # # ssincosz(): When the src operand is ZERO, store a one in the -# cosine register and return a ZERO in fp0 w/ the same sign +# cosine register and return a ZERO in fp0 w/ the same sign # as the src operand. # global ssincosz @@ -10666,7 +10666,7 @@ # # ssincosqnan(): When the src operand is a QNAN, store the QNAN in the cosine -# register and branch to the src QNAN routine. +# register and branch to the src QNAN routine. # global ssincosqnan ssincosqnan: @@ -10719,7 +10719,7 @@ fmovm.x &0x40,EXC_FP1(%a6) rts sto_cos_2: - fmov.x %fp1,%fp2 + fmov.x %fp1,%fp2 rts sto_cos_3: fmov.x %fp1,%fp3 @@ -10988,8 +10988,8 @@ # fkern2.s: # These entry points are used by the exception handler # routines where an instruction is selected by an index into -# a large jump table corresponding to a given instruction which -# has been decoded. Flow continues here where we now decode +# a large jump table corresponding to a given instruction which +# has been decoded. Flow continues here where we now decode # further accoding to the source operand type. # @@ -11331,11 +11331,11 @@ ######################################################################### # XDEF **************************************************************** # -# fgen_except(): catch an exception during transcendental # +# fgen_except(): catch an exception during transcendental # # emulation # # # # XREF **************************************************************** # -# fmul() - emulate a multiply instruction # +# fmul() - emulate a multiply instruction # # fadd() - emulate an add instruction # # fin() - emulate an fmove instruction # # # @@ -11343,16 +11343,16 @@ # fp0 = destination operand # # d0 = type of instruction that took exception # # fsave frame = source operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP # # # # ALGORITHM *********************************************************** # -# An exception occurred on the last instruction of the # -# transcendental emulation. hopefully, this won't be happening much # +# An exception occurred on the last instruction of the # +# transcendental emulation. hopefully, this won't be happening much # # because it will be VERY slow. # -# The only exceptions capable of passing through here are # +# The only exceptions capable of passing through here are # # Overflow, Underflow, and Unsupported Data Type. # # # ######################################################################### @@ -11408,11 +11408,11 @@ swbeg &109 tbl_unsupp: - long fin - tbl_unsupp # 00: fmove - long fint - tbl_unsupp # 01: fint - long fsinh - tbl_unsupp # 02: fsinh - long fintrz - tbl_unsupp # 03: fintrz - long fsqrt - tbl_unsupp # 04: fsqrt + long fin - tbl_unsupp # 00: fmove + long fint - tbl_unsupp # 01: fint + long fsinh - tbl_unsupp # 02: fsinh + long fintrz - tbl_unsupp # 03: fintrz + long fsqrt - tbl_unsupp # 04: fsqrt long tbl_unsupp - tbl_unsupp long flognp1 - tbl_unsupp # 06: flognp1 long tbl_unsupp - tbl_unsupp @@ -11432,23 +11432,23 @@ long flog10 - tbl_unsupp # 15: flog10 long flog2 - tbl_unsupp # 16: flog2 long tbl_unsupp - tbl_unsupp - long fabs - tbl_unsupp # 18: fabs + long fabs - tbl_unsupp # 18: fabs long fcosh - tbl_unsupp # 19: fcosh - long fneg - tbl_unsupp # 1a: fneg + long fneg - tbl_unsupp # 1a: fneg long tbl_unsupp - tbl_unsupp long facos - tbl_unsupp # 1c: facos long fcos - tbl_unsupp # 1d: fcos long fgetexp - tbl_unsupp # 1e: fgetexp long fgetman - tbl_unsupp # 1f: fgetman - long fdiv - tbl_unsupp # 20: fdiv + long fdiv - tbl_unsupp # 20: fdiv long fmod - tbl_unsupp # 21: fmod - long fadd - tbl_unsupp # 22: fadd - long fmul - tbl_unsupp # 23: fmul - long fsgldiv - tbl_unsupp # 24: fsgldiv + long fadd - tbl_unsupp # 22: fadd + long fmul - tbl_unsupp # 23: fmul + long fsgldiv - tbl_unsupp # 24: fsgldiv long frem - tbl_unsupp # 25: frem long fscale - tbl_unsupp # 26: fscale - long fsglmul - tbl_unsupp # 27: fsglmul - long fsub - tbl_unsupp # 28: fsub + long fsglmul - tbl_unsupp # 27: fsglmul + long fsub - tbl_unsupp # 28: fsub long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp @@ -11464,20 +11464,20 @@ long fsincos - tbl_unsupp # 35: fsincos long fsincos - tbl_unsupp # 36: fsincos long fsincos - tbl_unsupp # 37: fsincos - long fcmp - tbl_unsupp # 38: fcmp + long fcmp - tbl_unsupp # 38: fcmp long tbl_unsupp - tbl_unsupp - long ftst - tbl_unsupp # 3a: ftst + long ftst - tbl_unsupp # 3a: ftst long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fsin - tbl_unsupp # 40: fsmove - long fssqrt - tbl_unsupp # 41: fssqrt + long fsin - tbl_unsupp # 40: fsmove + long fssqrt - tbl_unsupp # 41: fssqrt long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long fdin - tbl_unsupp # 44: fdmove - long fdsqrt - tbl_unsupp # 45: fdsqrt + long fdsqrt - tbl_unsupp # 45: fdsqrt long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp @@ -11496,31 +11496,31 @@ long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fsabs - tbl_unsupp # 58: fsabs + long fsabs - tbl_unsupp # 58: fsabs long tbl_unsupp - tbl_unsupp - long fsneg - tbl_unsupp # 5a: fsneg + long fsneg - tbl_unsupp # 5a: fsneg long tbl_unsupp - tbl_unsupp long fdabs - tbl_unsupp # 5c: fdabs long tbl_unsupp - tbl_unsupp - long fdneg - tbl_unsupp # 5e: fdneg + long fdneg - tbl_unsupp # 5e: fdneg long tbl_unsupp - tbl_unsupp long fsdiv - tbl_unsupp # 60: fsdiv long tbl_unsupp - tbl_unsupp long fsadd - tbl_unsupp # 62: fsadd long fsmul - tbl_unsupp # 63: fsmul - long fddiv - tbl_unsupp # 64: fddiv + long fddiv - tbl_unsupp # 64: fddiv long tbl_unsupp - tbl_unsupp long fdadd - tbl_unsupp # 66: fdadd - long fdmul - tbl_unsupp # 67: fdmul + long fdmul - tbl_unsupp # 67: fdmul long fssub - tbl_unsupp # 68: fssub long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fdsub - tbl_unsupp # 6c: fdsub + long fdsub - tbl_unsupp # 6c: fdsub ######################################################################### # XDEF **************************************************************** # -# fmul(): emulates the fmul instruction # +# fmul(): emulates the fmul instruction # # fsmul(): emulates the fsmul instruction # # fdmul(): emulates the fdmul instruction # # # @@ -11529,8 +11529,8 @@ # scale_to_zero_dst() - scale dst exponent to zero # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -11548,12 +11548,12 @@ # instruction won't cause an exception. Use the regular fmul to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### - align 0x10 + align 0x10 tbl_fmul_ovfl: long 0x3fff - 0x7ffe # ext_max long 0x3fff - 0x407e # sgl_max @@ -11614,7 +11614,7 @@ # # NORMAL: # - the result of the multiply operation will neither overflow nor underflow. -# - do the multiply to the proper precision and rounding mode. +# - do the multiply to the proper precision and rounding mode. # - scale the result exponent using the scale factor. if both operands were # normalized then we really don't need to go through this scaling. but for now, # this will do. @@ -11625,7 +11625,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -11665,7 +11665,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -11744,7 +11744,7 @@ fmov.l &0x0,%fpsr # clear FPSR fmul.x FP_SCR0(%a6),%fp0 # execute multiply - + fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -11753,7 +11753,7 @@ fabs.x %fp0,%fp1 # make a copy of result fcmp.b %fp1,&0x2 # is |result| >= 2.b? fbge.w fmul_ovfl_tst # yes; overflow has occurred - + # no, it didn't overflow; we have correct result bra.w fmul_normal_exit @@ -11770,7 +11770,7 @@ # of this operation then has its exponent scaled by -0x6000 to create the # exceptional operand. # -fmul_unfl: +fmul_unfl: bset &unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit # for fun, let's use only extended precision, round to zero. then, let @@ -11803,7 +11803,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fmul_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -11819,7 +11819,7 @@ fmul_unfl_ena_cont: fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp1 # execute multiply + fmul.x FP_SCR0(%a6),%fp1 # execute multiply fmov.l &0x0,%fpcr # clear FPCR @@ -11854,7 +11854,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -11878,11 +11878,11 @@ mov.l L_SCR3(%a6),%d1 andi.b &0xc0,%d1 # keep rnd prec ori.b &rz_mode*0x10,%d1 # insert RZ - + fmov.l %d1,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp1 # execute multiply + fmul.x FP_SCR0(%a6),%fp1 # execute multiply fmov.l &0x0,%fpcr # clear FPCR fabs.x %fp1 # make absolute value @@ -12024,22 +12024,22 @@ # norm() - normalize mantissa for EXOP on denorm # # scale_to_zero_src() - scale src exponent to zero # # ovf_res() - return default overflow result # -# unf_res() - return default underflow result # +# unf_res() - return default underflow result # # res_qnan_1op() - return QNAN result # # res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # # d0 = round prec/mode # -# # +# # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # -# Norms can be emulated w/ a regular fmove instruction. For # +# Norms can be emulated w/ a regular fmove instruction. For # # sgl/dbl, must scale exponent and perform an "fmove". Check to see # # if the result would have overflowed/underflowed. If so, use unf_res() # # or ovf_res() to return the default result. Also return EXOP if # @@ -12065,7 +12065,7 @@ mov.b STAG(%a6),%d1 # fetch src optype tag bne.w fin_not_norm # optimize on non-norm input - + # # FP MOVE IN: NORMs and DENORMs ONLY! # @@ -12126,9 +12126,9 @@ # # operand is to be rounded to single or double precision -# +# fin_not_ext: - cmpi.b %d0,&s_mode*0x10 # separate sgl/dbl prec + cmpi.b %d0,&s_mode*0x10 # separate sgl/dbl prec bne.b fin_dbl # @@ -12212,10 +12212,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z' fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow or inexact is enabled. +# operand will underflow AND underflow or inexact is enabled. # therefore, we must return the result rounded to extended precision. # fin_sd_unfl_ena: @@ -12337,7 +12337,7 @@ ######################################################################### # XDEF **************************************************************** # -# fdiv(): emulates the fdiv instruction # +# fdiv(): emulates the fdiv instruction # # fsdiv(): emulates the fsdiv instruction # # fddiv(): emulates the fddiv instruction # # # @@ -12346,8 +12346,8 @@ # scale_to_zero_dst() - scale dst exponent to zero # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -12365,7 +12365,7 @@ # instruction won't cause an exception. Use the regular fdiv to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -12402,7 +12402,7 @@ or.b STAG(%a6),%d1 # combine src tags bne.w fdiv_not_norm # optimize on non-norm input - + # # DIVIDE: NORMs and DENORMs ONLY! # @@ -12468,7 +12468,7 @@ fdiv_no_ovfl: mov.l (%sp)+,%d0 # restore scale factor bra.b fdiv_normal_exit - + fdiv_may_ovfl: mov.l %d0,-(%sp) # save scale factor @@ -12501,7 +12501,7 @@ bne.b fdiv_ovfl_ena # yes fdiv_ovfl_dis: - btst &neg_bit,FPSR_CC(%a6) # is result negative? + btst &neg_bit,FPSR_CC(%a6) # is result negative? sne %d1 # set sign param accordingly mov.l L_SCR3(%a6),%d0 # pass prec:rnd bsr.l ovf_res # calculate default result @@ -12573,7 +12573,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fdiv_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -12637,8 +12637,8 @@ # # we still don't know if underflow occurred. result is ~ equal to 1. but, # we don't know if the result was an underflow that rounded up to a 1 -# or a normalized number that rounded down to a 1. so, redo the entire -# operation using RZ as the rounding mode to see what the pre-rounded +# or a normalized number that rounded down to a 1. so, redo the entire +# operation using RZ as the rounding mode to see what the pre-rounded # result is. this case should be relatively rare. # fmovm.x FP_SCR1(%a6),&0x40 # load dst op into fp1 @@ -12765,8 +12765,8 @@ rts # -# The destination was an INF w/ an In Range or ZERO source, the result is -# an INF w/ the proper sign. +# The destination was an INF w/ an In Range or ZERO source, the result is +# an INF w/ the proper sign. # The 68881/882 returns the destination INF w/ the new sign(if the j-bit of the # dst INF is set, then then j-bit of the result INF is also set). # @@ -12796,11 +12796,11 @@ # fdneg(): emulates the fdneg instruction # # # # XREF **************************************************************** # -# norm() - normalize a denorm to provide EXOP # +# norm() - normalize a denorm to provide EXOP # # scale_to_zero_src() - scale sgl/dbl source exponent # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # -# res_qnan_1op() - return QNAN result # +# res_qnan_1op() - return QNAN result # # res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # @@ -12838,7 +12838,7 @@ mov.l %d0,L_SCR3(%a6) # store rnd info mov.b STAG(%a6),%d1 bne.w fneg_not_norm # optimize on non-norm input - + # # NEGATE SIGN : norms and denorms ONLY! # @@ -12897,7 +12897,7 @@ neg.w %d0 # new exponent = -(shft val) addi.w &0x6000,%d0 # add new bias to exponent mov.w FP_SCR0_EX(%a6),%d1 # fetch old sign,exp - andi.w &0x8000,%d1 # keep old sign + andi.w &0x8000,%d1 # keep old sign andi.w &0x7fff,%d0 # clear sign position or.w %d1,%d0 # concat old sign, new exponent mov.w %d0,FP_SCR0_EX(%a6) # insert new exponent @@ -12976,7 +12976,7 @@ fneg_sd_unfl: bset &unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit - eori.b &0x80,FP_SCR0_EX(%a6) # negate sign + eori.b &0x80,FP_SCR0_EX(%a6) # negate sign bpl.b fneg_sd_unfl_tst bset &neg_bit,FPSR_CC(%a6) # set 'N' ccode bit @@ -12992,10 +12992,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z' fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fneg_sd_unfl_ena: @@ -13117,19 +13117,19 @@ ######################################################################### # XDEF **************************************************************** # -# ftst(): emulates the ftest instruction # +# ftst(): emulates the ftest instruction # # # # XREF **************************************************************** # -# res{s,q}nan_1op() - set NAN result for monadic instruction # +# res{s,q}nan_1op() - set NAN result for monadic instruction # # # # INPUT *************************************************************** # -# a0 = pointer to extended precision source operand # +# a0 = pointer to extended precision source operand # # # # OUTPUT ************************************************************** # # none # # # # ALGORITHM *********************************************************** # -# Check the source operand tag (STAG) and set the FPCR according # +# Check the source operand tag (STAG) and set the FPCR according # # to the operand type and sign. # # # ######################################################################### @@ -13138,7 +13138,7 @@ ftst: mov.b STAG(%a6),%d1 bne.b ftst_not_norm # optimize on non-norm input - + # # Norm: # @@ -13186,7 +13186,7 @@ ftst_inf_m: mov.b &inf_bmask+neg_bmask,FPSR_CC(%a6) # set 'I','N' ccode bits rts - + # # Zero: # @@ -13215,13 +13215,13 @@ # fp0 = result # # # # ALGORITHM *********************************************************** # -# Separate according to operand type. Unnorms don't pass through # -# here. For norms, load the rounding mode/prec, execute a "fint", then # +# Separate according to operand type. Unnorms don't pass through # +# here. For norms, load the rounding mode/prec, execute a "fint", then # # store the resulting FPSR bits. # -# For denorms, force the j-bit to a one and do the same as for # -# norms. Denorms are so low that the answer will either be a zero or a # +# For denorms, force the j-bit to a one and do the same as for # +# norms. Denorms are so low that the answer will either be a zero or a # # one. # -# For zeroes/infs/NANs, return the same while setting the FPSR # +# For zeroes/infs/NANs, return the same while setting the FPSR # # as appropriate. # # # ######################################################################### @@ -13230,7 +13230,7 @@ fint: mov.b STAG(%a6),%d1 bne.b fint_not_norm # optimize on non-norm input - + # # Norm: # @@ -13240,7 +13240,7 @@ fmov.l %d0,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fint.x SRC(%a0),%fp0 # execute fint + fint.x SRC(%a0),%fp0 # execute fint fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d0 # save FPSR @@ -13318,16 +13318,16 @@ # d0 = round precision/mode # # # # OUTPUT ************************************************************** # -# fp0 = result # +# fp0 = result # # # # ALGORITHM *********************************************************** # # Separate according to operand type. Unnorms don't pass through # -# here. For norms, load the rounding mode/prec, execute a "fintrz", # +# here. For norms, load the rounding mode/prec, execute a "fintrz", # # then store the resulting FPSR bits. # -# For denorms, force the j-bit to a one and do the same as for # +# For denorms, force the j-bit to a one and do the same as for # # norms. Denorms are so low that the answer will either be a zero or a # # one. # -# For zeroes/infs/NANs, return the same while setting the FPSR # +# For zeroes/infs/NANs, return the same while setting the FPSR # # as appropriate. # # # ######################################################################### @@ -13336,7 +13336,7 @@ fintrz: mov.b STAG(%a6),%d1 bne.b fintrz_not_norm # optimize on non-norm input - + # # Norm: # @@ -13431,17 +13431,17 @@ # # # ALGORITHM *********************************************************** # # Handle NANs, infinities, and zeroes as special cases. Divide # -# norms into extended, single, and double precision. # -# Simply clear sign for extended precision norm. Ext prec denorm # +# norms into extended, single, and double precision. # +# Simply clear sign for extended precision norm. Ext prec denorm # # gets an EXOP created for it since it's an underflow. # # Double and single precision can overflow and underflow. First, # # scale the operand such that the exponent is zero. Perform an "fabs" # -# using the correct rnd mode/prec. Check to see if the original # +# using the correct rnd mode/prec. Check to see if the original # # exponent would take an exception. If so, use unf_res() or ovf_res() # # to calculate the default result. Also, create the EXOP for the # -# exceptional case. If no exception should occur, insert the correct # +# exceptional case. If no exception should occur, insert the correct # # result exponent and return. # -# Unnorms don't pass through here. # +# Unnorms don't pass through here. # # # ######################################################################### @@ -13461,7 +13461,7 @@ mov.l %d0,L_SCR3(%a6) # store rnd info mov.b STAG(%a6),%d1 bne.w fabs_not_norm # optimize on non-norm input - + # # ABSOLUTE VALUE: norms and denorms ONLY! # @@ -13607,10 +13607,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fabs_sd_unfl_ena: @@ -13732,10 +13732,10 @@ ######################################################################### # XDEF **************************************************************** # -# fcmp(): fp compare op routine # +# fcmp(): fp compare op routine # # # # XREF **************************************************************** # -# res_qnan() - return QNAN result # +# res_qnan() - return QNAN result # # res_snan() - return SNAN result # # # # INPUT *************************************************************** # @@ -13747,7 +13747,7 @@ # None # # # # ALGORITHM *********************************************************** # -# Handle NANs and denorms as special cases. For everything else, # +# Handle NANs and denorms as special cases. For everything else, # # just use the actual fcmp instruction to produce the correct condition # # codes. # # # @@ -13760,14 +13760,14 @@ lsl.b &0x3,%d1 or.b STAG(%a6),%d1 bne.b fcmp_not_norm # optimize on non-norm input - + # # COMPARE FP OPs : NORMs, ZEROs, INFs, and "corrected" DENORMs # fcmp_norm: fmovm.x DST(%a1),&0x80 # load dst op - fcmp.x %fp0,SRC(%a0) # do compare + fcmp.x %fp0,SRC(%a0) # do compare fmov.l %fpsr,%d0 # save FPSR rol.l &0x8,%d0 # extract ccode bits @@ -13788,7 +13788,7 @@ short fcmp_norm - tbl_fcmp_op # NORM - ZERO short fcmp_norm - tbl_fcmp_op # NORM - INF short fcmp_res_qnan - tbl_fcmp_op # NORM - QNAN - short fcmp_nrm_dnrm - tbl_fcmp_op # NORM - DENORM + short fcmp_nrm_dnrm - tbl_fcmp_op # NORM - DENORM short fcmp_res_snan - tbl_fcmp_op # NORM - SNAN short tbl_fcmp_op - tbl_fcmp_op # short tbl_fcmp_op - tbl_fcmp_op # @@ -13850,8 +13850,8 @@ rts # -# DENORMs are a little more difficult. -# If you have a 2 DENORMs, then you can just force the j-bit to a one +# DENORMs are a little more difficult. +# If you have a 2 DENORMs, then you can just force the j-bit to a one # and use the fcmp_norm routine. # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one # and use the fcmp_norm routine. @@ -13892,7 +13892,7 @@ mov.l SRC_LO(%a0),FP_SCR0_LO(%a6) lea FP_SCR1(%a6),%a1 lea FP_SCR0(%a6),%a0 - bra.w fcmp_norm + bra.w fcmp_norm fcmp_nrm_dnrm: mov.b SRC_EX(%a0),%d0 # determine if like signs @@ -13924,15 +13924,15 @@ ######################################################################### # XDEF **************************************************************** # -# fsglmul(): emulates the fsglmul instruction # +# fsglmul(): emulates the fsglmul instruction # # # # XREF **************************************************************** # # scale_to_zero_src() - scale src exponent to zero # # scale_to_zero_dst() - scale dst exponent to zero # # unf_res4() - return default underflow result for sglop # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -13950,7 +13950,7 @@ # instruction won't cause an exception. Use the regular fsglmul to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -13982,11 +13982,11 @@ add.l (%sp)+,%d0 # SCALE_FACTOR = scale1 + scale2 - cmpi.l %d0,&0x3fff-0x7ffe # would result ovfl? + cmpi.l %d0,&0x3fff-0x7ffe # would result ovfl? beq.w fsglmul_may_ovfl # result may rnd to overflow blt.w fsglmul_ovfl # result will overflow - cmpi.l %d0,&0x3fff+0x0001 # would result unfl? + cmpi.l %d0,&0x3fff+0x0001 # would result unfl? beq.w fsglmul_may_unfl # result may rnd to no unfl bgt.w fsglmul_unfl # result will underflow @@ -14073,7 +14073,7 @@ fmov.l &0x0,%fpsr # clear FPSR fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply - + fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -14082,7 +14082,7 @@ fabs.x %fp0,%fp1 # make a copy of result fcmp.b %fp1,&0x2 # is |result| >= 2.b? fbge.w fsglmul_ovfl_tst # yes; overflow has occurred - + # no, it didn't overflow; we have correct result bra.w fsglmul_normal_exit @@ -14116,7 +14116,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fsglmul_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -14124,7 +14124,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply fmov.l &0x0,%fpcr # clear FPCR @@ -14149,7 +14149,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -14173,11 +14173,11 @@ mov.l L_SCR3(%a6),%d1 andi.b &0xc0,%d1 # keep rnd prec ori.b &rz_mode*0x10,%d1 # insert RZ - + fmov.l %d1,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply fmov.l &0x0,%fpcr # clear FPCR fabs.x %fp1 # make absolute value @@ -14265,15 +14265,15 @@ ######################################################################### # XDEF **************************************************************** # -# fsgldiv(): emulates the fsgldiv instruction # +# fsgldiv(): emulates the fsgldiv instruction # # # # XREF **************************************************************** # # scale_to_zero_src() - scale src exponent to zero # # scale_to_zero_dst() - scale dst exponent to zero # # unf_res4() - return default underflow result for sglop # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -14291,7 +14291,7 @@ # instruction won't cause an exception. Use the regular fsgldiv to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -14306,7 +14306,7 @@ or.b STAG(%a6),%d1 # combine src tags bne.w fsgldiv_not_norm # optimize on non-norm input - + # # DIVIDE: NORMs and DENORMs ONLY! # @@ -14333,7 +14333,7 @@ cmpi.l %d0,&0x3fff-0x7ffe ble.w fsgldiv_may_ovfl - cmpi.l %d0,&0x3fff-0x0000 # will result underflow? + cmpi.l %d0,&0x3fff-0x0000 # will result underflow? beq.w fsgldiv_may_unfl # maybe bgt.w fsgldiv_unfl # yes; go handle underflow @@ -14393,7 +14393,7 @@ bne.b fsgldiv_ovfl_ena # yes fsgldiv_ovfl_dis: - btst &neg_bit,FPSR_CC(%a6) # is result negative + btst &neg_bit,FPSR_CC(%a6) # is result negative sne %d1 # set sign param accordingly mov.l L_SCR3(%a6),%d0 # pass prec:rnd andi.b &0x30,%d0 # kill precision @@ -14449,7 +14449,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fsgldiv_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -14500,8 +14500,8 @@ # # we still don't know if underflow occurred. result is ~ equal to 1. but, # we don't know if the result was an underflow that rounded up to a 1 -# or a normalized number that rounded down to a 1. so, redo the entire -# operation using RZ as the rounding mode to see what the pre-rounded +# or a normalized number that rounded down to a 1. so, redo the entire +# operation using RZ as the rounding mode to see what the pre-rounded # result is. this case should be relatively rare. # fmovm.x FP_SCR1(%a6),&0x40 # load dst op into %fp1 @@ -14605,25 +14605,25 @@ # fdadd(): emulates the fdadd instruction # # # # XREF **************************************************************** # -# addsub_scaler2() - scale the operands so they won't take exc # +# addsub_scaler2() - scale the operands so they won't take exc # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # # res_qnan() - set QNAN result # -# res_snan() - set SNAN result # +# res_snan() - set SNAN result # # res_operr() - set OPERR result # # scale_to_zero_src() - set src operand exponent equal to zero # # scale_to_zero_dst() - set dst operand exponent equal to zero # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# a1 = pointer to extended precision destination operand # +# a1 = pointer to extended precision destination operand # # # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # # Do addition after scaling exponents such that exception won't # # occur. Then, check result exponent to see if exception would have # @@ -14837,7 +14837,7 @@ # # result is equal to the smallest normalized number in the selected precision -# if the precision is extended, this result could not have come from an +# if the precision is extended, this result could not have come from an # underflow that rounded up. # fadd_may_unfl: @@ -14859,7 +14859,7 @@ # ok, so now the result has a exponent equal to the smallest normalized # exponent for the selected precision. also, the mantissa is equal to # 0x8000000000000000 and this mantissa is the result of rounding non-zero -# g,r,s. +# g,r,s. # now, we must determine whether the pre-rounded result was an underflow # rounded "up" or a normalized number rounded "down". # so, we do this be re-executing the add using RZ as the rounding mode and @@ -14970,7 +14970,7 @@ fmov.s &0x00000000,%fp0 # return +ZERO mov.b &z_bmask,FPSR_CC(%a6) # set Z rts - + # # the ZEROes have opposite signs: # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP. @@ -15024,7 +15024,7 @@ eor.b %d1,%d0 bmi.l res_operr # weed out (-INF)+(+INF) -# ok, so it's not an OPERR. but, we do have to remember to return the +# ok, so it's not an OPERR. but, we do have to remember to return the # src INF since that's where the 881/882 gets the j-bit from... # @@ -15058,25 +15058,25 @@ # fdsub(): emulates the fdsub instruction # # # # XREF **************************************************************** # -# addsub_scaler2() - scale the operands so they won't take exc # +# addsub_scaler2() - scale the operands so they won't take exc # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # # res_qnan() - set QNAN result # -# res_snan() - set SNAN result # +# res_snan() - set SNAN result # # res_operr() - set OPERR result # # scale_to_zero_src() - set src operand exponent equal to zero # # scale_to_zero_dst() - set dst operand exponent equal to zero # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# a1 = pointer to extended precision destination operand # +# a1 = pointer to extended precision destination operand # # # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # # Do subtraction after scaling exponents such that exception won't# # occur. Then, check result exponent to see if exception would have # @@ -15226,7 +15226,7 @@ add.l &0xc,%sp fmovm.x FP_SCR1(%a6),&0x80 # load dst op - + fmov.l &rz_mode*0x10,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR @@ -15290,7 +15290,7 @@ # # result is equal to the smallest normalized number in the selected precision -# if the precision is extended, this result could not have come from an +# if the precision is extended, this result could not have come from an # underflow that rounded up. # fsub_may_unfl: @@ -15312,7 +15312,7 @@ # ok, so now the result has a exponent equal to the smallest normalized # exponent for the selected precision. also, the mantissa is equal to # 0x8000000000000000 and this mantissa is the result of rounding non-zero -# g,r,s. +# g,r,s. # now, we must determine whether the pre-rounded result was an underflow # rounded "up" or a normalized number rounded "down". # so, we do this be re-executing the add using RZ as the rounding mode and @@ -15468,7 +15468,7 @@ # # both operands are INFs. an OPERR will result if the INFs have the -# same signs. else, +# same signs. else, # fsub_inf_2: mov.b SRC_EX(%a0),%d0 # exclusive or the signs @@ -15483,7 +15483,7 @@ fmovm.x SRC(%a0),&0x80 # return src INF fneg.x %fp0 # invert sign fbge.w fsub_inf_done # sign is now positive - mov.b &neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG + mov.b &neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG rts fsub_inf_dst: @@ -15499,7 +15499,7 @@ ######################################################################### # XDEF **************************************************************** # -# fsqrt(): emulates the fsqrt instruction # +# fsqrt(): emulates the fsqrt instruction # # fssqrt(): emulates the fssqrt instruction # # fdsqrt(): emulates the fdsqrt instruction # # # @@ -15507,8 +15507,8 @@ # scale_sqrt() - scale the source operand # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan_1op() - return QNAN result # -# res_snan_1op() - return SNAN result # +# res_qnan_1op() - return QNAN result # +# res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -15525,7 +15525,7 @@ # instruction won't cause an exception. Use the regular fsqrt to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -15547,7 +15547,7 @@ clr.w %d1 mov.b STAG(%a6),%d1 bne.w fsqrt_not_norm # optimize on non-norm input - + # # SQUARE ROOT: norms and denorms ONLY! # @@ -15669,7 +15669,7 @@ fmov.l &rz_mode*0x10,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsqrt.x FP_SCR0(%a6),%fp0 # execute square root + fsqrt.x FP_SCR0(%a6),%fp0 # execute square root fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -15689,10 +15689,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fsqrt_sd_unfl_ena: @@ -15808,15 +15808,15 @@ bra.l res_qnan_1op # -# fsqrt(+0) = +0 -# fsqrt(-0) = -0 +# fsqrt(+0) = +0 +# fsqrt(-0) = -0 # fsqrt(+INF) = +INF -# fsqrt(-INF) = OPERR +# fsqrt(-INF) = OPERR # fsqrt_zero: tst.b SRC_EX(%a0) # is ZERO positive or negative? bmi.b fsqrt_zero_m # negative -fsqrt_zero_p: +fsqrt_zero_p: fmov.s &0x00000000,%fp0 # return +ZERO mov.b &z_bmask,FPSR_CC(%a6) # set 'Z' ccode bit rts @@ -15846,14 +15846,14 @@ # INPUT *************************************************************** # # FP_SRC(a6) = fp op1(src) # # FP_DST(a6) = fp op2(dst) # -# # +# # # OUTPUT ************************************************************** # # FP_SRC(a6) = fp op1 scaled(src) # # FP_DST(a6) = fp op2 scaled(dst) # # d0 = scale amount # # # # ALGORITHM *********************************************************** # -# If the DST exponent is > the SRC exponent, set the DST exponent # +# If the DST exponent is > the SRC exponent, set the DST exponent # # equal to 0x3fff and scale the SRC exponent by the value that the # # DST exponent was scaled by. If the SRC exponent is greater or equal, # # do the opposite. Return this scale factor in d0. # @@ -15916,7 +15916,7 @@ andi.w &0x8000,FP_SCR0_EX(%a6) # zero src exponent bset &0x0,1+FP_SCR0_EX(%a6) # set exp = 1 - mov.l (%sp)+,%d0 # return SCALE factor + mov.l (%sp)+,%d0 # return SCALE factor rts # src exp is >= dst exp; scale src to exp = 0x3fff @@ -15952,7 +15952,7 @@ andi.w &0x8000,FP_SCR1_EX(%a6) # zero dst exponent bset &0x0,1+FP_SCR1_EX(%a6) # set exp = 1 - mov.l (%sp)+,%d0 # return SCALE factor + mov.l (%sp)+,%d0 # return SCALE factor rts ########################################################################## @@ -15967,14 +15967,14 @@ # # # INPUT *************************************************************** # # FP_SCR0(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR0(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # -# Set the exponent of the input operand to 0x3fff. Save the value # -# of the difference between the original and new exponent. Then, # +# Set the exponent of the input operand to 0x3fff. Save the value # +# of the difference between the original and new exponent. Then, # # normalize the operand if it was a DENORM. Add this normalization # # value to the previous value. Return the result. # # # @@ -16020,17 +16020,17 @@ # # # INPUT *************************************************************** # # FP_SCR0(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR0(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # # If the input operand is a DENORM, normalize it. # -# If the exponent of the input operand is even, set the exponent # -# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the # +# If the exponent of the input operand is even, set the exponent # +# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the # # exponent of the input operand is off, set the exponent to ox3fff and # -# return a scale factor of "(exp-0x3fff)/2". # +# return a scale factor of "(exp-0x3fff)/2". # # # ######################################################################### @@ -16094,14 +16094,14 @@ # # # INPUT *************************************************************** # # FP_SCR1(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR1(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # -# Set the exponent of the input operand to 0x3fff. Save the value # -# of the difference between the original and new exponent. Then, # +# Set the exponent of the input operand to 0x3fff. Save the value # +# of the difference between the original and new exponent. Then, # # normalize the operand if it was a DENORM. Add this normalization # # value to the previous value. Return the result. # # # @@ -16149,21 +16149,21 @@ # INPUT *************************************************************** # # FP_SRC(a6) = pointer to extended precision src operand # # FP_DST(a6) = pointer to extended precision dst operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # # ALGORITHM *********************************************************** # -# If either operand (but not both operands) of an operation is a # +# If either operand (but not both operands) of an operation is a # # nonsignalling NAN, then that NAN is returned as the result. If both # -# operands are nonsignalling NANs, then the destination operand # +# operands are nonsignalling NANs, then the destination operand # # nonsignalling NAN is returned as the result. # -# If either operand to an operation is a signalling NAN (SNAN), # +# If either operand to an operation is a signalling NAN (SNAN), # # then, the SNAN bit is set in the FPSR EXC byte. If the SNAN trap # -# enable bit is set in the FPCR, then the trap is taken and the # +# enable bit is set in the FPCR, then the trap is taken and the # # destination is not modified. If the SNAN trap enable bit is not set, # -# then the SNAN is converted to a nonsignalling NAN (by setting the # -# SNAN bit in the operand to one), and the operation continues as # +# then the SNAN is converted to a nonsignalling NAN (by setting the # +# SNAN bit in the operand to one), and the operation continues as # # described in the preceding paragraph, for nonsignalling NANs. # # Make sure the appropriate FPSR bits are set before exiting. # # # @@ -16202,7 +16202,7 @@ lea FP_DST(%a6), %a0 cmp.b STAG(%a6), &SNAN bne nan_done - or.l &aiop_mask+snan_mask, USER_FPSR(%a6) + or.l &aiop_mask+snan_mask, USER_FPSR(%a6) nan_done: or.l &nan_mask, USER_FPSR(%a6) nan_comp: @@ -16215,14 +16215,14 @@ ######################################################################### # XDEF **************************************************************** # -# res_operr(): return default result during operand error # +# res_operr(): return default result during operand error # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # fp0 = default operand error result # # # @@ -16230,8 +16230,8 @@ # An nonsignalling NAN is returned as the default result when # # an operand error occurs for the following cases: # # # -# Multiply: (Infinity x Zero) # -# Divide : (Zero / Zero) || (Infinity / Infinity) # +# Multiply: (Infinity x Zero) # +# Divide : (Zero / Zero) || (Infinity / Infinity) # # # ######################################################################### @@ -16241,7 +16241,7 @@ fmovm.x nan_return(%pc), &0x80 rts -nan_return: +nan_return: long 0x7fff0000, 0xffffffff, 0xffffffff ######################################################################### @@ -16268,7 +16268,7 @@ # or false. # # If a BSUN exception should be indicated, the BSUN and ABSUN # # bits are set in the stacked FPSR. If the BSUN exception is enabled, # -# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # +# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # # enabled BSUN should not be flagged and the predicate is true, then # # Dn is fetched and decremented by one. If Dn is not equal to -1, add # # the displacement value to the stacked PC so that when an "rte" is # @@ -16286,7 +16286,7 @@ ror.l &0x8,%d1 # rotate to top byte fmov.l %d1,%fpsr # insert into FPSR - mov.w (tbl_fdbcc.b,%pc,%d0.w*2),%d1 # load table + mov.w (tbl_fdbcc.b,%pc,%d0.w*2),%d1 # load table jmp (tbl_fdbcc.b,%pc,%d1.w) # jump to fdbcc routine tbl_fdbcc: @@ -16327,7 +16327,7 @@ # # # IEEE Nonaware tests # # # -# For the IEEE nonaware tests, only the false branch changes the # +# For the IEEE nonaware tests, only the false branch changes the # # counter. However, the true branch may set bsun so we check to see # # if the NAN bit is set, in which case BSUN and AIOP will be set. # # # @@ -16376,7 +16376,7 @@ beq.w fdbcc_false # no;go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # no; go handle counter fdbcc_gt_yes: rts # do nothing @@ -16384,7 +16384,7 @@ # # not greater than: # -# NANvZvN +# NANvZvN # fdbcc_ngt: fbngt.w fdbcc_ngt_yes # not greater than? @@ -16395,7 +16395,7 @@ beq.b fdbcc_ngt_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception fdbcc_ngt_done: rts # no; do nothing @@ -16411,14 +16411,14 @@ beq.w fdbcc_false # no;go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # no; go handle counter fdbcc_ge_yes: btst &nan_bit, FPSR_CC(%a6) # is NAN set in cc? beq.b fdbcc_ge_yes_done # no;go do nothing ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception fdbcc_ge_yes_done: rts # do nothing @@ -16436,7 +16436,7 @@ beq.b fdbcc_nge_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception fdbcc_nge_done: rts # no; do nothing @@ -16452,7 +16452,7 @@ beq.w fdbcc_false # no; go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # no; go handle counter fdbcc_lt_yes: rts # do nothing @@ -16471,7 +16471,7 @@ beq.b fdbcc_nlt_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception fdbcc_nlt_done: rts # no; do nothing @@ -16487,14 +16487,14 @@ beq.w fdbcc_false # no; go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # no; go handle counter fdbcc_le_yes: btst &nan_bit, FPSR_CC(%a6) # is NAN set in cc? beq.b fdbcc_le_yes_done # no; go do nothing ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? - bne.w fdbcc_bsun # yes; we have an exception + bne.w fdbcc_bsun # yes; we have an exception fdbcc_le_yes_done: rts # do nothing @@ -16611,7 +16611,7 @@ # False # fdbcc_sf: - btst &nan_bit, FPSR_CC(%a6) # is NAN set? + btst &nan_bit, FPSR_CC(%a6) # is NAN set? beq.w fdbcc_false # no;go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? @@ -16624,7 +16624,7 @@ # True # fdbcc_st: - btst &nan_bit, FPSR_CC(%a6) # is NAN set? + btst &nan_bit, FPSR_CC(%a6) # is NAN set? beq.b fdbcc_st_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? @@ -16640,14 +16640,14 @@ fdbcc_seq: fbseq.w fdbcc_seq_yes # signalling equal? fdbcc_seq_no: - btst &nan_bit, FPSR_CC(%a6) # is NAN set? + btst &nan_bit, FPSR_CC(%a6) # is NAN set? beq.w fdbcc_false # no;go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # go handle counter fdbcc_seq_yes: - btst &nan_bit, FPSR_CC(%a6) # is NAN set? + btst &nan_bit, FPSR_CC(%a6) # is NAN set? beq.b fdbcc_seq_yes_done # no;go do nothing ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? @@ -16663,14 +16663,14 @@ fdbcc_sneq: fbsneq.w fdbcc_sneq_yes # signalling not equal? fdbcc_sneq_no: - btst &nan_bit, FPSR_CC(%a6) # is NAN set? + btst &nan_bit, FPSR_CC(%a6) # is NAN set? beq.w fdbcc_false # no;go handle counter ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? bne.w fdbcc_bsun # yes; we have an exception bra.w fdbcc_false # go handle counter fdbcc_sneq_yes: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fdbcc_sneq_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled? @@ -16684,7 +16684,7 @@ # # # For the IEEE aware tests, action is only taken if the result is false.# # Therefore, the opposite branch type is used to jump to the decrement # -# routine. # +# routine. # # The BSUN exception will not be set for any of these tests. # # # ######################################################################### @@ -16845,7 +16845,7 @@ # pc += sign_ext(16-bit displacement) # fdbcc_false: - mov.b 1+EXC_OPWORD(%a6), %d1 # fetch lo opword + mov.b 1+EXC_OPWORD(%a6), %d1 # fetch lo opword andi.w &0x7, %d1 # extract count register bsr.l fetch_dreg # fetch count value @@ -16856,7 +16856,7 @@ bsr.l store_dreg_l # store new count value cmpi.w %d0, &-0x1 # is (Dn == -1)? - bne.b fdbcc_false_cont # no; + bne.b fdbcc_false_cont # no; rts fdbcc_false_cont: @@ -16897,7 +16897,7 @@ # or false. # # If a BSUN exception should be indicated, the BSUN and ABSUN # # bits are set in the stacked FPSR. If the BSUN exception is enabled, # -# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # +# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # # enabled BSUN should not be flagged and the predicate is true, then # # the ftrapcc_flg is set in the SPCOND_FLG location. These special # # flags indicate to the calling routine to emulate the exceptional # @@ -16914,7 +16914,7 @@ ror.l &0x8,%d1 # rotate to top byte fmov.l %d1,%fpsr # insert into FPSR - mov.w (tbl_ftrapcc.b,%pc,%d0.w*2), %d1 # load table + mov.w (tbl_ftrapcc.b,%pc,%d0.w*2), %d1 # load table jmp (tbl_ftrapcc.b,%pc,%d1.w) # jump to ftrapcc routine tbl_ftrapcc: @@ -17006,7 +17006,7 @@ # # not greater than: # -# NANvZvN +# NANvZvN # ftrapcc_ngt: fbngt.w ftrapcc_ngt_yes # not greater than? @@ -17226,7 +17226,7 @@ # False # ftrapcc_sf: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.b ftrapcc_sf_done # no; go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17240,7 +17240,7 @@ # True # ftrapcc_st: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w ftrapcc_trap # no; go take trap ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17255,7 +17255,7 @@ ftrapcc_seq: fbseq.w ftrapcc_seq_yes # signalling equal? ftrapcc_seq_no: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w ftrapcc_seq_done # no; go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17263,7 +17263,7 @@ ftrapcc_seq_done: rts # no; do nothing ftrapcc_seq_yes: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w ftrapcc_trap # no; go take trap ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17278,7 +17278,7 @@ ftrapcc_sneq: fbsneq.w ftrapcc_sneq_yes # signalling equal? ftrapcc_sneq_no: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w ftrapcc_sneq_no_done # no; go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17286,7 +17286,7 @@ ftrapcc_sneq_no_done: rts # do nothing ftrapcc_sneq_yes: - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w ftrapcc_trap # no; go take trap ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit btst &bsun_bit, FPCR_ENABLE(%a6) # was BSUN set? @@ -17469,7 +17469,7 @@ # or false. # # If a BSUN exception should be indicated, the BSUN and ABSUN # # bits are set in the stacked FPSR. If the BSUN exception is enabled, # -# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # +# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an # # enabled BSUN should not be flagged and the predicate is true, then # # the result is stored to the data register file or memory # # # @@ -17484,8 +17484,8 @@ ror.l &0x8,%d1 # rotate to top byte fmov.l %d1,%fpsr # insert into FPSR - mov.w (tbl_fscc.b,%pc,%d0.w*2),%d1 # load table - jmp (tbl_fscc.b,%pc,%d1.w) # jump to fscc routine + mov.w (tbl_fscc.b,%pc,%d0.w*2),%d1 # load table + jmp (tbl_fscc.b,%pc,%d1.w) # jump to fscc routine tbl_fscc: short fscc_f - tbl_fscc # 00 @@ -17585,7 +17585,7 @@ # # not greater than: # -# NANvZvN +# NANvZvN # fscc_ngt: fbngt.w fscc_ngt_yes # not greater than? @@ -17613,7 +17613,7 @@ ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish fscc_ge_yes: - st %d0 # set true + st %d0 # set true btst &nan_bit, FPSR_CC(%a6) # is NAN set in cc? beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit @@ -17806,7 +17806,7 @@ # fscc_sf: clr.b %d0 # set false - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish @@ -17818,7 +17818,7 @@ # fscc_st: st %d0 # set false - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish @@ -17832,13 +17832,13 @@ fbseq.w fscc_seq_yes # signalling equal? fscc_seq_no: clr.b %d0 # set false - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish fscc_seq_yes: st %d0 # set true - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish @@ -17852,13 +17852,13 @@ fbsneq.w fscc_sneq_yes # signalling equal? fscc_sneq_no: clr.b %d0 # set false - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish fscc_sneq_yes: st %d0 # set true - btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit + btst &nan_bit, FPSR_CC(%a6) # set BSUN exc bit beq.w fscc_done # no;go finish ori.l &bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit bra.w fscc_chk_bsun # go finish @@ -18044,7 +18044,7 @@ ####################################################################### # -# the bsun exception bit was set. now, check to see is BSUN +# the bsun exception bit was set. now, check to see is BSUN # is enabled. if so, don't store result and correct stack frame # for a bsun exception. # @@ -18061,7 +18061,7 @@ fscc_done: mov.l %d0,%a0 # save result for a moment - mov.b 1+EXC_OPWORD(%a6),%d1 # fetch lo opword + mov.b 1+EXC_OPWORD(%a6),%d1 # fetch lo opword mov.l %d1,%d0 # make a copy andi.b &0x38,%d1 # extract src mode @@ -18075,7 +18075,7 @@ # # the stacked is correct with the exception of: -# -> Dn : is garbage +# -> Dn : is garbage # # if the addressing mode is post-increment or pre-decrement, # then the address registers have not been updated. @@ -18088,7 +18088,7 @@ mov.l %a0,%d0 # pass result in d0 mov.l EXC_EA(%a6),%a0 # fetch - bsr.l _dmem_write_byte # write result byte + bsr.l _dmem_write_byte # write result byte tst.l %d1 # did dstore fail? bne.w fscc_err # yes @@ -18159,7 +18159,7 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If instr is "fmovm Dn,-(A7)" from supervisor mode, # # d0 = size of dump # @@ -18181,25 +18181,25 @@ # The data register is determined and its value loaded to get the # # string of FP registers affected. This value is used as an index into # # a lookup table such that we can determine the number of bytes # -# involved. # +# involved. # # If the instruction is "fmovm.x ,Dn", a _mem_read() is used # # to read in all FP values. Again, _mem_read() may fail and require a # -# special exit. # +# special exit. # # If the instruction is "fmovm.x DN,", a _mem_write() is used # # to write all FP values. _mem_write() may also fail. # -# If the instruction is "fmovm.x DN,-(a7)" from supervisor mode, # +# If the instruction is "fmovm.x DN,-(a7)" from supervisor mode, # # then we return the size of the dump and the string to the caller # # so that the move can occur outside of this routine. This special # # case is required so that moves to the system stack are handled # # correctly. # # # # DYNAMIC: # -# fmovm.x dn, # -# fmovm.x , dn # +# fmovm.x dn, # +# fmovm.x , dn # # # # # # 1111 0010 00 || 11@& 1000 0$$$ 0000 # -# # +# # # & = (0): predecrement addressing mode # # (1): postincrement or control addressing mode # # @ = (0): move listed regs from memory to the FPU # @@ -18468,12 +18468,12 @@ byte 0x24,0x30,0x30,0x3c,0x30,0x3c,0x3c,0x48 byte 0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54 byte 0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54 - byte 0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60 + byte 0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60 # # table to convert a pre-decrement bit string into a post-increment # or control bit string. -# ex: 0x00 ==> 0x00 +# ex: 0x00 ==> 0x00 # 0x01 ==> 0x80 # 0x02 ==> 0x40 # . @@ -18555,59 +18555,59 @@ short tbl_fea_mode - tbl_fea_mode short tbl_fea_mode - tbl_fea_mode - short faddr_ind_a0 - tbl_fea_mode - short faddr_ind_a1 - tbl_fea_mode - short faddr_ind_a2 - tbl_fea_mode - short faddr_ind_a3 - tbl_fea_mode - short faddr_ind_a4 - tbl_fea_mode - short faddr_ind_a5 - tbl_fea_mode - short faddr_ind_a6 - tbl_fea_mode - short faddr_ind_a7 - tbl_fea_mode - - short faddr_ind_p_a0 - tbl_fea_mode - short faddr_ind_p_a1 - tbl_fea_mode - short faddr_ind_p_a2 - tbl_fea_mode - short faddr_ind_p_a3 - tbl_fea_mode - short faddr_ind_p_a4 - tbl_fea_mode - short faddr_ind_p_a5 - tbl_fea_mode - short faddr_ind_p_a6 - tbl_fea_mode - short faddr_ind_p_a7 - tbl_fea_mode - - short faddr_ind_m_a0 - tbl_fea_mode - short faddr_ind_m_a1 - tbl_fea_mode - short faddr_ind_m_a2 - tbl_fea_mode - short faddr_ind_m_a3 - tbl_fea_mode - short faddr_ind_m_a4 - tbl_fea_mode - short faddr_ind_m_a5 - tbl_fea_mode - short faddr_ind_m_a6 - tbl_fea_mode - short faddr_ind_m_a7 - tbl_fea_mode - - short faddr_ind_disp_a0 - tbl_fea_mode - short faddr_ind_disp_a1 - tbl_fea_mode - short faddr_ind_disp_a2 - tbl_fea_mode - short faddr_ind_disp_a3 - tbl_fea_mode - short faddr_ind_disp_a4 - tbl_fea_mode - short faddr_ind_disp_a5 - tbl_fea_mode - short faddr_ind_disp_a6 - tbl_fea_mode + short faddr_ind_a0 - tbl_fea_mode + short faddr_ind_a1 - tbl_fea_mode + short faddr_ind_a2 - tbl_fea_mode + short faddr_ind_a3 - tbl_fea_mode + short faddr_ind_a4 - tbl_fea_mode + short faddr_ind_a5 - tbl_fea_mode + short faddr_ind_a6 - tbl_fea_mode + short faddr_ind_a7 - tbl_fea_mode + + short faddr_ind_p_a0 - tbl_fea_mode + short faddr_ind_p_a1 - tbl_fea_mode + short faddr_ind_p_a2 - tbl_fea_mode + short faddr_ind_p_a3 - tbl_fea_mode + short faddr_ind_p_a4 - tbl_fea_mode + short faddr_ind_p_a5 - tbl_fea_mode + short faddr_ind_p_a6 - tbl_fea_mode + short faddr_ind_p_a7 - tbl_fea_mode + + short faddr_ind_m_a0 - tbl_fea_mode + short faddr_ind_m_a1 - tbl_fea_mode + short faddr_ind_m_a2 - tbl_fea_mode + short faddr_ind_m_a3 - tbl_fea_mode + short faddr_ind_m_a4 - tbl_fea_mode + short faddr_ind_m_a5 - tbl_fea_mode + short faddr_ind_m_a6 - tbl_fea_mode + short faddr_ind_m_a7 - tbl_fea_mode + + short faddr_ind_disp_a0 - tbl_fea_mode + short faddr_ind_disp_a1 - tbl_fea_mode + short faddr_ind_disp_a2 - tbl_fea_mode + short faddr_ind_disp_a3 - tbl_fea_mode + short faddr_ind_disp_a4 - tbl_fea_mode + short faddr_ind_disp_a5 - tbl_fea_mode + short faddr_ind_disp_a6 - tbl_fea_mode short faddr_ind_disp_a7 - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - - short fabs_short - tbl_fea_mode - short fabs_long - tbl_fea_mode - short fpc_ind - tbl_fea_mode - short fpc_ind_ext - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + + short fabs_short - tbl_fea_mode + short fabs_long - tbl_fea_mode + short fpc_ind - tbl_fea_mode + short fpc_ind_ext - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode ################################### # Address register indirect: (An) # @@ -18903,7 +18903,7 @@ btst &0x8,%d0 bne.w fcalc_mem_ind - + mov.l %d0,L_SCR1(%a6) # hold opword mov.l %d0,%d1 @@ -18999,7 +18999,7 @@ btst &0x8,%d0 # is disp only 8 bits? bne.w fcalc_mem_ind # calc memory indirect - + mov.l %d0,L_SCR1(%a6) # store opword mov.l %d0,%d1 # make extword copy @@ -19076,7 +19076,7 @@ bfextu %d5{&26:&2},%d0 # get bd size # beq.l fmovm_error # if (size == 0) it's reserved - cmpi.b %d0,&0x2 + cmpi.b %d0,&0x2 blt.b fno_bd beq.b fget_word_bd @@ -19098,7 +19098,7 @@ bne.l fcea_iacc # yes ext.l %d0 # sign extend bd - + fchk_ind: add.l %d0,%d3 # base += bd @@ -19107,10 +19107,10 @@ bfextu %d5{&30:&2},%d0 # is od suppressed? beq.w faii_bd - cmpi.b %d0,&0x2 + cmpi.b %d0,&0x2 blt.b fnull_od beq.b fword_od - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long @@ -19118,7 +19118,7 @@ tst.l %d1 # did ifetch fail? bne.l fcea_iacc # yes - bra.b fadd_them + bra.b fadd_them fword_od: mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr @@ -19171,7 +19171,7 @@ rts ######################################################### -fcea_err: +fcea_err: mov.l %d3,%a0 movm.l (%sp)+,&0x003c # restore d2-d5 @@ -19181,7 +19181,7 @@ fcea_iacc: movm.l (%sp)+,&0x003c # restore d2-d5 bra.l iea_iacc - + fmovm_out_err: bsr.l restore mov.w &0x00e1,%d0 @@ -19197,7 +19197,7 @@ ######################################################################### # XDEF **************************************************************** # -# fmovm_ctrl(): emulate fmovm.l of control registers instr # +# fmovm_ctrl(): emulate fmovm.l of control registers instr # # # # XREF **************************************************************** # # _imem_read_long() - read longword from memory # @@ -19205,7 +19205,7 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If _imem_read_long() doesn't fail: # # USER_FPCR(a6) = new FPCR value # @@ -19213,14 +19213,14 @@ # USER_FPIAR(a6) = new FPIAR value # # # # ALGORITHM *********************************************************** # -# Decode the instruction type by looking at the extension word # +# Decode the instruction type by looking at the extension word # # in order to see how many control registers to fetch from memory. # # Fetch them using _imem_read_long(). If this fetch fails, exit through # # the special access error exit handler iea_iacc(). # # # # Instruction word decoding: # # # -# fmovem.l #, {FPIAR&|FPCR&|FPSR} # +# fmovem.l #, {FPIAR&|FPCR&|FPSR} # # # # WORD1 WORD2 # # 1111 0010 00 111100 100$ $$00 0000 0000 # @@ -19241,7 +19241,7 @@ beq.w fctrl_in_6 # yes cmpi.b %d0,&0x94 # fpcr & fpiar ? beq.b fctrl_in_5 # yes - + # fmovem.l #, fpsr/fpiar fctrl_in_3: mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr @@ -19340,21 +19340,21 @@ # # # INPUT *************************************************************** # # d0 = number of bytes to adjust by # -# # +# # # OUTPUT ************************************************************** # # None # # # # ALGORITHM *********************************************************** # # "Dummy" CALCulate Effective Address: # -# The stacked for FP unimplemented instructions and opclass # +# The stacked for FP unimplemented instructions and opclass # # two packed instructions is correct with the exception of... # # # # 1) -(An) : The register is not updated regardless of size. # -# Also, for extended precision and packed, the # +# Also, for extended precision and packed, the # # stacked value is 8 bytes too big # # 2) (An)+ : The register is not updated. # -# 3) # : The upper longword of the immediate operand is # -# stacked b,w,l and s sizes are completely stacked. # +# 3) # : The upper longword of the immediate operand is # +# stacked b,w,l and s sizes are completely stacked. # # d,x, and p are not. # # # ######################################################################### @@ -19390,8 +19390,8 @@ lea ([USER_FPIAR,%a6],0x4),%a0 # no; return rts -# here, the is stacked correctly. however, we must update the -# address register... +# here, the is stacked correctly. however, we must update the +# address register... dcea_pi: mov.l %a0,%d0 # pass amt to inc by bsr.l inc_areg # inc addr register @@ -19399,7 +19399,7 @@ mov.l EXC_EA(%a6),%a0 # stacked is correct rts -# the is stacked correctly for all but extended and packed which +# the is stacked correctly for all but extended and packed which # the s are 8 bytes too large. # it would make no sense to have a pre-decrement to a7 in supervisor # mode so we don't even worry about this tricky case here : ) @@ -19419,7 +19419,7 @@ ######################################################################### # XDEF **************************************************************** # -# _calc_ea_fout(): calculate correct stacked for extended # +# _calc_ea_fout(): calculate correct stacked for extended # # and packed data opclass 3 operations. # # # # XREF **************************************************************** # @@ -19427,22 +19427,22 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # a0 = return correct effective address # # # # ALGORITHM *********************************************************** # # For opclass 3 extended and packed data operations, the # # stacked for the exception is incorrect for -(an) and (an)+ addressing # -# modes. Also, while we're at it, the index register itself must get # +# modes. Also, while we're at it, the index register itself must get # # updated. # -# So, for -(an), we must subtract 8 off of the stacked value # +# So, for -(an), we must subtract 8 off of the stacked value # # and return that value as the correct and store that value in An. # # For (an)+, the stacked is correct but we must adjust An by +12. # # # ######################################################################### -# This calc_ea is currently used to retrieve the correct +# This calc_ea is currently used to retrieve the correct # for fmove outs of type extended and packed. global _calc_ea_fout _calc_ea_fout: @@ -19463,7 +19463,7 @@ # (An)+ : extended and packed fmove out # : stacked is correct -# : "An" not updated +# : "An" not updated ceaf_pi: mov.w (tbl_ceaf_pi.b,%pc,%d1.w*2),%d1 mov.l EXC_EA(%a6),%a0 @@ -19574,31 +19574,31 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If memory access doesn't fail: # # FP_SRC(a6) = source operand in extended precision # -# FP_DST(a6) = destination operand in extended precision # +# FP_DST(a6) = destination operand in extended precision # # # # ALGORITHM *********************************************************** # -# This is called from the Unimplemented FP exception handler in # +# This is called from the Unimplemented FP exception handler in # # order to load the source and maybe destination operand into # # FP_SRC(a6) and FP_DST(a6). If the instruction was opclass zero, load # # the source and destination from the FP register file. Set the optype # # tags for both if dyadic, one for monadic. If a number is an UNNORM, # # convert it to a DENORM or a ZERO. # -# If the instruction is opclass two (memory->reg), then fetch # -# the destination from the register file and the source operand from # +# If the instruction is opclass two (memory->reg), then fetch # +# the destination from the register file and the source operand from # # memory. Tag and fix both as above w/ opclass zero instructions. # -# If the source operand is byte,word,long, or single, it may be # +# If the source operand is byte,word,long, or single, it may be # # in the data register file. If it's actually out in memory, use one of # # the mem_read() routines to fetch it. If the mem_read() access returns # # a failing value, exit through the special facc_in() routine which # # will create an access error exception frame from the current exception # # frame. # -# Immediate data and regular data accesses are separated because # +# Immediate data and regular data accesses are separated because # # if an immediate data access fails, the resulting fault status # -# longword stacked for the access error exception must have the # +# longword stacked for the access error exception must have the # # instruction bit set. # # # ######################################################################### @@ -19644,7 +19644,7 @@ cmpi.b %d0, &UNNORM # is dst fpreg an UNNORM? beq.b op000_dst_unnorm # yes op000_dst_cont: - mov.b %d0, DTAG(%a6) # store the dst optype tag + mov.b %d0, DTAG(%a6) # store the dst optype tag op000_src: bfextu EXC_CMDREG(%a6){&3:&3}, %d0 # extract src field @@ -19709,7 +19709,7 @@ swbeg &0x8 tbl_op010_dreg: short opd_long - tbl_op010_dreg - short opd_sgl - tbl_op010_dreg + short opd_sgl - tbl_op010_dreg short tbl_op010_dreg - tbl_op010_dreg short tbl_op010_dreg - tbl_op010_dreg short opd_word - tbl_op010_dreg @@ -19722,7 +19722,7 @@ # opd_long: bsr.l fetch_dreg # fetch long in d0 - fmov.l %d0, %fp0 # load a long + fmov.l %d0, %fp0 # load a long fmovm.x &0x80, FP_SRC(%a6) # return src op in FP_SRC fbeq.w opd_long_zero # long is a ZERO rts @@ -19735,7 +19735,7 @@ # opd_word: bsr.l fetch_dreg # fetch word in d0 - fmov.w %d0, %fp0 # load a word + fmov.w %d0, %fp0 # load a word fmovm.x &0x80, FP_SRC(%a6) # return src op in FP_SRC fbeq.w opd_word_zero # WORD is a ZERO rts @@ -19748,7 +19748,7 @@ # opd_byte: bsr.l fetch_dreg # fetch word in d0 - fmov.b %d0, %fp0 # load a byte + fmov.b %d0, %fp0 # load a byte fmovm.x &0x80, FP_SRC(%a6) # return src op in FP_SRC fbeq.w opd_byte_zero # byte is a ZERO rts @@ -19766,7 +19766,7 @@ bsr.l fetch_dreg # fetch sgl in d0 mov.l %d0,L_SCR1(%a6) - lea L_SCR1(%a6), %a0 # pass: ptr to the sgl + lea L_SCR1(%a6), %a0 # pass: ptr to the sgl bsr.l set_tag_s # determine sgl type mov.b %d0, STAG(%a6) # save the src tag @@ -19813,7 +19813,7 @@ ######################################### # load a LONG into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 4 bytes into L_SCR1 # # (3) fmov.l into %fp0 # @@ -19849,7 +19849,7 @@ ######################################### # load a WORD into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 2 bytes into L_SCR1 # # (3) fmov.w into %fp0 # @@ -19885,7 +19885,7 @@ ######################################### # load a BYTE into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 1 byte into L_SCR1 # # (3) fmov.b into %fp0 # @@ -19921,7 +19921,7 @@ ######################################### # load a SGL into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 4 bytes into L_SCR1 # # (3) fmov.s into %fp0 # @@ -19961,7 +19961,7 @@ bne.l funimp_iacc # yes bra.b load_sgl_cont -# must convert sgl denorm format to an Xprec denorm fmt suitable for +# must convert sgl denorm format to an Xprec denorm fmt suitable for # normalization... # %a0 : points to sgl denorm get_sgl_denorm: @@ -20003,7 +20003,7 @@ ######################################### # load a DBL into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 8 bytes into L_SCR(1,2)# # (3) fmov.d into %fp0 # @@ -20046,7 +20046,7 @@ bne.l funimp_iacc # yes bra.b load_dbl_cont -# must convert dbl denorm format to an Xprec denorm fmt suitable for +# must convert dbl denorm format to an Xprec denorm fmt suitable for # normalization... # %a0 : loc. of dbl denorm get_dbl_denorm: @@ -20092,7 +20092,7 @@ ################################################# # load a Xprec into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 12 bytes into L_SCR(1,2) # # (3) fmov.x into %fp0 # @@ -20124,7 +20124,7 @@ ################################################# # load a packed into %fp0: # -# -number can't fault # +# -number can't fault # # (1) calc ea # # (2) read 12 bytes into L_SCR(1,2,3) # # (3) fmov.x into %fp0 # @@ -20143,11 +20143,11 @@ load_packed_unnorm: bsr.l unnorm_fix # fix the UNNORM ZERO mov.b %d0,STAG(%a6) # store the src optype tag - rts + rts ######################################################################### # XDEF **************************************************************** # -# fout(): move from fp register to memory or data register # +# fout(): move from fp register to memory or data register # # # # XREF **************************************************************** # # _round() - needed to create EXOP for sgl/dbl precision # @@ -20167,7 +20167,7 @@ # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # # d0 = round prec,mode # -# # +# # # OUTPUT ************************************************************** # # fp0 : intermediate underflow or overflow result if # # OVFL/UNFL occurred for a sgl or dbl operand # @@ -20186,9 +20186,9 @@ # w/ the address index register as appropriate w/ _calc_ea_fout(). If # # the source is a denorm and if underflow is enabled, an EXOP must be # # created. # -# For packed, the k-factor must be fetched from the instruction # -# word or a data register. The must be fixed as w/ extended # -# precision. Then, bindec() is called to create the appropriate # +# For packed, the k-factor must be fetched from the instruction # +# word or a data register. The must be fixed as w/ extended # +# precision. Then, bindec() is called to create the appropriate # # packed result. # # If at any time an access error is flagged by one of the move- # # to-memory routines, then a special exit must be made so that the # @@ -20304,7 +20304,7 @@ ori.l &0x00800000,%d1 # make smallest sgl fmov.s %d1,%fp0 bra.b fout_word_norm - + ################################################################# # fmove.l out ################################################### ################################################################# @@ -20378,7 +20378,7 @@ mov.l &0xc,%d0 # pass: opsize is 12 bytes # we must not yet write the extended precision data to the stack -# in the pre-decrement case from supervisor mode or else we'll corrupt +# in the pre-decrement case from supervisor mode or else we'll corrupt # the stack frame. so, leave it in FP_SRC for now and deal with it later... cmpi.b SPCOND_FLG(%a6),&mda7_flg beq.b fout_ext_a7 @@ -20465,7 +20465,7 @@ fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d1 # save FPSR - or.w %d1,2+USER_FPSR(%a6) # set possible inex2/ainex + or.w %d1,2+USER_FPSR(%a6) # set possible inex2/ainex fout_sgl_exg_write: mov.b 1+EXC_OPWORD(%a6),%d1 # extract dst mode @@ -20506,7 +20506,7 @@ lea FP_SCR0(%a6),%a0 bsr.l norm # normalize the DENORM - + fout_sgl_unfl_cont: lea FP_SCR0(%a6),%a0 # pass: ptr to operand mov.l L_SCR3(%a6),%d1 # pass: rnd prec,mode @@ -20557,7 +20557,7 @@ # call ovf_res() w/ sgl prec and the correct rnd mode to create the default # overflow result. DON'T save the returned ccodes from ovf_res() since -# fmove out doesn't alter them. +# fmove out doesn't alter them. tst.b SRC_EX(%a0) # is operand negative? smi %d1 # set if so mov.l L_SCR3(%a6),%d0 # pass: sgl prec,rnd mode @@ -20612,7 +20612,7 @@ fabs.x %fp0 # need absolute value fcmp.b %fp0,&0x2 # did exponent increase? - fblt.w fout_sgl_exg # no; go finish NORM + fblt.w fout_sgl_exg # no; go finish NORM bra.w fout_sgl_ovfl # yes; go handle overflow ################ @@ -20703,7 +20703,7 @@ fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d0 # save FPSR - or.w %d0,2+USER_FPSR(%a6) # set possible inex2/ainex + or.w %d0,2+USER_FPSR(%a6) # set possible inex2/ainex mov.l EXC_EA(%a6),%a1 # pass: dst addr lea L_SCR1(%a6),%a0 # pass: src addr @@ -20713,7 +20713,7 @@ tst.l %d1 # did dstore fail? bne.l facc_out_d # yes - rts # no; so we're finished + rts # no; so we're finished # # here, we know that the operand would UNFL if moved out to double prec, @@ -20735,7 +20735,7 @@ lea FP_SCR0(%a6),%a0 bsr.l norm # normalize the DENORM - + fout_dbl_unfl_cont: lea FP_SCR0(%a6),%a0 # pass: ptr to operand mov.l L_SCR3(%a6),%d1 # pass: rnd prec,mode @@ -20778,7 +20778,7 @@ # call ovf_res() w/ dbl prec and the correct rnd mode to create the default # overflow result. DON'T save the returned ccodes from ovf_res() since -# fmove out doesn't alter them. +# fmove out doesn't alter them. tst.b SRC_EX(%a0) # is operand negative? smi %d1 # set if so mov.l L_SCR3(%a6),%d0 # pass: dbl prec,rnd mode @@ -20823,19 +20823,19 @@ fabs.x %fp0 # need absolute value fcmp.b %fp0,&0x2 # did exponent increase? - fblt.w fout_dbl_exg # no; go finish NORM + fblt.w fout_dbl_exg # no; go finish NORM bra.w fout_dbl_ovfl # yes; go handle overflow ######################################################################### # XDEF **************************************************************** # -# dst_dbl(): create double precision value from extended prec. # +# dst_dbl(): create double precision value from extended prec. # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to source operand in extended precision # -# # +# # # OUTPUT ************************************************************** # # d0 = hi(double precision result) # # d1 = lo(double precision result) # @@ -20849,18 +20849,18 @@ # get rid of ext integer bit # # dbl_mant = ext_mant{62:12} # # # -# --------------- --------------- --------------- # +# --------------- --------------- --------------- # # extended -> |s| exp | |1| ms mant | | ls mant | # -# --------------- --------------- --------------- # -# 95 64 63 62 32 31 11 0 # +# --------------- --------------- --------------- # +# 95 64 63 62 32 31 11 0 # # | | # # | | # # | | # -# v v # -# --------------- --------------- # -# double -> |s|exp| mant | | mant | # -# --------------- --------------- # -# 63 51 32 31 0 # +# v v # +# --------------- --------------- # +# double -> |s|exp| mant | | mant | # +# --------------- --------------- # +# 63 51 32 31 0 # # # ######################################################################### @@ -20896,13 +20896,13 @@ ######################################################################### # XDEF **************************************************************** # -# dst_sgl(): create single precision value from extended prec # +# dst_sgl(): create single precision value from extended prec # # # # XREF **************************************************************** # # # # INPUT *************************************************************** # # a0 = pointer to source operand in extended precision # -# # +# # # OUTPUT ************************************************************** # # d0 = single precision result # # # @@ -20914,18 +20914,18 @@ # get rid of ext integer bit # # sgl_mant = ext_mant{62:12} # # # -# --------------- --------------- --------------- # +# --------------- --------------- --------------- # # extended -> |s| exp | |1| ms mant | | ls mant | # -# --------------- --------------- --------------- # -# 95 64 63 62 40 32 31 12 0 # +# --------------- --------------- --------------- # +# 95 64 63 62 40 32 31 12 0 # # | | # # | | # # | | # -# v v # -# --------------- # -# single -> |s|exp| mant | # -# --------------- # -# 31 22 0 # +# v v # +# --------------- # +# single -> |s|exp| mant | # +# --------------- # +# 31 22 0 # # # ######################################################################### @@ -20998,7 +20998,7 @@ # add the extra condition that only if the k-factor was zero, too, should # we zero the exponent tst.l %d0 - bne.b fout_pack_set + bne.b fout_pack_set # "mantissa" is all zero which means that the answer is zero. but, the '040 # algorithm allows the exponent to be non-zero. the 881/2 do not. therefore, # if the mantissa is zero, I will zero the exponent, too. @@ -21057,13 +21057,13 @@ # # # INPUT *************************************************************** # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # d0 = value of register fetched # # # # ALGORITHM *********************************************************** # -# According to the index value in d1 which can range from zero # -# to fifteen, load the corresponding register file value (where # +# According to the index value in d1 which can range from zero # +# to fifteen, load the corresponding register file value (where # # address register indexes start at 8). D0/D1/A0/A1/A6/A7 are on the # # stack. The rest should still be in their original places. # # # @@ -21152,7 +21152,7 @@ # INPUT *************************************************************** # # d0 = longowrd value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -21213,7 +21213,7 @@ # INPUT *************************************************************** # # d0 = word value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -21274,7 +21274,7 @@ # INPUT *************************************************************** # # d0 = byte value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -21335,16 +21335,16 @@ # INPUT *************************************************************** # # d0 = amount to increment by # # d1 = index of address register to increment # -# # +# # # OUTPUT ************************************************************** # # (address register is updated) # # # # ALGORITHM *********************************************************** # -# Typically used for an instruction w/ a post-increment , # +# Typically used for an instruction w/ a post-increment , # # this routine adds the increment value in d0 to the address register # # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside # # in their original places. # -# For a7, if the increment amount is one, then we have to # +# For a7, if the increment amount is one, then we have to # # increment by two. For any a7 update, set the mia7_flag so that if # # an access error exception occurs later in emulation, this address # # register update can be undone. # @@ -21399,16 +21399,16 @@ # INPUT *************************************************************** # # d0 = amount to decrement by # # d1 = index of address register to decrement # -# # +# # # OUTPUT ************************************************************** # # (address register is updated) # # # # ALGORITHM *********************************************************** # -# Typically used for an instruction w/ a pre-decrement , # +# Typically used for an instruction w/ a pre-decrement , # # this routine adds the decrement value in d0 to the address register # # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside # # in their original places. # -# For a7, if the decrement amount is one, then we have to # +# For a7, if the decrement amount is one, then we have to # # decrement by two. For any a7 update, set the mda7_flag so that if # # an access error exception occurs later in emulation, this address # # register update can be undone. # @@ -21464,17 +21464,17 @@ # # # INPUT *************************************************************** # # d0 = index of FP register to load # -# # +# # # OUTPUT ************************************************************** # # FP_SRC(a6) = value loaded from FP register file # # # # ALGORITHM *********************************************************** # -# Using the index in d0, load FP_SRC(a6) with a number from the # +# Using the index in d0, load FP_SRC(a6) with a number from the # # FP register file. # # # ######################################################################### - global load_fpn1 + global load_fpn1 load_fpn1: mov.w (tbl_load_fpn1.b,%pc,%d0.w*2), %d0 jmp (tbl_load_fpn1.b,%pc,%d0.w*1) @@ -21537,12 +21537,12 @@ # # # INPUT *************************************************************** # # d0 = index of FP register to load # -# # +# # # OUTPUT ************************************************************** # # FP_DST(a6) = value loaded from FP register file # # # # ALGORITHM *********************************************************** # -# Using the index in d0, load FP_DST(a6) with a number from the # +# Using the index in d0, load FP_DST(a6) with a number from the # # FP register file. # # # ######################################################################### @@ -21603,7 +21603,7 @@ ######################################################################### # XDEF **************************************************************** # -# store_fpreg(): store an fp value to the fpreg designated d0. # +# store_fpreg(): store an fp value to the fpreg designated d0. # # # # XREF **************************************************************** # # None # @@ -21611,7 +21611,7 @@ # INPUT *************************************************************** # # fp0 = extended precision value to store # # d0 = index of floating-point register # -# # +# # # OUTPUT ************************************************************** # # None # # # @@ -21644,33 +21644,33 @@ fmovm.x &0x80, EXC_FP1(%a6) rts store_fpreg_2: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x20 rts store_fpreg_3: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x10 rts store_fpreg_4: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x08 rts store_fpreg_5: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x04 rts store_fpreg_6: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x02 rts store_fpreg_7: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x01 rts ######################################################################### # XDEF **************************************************************** # -# _denorm(): denormalize an intermediate result # +# _denorm(): denormalize an intermediate result # # # # XREF **************************************************************** # # None # @@ -21678,7 +21678,7 @@ # INPUT *************************************************************** # # a0 = points to the operand to be denormalized # # (in the internal extended format) # -# # +# # # d0 = rounding precision # # # # OUTPUT ************************************************************** # @@ -21688,10 +21688,10 @@ # d0 = guard,round,sticky # # # # ALGORITHM *********************************************************** # -# According to the exponent underflow threshold for the given # +# According to the exponent underflow threshold for the given # # precision, shift the mantissa bits to the right in order raise the # -# exponent of the operand to the threshold value. While shifting the # -# mantissa bits right, maintain the value of the guard, round, and # +# exponent of the operand to the threshold value. While shifting the # +# mantissa bits right, maintain the value of the guard, round, and # # sticky bits. # # other notes: # # (1) _denorm() is called by the underflow routines # @@ -21711,7 +21711,7 @@ _denorm: # # Load the exponent threshold for the precision selected and check -# to see if (threshold - exponent) is > 65 in which case we can +# to see if (threshold - exponent) is > 65 in which case we can # simply calculate the sticky bit and zero the mantissa. otherwise # we have to call the denormalization routine. # @@ -21750,7 +21750,7 @@ # %d0{31:29} : initial guard,round,sticky # # %d1{15:0} : denormalization threshold # # OUTPUT: # -# %a0 : points to the denormalized operand # +# %a0 : points to the denormalized operand # # %d0{31:29} : final guard,round,sticky # # # @@ -21770,7 +21770,7 @@ # # check to see how much less than the underflow threshold the operand -# exponent is. +# exponent is. # mov.l %d1, %d0 # copy the denorm threshold sub.w FTEMP_EX(%a0), %d1 # d1 = threshold - uns exponent @@ -21785,7 +21785,7 @@ # No normalization necessary # dnrm_no_lp: - mov.l GRS(%a6), %d0 # restore original g,r,s + mov.l GRS(%a6), %d0 # restore original g,r,s rts # @@ -21795,7 +21795,7 @@ # %d1 = "n" = amt to shift # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)-> # \ \ \ \ @@ -21806,7 +21806,7 @@ # \ \ \ \ # \ \ \ \ # \ \ \ \ -# <-(n)-><-(32 - n)-><------(32)-------><------(32)-------> +# <-(n)-><-(32 - n)-><------(32)-------><------(32)-------> # --------------------------------------------------------- # |0.....0| NEW_HI | NEW_FTEMP_LO |grs | # --------------------------------------------------------- @@ -21847,17 +21847,17 @@ # %d1 = "n" = amt to shift # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)-> # \ \ \ # \ \ \ # \ \ ------------------- # \ -------------------- \ -# ------------------- \ \ -# \ \ \ -# \ \ \ -# \ \ \ +# ------------------- \ \ +# \ \ \ +# \ \ \ +# \ \ \ # <-------(32)------><-(n)-><-(32 - n)-><------(32)-------> # --------------------------------------------------------- # |0...............0|0....0| NEW_LO |grs | @@ -21928,17 +21928,17 @@ # case (d1 == 64) # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-------(32)------> -# \ \ -# \ \ -# \ \ -# \ ------------------------------ +# \ \ +# \ \ +# \ \ +# \ ------------------------------ # ------------------------------- \ -# \ \ -# \ \ -# \ \ +# \ \ +# \ \ +# \ \ # <-------(32)------> # --------------------------------------------------------- # |0...............0|0................0|grs | @@ -21956,17 +21956,17 @@ # case (d1 == 65) # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-------(32)------> -# \ \ -# \ \ -# \ \ -# \ ------------------------------ +# \ \ +# \ \ +# \ \ +# \ ------------------------------ # -------------------------------- \ -# \ \ -# \ \ -# \ \ +# \ \ +# \ \ +# \ \ # <-------(31)-----> # --------------------------------------------------------- # |0...............0|0................0|0rs | @@ -22014,7 +22014,7 @@ # None # # # # INPUT *************************************************************** # -# a0 = ptr to input operand in internal extended format # +# a0 = ptr to input operand in internal extended format # # d1(hi) = contains rounding precision: # # ext = $0000xxxx # # sgl = $0004xxxx # @@ -22045,7 +22045,7 @@ # # ext_grs() looks at the rounding precision and sets the appropriate # G,R,S bits. -# If (G,R,S == 0) then result is exact and round is done, else set +# If (G,R,S == 0) then result is exact and round is done, else set # the inex flag in status reg and continue. # bsr.l ext_grs # extract G,R,S @@ -22091,7 +22091,7 @@ # If sign of fp number = 1 (negative), then add 1 to l. # ################################################################# rnd_mnus: - tst.b FTEMP_SGN(%a0) # check for sign + tst.b FTEMP_SGN(%a0) # check for sign bpl.w truncate # if negative then truncate mov.l &0xffffffff, %d0 # force g,r,s to be all f's @@ -22202,7 +22202,7 @@ # # INPUT # d0 = extended precision g,r,s (in d0{31:29}) -# d1 = {PREC,ROUND} +# d1 = {PREC,ROUND} # OUTPUT # d0{31:29} = guard, round, sticky # @@ -22253,7 +22253,7 @@ mov.l &30, %d2 # of the sgl prec. limits lsl.l %d2, %d3 # shift g-r bits to MSB of d3 mov.l FTEMP_HI(%a0), %d2 # get word 2 for s-bit test - and.l &0x0000003f, %d2 # s bit is the or of all other + and.l &0x0000003f, %d2 # s bit is the or of all other bne.b ext_grs_st_stky # bits to the right of g-r tst.l FTEMP_LO(%a0) # test lower mantissa bne.b ext_grs_st_stky # if any are set, set sticky @@ -22263,9 +22263,9 @@ # # dbl: -# 96 64 32 11 0 +# 96 64 32 11 0 # ----------------------------------------------------- -# | EXP |XXXXXXX| | |xx |grs| +# | EXP |XXXXXXX| | |xx |grs| # ----------------------------------------------------- # nn\ / # ee ------- @@ -22278,7 +22278,7 @@ mov.l &30, %d2 # of the dbl prec. limits lsl.l %d2, %d3 # shift g-r bits to the MSB of d3 mov.l FTEMP_LO(%a0), %d2 # get lower mantissa for s-bit test - and.l &0x000001ff, %d2 # s bit is the or-ing of all + and.l &0x000001ff, %d2 # s bit is the or-ing of all bne.b ext_grs_st_stky # other bits to the right of g-r tst.l %d0 # test word original g,r,s bne.b ext_grs_st_stky # if any are set, set sticky @@ -22308,7 +22308,7 @@ # a0 = pointer fp extended precision operand to normalize # # # # OUTPUT ************************************************************** # -# d0 = number of bit positions the mantissa was shifted # +# d0 = number of bit positions the mantissa was shifted # # a0 = the input operand's mantissa is normalized; the exponent # # is unchanged. # # # @@ -22335,7 +22335,7 @@ mov.l %d1, FTEMP_LO(%a0) # store new lo(man) mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -22350,7 +22350,7 @@ clr.l FTEMP_LO(%a0) # lo(man) is now zero mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -22455,27 +22455,27 @@ # whole mantissa is zero so this UNNORM is actually a zero # unnorm_zero: - and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero + and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero mov.b &ZERO, %d0 # fix optype tag rts ######################################################################### # XDEF **************************************************************** # -# set_tag_x(): return the optype of the input ext fp number # +# set_tag_x(): return the optype of the input ext fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to extended precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # If it's an unnormalized zero, alter the operand and force it # # to be a normal zero. # @@ -22542,20 +22542,20 @@ ######################################################################### # XDEF **************************************************************** # -# set_tag_d(): return the optype of the input dbl fp number # +# set_tag_d(): return the optype of the input dbl fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = points to double precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # # ######################################################################### @@ -22605,20 +22605,20 @@ ######################################################################### # XDEF **************************************************************** # -# set_tag_s(): return the optype of the input sgl fp number # +# set_tag_s(): return the optype of the input sgl fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to single precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # # ######################################################################### @@ -22664,15 +22664,15 @@ ######################################################################### # XDEF **************************************************************** # -# unf_res(): routine to produce default underflow result of a # -# scaled extended precision number; this is used by # +# unf_res(): routine to produce default underflow result of a # +# scaled extended precision number; this is used by # # fadd/fdiv/fmul/etc. emulation routines. # -# unf_res4(): same as above but for fsglmul/fsgldiv which use # +# unf_res4(): same as above but for fsglmul/fsgldiv which use # # single round prec and extended prec mode. # # # # XREF **************************************************************** # # _denorm() - denormalize according to scale factor # -# _round() - round denormalized number according to rnd prec # +# _round() - round denormalized number according to rnd prec # # # # INPUT *************************************************************** # # a0 = pointer to extended precison operand # @@ -22684,15 +22684,15 @@ # d0.b = result FPSR_cc which caller may or may not want to save # # # # ALGORITHM *********************************************************** # -# Convert the input operand to "internal format" which means the # +# Convert the input operand to "internal format" which means the # # exponent is extended to 16 bits and the sign is stored in the unused # # portion of the extended precison operand. Denormalize the number # -# according to the scale factor passed in d0. Then, round the # +# according to the scale factor passed in d0. Then, round the # # denormalized result. # -# Set the FPSR_exc bits as appropriate but return the cc bits in # +# Set the FPSR_exc bits as appropriate but return the cc bits in # # d0 in case the caller doesn't want to save them (as is the case for # # fmove out). # -# unf_res4() for fsglmul/fsgldiv forces the denorm to extended # +# unf_res4() for fsglmul/fsgldiv forces the denorm to extended # # precision and the rounding mode to single. # # # ######################################################################### @@ -22830,23 +22830,23 @@ # none # # # # INPUT *************************************************************** # -# d1.b = '-1' => (-); '0' => (+) # +# d1.b = '-1' => (-); '0' => (+) # # ovf_res(): # -# d0 = rnd mode/prec # +# d0 = rnd mode/prec # # ovf_res2(): # -# hi(d0) = rnd prec # +# hi(d0) = rnd prec # # lo(d0) = rnd mode # # # # OUTPUT ************************************************************** # -# a0 = points to extended precision result # -# d0.b = condition code bits # +# a0 = points to extended precision result # +# d0.b = condition code bits # # # # ALGORITHM *********************************************************** # # The default overflow result can be determined by the sign of # # the result and the rounding mode/prec in effect. These bits are # -# concatenated together to create an index into the default result # +# concatenated together to create an index into the default result # # table. A pointer to the correct result is returned in a0. The # -# resulting condition codes are returned in d0 in case the caller # +# resulting condition codes are returned in d0 in case the caller # # doesn't want FPSR_cc altered (as is the case for fmove out). # # # ######################################################################### @@ -22876,7 +22876,7 @@ ovf_res_load: mov.b (tbl_ovfl_cc.b,%pc,%d0.w*1), %d0 # fetch result ccodes lea (tbl_ovfl_result.b,%pc,%d1.w*8), %a0 # return result ptr - + rts tbl_ovfl_cc: @@ -22937,18 +22937,18 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If no failure on _mem_read(): # -# FP_SRC(a6) = packed operand now as a binary FP number # +# FP_SRC(a6) = packed operand now as a binary FP number # # # # ALGORITHM *********************************************************** # -# Get the correct whihc is the value on the exception stack # +# Get the correct whihc is the value on the exception stack # # frame w/ maybe a correction factor if the is -(an) or (an)+. # # Then, fetch the operand from memory. If the fetch fails, exit # # through facc_in_x(). # # If the packed operand is a ZERO,NAN, or INF, convert it to # -# its binary representation here. Else, call decbin() which will # +# its binary representation here. Else, call decbin() which will # # convert the packed value to an extended precision binary value. # # # ######################################################################### @@ -23005,7 +23005,7 @@ # and NaN operands are dispatched without entering this routine) # # value in 68881/882 format at location (a0). # # # -# A1. Convert the bcd exponent to binary by successive adds and # +# A1. Convert the bcd exponent to binary by successive adds and # # muls. Set the sign according to SE. Subtract 16 to compensate # # for the mantissa which is to be interpreted as 17 integer # # digits, rather than 1 integer and 16 fraction digits. # @@ -23069,7 +23069,7 @@ global decbin decbin: - mov.l 0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input + mov.l 0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input mov.l 0x4(%a0),FP_SCR0_HI(%a6) # so we don't alter it mov.l 0x8(%a0),FP_SCR0_LO(%a6) @@ -23358,7 +23358,7 @@ # # Pwrten calculates the exponent factor in the selected rounding mode # according to the following table: -# +# # Sign of Mant Sign of Exp Rounding Mode PWRTEN Rounding Mode # # ANY ANY RN RN @@ -23446,7 +23446,7 @@ # it will be inex2, but will be reported as inex1 by get_op. # end_dec: - fmov.l %fpsr,%d0 # get status register + fmov.l %fpsr,%d0 # get status register bclr &inex2_bit+8,%d0 # test for inex2 and clear it beq.b no_exc # skip this if no exc ori.w &inx1a_mask,2+USER_FPSR(%a6) # set INEX1/AINEX @@ -23463,16 +23463,16 @@ # # # INPUT *************************************************************** # # a0 = pointer to the input extended precision value in memory. # -# the input may be either normalized, unnormalized, or # +# the input may be either normalized, unnormalized, or # # denormalized. # -# d0 = contains the k-factor sign-extended to 32-bits. # +# d0 = contains the k-factor sign-extended to 32-bits. # # # # OUTPUT ************************************************************** # # FP_SCR0(a6) = bcd format result on the stack. # # # # ALGORITHM *********************************************************** # # # -# A1. Set RM and size ext; Set SIGMA = sign of input. # +# A1. Set RM and size ext; Set SIGMA = sign of input. # # The k-factor is saved for use in d7. Clear the # # BINDEC_FLG for separating normalized/denormalized # # input. If input is unnormalized or denormalized, # @@ -23482,15 +23482,15 @@ # # # A3. Compute ILOG. # # ILOG is the log base 10 of the input value. It is # -# approximated by adding e + 0.f when the original # -# value is viewed as 2^^e * 1.f in extended precision. # +# approximated by adding e + 0.f when the original # +# value is viewed as 2^^e * 1.f in extended precision. # # This value is stored in d6. # # # # A4. Clr INEX bit. # -# The operation in A3 above may have set INEX2. # +# The operation in A3 above may have set INEX2. # # # # A5. Set ICTR = 0; # -# ICTR is a flag used in A13. It must be set before the # +# ICTR is a flag used in A13. It must be set before the # # loop entry A6. # # # # A6. Calculate LEN. # @@ -23512,7 +23512,7 @@ # of ISCALE and X. A table is given in the code. # # # # A8. Clr INEX; Force RZ. # -# The operation in A3 above may have set INEX2. # +# The operation in A3 above may have set INEX2. # # RZ mode is forced for the scaling operation to insure # # only one rounding error. The grs bits are collected in # # the INEX flag for use in A10. # @@ -23543,11 +23543,11 @@ # the mantissa by 10. # # # # A14. Convert the mantissa to bcd. # -# The binstr routine is used to convert the LEN digit # +# The binstr routine is used to convert the LEN digit # # mantissa to bcd in memory. The input to binstr is # # to be a fraction; i.e. (mantissa)/10^LEN and adjusted # # such that the decimal point is to the left of bit 63. # -# The bcd digits are stored in the correct position in # +# The bcd digits are stored in the correct position in # # the final string area in memory. # # # # A15. Convert the exponent to bcd. # @@ -23593,7 +23593,7 @@ # d2: upper 32-bits of mantissa for binstr # d3: scratch;lower 32-bits of mantissa for binstr # d4: LEN -# d5: LAMBDA/ICTR +# d5: LAMBDA/ICTR # d6: ILOG # d7: k-factor # a0: ptr for original operand/final result @@ -23617,7 +23617,7 @@ # separating normalized/denormalized input. If the input # is a denormalized number, set the BINDEC_FLG memory word # to signal denorm. If the input is unnormalized, normalize -# the input and test for denormalized result. +# the input and test for denormalized result. # fmov.l &rm_mode*0x10,%fpcr # set RM and ext mov.l (%a0),L_SCR2(%a6) # save exponent for sign check @@ -23698,7 +23698,7 @@ sub.w &0x3fff,%d0 # strip off bias fadd.w %d0,%fp0 # add in exp fsub.s FONE(%pc),%fp0 # subtract off 1.0 - fbge.w pos_res # if pos, branch + fbge.w pos_res # if pos, branch fmul.x PLOG2UP1(%pc),%fp0 # if neg, mul by LOG2UP1 fmov.l %fp0,%d6 # put ILOG in d6 as a lword bra.b A4_str # go move out ILOG @@ -23708,14 +23708,14 @@ # A4. Clr INEX bit. -# The operation in A3 above may have set INEX2. +# The operation in A3 above may have set INEX2. A4_str: fmov.l &0,%fpsr # zero all of fpsr - nothing needed # A5. Set ICTR = 0; -# ICTR is a flag used in A13. It must be set before the +# ICTR is a flag used in A13. It must be set before the # loop entry A6. The lower word of d5 is used for ICTR. clr.w %d5 # clear ICTR @@ -23881,21 +23881,21 @@ bne.b e_loop2 # if not, loop # A8. Clr INEX; Force RZ. -# The operation in A3 above may have set INEX2. +# The operation in A3 above may have set INEX2. # RZ mode is forced for the scaling operation to insure -# only one rounding error. The grs bits are collected in +# only one rounding error. The grs bits are collected in # the INEX flag for use in A10. # # Register usage: # Input/Output - fmov.l &0,%fpsr # clr INEX + fmov.l &0,%fpsr # clr INEX fmov.l &rz_mode*0x10,%fpcr # set RZ rounding mode # A9. Scale X -> Y. # The mantissa is scaled to the desired number of significant # digits. The excess digits are collected in INEX2. If mul, -# Check d2 for excess 10 exponential value. If not zero, +# Check d2 for excess 10 exponential value. If not zero, # the iscale value would have caused the pwrten calculation # to overflow. Only a negative iscale can cause this, so # multiply by 10^(d2), which is now only allowed to be 24, @@ -24026,7 +24026,7 @@ A11_st: mov.l USER_FPCR(%a6),L_SCR1(%a6) # save it for later - and.l &0x00000030,USER_FPCR(%a6) # set size to ext, + and.l &0x00000030,USER_FPCR(%a6) # set size to ext, # ;block exceptions @@ -24062,7 +24062,7 @@ lea.l FP_SCR1(%a6),%a0 # a0 is ptr to FP_SCR1(a6) fmov.x %fp0,(%a0) # move Y to memory at FP_SCR1(a6) tst.l L_SCR2(%a6) # test sign of original operand - bge.b do_fint12 # if pos, use Y + bge.b do_fint12 # if pos, use Y or.l &0x80000000,(%a0) # if neg, use -Y do_fint12: mov.l USER_FPSR(%a6),-(%sp) @@ -24158,7 +24158,7 @@ subq.l &1,%d6 # subtract 1 from ILOG mov.w &1,%d5 # set ICTR fmov.l &rm_mode*0x10,%fpcr # set rmode to RM - fmul.s FTEN(%pc),%fp2 # compute 10^LEN + fmul.s FTEN(%pc),%fp2 # compute 10^LEN bra.w A6_str # return to A6 and recompute YINT test_2: fmul.s FTEN(%pc),%fp2 # compute 10^LEN @@ -24174,7 +24174,7 @@ fmov.l &rm_mode*0x10,%fpcr # set rmode to RM bra.w A6_str # return to A6 and recompute YINT # -# Since ICTR <> 0, we have already been through one adjustment, +# Since ICTR <> 0, we have already been through one adjustment, # and shouldn't have another; this is to check if abs(YINT) = 10^LEN # 10^LEN is again computed using whatever table is in a1 since the # value calculated cannot be inexact. @@ -24200,11 +24200,11 @@ fmul.s FTEN(%pc),%fp2 # if LEN++, the get 10^^LEN # A14. Convert the mantissa to bcd. -# The binstr routine is used to convert the LEN digit +# The binstr routine is used to convert the LEN digit # mantissa to bcd in memory. The input to binstr is # to be a fraction; i.e. (mantissa)/10^LEN and adjusted # such that the decimal point is to the left of bit 63. -# The bcd digits are stored in the correct position in +# The bcd digits are stored in the correct position in # the final string area in memory. # # @@ -24247,7 +24247,7 @@ bgt.b no_sft # if so, don't shift neg.l %d0 # make exp positive m_loop: - lsr.l &1,%d2 # shift d2:d3 right, add 0s + lsr.l &1,%d2 # shift d2:d3 right, add 0s roxr.l &1,%d3 # the number of places dbf.w %d0,m_loop # given in d0 no_sft: @@ -24272,9 +24272,9 @@ # # Digits are stored in L_SCR1(a6) on return from BINDEC as: # -# 32 16 15 0 +# 32 16 15 0 # ----------------------------------------- -# | 0 | e3 | e2 | e1 | e4 | X | X | X | +# | 0 | e3 | e2 | e1 | e4 | X | X | X | # ----------------------------------------- # # And are moved into their proper places in FP_SCR0. If digit e4 @@ -24337,7 +24337,7 @@ sub.w &0x3ffd,%d0 # subtract off bias neg.w %d0 # make exp positive x_loop: - lsr.l &1,%d2 # shift d2:d3 right + lsr.l &1,%d2 # shift d2:d3 right roxr.l &1,%d3 # the number of places dbf.w %d0,x_loop # given in d0 x_loop_fin: @@ -24348,12 +24348,12 @@ mov.l &4,%d0 # put 4 in d0 for binstr call lea.l L_SCR1(%a6),%a0 # a0 is ptr to L_SCR1 for exp digits bsr binstr # call binstr to convert exp - mov.l L_SCR1(%a6),%d0 # load L_SCR1 lword to d0 + mov.l L_SCR1(%a6),%d0 # load L_SCR1 lword to d0 mov.l &12,%d1 # use d1 for shift count lsr.l %d1,%d0 # shift d0 right by 12 bfins %d0,FP_SCR0(%a6){&4:&12} # put e3:e2:e1 in FP_SCR0 lsr.l %d1,%d0 # shift d0 right by 12 - bfins %d0,FP_SCR0(%a6){&16:&4} # put e4 in FP_SCR0 + bfins %d0,FP_SCR0(%a6){&16:&4} # put e4 in FP_SCR0 tst.b %d0 # check if e4 is zero beq.b A16_st # if zero, skip rest or.l &opaop_mask,USER_FPSR(%a6) # set OPERR & AIOP in USER_FPSR @@ -24384,14 +24384,14 @@ A16_st: clr.l %d0 # clr d0 for collection of signs - and.b &0x0f,FP_SCR0(%a6) # clear first nibble of FP_SCR0 + and.b &0x0f,FP_SCR0(%a6) # clear first nibble of FP_SCR0 tst.l L_SCR2(%a6) # check sign of original mantissa bge.b mant_p # if pos, don't set SM mov.l &2,%d0 # move 2 in to d0 for SM mant_p: tst.l %d6 # check sign of ILOG bge.b wr_sgn # if pos, don't set SE - addq.l &1,%d0 # set bit 0 in d0 for SE + addq.l &1,%d0 # set bit 0 in d0 for SE wr_sgn: bfins %d0,FP_SCR0(%a6){&0:&2} # insert SM and SE into FP_SCR0 @@ -24457,8 +24457,8 @@ # d2:d3 = 64-bit binary integer # # d0 = desired length (LEN) # # a0 = pointer to start in memory for bcd characters # -# (This pointer must point to byte 4 of the first # -# lword of the packed decimal memory string.) # +# (This pointer must point to byte 4 of the first # +# lword of the packed decimal memory string.) # # # # OUTPUT ************************************************************** # # a0 = pointer to LEN bcd digits representing the 64-bit integer. # @@ -24598,14 +24598,14 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # None # # # # ALGORITHM *********************************************************** # -# Flow jumps here when an FP data fetch call gets an error # +# Flow jumps here when an FP data fetch call gets an error # # result. This means the operating system wants an access error frame # -# made out of the current exception stack frame. # +# made out of the current exception stack frame. # # So, we first call restore() which makes sure that any updated # # -(an)+ register gets returned to its pre-exception value and then # # we change the stack to an access error stack frame. # @@ -24775,7 +24775,7 @@ bne.b ri_a7_done # supervisor movc %usp,%a0 # restore USP sub.l %d0,%a0 - movc %a0,%usp + movc %a0,%usp ri_a7_done: rts diff -Nru a/arch/m68k/ifpsp060/src/ftest.S b/arch/m68k/ifpsp060/src/ftest.S --- a/arch/m68k/ifpsp060/src/ftest.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/ifpsp060/src/ftest.S Tue May 18 23:38:06 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -86,7 +86,7 @@ ############################################# _060TESTS_: link %a6,&-384 - + movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) @@ -138,7 +138,7 @@ _060TESTS_unimp: link %a6,&-384 - + movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) @@ -164,7 +164,7 @@ _060TESTS_enable: link %a6,&-384 - + movm.l &0x3f3c,-(%sp) fmovm.x &0xff,-(%sp) @@ -687,7 +687,7 @@ fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) - + mov.w &0x0000,%cc fmovm.x %d0,-(%sp) @@ -753,7 +753,7 @@ movm.l &0xffff,IREGS(%a6) fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) - + mov.w &0x0000,%cc fmovm.x (%sp)+,%d0 @@ -797,7 +797,7 @@ fmovm.l %fpcr,%fpsr,%fpiar,IFPCREGS(%a6) fmovm.x &0xff,IFPREGS(%a6) - + mov.w &0x0000,%cc fmovm.x %d0,-(%sp) diff -Nru a/arch/m68k/ifpsp060/src/ilsp.S b/arch/m68k/ifpsp060/src/ilsp.S --- a/arch/m68k/ifpsp060/src/ilsp.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/src/ilsp.S Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -27,7 +27,7 @@ or trademarks of Motorola, Inc. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # litop.s: -# This file is appended to the top of the 060FPLSP package +# This file is appended to the top of the 060FPLSP package # and contains the entry points into the package. The user, in # effect, branches to one of the branch table entries located here. # @@ -64,7 +64,7 @@ # _060LSP__idivs64_(): Emulate 64-bit signed div instruction. # # # # This is the library version which is accessed as a subroutine # -# and therefore does not work exactly like the 680X0 div{s,u}.l # +# and therefore does not work exactly like the 680X0 div{s,u}.l # # 64-bit divide instruction. # # # # XREF **************************************************************** # @@ -75,17 +75,17 @@ # 0x8(sp) = hi(dividend) # # 0xc(sp) = lo(dividend) # # 0x10(sp) = pointer to location to place quotient/remainder # -# # +# # # OUTPUT ************************************************************** # # 0x10(sp) = points to location of remainder/quotient. # # remainder is in first longword, quotient is in 2nd. # # # # ALGORITHM *********************************************************** # -# If the operands are signed, make them unsigned and save the # +# If the operands are signed, make them unsigned and save the # # sign info for later. Separate out special cases like divide-by-zero # # or 32-bit divides if possible. Else, use a special math algorithm # # to calculate the result. # -# Restore sign info if signed instruction. Set the condition # +# Restore sign info if signed instruction. Set the condition # # codes before performing the final "rts". If the divisor was equal to # # zero, then perform a divide-by-zero using a 16-bit implemented # # divide instruction. This way, the operating system can record that # @@ -135,8 +135,8 @@ beq.w ldiv64eq0 # divisor is = 0!!! - mov.l 0xc(%a6), %d5 # get dividend hi - mov.l 0x10(%a6), %d6 # get dividend lo + mov.l 0xc(%a6), %d5 # get dividend hi + mov.l 0x10(%a6), %d6 # get dividend lo # separate signed and unsigned divide tst.b POSNEG(%a6) # signed or unsigned? @@ -161,7 +161,7 @@ negx.l %d5 # extract some special cases: -# - is (dividend == 0) ? +# - is (dividend == 0) ? # - is (hi(dividend) == 0 && (divisor <= lo(dividend))) ? (32-bit div) ldspecialcases: tst.l %d5 # is (hi(dividend) == 0) @@ -170,7 +170,7 @@ tst.l %d6 # is (lo(dividend) == 0), too beq.w lddone # yes, so (dividend == 0) - cmp.l %d7,%d6 # is (divisor <= lo(dividend)) + cmp.l %d7,%d6 # is (divisor <= lo(dividend)) bls.b ld32bitdivide # yes, so use 32 bit divide exg %d5,%d6 # q = 0, r = dividend @@ -183,7 +183,7 @@ ldnormaldivide: # last special case: -# - is hi(dividend) >= divisor ? if yes, then overflow +# - is hi(dividend) >= divisor ? if yes, then overflow cmp.l %d7,%d5 bls.b lddovf # answer won't fit in 32 bits @@ -196,7 +196,7 @@ beq.b lddone # divu has no processing!!! # it was a divs.l, so ccode setting is a little more complicated... - tst.b NDIVIDEND(%a6) # remainder has same sign + tst.b NDIVIDEND(%a6) # remainder has same sign beq.b ldcc # as dividend. neg.l %d5 # sgn(rem) = sgn(dividend) ldcc: @@ -240,8 +240,8 @@ # the result should be the unchanged dividend lddovf: - mov.l 0xc(%a6), %d5 # get dividend hi - mov.l 0x10(%a6), %d6 # get dividend lo + mov.l 0xc(%a6), %d5 # get dividend hi + mov.l 0x10(%a6), %d6 # get dividend lo andi.w &0x1c,DIV64_CC(%a6) ori.w &0x02,DIV64_CC(%a6) # set 'V' ccode bit @@ -271,8 +271,8 @@ # For this implementation b=2**16, and the target is U1U2U3U4/V1V2, # # where U,V are words of the quadword dividend and longword divisor, # # and U1, V1 are the most significant words. # -# # -# The most sig. longword of the 64 bit dividend must be in %d5, least # +# # +# The most sig. longword of the 64 bit dividend must be in %d5, least # # in %d6. The divisor must be in the variable ddivisor, and the # # signed/unsigned flag ddusign must be set (0=unsigned,1=signed). # # The quotient is returned in %d6, remainder in %d5, unless the # @@ -292,7 +292,7 @@ # dividing the divisor word into each dividend word. In this case, # the first two quotient words must be zero, or overflow would occur. # Since we already checked this case above, we can treat the most significant -# longword of the dividend as (0) remainder (see Knuth) and merely complete +# longword of the dividend as (0) remainder (see Knuth) and merely complete # the last two divisions to get a quotient longword and word remainder: clr.l %d1 @@ -328,12 +328,12 @@ clr.b DDSECOND(%a6) # clear flag for quotient digits clr.l %d1 # %d1 will hold trial quotient lddnchk: - btst &31, %d7 # must we normalize? first word of + btst &31, %d7 # must we normalize? first word of bne.b lddnormalized # divisor (V1) must be >= 65536/2 addq.l &0x1, DDNORMAL(%a6) # count normalization shifts lsl.l &0x1, %d7 # shift the divisor lsl.l &0x1, %d6 # shift u4,u3 with overflow to u2 - roxl.l &0x1, %d5 # shift u1,u2 + roxl.l &0x1, %d5 # shift u1,u2 bra.w lddnchk lddnormalized: @@ -343,12 +343,12 @@ mov.l %d5, %d2 # dividend mslw swap %d2 swap %d3 - cmp.w %d2, %d3 # V1 = U1 ? + cmp.w %d2, %d3 # V1 = U1 ? bne.b lddqcalc1 mov.w &0xffff, %d1 # use max trial quotient word bra.b lddadj0 lddqcalc1: - mov.l %d5, %d1 + mov.l %d5, %d1 divu.w %d3, %d1 # use quotient of mslw/msw @@ -379,7 +379,7 @@ # add.l %d6, %d4 # (U1U2 - V1q) + U3 - cmp.l %d2, %d4 + cmp.l %d2, %d4 bls.b lddadjd1 # is V2q > (U1U2-V1q) + U3 ? subq.l &0x1, %d1 # yes, decrement and recheck bra.b lddadj1 @@ -416,7 +416,7 @@ tst.b DDSECOND(%a6) # both q words done? bne.b lddremain # first quotient digit now correct. store digit and shift the -# (subtracted) dividend +# (subtracted) dividend mov.w %d1, DDQUOTIENT(%a6) clr.l %d1 swap %d5 @@ -427,7 +427,7 @@ bra.w lddnormalized lddremain: # add 2nd word to quotient, get the remainder. - mov.w %d1, DDQUOTIENT+2(%a6) + mov.w %d1, DDQUOTIENT+2(%a6) # shift down one word/digit to renormalize remainder. mov.w %d5, %d6 swap %d6 @@ -441,7 +441,7 @@ dbf %d7, lddnlp lddrn: mov.l %d6, %d5 # remainder - mov.l DDQUOTIENT(%a6), %d6 # quotient + mov.l DDQUOTIENT(%a6), %d6 # quotient rts ldmm2: @@ -471,7 +471,7 @@ clr.w %d2 # lsw of two mixed products used, swap %d5 # now use msws of longwords swap %d2 - add.l %d2, %d5 + add.l %d2, %d5 add.l %d3, %d5 # %d5 now ms 32 bits of final product rts @@ -491,7 +491,7 @@ # 0x4(sp) = multiplier # # 0x8(sp) = multiplicand # # 0xc(sp) = pointer to location to place 64-bit result # -# # +# # # OUTPUT ************************************************************** # # 0xc(sp) = points to location of 64-bit result # # # @@ -524,9 +524,9 @@ ######################################################################### # 63 32 0 # -# ---------------------------- # -# | hi(mplier) * hi(mplicand)| # -# ---------------------------- # +# ---------------------------- # +# | hi(mplier) * hi(mplicand)| # +# ---------------------------- # # ----------------------------- # # | hi(mplier) * lo(mplicand) | # # ----------------------------- # @@ -589,7 +589,7 @@ # the values at the location pointed to by a0. # use movm here to not disturb the condition codes. mulu64_end: - exg %d1,%d0 + exg %d1,%d0 movm.l &0x0003,([0x10,%a6]) # save result # EPILOGUE BEGIN ######################################################## @@ -643,16 +643,16 @@ # the result sign is the exclusive or of the operand sign bits. muls64_chk_md_sgn: tst.l %d1 # is multiplicand negative? - bge.b muls64_alg # no + bge.b muls64_alg # no neg.l %d1 # make multiplicand positive eori.b &0x1,%d5 # calculate correct sign ######################################################################### # 63 32 0 # -# ---------------------------- # -# | hi(mplier) * hi(mplicand)| # -# ---------------------------- # +# ---------------------------- # +# | hi(mplier) * hi(mplicand)| # +# ---------------------------- # # ----------------------------- # # | hi(mplier) * lo(mplicand) | # # ----------------------------- # @@ -726,7 +726,7 @@ # the values at the location pointed to by a0. # use movm here to not disturb the condition codes. muls64_end: - exg %d1,%d0 + exg %d1,%d0 movm.l &0x0003,([0x10,%a6]) # save result at (a0) # EPILOGUE BEGIN ######################################################## @@ -769,12 +769,12 @@ # INPUT *************************************************************** # # 0x4(sp) = Rn # # 0x8(sp) = pointer to boundary pair # -# # +# # # OUTPUT ************************************************************** # # cc = condition codes are set correctly # # # # ALGORITHM *********************************************************** # -# In the interest of simplicity, all operands are converted to # +# In the interest of simplicity, all operands are converted to # # longword size whether the operation is byte, word, or long. The # # bounds are sign extended accordingly. If Rn is a data regsiter, Rn is # # also sign extended. If Rn is an address register, it need not be sign # @@ -785,7 +785,7 @@ set CMP2_CC, -4 - global _060LSP__cmp2_Ab_ + global _060LSP__cmp2_Ab_ _060LSP__cmp2_Ab_: # PROLOGUE BEGIN ######################################################## @@ -795,7 +795,7 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.b ([0xc,%a6],0x0),%d0 mov.b ([0xc,%a6],0x1),%d1 @@ -804,7 +804,7 @@ extb.l %d1 # sign extend hi bnd bra.w l_cmp2_cmp # go do the compare emulation - global _060LSP__cmp2_Aw_ + global _060LSP__cmp2_Aw_ _060LSP__cmp2_Aw_: # PROLOGUE BEGIN ######################################################## @@ -814,7 +814,7 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.w ([0xc,%a6],0x0),%d0 mov.w ([0xc,%a6],0x2),%d1 @@ -823,7 +823,7 @@ ext.l %d1 # sign extend hi bnd bra.w l_cmp2_cmp # go do the compare emulation - global _060LSP__cmp2_Al_ + global _060LSP__cmp2_Al_ _060LSP__cmp2_Al_: # PROLOGUE BEGIN ######################################################## @@ -833,13 +833,13 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.l ([0xc,%a6],0x0),%d0 mov.l ([0xc,%a6],0x4),%d1 bra.w l_cmp2_cmp # go do the compare emulation - global _060LSP__cmp2_Db_ + global _060LSP__cmp2_Db_ _060LSP__cmp2_Db_: # PROLOGUE BEGIN ######################################################## @@ -849,7 +849,7 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.b ([0xc,%a6],0x0),%d0 mov.b ([0xc,%a6],0x1),%d1 @@ -862,7 +862,7 @@ extb.l %d2 # sign extend data byte bra.w l_cmp2_cmp # go do the compare emulation - global _060LSP__cmp2_Dw_ + global _060LSP__cmp2_Dw_ _060LSP__cmp2_Dw_: # PROLOGUE BEGIN ######################################################## @@ -872,7 +872,7 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.w ([0xc,%a6],0x0),%d0 mov.w ([0xc,%a6],0x2),%d1 @@ -885,7 +885,7 @@ ext.l %d2 # sign extend data word bra.w l_cmp2_cmp # go emulate compare - global _060LSP__cmp2_Dl_ + global _060LSP__cmp2_Dl_ _060LSP__cmp2_Dl_: # PROLOGUE BEGIN ######################################################## @@ -895,14 +895,14 @@ # PROLOGUE END ########################################################## mov.w %cc,CMP2_CC(%a6) - mov.l 0x8(%a6), %d2 # get regval + mov.l 0x8(%a6), %d2 # get regval mov.l ([0xc,%a6],0x0),%d0 mov.l ([0xc,%a6],0x4),%d1 # # To set the ccodes correctly: -# (1) save 'Z' bit from (Rn - lo) +# (1) save 'Z' bit from (Rn - lo) # (2) save 'Z' and 'N' bits from ((hi - lo) - (Rn - hi)) # (3) keep 'X', 'N', and 'V' from before instruction # (4) combine ccodes @@ -912,7 +912,7 @@ mov.w %cc, %d3 # fetch resulting ccodes andi.b &0x4, %d3 # keep 'Z' bit sub.l %d0, %d1 # (hi - lo) - cmp.l %d1,%d2 # ((hi - lo) - (Rn - hi)) + cmp.l %d1,%d2 # ((hi - lo) - (Rn - hi)) mov.w %cc, %d4 # fetch resulting ccodes or.b %d4, %d3 # combine w/ earlier ccodes diff -Nru a/arch/m68k/ifpsp060/src/isp.S b/arch/m68k/ifpsp060/src/isp.S --- a/arch/m68k/ifpsp060/src/isp.S Tue May 18 23:38:06 2004 +++ b/arch/m68k/ifpsp060/src/isp.S Tue May 18 23:38:06 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -322,21 +322,21 @@ # Misc. # ######### set BYTE, 1 # len(byte) == 1 byte -set WORD, 2 # len(word) == 2 bytes -set LONG, 4 # len(longword) == 4 bytes +set WORD, 2 # len(word) == 2 bytes +set LONG, 4 # len(longword) == 4 bytes ######################################################################### # XDEF **************************************************************** # # _isp_unimp(): 060ISP entry point for Unimplemented Instruction # # # -# This handler should be the first code executed upon taking the # -# "Unimplemented Integer Instruction" exception in an operating # +# This handler should be the first code executed upon taking the # +# "Unimplemented Integer Instruction" exception in an operating # # system. # # # # XREF **************************************************************** # # _imem_read_{word,long}() - read instruction word/longword # # _mul64() - emulate 64-bit multiply # -# _div64() - emulate 64-bit divide # +# _div64() - emulate 64-bit divide # # _moveperipheral() - emulate "movep" # # _compandset() - emulate misaligned "cas" # # _compandset2() - emulate "cas2" # @@ -349,7 +349,7 @@ # # # INPUT *************************************************************** # # - The system stack contains the Unimp Int Instr stack frame # -# # +# # # OUTPUT ************************************************************** # # If Trace exception: # # - The system stack changed to contain Trace exc stack frame # @@ -366,8 +366,8 @@ # This handler fetches the first instruction longword from # # memory and decodes it to determine which of the unimplemented # # integer instructions caused this exception. This handler then calls # -# one of _mul64(), _div64(), _moveperipheral(), _compandset(), # -# _compandset2(), or _chk2_cmp2() as appropriate. # +# one of _mul64(), _div64(), _moveperipheral(), _compandset(), # +# _compandset2(), or _chk2_cmp2() as appropriate. # # Some of these instructions, by their nature, may produce other # # types of exceptions. "div" can produce a divide-by-zero exception, # # and "chk2" can cause a "Chk" exception. In both cases, the current # @@ -375,7 +375,7 @@ # of the correct exception type and an exit must be made through # # _real_divbyzero() or _real_chk() as appropriate. In addition, all # # instructions may be executing while Trace is enabled. If so, then # -# a Trace exception stack frame must be created and an exit made # +# a Trace exception stack frame must be created and an exit made # # through _real_trace(). # # Meanwhile, if any read or write to memory using the # # _mem_{read,write}() "callout"s returns a failing value, then an # @@ -384,19 +384,19 @@ # If none of these occur, then a normal exit is made through # # _isp_done(). # # # -# This handler, upon entry, saves almost all user-visible # +# This handler, upon entry, saves almost all user-visible # # address and data registers to the stack. Although this may seem to # # cause excess memory traffic, it was found that due to having to # # access these register files for things like data retrieval and # # calculations, it was more efficient to have them on the stack where # -# they could be accessed by indexing rather than to make subroutine # -# calls to retrieve a register of a particular index. # +# they could be accessed by indexing rather than to make subroutine # +# calls to retrieve a register of a particular index. # # # ######################################################################### global _isp_unimp _isp_unimp: - link.w %a6,&-LOCAL_SIZE # create room for stack frame + link.w %a6,&-LOCAL_SIZE # create room for stack frame movm.l &0x3fff,EXC_DREGS(%a6) # store d0-d7/a0-a5 mov.l (%a6),EXC_A6(%a6) # store a6 @@ -428,9 +428,9 @@ bsr.l _imem_read_long # fetch opword & extword mov.l %d0,EXC_OPWORD(%a6) # store extword on stack - + ######################################################################### -# muls.l 0100 1100 00 || 0*** 1100 0000 0*** # +# muls.l 0100 1100 00 || 0*** 1100 0000 0*** # # mulu.l 0100 1100 00 || 0*** 0100 0000 0*** # # # # divs.l 0100 1100 01 || 0*** 1100 0000 0*** # @@ -514,7 +514,7 @@ tst.b EXC_ISR(%a6) # no; is trace enabled? bmi.w uieh_trace_a7 # yes bra.w uieh_a7 # no - + # # now, w/ group2, make movep's decode the fastest since it will # most likely be used the most. @@ -532,7 +532,7 @@ beq.b uieh_chk2cmp2 # go handle chk2,cmp2 swap %d0 # put opword in lo word - cmpi.b %d0,&0xfc # test for cas2 + cmpi.b %d0,&0xfc # test for cas2 beq.b uieh_cas2 # go handle cas2 uieh_cas: @@ -585,7 +585,7 @@ mov.l %a0,%usp # restore it uieh_finish: - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 btst &0x7,EXC_ISR(%a6) # is trace mode on? bne.b uieh_trace # yes;go handle trace mode @@ -596,7 +596,7 @@ bra.l _isp_done # -# The instruction that was just emulated was also being traced. The trace +# The instruction that was just emulated was also being traced. The trace # trap for this instruction will be lost unless we jump to the trace handler. # So, here we create a Trace Exception format number two exception stack # frame from the Unimplemented Integer Intruction Exception stack frame @@ -607,11 +607,11 @@ # * 0x0 * 0x0f4 * * Current * # ***************** * PC * # * Current * ***************** -# * PC * * 0x2 * 0x024 * +# * PC * * 0x2 * 0x024 * # ***************** ***************** # * SR * * Next * # ***************** * PC * -# ->* Old * ***************** +# ->* Old * ***************** # from link -->* A6 * * SR * # ***************** ***************** # /* A7 * * New * <-- for final unlink @@ -651,7 +651,7 @@ # uieh_chk_trap: mov.b EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 mov.w EXC_ISR(%a6),(%a6) # put new SR on stack mov.l EXC_IPC(%a6),0x8(%a6) # put "Current PC" on stack @@ -678,14 +678,14 @@ # ***************** # (6 words) # -# the divide instruction should take an integer divide by zero trap. so, here -# we must create a divbyzero stack frame from an unimplemented integer -# instruction exception frame and jump to the user supplied entry point +# the divide instruction should take an integer divide by zero trap. so, here +# we must create a divbyzero stack frame from an unimplemented integer +# instruction exception frame and jump to the user supplied entry point # "_real_divbyzero()". # uieh_divbyzero: mov.b EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 mov.w EXC_ISR(%a6),(%a6) # put new SR on stack mov.l EXC_IPC(%a6),0x8(%a6) # put "Current PC" on stack @@ -712,9 +712,9 @@ # ***************** ***************** # (4 words) (6 words) # -# the divide instruction should take an integer divide by zero trap. so, here -# we must create a divbyzero stack frame from an unimplemented integer -# instruction exception frame and jump to the user supplied entry point +# the divide instruction should take an integer divide by zero trap. so, here +# we must create a divbyzero stack frame from an unimplemented integer +# instruction exception frame and jump to the user supplied entry point # "_real_divbyzero()". # # However, we must also deal with the fact that (a7)+ was used from supervisor @@ -722,7 +722,7 @@ # uieh_divbyzero_a7: mov.b EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 mov.l EXC_IPC(%a6),0xc(%a6) # put "Current PC" on stack mov.w &0x2014,0xa(%a6) # put Vector Offset on stack @@ -748,8 +748,8 @@ # ***************** ***************** # (4 words) (6 words) # -# -# The instruction that was just emulated was also being traced. The trace +# +# The instruction that was just emulated was also being traced. The trace # trap for this instruction will be lost unless we jump to the trace handler. # So, here we create a Trace Exception format number two exception stack # frame from the Unimplemented Integer Intruction Exception stack frame @@ -760,7 +760,7 @@ # uieh_trace_a7: mov.b EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 mov.l EXC_IPC(%a6),0xc(%a6) # put "Current PC" on stack mov.w &0x2024,0xa(%a6) # put Vector Offset on stack @@ -772,12 +772,12 @@ bra.l _real_trace # -# UIEH FRAME +# UIEH FRAME # ***************** # * 0x0 * 0x0f4 * # UIEH FRAME ***************** # ***************** * Next * -# * 0x0 * 0x0f4 * * PC * +# * 0x0 * 0x0f4 * * PC * # ***************** ***************** # * Current * * SR * # * PC * ***************** @@ -787,7 +787,7 @@ # (4 words) uieh_a7: mov.b EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 mov.w &0x00f4,0xe(%a6) # put Vector Offset on stack mov.l EXC_EXTWPTR(%a6),0xa(%a6) # put "Next PC" on stack @@ -803,11 +803,11 @@ # a0 = failing address # d0 = fslw isp_dacc: - mov.l %a0,(%a6) # save address + mov.l %a0,(%a6) # save address mov.l %d0,-0x4(%a6) # save partial fslw lea -64(%a6),%sp - movm.l (%sp)+,&0x7fff # restore d0-d7/a0-a6 + movm.l (%sp)+,&0x7fff # restore d0-d7/a0-a6 mov.l 0xc(%sp),-(%sp) # move voff,hi(pc) mov.l 0x4(%sp),0x10(%sp) # store fslw @@ -822,11 +822,11 @@ # FSLW: # misaligned = true # read = true -# size = word -# instruction = true -# software emulation error = true +# size = word +# instruction = true +# software emulation error = true isp_iacc: - movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 + movm.l EXC_DREGS(%a6),&0x3fff # restore d0-d7/a0-a5 unlk %a6 # unlink frame sub.w &0x8,%sp # make room for acc frame mov.l 0x8(%sp),(%sp) # store sr,lo(pc) @@ -840,7 +840,7 @@ beq.b isp_acc_exit2 # user bset &0x2,0xd(%sp) # set supervisor TM bit isp_acc_exit2: - bra.l _real_access + bra.l _real_access # if the addressing mode was (an)+ or -(an), the address register must # be restored to its pre-exception value before entering _real_access. @@ -858,14 +858,14 @@ # _calc_ea(): routine to calculate effective address # # # # XREF **************************************************************** # -# _imem_read_word() - read instruction word # -# _imem_read_long() - read instruction longword # -# _dmem_read_long() - read data longword (for memory indirect) # -# isp_iacc() - handle instruction access error exception # +# _imem_read_word() - read instruction word # +# _imem_read_long() - read instruction longword # +# _dmem_read_long() - read data longword (for memory indirect) # +# isp_iacc() - handle instruction access error exception # # isp_dacc() - handle data access error exception # # # # INPUT *************************************************************** # -# d0 = number of bytes related to effective address (w,l) # +# d0 = number of bytes related to effective address (w,l) # # # # OUTPUT ************************************************************** # # If exiting through isp_dacc... # @@ -877,22 +877,22 @@ # a0 = effective address # # # # ALGORITHM *********************************************************** # -# The effective address type is decoded from the opword residing # -# on the stack. A jump table is used to vector to a routine for the # +# The effective address type is decoded from the opword residing # +# on the stack. A jump table is used to vector to a routine for the # # appropriate mode. Since none of the emulated integer instructions # # uses byte-sized operands, only handle word and long operations. # # # -# Dn,An - shouldn't enter here # +# Dn,An - shouldn't enter here # # (An) - fetch An value from stack # -# -(An) - fetch An value from stack; return decr value; # +# -(An) - fetch An value from stack; return decr value; # # place decr value on stack; store old value in case of # -# future access error; if -(a7), set mda7_flg in # +# future access error; if -(a7), set mda7_flg in # # SPCOND_FLG # # (An)+ - fetch An value from stack; return value; # # place incr value on stack; store old value in case of # # future access error; if (a7)+, set mia7_flg in # # SPCOND_FLG # -# (d16,An) - fetch An value from stack; read d16 using # +# (d16,An) - fetch An value from stack; read d16 using # # _imem_read_word(); fetch may fail -> branch to # # isp_iacc() # # (xxx).w,(xxx).l - use _imem_read_{word,long}() to fetch # @@ -904,7 +904,7 @@ # isp_iacc() # # everything else - read needed displacements as appropriate w/ # # _imem_read_{word,long}(); read may fail; if memory # -# indirect, read indirect address using # +# indirect, read indirect address using # # _dmem_read_long() which may also fail # # # ######################################################################### @@ -944,59 +944,59 @@ short tbl_ea_mode - tbl_ea_mode short tbl_ea_mode - tbl_ea_mode - short addr_ind_a0 - tbl_ea_mode - short addr_ind_a1 - tbl_ea_mode - short addr_ind_a2 - tbl_ea_mode - short addr_ind_a3 - tbl_ea_mode - short addr_ind_a4 - tbl_ea_mode - short addr_ind_a5 - tbl_ea_mode - short addr_ind_a6 - tbl_ea_mode - short addr_ind_a7 - tbl_ea_mode - - short addr_ind_p_a0 - tbl_ea_mode - short addr_ind_p_a1 - tbl_ea_mode - short addr_ind_p_a2 - tbl_ea_mode - short addr_ind_p_a3 - tbl_ea_mode - short addr_ind_p_a4 - tbl_ea_mode - short addr_ind_p_a5 - tbl_ea_mode - short addr_ind_p_a6 - tbl_ea_mode - short addr_ind_p_a7 - tbl_ea_mode - - short addr_ind_m_a0 - tbl_ea_mode - short addr_ind_m_a1 - tbl_ea_mode - short addr_ind_m_a2 - tbl_ea_mode - short addr_ind_m_a3 - tbl_ea_mode - short addr_ind_m_a4 - tbl_ea_mode - short addr_ind_m_a5 - tbl_ea_mode - short addr_ind_m_a6 - tbl_ea_mode - short addr_ind_m_a7 - tbl_ea_mode - - short addr_ind_disp_a0 - tbl_ea_mode - short addr_ind_disp_a1 - tbl_ea_mode - short addr_ind_disp_a2 - tbl_ea_mode - short addr_ind_disp_a3 - tbl_ea_mode - short addr_ind_disp_a4 - tbl_ea_mode - short addr_ind_disp_a5 - tbl_ea_mode - short addr_ind_disp_a6 - tbl_ea_mode + short addr_ind_a0 - tbl_ea_mode + short addr_ind_a1 - tbl_ea_mode + short addr_ind_a2 - tbl_ea_mode + short addr_ind_a3 - tbl_ea_mode + short addr_ind_a4 - tbl_ea_mode + short addr_ind_a5 - tbl_ea_mode + short addr_ind_a6 - tbl_ea_mode + short addr_ind_a7 - tbl_ea_mode + + short addr_ind_p_a0 - tbl_ea_mode + short addr_ind_p_a1 - tbl_ea_mode + short addr_ind_p_a2 - tbl_ea_mode + short addr_ind_p_a3 - tbl_ea_mode + short addr_ind_p_a4 - tbl_ea_mode + short addr_ind_p_a5 - tbl_ea_mode + short addr_ind_p_a6 - tbl_ea_mode + short addr_ind_p_a7 - tbl_ea_mode + + short addr_ind_m_a0 - tbl_ea_mode + short addr_ind_m_a1 - tbl_ea_mode + short addr_ind_m_a2 - tbl_ea_mode + short addr_ind_m_a3 - tbl_ea_mode + short addr_ind_m_a4 - tbl_ea_mode + short addr_ind_m_a5 - tbl_ea_mode + short addr_ind_m_a6 - tbl_ea_mode + short addr_ind_m_a7 - tbl_ea_mode + + short addr_ind_disp_a0 - tbl_ea_mode + short addr_ind_disp_a1 - tbl_ea_mode + short addr_ind_disp_a2 - tbl_ea_mode + short addr_ind_disp_a3 - tbl_ea_mode + short addr_ind_disp_a4 - tbl_ea_mode + short addr_ind_disp_a5 - tbl_ea_mode + short addr_ind_disp_a6 - tbl_ea_mode short addr_ind_disp_a7 - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - short _addr_ind_ext - tbl_ea_mode - - short abs_short - tbl_ea_mode - short abs_long - tbl_ea_mode - short pc_ind - tbl_ea_mode - short pc_ind_ext - tbl_ea_mode - short immediate - tbl_ea_mode - short tbl_ea_mode - tbl_ea_mode - short tbl_ea_mode - tbl_ea_mode - short tbl_ea_mode - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + short _addr_ind_ext - tbl_ea_mode + + short abs_short - tbl_ea_mode + short abs_long - tbl_ea_mode + short pc_ind - tbl_ea_mode + short pc_ind_ext - tbl_ea_mode + short immediate - tbl_ea_mode + short tbl_ea_mode - tbl_ea_mode + short tbl_ea_mode - tbl_ea_mode + short tbl_ea_mode - tbl_ea_mode ################################### # Address register indirect: (An) # @@ -1041,7 +1041,7 @@ mov.l EXC_A0(%a6),%a0 # load current value add.l %a0,%d0 # increment mov.l %d0,EXC_A0(%a6) # save incremented value - + mov.l %a0,EXC_SAVVAL(%a6) # save in case of access error mov.b &0x0,EXC_SAVREG(%a6) # save regno, too mov.b &restore_flg,SPCOND_FLG(%a6) # set flag @@ -1339,7 +1339,7 @@ mov.l %a0,%d3 # put base in d3 bra.l calc_mem_ind # calc memory indirect - + addr_ind_index_8bit: mov.l %d2,-(%sp) # save old d2 @@ -1370,8 +1370,8 @@ # Immediate: # # ######################################################################### # word, long: of the data is the current extension word # -# pointer value. new extension word pointer is simply the old # -# plus the number of bytes in the data type(2 or 4). # +# pointer value. new extension word pointer is simply the old # +# plus the number of bytes in the data type(2 or 4). # ######################################################################### immediate: mov.b &immed_flg,SPCOND_FLG(%a6) # set immediate flag @@ -1455,9 +1455,9 @@ mov.l %a0,%d3 # put base in d3 bra.l calc_mem_ind # calc memory indirect - + pc_ind_index_8bit: - mov.l %d2,-(%sp) # create a temp register + mov.l %d2,-(%sp) # create a temp register mov.l %d0,%d1 # make extword copy rol.w &0x4,%d1 # rotate reg num into place @@ -1512,14 +1512,14 @@ no_base_sup: bfextu %d5{&26:&2},%d0 # get bd size # beq.l _error # if (size == 0) it's reserved - cmpi.b %d0,&2 + cmpi.b %d0,&2 blt.b no_bd beq.b get_word_bd mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long - + tst.l %d1 # ifetch error? bne.l isp_iacc # yes @@ -1533,16 +1533,16 @@ bne.l isp_iacc # yes ext.l %d0 # sign extend bd - + chk_ind: add.l %d0,%d3 # base += bd no_bd: bfextu %d5{&30:&2},%d0 # is od suppressed? beq.w aii_bd - cmpi.b %d0,&0x2 + cmpi.b %d0,&0x2 blt.b null_od beq.b word_od - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long @@ -1550,7 +1550,7 @@ tst.l %d1 # ifetch error? bne.l isp_iacc # yes - bra.b add_them + bra.b add_them word_od: mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr @@ -1604,10 +1604,10 @@ # must create an access error frame. here, we pass a skeleton fslw # and the failing address to the routine that creates the new frame. # FSLW: -# read = true -# size = longword +# read = true +# size = longword # TM = data -# software emulation error = true +# software emulation error = true calc_ea_err: mov.l %d3,%a0 # pass failing address mov.l &0x01010001,%d0 # pass fslw @@ -1615,7 +1615,7 @@ ######################################################################### # XDEF **************************************************************** # -# _moveperipheral(): routine to emulate movep instruction # +# _moveperipheral(): routine to emulate movep instruction # # # # XREF **************************************************************** # # _dmem_read_byte() - read byte from memory # @@ -1647,7 +1647,7 @@ # movep.(w,l) Dx,(d,Ay) # # movep.(w,l) (d,Ay),Dx # ########################### - global _moveperipheral + global _moveperipheral _moveperipheral: mov.w EXC_OPWORD(%a6),%d1 # fetch the opcode word @@ -1793,11 +1793,11 @@ mov.b EXC_OPWORD(%a6),%d1 lsr.b &0x1,%d1 and.w &0x7,%d1 # extract Dx from opcode word - + mov.l %d2,(EXC_DREGS,%a6,%d1.w*4) # store dx rts - + # a0 = dst addr m2rwtrans: mov.l %a0,%a2 # store addr @@ -1823,7 +1823,7 @@ mov.b EXC_OPWORD(%a6),%d1 lsr.b &0x1,%d1 and.w &0x7,%d1 # extract Dx from opcode word - + mov.w %d2,(EXC_DREGS+2,%a6,%d1.w*4) # store dx rts @@ -1832,7 +1832,7 @@ # must create an access error frame. here, we pass a skeleton fslw # and the failing address to the routine that creates the new frame. # FSLW: -# write = true +# write = true # size = byte # TM = data # software emulation error = true @@ -1842,7 +1842,7 @@ bra.l isp_dacc # FSLW: -# read = true +# read = true # size = byte # TM = data # software emulation error = true @@ -1853,12 +1853,12 @@ ######################################################################### # XDEF **************************************************************** # -# _chk2_cmp2(): routine to emulate chk2/cmp2 instructions # +# _chk2_cmp2(): routine to emulate chk2/cmp2 instructions # # # # XREF **************************************************************** # # _calc_ea(): calculate effective address # # _dmem_read_long(): read operands # -# _dmem_read_word(): read operands # +# _dmem_read_word(): read operands # # isp_dacc(): handle data access error exception # # # # INPUT *************************************************************** # @@ -1869,25 +1869,25 @@ # a0 = failing address # # d0 = FSLW # # else # -# none # +# none # # # # ALGORITHM *********************************************************** # # First, calculate the effective address, then fetch the byte, # -# word, or longword sized operands. Then, in the interest of # -# simplicity, all operands are converted to longword size whether the # -# operation is byte, word, or long. The bounds are sign extended # -# accordingly. If Rn is a data regsiter, Rn is also sign extended. If # -# Rn is an address register, it need not be sign extended since the # +# word, or longword sized operands. Then, in the interest of # +# simplicity, all operands are converted to longword size whether the # +# operation is byte, word, or long. The bounds are sign extended # +# accordingly. If Rn is a data regsiter, Rn is also sign extended. If # +# Rn is an address register, it need not be sign extended since the # # full register is always used. # # The comparisons are made and the condition codes calculated. # # If the instruction is chk2 and the Rn value is out-of-bounds, set # # the ichk_flg in SPCOND_FLG. # -# If the memory fetch returns a failing value, pass the failing # +# If the memory fetch returns a failing value, pass the failing # # address and FSLW to the isp_dacc() routine. # # # ######################################################################### - global _chk2_cmp2 + global _chk2_cmp2 _chk2_cmp2: # passing size parameter doesn't matter since chk2 & cmp2 can't do @@ -1974,7 +1974,7 @@ # # To set the ccodes correctly: -# (1) save 'Z' bit from (Rn - lo) +# (1) save 'Z' bit from (Rn - lo) # (2) save 'Z' and 'N' bits from ((hi - lo) - (Rn - hi)) # (3) keep 'X', 'N', and 'V' from before instruction # (4) combine ccodes @@ -1984,7 +1984,7 @@ mov.w %cc, %d3 # fetch resulting ccodes andi.b &0x4, %d3 # keep 'Z' bit sub.l %d0, %d1 # (hi - lo) - cmp.l %d1,%d2 # ((hi - lo) - (Rn - hi)) + cmp.l %d1,%d2 # ((hi - lo) - (Rn - hi)) mov.w %cc, %d4 # fetch resulting ccodes or.b %d4, %d3 # combine w/ earlier ccodes @@ -2003,7 +2003,7 @@ # this code handles the only difference between chk2 and cmp2. chk2 would # have trapped out if the value was out of bounds. we check this by seeing # if the 'N' bit was set by the operation. -chk2_finish: +chk2_finish: btst &0x0, %d4 # is 'N' bit set? bne.b chk2_trap # yes;chk2 should trap rts @@ -2018,7 +2018,7 @@ # read = true # size = longword # TM = data -# software emulation error = true +# software emulation error = true chk2_cmp2_err_l: mov.l %a2,%a0 # pass failing address mov.l &0x01010001,%d0 # pass fslw @@ -2028,7 +2028,7 @@ # read = true # size = word # TM = data -# software emulation error = true +# software emulation error = true chk2_cmp2_err_w: mov.l %a2,%a0 # pass failing address mov.l &0x01410001,%d0 # pass fslw @@ -2036,12 +2036,12 @@ ######################################################################### # XDEF **************************************************************** # -# _div64(): routine to emulate div{u,s}.l ,Dr:Dq # +# _div64(): routine to emulate div{u,s}.l ,Dr:Dq # # 64/32->32r:32q # # # # XREF **************************************************************** # # _calc_ea() - calculate effective address # -# isp_iacc() - handle instruction access error exception # +# isp_iacc() - handle instruction access error exception # # isp_dacc() - handle data access error exception # # isp_restore() - restore An on access error w/ -() or ()+ # # # @@ -2049,24 +2049,24 @@ # none # # # # OUTPUT ************************************************************** # -# If exiting through isp_dacc... # +# If exiting through isp_dacc... # # a0 = failing address # -# d0 = FSLW # +# d0 = FSLW # # else # # none # # # # ALGORITHM *********************************************************** # -# First, decode the operand location. If it's in Dn, fetch from # -# the stack. If it's in memory, use _calc_ea() to calculate the # +# First, decode the operand location. If it's in Dn, fetch from # +# the stack. If it's in memory, use _calc_ea() to calculate the # # effective address. Use _dmem_read_long() to fetch at that address. # # Unless the operand is immediate data. Then use _imem_read_long(). # # Send failures to isp_dacc() or isp_iacc() as appropriate. # -# If the operands are signed, make them unsigned and save the # +# If the operands are signed, make them unsigned and save the # # sign info for later. Separate out special cases like divide-by-zero # # or 32-bit divides if possible. Else, use a special math algorithm # -# to calculate the result. # -# Restore sign info if signed instruction. Set the condition # -# codes. Set idbyz_flg in SPCOND_FLG if divisor was zero. Store the # +# to calculate the result. # +# Restore sign info if signed instruction. Set the condition # +# codes. Set idbyz_flg in SPCOND_FLG if divisor was zero. Store the # # quotient and remainder in the appropriate data registers on the stack.# # # ######################################################################### @@ -2131,7 +2131,7 @@ negx.l %d5 # extract some special cases: -# - is (dividend == 0) ? +# - is (dividend == 0) ? # - is (hi(dividend) == 0 && (divisor <= lo(dividend))) ? (32-bit div) dspecialcases: tst.l %d5 # is (hi(dividend) == 0) @@ -2140,7 +2140,7 @@ tst.l %d6 # is (lo(dividend) == 0), too beq.w ddone # yes, so (dividend == 0) - cmp.l %d7,%d6 # is (divisor <= lo(dividend)) + cmp.l %d7,%d6 # is (divisor <= lo(dividend)) bls.b d32bitdivide # yes, so use 32 bit divide exg %d5,%d6 # q = 0, r = dividend @@ -2153,7 +2153,7 @@ dnormaldivide: # last special case: -# - is hi(dividend) >= divisor ? if yes, then overflow +# - is hi(dividend) >= divisor ? if yes, then overflow cmp.l %d7,%d5 bls.b ddovf # answer won't fit in 32 bits @@ -2166,7 +2166,7 @@ beq.b ddone # divu has no processing!!! # it was a divs.l, so ccode setting is a little more complicated... - tst.b NDIVIDEND(%a6) # remainder has same sign + tst.b NDIVIDEND(%a6) # remainder has same sign beq.b dcc # as dividend. neg.l %d5 # sgn(rem) = sgn(dividend) dcc: @@ -2194,7 +2194,7 @@ mov.w %cc, EXC_CC(%a6) mov.w NDRSAVE(%a6), %d0 # get Dr off stack - mov.w NDQSAVE(%a6), %d1 # get Dq off stack + mov.w NDQSAVE(%a6), %d1 # get Dq off stack # if the register numbers are the same, only the quotient gets saved. # so, if we always save the quotient second, we save ourselves a cmp&beq @@ -2221,8 +2221,8 @@ # For this implementation b=2**16, and the target is U1U2U3U4/V1V2, # # where U,V are words of the quadword dividend and longword divisor, # # and U1, V1 are the most significant words. # -# # -# The most sig. longword of the 64 bit dividend must be in %d5, least # +# # +# The most sig. longword of the 64 bit dividend must be in %d5, least # # in %d6. The divisor must be in the variable ddivisor, and the # # signed/unsigned flag ddusign must be set (0=unsigned,1=signed). # # The quotient is returned in %d6, remainder in %d5, unless the # @@ -2242,7 +2242,7 @@ # dividing the divisor word into each dividend word. In this case, # the first two quotient words must be zero, or overflow would occur. # Since we already checked this case above, we can treat the most significant -# longword of the dividend as (0) remainder (see Knuth) and merely complete +# longword of the dividend as (0) remainder (see Knuth) and merely complete # the last two divisions to get a quotient longword and word remainder: clr.l %d1 @@ -2278,12 +2278,12 @@ clr.b DDSECOND(%a6) # clear flag for quotient digits clr.l %d1 # %d1 will hold trial quotient ddnchk: - btst &31, %d7 # must we normalize? first word of + btst &31, %d7 # must we normalize? first word of bne.b ddnormalized # divisor (V1) must be >= 65536/2 addq.l &0x1, DDNORMAL(%a6) # count normalization shifts lsl.l &0x1, %d7 # shift the divisor lsl.l &0x1, %d6 # shift u4,u3 with overflow to u2 - roxl.l &0x1, %d5 # shift u1,u2 + roxl.l &0x1, %d5 # shift u1,u2 bra.w ddnchk ddnormalized: @@ -2293,12 +2293,12 @@ mov.l %d5, %d2 # dividend mslw swap %d2 swap %d3 - cmp.w %d2, %d3 # V1 = U1 ? + cmp.w %d2, %d3 # V1 = U1 ? bne.b ddqcalc1 mov.w &0xffff, %d1 # use max trial quotient word bra.b ddadj0 ddqcalc1: - mov.l %d5, %d1 + mov.l %d5, %d1 divu.w %d3, %d1 # use quotient of mslw/msw @@ -2329,7 +2329,7 @@ # add.l %d6, %d4 # (U1U2 - V1q) + U3 - cmp.l %d2, %d4 + cmp.l %d2, %d4 bls.b ddadjd1 # is V2q > (U1U2-V1q) + U3 ? subq.l &0x1, %d1 # yes, decrement and recheck bra.b ddadj1 @@ -2366,7 +2366,7 @@ tst.b DDSECOND(%a6) # both q words done? bne.b ddremain # first quotient digit now correct. store digit and shift the -# (subtracted) dividend +# (subtracted) dividend mov.w %d1, DDQUOTIENT(%a6) clr.l %d1 swap %d5 @@ -2377,7 +2377,7 @@ bra.w ddnormalized ddremain: # add 2nd word to quotient, get the remainder. - mov.w %d1, DDQUOTIENT+2(%a6) + mov.w %d1, DDQUOTIENT+2(%a6) # shift down one word/digit to renormalize remainder. mov.w %d5, %d6 swap %d6 @@ -2391,7 +2391,7 @@ dbf %d7, ddnlp ddrn: mov.l %d6, %d5 # remainder - mov.l DDQUOTIENT(%a6), %d6 # quotient + mov.l DDQUOTIENT(%a6), %d6 # quotient rts dmm2: @@ -2421,7 +2421,7 @@ clr.w %d2 # lsw of two mixed products used, swap %d5 # now use msws of longwords swap %d2 - add.l %d2, %d5 + add.l %d2, %d5 add.l %d3, %d5 # %d5 now ms 32 bits of final product rts @@ -2463,10 +2463,10 @@ # also, we call isp_restore in case the effective addressing mode was # (an)+ or -(an) in which case the previous "an" value must be restored. # FSLW: -# read = true -# size = longword +# read = true +# size = longword # TM = data -# software emulation error = true +# software emulation error = true div64_err: bsr.l isp_restore # restore addr reg mov.l %a2,%a0 # pass failing address @@ -2480,17 +2480,17 @@ # XREF **************************************************************** # # _calc_ea() - calculate effective address # # isp_iacc() - handle instruction access error exception # -# isp_dacc() - handle data access error exception # +# isp_dacc() - handle data access error exception # # isp_restore() - restore An on access error w/ -() or ()+ # # # # INPUT *************************************************************** # # none # # # # OUTPUT ************************************************************** # -# If exiting through isp_dacc... # +# If exiting through isp_dacc... # # a0 = failing address # # d0 = FSLW # -# else # +# else # # none # # # # ALGORITHM *********************************************************** # @@ -2499,9 +2499,9 @@ # effective address. Use _dmem_read_long() to fetch at that address. # # Unless the operand is immediate data. Then use _imem_read_long(). # # Send failures to isp_dacc() or isp_iacc() as appropriate. # -# If the operands are signed, make them unsigned and save the # +# If the operands are signed, make them unsigned and save the # # sign info for later. Perform the multiplication using 16x16->32 # -# unsigned multiplies and "add" instructions. Store the high and low # +# unsigned multiplies and "add" instructions. Store the high and low # # portions of the result in the appropriate data registers on the # # stack. Calculate the condition codes, also. # # # @@ -2554,15 +2554,15 @@ # the result sign is the exclusive or of the operand sign bits. mul64_chk_md_sgn: tst.l %d4 # is multiplicand negative? - bge.b mul64_alg # no + bge.b mul64_alg # no neg.l %d4 # make multiplicand positive eori.b &0x1, EXC_TEMP(%a6) # calculate correct sign ######################################################################### # 63 32 0 # -# ---------------------------- # -# | hi(mplier) * hi(mplicand)| # -# ---------------------------- # +# ---------------------------- # +# | hi(mplier) * hi(mplicand)| # +# ---------------------------- # # ----------------------------- # # | hi(mplier) * lo(mplicand) | # # ----------------------------- # @@ -2639,7 +2639,7 @@ andi.b &0x8, %d7 # extract 'N' bit mul64_ccode_set: - mov.b EXC_CC+1(%a6), %d6 # fetch previous %ccr + mov.b EXC_CC+1(%a6), %d6 # fetch previous %ccr andi.b &0x10, %d6 # all but 'X' bit changes or.b %d7, %d6 # group 'X' and 'N' @@ -2698,10 +2698,10 @@ # also, we call isp_restore in case the effective addressing mode was # (an)+ or -(an) in which case the previous "an" value must be restored. # FSLW: -# read = true -# size = longword +# read = true +# size = longword # TM = data -# software emulation error = true +# software emulation error = true mul64_err: bsr.l isp_restore # restore addr reg mov.l %a2,%a0 # pass failing address @@ -2728,7 +2728,7 @@ # # # _isp_cas2_finish(): # # see cas2 core emulation code # -# # +# # # OUTPUT ************************************************************** # # _compandset2(): # # see cas2 core emulation code # @@ -2744,7 +2744,7 @@ # pages from being paged out. If either _real_lock_page() fails, exit # # through _cas_terminate2(). Don't forget to unlock the 1st locked page # # using _real_unlock_paged() if the 2nd lock-page fails. # -# Finally, branch to the core cas2 emulation code by calling the # +# Finally, branch to the core cas2 emulation code by calling the # # "callout" _real_cas2(). # # # # _isp_cas2_finish(): # @@ -2793,7 +2793,7 @@ lsr.w &0x6,%d1 andi.w &0x7,%d1 # extract Du1 mov.l (EXC_DREGS,%a6,%d1.w*4),%d4 # fetch Update1 Op - + andi.w &0x7,%d0 # extract Dc1 mov.l (EXC_DREGS,%a6,%d0.w*4),%d2 # fetch Compare1 Op mov.w %d0,DC1(%a6) @@ -2827,7 +2827,7 @@ bra.l _real_cas2 -# if the 2nd lock attempt fails, then we must still unlock the +# if the 2nd lock attempt fails, then we must still unlock the # first page(s). cas_preterm: mov.l %d0,-(%sp) # save FSLW @@ -2869,7 +2869,7 @@ sf %d1 # pass size mov.l ADDR1(%a6),%a0 # pass ADDR1 bsr.l _real_unlock_page # unlock page - + mov.l %d2,%d0 # pass mode sf %d1 # pass size mov.l ADDR2(%a6),%a0 # pass ADDR2 @@ -2900,7 +2900,7 @@ st %d1 # pass size mov.l ADDR1(%a6),%a0 # pass ADDR1 bsr.l _real_unlock_page # unlock page - + mov.l %d2,%d0 # pass mode st %d1 # pass size mov.l ADDR2(%a6),%a0 # pass ADDR2 @@ -2928,11 +2928,11 @@ # (external to package) # # # # XREF **************************************************************** # -# _calc_ea(): calculate effective address # +# _calc_ea(): calculate effective address # # # # INPUT *************************************************************** # # compandset(): # -# none # +# none # # _isp_cas_restart(): # # d6 = previous sfc/dfc # # _isp_cas_finish(): # @@ -2959,10 +2959,10 @@ # ALGORITHM *********************************************************** # # # # compandset(): # -# First, calculate the effective address. Then, decode the # +# First, calculate the effective address. Then, decode the # # instruction word and fetch the "compare" (DC) and "update" (Du) # # operands. # -# Next, call the external routine _real_lock_page() so that the # +# Next, call the external routine _real_lock_page() so that the # # operating system can keep this page from being paged out while we're # # in this routine. If this call fails, jump to _cas_terminate2(). # # The routine then branches to _real_cas(). This external routine # @@ -2971,7 +2971,7 @@ # this purpose. # # # # _isp_cas_finish(): # -# Either way, after emulation, the package is re-entered at # +# Either way, after emulation, the package is re-entered at # # _isp_cas_finish(). This routine re-compares the operands in order to # # set the condition codes. Finally, these routines will call # # _real_unlock_page() in order to unlock the pages that were previously # @@ -2984,13 +2984,13 @@ # _isp_cas_terminate(): # # This routine can be entered from an access error handler where # # an emulation operand access failed and the operating system would # -# like an access error stack frame created instead of the current # +# like an access error stack frame created instead of the current # # unimplemented integer instruction frame. # -# Also, the package enters here if a call to _real_lock_page() # +# Also, the package enters here if a call to _real_lock_page() # # fails. # # # # _isp_cas_inrange(): # -# Checks to see whether the instruction address passed to it in # +# Checks to see whether the instruction address passed to it in # # a0 is within the software package cas/cas2 emulation routines. This # # can be helpful for an operating system to determine whether an access # # error during emulation was due to a cas/cas2 emulation access. # @@ -3003,18 +3003,18 @@ global _compandset _compandset: btst &0x1,EXC_OPWORD(%a6) # word or long operation? - bne.b compandsetl # long + bne.b compandsetl # long compandsetw: movq.l &0x2,%d0 # size = 2 bytes - bsr.l _calc_ea # a0 = calculated + bsr.l _calc_ea # a0 = calculated mov.l %a0,ADDR(%a6) # save for possible restart sf %d7 # clear d7 for word size bra.b compandsetfetch compandsetl: movq.l &0x4,%d0 # size = 4 bytes - bsr.l _calc_ea # a0 = calculated + bsr.l _calc_ea # a0 = calculated mov.l %a0,ADDR(%a6) # save for possible restart st %d7 # set d7 for longword size @@ -3040,7 +3040,7 @@ tst.l %d0 # did error occur? bne.w _cas_terminate2 # yes, clean up the mess mov.l %a2,%a0 # pass addr in a0 - + bra.l _real_cas ######## @@ -3053,7 +3053,7 @@ # from the locked routine... cas_finish_w: mov.w EXC_CC(%a6),%cc # restore cc - cmp.w %d0,%d4 # do word compare + cmp.w %d0,%d4 # do word compare mov.w %cc,EXC_CC(%a6) # save cc tst.b %d1 # update compare reg? @@ -3074,7 +3074,7 @@ # from the locked routine... cas_finish_l: mov.w EXC_CC(%a6),%cc # restore cc - cmp.l %d0,%d4 # do longword compare + cmp.l %d0,%d4 # do longword compare mov.w %cc,EXC_CC(%a6) # save cc tst.b %d1 # update compare reg? @@ -3092,7 +3092,7 @@ rts ######## - + global _isp_cas_restart _isp_cas_restart: mov.l %d6,%sfc # restore previous sfc @@ -3104,7 +3104,7 @@ mov.l ADDR(%a6),%a0 # load btst &0x1,EXC_OPWORD(%a6) # word or long operation? sne %d7 # set d7 accordingly - bra.w compandsetfetch + bra.w compandsetfetch ######## @@ -3151,7 +3151,7 @@ cmp.l %a0,%a1 # is PC in range? blt.b cin_no # no rts # yes; return d0 = 0 -cin_no: +cin_no: mov.l &-0x1,%d0 # out of range; return d0 = -1 rts @@ -3179,28 +3179,28 @@ # # # XREF **************************************************************** # # _isp_cas2_finish() - only exit point for this emulation code; # -# do clean-up; calculate ccodes; store # +# do clean-up; calculate ccodes; store # # Compare Ops if appropriate. # # # # INPUT *************************************************************** # # *see chart below* # -# # +# # # OUTPUT ************************************************************** # # *see chart below* # # # # ALGORITHM *********************************************************** # # (1) Make several copies of the effective address. # # (2) Save current SR; Then mask off all maskable interrupts. # -# (3) Save current SFC/DFC (ASSUMED TO BE EQUAL!!!); Then set # -# according to whether exception occurred in user or # +# (3) Save current SFC/DFC (ASSUMED TO BE EQUAL!!!); Then set # +# according to whether exception occurred in user or # # supervisor mode. # # (4) Use "plpaw" instruction to pre-load ATC with effective # # address pages(s). THIS SHOULD NOT FAULT!!! The relevant # # page(s) should have already been made resident prior to # -# entering this routine. # -# (5) Push the operand lines from the cache w/ "cpushl". # +# entering this routine. # +# (5) Push the operand lines from the cache w/ "cpushl". # # In the 68040, this was done within the locked region. In # -# the 68060, it is done outside of the locked region. # +# the 68060, it is done outside of the locked region. # # (6) Use "plpar" instruction to do a re-load of ATC entries for # # ADDR1 since ADDR2 entries may have pushed ADDR1 out of the # # ATC. # @@ -3214,19 +3214,19 @@ # back to itself (as w/ the '040) so we can gracefully unlock # # the bus (and assert LOCKE*) using BUSCR and the final move. # # (12)Exit. # -# (13)Write update operand to the DST locations. Use BUSCR to # +# (13)Write update operand to the DST locations. Use BUSCR to # # assert LOCKE* for the final write operation. # # (14)Exit. # # # -# The algorithm is actually implemented slightly differently # -# depending on the size of the operation and the misalignment of the # +# The algorithm is actually implemented slightly differently # +# depending on the size of the operation and the misalignment of the # # operands. A misaligned operand must be written in aligned chunks or # # else the BUSCR register control gets confused. # # # ######################################################################### ################################################################# -# THIS IS THE STATE OF THE INTEGER REGISTER FILE UPON # +# THIS IS THE STATE OF THE INTEGER REGISTER FILE UPON # # ENTERING _isp_cas2(). # # # # D0 = xxxxxxxx # @@ -3236,7 +3236,7 @@ # D4 = update oper 1 # # D5 = update oper 2 # # D6 = 'xxxxxxff if supervisor mode; 'xxxxxx00 if user mode # -# D7 = 'xxxxxxff if longword operation; 'xxxxxx00 if word # +# D7 = 'xxxxxxff if longword operation; 'xxxxxx00 if word # # A0 = ADDR1 # # A1 = ADDR2 # # A2 = xxxxxxxx # @@ -3339,22 +3339,22 @@ # A4 = bus unlock value # A5 = xxxxxxxx # - align 0x10 + align 0x10 CAS2L_START: movc %a2,%buscr # assert LOCK* movs.l (%a1),%d1 # fetch Dest2[31:0] movs.l (%a0),%d0 # fetch Dest1[31:0] - bra.b CAS2L_CONT + bra.b CAS2L_CONT CAS2L_ENTER: bra.b ~+16 CAS2L_CONT: - cmp.l %d0,%d2 # Dest1 - Compare1 + cmp.l %d0,%d2 # Dest1 - Compare1 bne.b CAS2L_NOUPDATE - cmp.l %d1,%d3 # Dest2 - Compare2 + cmp.l %d1,%d3 # Dest2 - Compare2 bne.b CAS2L_NOUPDATE movs.l %d5,(%a1) # Update2[31:0] -> DEST2 - bra.b CAS2L_UPDATE + bra.b CAS2L_UPDATE bra.b ~+16 CAS2L_UPDATE: @@ -3384,7 +3384,7 @@ #### ################################################################# -# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON # +# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON # # ENTERING _isp_cas2(). # # # # D0 = destination[31:0] operand 1 # @@ -3430,22 +3430,22 @@ bra.l _isp_cas2_finish #### - align 0x10 + align 0x10 CAS2L2_START: movc %a2,%buscr # assert LOCK* movs.l (%a1),%d1 # fetch Dest2[31:0] movs.l (%a0),%d0 # fetch Dest1[31:0] - bra.b CAS2L2_CONT + bra.b CAS2L2_CONT CAS2L2_ENTER: bra.b ~+16 CAS2L2_CONT: - cmp.l %d0,%d2 # Dest1 - Compare1 + cmp.l %d0,%d2 # Dest1 - Compare1 bne.b CAS2L2_NOUPDATE - cmp.l %d1,%d3 # Dest2 - Compare2 + cmp.l %d1,%d3 # Dest2 - Compare2 bne.b CAS2L2_NOUPDATE movs.l %d5,(%a1) # Update2[31:0] -> Dest2 - bra.b CAS2L2_UPDATE + bra.b CAS2L2_UPDATE bra.b ~+16 CAS2L2_UPDATE: @@ -3490,22 +3490,22 @@ ################################# - align 0x10 + align 0x10 CAS2L3_START: movc %a2,%buscr # assert LOCK* movs.l (%a1),%d1 # fetch Dest2[31:0] movs.l (%a0),%d0 # fetch Dest1[31:0] - bra.b CAS2L3_CONT + bra.b CAS2L3_CONT CAS2L3_ENTER: bra.b ~+16 CAS2L3_CONT: - cmp.l %d0,%d2 # Dest1 - Compare1 + cmp.l %d0,%d2 # Dest1 - Compare1 bne.b CAS2L3_NOUPDATE - cmp.l %d1,%d3 # Dest2 - Compare2 + cmp.l %d1,%d3 # Dest2 - Compare2 bne.b CAS2L3_NOUPDATE movs.l %d5,(%a1) # Update2[31:0] -> DEST2 - bra.b CAS2L3_UPDATE + bra.b CAS2L3_UPDATE bra.b ~+16 CAS2L3_UPDATE: @@ -3531,7 +3531,7 @@ nop nop bra.b ~+16 - + CAS2L3_NOUPDATE: rol.l &0x8,%d0 # get Dest1[31:24] movs.b %d0,(%a0)+ # Dest1[31:24] -> DEST1 @@ -3639,22 +3639,22 @@ # A4 = bus unlock value # A5 = xxxxxxxx # - align 0x10 + align 0x10 CAS2W_START: movc %a2,%buscr # assert LOCK* movs.w (%a1),%d1 # fetch Dest2[15:0] movs.w (%a0),%d0 # fetch Dest1[15:0] - bra.b CAS2W_CONT2 + bra.b CAS2W_CONT2 CAS2W_ENTER: bra.b ~+16 CAS2W_CONT2: - cmp.w %d0,%d2 # Dest1 - Compare1 + cmp.w %d0,%d2 # Dest1 - Compare1 bne.b CAS2W_NOUPDATE - cmp.w %d1,%d3 # Dest2 - Compare2 + cmp.w %d1,%d3 # Dest2 - Compare2 bne.b CAS2W_NOUPDATE movs.w %d5,(%a1) # Update2[15:0] -> DEST2 - bra.b CAS2W_UPDATE + bra.b CAS2W_UPDATE bra.b ~+16 CAS2W_UPDATE: @@ -3684,7 +3684,7 @@ #### ################################################################# -# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON # +# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON # # ENTERING _isp_cas2(). # # # # D0 = destination[15:0] operand 1 # @@ -3730,22 +3730,22 @@ bra.l _isp_cas2_finish #### - align 0x10 + align 0x10 CAS2W2_START: movc %a2,%buscr # assert LOCK* movs.w (%a1),%d1 # fetch Dest2[15:0] movs.w (%a0),%d0 # fetch Dest1[15:0] - bra.b CAS2W2_CONT2 + bra.b CAS2W2_CONT2 CAS2W2_ENTER: bra.b ~+16 CAS2W2_CONT2: - cmp.w %d0,%d2 # Dest1 - Compare1 + cmp.w %d0,%d2 # Dest1 - Compare1 bne.b CAS2W2_NOUPDATE - cmp.w %d1,%d3 # Dest2 - Compare2 + cmp.w %d1,%d3 # Dest2 - Compare2 bne.b CAS2W2_NOUPDATE movs.w %d5,(%a1) # Update2[15:0] -> DEST2 - bra.b CAS2W2_UPDATE + bra.b CAS2W2_UPDATE bra.b ~+16 CAS2W2_UPDATE: @@ -3789,34 +3789,34 @@ bra.b CAS2W2_START # ###### ## ###### -# # # # # +# # # # # # # ###### ###### # # # # # # ###### # # ###### ######################################################################### # XDEF **************************************************************** # -# _isp_cas(): "core" emulation code for the cas instruction # +# _isp_cas(): "core" emulation code for the cas instruction # # # # XREF **************************************************************** # # _isp_cas_finish() - only exit point for this emulation code; # # do clean-up # # # # INPUT *************************************************************** # -# *see entry chart below* # +# *see entry chart below* # # # # OUTPUT ************************************************************** # # *see exit chart below* # # # # ALGORITHM *********************************************************** # -# (1) Make several copies of the effective address. # -# (2) Save current SR; Then mask off all maskable interrupts. # +# (1) Make several copies of the effective address. # +# (2) Save current SR; Then mask off all maskable interrupts. # # (3) Save current DFC/SFC (ASSUMED TO BE EQUAL!!!); Then set # # SFC/DFC according to whether exception occurred in user or # # supervisor mode. # # (4) Use "plpaw" instruction to pre-load ATC with efective # # address page(s). THIS SHOULD NOT FAULT!!! The relevant # -# page(s) should have been made resident prior to entering # +# page(s) should have been made resident prior to entering # # this routine. # # (5) Push the operand lines from the cache w/ "cpushl". # # In the 68040, this was done within the locked region. In # @@ -3834,8 +3834,8 @@ # (12)Write update operand to the DST location. Use BUSCR to # # assert LOCKE* for the final write operation. # # (13)Exit. # -# # -# The algorithm is actually implemented slightly differently # +# # +# The algorithm is actually implemented slightly differently # # depending on the size of the operation and the misalignment of the # # operand. A misaligned operand must be written in aligned chunks or # # else the BUSCR register control gets confused. # @@ -3934,9 +3934,9 @@ CASW_START: movc %a1,%buscr # assert LOCK* movs.w (%a0),%d0 # fetch Dest[15:0] - cmp.w %d0,%d4 # Dest - Compare + cmp.w %d0,%d4 # Dest - Compare bne.b CASW_NOUPDATE - bra.b CASW_UPDATE + bra.b CASW_UPDATE CASW_ENTER: bra.b ~+16 @@ -3961,7 +3961,7 @@ movs.b %d0,(%a0)+ # Dest[15:8] -> DEST movc %a2,%buscr # assert LOCKE* rol.l &0x8,%d0 # get Dest[7:0] - bra.b CASW_NOUPDATE2 + bra.b CASW_NOUPDATE2 bra.b ~+16 CASW_NOUPDATE2: @@ -4090,9 +4090,9 @@ CASL_START: movc %a1,%buscr # assert LOCK* movs.l (%a0),%d0 # fetch Dest[31:0] - cmp.l %d0,%d4 # Dest - Compare + cmp.l %d0,%d4 # Dest - Compare bne.b CASL_NOUPDATE - bra.b CASL_UPDATE + bra.b CASL_UPDATE CASL_ENTER: bra.b ~+16 @@ -4117,7 +4117,7 @@ movs.w %d0,(%a0)+ # Dest[31:16] -> DEST swap %d0 # get Dest[15:0] movc %a2,%buscr # assert LOCKE* - bra.b CASL_NOUPDATE2 + bra.b CASL_NOUPDATE2 bra.b ~+16 CASL_NOUPDATE2: @@ -4214,7 +4214,7 @@ mov.l &0xa0000000,%a2 # assert LOCKE* buscr value mov.l &0x00000000,%a3 # buscr unlock value -# pre-load the instruction cache for the following algorithm. +# pre-load the instruction cache for the following algorithm. # this will minimize the number of cycles that LOCK* will be asserted. bra.b CASL2_ENTER # start pre-loading icache @@ -4238,9 +4238,9 @@ CASL2_START: movc %a1,%buscr # assert LOCK* movs.l (%a0),%d0 # fetch Dest[31:0] - cmp.l %d0,%d4 # Dest - Compare + cmp.l %d0,%d4 # Dest - Compare bne.b CASL2_NOUPDATE - bra.b CASL2_UPDATE + bra.b CASL2_UPDATE CASL2_ENTER: bra.b ~+16 @@ -4263,14 +4263,14 @@ movs.b %d0,(%a0)+ # Dest[31:24] -> DEST swap %d0 # get Dest[23:8] movs.w %d0,(%a0)+ # Dest[23:8] -> DEST+0x1 - bra.b CASL2_NOUPDATE2 + bra.b CASL2_NOUPDATE2 bra.b ~+16 CASL2_NOUPDATE2: rol.l &0x8,%d0 # get Dest[7:0] movc %a2,%buscr # assert LOCKE* movs.b %d0,(%a0) # Dest[7:0] -> DEST+0x3 - bra.b CASL2_NOUPDATE3 + bra.b CASL2_NOUPDATE3 nop bra.b ~+16 diff -Nru a/arch/m68k/ifpsp060/src/itest.S b/arch/m68k/ifpsp060/src/itest.S --- a/arch/m68k/ifpsp060/src/itest.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/src/itest.S Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -453,8 +453,8 @@ bne.l error ##################################################### -# movep.w %d0,(0x0,%a0) # -# - this test has %cc initially equal to zero # +# movep.w %d0,(0x0,%a0) # +# - this test has %cc initially equal to zero # ##################################################### movp_2: addq.l &0x1,TESTCTR(%a6) diff -Nru a/arch/m68k/ifpsp060/src/pfpsp.S b/arch/m68k/ifpsp060/src/pfpsp.S --- a/arch/m68k/ifpsp060/src/pfpsp.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/ifpsp060/src/pfpsp.S Tue May 18 23:38:05 2004 @@ -5,10 +5,10 @@ Production Release P1.00 -- October 10, 1994 M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved. - + THE SOFTWARE is provided on an "AS IS" basis and without warranty. To the maximum extent permitted by applicable law, -MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE and any warranty against infringement with regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials. @@ -89,7 +89,7 @@ bra.l _fpsp_effadd short 0x0000 - space 56 + space 56 ############################################################### global _fpsp_done @@ -323,33 +323,33 @@ set EXC_D1, EXC_DREGS+(1*4) set EXC_D0, EXC_DREGS+(0*4) -set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 -set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 -set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) +set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0 +set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1 +set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used) -set FP_SCR1, LV+80 # fp scratch 1 -set FP_SCR1_EX, FP_SCR1+0 +set FP_SCR1, LV+80 # fp scratch 1 +set FP_SCR1_EX, FP_SCR1+0 set FP_SCR1_SGN, FP_SCR1+2 -set FP_SCR1_HI, FP_SCR1+4 -set FP_SCR1_LO, FP_SCR1+8 +set FP_SCR1_HI, FP_SCR1+4 +set FP_SCR1_LO, FP_SCR1+8 -set FP_SCR0, LV+68 # fp scratch 0 -set FP_SCR0_EX, FP_SCR0+0 +set FP_SCR0, LV+68 # fp scratch 0 +set FP_SCR0_EX, FP_SCR0+0 set FP_SCR0_SGN, FP_SCR0+2 -set FP_SCR0_HI, FP_SCR0+4 -set FP_SCR0_LO, FP_SCR0+8 +set FP_SCR0_HI, FP_SCR0+4 +set FP_SCR0_LO, FP_SCR0+8 -set FP_DST, LV+56 # fp destination operand -set FP_DST_EX, FP_DST+0 +set FP_DST, LV+56 # fp destination operand +set FP_DST_EX, FP_DST+0 set FP_DST_SGN, FP_DST+2 -set FP_DST_HI, FP_DST+4 -set FP_DST_LO, FP_DST+8 +set FP_DST_HI, FP_DST+4 +set FP_DST_LO, FP_DST+8 -set FP_SRC, LV+44 # fp source operand -set FP_SRC_EX, FP_SRC+0 +set FP_SRC, LV+44 # fp source operand +set FP_SRC_EX, FP_SRC+0 set FP_SRC_SGN, FP_SRC+2 -set FP_SRC_HI, FP_SRC+4 -set FP_SRC_LO, FP_SRC+8 +set FP_SRC_HI, FP_SRC+4 +set FP_SRC_LO, FP_SRC+8 set USER_FPIAR, LV+40 # FP instr address register @@ -373,7 +373,7 @@ set EXC_TEMP, LV+16 # temporary space set DTAG, LV+15 # destination operand type -set STAG, LV+14 # source operand type +set STAG, LV+14 # source operand type set SPCOND_FLG, LV+10 # flag: special case (see below) @@ -388,17 +388,17 @@ # Helpful macros set FTEMP, 0 # offsets within an -set FTEMP_EX, 0 # extended precision +set FTEMP_EX, 0 # extended precision set FTEMP_SGN, 2 # value saved in memory. -set FTEMP_HI, 4 -set FTEMP_LO, 8 +set FTEMP_HI, 4 +set FTEMP_LO, 8 set FTEMP_GRS, 12 set LOCAL, 0 # offsets within an -set LOCAL_EX, 0 # extended precision +set LOCAL_EX, 0 # extended precision set LOCAL_SGN, 2 # value saved in memory. -set LOCAL_HI, 4 -set LOCAL_LO, 8 +set LOCAL_HI, 4 +set LOCAL_LO, 8 set LOCAL_GRS, 12 set DST, 0 # offsets within an @@ -488,17 +488,17 @@ ###################################### set dzinf_mask, inf_mask+dz_mask+adz_mask set opnan_mask, nan_mask+operr_mask+aiop_mask -set nzi_mask, 0x01ffffff #clears N, Z, and I +set nzi_mask, 0x01ffffff #clears N, Z, and I set unfinx_mask, unfl_mask+inex2_mask+aunfl_mask+ainex_mask set unf2inx_mask, unfl_mask+inex2_mask+ainex_mask set ovfinx_mask, ovfl_mask+inex2_mask+aovfl_mask+ainex_mask set inx1a_mask, inex1_mask+ainex_mask set inx2a_mask, inex2_mask+ainex_mask -set snaniop_mask, nan_mask+snan_mask+aiop_mask +set snaniop_mask, nan_mask+snan_mask+aiop_mask set snaniop2_mask, snan_mask+aiop_mask set naniop_mask, nan_mask+aiop_mask set neginf_mask, neg_mask+inf_mask -set infaiop_mask, inf_mask+aiop_mask +set infaiop_mask, inf_mask+aiop_mask set negz_mask, neg_mask+z_mask set opaop_mask, operr_mask+aiop_mask set unfl_inx_mask, unfl_mask+aunfl_mask+ainex_mask @@ -527,8 +527,8 @@ set mantissalen, 64 # length of mantissa in bits set BYTE, 1 # len(byte) == 1 byte -set WORD, 2 # len(word) == 2 bytes -set LONG, 4 # len(longword) == 2 bytes +set WORD, 2 # len(word) == 2 bytes +set LONG, 4 # len(longword) == 2 bytes set BSUN_VEC, 0xc0 # bsun vector offset set INEX_VEC, 0xc4 # inexact vector offset @@ -598,7 +598,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Ovfl exception stack frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # Overflow Exception enabled: # # - The system stack is unchanged # @@ -609,24 +609,24 @@ # # # ALGORITHM *********************************************************** # # On the 060, if an FP overflow is present as the result of any # -# instruction, the 060 will take an overflow exception whether the # -# exception is enabled or disabled in the FPCR. For the disabled case, # +# instruction, the 060 will take an overflow exception whether the # +# exception is enabled or disabled in the FPCR. For the disabled case, # # This handler emulates the instruction to determine what the correct # # default result should be for the operation. This default result is # -# then stored in either the FP regfile, data regfile, or memory. # -# Finally, the handler exits through the "callout" _fpsp_done() # +# then stored in either the FP regfile, data regfile, or memory. # +# Finally, the handler exits through the "callout" _fpsp_done() # # denoting that no exceptional conditions exist within the machine. # -# If the exception is enabled, then this handler must create the # +# If the exception is enabled, then this handler must create the # # exceptional operand and plave it in the fsave state frame, and store # -# the default result (only if the instruction is opclass 3). For # -# exceptions enabled, this handler must exit through the "callout" # +# the default result (only if the instruction is opclass 3). For # +# exceptions enabled, this handler must exit through the "callout" # # _real_ovfl() so that the operating system enabled overflow handler # # can handle this case. # -# Two other conditions exist. First, if overflow was disabled # -# but the inexact exception was enabled, this handler must exit # +# Two other conditions exist. First, if overflow was disabled # +# but the inexact exception was enabled, this handler must exit # # through the "callout" _real_inex() regardless of whether the result # # was inexact. # -# Also, in the case of an opclass three instruction where # +# Also, in the case of an opclass three instruction where # # overflow was disabled and the trace exception was enabled, this # # handler must exit through the "callout" _real_trace(). # # # @@ -641,9 +641,9 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) @@ -667,7 +667,7 @@ bsr.l set_tag_x # tag the operand type mov.b %d0,STAG(%a6) # maybe NORM,DENORM -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # that can pass through fpsp_ovfl(). remember that fcmp, ftst, and fsincos # will never take this exception. btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? @@ -740,7 +740,7 @@ fovfl_ovfl_on: fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack - mov.w &0xe005,2+FP_SRC(%a6) # save exc status + mov.w &0xe005,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -756,10 +756,10 @@ # we must jump to real_inex(). fovfl_inex_on: - fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack + fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack mov.b &0xc4,1+EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # save exc status + mov.w &0xe001,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -810,7 +810,7 @@ btst &0x7,(%sp) # is trace on? beq.l _fpsp_done # no - fmov.l %fpiar,0x8(%sp) # "Current PC" is in FPIAR + fmov.l %fpiar,0x8(%sp) # "Current PC" is in FPIAR mov.w &0x2024,0x6(%sp) # stk fmt = 0x2; voff = 0x024 bra.l _real_trace @@ -838,7 +838,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Unfl exception stack frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # Underflow Exception enabled: # # - The system stack is unchanged # @@ -849,24 +849,24 @@ # # # ALGORITHM *********************************************************** # # On the 060, if an FP underflow is present as the result of any # -# instruction, the 060 will take an underflow exception whether the # -# exception is enabled or disabled in the FPCR. For the disabled case, # +# instruction, the 060 will take an underflow exception whether the # +# exception is enabled or disabled in the FPCR. For the disabled case, # # This handler emulates the instruction to determine what the correct # # default result should be for the operation. This default result is # -# then stored in either the FP regfile, data regfile, or memory. # -# Finally, the handler exits through the "callout" _fpsp_done() # +# then stored in either the FP regfile, data regfile, or memory. # +# Finally, the handler exits through the "callout" _fpsp_done() # # denoting that no exceptional conditions exist within the machine. # -# If the exception is enabled, then this handler must create the # +# If the exception is enabled, then this handler must create the # # exceptional operand and plave it in the fsave state frame, and store # -# the default result (only if the instruction is opclass 3). For # -# exceptions enabled, this handler must exit through the "callout" # +# the default result (only if the instruction is opclass 3). For # +# exceptions enabled, this handler must exit through the "callout" # # _real_unfl() so that the operating system enabled overflow handler # # can handle this case. # -# Two other conditions exist. First, if underflow was disabled # -# but the inexact exception was enabled and the result was inexact, # +# Two other conditions exist. First, if underflow was disabled # +# but the inexact exception was enabled and the result was inexact, # # this handler must exit through the "callout" _real_inex(). # # was inexact. # -# Also, in the case of an opclass three instruction where # +# Also, in the case of an opclass three instruction where # # underflow was disabled and the trace exception was enabled, this # # handler must exit through the "callout" _real_trace(). # # # @@ -881,12 +881,12 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction - mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) + mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -905,13 +905,13 @@ bsr.l set_tag_x # tag the operand type mov.b %d0,STAG(%a6) # maybe NORM,DENORM -# bit five of the fp ext word separates the monadic and dyadic operations +# bit five of the fp ext word separates the monadic and dyadic operations # that can pass through fpsp_unfl(). remember that fcmp, and ftst # will never take this exception. btst &0x5,1+EXC_CMDREG(%a6) # is op monadic or dyadic? beq.b funfl_extract # monadic -# now, what's left that's not dyadic is fsincos. we can distinguish it +# now, what's left that's not dyadic is fsincos. we can distinguish it # from all dyadics by the '0110xxx pattern btst &0x4,1+EXC_CMDREG(%a6) # is op an fsincos? bne.b funfl_extract # yes @@ -962,7 +962,7 @@ # (0x00000000_80000000_00000000), then the machine will take an # underflow exception. Since this is incorrect, we need to check # if our emulation, after re-doing the operation, decided that -# no underflow was called for. We do these checks only in +# no underflow was called for. We do these checks only in # funfl_{unfl,inex}_on() because w/ both exceptions disabled, this # special case will simply exit gracefully with the correct result. @@ -1002,7 +1002,7 @@ funfl_unfl_on2: fmovm.x &0x40,FP_SRC(%a6) # save EXOP (fp1) to stack - mov.w &0xe003,2+FP_SRC(%a6) # save exc status + mov.w &0xe003,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -1021,7 +1021,7 @@ # The `060 FPU multiplier hardware is such that if the result of a # multiply operation is the smallest possible normalized number # (0x00000000_80000000_00000000), then the machine will take an -# underflow exception. +# underflow exception. # But, whether bogus or not, if inexact is enabled AND it occurred, # then we have to branch to real_inex. @@ -1030,10 +1030,10 @@ funfl_inex_on2: - fmovm.x &0x40,FP_SRC(%a6) # save EXOP to stack + fmovm.x &0x40,FP_SRC(%a6) # save EXOP to stack mov.b &0xc4,1+EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # save exc status + mov.w &0xe001,2+FP_SRC(%a6) # save exc status fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs @@ -1119,7 +1119,7 @@ # INPUT *************************************************************** # # - The system stack contains the "Unimp Data Type" stk frame # # - The fsave frame contains the ssrc op (for UNNORM/DENORM) # -# # +# # # OUTPUT ************************************************************** # # If Inexact exception (opclass 3): # # - The system stack is changed to an Inexact exception stk frame # @@ -1138,12 +1138,12 @@ # # # ALGORITHM *********************************************************** # # Two main instruction types can enter here: (1) DENORM or UNNORM # -# unimplemented data types. These can be either opclass 0,2 or 3 # +# unimplemented data types. These can be either opclass 0,2 or 3 # # instructions, and (2) PACKED unimplemented data format instructions # # also of opclasses 0,2, or 3. # # For UNNORM/DENORM opclass 0 and 2, the handler fetches the src # # operand from the fsave state frame and the dst operand (if dyadic) # -# from the FP register file. The instruction is then emulated by # +# from the FP register file. The instruction is then emulated by # # choosing an emulation routine from a table of routines indexed by # # instruction type. Once the instruction has been emulated and result # # saved, then we check to see if any enabled exceptions resulted from # @@ -1165,7 +1165,7 @@ # (a Trace stack frame must be created here, too). If an FP exception # # should occur, then we must create an exception stack frame of that # # type and jump to either _real_snan(), _real_operr(), _real_inex(), # -# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 # +# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 # # emulation is performed in a similar manner. # # # ######################################################################### @@ -1177,7 +1177,7 @@ # ***************** # * EA * # pre-instruction * * -# ***************** ***************** +# ***************** ***************** # * 0x0 * 0x0dc * * 0x3 * 0x0dc * # ***************** ***************** # * Next * * Next * @@ -1206,9 +1206,9 @@ fsave FP_SRC(%a6) # save fp state - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack btst &0x5,EXC_SR(%a6) # user or supervisor mode? bne.b fu_s @@ -1257,7 +1257,7 @@ fmov.l &0x0,%fpsr # Opclass two w/ memory-to-fpn operation will have an incorrect extended -# precision format if the src format was single or double and the +# precision format if the src format was single or double and the # source data type was an INF, NAN, DENORM, or UNNORM lea FP_SRC(%a6),%a0 # pass ptr to input bsr.l fix_skewed_ops @@ -1276,7 +1276,7 @@ bfextu EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # at this point btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? beq.b fu_extract # monadic @@ -1307,13 +1307,13 @@ # # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : all dyadic ops # OPERR : fsqrt(-NORM) # OVFL : all except ftst,fcmp # UNFL : all except ftst,fcmp # DZ : fdiv -# INEX2 : all except ftst,fcmp +# INEX2 : all except ftst,fcmp # INEX1 : none (packed doesn't go through here) # @@ -1350,16 +1350,16 @@ # # No exceptions occurred that were also enabled. Now: # -# if (OVFL && ovfl_disabled && inexact_enabled) { +# if (OVFL && ovfl_disabled && inexact_enabled) { # branch to _real_inex() (even if the result was exact!); -# } else { +# } else { # save the result in the proper fp reg (unless the op is fcmp or ftst); # return; -# } +# } # btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? beq.b fu_in_cont # no - + fu_in_ovflchk: btst &inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled? beq.b fu_in_cont # no @@ -1379,7 +1379,7 @@ # } else { # restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU; # } -# +# fu_in_exc: subi.l &24,%d0 # fix offset to be 0-8 cmpi.b %d0,&0x6 # is exception INEX? (6) @@ -1392,7 +1392,7 @@ bne.w fu_in_exc_ovfl # yes # here, we insert the correct fsave status value into the fsave frame for the -# corresponding exception. the operand in the fsave frame should be the original +# corresponding exception. the operand in the fsave frame should be the original # src operand. fu_in_exc_exit: mov.l %d0,-(%sp) # save d0 @@ -1423,8 +1423,8 @@ bra.b fu_in_exc_exit # If the input operand to this operation was opclass two and a single -# or double precision denorm, inf, or nan, the operand needs to be -# "corrected" in order to have the proper equivalent extended precision +# or double precision denorm, inf, or nan, the operand needs to be +# "corrected" in order to have the proper equivalent extended precision # number. global fix_skewed_ops fix_skewed_ops: @@ -1452,7 +1452,7 @@ bsr.l norm # normalize mantissa neg.w %d0 # -shft amt addi.w &0x3f81,%d0 # adjust new exponent - andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent + andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent or.w %d0,LOCAL_EX(%a0) # insert new exponent rts @@ -1461,7 +1461,7 @@ rts fso_infnan: - andi.b &0x7f,LOCAL_HI(%a0) # clear j-bit + andi.b &0x7f,LOCAL_HI(%a0) # clear j-bit ori.w &0x7fff,LOCAL_EX(%a0) # make exponent = $7fff rts @@ -1484,7 +1484,7 @@ bsr.l norm # normalize mantissa neg.w %d0 # -shft amt addi.w &0x3c01,%d0 # adjust new exponent - andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent + andi.w &0x8000,LOCAL_EX(%a0) # clear old exponent or.w %d0,LOCAL_EX(%a0) # insert new exponent rts @@ -1536,13 +1536,13 @@ bsr.l fout # call fmove out routine # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : none # OPERR : fmove.{b,w,l} out of large UNNORM # OVFL : fmove.{s,d} # UNFL : fmove.{s,d,x} # DZ : none -# INEX2 : all +# INEX2 : all # INEX1 : none (packed doesn't travel through here) # determine the highest priority exception(if any) set by the @@ -1554,7 +1554,7 @@ mov.l EXC_A6(%a6),(%a6) # in case a6 changed -# on extended precision opclass three instructions using pre-decrement or +# on extended precision opclass three instructions using pre-decrement or # post-increment addressing mode, the address register is not updated. is the # address register was the stack pointer used from user mode, then let's update # it here. if it was used from supervisor mode, then we have to handle this @@ -1578,7 +1578,7 @@ bra.l _fpsp_done # is the ea mode pre-decrement of the stack pointer from supervisor mode? -# ("fmov.x fpm,-(a7)") if so, +# ("fmov.x fpm,-(a7)") if so, fu_out_done_s: cmpi.b SPCOND_FLG(%a6),&mda7_flg bne.b fu_out_done_cont @@ -1616,7 +1616,7 @@ bfffo %d0{&24:&8},%d0 # find highest priority exception bne.b fu_out_exc # there is at least one set -# no exceptions were set. +# no exceptions were set. # if a disabled overflow occurred and inexact was enabled but the result # was exact, then a branch to _real_inex() is made. btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? @@ -1633,7 +1633,7 @@ # from FPIAR and put it in the trace stack frame then jump to _real_trace(). # # UNSUPP FRAME TRACE FRAME -# ***************** ***************** +# ***************** ***************** # * EA * * Current * # * * * PC * # ***************** ***************** @@ -1650,7 +1650,7 @@ fmov.l %fpiar,0x8(%sp) bra.l _real_trace -# an exception occurred and that exception was enabled. +# an exception occurred and that exception was enabled. fu_out_exc: subi.l &24,%d0 # fix offset to be 0-8 @@ -1662,15 +1662,15 @@ swbeg &0x8 tbl_fu_out: short tbl_fu_out - tbl_fu_out # BSUN can't happen - short tbl_fu_out - tbl_fu_out # SNAN can't happen + short tbl_fu_out - tbl_fu_out # SNAN can't happen short fu_operr - tbl_fu_out # OPERR - short fu_ovfl - tbl_fu_out # OVFL - short fu_unfl - tbl_fu_out # UNFL + short fu_ovfl - tbl_fu_out # OVFL + short fu_unfl - tbl_fu_out # UNFL short tbl_fu_out - tbl_fu_out # DZ can't happen - short fu_inex - tbl_fu_out # INEX2 + short fu_inex - tbl_fu_out # INEX2 short tbl_fu_out - tbl_fu_out # INEX1 won't make it here -# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just +# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just # frestore it. fu_snan: fmovm.x EXC_FPREGS(%a6),&0xc0 # restore fp0/fp1 @@ -1721,7 +1721,7 @@ # underflow can happen for extended precision. extended precision opclass # three instruction exceptions don't update the stack pointer. so, if the # exception occurred from user mode, then simply update a7 and exit normally. -# if the exception occurred from supervisor mode, check if +# if the exception occurred from supervisor mode, check if fu_unfl: mov.l EXC_A6(%a6),(%a6) # restore a6 @@ -1730,7 +1730,7 @@ mov.l EXC_A7(%a6),%a0 # restore a7 whether we need mov.l %a0,%usp # to or not... - + fu_unfl_cont: fmovm.x &0x40,FP_SRC(%a6) # save EXOP to the stack @@ -1821,7 +1821,7 @@ bfextu EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg -# bit five of the fp extension word separates the monadic and dyadic operations +# bit five of the fp extension word separates the monadic and dyadic operations # at this point btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic? beq.b fu_extract_p # monadic @@ -1852,13 +1852,13 @@ # # Exceptions in order of precedence: -# BSUN : none +# BSUN : none # SNAN : all dyadic ops # OPERR : fsqrt(-NORM) # OVFL : all except ftst,fcmp # UNFL : all except ftst,fcmp # DZ : fdiv -# INEX2 : all except ftst,fcmp +# INEX2 : all except ftst,fcmp # INEX1 : all # @@ -1928,16 +1928,16 @@ # # No exceptions occurred that were also enabled. Now: # -# if (OVFL && ovfl_disabled && inexact_enabled) { +# if (OVFL && ovfl_disabled && inexact_enabled) { # branch to _real_inex() (even if the result was exact!); -# } else { +# } else { # save the result in the proper fp reg (unless the op is fcmp or ftst); # return; -# } +# } # btst &ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set? beq.w fu_in_cont_p # no - + fu_in_ovflchk_p: btst &inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled? beq.w fu_in_cont_p # no @@ -1957,7 +1957,7 @@ # } else { # restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU; # } -# +# fu_in_exc_p: subi.l &24,%d0 # fix offset to be 0-8 cmpi.b %d0,&0x6 # is exception INEX? (6 or 7) @@ -1970,7 +1970,7 @@ bne.w fu_in_exc_ovfl_p # yes # here, we insert the correct fsave status value into the fsave frame for the -# corresponding exception. the operand in the fsave frame should be the original +# corresponding exception. the operand in the fsave frame should be the original # src operand. # as a reminder for future predicted pain and agony, we are passing in fsave the # "non-skewed" operand for cases of sgl and dbl src INFs,NANs, and DENORMs. @@ -2033,21 +2033,21 @@ bne.b fu_trace_p # yes bra.l _fpsp_done # exit to os - + # -# The opclass two PACKED instruction that took an "Unimplemented Data Type" -# exception was being traced. Make the "current" PC the FPIAR and put it in the +# The opclass two PACKED instruction that took an "Unimplemented Data Type" +# exception was being traced. Make the "current" PC the FPIAR and put it in the # trace stack frame then jump to _real_trace(). -# +# # UNSUPP FRAME TRACE FRAME # ***************** ***************** # * EA * * Current * # * * * PC * # ***************** ***************** -# * 0x2 * 0x0dc * * 0x2 * 0x024 * +# * 0x2 * 0x0dc * * 0x2 * 0x024 * # ***************** ***************** # * Next * * Next * -# * PC * * PC * +# * PC * * PC * # ***************** ***************** # * SR * * SR * # ***************** ***************** @@ -2093,13 +2093,13 @@ bsr.l fout # call fmove out routine # Exceptions in order of precedence: -# BSUN : no +# BSUN : no # SNAN : yes # OPERR : if ((k_factor > +17) || (dec. exp exceeds 3 digits)) # OVFL : no # UNFL : no # DZ : no -# INEX2 : yes +# INEX2 : yes # INEX1 : no # determine the highest priority exception(if any) set by the @@ -2163,7 +2163,7 @@ mov.l EXC_A6(%a6),(%a6) # restore a6 -# an exception occurred and that exception was enabled. +# an exception occurred and that exception was enabled. # the only exception possible on packed move out are INEX, OPERR, and SNAN. fu_out_exc_p: cmpi.b %d0,&0x1a @@ -2190,7 +2190,7 @@ movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.w &0x30d8,EXC_VOFF(%a6) # vector offset = 0xd0 - mov.w &0xe006,2+FP_SRC(%a6) # set fsave status + mov.w &0xe006,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2230,7 +2230,7 @@ movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.w &0x30d0,EXC_VOFF(%a6) # vector offset = 0xd0 - mov.w &0xe004,2+FP_SRC(%a6) # set fsave status + mov.w &0xe004,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2269,8 +2269,8 @@ fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 - mov.w &0x30c4,EXC_VOFF(%a6) # vector offset = 0xc4 - mov.w &0xe001,2+FP_SRC(%a6) # set fsave status + mov.w &0x30c4,EXC_VOFF(%a6) # vector offset = 0xc4 + mov.w &0xe001,2+FP_SRC(%a6) # set fsave status frestore FP_SRC(%a6) # restore src operand @@ -2311,7 +2311,7 @@ andi.w &0x7fff,%d0 # strip sign beq.b funimp_skew_sgl_not cmpi.w %d0,&0x3f80 - bgt.b funimp_skew_sgl_not + bgt.b funimp_skew_sgl_not neg.w %d0 # make exponent negative addi.w &0x3f81,%d0 # find amt to shift mov.l FP_SRC_HI(%a6),%d1 # fetch DENORM hi(man) @@ -2328,7 +2328,7 @@ andi.w &0x7fff,%d0 # strip sign beq.b funimp_skew_dbl_not cmpi.w %d0,&0x3c00 - bgt.b funimp_skew_dbl_not + bgt.b funimp_skew_dbl_not tst.b FP_SRC_EX(%a6) # make "internal format" smi.b 0x2+FP_SRC(%a6) @@ -2361,7 +2361,7 @@ ######################################################################### # XDEF **************************************************************** # # _fpsp_effadd(): 060FPSP entry point for FP "Unimplemented # -# effective address" exception. # +# effective address" exception. # # # # This handler should be the first code executed upon taking the # # FP Unimplemented Effective Address exception in an operating # @@ -2386,7 +2386,7 @@ # # # INPUT *************************************************************** # # - The system stack contains the "Unimplemented " stk frame # -# # +# # # OUTPUT ************************************************************** # # If access error: # # - The system stack is changed to an access error stack frame # @@ -2407,17 +2407,17 @@ # For immediate data operations, the data is read in w/ a # # _mem_read() "callout", converted to FP binary (if packed), and used # # as the source operand to the instruction specified by the instruction # -# word. If no FP exception should be reported ads a result of the # +# word. If no FP exception should be reported ads a result of the # # emulation, then the result is stored to the destination register and # # the handler exits through _fpsp_done(). If an enabled exc has been # # signalled as a result of emulation, then an fsave state frame # # corresponding to the FP exception type must be entered into the 060 # -# FPU before exiting. In either the enabled or disabled cases, we # +# FPU before exiting. In either the enabled or disabled cases, we # # must also check if a Trace exception is pending, in which case, we # # must create a Trace exception stack frame from the current exception # # stack frame. If no Trace is pending, we simply exit through # # _fpsp_done(). # -# For "fmovm.x", call the routine fmovm_dynamic() which will # +# For "fmovm.x", call the routine fmovm_dynamic() which will # # decode and emulate the instruction. No FP exceptions can be pending # # as a result of this operation emulation. A Trace exception can be # # pending, though, which means the current stack frame must be changed # @@ -2436,11 +2436,11 @@ # before the "FPU disabled" exception, but the "FPU disabled" exception # # has higher priority, we check the disabled bit in the PCR. If set, # # then we must create an 8 word "FPU disabled" exception stack frame # -# from the current 4 word exception stack frame. This includes # -# reproducing the effective address of the instruction to put on the # +# from the current 4 word exception stack frame. This includes # +# reproducing the effective address of the instruction to put on the # # new stack frame. # # # -# In the process of all emulation work, if a _mem_read() # +# In the process of all emulation work, if a _mem_read() # # "callout" returns a failing result indicating an access error, then # # we must create an access error stack frame from the current stack # # frame. This information includes a faulting address and a fault- # @@ -2481,18 +2481,18 @@ # # here, we will have: -# fabs fdabs fsabs facos fmod +# fabs fdabs fsabs facos fmod # fadd fdadd fsadd fasin frem -# fcmp fatan fscale +# fcmp fatan fscale # fdiv fddiv fsdiv fatanh fsin # fint fcos fsincos # fintrz fcosh fsinh # fmove fdmove fsmove fetox ftan -# fmul fdmul fsmul fetoxm1 ftanh +# fmul fdmul fsmul fetoxm1 ftanh # fneg fdneg fsneg fgetexp ftentox # fsgldiv fgetman ftwotox -# fsglmul flog10 -# fsqrt flog2 +# fsglmul flog10 +# fsqrt flog2 # fsub fdsub fssub flogn # ftst flognp1 # which can all use f.{x,p} @@ -2584,8 +2584,8 @@ # store a result. then, only fcmp will branch back and pick up a dst operand. st STORE_FLG(%a6) # don't store a final result btst &0x1,1+EXC_CMDREG(%a6) # is operation fcmp? - beq.b iea_op_loaddst # yes - + beq.b iea_op_loaddst # yes + iea_op_extract: clr.l %d0 mov.b FPCR_MODE(%a6),%d0 # pass: rnd mode,prec @@ -2658,7 +2658,7 @@ btst &inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled? beq.b iea_op_store # no bra.b iea_op_exc_ovfl # yes - + # an enabled exception occurred. we have to insert the exception type back into # the machine. iea_op_exc: @@ -2697,7 +2697,7 @@ fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 - frestore FP_SRC(%a6) # restore exceptional state + frestore FP_SRC(%a6) # restore exceptional state unlk %a6 # unravel the frame @@ -2705,12 +2705,12 @@ bne.b iea_op_trace # yes bra.l _fpsp_done # exit to os - + # # The opclass two instruction that took an "Unimplemented Effective Address" # exception was being traced. Make the "current" PC the FPIAR and put it in # the trace stack frame then jump to _real_trace(). -# +# # UNIMP EA FRAME TRACE FRAME # ***************** ***************** # * 0x0 * 0x0f0 * * Current * @@ -2743,7 +2743,7 @@ iea_fmovm_data_u: mov.l %usp,%a0 - mov.l %a0,EXC_A7(%a6) # store current a7 + mov.l %a0,EXC_A7(%a6) # store current a7 bsr.l fmovm_dynamic # do dynamic fmovm mov.l EXC_A7(%a6),%a0 # load possibly new a7 mov.l %a0,%usp # update usp @@ -2774,10 +2774,10 @@ lea (EXC_SR,%a6,%d0),%a0 mov.l %a0,EXC_SR(%a6) - + fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 mov.l (%sp)+,%sp @@ -2791,15 +2791,15 @@ lea (EXC_SR-0x4,%a6,%d0),%a0 mov.l %a0,EXC_SR(%a6) - + fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 unlk %a6 mov.l (%sp)+,%sp bra.l _real_trace - + # right now, d1 = size and d0 = the strg. iea_fmovm_data_predec: mov.b %d1,EXC_VOFF(%a6) # store strg @@ -2807,7 +2807,7 @@ fmovm.x EXC_FP0(%a6),&0xc0 # restore fp0-fp1 fmovm.l USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs - movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 + movm.l EXC_DREGS(%a6),&0x0303 # restore d0-d1/a0-a1 mov.l (%a6),-(%sp) # make a copy of a6 mov.l %d0,-(%sp) # save d0 @@ -2909,10 +2909,10 @@ # # The control reg instruction that took an "Unimplemented Effective Address" -# exception was being traced. The "Current PC" for the trace frame is the +# exception was being traced. The "Current PC" for the trace frame is the # PC stacked for Unimp EA. The "Next PC" is in EXC_EXTWPTR. # After fixing the stack frame, jump to _real_trace(). -# +# # UNIMP EA FRAME TRACE FRAME # ***************** ***************** # * 0x0 * 0x0f0 * * Current * @@ -3065,7 +3065,7 @@ # _fpsp_operr(): 060FPSP entry point for FP Operr exception. # # # # This handler should be the first code executed upon taking the # -# FP Operand Error exception in an operating system. # +# FP Operand Error exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3078,7 +3078,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Operr exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # No access error: # # - The system stack is unchanged # @@ -3087,16 +3087,16 @@ # ALGORITHM *********************************************************** # # In a system where the FP Operr exception is enabled, the goal # # is to get to the handler specified at _real_operr(). But, on the 060, # -# for opclass zero and two instruction taking this exception, the # +# for opclass zero and two instruction taking this exception, the # # input operand in the fsave frame may be incorrect for some cases # # and needs to be corrected. This handler calls fix_skewed_ops() to # # do just this and then exits through _real_operr(). # # For opclass 3 instructions, the 060 doesn't store the default # # operr result out to memory or data register file as it should. # # This code must emulate the move out before finally exiting through # -# _real_inex(). The move out, if to memory, is performed using # +# _real_inex(). The move out, if to memory, is performed using # # _mem_write() "callout" routines that may return a failing result. # -# In this special case, the handler must exit through facc_out() # +# In this special case, the handler must exit through facc_out() # # which creates an access error stack frame from the current operr # # stack frame. # # # @@ -3109,13 +3109,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3129,7 +3129,7 @@ # here, we simply see if the operand in the fsave frame needs to be "unskewed". # this would be the case for opclass two operations with a source infinity or -# denorm operand in the sgl or dbl format. NANs also become skewed, but can't +# denorm operand in the sgl or dbl format. NANs also become skewed, but can't # cause an operr so we don't need to check for them here. lea FP_SRC(%a6),%a0 # pass: ptr to src op bsr.l fix_skewed_ops # fix src op @@ -3200,7 +3200,7 @@ short tbl_operr - tbl_operr # dbl prec shouldn't happen short foperr_out_b - tbl_operr # byte integer short tbl_operr - tbl_operr # packed won't enter here - + foperr_out_b: mov.b L_SCR1(%a6),%d0 # load positive default result cmpi.b %d1,&0x7 # is mode a data reg? @@ -3254,7 +3254,7 @@ # _fpsp_snan(): 060FPSP entry point for FP SNAN exception. # # # # This handler should be the first code executed upon taking the # -# FP Signalling NAN exception in an operating system. # +# FP Signalling NAN exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3268,7 +3268,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP SNAN exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # No access error: # # - The system stack is unchanged # @@ -3277,16 +3277,16 @@ # ALGORITHM *********************************************************** # # In a system where the FP SNAN exception is enabled, the goal # # is to get to the handler specified at _real_snan(). But, on the 060, # -# for opclass zero and two instructions taking this exception, the # +# for opclass zero and two instructions taking this exception, the # # input operand in the fsave frame may be incorrect for some cases # # and needs to be corrected. This handler calls fix_skewed_ops() to # # do just this and then exits through _real_snan(). # # For opclass 3 instructions, the 060 doesn't store the default # # SNAN result out to memory or data register file as it should. # # This code must emulate the move out before finally exiting through # -# _real_snan(). The move out, if to memory, is performed using # +# _real_snan(). The move out, if to memory, is performed using # # _mem_write() "callout" routines that may return a failing result. # -# In this special case, the handler must exit through facc_out() # +# In this special case, the handler must exit through facc_out() # # which creates an access error stack frame from the current SNAN # # stack frame. # # For the case of an extended precision opclass 3 instruction, # @@ -3305,13 +3305,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3339,7 +3339,7 @@ unlk %a6 bra.l _real_snan - + ######################################################################## # @@ -3349,7 +3349,7 @@ # # byte, word, long, and packed destination format operations can pass # through here. since packed format operations already were handled by -# fpsp_unsupp(), then we need to do nothing else for them here. +# fpsp_unsupp(), then we need to do nothing else for them here. # for byte, word, and long, we simply need to test the sign of the src # operand and save the appropriate minimum or maximum integer value # to the effective address as pointed to by the stacked effective address. @@ -3370,7 +3370,7 @@ short fsnan_out_d - tbl_snan # dbl prec shouldn't happen short fsnan_out_b - tbl_snan # byte integer short tbl_snan - tbl_snan # packed needs no help - + fsnan_out_b: mov.b FP_SRC_HI(%a6),%d0 # load upper byte of SNAN bset &6,%d0 # set SNAN bit @@ -3496,7 +3496,7 @@ mov.l %usp,%a0 # fetch user stack pointer mov.l %a0,EXC_A7(%a6) # save on stack for calc_ea() mov.l (%a6),EXC_A6(%a6) - + bsr.l _calc_ea_fout # find the correct ea,update An mov.l %a0,%a1 mov.l %a0,EXC_EA(%a6) # stack correct @@ -3545,7 +3545,7 @@ mov.l LOCAL_SIZE+FP_SCR0_LO(%sp),LOCAL_SIZE+EXC_EA(%sp) add.l &LOCAL_SIZE-0x8,%sp - + bra.l _real_snan ######################################################################### @@ -3553,7 +3553,7 @@ # _fpsp_inex(): 060FPSP entry point for FP Inexact exception. # # # # This handler should be the first code executed upon taking the # -# FP Inexact exception in an operating system. # +# FP Inexact exception in an operating system. # # # # XREF **************************************************************** # # _imem_read_long() - read instruction longword # @@ -3570,7 +3570,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP Inexact exception frame # # - The fsave frame contains the source operand # -# # +# # # OUTPUT ************************************************************** # # - The system stack is unchanged # # - The fsave frame contains the adjusted src op for opclass 0,2 # @@ -3578,10 +3578,10 @@ # ALGORITHM *********************************************************** # # In a system where the FP Inexact exception is enabled, the goal # # is to get to the handler specified at _real_inex(). But, on the 060, # -# for opclass zero and two instruction taking this exception, the # +# for opclass zero and two instruction taking this exception, the # # hardware doesn't store the correct result to the destination FP # -# register as did the '040 and '881/2. This handler must emulate the # -# instruction in order to get this value and then store it to the # +# register as did the '040 and '881/2. This handler must emulate the # +# instruction in order to get this value and then store it to the # # correct register before calling _real_inex(). # # For opclass 3 instructions, the 060 doesn't store the default # # inexact result out to memory or data register file as it should. # @@ -3597,13 +3597,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3615,7 +3615,7 @@ bne.w finex_out # fmove out -# the hardware, for "fabs" and "fneg" w/ a long source format, puts the +# the hardware, for "fabs" and "fneg" w/ a long source format, puts the # longword integer directly into the upper longword of the mantissa along # w/ an exponent value of 0x401e. we convert this to extended precision here. bfextu %d0{&19:&3},%d0 # fetch instr size @@ -3749,7 +3749,7 @@ # INPUT *************************************************************** # # - The system stack contains the FP DZ exception stack. # # - The fsave frame contains the source operand. # -# # +# # # OUTPUT ************************************************************** # # - The system stack contains the FP DZ exception stack. # # - The fsave frame contains the adjusted source operand. # @@ -3760,7 +3760,7 @@ # exception is taken, the input operand in the fsave state frame may # # be incorrect for some cases and need to be adjusted. So, this package # # adjusts the operand using fix_skewed_ops() and then branches to # -# _real_dz(). # +# _real_dz(). # # # ######################################################################### @@ -3771,13 +3771,13 @@ fsave FP_SRC(%a6) # grab the "busy" frame - movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 + movm.l &0x0303,EXC_DREGS(%a6) # save d0-d1/a0-a1 fmovm.l %fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs - fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack + fmovm.x &0xc0,EXC_FPREGS(%a6) # save fp0-fp1 on stack # the FPIAR holds the "current PC" of the faulting instruction mov.l USER_FPIAR(%a6),EXC_EXTWPTR(%a6) - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long # fetch the instruction words @@ -3805,7 +3805,7 @@ ######################################################################### # XDEF **************************************************************** # # _fpsp_fline(): 060FPSP entry point for "Line F emulator" # -# exception when the "reduced" version of the # +# exception when the "reduced" version of the # # FPSP is implemented that does not emulate # # FP unimplemented instructions. # # # @@ -3820,12 +3820,12 @@ # INPUT *************************************************************** # # - The system stack contains a "Line F Emulator" exception # # stack frame. # -# # +# # # OUTPUT ************************************************************** # # - The system stack is unchanged. # # # # ALGORITHM *********************************************************** # -# When a "Line F Emulator" exception occurs in a system where # +# When a "Line F Emulator" exception occurs in a system where # # "FPU Unimplemented" instructions will not be emulated, the exception # # can occur because then FPU is disabled or the instruction is to be # # classifed as "Line F". This module determines which case exists and # @@ -3853,21 +3853,21 @@ # # # INPUT *************************************************************** # # d0 = number of bytes to adjust by # -# # +# # # OUTPUT ************************************************************** # # None # # # # ALGORITHM *********************************************************** # # "Dummy" CALCulate Effective Address: # -# The stacked for FP unimplemented instructions and opclass # +# The stacked for FP unimplemented instructions and opclass # # two packed instructions is correct with the exception of... # # # # 1) -(An) : The register is not updated regardless of size. # -# Also, for extended precision and packed, the # +# Also, for extended precision and packed, the # # stacked value is 8 bytes too big # # 2) (An)+ : The register is not updated. # -# 3) # : The upper longword of the immediate operand is # -# stacked b,w,l and s sizes are completely stacked. # +# 3) # : The upper longword of the immediate operand is # +# stacked b,w,l and s sizes are completely stacked. # # d,x, and p are not. # # # ######################################################################### @@ -3903,8 +3903,8 @@ lea ([USER_FPIAR,%a6],0x4),%a0 # no; return rts -# here, the is stacked correctly. however, we must update the -# address register... +# here, the is stacked correctly. however, we must update the +# address register... dcea_pi: mov.l %a0,%d0 # pass amt to inc by bsr.l inc_areg # inc addr register @@ -3912,7 +3912,7 @@ mov.l EXC_EA(%a6),%a0 # stacked is correct rts -# the is stacked correctly for all but extended and packed which +# the is stacked correctly for all but extended and packed which # the s are 8 bytes too large. # it would make no sense to have a pre-decrement to a7 in supervisor # mode so we don't even worry about this tricky case here : ) @@ -3932,7 +3932,7 @@ ######################################################################### # XDEF **************************************************************** # -# _calc_ea_fout(): calculate correct stacked for extended # +# _calc_ea_fout(): calculate correct stacked for extended # # and packed data opclass 3 operations. # # # # XREF **************************************************************** # @@ -3940,22 +3940,22 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # a0 = return correct effective address # # # # ALGORITHM *********************************************************** # # For opclass 3 extended and packed data operations, the # # stacked for the exception is incorrect for -(an) and (an)+ addressing # -# modes. Also, while we're at it, the index register itself must get # +# modes. Also, while we're at it, the index register itself must get # # updated. # -# So, for -(an), we must subtract 8 off of the stacked value # +# So, for -(an), we must subtract 8 off of the stacked value # # and return that value as the correct and store that value in An. # # For (an)+, the stacked is correct but we must adjust An by +12. # # # ######################################################################### -# This calc_ea is currently used to retrieve the correct +# This calc_ea is currently used to retrieve the correct # for fmove outs of type extended and packed. global _calc_ea_fout _calc_ea_fout: @@ -3976,7 +3976,7 @@ # (An)+ : extended and packed fmove out # : stacked is correct -# : "An" not updated +# : "An" not updated ceaf_pi: mov.w (tbl_ceaf_pi.b,%pc,%d1.w*2),%d1 mov.l EXC_EA(%a6),%a0 @@ -4077,11 +4077,11 @@ swbeg &109 tbl_unsupp: - long fin - tbl_unsupp # 00: fmove - long fint - tbl_unsupp # 01: fint - long tbl_unsupp - tbl_unsupp # 02: fsinh - long fintrz - tbl_unsupp # 03: fintrz - long fsqrt - tbl_unsupp # 04: fsqrt + long fin - tbl_unsupp # 00: fmove + long fint - tbl_unsupp # 01: fint + long tbl_unsupp - tbl_unsupp # 02: fsinh + long fintrz - tbl_unsupp # 03: fintrz + long fsqrt - tbl_unsupp # 04: fsqrt long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp # 06: flognp1 long tbl_unsupp - tbl_unsupp @@ -4101,23 +4101,23 @@ long tbl_unsupp - tbl_unsupp # 15: flog10 long tbl_unsupp - tbl_unsupp # 16: flog2 long tbl_unsupp - tbl_unsupp - long fabs - tbl_unsupp # 18: fabs + long fabs - tbl_unsupp # 18: fabs long tbl_unsupp - tbl_unsupp # 19: fcosh - long fneg - tbl_unsupp # 1a: fneg + long fneg - tbl_unsupp # 1a: fneg long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp # 1c: facos long tbl_unsupp - tbl_unsupp # 1d: fcos long tbl_unsupp - tbl_unsupp # 1e: fgetexp long tbl_unsupp - tbl_unsupp # 1f: fgetman - long fdiv - tbl_unsupp # 20: fdiv + long fdiv - tbl_unsupp # 20: fdiv long tbl_unsupp - tbl_unsupp # 21: fmod - long fadd - tbl_unsupp # 22: fadd - long fmul - tbl_unsupp # 23: fmul - long fsgldiv - tbl_unsupp # 24: fsgldiv + long fadd - tbl_unsupp # 22: fadd + long fmul - tbl_unsupp # 23: fmul + long fsgldiv - tbl_unsupp # 24: fsgldiv long tbl_unsupp - tbl_unsupp # 25: frem long tbl_unsupp - tbl_unsupp # 26: fscale - long fsglmul - tbl_unsupp # 27: fsglmul - long fsub - tbl_unsupp # 28: fsub + long fsglmul - tbl_unsupp # 27: fsglmul + long fsub - tbl_unsupp # 28: fsub long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp @@ -4133,20 +4133,20 @@ long tbl_unsupp - tbl_unsupp # 35: fsincos long tbl_unsupp - tbl_unsupp # 36: fsincos long tbl_unsupp - tbl_unsupp # 37: fsincos - long fcmp - tbl_unsupp # 38: fcmp + long fcmp - tbl_unsupp # 38: fcmp long tbl_unsupp - tbl_unsupp - long ftst - tbl_unsupp # 3a: ftst + long ftst - tbl_unsupp # 3a: ftst long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fsin - tbl_unsupp # 40: fsmove - long fssqrt - tbl_unsupp # 41: fssqrt + long fsin - tbl_unsupp # 40: fsmove + long fssqrt - tbl_unsupp # 41: fssqrt long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long fdin - tbl_unsupp # 44: fdmove - long fdsqrt - tbl_unsupp # 45: fdsqrt + long fdsqrt - tbl_unsupp # 45: fdsqrt long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp @@ -4165,27 +4165,27 @@ long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fsabs - tbl_unsupp # 58: fsabs + long fsabs - tbl_unsupp # 58: fsabs long tbl_unsupp - tbl_unsupp - long fsneg - tbl_unsupp # 5a: fsneg + long fsneg - tbl_unsupp # 5a: fsneg long tbl_unsupp - tbl_unsupp long fdabs - tbl_unsupp # 5c: fdabs long tbl_unsupp - tbl_unsupp - long fdneg - tbl_unsupp # 5e: fdneg + long fdneg - tbl_unsupp # 5e: fdneg long tbl_unsupp - tbl_unsupp long fsdiv - tbl_unsupp # 60: fsdiv long tbl_unsupp - tbl_unsupp long fsadd - tbl_unsupp # 62: fsadd long fsmul - tbl_unsupp # 63: fsmul - long fddiv - tbl_unsupp # 64: fddiv + long fddiv - tbl_unsupp # 64: fddiv long tbl_unsupp - tbl_unsupp long fdadd - tbl_unsupp # 66: fdadd - long fdmul - tbl_unsupp # 67: fdmul + long fdmul - tbl_unsupp # 67: fdmul long fssub - tbl_unsupp # 68: fssub long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp long tbl_unsupp - tbl_unsupp - long fdsub - tbl_unsupp # 6c: fdsub + long fdsub - tbl_unsupp # 6c: fdsub ################################################# # Add this here so non-fp modules can compile. @@ -4208,7 +4208,7 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If instr is "fmovm Dn,-(A7)" from supervisor mode, # # d0 = size of dump # @@ -4230,25 +4230,25 @@ # The data register is determined and its value loaded to get the # # string of FP registers affected. This value is used as an index into # # a lookup table such that we can determine the number of bytes # -# involved. # +# involved. # # If the instruction is "fmovm.x ,Dn", a _mem_read() is used # # to read in all FP values. Again, _mem_read() may fail and require a # -# special exit. # +# special exit. # # If the instruction is "fmovm.x DN,", a _mem_write() is used # # to write all FP values. _mem_write() may also fail. # -# If the instruction is "fmovm.x DN,-(a7)" from supervisor mode, # +# If the instruction is "fmovm.x DN,-(a7)" from supervisor mode, # # then we return the size of the dump and the string to the caller # # so that the move can occur outside of this routine. This special # # case is required so that moves to the system stack are handled # # correctly. # # # # DYNAMIC: # -# fmovm.x dn, # -# fmovm.x , dn # +# fmovm.x dn, # +# fmovm.x , dn # # # # # # 1111 0010 00 || 11@& 1000 0$$$ 0000 # -# # +# # # & = (0): predecrement addressing mode # # (1): postincrement or control addressing mode # # @ = (0): move listed regs from memory to the FPU # @@ -4517,12 +4517,12 @@ byte 0x24,0x30,0x30,0x3c,0x30,0x3c,0x3c,0x48 byte 0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54 byte 0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54 - byte 0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60 + byte 0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60 # # table to convert a pre-decrement bit string into a post-increment # or control bit string. -# ex: 0x00 ==> 0x00 +# ex: 0x00 ==> 0x00 # 0x01 ==> 0x80 # 0x02 ==> 0x40 # . @@ -4604,59 +4604,59 @@ short tbl_fea_mode - tbl_fea_mode short tbl_fea_mode - tbl_fea_mode - short faddr_ind_a0 - tbl_fea_mode - short faddr_ind_a1 - tbl_fea_mode - short faddr_ind_a2 - tbl_fea_mode - short faddr_ind_a3 - tbl_fea_mode - short faddr_ind_a4 - tbl_fea_mode - short faddr_ind_a5 - tbl_fea_mode - short faddr_ind_a6 - tbl_fea_mode - short faddr_ind_a7 - tbl_fea_mode - - short faddr_ind_p_a0 - tbl_fea_mode - short faddr_ind_p_a1 - tbl_fea_mode - short faddr_ind_p_a2 - tbl_fea_mode - short faddr_ind_p_a3 - tbl_fea_mode - short faddr_ind_p_a4 - tbl_fea_mode - short faddr_ind_p_a5 - tbl_fea_mode - short faddr_ind_p_a6 - tbl_fea_mode - short faddr_ind_p_a7 - tbl_fea_mode - - short faddr_ind_m_a0 - tbl_fea_mode - short faddr_ind_m_a1 - tbl_fea_mode - short faddr_ind_m_a2 - tbl_fea_mode - short faddr_ind_m_a3 - tbl_fea_mode - short faddr_ind_m_a4 - tbl_fea_mode - short faddr_ind_m_a5 - tbl_fea_mode - short faddr_ind_m_a6 - tbl_fea_mode - short faddr_ind_m_a7 - tbl_fea_mode - - short faddr_ind_disp_a0 - tbl_fea_mode - short faddr_ind_disp_a1 - tbl_fea_mode - short faddr_ind_disp_a2 - tbl_fea_mode - short faddr_ind_disp_a3 - tbl_fea_mode - short faddr_ind_disp_a4 - tbl_fea_mode - short faddr_ind_disp_a5 - tbl_fea_mode - short faddr_ind_disp_a6 - tbl_fea_mode + short faddr_ind_a0 - tbl_fea_mode + short faddr_ind_a1 - tbl_fea_mode + short faddr_ind_a2 - tbl_fea_mode + short faddr_ind_a3 - tbl_fea_mode + short faddr_ind_a4 - tbl_fea_mode + short faddr_ind_a5 - tbl_fea_mode + short faddr_ind_a6 - tbl_fea_mode + short faddr_ind_a7 - tbl_fea_mode + + short faddr_ind_p_a0 - tbl_fea_mode + short faddr_ind_p_a1 - tbl_fea_mode + short faddr_ind_p_a2 - tbl_fea_mode + short faddr_ind_p_a3 - tbl_fea_mode + short faddr_ind_p_a4 - tbl_fea_mode + short faddr_ind_p_a5 - tbl_fea_mode + short faddr_ind_p_a6 - tbl_fea_mode + short faddr_ind_p_a7 - tbl_fea_mode + + short faddr_ind_m_a0 - tbl_fea_mode + short faddr_ind_m_a1 - tbl_fea_mode + short faddr_ind_m_a2 - tbl_fea_mode + short faddr_ind_m_a3 - tbl_fea_mode + short faddr_ind_m_a4 - tbl_fea_mode + short faddr_ind_m_a5 - tbl_fea_mode + short faddr_ind_m_a6 - tbl_fea_mode + short faddr_ind_m_a7 - tbl_fea_mode + + short faddr_ind_disp_a0 - tbl_fea_mode + short faddr_ind_disp_a1 - tbl_fea_mode + short faddr_ind_disp_a2 - tbl_fea_mode + short faddr_ind_disp_a3 - tbl_fea_mode + short faddr_ind_disp_a4 - tbl_fea_mode + short faddr_ind_disp_a5 - tbl_fea_mode + short faddr_ind_disp_a6 - tbl_fea_mode short faddr_ind_disp_a7 - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - short faddr_ind_ext - tbl_fea_mode - - short fabs_short - tbl_fea_mode - short fabs_long - tbl_fea_mode - short fpc_ind - tbl_fea_mode - short fpc_ind_ext - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode - short tbl_fea_mode - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + short faddr_ind_ext - tbl_fea_mode + + short fabs_short - tbl_fea_mode + short fabs_long - tbl_fea_mode + short fpc_ind - tbl_fea_mode + short fpc_ind_ext - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode + short tbl_fea_mode - tbl_fea_mode ################################### # Address register indirect: (An) # @@ -4952,7 +4952,7 @@ btst &0x8,%d0 bne.w fcalc_mem_ind - + mov.l %d0,L_SCR1(%a6) # hold opword mov.l %d0,%d1 @@ -5048,7 +5048,7 @@ btst &0x8,%d0 # is disp only 8 bits? bne.w fcalc_mem_ind # calc memory indirect - + mov.l %d0,L_SCR1(%a6) # store opword mov.l %d0,%d1 # make extword copy @@ -5125,7 +5125,7 @@ bfextu %d5{&26:&2},%d0 # get bd size # beq.l fmovm_error # if (size == 0) it's reserved - cmpi.b %d0,&0x2 + cmpi.b %d0,&0x2 blt.b fno_bd beq.b fget_word_bd @@ -5147,7 +5147,7 @@ bne.l fcea_iacc # yes ext.l %d0 # sign extend bd - + fchk_ind: add.l %d0,%d3 # base += bd @@ -5156,10 +5156,10 @@ bfextu %d5{&30:&2},%d0 # is od suppressed? beq.w faii_bd - cmpi.b %d0,&0x2 + cmpi.b %d0,&0x2 blt.b fnull_od beq.b fword_od - + mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr addq.l &0x4,EXC_EXTWPTR(%a6) # incr instruction ptr bsr.l _imem_read_long @@ -5167,7 +5167,7 @@ tst.l %d1 # did ifetch fail? bne.l fcea_iacc # yes - bra.b fadd_them + bra.b fadd_them fword_od: mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr @@ -5220,7 +5220,7 @@ rts ######################################################### -fcea_err: +fcea_err: mov.l %d3,%a0 movm.l (%sp)+,&0x003c # restore d2-d5 @@ -5230,7 +5230,7 @@ fcea_iacc: movm.l (%sp)+,&0x003c # restore d2-d5 bra.l iea_iacc - + fmovm_out_err: bsr.l restore mov.w &0x00e1,%d0 @@ -5246,7 +5246,7 @@ ######################################################################### # XDEF **************************************************************** # -# fmovm_ctrl(): emulate fmovm.l of control registers instr # +# fmovm_ctrl(): emulate fmovm.l of control registers instr # # # # XREF **************************************************************** # # _imem_read_long() - read longword from memory # @@ -5254,7 +5254,7 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If _imem_read_long() doesn't fail: # # USER_FPCR(a6) = new FPCR value # @@ -5262,14 +5262,14 @@ # USER_FPIAR(a6) = new FPIAR value # # # # ALGORITHM *********************************************************** # -# Decode the instruction type by looking at the extension word # +# Decode the instruction type by looking at the extension word # # in order to see how many control registers to fetch from memory. # # Fetch them using _imem_read_long(). If this fetch fails, exit through # # the special access error exit handler iea_iacc(). # # # # Instruction word decoding: # # # -# fmovem.l #, {FPIAR&|FPCR&|FPSR} # +# fmovem.l #, {FPIAR&|FPCR&|FPSR} # # # # WORD1 WORD2 # # 1111 0010 00 111100 100$ $$00 0000 0000 # @@ -5290,7 +5290,7 @@ beq.w fctrl_in_6 # yes cmpi.b %d0,&0x94 # fpcr & fpiar ? beq.b fctrl_in_5 # yes - + # fmovem.l #, fpsr/fpiar fctrl_in_3: mov.l EXC_EXTWPTR(%a6),%a0 # fetch instruction addr @@ -5392,14 +5392,14 @@ # INPUT *************************************************************** # # FP_SRC(a6) = fp op1(src) # # FP_DST(a6) = fp op2(dst) # -# # +# # # OUTPUT ************************************************************** # # FP_SRC(a6) = fp op1 scaled(src) # # FP_DST(a6) = fp op2 scaled(dst) # # d0 = scale amount # # # # ALGORITHM *********************************************************** # -# If the DST exponent is > the SRC exponent, set the DST exponent # +# If the DST exponent is > the SRC exponent, set the DST exponent # # equal to 0x3fff and scale the SRC exponent by the value that the # # DST exponent was scaled by. If the SRC exponent is greater or equal, # # do the opposite. Return this scale factor in d0. # @@ -5462,7 +5462,7 @@ andi.w &0x8000,FP_SCR0_EX(%a6) # zero src exponent bset &0x0,1+FP_SCR0_EX(%a6) # set exp = 1 - mov.l (%sp)+,%d0 # return SCALE factor + mov.l (%sp)+,%d0 # return SCALE factor rts # src exp is >= dst exp; scale src to exp = 0x3fff @@ -5498,7 +5498,7 @@ andi.w &0x8000,FP_SCR1_EX(%a6) # zero dst exponent bset &0x0,1+FP_SCR1_EX(%a6) # set exp = 1 - mov.l (%sp)+,%d0 # return SCALE factor + mov.l (%sp)+,%d0 # return SCALE factor rts ########################################################################## @@ -5513,14 +5513,14 @@ # # # INPUT *************************************************************** # # FP_SCR0(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR0(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # -# Set the exponent of the input operand to 0x3fff. Save the value # -# of the difference between the original and new exponent. Then, # +# Set the exponent of the input operand to 0x3fff. Save the value # +# of the difference between the original and new exponent. Then, # # normalize the operand if it was a DENORM. Add this normalization # # value to the previous value. Return the result. # # # @@ -5566,17 +5566,17 @@ # # # INPUT *************************************************************** # # FP_SCR0(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR0(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # # If the input operand is a DENORM, normalize it. # -# If the exponent of the input operand is even, set the exponent # -# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the # +# If the exponent of the input operand is even, set the exponent # +# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the # # exponent of the input operand is off, set the exponent to ox3fff and # -# return a scale factor of "(exp-0x3fff)/2". # +# return a scale factor of "(exp-0x3fff)/2". # # # ######################################################################### @@ -5640,14 +5640,14 @@ # # # INPUT *************************************************************** # # FP_SCR1(a6) = extended precision operand to be scaled # -# # +# # # OUTPUT ************************************************************** # # FP_SCR1(a6) = scaled extended precision operand # # d0 = scale value # # # # ALGORITHM *********************************************************** # -# Set the exponent of the input operand to 0x3fff. Save the value # -# of the difference between the original and new exponent. Then, # +# Set the exponent of the input operand to 0x3fff. Save the value # +# of the difference between the original and new exponent. Then, # # normalize the operand if it was a DENORM. Add this normalization # # value to the previous value. Return the result. # # # @@ -5695,21 +5695,21 @@ # INPUT *************************************************************** # # FP_SRC(a6) = pointer to extended precision src operand # # FP_DST(a6) = pointer to extended precision dst operand # -# # +# # # OUTPUT ************************************************************** # # fp0 = default result # # # # ALGORITHM *********************************************************** # -# If either operand (but not both operands) of an operation is a # +# If either operand (but not both operands) of an operation is a # # nonsignalling NAN, then that NAN is returned as the result. If both # -# operands are nonsignalling NANs, then the destination operand # +# operands are nonsignalling NANs, then the destination operand # # nonsignalling NAN is returned as the result. # -# If either operand to an operation is a signalling NAN (SNAN), # +# If either operand to an operation is a signalling NAN (SNAN), # # then, the SNAN bit is set in the FPSR EXC byte. If the SNAN trap # -# enable bit is set in the FPCR, then the trap is taken and the # +# enable bit is set in the FPCR, then the trap is taken and the # # destination is not modified. If the SNAN trap enable bit is not set, # -# then the SNAN is converted to a nonsignalling NAN (by setting the # -# SNAN bit in the operand to one), and the operation continues as # +# then the SNAN is converted to a nonsignalling NAN (by setting the # +# SNAN bit in the operand to one), and the operation continues as # # described in the preceding paragraph, for nonsignalling NANs. # # Make sure the appropriate FPSR bits are set before exiting. # # # @@ -5748,7 +5748,7 @@ lea FP_DST(%a6), %a0 cmp.b STAG(%a6), &SNAN bne nan_done - or.l &aiop_mask+snan_mask, USER_FPSR(%a6) + or.l &aiop_mask+snan_mask, USER_FPSR(%a6) nan_done: or.l &nan_mask, USER_FPSR(%a6) nan_comp: @@ -5761,14 +5761,14 @@ ######################################################################### # XDEF **************************************************************** # -# res_operr(): return default result during operand error # +# res_operr(): return default result during operand error # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # fp0 = default operand error result # # # @@ -5776,8 +5776,8 @@ # An nonsignalling NAN is returned as the default result when # # an operand error occurs for the following cases: # # # -# Multiply: (Infinity x Zero) # -# Divide : (Zero / Zero) || (Infinity / Infinity) # +# Multiply: (Infinity x Zero) # +# Divide : (Zero / Zero) || (Infinity / Infinity) # # # ######################################################################### @@ -5787,12 +5787,12 @@ fmovm.x nan_return(%pc), &0x80 rts -nan_return: +nan_return: long 0x7fff0000, 0xffffffff, 0xffffffff ######################################################################### # XDEF **************************************************************** # -# _denorm(): denormalize an intermediate result # +# _denorm(): denormalize an intermediate result # # # # XREF **************************************************************** # # None # @@ -5800,7 +5800,7 @@ # INPUT *************************************************************** # # a0 = points to the operand to be denormalized # # (in the internal extended format) # -# # +# # # d0 = rounding precision # # # # OUTPUT ************************************************************** # @@ -5810,10 +5810,10 @@ # d0 = guard,round,sticky # # # # ALGORITHM *********************************************************** # -# According to the exponent underflow threshold for the given # +# According to the exponent underflow threshold for the given # # precision, shift the mantissa bits to the right in order raise the # -# exponent of the operand to the threshold value. While shifting the # -# mantissa bits right, maintain the value of the guard, round, and # +# exponent of the operand to the threshold value. While shifting the # +# mantissa bits right, maintain the value of the guard, round, and # # sticky bits. # # other notes: # # (1) _denorm() is called by the underflow routines # @@ -5833,7 +5833,7 @@ _denorm: # # Load the exponent threshold for the precision selected and check -# to see if (threshold - exponent) is > 65 in which case we can +# to see if (threshold - exponent) is > 65 in which case we can # simply calculate the sticky bit and zero the mantissa. otherwise # we have to call the denormalization routine. # @@ -5872,7 +5872,7 @@ # %d0{31:29} : initial guard,round,sticky # # %d1{15:0} : denormalization threshold # # OUTPUT: # -# %a0 : points to the denormalized operand # +# %a0 : points to the denormalized operand # # %d0{31:29} : final guard,round,sticky # # # @@ -5892,7 +5892,7 @@ # # check to see how much less than the underflow threshold the operand -# exponent is. +# exponent is. # mov.l %d1, %d0 # copy the denorm threshold sub.w FTEMP_EX(%a0), %d1 # d1 = threshold - uns exponent @@ -5907,7 +5907,7 @@ # No normalization necessary # dnrm_no_lp: - mov.l GRS(%a6), %d0 # restore original g,r,s + mov.l GRS(%a6), %d0 # restore original g,r,s rts # @@ -5917,7 +5917,7 @@ # %d1 = "n" = amt to shift # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)-> # \ \ \ \ @@ -5928,7 +5928,7 @@ # \ \ \ \ # \ \ \ \ # \ \ \ \ -# <-(n)-><-(32 - n)-><------(32)-------><------(32)-------> +# <-(n)-><-(32 - n)-><------(32)-------><------(32)-------> # --------------------------------------------------------- # |0.....0| NEW_HI | NEW_FTEMP_LO |grs | # --------------------------------------------------------- @@ -5969,17 +5969,17 @@ # %d1 = "n" = amt to shift # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)-> # \ \ \ # \ \ \ # \ \ ------------------- # \ -------------------- \ -# ------------------- \ \ -# \ \ \ -# \ \ \ -# \ \ \ +# ------------------- \ \ +# \ \ \ +# \ \ \ +# \ \ \ # <-------(32)------><-(n)-><-(32 - n)-><------(32)-------> # --------------------------------------------------------- # |0...............0|0....0| NEW_LO |grs | @@ -6050,17 +6050,17 @@ # case (d1 == 64) # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-------(32)------> -# \ \ -# \ \ -# \ \ -# \ ------------------------------ +# \ \ +# \ \ +# \ \ +# \ ------------------------------ # ------------------------------- \ -# \ \ -# \ \ -# \ \ +# \ \ +# \ \ +# \ \ # <-------(32)------> # --------------------------------------------------------- # |0...............0|0................0|grs | @@ -6078,17 +6078,17 @@ # case (d1 == 65) # # --------------------------------------------------------- -# | FTEMP_HI | FTEMP_LO |grs000.........000| +# | FTEMP_HI | FTEMP_LO |grs000.........000| # --------------------------------------------------------- # <-------(32)------> -# \ \ -# \ \ -# \ \ -# \ ------------------------------ +# \ \ +# \ \ +# \ \ +# \ ------------------------------ # -------------------------------- \ -# \ \ -# \ \ -# \ \ +# \ \ +# \ \ +# \ \ # <-------(31)-----> # --------------------------------------------------------- # |0...............0|0................0|0rs | @@ -6136,7 +6136,7 @@ # None # # # # INPUT *************************************************************** # -# a0 = ptr to input operand in internal extended format # +# a0 = ptr to input operand in internal extended format # # d1(hi) = contains rounding precision: # # ext = $0000xxxx # # sgl = $0004xxxx # @@ -6167,7 +6167,7 @@ # # ext_grs() looks at the rounding precision and sets the appropriate # G,R,S bits. -# If (G,R,S == 0) then result is exact and round is done, else set +# If (G,R,S == 0) then result is exact and round is done, else set # the inex flag in status reg and continue. # bsr.l ext_grs # extract G,R,S @@ -6213,7 +6213,7 @@ # If sign of fp number = 1 (negative), then add 1 to l. # ################################################################# rnd_mnus: - tst.b FTEMP_SGN(%a0) # check for sign + tst.b FTEMP_SGN(%a0) # check for sign bpl.w truncate # if negative then truncate mov.l &0xffffffff, %d0 # force g,r,s to be all f's @@ -6324,7 +6324,7 @@ # # INPUT # d0 = extended precision g,r,s (in d0{31:29}) -# d1 = {PREC,ROUND} +# d1 = {PREC,ROUND} # OUTPUT # d0{31:29} = guard, round, sticky # @@ -6375,7 +6375,7 @@ mov.l &30, %d2 # of the sgl prec. limits lsl.l %d2, %d3 # shift g-r bits to MSB of d3 mov.l FTEMP_HI(%a0), %d2 # get word 2 for s-bit test - and.l &0x0000003f, %d2 # s bit is the or of all other + and.l &0x0000003f, %d2 # s bit is the or of all other bne.b ext_grs_st_stky # bits to the right of g-r tst.l FTEMP_LO(%a0) # test lower mantissa bne.b ext_grs_st_stky # if any are set, set sticky @@ -6385,9 +6385,9 @@ # # dbl: -# 96 64 32 11 0 +# 96 64 32 11 0 # ----------------------------------------------------- -# | EXP |XXXXXXX| | |xx |grs| +# | EXP |XXXXXXX| | |xx |grs| # ----------------------------------------------------- # nn\ / # ee ------- @@ -6400,7 +6400,7 @@ mov.l &30, %d2 # of the dbl prec. limits lsl.l %d2, %d3 # shift g-r bits to the MSB of d3 mov.l FTEMP_LO(%a0), %d2 # get lower mantissa for s-bit test - and.l &0x000001ff, %d2 # s bit is the or-ing of all + and.l &0x000001ff, %d2 # s bit is the or-ing of all bne.b ext_grs_st_stky # other bits to the right of g-r tst.l %d0 # test word original g,r,s bne.b ext_grs_st_stky # if any are set, set sticky @@ -6430,7 +6430,7 @@ # a0 = pointer fp extended precision operand to normalize # # # # OUTPUT ************************************************************** # -# d0 = number of bit positions the mantissa was shifted # +# d0 = number of bit positions the mantissa was shifted # # a0 = the input operand's mantissa is normalized; the exponent # # is unchanged. # # # @@ -6457,7 +6457,7 @@ mov.l %d1, FTEMP_LO(%a0) # store new lo(man) mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -6472,7 +6472,7 @@ clr.l FTEMP_LO(%a0) # lo(man) is now zero mov.l %d2, %d0 # return shift amount - + mov.l (%sp)+, %d3 # restore temp regs mov.l (%sp)+, %d2 @@ -6577,27 +6577,27 @@ # whole mantissa is zero so this UNNORM is actually a zero # unnorm_zero: - and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero + and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero mov.b &ZERO, %d0 # fix optype tag rts ######################################################################### # XDEF **************************************************************** # -# set_tag_x(): return the optype of the input ext fp number # +# set_tag_x(): return the optype of the input ext fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to extended precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # If it's an unnormalized zero, alter the operand and force it # # to be a normal zero. # @@ -6664,20 +6664,20 @@ ######################################################################### # XDEF **************************************************************** # -# set_tag_d(): return the optype of the input dbl fp number # +# set_tag_d(): return the optype of the input dbl fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = points to double precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # # ######################################################################### @@ -6727,20 +6727,20 @@ ######################################################################### # XDEF **************************************************************** # -# set_tag_s(): return the optype of the input sgl fp number # +# set_tag_s(): return the optype of the input sgl fp number # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to single precision operand # -# # +# # # OUTPUT ************************************************************** # # d0 = value of type tag # -# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # +# one of: NORM, INF, QNAN, SNAN, DENORM, ZERO # # # # ALGORITHM *********************************************************** # -# Simply test the exponent, j-bit, and mantissa values to # +# Simply test the exponent, j-bit, and mantissa values to # # determine the type of operand. # # # ######################################################################### @@ -6786,15 +6786,15 @@ ######################################################################### # XDEF **************************************************************** # -# unf_res(): routine to produce default underflow result of a # -# scaled extended precision number; this is used by # +# unf_res(): routine to produce default underflow result of a # +# scaled extended precision number; this is used by # # fadd/fdiv/fmul/etc. emulation routines. # -# unf_res4(): same as above but for fsglmul/fsgldiv which use # +# unf_res4(): same as above but for fsglmul/fsgldiv which use # # single round prec and extended prec mode. # # # # XREF **************************************************************** # # _denorm() - denormalize according to scale factor # -# _round() - round denormalized number according to rnd prec # +# _round() - round denormalized number according to rnd prec # # # # INPUT *************************************************************** # # a0 = pointer to extended precison operand # @@ -6806,15 +6806,15 @@ # d0.b = result FPSR_cc which caller may or may not want to save # # # # ALGORITHM *********************************************************** # -# Convert the input operand to "internal format" which means the # +# Convert the input operand to "internal format" which means the # # exponent is extended to 16 bits and the sign is stored in the unused # # portion of the extended precison operand. Denormalize the number # -# according to the scale factor passed in d0. Then, round the # +# according to the scale factor passed in d0. Then, round the # # denormalized result. # -# Set the FPSR_exc bits as appropriate but return the cc bits in # +# Set the FPSR_exc bits as appropriate but return the cc bits in # # d0 in case the caller doesn't want to save them (as is the case for # # fmove out). # -# unf_res4() for fsglmul/fsgldiv forces the denorm to extended # +# unf_res4() for fsglmul/fsgldiv forces the denorm to extended # # precision and the rounding mode to single. # # # ######################################################################### @@ -6952,23 +6952,23 @@ # none # # # # INPUT *************************************************************** # -# d1.b = '-1' => (-); '0' => (+) # +# d1.b = '-1' => (-); '0' => (+) # # ovf_res(): # -# d0 = rnd mode/prec # +# d0 = rnd mode/prec # # ovf_res2(): # -# hi(d0) = rnd prec # +# hi(d0) = rnd prec # # lo(d0) = rnd mode # # # # OUTPUT ************************************************************** # -# a0 = points to extended precision result # -# d0.b = condition code bits # +# a0 = points to extended precision result # +# d0.b = condition code bits # # # # ALGORITHM *********************************************************** # # The default overflow result can be determined by the sign of # # the result and the rounding mode/prec in effect. These bits are # -# concatenated together to create an index into the default result # +# concatenated together to create an index into the default result # # table. A pointer to the correct result is returned in a0. The # -# resulting condition codes are returned in d0 in case the caller # +# resulting condition codes are returned in d0 in case the caller # # doesn't want FPSR_cc altered (as is the case for fmove out). # # # ######################################################################### @@ -6998,7 +6998,7 @@ ovf_res_load: mov.b (tbl_ovfl_cc.b,%pc,%d0.w*1), %d0 # fetch result ccodes lea (tbl_ovfl_result.b,%pc,%d1.w*8), %a0 # return result ptr - + rts tbl_ovfl_cc: @@ -7048,7 +7048,7 @@ ######################################################################### # XDEF **************************************************************** # -# fout(): move from fp register to memory or data register # +# fout(): move from fp register to memory or data register # # # # XREF **************************************************************** # # _round() - needed to create EXOP for sgl/dbl precision # @@ -7068,7 +7068,7 @@ # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # # d0 = round prec,mode # -# # +# # # OUTPUT ************************************************************** # # fp0 : intermediate underflow or overflow result if # # OVFL/UNFL occurred for a sgl or dbl operand # @@ -7087,9 +7087,9 @@ # w/ the address index register as appropriate w/ _calc_ea_fout(). If # # the source is a denorm and if underflow is enabled, an EXOP must be # # created. # -# For packed, the k-factor must be fetched from the instruction # -# word or a data register. The must be fixed as w/ extended # -# precision. Then, bindec() is called to create the appropriate # +# For packed, the k-factor must be fetched from the instruction # +# word or a data register. The must be fixed as w/ extended # +# precision. Then, bindec() is called to create the appropriate # # packed result. # # If at any time an access error is flagged by one of the move- # # to-memory routines, then a special exit must be made so that the # @@ -7205,7 +7205,7 @@ ori.l &0x00800000,%d1 # make smallest sgl fmov.s %d1,%fp0 bra.b fout_word_norm - + ################################################################# # fmove.l out ################################################### ################################################################# @@ -7279,7 +7279,7 @@ mov.l &0xc,%d0 # pass: opsize is 12 bytes # we must not yet write the extended precision data to the stack -# in the pre-decrement case from supervisor mode or else we'll corrupt +# in the pre-decrement case from supervisor mode or else we'll corrupt # the stack frame. so, leave it in FP_SRC for now and deal with it later... cmpi.b SPCOND_FLG(%a6),&mda7_flg beq.b fout_ext_a7 @@ -7366,7 +7366,7 @@ fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d1 # save FPSR - or.w %d1,2+USER_FPSR(%a6) # set possible inex2/ainex + or.w %d1,2+USER_FPSR(%a6) # set possible inex2/ainex fout_sgl_exg_write: mov.b 1+EXC_OPWORD(%a6),%d1 # extract dst mode @@ -7407,7 +7407,7 @@ lea FP_SCR0(%a6),%a0 bsr.l norm # normalize the DENORM - + fout_sgl_unfl_cont: lea FP_SCR0(%a6),%a0 # pass: ptr to operand mov.l L_SCR3(%a6),%d1 # pass: rnd prec,mode @@ -7458,7 +7458,7 @@ # call ovf_res() w/ sgl prec and the correct rnd mode to create the default # overflow result. DON'T save the returned ccodes from ovf_res() since -# fmove out doesn't alter them. +# fmove out doesn't alter them. tst.b SRC_EX(%a0) # is operand negative? smi %d1 # set if so mov.l L_SCR3(%a6),%d0 # pass: sgl prec,rnd mode @@ -7513,7 +7513,7 @@ fabs.x %fp0 # need absolute value fcmp.b %fp0,&0x2 # did exponent increase? - fblt.w fout_sgl_exg # no; go finish NORM + fblt.w fout_sgl_exg # no; go finish NORM bra.w fout_sgl_ovfl # yes; go handle overflow ################ @@ -7604,7 +7604,7 @@ fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d0 # save FPSR - or.w %d0,2+USER_FPSR(%a6) # set possible inex2/ainex + or.w %d0,2+USER_FPSR(%a6) # set possible inex2/ainex mov.l EXC_EA(%a6),%a1 # pass: dst addr lea L_SCR1(%a6),%a0 # pass: src addr @@ -7614,7 +7614,7 @@ tst.l %d1 # did dstore fail? bne.l facc_out_d # yes - rts # no; so we're finished + rts # no; so we're finished # # here, we know that the operand would UNFL if moved out to double prec, @@ -7636,7 +7636,7 @@ lea FP_SCR0(%a6),%a0 bsr.l norm # normalize the DENORM - + fout_dbl_unfl_cont: lea FP_SCR0(%a6),%a0 # pass: ptr to operand mov.l L_SCR3(%a6),%d1 # pass: rnd prec,mode @@ -7679,7 +7679,7 @@ # call ovf_res() w/ dbl prec and the correct rnd mode to create the default # overflow result. DON'T save the returned ccodes from ovf_res() since -# fmove out doesn't alter them. +# fmove out doesn't alter them. tst.b SRC_EX(%a0) # is operand negative? smi %d1 # set if so mov.l L_SCR3(%a6),%d0 # pass: dbl prec,rnd mode @@ -7724,19 +7724,19 @@ fabs.x %fp0 # need absolute value fcmp.b %fp0,&0x2 # did exponent increase? - fblt.w fout_dbl_exg # no; go finish NORM + fblt.w fout_dbl_exg # no; go finish NORM bra.w fout_dbl_ovfl # yes; go handle overflow ######################################################################### # XDEF **************************************************************** # -# dst_dbl(): create double precision value from extended prec. # +# dst_dbl(): create double precision value from extended prec. # # # # XREF **************************************************************** # # None # # # # INPUT *************************************************************** # # a0 = pointer to source operand in extended precision # -# # +# # # OUTPUT ************************************************************** # # d0 = hi(double precision result) # # d1 = lo(double precision result) # @@ -7750,18 +7750,18 @@ # get rid of ext integer bit # # dbl_mant = ext_mant{62:12} # # # -# --------------- --------------- --------------- # +# --------------- --------------- --------------- # # extended -> |s| exp | |1| ms mant | | ls mant | # -# --------------- --------------- --------------- # -# 95 64 63 62 32 31 11 0 # +# --------------- --------------- --------------- # +# 95 64 63 62 32 31 11 0 # # | | # # | | # # | | # -# v v # -# --------------- --------------- # -# double -> |s|exp| mant | | mant | # -# --------------- --------------- # -# 63 51 32 31 0 # +# v v # +# --------------- --------------- # +# double -> |s|exp| mant | | mant | # +# --------------- --------------- # +# 63 51 32 31 0 # # # ######################################################################### @@ -7797,13 +7797,13 @@ ######################################################################### # XDEF **************************************************************** # -# dst_sgl(): create single precision value from extended prec # +# dst_sgl(): create single precision value from extended prec # # # # XREF **************************************************************** # # # # INPUT *************************************************************** # # a0 = pointer to source operand in extended precision # -# # +# # # OUTPUT ************************************************************** # # d0 = single precision result # # # @@ -7815,18 +7815,18 @@ # get rid of ext integer bit # # sgl_mant = ext_mant{62:12} # # # -# --------------- --------------- --------------- # +# --------------- --------------- --------------- # # extended -> |s| exp | |1| ms mant | | ls mant | # -# --------------- --------------- --------------- # -# 95 64 63 62 40 32 31 12 0 # +# --------------- --------------- --------------- # +# 95 64 63 62 40 32 31 12 0 # # | | # # | | # # | | # -# v v # -# --------------- # -# single -> |s|exp| mant | # -# --------------- # -# 31 22 0 # +# v v # +# --------------- # +# single -> |s|exp| mant | # +# --------------- # +# 31 22 0 # # # ######################################################################### @@ -7899,7 +7899,7 @@ # add the extra condition that only if the k-factor was zero, too, should # we zero the exponent tst.l %d0 - bne.b fout_pack_set + bne.b fout_pack_set # "mantissa" is all zero which means that the answer is zero. but, the '040 # algorithm allows the exponent to be non-zero. the 881/2 do not. therefore, # if the mantissa is zero, I will zero the exponent, too. @@ -7951,7 +7951,7 @@ ######################################################################### # XDEF **************************************************************** # -# fmul(): emulates the fmul instruction # +# fmul(): emulates the fmul instruction # # fsmul(): emulates the fsmul instruction # # fdmul(): emulates the fdmul instruction # # # @@ -7960,8 +7960,8 @@ # scale_to_zero_dst() - scale dst exponent to zero # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -7979,12 +7979,12 @@ # instruction won't cause an exception. Use the regular fmul to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### - align 0x10 + align 0x10 tbl_fmul_ovfl: long 0x3fff - 0x7ffe # ext_max long 0x3fff - 0x407e # sgl_max @@ -8045,7 +8045,7 @@ # # NORMAL: # - the result of the multiply operation will neither overflow nor underflow. -# - do the multiply to the proper precision and rounding mode. +# - do the multiply to the proper precision and rounding mode. # - scale the result exponent using the scale factor. if both operands were # normalized then we really don't need to go through this scaling. but for now, # this will do. @@ -8056,7 +8056,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -8096,7 +8096,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -8175,7 +8175,7 @@ fmov.l &0x0,%fpsr # clear FPSR fmul.x FP_SCR0(%a6),%fp0 # execute multiply - + fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -8184,7 +8184,7 @@ fabs.x %fp0,%fp1 # make a copy of result fcmp.b %fp1,&0x2 # is |result| >= 2.b? fbge.w fmul_ovfl_tst # yes; overflow has occurred - + # no, it didn't overflow; we have correct result bra.w fmul_normal_exit @@ -8201,7 +8201,7 @@ # of this operation then has its exponent scaled by -0x6000 to create the # exceptional operand. # -fmul_unfl: +fmul_unfl: bset &unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit # for fun, let's use only extended precision, round to zero. then, let @@ -8234,7 +8234,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fmul_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -8250,7 +8250,7 @@ fmul_unfl_ena_cont: fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp1 # execute multiply + fmul.x FP_SCR0(%a6),%fp1 # execute multiply fmov.l &0x0,%fpcr # clear FPCR @@ -8285,7 +8285,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp0 # execute multiply + fmul.x FP_SCR0(%a6),%fp0 # execute multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -8309,11 +8309,11 @@ mov.l L_SCR3(%a6),%d1 andi.b &0xc0,%d1 # keep rnd prec ori.b &rz_mode*0x10,%d1 # insert RZ - + fmov.l %d1,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fmul.x FP_SCR0(%a6),%fp1 # execute multiply + fmul.x FP_SCR0(%a6),%fp1 # execute multiply fmov.l &0x0,%fpcr # clear FPCR fabs.x %fp1 # make absolute value @@ -8455,22 +8455,22 @@ # norm() - normalize mantissa for EXOP on denorm # # scale_to_zero_src() - scale src exponent to zero # # ovf_res() - return default overflow result # -# unf_res() - return default underflow result # +# unf_res() - return default underflow result # # res_qnan_1op() - return QNAN result # # res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # # d0 = round prec/mode # -# # +# # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # -# Norms can be emulated w/ a regular fmove instruction. For # +# Norms can be emulated w/ a regular fmove instruction. For # # sgl/dbl, must scale exponent and perform an "fmove". Check to see # # if the result would have overflowed/underflowed. If so, use unf_res() # # or ovf_res() to return the default result. Also return EXOP if # @@ -8496,7 +8496,7 @@ mov.b STAG(%a6),%d1 # fetch src optype tag bne.w fin_not_norm # optimize on non-norm input - + # # FP MOVE IN: NORMs and DENORMs ONLY! # @@ -8557,9 +8557,9 @@ # # operand is to be rounded to single or double precision -# +# fin_not_ext: - cmpi.b %d0,&s_mode*0x10 # separate sgl/dbl prec + cmpi.b %d0,&s_mode*0x10 # separate sgl/dbl prec bne.b fin_dbl # @@ -8643,10 +8643,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z' fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow or inexact is enabled. +# operand will underflow AND underflow or inexact is enabled. # therefore, we must return the result rounded to extended precision. # fin_sd_unfl_ena: @@ -8768,7 +8768,7 @@ ######################################################################### # XDEF **************************************************************** # -# fdiv(): emulates the fdiv instruction # +# fdiv(): emulates the fdiv instruction # # fsdiv(): emulates the fsdiv instruction # # fddiv(): emulates the fddiv instruction # # # @@ -8777,8 +8777,8 @@ # scale_to_zero_dst() - scale dst exponent to zero # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -8796,7 +8796,7 @@ # instruction won't cause an exception. Use the regular fdiv to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -8833,7 +8833,7 @@ or.b STAG(%a6),%d1 # combine src tags bne.w fdiv_not_norm # optimize on non-norm input - + # # DIVIDE: NORMs and DENORMs ONLY! # @@ -8899,7 +8899,7 @@ fdiv_no_ovfl: mov.l (%sp)+,%d0 # restore scale factor bra.b fdiv_normal_exit - + fdiv_may_ovfl: mov.l %d0,-(%sp) # save scale factor @@ -8932,7 +8932,7 @@ bne.b fdiv_ovfl_ena # yes fdiv_ovfl_dis: - btst &neg_bit,FPSR_CC(%a6) # is result negative? + btst &neg_bit,FPSR_CC(%a6) # is result negative? sne %d1 # set sign param accordingly mov.l L_SCR3(%a6),%d0 # pass prec:rnd bsr.l ovf_res # calculate default result @@ -9004,7 +9004,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fdiv_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -9068,8 +9068,8 @@ # # we still don't know if underflow occurred. result is ~ equal to 1. but, # we don't know if the result was an underflow that rounded up to a 1 -# or a normalized number that rounded down to a 1. so, redo the entire -# operation using RZ as the rounding mode to see what the pre-rounded +# or a normalized number that rounded down to a 1. so, redo the entire +# operation using RZ as the rounding mode to see what the pre-rounded # result is. this case should be relatively rare. # fmovm.x FP_SCR1(%a6),&0x40 # load dst op into fp1 @@ -9196,8 +9196,8 @@ rts # -# The destination was an INF w/ an In Range or ZERO source, the result is -# an INF w/ the proper sign. +# The destination was an INF w/ an In Range or ZERO source, the result is +# an INF w/ the proper sign. # The 68881/882 returns the destination INF w/ the new sign(if the j-bit of the # dst INF is set, then then j-bit of the result INF is also set). # @@ -9227,11 +9227,11 @@ # fdneg(): emulates the fdneg instruction # # # # XREF **************************************************************** # -# norm() - normalize a denorm to provide EXOP # +# norm() - normalize a denorm to provide EXOP # # scale_to_zero_src() - scale sgl/dbl source exponent # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # -# res_qnan_1op() - return QNAN result # +# res_qnan_1op() - return QNAN result # # res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # @@ -9269,7 +9269,7 @@ mov.l %d0,L_SCR3(%a6) # store rnd info mov.b STAG(%a6),%d1 bne.w fneg_not_norm # optimize on non-norm input - + # # NEGATE SIGN : norms and denorms ONLY! # @@ -9328,7 +9328,7 @@ neg.w %d0 # new exponent = -(shft val) addi.w &0x6000,%d0 # add new bias to exponent mov.w FP_SCR0_EX(%a6),%d1 # fetch old sign,exp - andi.w &0x8000,%d1 # keep old sign + andi.w &0x8000,%d1 # keep old sign andi.w &0x7fff,%d0 # clear sign position or.w %d1,%d0 # concat old sign, new exponent mov.w %d0,FP_SCR0_EX(%a6) # insert new exponent @@ -9407,7 +9407,7 @@ fneg_sd_unfl: bset &unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit - eori.b &0x80,FP_SCR0_EX(%a6) # negate sign + eori.b &0x80,FP_SCR0_EX(%a6) # negate sign bpl.b fneg_sd_unfl_tst bset &neg_bit,FPSR_CC(%a6) # set 'N' ccode bit @@ -9423,10 +9423,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z' fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fneg_sd_unfl_ena: @@ -9548,19 +9548,19 @@ ######################################################################### # XDEF **************************************************************** # -# ftst(): emulates the ftest instruction # +# ftst(): emulates the ftest instruction # # # # XREF **************************************************************** # -# res{s,q}nan_1op() - set NAN result for monadic instruction # +# res{s,q}nan_1op() - set NAN result for monadic instruction # # # # INPUT *************************************************************** # -# a0 = pointer to extended precision source operand # +# a0 = pointer to extended precision source operand # # # # OUTPUT ************************************************************** # # none # # # # ALGORITHM *********************************************************** # -# Check the source operand tag (STAG) and set the FPCR according # +# Check the source operand tag (STAG) and set the FPCR according # # to the operand type and sign. # # # ######################################################################### @@ -9569,7 +9569,7 @@ ftst: mov.b STAG(%a6),%d1 bne.b ftst_not_norm # optimize on non-norm input - + # # Norm: # @@ -9617,7 +9617,7 @@ ftst_inf_m: mov.b &inf_bmask+neg_bmask,FPSR_CC(%a6) # set 'I','N' ccode bits rts - + # # Zero: # @@ -9646,13 +9646,13 @@ # fp0 = result # # # # ALGORITHM *********************************************************** # -# Separate according to operand type. Unnorms don't pass through # -# here. For norms, load the rounding mode/prec, execute a "fint", then # +# Separate according to operand type. Unnorms don't pass through # +# here. For norms, load the rounding mode/prec, execute a "fint", then # # store the resulting FPSR bits. # -# For denorms, force the j-bit to a one and do the same as for # -# norms. Denorms are so low that the answer will either be a zero or a # +# For denorms, force the j-bit to a one and do the same as for # +# norms. Denorms are so low that the answer will either be a zero or a # # one. # -# For zeroes/infs/NANs, return the same while setting the FPSR # +# For zeroes/infs/NANs, return the same while setting the FPSR # # as appropriate. # # # ######################################################################### @@ -9661,7 +9661,7 @@ fint: mov.b STAG(%a6),%d1 bne.b fint_not_norm # optimize on non-norm input - + # # Norm: # @@ -9671,7 +9671,7 @@ fmov.l %d0,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fint.x SRC(%a0),%fp0 # execute fint + fint.x SRC(%a0),%fp0 # execute fint fmov.l &0x0,%fpcr # clear FPCR fmov.l %fpsr,%d0 # save FPSR @@ -9749,16 +9749,16 @@ # d0 = round precision/mode # # # # OUTPUT ************************************************************** # -# fp0 = result # +# fp0 = result # # # # ALGORITHM *********************************************************** # # Separate according to operand type. Unnorms don't pass through # -# here. For norms, load the rounding mode/prec, execute a "fintrz", # +# here. For norms, load the rounding mode/prec, execute a "fintrz", # # then store the resulting FPSR bits. # -# For denorms, force the j-bit to a one and do the same as for # +# For denorms, force the j-bit to a one and do the same as for # # norms. Denorms are so low that the answer will either be a zero or a # # one. # -# For zeroes/infs/NANs, return the same while setting the FPSR # +# For zeroes/infs/NANs, return the same while setting the FPSR # # as appropriate. # # # ######################################################################### @@ -9767,7 +9767,7 @@ fintrz: mov.b STAG(%a6),%d1 bne.b fintrz_not_norm # optimize on non-norm input - + # # Norm: # @@ -9862,17 +9862,17 @@ # # # ALGORITHM *********************************************************** # # Handle NANs, infinities, and zeroes as special cases. Divide # -# norms into extended, single, and double precision. # -# Simply clear sign for extended precision norm. Ext prec denorm # +# norms into extended, single, and double precision. # +# Simply clear sign for extended precision norm. Ext prec denorm # # gets an EXOP created for it since it's an underflow. # # Double and single precision can overflow and underflow. First, # # scale the operand such that the exponent is zero. Perform an "fabs" # -# using the correct rnd mode/prec. Check to see if the original # +# using the correct rnd mode/prec. Check to see if the original # # exponent would take an exception. If so, use unf_res() or ovf_res() # # to calculate the default result. Also, create the EXOP for the # -# exceptional case. If no exception should occur, insert the correct # +# exceptional case. If no exception should occur, insert the correct # # result exponent and return. # -# Unnorms don't pass through here. # +# Unnorms don't pass through here. # # # ######################################################################### @@ -9892,7 +9892,7 @@ mov.l %d0,L_SCR3(%a6) # store rnd info mov.b STAG(%a6),%d1 bne.w fabs_not_norm # optimize on non-norm input - + # # ABSOLUTE VALUE: norms and denorms ONLY! # @@ -10038,10 +10038,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fabs_sd_unfl_ena: @@ -10163,10 +10163,10 @@ ######################################################################### # XDEF **************************************************************** # -# fcmp(): fp compare op routine # +# fcmp(): fp compare op routine # # # # XREF **************************************************************** # -# res_qnan() - return QNAN result # +# res_qnan() - return QNAN result # # res_snan() - return SNAN result # # # # INPUT *************************************************************** # @@ -10178,7 +10178,7 @@ # None # # # # ALGORITHM *********************************************************** # -# Handle NANs and denorms as special cases. For everything else, # +# Handle NANs and denorms as special cases. For everything else, # # just use the actual fcmp instruction to produce the correct condition # # codes. # # # @@ -10191,14 +10191,14 @@ lsl.b &0x3,%d1 or.b STAG(%a6),%d1 bne.b fcmp_not_norm # optimize on non-norm input - + # # COMPARE FP OPs : NORMs, ZEROs, INFs, and "corrected" DENORMs # fcmp_norm: fmovm.x DST(%a1),&0x80 # load dst op - fcmp.x %fp0,SRC(%a0) # do compare + fcmp.x %fp0,SRC(%a0) # do compare fmov.l %fpsr,%d0 # save FPSR rol.l &0x8,%d0 # extract ccode bits @@ -10219,7 +10219,7 @@ short fcmp_norm - tbl_fcmp_op # NORM - ZERO short fcmp_norm - tbl_fcmp_op # NORM - INF short fcmp_res_qnan - tbl_fcmp_op # NORM - QNAN - short fcmp_nrm_dnrm - tbl_fcmp_op # NORM - DENORM + short fcmp_nrm_dnrm - tbl_fcmp_op # NORM - DENORM short fcmp_res_snan - tbl_fcmp_op # NORM - SNAN short tbl_fcmp_op - tbl_fcmp_op # short tbl_fcmp_op - tbl_fcmp_op # @@ -10281,8 +10281,8 @@ rts # -# DENORMs are a little more difficult. -# If you have a 2 DENORMs, then you can just force the j-bit to a one +# DENORMs are a little more difficult. +# If you have a 2 DENORMs, then you can just force the j-bit to a one # and use the fcmp_norm routine. # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one # and use the fcmp_norm routine. @@ -10323,7 +10323,7 @@ mov.l SRC_LO(%a0),FP_SCR0_LO(%a6) lea FP_SCR1(%a6),%a1 lea FP_SCR0(%a6),%a0 - bra.w fcmp_norm + bra.w fcmp_norm fcmp_nrm_dnrm: mov.b SRC_EX(%a0),%d0 # determine if like signs @@ -10355,15 +10355,15 @@ ######################################################################### # XDEF **************************************************************** # -# fsglmul(): emulates the fsglmul instruction # +# fsglmul(): emulates the fsglmul instruction # # # # XREF **************************************************************** # # scale_to_zero_src() - scale src exponent to zero # # scale_to_zero_dst() - scale dst exponent to zero # # unf_res4() - return default underflow result for sglop # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -10381,7 +10381,7 @@ # instruction won't cause an exception. Use the regular fsglmul to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -10413,11 +10413,11 @@ add.l (%sp)+,%d0 # SCALE_FACTOR = scale1 + scale2 - cmpi.l %d0,&0x3fff-0x7ffe # would result ovfl? + cmpi.l %d0,&0x3fff-0x7ffe # would result ovfl? beq.w fsglmul_may_ovfl # result may rnd to overflow blt.w fsglmul_ovfl # result will overflow - cmpi.l %d0,&0x3fff+0x0001 # would result unfl? + cmpi.l %d0,&0x3fff+0x0001 # would result unfl? beq.w fsglmul_may_unfl # result may rnd to no unfl bgt.w fsglmul_unfl # result will underflow @@ -10504,7 +10504,7 @@ fmov.l &0x0,%fpsr # clear FPSR fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply - + fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -10513,7 +10513,7 @@ fabs.x %fp0,%fp1 # make a copy of result fcmp.b %fp1,&0x2 # is |result| >= 2.b? fbge.w fsglmul_ovfl_tst # yes; overflow has occurred - + # no, it didn't overflow; we have correct result bra.w fsglmul_normal_exit @@ -10547,7 +10547,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fsglmul_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -10555,7 +10555,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply fmov.l &0x0,%fpcr # clear FPCR @@ -10580,7 +10580,7 @@ fmov.l L_SCR3(%a6),%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp0 # execute sgl multiply fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -10604,11 +10604,11 @@ mov.l L_SCR3(%a6),%d1 andi.b &0xc0,%d1 # keep rnd prec ori.b &rz_mode*0x10,%d1 # insert RZ - + fmov.l %d1,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply + fsglmul.x FP_SCR0(%a6),%fp1 # execute sgl multiply fmov.l &0x0,%fpcr # clear FPCR fabs.x %fp1 # make absolute value @@ -10696,15 +10696,15 @@ ######################################################################### # XDEF **************************************************************** # -# fsgldiv(): emulates the fsgldiv instruction # +# fsgldiv(): emulates the fsgldiv instruction # # # # XREF **************************************************************** # # scale_to_zero_src() - scale src exponent to zero # # scale_to_zero_dst() - scale dst exponent to zero # # unf_res4() - return default underflow result for sglop # # ovf_res() - return default overflow result # -# res_qnan() - return QNAN result # -# res_snan() - return SNAN result # +# res_qnan() - return QNAN result # +# res_snan() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -10722,7 +10722,7 @@ # instruction won't cause an exception. Use the regular fsgldiv to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -10737,7 +10737,7 @@ or.b STAG(%a6),%d1 # combine src tags bne.w fsgldiv_not_norm # optimize on non-norm input - + # # DIVIDE: NORMs and DENORMs ONLY! # @@ -10764,7 +10764,7 @@ cmpi.l %d0,&0x3fff-0x7ffe ble.w fsgldiv_may_ovfl - cmpi.l %d0,&0x3fff-0x0000 # will result underflow? + cmpi.l %d0,&0x3fff-0x0000 # will result underflow? beq.w fsgldiv_may_unfl # maybe bgt.w fsgldiv_unfl # yes; go handle underflow @@ -10824,7 +10824,7 @@ bne.b fsgldiv_ovfl_ena # yes fsgldiv_ovfl_dis: - btst &neg_bit,FPSR_CC(%a6) # is result negative + btst &neg_bit,FPSR_CC(%a6) # is result negative sne %d1 # set sign param accordingly mov.l L_SCR3(%a6),%d0 # pass prec:rnd andi.b &0x30,%d0 # kill precision @@ -10880,7 +10880,7 @@ rts # -# UNFL is enabled. +# UNFL is enabled. # fsgldiv_unfl_ena: fmovm.x FP_SCR1(%a6),&0x40 # load dst op @@ -10931,8 +10931,8 @@ # # we still don't know if underflow occurred. result is ~ equal to 1. but, # we don't know if the result was an underflow that rounded up to a 1 -# or a normalized number that rounded down to a 1. so, redo the entire -# operation using RZ as the rounding mode to see what the pre-rounded +# or a normalized number that rounded down to a 1. so, redo the entire +# operation using RZ as the rounding mode to see what the pre-rounded # result is. this case should be relatively rare. # fmovm.x FP_SCR1(%a6),&0x40 # load dst op into %fp1 @@ -11036,25 +11036,25 @@ # fdadd(): emulates the fdadd instruction # # # # XREF **************************************************************** # -# addsub_scaler2() - scale the operands so they won't take exc # +# addsub_scaler2() - scale the operands so they won't take exc # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # # res_qnan() - set QNAN result # -# res_snan() - set SNAN result # +# res_snan() - set SNAN result # # res_operr() - set OPERR result # # scale_to_zero_src() - set src operand exponent equal to zero # # scale_to_zero_dst() - set dst operand exponent equal to zero # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# a1 = pointer to extended precision destination operand # +# a1 = pointer to extended precision destination operand # # # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # # Do addition after scaling exponents such that exception won't # # occur. Then, check result exponent to see if exception would have # @@ -11268,7 +11268,7 @@ # # result is equal to the smallest normalized number in the selected precision -# if the precision is extended, this result could not have come from an +# if the precision is extended, this result could not have come from an # underflow that rounded up. # fadd_may_unfl: @@ -11290,7 +11290,7 @@ # ok, so now the result has a exponent equal to the smallest normalized # exponent for the selected precision. also, the mantissa is equal to # 0x8000000000000000 and this mantissa is the result of rounding non-zero -# g,r,s. +# g,r,s. # now, we must determine whether the pre-rounded result was an underflow # rounded "up" or a normalized number rounded "down". # so, we do this be re-executing the add using RZ as the rounding mode and @@ -11401,7 +11401,7 @@ fmov.s &0x00000000,%fp0 # return +ZERO mov.b &z_bmask,FPSR_CC(%a6) # set Z rts - + # # the ZEROes have opposite signs: # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP. @@ -11455,7 +11455,7 @@ eor.b %d1,%d0 bmi.l res_operr # weed out (-INF)+(+INF) -# ok, so it's not an OPERR. but, we do have to remember to return the +# ok, so it's not an OPERR. but, we do have to remember to return the # src INF since that's where the 881/882 gets the j-bit from... # @@ -11489,25 +11489,25 @@ # fdsub(): emulates the fdsub instruction # # # # XREF **************************************************************** # -# addsub_scaler2() - scale the operands so they won't take exc # +# addsub_scaler2() - scale the operands so they won't take exc # # ovf_res() - return default overflow result # # unf_res() - return default underflow result # # res_qnan() - set QNAN result # -# res_snan() - set SNAN result # +# res_snan() - set SNAN result # # res_operr() - set OPERR result # # scale_to_zero_src() - set src operand exponent equal to zero # # scale_to_zero_dst() - set dst operand exponent equal to zero # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # -# a1 = pointer to extended precision destination operand # +# a1 = pointer to extended precision destination operand # # # # OUTPUT ************************************************************** # # fp0 = result # # fp1 = EXOP (if exception occurred) # # # # ALGORITHM *********************************************************** # -# Handle NANs, infinities, and zeroes as special cases. Divide # +# Handle NANs, infinities, and zeroes as special cases. Divide # # norms into extended, single, and double precision. # # Do subtraction after scaling exponents such that exception won't# # occur. Then, check result exponent to see if exception would have # @@ -11657,7 +11657,7 @@ add.l &0xc,%sp fmovm.x FP_SCR1(%a6),&0x80 # load dst op - + fmov.l &rz_mode*0x10,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR @@ -11721,7 +11721,7 @@ # # result is equal to the smallest normalized number in the selected precision -# if the precision is extended, this result could not have come from an +# if the precision is extended, this result could not have come from an # underflow that rounded up. # fsub_may_unfl: @@ -11743,7 +11743,7 @@ # ok, so now the result has a exponent equal to the smallest normalized # exponent for the selected precision. also, the mantissa is equal to # 0x8000000000000000 and this mantissa is the result of rounding non-zero -# g,r,s. +# g,r,s. # now, we must determine whether the pre-rounded result was an underflow # rounded "up" or a normalized number rounded "down". # so, we do this be re-executing the add using RZ as the rounding mode and @@ -11899,7 +11899,7 @@ # # both operands are INFs. an OPERR will result if the INFs have the -# same signs. else, +# same signs. else, # fsub_inf_2: mov.b SRC_EX(%a0),%d0 # exclusive or the signs @@ -11914,7 +11914,7 @@ fmovm.x SRC(%a0),&0x80 # return src INF fneg.x %fp0 # invert sign fbge.w fsub_inf_done # sign is now positive - mov.b &neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG + mov.b &neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG rts fsub_inf_dst: @@ -11930,7 +11930,7 @@ ######################################################################### # XDEF **************************************************************** # -# fsqrt(): emulates the fsqrt instruction # +# fsqrt(): emulates the fsqrt instruction # # fssqrt(): emulates the fssqrt instruction # # fdsqrt(): emulates the fdsqrt instruction # # # @@ -11938,8 +11938,8 @@ # scale_sqrt() - scale the source operand # # unf_res() - return default underflow result # # ovf_res() - return default overflow result # -# res_qnan_1op() - return QNAN result # -# res_snan_1op() - return SNAN result # +# res_qnan_1op() - return QNAN result # +# res_snan_1op() - return SNAN result # # # # INPUT *************************************************************** # # a0 = pointer to extended precision source operand # @@ -11956,7 +11956,7 @@ # instruction won't cause an exception. Use the regular fsqrt to # # compute a result. Check if the regular operands would have taken # # an exception. If so, return the default overflow/underflow result # -# and return the EXOP if exceptions are enabled. Else, scale the # +# and return the EXOP if exceptions are enabled. Else, scale the # # result operand to the proper exponent. # # # ######################################################################### @@ -11978,7 +11978,7 @@ clr.w %d1 mov.b STAG(%a6),%d1 bne.w fsqrt_not_norm # optimize on non-norm input - + # # SQUARE ROOT: norms and denorms ONLY! # @@ -12100,7 +12100,7 @@ fmov.l &rz_mode*0x10,%fpcr # set FPCR fmov.l &0x0,%fpsr # clear FPSR - fsqrt.x FP_SCR0(%a6),%fp0 # execute square root + fsqrt.x FP_SCR0(%a6),%fp0 # execute square root fmov.l %fpsr,%d1 # save status fmov.l &0x0,%fpcr # clear FPCR @@ -12120,10 +12120,10 @@ bsr.l unf_res # calculate default result or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode fmovm.x FP_SCR0(%a6),&0x80 # return default result in fp0 - rts + rts # -# operand will underflow AND underflow is enabled. +# operand will underflow AND underflow is enabled. # therefore, we must return the result rounded to extended precision. # fsqrt_sd_unfl_ena: @@ -12239,15 +12239,15 @@ bra.l res_qnan_1op # -# fsqrt(+0) = +0 -# fsqrt(-0) = -0 +# fsqrt(+0) = +0 +# fsqrt(-0) = -0 # fsqrt(+INF) = +INF -# fsqrt(-INF) = OPERR +# fsqrt(-INF) = OPERR # fsqrt_zero: tst.b SRC_EX(%a0) # is ZERO positive or negative? bmi.b fsqrt_zero_m # negative -fsqrt_zero_p: +fsqrt_zero_p: fmov.s &0x00000000,%fp0 # return +ZERO mov.b &z_bmask,FPSR_CC(%a6) # set 'Z' ccode bit rts @@ -12273,13 +12273,13 @@ # # # INPUT *************************************************************** # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # d0 = value of register fetched # # # # ALGORITHM *********************************************************** # -# According to the index value in d1 which can range from zero # -# to fifteen, load the corresponding register file value (where # +# According to the index value in d1 which can range from zero # +# to fifteen, load the corresponding register file value (where # # address register indexes start at 8). D0/D1/A0/A1/A6/A7 are on the # # stack. The rest should still be in their original places. # # # @@ -12368,7 +12368,7 @@ # INPUT *************************************************************** # # d0 = longowrd value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -12429,7 +12429,7 @@ # INPUT *************************************************************** # # d0 = word value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -12490,7 +12490,7 @@ # INPUT *************************************************************** # # d0 = byte value to store # # d1 = index of register to fetch from # -# # +# # # OUTPUT ************************************************************** # # (data register is updated) # # # @@ -12551,16 +12551,16 @@ # INPUT *************************************************************** # # d0 = amount to increment by # # d1 = index of address register to increment # -# # +# # # OUTPUT ************************************************************** # # (address register is updated) # # # # ALGORITHM *********************************************************** # -# Typically used for an instruction w/ a post-increment , # +# Typically used for an instruction w/ a post-increment , # # this routine adds the increment value in d0 to the address register # # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside # # in their original places. # -# For a7, if the increment amount is one, then we have to # +# For a7, if the increment amount is one, then we have to # # increment by two. For any a7 update, set the mia7_flag so that if # # an access error exception occurs later in emulation, this address # # register update can be undone. # @@ -12615,16 +12615,16 @@ # INPUT *************************************************************** # # d0 = amount to decrement by # # d1 = index of address register to decrement # -# # +# # # OUTPUT ************************************************************** # # (address register is updated) # # # # ALGORITHM *********************************************************** # -# Typically used for an instruction w/ a pre-decrement , # +# Typically used for an instruction w/ a pre-decrement , # # this routine adds the decrement value in d0 to the address register # # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside # # in their original places. # -# For a7, if the decrement amount is one, then we have to # +# For a7, if the decrement amount is one, then we have to # # decrement by two. For any a7 update, set the mda7_flag so that if # # an access error exception occurs later in emulation, this address # # register update can be undone. # @@ -12680,17 +12680,17 @@ # # # INPUT *************************************************************** # # d0 = index of FP register to load # -# # +# # # OUTPUT ************************************************************** # # FP_SRC(a6) = value loaded from FP register file # # # # ALGORITHM *********************************************************** # -# Using the index in d0, load FP_SRC(a6) with a number from the # +# Using the index in d0, load FP_SRC(a6) with a number from the # # FP register file. # # # ######################################################################### - global load_fpn1 + global load_fpn1 load_fpn1: mov.w (tbl_load_fpn1.b,%pc,%d0.w*2), %d0 jmp (tbl_load_fpn1.b,%pc,%d0.w*1) @@ -12753,12 +12753,12 @@ # # # INPUT *************************************************************** # # d0 = index of FP register to load # -# # +# # # OUTPUT ************************************************************** # # FP_DST(a6) = value loaded from FP register file # # # # ALGORITHM *********************************************************** # -# Using the index in d0, load FP_DST(a6) with a number from the # +# Using the index in d0, load FP_DST(a6) with a number from the # # FP register file. # # # ######################################################################### @@ -12819,7 +12819,7 @@ ######################################################################### # XDEF **************************************************************** # -# store_fpreg(): store an fp value to the fpreg designated d0. # +# store_fpreg(): store an fp value to the fpreg designated d0. # # # # XREF **************************************************************** # # None # @@ -12827,7 +12827,7 @@ # INPUT *************************************************************** # # fp0 = extended precision value to store # # d0 = index of floating-point register # -# # +# # # OUTPUT ************************************************************** # # None # # # @@ -12860,27 +12860,27 @@ fmovm.x &0x80, EXC_FP1(%a6) rts store_fpreg_2: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x20 rts store_fpreg_3: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x10 rts store_fpreg_4: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x08 rts store_fpreg_5: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x04 rts store_fpreg_6: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x02 rts store_fpreg_7: - fmovm.x &0x01, -(%sp) + fmovm.x &0x01, -(%sp) fmovm.x (%sp)+, &0x01 rts @@ -12897,18 +12897,18 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # If no failure on _mem_read(): # -# FP_SRC(a6) = packed operand now as a binary FP number # +# FP_SRC(a6) = packed operand now as a binary FP number # # # # ALGORITHM *********************************************************** # -# Get the correct whihc is the value on the exception stack # +# Get the correct whihc is the value on the exception stack # # frame w/ maybe a correction factor if the is -(an) or (an)+. # # Then, fetch the operand from memory. If the fetch fails, exit # # through facc_in_x(). # # If the packed operand is a ZERO,NAN, or INF, convert it to # -# its binary representation here. Else, call decbin() which will # +# its binary representation here. Else, call decbin() which will # # convert the packed value to an extended precision binary value. # # # ######################################################################### @@ -12965,7 +12965,7 @@ # and NaN operands are dispatched without entering this routine) # # value in 68881/882 format at location (a0). # # # -# A1. Convert the bcd exponent to binary by successive adds and # +# A1. Convert the bcd exponent to binary by successive adds and # # muls. Set the sign according to SE. Subtract 16 to compensate # # for the mantissa which is to be interpreted as 17 integer # # digits, rather than 1 integer and 16 fraction digits. # @@ -13029,7 +13029,7 @@ global decbin decbin: - mov.l 0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input + mov.l 0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input mov.l 0x4(%a0),FP_SCR0_HI(%a6) # so we don't alter it mov.l 0x8(%a0),FP_SCR0_LO(%a6) @@ -13318,7 +13318,7 @@ # # Pwrten calculates the exponent factor in the selected rounding mode # according to the following table: -# +# # Sign of Mant Sign of Exp Rounding Mode PWRTEN Rounding Mode # # ANY ANY RN RN @@ -13406,7 +13406,7 @@ # it will be inex2, but will be reported as inex1 by get_op. # end_dec: - fmov.l %fpsr,%d0 # get status register + fmov.l %fpsr,%d0 # get status register bclr &inex2_bit+8,%d0 # test for inex2 and clear it beq.b no_exc # skip this if no exc ori.w &inx1a_mask,2+USER_FPSR(%a6) # set INEX1/AINEX @@ -13423,16 +13423,16 @@ # # # INPUT *************************************************************** # # a0 = pointer to the input extended precision value in memory. # -# the input may be either normalized, unnormalized, or # +# the input may be either normalized, unnormalized, or # # denormalized. # -# d0 = contains the k-factor sign-extended to 32-bits. # +# d0 = contains the k-factor sign-extended to 32-bits. # # # # OUTPUT ************************************************************** # # FP_SCR0(a6) = bcd format result on the stack. # # # # ALGORITHM *********************************************************** # # # -# A1. Set RM and size ext; Set SIGMA = sign of input. # +# A1. Set RM and size ext; Set SIGMA = sign of input. # # The k-factor is saved for use in d7. Clear the # # BINDEC_FLG for separating normalized/denormalized # # input. If input is unnormalized or denormalized, # @@ -13442,15 +13442,15 @@ # # # A3. Compute ILOG. # # ILOG is the log base 10 of the input value. It is # -# approximated by adding e + 0.f when the original # -# value is viewed as 2^^e * 1.f in extended precision. # +# approximated by adding e + 0.f when the original # +# value is viewed as 2^^e * 1.f in extended precision. # # This value is stored in d6. # # # # A4. Clr INEX bit. # -# The operation in A3 above may have set INEX2. # +# The operation in A3 above may have set INEX2. # # # # A5. Set ICTR = 0; # -# ICTR is a flag used in A13. It must be set before the # +# ICTR is a flag used in A13. It must be set before the # # loop entry A6. # # # # A6. Calculate LEN. # @@ -13472,7 +13472,7 @@ # of ISCALE and X. A table is given in the code. # # # # A8. Clr INEX; Force RZ. # -# The operation in A3 above may have set INEX2. # +# The operation in A3 above may have set INEX2. # # RZ mode is forced for the scaling operation to insure # # only one rounding error. The grs bits are collected in # # the INEX flag for use in A10. # @@ -13503,11 +13503,11 @@ # the mantissa by 10. # # # # A14. Convert the mantissa to bcd. # -# The binstr routine is used to convert the LEN digit # +# The binstr routine is used to convert the LEN digit # # mantissa to bcd in memory. The input to binstr is # # to be a fraction; i.e. (mantissa)/10^LEN and adjusted # # such that the decimal point is to the left of bit 63. # -# The bcd digits are stored in the correct position in # +# The bcd digits are stored in the correct position in # # the final string area in memory. # # # # A15. Convert the exponent to bcd. # @@ -13553,7 +13553,7 @@ # d2: upper 32-bits of mantissa for binstr # d3: scratch;lower 32-bits of mantissa for binstr # d4: LEN -# d5: LAMBDA/ICTR +# d5: LAMBDA/ICTR # d6: ILOG # d7: k-factor # a0: ptr for original operand/final result @@ -13577,7 +13577,7 @@ # separating normalized/denormalized input. If the input # is a denormalized number, set the BINDEC_FLG memory word # to signal denorm. If the input is unnormalized, normalize -# the input and test for denormalized result. +# the input and test for denormalized result. # fmov.l &rm_mode*0x10,%fpcr # set RM and ext mov.l (%a0),L_SCR2(%a6) # save exponent for sign check @@ -13658,7 +13658,7 @@ sub.w &0x3fff,%d0 # strip off bias fadd.w %d0,%fp0 # add in exp fsub.s FONE(%pc),%fp0 # subtract off 1.0 - fbge.w pos_res # if pos, branch + fbge.w pos_res # if pos, branch fmul.x PLOG2UP1(%pc),%fp0 # if neg, mul by LOG2UP1 fmov.l %fp0,%d6 # put ILOG in d6 as a lword bra.b A4_str # go move out ILOG @@ -13668,14 +13668,14 @@ # A4. Clr INEX bit. -# The operation in A3 above may have set INEX2. +# The operation in A3 above may have set INEX2. A4_str: fmov.l &0,%fpsr # zero all of fpsr - nothing needed # A5. Set ICTR = 0; -# ICTR is a flag used in A13. It must be set before the +# ICTR is a flag used in A13. It must be set before the # loop entry A6. The lower word of d5 is used for ICTR. clr.w %d5 # clear ICTR @@ -13841,21 +13841,21 @@ bne.b e_loop2 # if not, loop # A8. Clr INEX; Force RZ. -# The operation in A3 above may have set INEX2. +# The operation in A3 above may have set INEX2. # RZ mode is forced for the scaling operation to insure -# only one rounding error. The grs bits are collected in +# only one rounding error. The grs bits are collected in # the INEX flag for use in A10. # # Register usage: # Input/Output - fmov.l &0,%fpsr # clr INEX + fmov.l &0,%fpsr # clr INEX fmov.l &rz_mode*0x10,%fpcr # set RZ rounding mode # A9. Scale X -> Y. # The mantissa is scaled to the desired number of significant # digits. The excess digits are collected in INEX2. If mul, -# Check d2 for excess 10 exponential value. If not zero, +# Check d2 for excess 10 exponential value. If not zero, # the iscale value would have caused the pwrten calculation # to overflow. Only a negative iscale can cause this, so # multiply by 10^(d2), which is now only allowed to be 24, @@ -13986,7 +13986,7 @@ A11_st: mov.l USER_FPCR(%a6),L_SCR1(%a6) # save it for later - and.l &0x00000030,USER_FPCR(%a6) # set size to ext, + and.l &0x00000030,USER_FPCR(%a6) # set size to ext, # ;block exceptions @@ -14022,7 +14022,7 @@ lea.l FP_SCR1(%a6),%a0 # a0 is ptr to FP_SCR1(a6) fmov.x %fp0,(%a0) # move Y to memory at FP_SCR1(a6) tst.l L_SCR2(%a6) # test sign of original operand - bge.b do_fint12 # if pos, use Y + bge.b do_fint12 # if pos, use Y or.l &0x80000000,(%a0) # if neg, use -Y do_fint12: mov.l USER_FPSR(%a6),-(%sp) @@ -14118,7 +14118,7 @@ subq.l &1,%d6 # subtract 1 from ILOG mov.w &1,%d5 # set ICTR fmov.l &rm_mode*0x10,%fpcr # set rmode to RM - fmul.s FTEN(%pc),%fp2 # compute 10^LEN + fmul.s FTEN(%pc),%fp2 # compute 10^LEN bra.w A6_str # return to A6 and recompute YINT test_2: fmul.s FTEN(%pc),%fp2 # compute 10^LEN @@ -14134,7 +14134,7 @@ fmov.l &rm_mode*0x10,%fpcr # set rmode to RM bra.w A6_str # return to A6 and recompute YINT # -# Since ICTR <> 0, we have already been through one adjustment, +# Since ICTR <> 0, we have already been through one adjustment, # and shouldn't have another; this is to check if abs(YINT) = 10^LEN # 10^LEN is again computed using whatever table is in a1 since the # value calculated cannot be inexact. @@ -14160,11 +14160,11 @@ fmul.s FTEN(%pc),%fp2 # if LEN++, the get 10^^LEN # A14. Convert the mantissa to bcd. -# The binstr routine is used to convert the LEN digit +# The binstr routine is used to convert the LEN digit # mantissa to bcd in memory. The input to binstr is # to be a fraction; i.e. (mantissa)/10^LEN and adjusted # such that the decimal point is to the left of bit 63. -# The bcd digits are stored in the correct position in +# The bcd digits are stored in the correct position in # the final string area in memory. # # @@ -14207,7 +14207,7 @@ bgt.b no_sft # if so, don't shift neg.l %d0 # make exp positive m_loop: - lsr.l &1,%d2 # shift d2:d3 right, add 0s + lsr.l &1,%d2 # shift d2:d3 right, add 0s roxr.l &1,%d3 # the number of places dbf.w %d0,m_loop # given in d0 no_sft: @@ -14232,9 +14232,9 @@ # # Digits are stored in L_SCR1(a6) on return from BINDEC as: # -# 32 16 15 0 +# 32 16 15 0 # ----------------------------------------- -# | 0 | e3 | e2 | e1 | e4 | X | X | X | +# | 0 | e3 | e2 | e1 | e4 | X | X | X | # ----------------------------------------- # # And are moved into their proper places in FP_SCR0. If digit e4 @@ -14297,7 +14297,7 @@ sub.w &0x3ffd,%d0 # subtract off bias neg.w %d0 # make exp positive x_loop: - lsr.l &1,%d2 # shift d2:d3 right + lsr.l &1,%d2 # shift d2:d3 right roxr.l &1,%d3 # the number of places dbf.w %d0,x_loop # given in d0 x_loop_fin: @@ -14308,12 +14308,12 @@ mov.l &4,%d0 # put 4 in d0 for binstr call lea.l L_SCR1(%a6),%a0 # a0 is ptr to L_SCR1 for exp digits bsr binstr # call binstr to convert exp - mov.l L_SCR1(%a6),%d0 # load L_SCR1 lword to d0 + mov.l L_SCR1(%a6),%d0 # load L_SCR1 lword to d0 mov.l &12,%d1 # use d1 for shift count lsr.l %d1,%d0 # shift d0 right by 12 bfins %d0,FP_SCR0(%a6){&4:&12} # put e3:e2:e1 in FP_SCR0 lsr.l %d1,%d0 # shift d0 right by 12 - bfins %d0,FP_SCR0(%a6){&16:&4} # put e4 in FP_SCR0 + bfins %d0,FP_SCR0(%a6){&16:&4} # put e4 in FP_SCR0 tst.b %d0 # check if e4 is zero beq.b A16_st # if zero, skip rest or.l &opaop_mask,USER_FPSR(%a6) # set OPERR & AIOP in USER_FPSR @@ -14344,14 +14344,14 @@ A16_st: clr.l %d0 # clr d0 for collection of signs - and.b &0x0f,FP_SCR0(%a6) # clear first nibble of FP_SCR0 + and.b &0x0f,FP_SCR0(%a6) # clear first nibble of FP_SCR0 tst.l L_SCR2(%a6) # check sign of original mantissa bge.b mant_p # if pos, don't set SM mov.l &2,%d0 # move 2 in to d0 for SM mant_p: tst.l %d6 # check sign of ILOG bge.b wr_sgn # if pos, don't set SE - addq.l &1,%d0 # set bit 0 in d0 for SE + addq.l &1,%d0 # set bit 0 in d0 for SE wr_sgn: bfins %d0,FP_SCR0(%a6){&0:&2} # insert SM and SE into FP_SCR0 @@ -14417,8 +14417,8 @@ # d2:d3 = 64-bit binary integer # # d0 = desired length (LEN) # # a0 = pointer to start in memory for bcd characters # -# (This pointer must point to byte 4 of the first # -# lword of the packed decimal memory string.) # +# (This pointer must point to byte 4 of the first # +# lword of the packed decimal memory string.) # # # # OUTPUT ************************************************************** # # a0 = pointer to LEN bcd digits representing the 64-bit integer. # @@ -14558,14 +14558,14 @@ # # # INPUT *************************************************************** # # None # -# # +# # # OUTPUT ************************************************************** # # None # # # # ALGORITHM *********************************************************** # -# Flow jumps here when an FP data fetch call gets an error # +# Flow jumps here when an FP data fetch call gets an error # # result. This means the operating system wants an access error frame # -# made out of the current exception stack frame. # +# made out of the current exception stack frame. # # So, we first call restore() which makes sure that any updated # # -(an)+ register gets returned to its pre-exception value and then # # we change the stack to an access error stack frame. # @@ -14735,7 +14735,7 @@ bne.b ri_a7_done # supervisor movc %usp,%a0 # restore USP sub.l %d0,%a0 - movc %a0,%usp + movc %a0,%usp ri_a7_done: rts diff -Nru a/arch/m68k/kernel/bios32.c b/arch/m68k/kernel/bios32.c --- a/arch/m68k/kernel/bios32.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/kernel/bios32.c Tue May 18 23:38:07 2004 @@ -46,7 +46,7 @@ #define ALIGN(val,align) (((val) + ((align) - 1)) & ~((align) - 1)) -#define MAX(val1, val2) (((val1) > (val2)) ? val1 : val2) +#define MAX(val1, val2) (((val1) > (val2)) ? val1 : val2) /* * Offsets relative to the I/O and memory base addresses from where resources diff -Nru a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S --- a/arch/m68k/kernel/entry.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/kernel/entry.S Tue May 18 23:38:05 2004 @@ -55,7 +55,7 @@ ENTRY(buserr) SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl buserr_c addql #4,%sp jra ret_from_exception @@ -63,7 +63,7 @@ ENTRY(trap) SAVE_ALL_INT GET_CURRENT(%d0) - movel %sp,%sp@- | stack frame pointer argument + movel %sp,%sp@- | stack frame pointer argument bsrl trap_c addql #4,%sp jra ret_from_exception @@ -99,18 +99,18 @@ jbsr syscall_trace ret_from_signal: - RESTORE_SWITCH_STACK + RESTORE_SWITCH_STACK addql #4,%sp -/* on 68040 complete pending writebacks if any */ +/* on 68040 complete pending writebacks if any */ #ifdef CONFIG_M68040 - bfextu %sp@(PT_VECTOR){#0,#4},%d0 + bfextu %sp@(PT_VECTOR){#0,#4},%d0 subql #7,%d0 | bus error frame ? jbne 1f movel %sp,%sp@- jbsr berr_040cleanup addql #4,%sp -1: -#endif +1: +#endif jra ret_from_exception ENTRY(system_call) @@ -229,18 +229,18 @@ bfextu %sp@(PT_VECTOR){#4,#10},%d0 movel %sp,%sp@- - movel %d0,%sp@- | put vector # on stack + movel %d0,%sp@- | put vector # on stack #if defined(MACH_Q40_ONLY) && defined(CONFIG_BLK_DEV_FD) btstb #4,0xff000000 | Q40 floppy needs very special treatment ... jbeq 1f - btstb #3,0xff000004 + btstb #3,0xff000004 jbeq 1f jbsr floppy_hardint jbra 3f 1: -#endif +#endif jbsr process_int | process the IRQ -3: addql #8,%sp | pop parameters off stack +3: addql #8,%sp | pop parameters off stack ret_from_interrupt: subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+2) @@ -266,7 +266,7 @@ rte ENTRY(sys_fork) - SAVE_SWITCH_STACK + SAVE_SWITCH_STACK pea %sp@(SWITCH_STACK_SIZE) jbsr m68k_fork addql #4,%sp @@ -282,7 +282,7 @@ rts ENTRY(sys_vfork) - SAVE_SWITCH_STACK + SAVE_SWITCH_STACK pea %sp@(SWITCH_STACK_SIZE) jbsr m68k_vfork addql #4,%sp @@ -397,7 +397,7 @@ #if !defined(CPU_M68060_ONLY) 1: tstb %a1@(TASK_THREAD+THREAD_FPSTATE) jeq 3f -#endif +#endif 2: fmovemx %a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7 fmoveml %a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar 3: frestore %a1@(TASK_THREAD+THREAD_FPSTATE) @@ -554,7 +554,7 @@ .long sys_adjtimex .long sys_mprotect /* 125 */ .long sys_sigprocmask - .long sys_ni_syscall /* old "create_module" */ + .long sys_ni_syscall /* old "create_module" */ .long sys_init_module .long sys_delete_module .long sys_ni_syscall /* 130 - old "get_kernel_syms" */ diff -Nru a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S --- a/arch/m68k/kernel/head.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/kernel/head.S Tue May 18 23:38:09 2004 @@ -19,7 +19,7 @@ ** ++ Bjoern & Roman: ATARI-68040 support for the Medusa ** 95/11/18 Richard Hirst: Added MVME166 support ** 96/04/26 Guenther Kelleter: fixed identity mapping for Falcon with -** Magnum- and FX-alternate ram +** Magnum- and FX-alternate ram ** 98/04/25 Phil Blundell: added HP300 support ** 1998/08/30 David Kilzer: Added support for font_desc structures ** for linux-2.1.115 @@ -67,7 +67,7 @@ * for the kernel. * There are new subroutines and data structures to make MMU * support cleaner and easier to understand. - * First, you will find a routine call "mmu_map" which maps + * First, you will find a routine call "mmu_map" which maps * a logical to a physical region for some length given a cache * type on behalf of the caller. This routine makes writing the * actual per-machine specific code very simple. @@ -299,7 +299,7 @@ * For the head.S console, there are three supported fonts, 6x11, 8x16 and 8x8. * The 8x8 font is harder to read but fits more on the screen. */ -#define FONT_8x8 /* default */ +#define FONT_8x8 /* default */ /* #define FONT_8x16 */ /* 2nd choice */ /* #define FONT_6x11 */ /* 3rd choice */ diff -Nru a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c --- a/arch/m68k/kernel/process.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/kernel/process.c Tue May 18 23:38:09 2004 @@ -67,8 +67,7 @@ { struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp; /* Check whether the thread is blocked in resume() */ - if (sw->retpc > (unsigned long)scheduling_functions_start_here && - sw->retpc < (unsigned long)scheduling_functions_end_here) + if (in_sched_functions(sw->retpc)) return ((unsigned long *)sw->a6)[1]; else return sw->retpc; @@ -382,12 +381,6 @@ return error; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long fp, pc; @@ -403,7 +396,7 @@ fp >= 8184+stack_page) return 0; pc = ((unsigned long *)fp)[1]; - if (pc < first_sched || pc >= last_sched) + if (!in_sched_functions(pc)) return pc; fp = *(unsigned long *) fp; } while (count++ < 16); diff -Nru a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c --- a/arch/m68k/kernel/ptrace.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/kernel/ptrace.c Tue May 18 23:38:06 2004 @@ -156,7 +156,7 @@ switch (request) { /* when I and D space are separate, these will need to be fixed. */ - case PTRACE_PEEKTEXT: /* read word at location addr. */ + case PTRACE_PEEKTEXT: /* read word at location addr. */ case PTRACE_PEEKDATA: { unsigned long tmp; int copied; @@ -172,12 +172,12 @@ /* read the word at location addr in the USER area. */ case PTRACE_PEEKUSR: { unsigned long tmp; - + ret = -EIO; if ((addr & 3) || addr < 0 || addr > sizeof(struct user) - 3) break; - + tmp = 0; /* Default return condition */ addr = addr >> 2; /* temporary hack. */ ret = -EIO; @@ -217,7 +217,7 @@ break; addr = addr >> 2; /* temporary hack. */ - + if (addr == PT_SR) { data &= SR_MASK; data <<= 16; @@ -269,8 +269,8 @@ } /* - * make the child exit. Best I can do is send it a sigkill. - * perhaps it should be put in the status that it wants to + * make the child exit. Best I can do is send it a sigkill. + * perhaps it should be put in the status that it wants to * exit. */ case PTRACE_KILL: { @@ -311,7 +311,7 @@ break; case PTRACE_GETREGS: { /* Get all gp regs from the child. */ - int i; + int i; unsigned long tmp; for (i = 0; i < 19; i++) { tmp = get_reg(child, i); diff -Nru a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c --- a/arch/m68k/kernel/setup.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/kernel/setup.c Tue May 18 23:38:09 2004 @@ -85,7 +85,7 @@ void (*mach_halt)( void ); void (*mach_power_off)( void ); long mach_max_dma_address = 0x00ffffff; /* default set to the lower 16MB */ -#if defined(CONFIG_AMIGA_FLOPPY) || defined(CONFIG_ATARI_FLOPPY) +#if defined(CONFIG_AMIGA_FLOPPY) || defined(CONFIG_ATARI_FLOPPY) void (*mach_floppy_setup) (char *, int *) __initdata = NULL; #endif #ifdef CONFIG_HEARTBEAT @@ -143,7 +143,7 @@ /* Already set up by head.S */ break; - case BI_MEMCHUNK: + case BI_MEMCHUNK: if (m68k_num_memory < NUM_MEMINFO) { m68k_memory[m68k_num_memory].addr = data[0]; m68k_memory[m68k_num_memory].size = data[1]; @@ -236,7 +236,7 @@ volatile int zero = 0; asm __volatile__ ("frestore %0" : : "m" (zero)); } -#endif +#endif init_mm.start_code = PAGE_OFFSET; init_mm.end_code = (unsigned long) &_etext; @@ -296,28 +296,28 @@ #endif #ifdef CONFIG_SUN3 case MACH_SUN3: - config_sun3(); - break; + config_sun3(); + break; #endif #ifdef CONFIG_APOLLO case MACH_APOLLO: - config_apollo(); - break; + config_apollo(); + break; #endif #ifdef CONFIG_MVME147 case MACH_MVME147: - config_mvme147(); - break; + config_mvme147(); + break; #endif #ifdef CONFIG_MVME16x case MACH_MVME16x: - config_mvme16x(); - break; + config_mvme16x(); + break; #endif #ifdef CONFIG_BVME6000 case MACH_BVME6000: - config_bvme6000(); - break; + config_bvme6000(); + break; #endif #ifdef CONFIG_HP300 case MACH_HP300: @@ -384,11 +384,11 @@ /* set ISA defs early as possible */ #if defined(CONFIG_ISA) && defined(MULTI_ISA) -#if defined(CONFIG_Q40) +#if defined(CONFIG_Q40) if (MACH_IS_Q40) { isa_type = Q40_ISA; isa_sex = 0; - } + } #elif defined(CONFIG_GG2) if (MACH_IS_AMIGA && AMIGAHW_PRESENT(GG2_ISA)){ isa_type = GG2_ISA; diff -Nru a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c --- a/arch/m68k/kernel/signal.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/kernel/signal.c Tue May 18 23:38:08 2004 @@ -121,7 +121,7 @@ } } -asmlinkage int +asmlinkage int sys_sigaction(int sig, const struct old_sigaction *act, struct old_sigaction *oact) { @@ -329,7 +329,7 @@ /* get previous context */ if (copy_from_user(&context, usc, sizeof(context))) goto badframe; - + /* restore passed registers */ regs->d1 = context.sc_d1; regs->a0 = context.sc_a0; @@ -521,7 +521,7 @@ sigdelsetmask(&set, ~_BLOCKABLE); current->blocked = set; recalc_sigpending(); - + if (restore_sigcontext(regs, &frame->sc, frame + 1, &d0)) goto badframe; return d0; @@ -548,7 +548,7 @@ sigdelsetmask(&set, ~_BLOCKABLE); current->blocked = set; recalc_sigpending(); - + if (rt_restore_ucontext(regs, sw, &frame->uc, &d0)) goto badframe; return d0; @@ -1091,7 +1091,7 @@ current->state = TASK_STOPPED; current->exit_code = signr; sighand = current->parent->sighand; - if (sighand && !(sighand->action[SIGCHLD-1].sa.sa_flags + if (sighand && !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) notify_parent(current, SIGCHLD); schedule(); diff -Nru a/arch/m68k/kernel/sun3-head.S b/arch/m68k/kernel/sun3-head.S --- a/arch/m68k/kernel/sun3-head.S Tue May 18 23:38:05 2004 +++ b/arch/m68k/kernel/sun3-head.S Tue May 18 23:38:05 2004 @@ -9,7 +9,7 @@ NBSG = 0x20000 ICACHE_ONLY = 0x00000009 CACHES_OFF = 0x00000008 | actually a clear and disable --m -#define MAS_STACK INT_STACK +#define MAS_STACK INT_STACK ROOT_TABLE_SIZE = 128 PAGESIZE = 8192 SUN3_INVALID_PMEG = 255 @@ -35,9 +35,9 @@ /* Firstly, disable interrupts and set up function codes. */ movew #PSL_HIGHIPL, %sr - moveq #FC_CONTROL, %d0 - movec %d0, %sfc - movec %d0, %dfc + moveq #FC_CONTROL, %d0 + movec %d0, %sfc + movec %d0, %dfc /* Make sure we're in context zero. */ moveq #0, %d0 @@ -45,9 +45,9 @@ /* map everything the bootloader left us into high memory, clean up the excess later */ - lea (AC_SEGMAP+0),%a0 - lea (AC_SEGMAP+KERNBASE),%a1 -1: + lea (AC_SEGMAP+0),%a0 + lea (AC_SEGMAP+KERNBASE),%a1 +1: movsb %a0@, %d1 movsb %d1, %a1@ cmpib #SUN3_INVALID_PMEG, %d1 @@ -55,13 +55,13 @@ addl #NBSG,%a0 addl #NBSG,%a1 jmp 1b - -2: - + +2: + /* Disable caches and jump to high code. */ moveq #ICACHE_ONLY,%d0 | Cache disabled until we're ready to enable it movc %d0, %cacr | is this the right value? (yes --m) - jmp 1f:l + jmp 1f:l /* Following code executes at high addresses (0xE000xxx). */ 1: lea init_task,%curptr | get initial thread... @@ -76,7 +76,7 @@ movel %a0@, %a1@ addl #4, %a1 dbf %d0, 1b - + /* Point MSP at an invalid page to trap if it's used. --m */ movl #(PAGESIZE),%d0 movc %d0,%msp @@ -86,9 +86,9 @@ jbsr sun3_init jbsr base_trap_init - + jbsr start_kernel - trap #15 + trap #15 .data .even diff -Nru a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c --- a/arch/m68k/kernel/sys_m68k.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/kernel/sys_m68k.c Tue May 18 23:38:05 2004 @@ -203,10 +203,10 @@ default: return -ENOSYS; } - if (call <= MSGCTL) + if (call <= MSGCTL) switch (call) { case MSGSND: - return sys_msgsnd (first, (struct msgbuf *) ptr, + return sys_msgsnd (first, (struct msgbuf *) ptr, second, third); case MSGRCV: switch (version) { @@ -234,7 +234,7 @@ default: return -ENOSYS; } - if (call <= SHMCTL) + if (call <= SHMCTL) switch (call) { case SHMAT: switch (version) { @@ -247,7 +247,7 @@ return put_user (raddr, (ulong *) third); } } - case SHMDT: + case SHMDT: return sys_shmdt ((char *)ptr); case SHMGET: return sys_shmget (first, second, third); @@ -442,7 +442,7 @@ unsigned long paddr, i; /* - * 68060 manual says: + * 68060 manual says: * cpush %dc : flush DC, remains valid (with our %cacr setup) * cpush %ic : invalidate IC * cpush %bc : flush DC + invalidate IC diff -Nru a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c --- a/arch/m68k/kernel/traps.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/kernel/traps.c Tue May 18 23:38:09 2004 @@ -116,7 +116,7 @@ __asm__ volatile ("movec %%vbr, %0" : "=r" ((void*)sun3x_prom_vbr)); } - + /* setup the exception vector table */ __asm__ volatile ("movec %0,%%vbr" : : "r" ((void*)vectors)); @@ -352,7 +352,7 @@ asm volatile (".chip 68040; movec %%mmusr,%0; .chip 68k" : "=r" (mmusr)); - set_fs(old_fs); + set_fs(old_fs); return mmusr; } @@ -379,8 +379,8 @@ } /* set_fs can not be moved, otherwise put_user() may oops */ - set_fs(old_fs); - + set_fs(old_fs); + #ifdef DEBUG printk("do_040writeback1, res=%d\n",res); @@ -390,7 +390,7 @@ } /* after an exception in a writeback the stack frame corresponding - * to that exception is discarded, set a few bits in the old frame + * to that exception is discarded, set a few bits in the old frame * to simulate what it should look like */ static inline void fix_xframe040(struct frame *fp, unsigned long wba, unsigned short wbs) @@ -415,7 +415,7 @@ fp->un.fmt7.wb2d); if (res) fix_xframe040(fp, fp->un.fmt7.wb2a, fp->un.fmt7.wb2s); - else + else fp->un.fmt7.wb2s = 0; } @@ -461,9 +461,9 @@ #ifdef DEBUG printk("ssw=%#x, fa=%#lx\n", ssw, fp->un.fmt7.faddr); - printk("wb1s=%#x, wb2s=%#x, wb3s=%#x\n", fp->un.fmt7.wb1s, + printk("wb1s=%#x, wb2s=%#x, wb3s=%#x\n", fp->un.fmt7.wb1s, fp->un.fmt7.wb2s, fp->un.fmt7.wb3s); - printk ("wb2a=%lx, wb3a=%lx, wb2d=%lx, wb3d=%lx\n", + printk ("wb2a=%lx, wb3a=%lx, wb2d=%lx, wb3d=%lx\n", fp->un.fmt7.wb2a, fp->un.fmt7.wb3a, fp->un.fmt7.wb2d, fp->un.fmt7.wb3d); #endif @@ -491,7 +491,7 @@ errorcode = 0; } - /* despite what documentation seems to say, RMW + /* despite what documentation seems to say, RMW * accesses have always both the LK and RW bits set */ if (!(ssw & RW_040) || (ssw & LK_040)) errorcode |= 2; @@ -547,7 +547,7 @@ fp->ptregs.format == 0xa ? fp->ptregs.pc + 2 : fp->un.fmtb.baddr - 2 : fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr); - if (ssw & DF) + if (ssw & DF) printk ("Data %s fault at %#010lx in %s (pc=%#lx)\n", ssw & RW ? "read" : "write", fp->un.fmtb.daddr, @@ -559,7 +559,7 @@ * the testing for a bad kernel-space access (demand-mapping applies * to kernel accesses too). */ - + if ((ssw & DF) && (buserr_type & (SUN3_BUSERR_PROTERR | SUN3_BUSERR_INVALID))) { if (mmu_emu_handle_fault (fp->un.fmtb.daddr, ssw & RW, 0)) @@ -659,7 +659,7 @@ printk ("protection fault on insn access (segv).\n"); #endif force_sig (SIGSEGV, current); - } + } } #else #if defined(CPU_M68020_OR_M68030) @@ -1035,7 +1035,7 @@ fp->ptregs.format); else printk ("*** Exception %d *** FORMAT=%X\n", - (fp->ptregs.vector) >> 2, + (fp->ptregs.vector) >> 2, fp->ptregs.format); if (fp->ptregs.vector >> 2 == VEC_ADDRERR && CPU_IS_020_OR_030) { unsigned short ssw = fp->un.fmtb.ssw; @@ -1187,6 +1187,7 @@ console_verbose(); printk("%s: %08x\n",str,nr); + print_modules(); printk("PC: [<%08lx>]",fp->pc); print_symbol(" %s\n", fp->pc); printk("\nSR: %04x SP: %p a2: %08lx\n", diff -Nru a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds --- a/arch/m68k/kernel/vmlinux-std.lds Tue May 18 23:38:09 2004 +++ b/arch/m68k/kernel/vmlinux-std.lds Tue May 18 23:38:09 2004 @@ -41,7 +41,7 @@ /* will be freed after init */ . = ALIGN(4096); /* Init code and data */ __init_begin = .; - .init.text : { + .init.text : { _sinittext = .; *(.init.text) _einittext = .; @@ -56,12 +56,12 @@ __stop___param = .; __initcall_start = .; .initcall.init : { - *(.initcall1.init) - *(.initcall2.init) - *(.initcall3.init) - *(.initcall4.init) - *(.initcall5.init) - *(.initcall6.init) + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) *(.initcall7.init) } __initcall_end = .; diff -Nru a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds --- a/arch/m68k/kernel/vmlinux-sun3.lds Tue May 18 23:38:05 2004 +++ b/arch/m68k/kernel/vmlinux-sun3.lds Tue May 18 23:38:05 2004 @@ -24,10 +24,10 @@ .data : { /* Data */ *(.data) CONSTRUCTORS - . = ALIGN(16); /* Exception table */ - __start___ex_table = .; - *(__ex_table) - __stop___ex_table = .; + . = ALIGN(16); /* Exception table */ + __start___ex_table = .; + *(__ex_table) + __stop___ex_table = .; } /* End of data goes *here* so that freeing init code works properly. */ _edata = .; @@ -35,12 +35,12 @@ /* will be freed after init */ . = ALIGN(8192); /* Init code and data */ __init_begin = .; - .init.text : { + .init.text : { _sinittext = .; *(.init.text) _einittext = .; } - .init.data : { *(.init.data) } + .init.data : { *(.init.data) } . = ALIGN(16); __setup_start = .; .init.setup : { *(.init.setup) } @@ -50,12 +50,12 @@ __stop___param = .; __initcall_start = .; .initcall.init : { - *(.initcall1.init) - *(.initcall2.init) - *(.initcall3.init) - *(.initcall4.init) - *(.initcall5.init) - *(.initcall6.init) + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) *(.initcall7.init) } __initcall_end = .; @@ -70,7 +70,7 @@ . = ALIGN(8192); __init_end = .; .init.task : { *(init_task) } - + .bss : { *(.bss) } /* BSS */ @@ -84,7 +84,7 @@ } .crap : { - /* Stabs debugging sections. */ + /* Stabs debugging sections. */ *(.stab) *(.stabstr) *(.stab.excl) diff -Nru a/arch/m68k/lib/ashldi3.c b/arch/m68k/lib/ashldi3.c --- a/arch/m68k/lib/ashldi3.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/lib/ashldi3.c Tue May 18 23:38:05 2004 @@ -20,7 +20,7 @@ #define BITS_PER_UNIT 8 -typedef int SItype __attribute__ ((mode (SI))); +typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef int word_type __attribute__ ((mode (__word__))); diff -Nru a/arch/m68k/lib/ashrdi3.c b/arch/m68k/lib/ashrdi3.c --- a/arch/m68k/lib/ashrdi3.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/lib/ashrdi3.c Tue May 18 23:38:06 2004 @@ -20,7 +20,7 @@ #define BITS_PER_UNIT 8 -typedef int SItype __attribute__ ((mode (SI))); +typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef int word_type __attribute__ ((mode (__word__))); diff -Nru a/arch/m68k/lib/lshrdi3.c b/arch/m68k/lib/lshrdi3.c --- a/arch/m68k/lib/lshrdi3.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/lib/lshrdi3.c Tue May 18 23:38:09 2004 @@ -20,7 +20,7 @@ #define BITS_PER_UNIT 8 -typedef int SItype __attribute__ ((mode (SI))); +typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef int word_type __attribute__ ((mode (__word__))); diff -Nru a/arch/m68k/lib/muldi3.c b/arch/m68k/lib/muldi3.c --- a/arch/m68k/lib/muldi3.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/lib/muldi3.c Tue May 18 23:38:06 2004 @@ -1,4 +1,4 @@ -/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and +/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and gcc-2.7.2.3/longlong.h which is: */ /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. @@ -33,7 +33,7 @@ umul_ppmm (__w.s.high, __w.s.low, u, v); \ __w.ll; }) -typedef int SItype __attribute__ ((mode (SI))); +typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef int word_type __attribute__ ((mode (__word__))); diff -Nru a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c --- a/arch/m68k/mac/baboon.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/mac/baboon.c Tue May 18 23:38:08 2004 @@ -14,9 +14,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include /* #define DEBUG_BABOON */ diff -Nru a/arch/m68k/mac/bootparse.c b/arch/m68k/mac/bootparse.c --- a/arch/m68k/mac/bootparse.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mac/bootparse.c Tue May 18 23:38:07 2004 @@ -9,114 +9,114 @@ /* * Booter vars */ - + int boothowto; int _boothowto; - + /* * Called early to parse the environment (passed to us from the booter) * into a bootinfo struct. Will die as soon as we have our own booter */ #define atol(x) simple_strtoul(x,NULL,0) - + void parse_booter(char *env) { - char *name; - char *value; + char *name; + char *value; #if 0 - while(0 && *env) + while(0 && *env) #else - while(*env) + while(*env) #endif - { - name=env; - value=name; - while(*value!='='&&*value) - value++; - if(*value=='=') - *value++=0; - env=value; - while(*env) - env++; - env++; -#if 0 - if(strcmp(name,"VIDEO_ADDR")==0) - mac_mch.videoaddr=atol(value); - if(strcmp(name,"ROW_BYTES")==0) - mac_mch.videorow=atol(value); - if(strcmp(name,"SCREEN_DEPTH")==0) - mac_mch.videodepth=atol(value); - if(strcmp(name,"DIMENSIONS")==0) - mac_mch.dimensions=atol(value); -#endif - if(strcmp(name,"BOOTTIME")==0) - mac_bi_data.boottime=atol(value); - if(strcmp(name,"GMTBIAS")==0) - mac_bi_data.gmtbias=atol(value); - if(strcmp(name,"BOOTERVER")==0) - mac_bi_data.bootver=atol(value); - if(strcmp(name,"MACOS_VIDEO")==0) - mac_bi_data.videological=atol(value); - if(strcmp(name,"MACOS_SCC")==0) - mac_bi_data.sccbase=atol(value); - if(strcmp(name,"MACHINEID")==0) - mac_bi_data.id=atol(value); - if(strcmp(name,"MEMSIZE")==0) - mac_bi_data.memsize=atol(value); - if(strcmp(name,"SERIAL_MODEM_FLAGS")==0) - mac_bi_data.serialmf=atol(value); - if(strcmp(name,"SERIAL_MODEM_HSKICLK")==0) - mac_bi_data.serialhsk=atol(value); - if(strcmp(name,"SERIAL_MODEM_GPICLK")==0) - mac_bi_data.serialgpi=atol(value); - if(strcmp(name,"SERIAL_PRINT_FLAGS")==0) - mac_bi_data.printmf=atol(value); - if(strcmp(name,"SERIAL_PRINT_HSKICLK")==0) - mac_bi_data.printhsk=atol(value); - if(strcmp(name,"SERIAL_PRINT_GPICLK")==0) - mac_bi_data.printgpi=atol(value); - if(strcmp(name,"PROCESSOR")==0) - mac_bi_data.cpuid=atol(value); - if(strcmp(name,"ROMBASE")==0) - mac_bi_data.rombase=atol(value); - if(strcmp(name,"TIMEDBRA")==0) - mac_bi_data.timedbra=atol(value); - if(strcmp(name,"ADBDELAY")==0) - mac_bi_data.adbdelay=atol(value); - } + { + name=env; + value=name; + while(*value!='='&&*value) + value++; + if(*value=='=') + *value++=0; + env=value; + while(*env) + env++; + env++; +#if 0 + if(strcmp(name,"VIDEO_ADDR")==0) + mac_mch.videoaddr=atol(value); + if(strcmp(name,"ROW_BYTES")==0) + mac_mch.videorow=atol(value); + if(strcmp(name,"SCREEN_DEPTH")==0) + mac_mch.videodepth=atol(value); + if(strcmp(name,"DIMENSIONS")==0) + mac_mch.dimensions=atol(value); +#endif + if(strcmp(name,"BOOTTIME")==0) + mac_bi_data.boottime=atol(value); + if(strcmp(name,"GMTBIAS")==0) + mac_bi_data.gmtbias=atol(value); + if(strcmp(name,"BOOTERVER")==0) + mac_bi_data.bootver=atol(value); + if(strcmp(name,"MACOS_VIDEO")==0) + mac_bi_data.videological=atol(value); + if(strcmp(name,"MACOS_SCC")==0) + mac_bi_data.sccbase=atol(value); + if(strcmp(name,"MACHINEID")==0) + mac_bi_data.id=atol(value); + if(strcmp(name,"MEMSIZE")==0) + mac_bi_data.memsize=atol(value); + if(strcmp(name,"SERIAL_MODEM_FLAGS")==0) + mac_bi_data.serialmf=atol(value); + if(strcmp(name,"SERIAL_MODEM_HSKICLK")==0) + mac_bi_data.serialhsk=atol(value); + if(strcmp(name,"SERIAL_MODEM_GPICLK")==0) + mac_bi_data.serialgpi=atol(value); + if(strcmp(name,"SERIAL_PRINT_FLAGS")==0) + mac_bi_data.printmf=atol(value); + if(strcmp(name,"SERIAL_PRINT_HSKICLK")==0) + mac_bi_data.printhsk=atol(value); + if(strcmp(name,"SERIAL_PRINT_GPICLK")==0) + mac_bi_data.printgpi=atol(value); + if(strcmp(name,"PROCESSOR")==0) + mac_bi_data.cpuid=atol(value); + if(strcmp(name,"ROMBASE")==0) + mac_bi_data.rombase=atol(value); + if(strcmp(name,"TIMEDBRA")==0) + mac_bi_data.timedbra=atol(value); + if(strcmp(name,"ADBDELAY")==0) + mac_bi_data.adbdelay=atol(value); + } #if 0 /* XXX: TODO with m68k_mach_* */ - /* Fill in the base stuff */ - boot_info.machtype=MACH_MAC; - /* Read this from the macinfo we got ! */ + /* Fill in the base stuff */ + boot_info.machtype=MACH_MAC; + /* Read this from the macinfo we got ! */ /* boot_info.cputype=CPU_68020|FPUB_68881;*/ -/* boot_info.memory[0].addr=0;*/ -/* boot_info.memory[0].size=((mac_bi_data.id>>7)&31)<<20;*/ - boot_info.num_memory=1; /* On a MacII */ - boot_info.ramdisk_size=0; /* For now */ - *boot_info.command_line=0; +/* boot_info.memory[0].addr=0;*/ +/* boot_info.memory[0].size=((mac_bi_data.id>>7)&31)<<20;*/ + boot_info.num_memory=1; /* On a MacII */ + boot_info.ramdisk_size=0; /* For now */ + *boot_info.command_line=0; #endif } - + void print_booter(char *env) { - char *name; - char *value; - while(*env) - { - name=env; - value=name; - while(*value!='='&&*value) - value++; - if(*value=='=') - *value++=0; - env=value; - while(*env) - env++; - env++; - printk("%s=%s\n", name,value); - } + char *name; + char *value; + while(*env) + { + name=env; + value=name; + while(*value!='='&&*value) + value++; + if(*value=='=') + *value++=0; + env=value; + while(*env) + env++; + env++; + printk("%s=%s\n", name,value); + } } - + diff -Nru a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c --- a/arch/m68k/mac/config.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/mac/config.c Tue May 18 23:38:06 2004 @@ -176,7 +176,7 @@ /* * Flip into 24bit mode for an instant - flushes the L2 cache card. We - * have to disable interrupts for this. Our IRQ handlers will crap + * have to disable interrupts for this. Our IRQ handlers will crap * themselves if they take an IRQ in 24bit mode! */ @@ -232,10 +232,10 @@ /* * Determine hardware present */ - + mac_identify(); mac_report_hardware(); - + /* AFAIK only the IIci takes a cache card. The IIfx has onboard cache ... someone needs to figure out how to tell if it's on or not. */ @@ -252,21 +252,21 @@ #ifdef OLD_NUBUS_CODE nubus_sweep_video(); #endif -} +} /* - * Macintosh Table: hardcoded model configuration data. + * Macintosh Table: hardcoded model configuration data. * - * Much of this was defined by Alan, based on who knows what docs. - * I've added a lot more, and some of that was pure guesswork based - * on hardware pages present on the Mac web site. Possibly wildly + * Much of this was defined by Alan, based on who knows what docs. + * I've added a lot more, and some of that was pure guesswork based + * on hardware pages present on the Mac web site. Possibly wildly * inaccurate, so look here if a new Mac model won't run. Example: if * a Mac crashes immediately after the VIA1 registers have been dumped - * to the screen, it probably died attempting to read DirB on a RBV. + * to the screen, it probably died attempting to read DirB on a RBV. * Meaning it should have MAC_VIA_IIci here :-) */ - + struct mac_model *macintosh_config; EXPORT_SYMBOL(macintosh_config); @@ -288,9 +288,9 @@ /* * Original MacII hardware - * + * */ - + { .ident = MAC_MODEL_II, .name = "II", @@ -324,7 +324,7 @@ .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, - + /* * Weirdified MacII hardware - all subtley different. Gee thanks * Apple. All these boxes seem to have VIA2 in a different place to @@ -373,7 +373,7 @@ .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, - + /* * Classic models (guessing: similar to SE/30 ?? Nope, similar to LC ...) */ @@ -398,7 +398,7 @@ /* * Some Mac LC machines. Basically the same as the IIci, ADB like IIsi */ - + { .ident = MAC_MODEL_LC, .name = "LC", @@ -426,15 +426,15 @@ }, /* - * Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently - * as some of the stuff connected to VIA2 seems different. Better SCSI chip and - * onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an + * Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently + * as some of the stuff connected to VIA2 seems different. Better SCSI chip and + * onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an * AMD 79C940 (MACE). * The 700, 900 and 950 have some I/O chips in the wrong place to * confuse us. The 840AV has a SCSI location of its own (same as * the 660AV). - */ - + */ + { .ident = MAC_MODEL_Q605, .name = "Quadra 605", @@ -528,7 +528,7 @@ .nubus_type = MAC_NUBUS }, - /* + /* * Performa - more LC type machines */ @@ -816,7 +816,7 @@ { struct mac_model *m; - /* Penguin data useful? */ + /* Penguin data useful? */ int model = mac_bi_data.id; if (!model) { /* no bootinfo model id -> NetBSD booter was used! */ @@ -825,7 +825,7 @@ printk (KERN_WARNING "No bootinfo model ID, using cpuid instead (hey, use Penguin!)\n"); } - macintosh_config = mac_data_table; + macintosh_config = mac_data_table; for (m = macintosh_config ; m->ident != -1 ; m++) { if (m->ident == model) { macintosh_config = m; @@ -846,19 +846,19 @@ * Report booter data: */ printk (KERN_DEBUG " Penguin bootinfo data:\n"); - printk (KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n", - mac_bi_data.videoaddr, mac_bi_data.videorow, - mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF, - mac_bi_data.dimensions >> 16); + printk (KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n", + mac_bi_data.videoaddr, mac_bi_data.videorow, + mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF, + mac_bi_data.dimensions >> 16); printk (KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx \n", - mac_bi_data.videological, mac_orig_videoaddr, - mac_bi_data.sccbase); + mac_bi_data.videological, mac_orig_videoaddr, + mac_bi_data.sccbase); printk (KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx \n", - mac_bi_data.boottime, mac_bi_data.gmtbias); + mac_bi_data.boottime, mac_bi_data.gmtbias); printk (KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx \n", - mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize); + mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize); #if 0 - printk ("Ramdisk: addr 0x%lx size 0x%lx\n", + printk ("Ramdisk: addr 0x%lx size 0x%lx\n", m68k_ramdisk.addr, m68k_ramdisk.size); #endif diff -Nru a/arch/m68k/mac/debug.c b/arch/m68k/mac/debug.c --- a/arch/m68k/mac/debug.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mac/debug.c Tue May 18 23:38:09 2004 @@ -8,7 +8,7 @@ * Atari debugging and serial console stuff * * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek - * + * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. @@ -43,7 +43,7 @@ #define DEBUG_SERIAL /* - * These two auxiliary debug functions should go away ASAP. Only usage: + * These two auxiliary debug functions should go away ASAP. Only usage: * before the console output is up (after head.S come some other crucial * setup routines :-) it permits writing 'data' to the screen as bit patterns * (good luck reading those). Helped to figure that the bootinfo contained @@ -77,9 +77,9 @@ /* calculate current offset */ pengoffset=(unsigned char *)(mac_videobase+(150+line*2)*mac_rowbytes) +80*peng; - + pptr=pengoffset; - + for(i=0;i<8*sizeof(short);i++) /* # of bits */ { /* value mask for bit i, reverse order */ @@ -112,12 +112,12 @@ /* printk("debug: #%ld !\n", addr); */ return; } - + pengoffset=(unsigned char *)(mac_videobase+(150+line*2)*mac_rowbytes) +80*peng; - + pptr=pengoffset; - + for(i=0;i<8*sizeof(long);i++) /* # of bits */ { *pptr++ = (addr & ( 1 << (8*sizeof(long)-i-1) ) ? 0xFF : 0x00); @@ -270,7 +270,7 @@ for( i = 60*uSEC; i > 0; --i ) \ barrier(); \ } while(0) - + #ifndef CONFIG_SERIAL_CONSOLE static void __init mac_init_scc_port( int cflag, int port ) #else @@ -285,17 +285,17 @@ static int clksrc_table[9] = /* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */ - { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 }; + { 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 }; static int clkmode_table[9] = /* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */ - { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 }; + { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 }; static int div_table[9] = /* reg12 (BRG low) */ - { 94, 62, 46, 22, 10, 4, 1, 0, 0 }; + { 94, 62, 46, 22, 10, 4, 1, 0, 0 }; int baud = cflag & CBAUD; int clksrc, clkmode, div, reg3, reg5; - + if (cflag & CBAUDEX) baud += B38400; if (baud < B1200 || baud > B38400+2) diff -Nru a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c --- a/arch/m68k/mac/iop.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mac/iop.c Tue May 18 23:38:09 2004 @@ -113,9 +113,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #include @@ -485,7 +485,7 @@ /* * Send a message - * + * * The message is placed at the end of the send queue. Afterwards if the * channel is idle we force an immediate send of the next message in the * queue. @@ -537,7 +537,7 @@ if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return; iop_loadaddr(iop_base[iop_num], shared_ram_start); - + while (code_len--) { iop_base[iop_num]->ram_data = *code_start++; } @@ -553,7 +553,7 @@ if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return; iop_loadaddr(iop_base[iop_num], shared_ram_start); - + while (code_len--) { *code_start++ = iop_base[iop_num]->ram_data; } @@ -571,7 +571,7 @@ if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return code_start; iop_loadaddr(iop_base[iop_num], shared_ram_start); - + while (code_len--) { if (*code_start != iop_base[iop_num]->ram_data) { return code_start; @@ -666,12 +666,12 @@ iop_chan_state(iop_readb(iop, IOP_ADDR_RECV_STATE+i)), iop_listeners[iop_num][i].handler? iop_listeners[iop_num][i].devname : ""); - + } len += sprintf(buf+len, "\n"); return len; } - + static int iop_get_proc_info(char *buf, char **start, off_t pos, int count) { int len, cnt; diff -Nru a/arch/m68k/mac/macboing.c b/arch/m68k/mac/macboing.c --- a/arch/m68k/mac/macboing.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mac/macboing.c Tue May 18 23:38:09 2004 @@ -1,7 +1,7 @@ /* * Mac bong noise generator. Note - we ought to put a boingy noise * here 8) - * + * * ---------------------------------------------------------------------- * 16.11.98: * rewrote some functions, added support for Enhanced ASC (Quadras) @@ -22,8 +22,8 @@ static __u8 mac_asc_wave_tab[ 0x800 ]; /* - * Alan's original sine table; needs interpolating to 0x800 - * (hint: interpolate or hardwire [0 -> Pi/2[, it's symmetric) + * Alan's original sine table; needs interpolating to 0x800 + * (hint: interpolate or hardwire [0 -> Pi/2[, it's symmetric) */ static const signed char sine_data[] = { 0, 39, 75, 103, 121, 127, 121, 103, 75, 39, @@ -35,16 +35,16 @@ */ static volatile __u8* mac_asc_regs = ( void* )0x50F14000; -/* - * sample rate; is this a good default value? +/* + * sample rate; is this a good default value? */ -static unsigned long mac_asc_samplespersec = 11050; +static unsigned long mac_asc_samplespersec = 11050; static int mac_bell_duration; static unsigned long mac_bell_phase; /* 0..2*Pi -> 0..0x800 (wavetable size) */ static unsigned long mac_bell_phasepersample; /* - * some function protos + * some function protos */ static void mac_init_asc( void ); static void mac_nosound( unsigned long ); @@ -67,11 +67,11 @@ { int i; - /* - * do some machine specific initialization + /* + * do some machine specific initialization * BTW: * the NetBSD Quadra patch identifies the Enhanced Apple Sound Chip via - * mac_asc_regs[ 0x800 ] & 0xF0 != 0 + * mac_asc_regs[ 0x800 ] & 0xF0 != 0 * this makes no sense here, because we have to set the default sample * rate anyway if we want correct frequencies */ @@ -83,27 +83,27 @@ */ mac_asc_regs = ( void* )0x50010000; break; - /* - * not sure about how correct this list is - * machines with the EASC enhanced apple sound chip + /* + * not sure about how correct this list is + * machines with the EASC enhanced apple sound chip */ case MAC_MODEL_Q630: case MAC_MODEL_P475: mac_special_bell = mac_quadra_start_bell; mac_asc_samplespersec = 22150; - break; + break; case MAC_MODEL_C660: case MAC_MODEL_Q840: /* * The Quadra 660AV and 840AV use the "Singer" custom ASIC for sound I/O. - * It appears to be similar to the "AWACS" custom ASIC in the Power Mac - * [678]100. Because Singer and AWACS may have a similar hardware - * interface, this would imply that the code in drivers/sound/dmasound.c + * It appears to be similar to the "AWACS" custom ASIC in the Power Mac + * [678]100. Because Singer and AWACS may have a similar hardware + * interface, this would imply that the code in drivers/sound/dmasound.c * for AWACS could be used as a basis for Singer support. All we have to - * do is figure out how to do DMA on the 660AV/840AV through the PSC and + * do is figure out how to do DMA on the 660AV/840AV through the PSC and * figure out where the Singer hardware sits in memory. (I'd look in the - * vicinity of the AWACS location in a Power Mac [678]100 first, or the - * current location of the Apple Sound Chip--ASC--in other Macs.) The + * vicinity of the AWACS location in a Power Mac [678]100 first, or the + * current location of the Apple Sound Chip--ASC--in other Macs.) The * Power Mac [678]100 info can be found in MkLinux Mach kernel sources. * * Quoted from Apple's Tech Info Library, article number 16405: @@ -111,7 +111,7 @@ * Macintosh models have 16-bit audio input and output capability * because of the AT&T DSP3210 hardware circuitry and the 16-bit Singer * codec circuitry in the AVs. The Audio Waveform Amplifier and - * Converter (AWAC) chip in the Power Macintosh performs the same + * Converter (AWAC) chip in the Power Macintosh performs the same * 16-bit I/O functionality. The PowerBook 500 series computers * support 16-bit stereo output, but only mono input." * @@ -139,8 +139,8 @@ break; } - /* - * init the wave table with a simple triangular wave + /* + * init the wave table with a simple triangular wave * A sine wave would sure be nicer here ... */ for ( i = 0; i < 0x400; i++ ) @@ -149,15 +149,15 @@ mac_asc_wave_tab[ i + 0x400 ] = 0xFF - i / 4; } mac_asc_inited = 1; -} +} /* - * Called to make noise; current single entry to the boing driver. + * Called to make noise; current single entry to the boing driver. * Does the job for simple ASC, calls other routines else. * XXX Fixme: - * Should be split into asc_mksound, easc_mksound, av_mksound and - * function pointer set in mac_init_asc which would be called at - * init time. + * Should be split into asc_mksound, easc_mksound, av_mksound and + * function pointer set in mac_init_asc which would be called at + * init time. * _This_ is rather ugly ... */ void mac_mksound( unsigned int freq, unsigned int length ) @@ -192,7 +192,7 @@ del_timer( &mac_sound_timer ); for ( i = 0; i < 0x800; i++ ) - mac_asc_regs[ i ] = 0; + mac_asc_regs[ i ] = 0; for ( i = 0; i < 0x800; i++ ) mac_asc_regs[ i ] = mac_asc_wave_tab[ i ]; @@ -218,7 +218,7 @@ static void mac_nosound( unsigned long ignored ) { mac_asc_regs[ ASC_ENABLE ] = 0; -} +} /* * EASC entry; init EASC, don't load wavetable, schedule 'start whining'. @@ -237,7 +237,7 @@ mac_bell_duration = length; mac_bell_phase = 0; mac_bell_phasepersample = ( freq * sizeof( mac_asc_wave_tab ) ) / mac_asc_samplespersec; - /* this is reasonably big for small frequencies */ + /* this is reasonably big for small frequencies */ local_irq_save(flags); @@ -247,11 +247,11 @@ /* set up the ASC registers */ if ( mac_asc_regs[ 0x801 ] != 1 ) { - /* select mono mode */ + /* select mono mode */ mac_asc_regs[ 0x807 ] = 0; /* select sampled sound mode */ mac_asc_regs[ 0x802 ] = 0; - /* ??? */ + /* ??? */ mac_asc_regs[ 0x801 ] = 1; mac_asc_regs[ 0x803 ] |= 0x80; mac_asc_regs[ 0x803 ] &= 0x7F; @@ -266,12 +266,12 @@ /* * EASC 'start/continue whining'; I'm not sure why the above function didn't - * already load the wave table, or at least call this one... + * already load the wave table, or at least call this one... * This piece keeps reloading the wave table until done. */ static void mac_quadra_ring_bell( unsigned long ignored ) { - int i, count = mac_asc_samplespersec / HZ; + int i, count = mac_asc_samplespersec / HZ; __u32 flags; /* @@ -282,7 +282,7 @@ */ local_irq_save(flags); - + del_timer( &mac_sound_timer ); if ( mac_bell_duration-- > 0 ) @@ -297,7 +297,7 @@ } else mac_asc_regs[ 0x801 ] = 0; - + local_irq_restore(flags); } @@ -306,4 +306,4 @@ */ static void mac_av_start_bell( unsigned int freq, unsigned int length, unsigned int volume ) { -} +} diff -Nru a/arch/m68k/mac/macints.c b/arch/m68k/mac/macints.c --- a/arch/m68k/mac/macints.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/mac/macints.c Tue May 18 23:38:08 2004 @@ -2,8 +2,8 @@ * Macintosh interrupts * * General design: - * In contrary to the Amiga and Atari platforms, the Mac hardware seems to - * exclusively use the autovector interrupts (the 'generic level0-level7' + * In contrary to the Amiga and Atari platforms, the Mac hardware seems to + * exclusively use the autovector interrupts (the 'generic level0-level7' * interrupts with exception vectors 0x19-0x1f). The following interrupt levels * are used: * 1 - VIA1 @@ -248,7 +248,7 @@ printk("Done.\n"); #endif /* SHUTUP_SONIC */ - /* + /* * Now register the handlers for the master IRQ handlers * at levels 1-7. Most of the work is done elsewhere. */ @@ -496,7 +496,7 @@ * FIXME: You can register interrupts on nonexistent source (ie PSC4 on a * non-PSC machine). We should return -EINVAL in those cases. */ - + int mac_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) @@ -533,7 +533,7 @@ return 0; } - + /* * Removes an interrupt service routine from an interrupt source. */ @@ -661,7 +661,7 @@ irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp) { int i; - /* + /* * generate debug output on NMI switch if 'debug' kernel option given * (only works with Penguin!) */ @@ -691,7 +691,7 @@ fp->d0, fp->d1, fp->d2, fp->d3); printk("d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n", fp->d4, fp->d5, fp->a0, fp->a1); - + if (STACK_MAGIC != *(unsigned long *)current->kernel_stack_page) printk("Corrupted stack page\n"); printk("Process %s (pid: %d, stackpage=%08lx)\n", diff -Nru a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c --- a/arch/m68k/mac/misc.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mac/misc.c Tue May 18 23:38:07 2004 @@ -1,5 +1,5 @@ /* - * Miscellaneous Mac68K-specific stuff + * Miscellaneous Mac68K-specific stuff */ #include @@ -67,7 +67,7 @@ volatile struct adb_request req; data += RTC_OFFSET; - + adb_request((struct adb_request *) &req, NULL, ADBREQ_RAW|ADBREQ_SYNC, 6, CUDA_PACKET, CUDA_SET_TIME, @@ -324,7 +324,7 @@ adb_request(NULL, NULL, ADBREQ_RAW|ADBREQ_SYNC, 3, PMU_PACKET, PMU_SET_INTR_MASK, PMU_INT_ADB|PMU_INT_TICK); - + adb_request(NULL, NULL, ADBREQ_RAW|ADBREQ_SYNC, 2, PMU_PACKET, PMU_RESET); } @@ -477,7 +477,7 @@ ".chip 68030\n\t" "lea %/pc@(1f),%/a0\n\t" "addl %0,%/a0\n\t"/* fixup target address and stack ptr */ - "addl %0,%/sp\n\t" + "addl %0,%/sp\n\t" "pflusha\n\t" "jmp %/a0@\n\t" /* jump into physical memory */ "0:.long 0\n\t" /* a constant zero. */ @@ -494,7 +494,7 @@ "movec %/a0, %/cacr\n\t" /* flush i&d caches */ "movew #0x2700,%/sr\n\t" /* set up status register */ "movel %1@(0x0),%/a0\n\t"/* load interrupt stack pointer */ - "movec %/a0, %/isp\n\t" + "movec %/a0, %/isp\n\t" "movel %1@(0x4),%/a0\n\t" /* load reset vector */ "reset\n\t" /* reset external devices */ "jmp %/a0@\n\t" /* jump to the reset vector */ @@ -579,7 +579,7 @@ return; } -/* +/* * Read/write the hardware clock. */ diff -Nru a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c --- a/arch/m68k/mac/oss.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mac/oss.c Tue May 18 23:38:07 2004 @@ -20,9 +20,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #include #include @@ -91,7 +91,7 @@ * Handle miscellaneous OSS interrupts. Right now that's just sound * and SCSI; everything else is routed to its own autovector IRQ. */ - + irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs) { int events; @@ -100,7 +100,7 @@ if (!events) return IRQ_NONE; -#ifdef DEBUG_IRQS +#ifdef DEBUG_IRQS if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) { printk("oss_irq: irq %d events = 0x%04X\n", irq, (int) oss->irq_pending); diff -Nru a/arch/m68k/mac/psc.c b/arch/m68k/mac/psc.c --- a/arch/m68k/mac/psc.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mac/psc.c Tue May 18 23:38:07 2004 @@ -20,9 +20,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #define DEBUG_PSC diff -Nru a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c --- a/arch/m68k/mac/via.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/mac/via.c Tue May 18 23:38:06 2004 @@ -26,10 +26,10 @@ #include #include -#include -#include +#include +#include #include -#include +#include #include #include @@ -93,7 +93,7 @@ /* IIci, IIsi, IIvx, IIvi (P6xx), LC series */ - case MAC_VIA_IIci: + case MAC_VIA_IIci: via1 = (void *) VIA1_BASE; if (macintosh_config->ident == MAC_MODEL_IIFX) { via2 = NULL; @@ -166,7 +166,7 @@ via1[vT2CH] = 0; via1[vACR] &= 0x3F; - /* + /* * SE/30: disable video IRQ * XXX: testing for SE/30 VBL */ @@ -174,8 +174,8 @@ if (macintosh_config->ident == MAC_MODEL_SE30) { via1[vDirB] |= 0x40; via1[vBufB] |= 0x40; - } - + } + /* * Set the RTC bits to a known state: all lines to outputs and * RTC disabled (yes that's 0 to enable and 1 to disable). @@ -243,7 +243,7 @@ */ void __init via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *)) -{ +{ via1[vACR] |= 0x40; via1[vT1LL] = MAC_CLOCK_LOW; via1[vT1LH] = MAC_CLOCK_HIGH; @@ -537,7 +537,7 @@ /* But not on PowerBooks, that's ADB... */ if ((macintosh_config->adb_type != MAC_ADB_PB1) && (macintosh_config->adb_type != MAC_ADB_PB2)) { - switch(macintosh_config->ident) + switch(macintosh_config->ident) { case MAC_MODEL_II: case MAC_MODEL_IIX: diff -Nru a/arch/m68k/math-emu/fp_arith.c b/arch/m68k/math-emu/fp_arith.c --- a/arch/m68k/math-emu/fp_arith.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/math-emu/fp_arith.c Tue May 18 23:38:06 2004 @@ -458,7 +458,7 @@ return; /* infinities and zeroes */ - if (IS_INF(dest) || IS_ZERO(dest)) + if (IS_INF(dest) || IS_ZERO(dest)) return; /* first truncate the lower bits */ diff -Nru a/arch/m68k/math-emu/fp_cond.S b/arch/m68k/math-emu/fp_cond.S --- a/arch/m68k/math-emu/fp_cond.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/math-emu/fp_cond.S Tue May 18 23:38:09 2004 @@ -105,10 +105,10 @@ | decode addressing mode fp_decode_addr_mode - .long fp_data, fp_fdbcc - .long fp_indirect, fp_postinc - .long fp_predecr, fp_disp16 - .long fp_extmode0, fp_extmode1 + .long fp_data, fp_fdbcc + .long fp_indirect, fp_postinc + .long fp_predecr, fp_disp16 + .long fp_extmode0, fp_extmode1 | addressing mode: data register direct fp_data: diff -Nru a/arch/m68k/math-emu/fp_log.c b/arch/m68k/math-emu/fp_log.c --- a/arch/m68k/math-emu/fp_log.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/math-emu/fp_log.c Tue May 18 23:38:09 2004 @@ -48,7 +48,7 @@ /* * sqrt(m) * 2^(p) , if e = 2*p - * sqrt(m*2^e) = + * sqrt(m*2^e) = * sqrt(2*m) * 2^(p) , if e = 2*p + 1 * * So we use the last bit of the exponent to decide wether to @@ -80,7 +80,7 @@ * which has a null point on x = sqrt(r). * * It gives: - * x' := x - f(x)/f'(x) + * x' := x - f(x)/f'(x) * = x - (x^2 -r)/(2*x) * = x - (x - r/x)/2 * = (2*x - x + r/x)/2 diff -Nru a/arch/m68k/math-emu/fp_scan.S b/arch/m68k/math-emu/fp_scan.S --- a/arch/m68k/math-emu/fp_scan.S Tue May 18 23:38:07 2004 +++ b/arch/m68k/math-emu/fp_scan.S Tue May 18 23:38:07 2004 @@ -133,10 +133,10 @@ | decode addressing mode for source fp_decode_addr_mode - .long fp_data, fp_ill - .long fp_indirect, fp_postinc - .long fp_predecr, fp_disp16 - .long fp_extmode0, fp_extmode1 + .long fp_data, fp_ill + .long fp_indirect, fp_postinc + .long fp_predecr, fp_disp16 + .long fp_extmode0, fp_extmode1 | addressing mode: data register direct fp_data: diff -Nru a/arch/m68k/math-emu/fp_util.S b/arch/m68k/math-emu/fp_util.S --- a/arch/m68k/math-emu/fp_util.S Tue May 18 23:38:09 2004 +++ b/arch/m68k/math-emu/fp_util.S Tue May 18 23:38:09 2004 @@ -1337,7 +1337,7 @@ jra fp_finaltest fp_finalrounding_single_fast: - addq.l #8,%sp + addq.l #8,%sp jsr fp_normalize_ext jsr fp_normalize_single_fast jra fp_finaltest diff -Nru a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c --- a/arch/m68k/mm/fault.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mm/fault.c Tue May 18 23:38:07 2004 @@ -157,7 +157,7 @@ survive: fault = handle_mm_fault(mm, vma, address, write); #ifdef DEBUG - printk("handle_mm_fault returns %d\n",fault); + printk("handle_mm_fault returns %d\n",fault); #endif switch (fault) { case 1: @@ -186,7 +186,7 @@ down_read(&mm->mmap_sem); goto survive; } - + printk("VM: killing process %s\n", current->comm); if (user_mode(regs)) do_exit(SIGKILL); diff -Nru a/arch/m68k/mm/hwtest.c b/arch/m68k/mm/hwtest.c --- a/arch/m68k/mm/hwtest.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mm/hwtest.c Tue May 18 23:38:09 2004 @@ -3,9 +3,9 @@ * that it was also in drivers/nubus/nubus.c and I wanted to * use it in hp300/config.c, so it seemed sensible to pull it * out into its own file. - * + * * The test is for use when trying to read a hardware register - * that isn't present would cause a bus error. We set up a + * that isn't present would cause a bus error. We set up a * temporary handler so that this doesn't kill the kernel. * * There is a test-by-reading and a test-by-writing; I present @@ -37,7 +37,7 @@ "movec %4,%/vbr\n\t" "movel %/sp,%1\n\t" "moveq #0,%0\n\t" - "tstb %3@\n\t" + "tstb %3@\n\t" "nop\n\t" "moveq #1,%0\n" "Lberr1:\n\t" @@ -50,7 +50,7 @@ return( ret ); } EXPORT_SYMBOL(hwreg_present); - + /* Basically the same, but writes a value into a word register, protected * by a bus error handler. Returns 1 if successful, 0 otherwise. */ @@ -67,7 +67,7 @@ "movec %4,%/vbr\n\t" "movel %/sp,%1\n\t" "moveq #0,%0\n\t" - "movew %5,%3@\n\t" + "movew %5,%3@\n\t" "nop \n\t" /* If this nop isn't present, 'ret' may already be * loaded with 1 at the time the bus error * happens! */ diff -Nru a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c --- a/arch/m68k/mm/init.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/mm/init.c Tue May 18 23:38:08 2004 @@ -109,7 +109,7 @@ continue; } } - + #ifndef CONFIG_SUN3 /* insert pointer tables allocated so far into the tablelist */ init_pointer_table((unsigned long)kernel_pg_dir); diff -Nru a/arch/m68k/mm/memory.c b/arch/m68k/mm/memory.c --- a/arch/m68k/mm/memory.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/mm/memory.c Tue May 18 23:38:08 2004 @@ -298,7 +298,7 @@ : "d0"); #ifdef CONFIG_M68K_L2_CACHE if(mach_l2_flush) - mach_l2_flush(0); + mach_l2_flush(0); #endif } @@ -350,7 +350,7 @@ : "d0"); #ifdef CONFIG_M68K_L2_CACHE if(mach_l2_flush) - mach_l2_flush(1); + mach_l2_flush(1); #endif } @@ -387,7 +387,7 @@ unsigned long mmusr; set_fs(get_ds()); - + asm volatile (".chip 68040\n\t" "ptestr (%1)\n\t" "movec %%mmusr, %0\n\t" diff -Nru a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c --- a/arch/m68k/mm/motorola.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mm/motorola.c Tue May 18 23:38:07 2004 @@ -2,9 +2,9 @@ * linux/arch/m68k/motorola.c * * Routines specific to the Motorola MMU, originally from: - * linux/arch/m68k/init.c + * linux/arch/m68k/init.c * which are Copyright (C) 1995 Hamish Macdonald - * + * * Moved 8/20/1999 Sam Creasey */ @@ -99,7 +99,7 @@ return last_pgtable; } -static unsigned long __init +static unsigned long __init map_chunk (unsigned long addr, long size) { #define PTRTREESIZE (256*1024) diff -Nru a/arch/m68k/mm/sun3kmap.c b/arch/m68k/mm/sun3kmap.c --- a/arch/m68k/mm/sun3kmap.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mm/sun3kmap.c Tue May 18 23:38:09 2004 @@ -26,7 +26,7 @@ extern void mmu_emu_map_pmeg (int context, int vaddr); -static inline void do_page_mapin(unsigned long phys, unsigned long virt, +static inline void do_page_mapin(unsigned long phys, unsigned long virt, unsigned long type) { unsigned long pte; @@ -44,11 +44,11 @@ } -static inline void do_pmeg_mapin(unsigned long phys, unsigned long virt, +static inline void do_pmeg_mapin(unsigned long phys, unsigned long virt, unsigned long type, int pages) { - if(sun3_get_segmap(virt & ~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) + if(sun3_get_segmap(virt & ~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) mmu_emu_map_pmeg(sun3_get_context(), virt); while(pages) { @@ -59,7 +59,7 @@ } } -void *sun3_ioremap(unsigned long phys, unsigned long size, +void *sun3_ioremap(unsigned long phys, unsigned long size, unsigned long type) { struct vm_struct *area; @@ -79,7 +79,7 @@ return NULL; #ifdef SUN3_KMAP_DEBUG - printk("ioremap: got virt %p size %lx(%lx)\n", + printk("ioremap: got virt %p size %lx(%lx)\n", area->addr, size, area->size); #endif @@ -93,39 +93,39 @@ seg_pages = (SUN3_PMEG_SIZE - (virt & SUN3_PMEG_MASK)) / PAGE_SIZE; if(seg_pages > pages) seg_pages = pages; - + do_pmeg_mapin(phys, virt, type, seg_pages); pages -= seg_pages; phys += seg_pages * PAGE_SIZE; virt += seg_pages * PAGE_SIZE; } - + return (void *)ret; } - - + + void *__ioremap(unsigned long phys, unsigned long size, int cache) { - + return sun3_ioremap(phys, size, SUN3_PAGE_TYPE_IO); - + } void iounmap(void *addr) { - vfree((void *)(PAGE_MASK & (unsigned long)addr)); + vfree((void *)(PAGE_MASK & (unsigned long)addr)); } /* sun3_map_test(addr, val) -- Reads a byte from addr, storing to val, * trapping the potential read fault. Returns 0 if the access faulted, * 1 on success. - * + * * This function is primarily used to check addresses on the VME bus. * * Mucking with the page fault handler seems a little hackish to me, but - * SunOS, NetBSD, and Mach all implemented this check in such a manner, + * SunOS, NetBSD, and Mach all implemented this check in such a manner, * so I figure we're allowed. */ int sun3_map_test(unsigned long addr, char *val) @@ -151,6 +151,6 @@ "_sun3_map_test_end:\n" : "=a"(val), "=r"(ret) : "a"(addr)); - + return ret; } diff -Nru a/arch/m68k/mm/sun3mmu.c b/arch/m68k/mm/sun3mmu.c --- a/arch/m68k/mm/sun3mmu.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/mm/sun3mmu.c Tue May 18 23:38:06 2004 @@ -1,4 +1,4 @@ -/* +/* * linux/arch/m68k/mm/sun3mmu.c * * Implementations of mm routines specific to the sun3 MMU. @@ -64,12 +64,12 @@ size = num_pages * sizeof(pte_t); size = (size + PAGE_SIZE) & ~(PAGE_SIZE-1); - + next_pgtable = (unsigned long)alloc_bootmem_pages(size); bootmem_end = (next_pgtable + size + PAGE_SIZE) & PAGE_MASK; /* Map whole memory from PAGE_OFFSET (0x0E000000) */ - pg_dir += PAGE_OFFSET >> PGDIR_SHIFT; + pg_dir += PAGE_OFFSET >> PGDIR_SHIFT; while (address < (unsigned long)high_memory) { pg_table = (pte_t *) __pa (next_pgtable); @@ -95,7 +95,7 @@ /* memory sizing is a hack stolen from motorola.c.. hope it works for us */ zones_size[0] = ((unsigned long)high_memory - PAGE_OFFSET) >> PAGE_SHIFT; zones_size[1] = 0; - + free_area_init(zones_size); } diff -Nru a/arch/m68k/mvme147/config.c b/arch/m68k/mvme147/config.c --- a/arch/m68k/mvme147/config.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/mvme147/config.c Tue May 18 23:38:06 2004 @@ -120,8 +120,8 @@ static irqreturn_t mvme147_timer_int (int irq, void *dev_id, struct pt_regs *fp) { - m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; - m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; + m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; + m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; return tick_handler(irq, dev_id, fp); } @@ -129,16 +129,16 @@ void mvme147_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) { tick_handler = timer_routine; - request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, + request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, IRQ_FLG_REPLACE, "timer 1", NULL); - + /* Init the clock with a value */ /* our clock goes off every 6.25us */ m147_pcc->t1_preload = PCC_TIMER_PRELOAD; - m147_pcc->t1_cntrl = 0x0; /* clear timer */ - m147_pcc->t1_cntrl = 0x3; /* start timer */ + m147_pcc->t1_cntrl = 0x0; /* clear timer */ + m147_pcc->t1_cntrl = 0x3; /* start timer */ m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR; /* clear pending ints */ - m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; + m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1; } /* This is always executed with interrupts disabled. */ diff -Nru a/arch/m68k/mvme16x/mvme16x_ksyms.c b/arch/m68k/mvme16x/mvme16x_ksyms.c --- a/arch/m68k/mvme16x/mvme16x_ksyms.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/mvme16x/mvme16x_ksyms.c Tue May 18 23:38:07 2004 @@ -2,5 +2,5 @@ #include #include #include - + EXPORT_SYMBOL(mvme16x_config); diff -Nru a/arch/m68k/mvme16x/rtc.c b/arch/m68k/mvme16x/rtc.c --- a/arch/m68k/mvme16x/rtc.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/mvme16x/rtc.c Tue May 18 23:38:09 2004 @@ -43,7 +43,7 @@ { volatile MK48T08ptr_t rtc = (MK48T08ptr_t)MVME_RTC_BASE; unsigned long flags; - struct rtc_time wtime; + struct rtc_time wtime; switch (cmd) { case RTC_RD_TIME: /* Read the time/date from RTC */ @@ -101,7 +101,7 @@ if (yrs >= 2070) return -EINVAL; - + local_irq_save(flags); rtc->ctrl = RTC_WRITE; diff -Nru a/arch/m68k/q40/Makefile b/arch/m68k/q40/Makefile --- a/arch/m68k/q40/Makefile Tue May 18 23:38:07 2004 +++ b/arch/m68k/q40/Makefile Tue May 18 23:38:07 2004 @@ -2,4 +2,4 @@ # Makefile for Linux arch/m68k/q40 source directory # -obj-y := config.o q40ints.o +obj-y := config.o q40ints.o diff -Nru a/arch/m68k/q40/README b/arch/m68k/q40/README --- a/arch/m68k/q40/README Tue May 18 23:38:05 2004 +++ b/arch/m68k/q40/README Tue May 18 23:38:05 2004 @@ -9,18 +9,18 @@ Hints to documentation usually refer to the linux source tree in /usr/src/linux/Documentation unless URL given. -It seems IRQ unmasking can't be safely done on a Q40. IRQ probing +It seems IRQ unmasking can't be safely done on a Q40. IRQ probing is not implemented - do not try it! (See below) For a list of kernel command-line options read the documentation for the particular device drivers. The floppy imposes a very high interrupt load on the CPU, approx 30K/s. -When something blocks interrupts (HD) it will lose some of them, so far +When something blocks interrupts (HD) it will lose some of them, so far this is not known to have caused any data loss. On highly loaded systems -it can make the floppy very slow or practically stop. Other Q40 OS' simply +it can make the floppy very slow or practically stop. Other Q40 OS' simply poll the floppy for this reason - something that can't be done in Linux. -Only possible cure is getting a 82072 controller with fifo instead of +Only possible cure is getting a 82072 controller with fifo instead of the 8272A. drivers used by the Q40, apart from the very obvious (console etc.): @@ -28,7 +28,7 @@ serial.c # normal PC driver - any speed lp.c # printer driver genrtc.c # RTC - char/joystick/* # most of this should work, not + char/joystick/* # most of this should work, not # in default config.in block/q40ide.c # startup for ide ide* # see Documentation/ide.txt @@ -41,30 +41,30 @@ sound/dmasound_core.c dmasound_q40.c -Various other PC drivers can be enabled simply by adding them to +Various other PC drivers can be enabled simply by adding them to arch/m68k/config.in, especially 8 bit devices should be without any -problems. For cards using 16bit io/mem more care is required, like +problems. For cards using 16bit io/mem more care is required, like checking byte order issues, hacking memcpy_*_io etc. Debugging ========= -Upon startup the kernel will usually output "ABCQGHIJ" into the SRAM, -preceded by the booter signature. This is a trace just in case something -went wrong during earliest setup stages of head.S. -**Changed** to preserve SRAM contents by default, this is only done when -requested - SRAM must start with '%LX$' signature to do this. '-d' option +Upon startup the kernel will usually output "ABCQGHIJ" into the SRAM, +preceded by the booter signature. This is a trace just in case something +went wrong during earliest setup stages of head.S. +**Changed** to preserve SRAM contents by default, this is only done when +requested - SRAM must start with '%LX$' signature to do this. '-d' option to 'lxx' loader enables this. SRAM can also be used as additional console device, use debug=mem. -This will save kernel startup msgs into SRAM, the screen will display +This will save kernel startup msgs into SRAM, the screen will display only the penguin - and shell prompt if it gets that far.. Unfortunately only 2000 bytes are available. Serial console works and can also be used for debugging, see loader_txt -Most problems seem to be caused by fawlty or badly configured io-cards or +Most problems seem to be caused by fawlty or badly configured io-cards or hard drives anyway. Make sure to configure the parallel port as SPP and remove IRQ/DMA jumpers for first testing. The Q40 does not support DMA and may have trouble with @@ -74,7 +74,7 @@ Q40 Hardware Description ======================== -This is just an overview, see asm-m68k/* for details ask if you have any +This is just an overview, see asm-m68k/* for details ask if you have any questions. The Q40 consists of a 68040@40 MHz, 1MB video RAM, up to 32MB RAM, AT-style @@ -82,16 +82,16 @@ shadow ROM. The Q60 has any of 68060 or 68LC060 and up to 128 MB RAM. -Most interfacing like floppy, IDE, serial and parallel ports is done via ISA -slots. The ISA io and mem range is mapped (sparse&byteswapped!) into separate +Most interfacing like floppy, IDE, serial and parallel ports is done via ISA +slots. The ISA io and mem range is mapped (sparse&byteswapped!) into separate regions of the memory. -The main interrupt register IIRQ_REG will indicate whether an IRQ was internal +The main interrupt register IIRQ_REG will indicate whether an IRQ was internal or from some ISA devices, EIRQ_REG can distinguish up to 8 ISA IRQs. The Q40 custom chip is programmable to provide 2 periodic timers: - 50 or 200 Hz - level 2, !!THIS CANT BE DISABLED!! - - 10 or 20 KHz - level 4, used for dma-sound - + - 10 or 20 KHz - level 4, used for dma-sound + Linux uses the 200 Hz interrupt for timer and beep by default. @@ -112,7 +112,7 @@ because only irq's 4-15 can be disabled - and only all of them at once. Thus disable_irq() can effectively block the machine if the driver goes asleep. -One thing to keep in mind when hacking around the interrupt code is +One thing to keep in mind when hacking around the interrupt code is that there is no way to find out which IRQ caused a request, [EI]IRQ_REG displays current state of the various IRQ lines. @@ -123,11 +123,11 @@ the PC scancodes x86 Linux uses. So by theory every national keyboard should work just by loading the appropriate x86 keytable - see any national-HOWTO. -Unfortunately the AT->PC translation isn't quite trivial and even worse, my -documentation of it is absolutely minimal - thus some exotic keys may not +Unfortunately the AT->PC translation isn't quite trivial and even worse, my +documentation of it is absolutely minimal - thus some exotic keys may not behave exactly as expected. -There is still hope that it can be fixed completely though. If you encounter +There is still hope that it can be fixed completely though. If you encounter problems, email me ideally this: - exact keypress/release sequence - 'showkey -s' run on q40, non-X session diff -Nru a/arch/m68k/q40/config.c b/arch/m68k/q40/config.c --- a/arch/m68k/q40/config.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/q40/config.c Tue May 18 23:38:07 2004 @@ -159,7 +159,7 @@ void q40_disable_irqs(void) { unsigned i,j; - + j=0; while((i=serports[j++])) outb(0,i+UART_IER); master_outb(0,EXT_ENABLE_REG); @@ -170,16 +170,16 @@ { mach_sched_init = q40_sched_init; - mach_init_IRQ = q40_init_IRQ; - mach_gettimeoffset = q40_gettimeoffset; - mach_hwclk = q40_hwclk; + mach_init_IRQ = q40_init_IRQ; + mach_gettimeoffset = q40_gettimeoffset; + mach_hwclk = q40_hwclk; mach_get_ss = q40_get_ss; mach_get_rtc_pll = q40_get_rtc_pll; mach_set_rtc_pll = q40_set_rtc_pll; mach_set_clock_mmss = q40_set_clock_mmss; mach_reset = q40_reset; - mach_free_irq = q40_free_irq; + mach_free_irq = q40_free_irq; mach_process_int = q40_process_int; mach_get_irq_list = show_q40_interrupts; mach_request_irq = q40_request_irq; @@ -204,9 +204,9 @@ q40_disable_irqs(); /* no DMA at all, but ide-scsi requires it.. make sure - * all physical RAM fits into the boundary - otherwise + * all physical RAM fits into the boundary - otherwise * allocator may play costly and useless tricks */ - mach_max_dma_address = 1024*1024*1024; + mach_max_dma_address = 1024*1024*1024; /* useful for early debugging stages - writes kernel messages into SRAM */ if (!strncmp( m68k_debug_device,"mem",3 )) @@ -286,7 +286,7 @@ t->tm_sec = bcd2bin (Q40_RTC_SECS); Q40_RTC_CTRL &= ~(Q40_RTC_READ); - + if (t->tm_year < 70) t->tm_year += 100; t->tm_wday = bcd2bin(Q40_RTC_DOW)-1; @@ -319,7 +319,7 @@ if ((rtc_minutes < real_minutes ? real_minutes - rtc_minutes : rtc_minutes - real_minutes) < 30) - { + { Q40_RTC_CTRL |= Q40_RTC_WRITE; Q40_RTC_MINS = bin2bcd(real_minutes); Q40_RTC_SECS = bin2bcd(real_seconds); diff -Nru a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c --- a/arch/m68k/q40/q40ints.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/q40/q40ints.c Tue May 18 23:38:09 2004 @@ -30,14 +30,14 @@ #include #include -/* - * Q40 IRQs are defined as follows: +/* + * Q40 IRQs are defined as follows: * 3,4,5,6,7,10,11,14,15 : ISA dev IRQs * 16-31: reserved * 32 : keyboard int * 33 : frame int (50/200 Hz periodic timer) * 34 : sample int (10/20 KHz periodic timer) - * + * */ extern int ints_inited; @@ -122,7 +122,7 @@ case 12: case 13: printk("%s: ISA IRQ %d from %s not implemented by HW\n", __FUNCTION__, irq, devname); return -ENXIO; - case 11: + case 11: printk("warning IRQ 10 and 11 not distinguishable\n"); irq=10; default: @@ -131,7 +131,7 @@ if (irq4){ @@ -379,9 +379,9 @@ return IRQ_HANDLED; } } - if (mer && ccleirq>0 && !aliased_irq) + if (mer && ccleirq>0 && !aliased_irq) printk("ISA interrupt from unknown source? EIRQ_REG = %x\n",mer),ccleirq--; - } + } iirq: mir=master_inb(IIRQ_REG); /* should test whether keyboard irq is really enabled, doing it in defhand */ @@ -399,10 +399,10 @@ for (i = 0; i <= Q40_IRQ_MAX; i++) { if (irq_tab[i].count) seq_printf(p, "%sIRQ %02d: %8d %s%s\n", - (i<=15) ? "ISA-" : " " , + (i<=15) ? "ISA-" : " " , i, irq_tab[i].count, irq_tab[i].devname[0] ? irq_tab[i].devname : "?", - irq_tab[i].handler == q40_defhand ? + irq_tab[i].handler == q40_defhand ? " (now unassigned)" : ""); } return 0; @@ -440,7 +440,7 @@ { mext_disabled--; if (mext_disabled>0) - printk("q40_enable_irq : nested disable/enable\n"); + printk("q40_enable_irq : nested disable/enable\n"); if (mext_disabled==0) master_outb(1,EXT_ENABLE_REG); } diff -Nru a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c --- a/arch/m68k/sun3/config.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/sun3/config.c Tue May 18 23:38:08 2004 @@ -42,19 +42,19 @@ extern void idprom_init (void); extern int sun3_hwclk(int set, struct rtc_time *t); -volatile char* clock_va; +volatile char* clock_va; extern volatile unsigned char* sun3_intreg; extern unsigned long availmem; unsigned long num_pages; static int sun3_get_hardware_list(char *buffer) { - + int len = 0; len += sprintf(buffer + len, "PROM Revision:\t%s\n", romvec->pv_monid); - + return len; } @@ -71,14 +71,14 @@ clock_va = (char *) 0xfe06000; /* dark */ sun3_intreg = (unsigned char *) 0xfe0a000; /* magic */ sun3_disable_interrupts(); - + prom_init((void *)LINUX_OPPROM_BEGVM); - + GET_CONTROL_BYTE(AC_SENABLE,enable_register); - enable_register |= 0x50; /* Enable FPU */ + enable_register |= 0x50; /* Enable FPU */ SET_CONTROL_BYTE(AC_SENABLE,enable_register); GET_CONTROL_BYTE(AC_SENABLE,enable_register); - + /* This code looks suspicious, because it doesn't subtract memory belonging to the kernel from the available space */ @@ -122,7 +122,7 @@ /* align start/end to page boundaries */ memory_start = ((memory_start + (PAGE_SIZE-1)) & PAGE_MASK); memory_end = memory_end & PAGE_MASK; - + start_page = __pa(memory_start) >> PAGE_SHIFT; num_pages = __pa(memory_end) >> PAGE_SHIFT; @@ -134,7 +134,7 @@ free_bootmem(__pa(availmem), memory_end - (availmem)); } - + void __init config_sun3(void) { @@ -145,13 +145,13 @@ /* Subtract kernel memory from available memory */ - mach_sched_init = sun3_sched_init; + mach_sched_init = sun3_sched_init; mach_init_IRQ = sun3_init_IRQ; mach_default_handler = &sun3_default_handler; mach_request_irq = sun3_request_irq; mach_free_irq = sun3_free_irq; - enable_irq = sun3_enable_irq; - disable_irq = sun3_disable_irq; + enable_irq = sun3_enable_irq; + disable_irq = sun3_disable_irq; mach_process_int = sun3_process_int; mach_get_irq_list = show_sun3_interrupts; mach_reset = sun3_reboot; @@ -161,7 +161,7 @@ mach_halt = sun3_halt; mach_get_hardware_list = sun3_get_hardware_list; #if defined(CONFIG_DUMMY_CONSOLE) - conswitchp = &dummy_con; + conswitchp = &dummy_con; #endif memory_start = ((((int)&_end) + 0x2000) & ~0x1fff); @@ -170,7 +170,7 @@ m68k_num_memory=1; m68k_memory[0].size=*(romvec->pv_sun3mem); - + sun3_bootmem_alloc(memory_start, memory_end); } @@ -179,7 +179,7 @@ sun3_disable_interrupts(); intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE); intersil_clock->int_reg=INTERSIL_HZ_100_MASK; - intersil_clear(); + intersil_clear(); sun3_enable_irq(5); intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_ENABLE|INTERSIL_24H_MODE); sun3_enable_interrupts(); diff -Nru a/arch/m68k/sun3/dvma.c b/arch/m68k/sun3/dvma.c --- a/arch/m68k/sun3/dvma.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/sun3/dvma.c Tue May 18 23:38:06 2004 @@ -24,13 +24,13 @@ unsigned long pte; unsigned long j; pte_t ptep; - + j = *(volatile unsigned long *)kaddr; *(volatile unsigned long *)kaddr = j; ptep = pfn_pte(virt_to_pfn(kaddr), PAGE_KERNEL); pte = pte_val(ptep); -// printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n", +// printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n", // kaddr, vaddr, pte, len); if(ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] != pte) { sun3_put_pte(vaddr, pte); @@ -41,7 +41,7 @@ } -int dvma_map_iommu(unsigned long kaddr, unsigned long baddr, +int dvma_map_iommu(unsigned long kaddr, unsigned long baddr, int len) { @@ -51,7 +51,7 @@ vaddr = dvma_btov(baddr); end = vaddr + len; - + while(vaddr < end) { dvma_page(kaddr, vaddr); kaddr += PAGE_SIZE; diff -Nru a/arch/m68k/sun3/idprom.c b/arch/m68k/sun3/idprom.c --- a/arch/m68k/sun3/idprom.c Tue May 18 23:38:06 2004 +++ b/arch/m68k/sun3/idprom.c Tue May 18 23:38:06 2004 @@ -67,7 +67,7 @@ prom_getproperty(prom_root_node, "banner-name", sysname, sizeof(sysname)); printk("TYPE: %s\n", sysname); -#endif +#endif } return; } @@ -83,7 +83,7 @@ for (i = 0; i < NUM_SUN_MACHINES; i++) { if(Sun_Machines[i].id_machtype == idprom->id_machtype) { - strcpy(model, Sun_Machines[i].name); + strcpy(model, Sun_Machines[i].name); return; } } diff -Nru a/arch/m68k/sun3/intersil.c b/arch/m68k/sun3/intersil.c --- a/arch/m68k/sun3/intersil.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/sun3/intersil.c Tue May 18 23:38:05 2004 @@ -26,7 +26,7 @@ /* does this need to be implemented? */ unsigned long sun3_gettimeoffset(void) -{ +{ return 1; } diff -Nru a/arch/m68k/sun3/leds.c b/arch/m68k/sun3/leds.c --- a/arch/m68k/sun3/leds.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/sun3/leds.c Tue May 18 23:38:05 2004 @@ -5,9 +5,9 @@ void sun3_leds(unsigned char byte) { unsigned char dfc; - + GET_DFC(dfc); SET_DFC(FC_CONTROL); - SET_CONTROL_BYTE(AC_LEDS,byte); + SET_CONTROL_BYTE(AC_LEDS,byte); SET_DFC(dfc); } diff -Nru a/arch/m68k/sun3/mmu_emu.c b/arch/m68k/sun3/mmu_emu.c --- a/arch/m68k/sun3/mmu_emu.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/sun3/mmu_emu.c Tue May 18 23:38:08 2004 @@ -125,12 +125,12 @@ { unsigned long seg, num; int i,j; - + memset(rom_pages, 0, sizeof(rom_pages)); memset(pmeg_vaddr, 0, sizeof(pmeg_vaddr)); memset(pmeg_alloc, 0, sizeof(pmeg_alloc)); memset(pmeg_ctx, 0, sizeof(pmeg_ctx)); - + /* pmeg align the end of bootmem, adding another pmeg, * later bootmem allocations will likely need it */ bootmem_end = (bootmem_end + (2 * SUN3_PMEG_SIZE)) & ~SUN3_PMEG_MASK; @@ -148,7 +148,7 @@ /* liberate all existing mappings in the rest of kernel space */ for(seg = bootmem_end; seg < 0x0f800000; seg += SUN3_PMEG_SIZE) { i = sun3_get_segmap(seg); - + if(!pmeg_alloc[i]) { #ifdef DEBUG_MMU_EMU printk("freed: "); @@ -179,13 +179,13 @@ pmeg_alloc[sun3_get_segmap(seg)] = 2; } } - + dvma_init(); - - + + /* blank everything below the kernel, and we've got the base mapping to start all the contexts off with... */ - for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE) + for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE) sun3_put_segmap(seg, SUN3_INVALID_PMEG); set_fs(MAKE_MM_SEG(3)); @@ -195,7 +195,7 @@ (*(romvec->pv_setctxt))(j, (void *)seg, i); } set_fs(KERNEL_DS); - + } /* erase the mappings for a dead context. Uses the pg_dir for hints @@ -207,9 +207,9 @@ { unsigned char oldctx; unsigned long i; - + if(context) { - if(!ctx_alloc[context]) + if(!ctx_alloc[context]) panic("clear_context: context not allocated\n"); ctx_alloc[context]->context = SUN3_INVALID_CONTEXT; @@ -229,7 +229,7 @@ pmeg_vaddr[i] = 0; } } - + sun3_put_context(oldctx); } @@ -239,7 +239,7 @@ sure it could be much more intellegent... but it gets the job done for now without much overhead in making it's decision. */ /* todo: come up with optimized scheme for flushing contexts */ -unsigned long get_free_context(struct mm_struct *mm) +unsigned long get_free_context(struct mm_struct *mm) { unsigned long new = 1; static unsigned char next_to_die = 1; @@ -259,7 +259,7 @@ break; } // check to make sure one was really free... - if(new == CONTEXTS_NUM) + if(new == CONTEXTS_NUM) panic("get_free_context: failed to find free context"); } @@ -307,7 +307,7 @@ if(vaddr >= PAGE_OFFSET) { /* map kernel pmegs into all contexts */ unsigned char i; - + for(i = 0; i < CONTEXTS_NUM; i++) { sun3_put_context(i); sun3_put_segmap (vaddr, curr_pmeg); @@ -315,7 +315,7 @@ sun3_put_context(context); pmeg_alloc[curr_pmeg] = 2; pmeg_ctx[curr_pmeg] = 0; - + } else { pmeg_alloc[curr_pmeg] = 1; @@ -326,7 +326,7 @@ pmeg_vaddr[curr_pmeg] = vaddr; /* Set hardware mapping and clear the old PTE entries. */ - for (i=0; imm->context; - if(kernel_fault) + if(kernel_fault) crp = swapper_pg_dir; else crp = current->mm->pgd; @@ -390,11 +390,11 @@ pte = (pte_t *) __va ((unsigned long)(pte + offset)); /* Make sure this is a valid page */ - if (!(pte_val (*pte) & SUN3_PAGE_VALID)) + if (!(pte_val (*pte) & SUN3_PAGE_VALID)) return 0; /* Make sure there's a pmeg allocated for the page */ - if (sun3_get_segmap (vaddr&~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) + if (sun3_get_segmap (vaddr&~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) mmu_emu_map_pmeg (context, vaddr); /* Write the pte value to hardware MMU */ @@ -409,7 +409,7 @@ if (pte_val (*pte) & SUN3_PAGE_WRITEABLE) pte_val (*pte) |= (SUN3_PAGE_ACCESSED | SUN3_PAGE_MODIFIED); - else + else return 0; /* Write-protect error. */ } else pte_val (*pte) |= SUN3_PAGE_ACCESSED; diff -Nru a/arch/m68k/sun3/prom/init.c b/arch/m68k/sun3/prom/init.c --- a/arch/m68k/sun3/prom/init.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/sun3/prom/init.c Tue May 18 23:38:09 2004 @@ -73,7 +73,7 @@ if((prom_root_node == 0) || (prom_root_node == -1)) prom_halt(); - if((((unsigned long) prom_nodeops) == 0) || + if((((unsigned long) prom_nodeops) == 0) || (((unsigned long) prom_nodeops) == -1)) prom_halt(); diff -Nru a/arch/m68k/sun3/sun3dvma.c b/arch/m68k/sun3/sun3dvma.c --- a/arch/m68k/sun3/sun3dvma.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/sun3/sun3dvma.c Tue May 18 23:38:08 2004 @@ -52,21 +52,21 @@ static unsigned long long dvma_alloc_bytes; static unsigned long long dvma_free_bytes; -static void print_use(void) +static void print_use(void) { - + int i; int j = 0; printk("dvma entry usage:\n"); - + for(i = 0; i < IOMMU_TOTAL_ENTRIES; i++) { if(!iommu_use[i]) continue; - + j++; - printk("dvma entry: %08lx len %08lx\n", + printk("dvma entry: %08lx len %08lx\n", ( i << DVMA_PAGE_SHIFT) + DVMA_START, iommu_use[i]); } @@ -74,28 +74,28 @@ printk("%d entries in use total\n", j); printk("allocation/free calls: %lu/%lu\n", dvma_allocs, dvma_frees); - printk("allocation/free bytes: %Lx/%Lx\n", dvma_alloc_bytes, + printk("allocation/free bytes: %Lx/%Lx\n", dvma_alloc_bytes, dvma_free_bytes); } static void print_holes(struct list_head *holes) { - + struct list_head *cur; struct hole *hole; printk("listing dvma holes\n"); list_for_each(cur, holes) { hole = list_entry(cur, struct hole, list); - + if((hole->start == 0) && (hole->end == 0) && (hole->size == 0)) continue; - + printk("hole: start %08lx end %08lx size %08lx\n", hole->start, hole->end, hole->size); } - + printk("end of hole listing...\n"); - + } #endif /* DVMA_DEBUG */ @@ -106,7 +106,7 @@ struct hole *prev = NULL; struct list_head *cur; int ret = 0; - + list_for_each(cur, &hole_list) { hole = list_entry(cur, struct hole, list); @@ -114,7 +114,7 @@ prev = hole; continue; } - + if(hole->end == prev->start) { hole->size += prev->size; hole->end = prev->end; @@ -122,12 +122,12 @@ list_add(&(prev->list), &hole_cache); ret++; } - + } return ret; } - + static inline struct hole *rmcache(void) { struct hole *ret; @@ -148,7 +148,7 @@ static inline unsigned long get_baddr(int len, unsigned long align) { - + struct list_head *cur; struct hole *hole; @@ -166,11 +166,11 @@ hole = list_entry(cur, struct hole, list); - if(align > DVMA_PAGE_SIZE) + if(align > DVMA_PAGE_SIZE) newlen = len + ((hole->end - len) & (align-1)); else newlen = len; - + if(hole->size > newlen) { hole->end -= newlen; hole->size -= newlen; @@ -200,7 +200,7 @@ static inline int free_baddr(unsigned long baddr) { - + unsigned long len; struct hole *hole; struct list_head *cur; @@ -219,7 +219,7 @@ list_for_each(cur, &hole_list) { hole = list_entry(cur, struct hole, list); - + if(hole->end == baddr) { hole->end += len; hole->size += len; @@ -233,21 +233,21 @@ } hole = rmcache(); - + hole->start = baddr; hole->end = baddr + len; hole->size = len; - + // list_add_tail(&(hole->list), cur); list_add(&(hole->list), cur); - + return 0; - + } void dvma_init(void) { - + struct hole *hole; int i; @@ -255,14 +255,14 @@ INIT_LIST_HEAD(&hole_cache); /* prepare the hole cache */ - for(i = 0; i < 64; i++) + for(i = 0; i < 64; i++) list_add(&(initholes[i].list), &hole_cache); - + hole = rmcache(); hole->start = DVMA_START; hole->end = DVMA_END; hole->size = DVMA_SIZE; - + list_add(&(hole->list), &hole_list); memset(iommu_use, 0, sizeof(iommu_use)); @@ -291,7 +291,7 @@ } #ifdef DEBUG - printk("dvma_map request %08lx bytes from %08lx\n", + printk("dvma_map request %08lx bytes from %08lx\n", len, kaddr); #endif off = kaddr & ~DVMA_PAGE_MASK; @@ -309,7 +309,7 @@ if(!dvma_map_iommu(kaddr, baddr, len)) return (baddr + off); - + printk("dvma_map failed kaddr %lx baddr %lx len %x\n", kaddr, baddr, len); BUG(); return 0; @@ -318,14 +318,14 @@ void dvma_unmap(void *baddr) { unsigned long addr; - + addr = (unsigned long)baddr; /* check if this is a vme mapping */ if(!(addr & 0x00f00000)) addr |= 0xf00000; - + free_baddr(addr); - + return; } diff -Nru a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c --- a/arch/m68k/sun3/sun3ints.c Tue May 18 23:38:09 2004 +++ b/arch/m68k/sun3/sun3ints.c Tue May 18 23:38:09 2004 @@ -28,7 +28,7 @@ void sun3_enable_interrupts(void) { sun3_enable_irq(0); -} +} int led_pattern[8] = { ~(0x80), ~(0x01), @@ -67,7 +67,7 @@ static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp) { sun3_do_irq(irq,fp); - if(!(kstat_cpu(0).irqs[SYS_IRQS + irq] % 2000)) + if(!(kstat_cpu(0).irqs[SYS_IRQS + irq] % 2000)) sun3_leds(led_pattern[(kstat_cpu(0).irqs[SYS_IRQS+irq]%16000) /2000]); return IRQ_HANDLED; @@ -125,7 +125,7 @@ for(i = 0; i < (SUN3_INT_VECS-1); i++) { if(sun3_vechandler[i] != NULL) { - seq_printf(p, "vec %3d: %10u %s\n", i+64, + seq_printf(p, "vec %3d: %10u %s\n", i+64, vec_ints[i], (vec_names[i]) ? vec_names[i] : "sun3_vechandler"); @@ -166,12 +166,12 @@ dev_names[i], NULL); } - for(i = 0; i < 192; i++) + for(i = 0; i < 192; i++) sun3_vechandler[i] = NULL; - + sun3_vechandler[191] = sun3_vec255; } - + int sun3_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) { @@ -181,11 +181,11 @@ printk("sun3_request_irq: request for irq %d -- already taken!\n", irq); return 1; } - + sun3_inthandler[irq] = handler; dev_ids[irq] = dev_id; dev_names[irq] = devname; - + /* setting devname would be nice */ cpu_request_irq(irq, sun3_default_handler[irq], 0, devname, NULL); @@ -205,7 +205,7 @@ vec_ids[vec] = dev_id; vec_names[vec] = devname; vec_ints[vec] = 0; - + return 0; } } @@ -214,16 +214,16 @@ return 1; } - + void sun3_free_irq(unsigned int irq, void *dev_id) { if(irq < SYS_IRQS) { - if(sun3_inthandler[irq] == NULL) + if(sun3_inthandler[irq] == NULL) panic("sun3_free_int: attempt to free unused irq %d\n", irq); if(dev_ids[irq] != dev_id) panic("sun3_free_int: incorrect dev_id for irq %d\n", irq); - + sun3_inthandler[irq] = NULL; return; } else if((irq >= 64) && (irq <= 255)) { @@ -234,12 +234,12 @@ panic("sun3_free_int: attempt to free unused vector %d\n", irq); if(vec_ids[irq] != dev_id) panic("sun3_free_int: incorrect dev_id for vec %d\n", irq); - + sun3_vechandler[vec] = NULL; return; } else { panic("sun3_free_irq: invalid irq %d\n", irq); - } + } } irqreturn_t sun3_process_int(int irq, struct pt_regs *regs) @@ -249,7 +249,7 @@ int vec; vec = irq - 64; - if(sun3_vechandler[vec] == NULL) + if(sun3_vechandler[vec] == NULL) panic ("bad interrupt vector %d received\n",irq); vec_ints[vec]++; diff -Nru a/arch/m68k/sun3x/config.c b/arch/m68k/sun3x/config.c --- a/arch/m68k/sun3x/config.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/sun3x/config.c Tue May 18 23:38:05 2004 @@ -33,12 +33,12 @@ static int sun3x_get_hardware_list(char *buffer) { - + int len = 0; len += sprintf(buffer + len, "PROM Revision:\t%s\n", romvec->pv_monid); - + return len; } @@ -62,7 +62,7 @@ mach_request_irq = sun3_request_irq; mach_free_irq = sun3_free_irq; mach_process_int = sun3_process_int; - + mach_gettimeoffset = sun3x_gettimeoffset; mach_reset = sun3x_reboot; @@ -70,10 +70,14 @@ mach_get_model = sun3_get_model; mach_get_hardware_list = sun3x_get_hardware_list; +#if defined(CONFIG_DUMMY_CONSOLE) + conswitchp = &dummy_con; +#endif + sun3_intreg = (unsigned char *)SUN3X_INTREG; /* only the serial console is known to work anyway... */ -#if 0 +#if 0 switch (*(unsigned char *)SUN3X_EEPROM_CONS) { case 0x10: serial_console = 1; diff -Nru a/arch/m68k/sun3x/dvma.c b/arch/m68k/sun3x/dvma.c --- a/arch/m68k/sun3x/dvma.c Tue May 18 23:38:05 2004 +++ b/arch/m68k/sun3x/dvma.c Tue May 18 23:38:05 2004 @@ -1,11 +1,11 @@ /* * Virtual DMA allocation * - * (C) 1999 Thomas Bogendoerfer (tsbogend@alpha.franken.de) + * (C) 1999 Thomas Bogendoerfer (tsbogend@alpha.franken.de) * - * 11/26/2000 -- disabled the existing code because it didn't work for - * me in 2.4. Replaced with a significantly more primitive version - * similar to the sun3 code. the old functionality was probably more + * 11/26/2000 -- disabled the existing code because it didn't work for + * me in 2.4. Replaced with a significantly more primitive version + * similar to the sun3 code. the old functionality was probably more * desirable, but.... -- Sam Creasey (sammy@oh.verio.com) * */ @@ -42,8 +42,8 @@ static volatile unsigned long *iommu_pte = (unsigned long *)SUN3X_IOMMU; -#define dvma_entry_paddr(index) (iommu_pte[index] & IOMMU_ADDR_MASK) -#define dvma_entry_vaddr(index,paddr) ((index << DVMA_PAGE_SHIFT) | \ +#define dvma_entry_paddr(index) (iommu_pte[index] & IOMMU_ADDR_MASK) +#define dvma_entry_vaddr(index,paddr) ((index << DVMA_PAGE_SHIFT) | \ (paddr & (DVMA_PAGE_SIZE-1))) #if 0 #define dvma_entry_set(index,addr) (iommu_pte[index] = \ @@ -80,7 +80,7 @@ /* create a virtual mapping for a page assigned within the IOMMU so that the cpu can reach it easily */ -inline int dvma_map_cpu(unsigned long kaddr, +inline int dvma_map_cpu(unsigned long kaddr, unsigned long vaddr, int len) { pgd_t *pgd; @@ -97,7 +97,7 @@ kaddr, vaddr); #endif pgd = pgd_offset_k(vaddr); - + do { pmd_t *pmd; unsigned long end2; @@ -107,7 +107,7 @@ goto out; } - if((end & PGDIR_MASK) > (vaddr & PGDIR_MASK)) + if((end & PGDIR_MASK) > (vaddr & PGDIR_MASK)) end2 = (vaddr + (PGDIR_SIZE-1)) & PGDIR_MASK; else end2 = end; @@ -121,7 +121,7 @@ goto out; } - if((end2 & PMD_MASK) > (vaddr & PMD_MASK)) + if((end2 & PMD_MASK) > (vaddr & PMD_MASK)) end3 = (vaddr + (PMD_SIZE-1)) & PMD_MASK; else end3 = end2; @@ -131,17 +131,17 @@ printk("mapping %08lx phys to %08lx\n", __pa(kaddr), vaddr); #endif - set_pte(pte, pfn_pte(virt_to_pfn(kaddr), + set_pte(pte, pfn_pte(virt_to_pfn(kaddr), PAGE_KERNEL)); pte++; kaddr += PAGE_SIZE; vaddr += PAGE_SIZE; } while(vaddr < end3); - + } while(vaddr < end2); } while(vaddr < end); - + flush_tlb_all(); out: @@ -150,13 +150,13 @@ inline int dvma_map_iommu(unsigned long kaddr, unsigned long baddr, - int len) + int len) { unsigned long end, index; index = baddr >> DVMA_PAGE_SHIFT; end = ((baddr+len) >> DVMA_PAGE_SHIFT); - + if(len & ~DVMA_PAGE_MASK) end++; @@ -169,12 +169,12 @@ iommu_pte[index] |= IOMMU_FULL_BLOCK; // dvma_entry_inc(index); - + kaddr += DVMA_PAGE_SIZE; } -#ifdef DEBUG - for(index = (baddr >> DVMA_PAGE_SHIFT); index < end; index++) +#ifdef DEBUG + for(index = (baddr >> DVMA_PAGE_SHIFT); index < end; index++) dvma_print(index << DVMA_PAGE_SHIFT); #endif return 0; @@ -185,17 +185,17 @@ { int index, end; - - + + index = baddr >> DVMA_PAGE_SHIFT; end = (DVMA_PAGE_ALIGN(baddr+len) >> DVMA_PAGE_SHIFT); - + for(; index < end ; index++) { #ifdef DEBUG printk("freeing bus mapping %08x\n", index << DVMA_PAGE_SHIFT); #endif #if 0 - if(!dvma_entry_use(index)) + if(!dvma_entry_use(index)) printk("dvma_unmap freeing unused entry %04x\n", index); else diff -Nru a/arch/m68k/sun3x/prom.c b/arch/m68k/sun3x/prom.c --- a/arch/m68k/sun3x/prom.c Tue May 18 23:38:07 2004 +++ b/arch/m68k/sun3x/prom.c Tue May 18 23:38:07 2004 @@ -119,13 +119,13 @@ * XXX this is futile since we restore the vbr first - oops */ vectors[VEC_TRAP14] = sun3x_prom_abort; - + /* If debug=prom was specified, start the debug console */ if (!strcmp(m68k_debug_device, "prom")) register_console(&sun3x_debug); - + } /* some prom functions to export */ @@ -159,7 +159,7 @@ int i; /* make a copy of the idprom structure */ - for(i = 0; i < num_bytes; i++) + for(i = 0; i < num_bytes; i++) idbuf[i] = ((char *)SUN3X_IDPROM)[i]; return idbuf[0]; diff -Nru a/arch/m68k/sun3x/time.c b/arch/m68k/sun3x/time.c --- a/arch/m68k/sun3x/time.c Tue May 18 23:38:08 2004 +++ b/arch/m68k/sun3x/time.c Tue May 18 23:38:08 2004 @@ -39,12 +39,12 @@ int sun3x_hwclk(int set, struct rtc_time *t) { - volatile struct mostek_dt *h = + volatile struct mostek_dt *h = (struct mostek_dt *)(SUN3X_EEPROM+M_CONTROL); unsigned long flags; local_irq_save(flags); - + if(set) { h->csr |= C_WRITE; h->sec = BIN2BCD(t->tm_sec); @@ -85,16 +85,16 @@ /* Clear the pending interrupt - pulse the enable line low */ disable_irq(5); enable_irq(5); - + vector(irq, NULL, regs); } #endif void __init sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) { - + sun3_disable_interrupts(); - + /* Pulse enable low to get the clock started */ sun3_disable_irq(5); diff -Nru a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c --- a/arch/m68knommu/kernel/process.c Tue May 18 23:38:06 2004 +++ b/arch/m68knommu/kernel/process.c Tue May 18 23:38:06 2004 @@ -404,12 +404,6 @@ return error; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long fp, pc; @@ -425,7 +419,7 @@ fp >= 8184+stack_page) return 0; pc = ((unsigned long *)fp)[1]; - if (pc < first_sched || pc >= last_sched) + if (!in_sched_functions(pc)) return pc; fp = *(unsigned long *) fp; } while (count++ < 16); @@ -440,8 +434,7 @@ struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp; /* Check whether the thread is blocked in resume() */ - if (sw->retpc > (unsigned long)scheduling_functions_start_here && - sw->retpc < (unsigned long)scheduling_functions_end_here) + if (in_sched_functions(sw->retpc)) return ((unsigned long *)sw->a6)[1]; else return sw->retpc; diff -Nru a/arch/mips/Kconfig b/arch/mips/Kconfig --- a/arch/mips/Kconfig Tue May 18 23:38:07 2004 +++ b/arch/mips/Kconfig Tue May 18 23:38:07 2004 @@ -39,6 +39,7 @@ config ACER_PICA_61 bool "Support for Acer PICA 1 chipset (EXPERIMENTAL)" depends on MACH_JAZZ && EXPERIMENTAL + select DMA_NONCOHERENT help This is a machine with a R4400 133/150 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on @@ -48,6 +49,7 @@ config MIPS_MAGNUM_4000 bool "Support for MIPS Magnum 4000" depends on MACH_JAZZ + select DMA_NONCOHERENT help This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on @@ -57,6 +59,7 @@ config OLIVETTI_M700 bool "Support for Olivetti M700-10" depends on MACH_JAZZ + select DMA_NONCOHERENT help This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on @@ -77,23 +80,27 @@ config CASIO_E55 bool "Support for CASIO CASSIOPEIA E-10/15/55/65" depends on MACH_VR41XX + select DMA_NONCOHERENT select IRQ_CPU select ISA config IBM_WORKPAD bool "Support for IBM WorkPad z50" depends on MACH_VR41XX + select DMA_NONCOHERENT select IRQ_CPU select ISA config NEC_EAGLE bool "Support for NEC Eagle/Hawk board" + select DMA_NONCOHERENT select IRQ_CPU depends on MACH_VR41XX config TANBAC_TB0226 bool "Support for TANBAC TB0226 (Mbase)" depends on MACH_VR41XX + select DMA_NONCOHERENT select IRQ_CPU help The TANBAC TB0226 (Mbase) is a MIPS-based platform manufactured by TANBAC. @@ -102,6 +109,7 @@ config TANBAC_TB0229 bool "Support for TANBAC TB0229 (VR4131DIMM)" depends on MACH_VR41XX + select DMA_NONCOHERENT select IRQ_CPU help The TANBAC TB0229 (VR4131DIMM) is a MIPS-based platform manufactured by TANBAC. @@ -109,25 +117,42 @@ config VICTOR_MPC30X bool "Support for Victor MP-C303/304" + select DMA_NONCOHERENT select IRQ_CPU depends on MACH_VR41XX config ZAO_CAPCELLA bool "Support for ZAO Networks Capcella" depends on MACH_VR41XX + select DMA_NONCOHERENT select IRQ_CPU +config VRC4171 + tristate "add NEC VRC4171 companion chip support" + depends on MACH_VR41XX && ISA + ---help--- + The NEC VRC4171/4171A is a companion chip for NEC VR4111/VR4121. + +config VRC4173 + tristate "add NEC VRC4173 companion chip support" + depends on MACH_VR41XX && PCI + ---help--- + The NEC VRC4173 is a companion chip for NEC VR4122/VR4131. + config TOSHIBA_JMR3927 bool "Support for Toshiba JMR-TX3927 board" depends on MIPS32 + select DMA_NONCOHERENT config MIPS_COBALT bool "Support for Cobalt Server (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_NONCOHERENT select IRQ_CPU config MACH_DECSTATION bool "Support for DECstations" + select DMA_NONCOHERENT select IRQ_CPU depends on MIPS32 || EXPERIMENTAL ---help--- @@ -148,6 +173,7 @@ config MIPS_EV64120 bool "Support for Galileo EV64120 Evaluation board (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_NONCOHERENT help This is an evaluation board based on the Galileo GT-64120 single-chip system controller that contains a MIPS R5000 compatible @@ -162,6 +188,7 @@ config MIPS_EV96100 bool "Support for Galileo EV96100 Evaluation board (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_NONCOHERENT select IRQ_CPU select MIPS_GT96100 select RM7000_CPU_SCACHE @@ -173,6 +200,7 @@ config MIPS_IVR bool "Support for Globespan IVR board" + select DMA_NONCOHERENT help This is an evaluation board built by Globespan to showcase thir iVR (Internet Video Recorder) design. It utilizes a QED RM5231 @@ -182,6 +210,7 @@ config LASAT bool "Support for LASAT Networks platforms" + select DMA_NONCOHERENT select R5000_CPU_SCACHE config PICVUE @@ -203,10 +232,12 @@ config HP_LASERJET bool "Support for Hewlett Packard LaserJet board" depends on BROKEN + select DMA_NONCOHERENT select IRQ_CPU config MIPS_ITE8172 bool "Support for ITE 8172G board" + select DMA_NONCOHERENT help Ths is an evaluation board made by ITE with ATX form factor that utilizes a MIPS R5000 to work with its @@ -225,6 +256,7 @@ config MIPS_ATLAS bool "Support for MIPS Atlas board" + select DMA_NONCOHERENT help This enables support for the QED R5231-based MIPS Atlas evaluation board. @@ -232,17 +264,20 @@ config MIPS_MALTA bool "Support for MIPS Malta board" select HAVE_STD_PC_SERIAL_PORT + select DMA_NONCOHERENT help This enables support for the VR5000-based MIPS Malta evaluation board. config MIPS_SEAD bool "Support for MIPS SEAD board (EXPERIMENTAL)" - select IRQ_CPU depends on EXPERIMENTAL + select IRQ_CPU + select DMA_NONCOHERENT config MOMENCO_OCELOT bool "Support for Momentum Ocelot board" + select DMA_NONCOHERENT select IRQ_CPU select IRQ_CPU_RM7K select RM7000_CPU_SCACHE @@ -252,6 +287,7 @@ config MOMENCO_OCELOT_G bool "Support for Momentum Ocelot-G board" + select DMA_NONCOHERENT select IRQ_CPU select IRQ_CPU_RM7K select RM7000_CPU_SCACHE @@ -261,6 +297,7 @@ config MOMENCO_OCELOT_C bool "Support for Momentum Ocelot-C board" + select DMA_NONCOHERENT select IRQ_CPU select RM7000_CPU_SCACHE help @@ -269,6 +306,7 @@ config MOMENCO_JAGUAR_ATX bool "Support for Momentum Jaguar board" + select DMA_NONCOHERENT select IRQ_CPU select IRQ_CPU_RM7K select LIMITED_DMA @@ -286,6 +324,7 @@ config PMC_YOSEMITE bool "Support for PMC-Sierra Yosemite eval board" + select DMA_NONCOHERENT help Yosemite is an evaluation board for the RM9000x2 processor manufactured by PMC-Sierra @@ -297,6 +336,7 @@ config DDB5074 bool "Support for NEC DDB Vrc-5074 (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_NONCOHERENT select HAVE_STD_PC_SERIAL_PORT select IRQ_CPU select ISA @@ -306,6 +346,7 @@ config DDB5476 bool "Support for NEC DDB Vrc-5476" + select DMA_NONCOHERENT select HAVE_STD_PC_SERIAL_PORT select IRQ_CPU select ISA @@ -319,6 +360,7 @@ config DDB5477 bool "Support for NEC DDB Vrc-5477" + select DMA_NONCOHERENT select IRQ_CPU help This enables support for the R5432-based NEC DDB Vrc-5477, @@ -334,10 +376,12 @@ config NEC_OSPREY bool "Support for NEC Osprey board" + select DMA_NONCOHERENT select IRQ_CPU config SGI_IP22 bool "Support for SGI IP22 (Indy/Indigo2)" + select DMA_NONCOHERENT select IP22_CPU_SCACHE select IRQ_CPU help @@ -348,6 +392,7 @@ config SGI_IP27 bool "Support for SGI IP27 (Origin200/2000)" depends on MIPS64 + select DMA_IP27 help This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics workstations. To compile a Linux kernel that runs on these, say Y @@ -411,6 +456,7 @@ config SGI_IP32 bool "Support for SGI IP32 (O2) (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_NONCOHERENT select R5000_CPU_SCACHE select RM7000_CPU_SCACHE help @@ -452,30 +498,37 @@ config MIPS_PB1000 bool "PB1000 board" depends on SOC_AU1000 + select DMA_NONCOHERENT config MIPS_PB1100 bool "PB1100 board" depends on SOC_AU1100 + select DMA_NONCOHERENT config MIPS_PB1500 bool "PB1500 board" depends on SOC_AU1500 + select DMA_NONCOHERENT config MIPS_PB1550 bool "PB1550 board" depends on SOC_AU1550 + select DMA_NONCOHERENT config MIPS_DB1000 bool "DB1000 board" depends on SOC_AU1000 + select DMA_NONCOHERENT config MIPS_DB1100 bool "DB1100 board" depends on SOC_AU1100 + select DMA_NONCOHERENT config MIPS_DB1500 bool "DB1500 board" depends on SOC_AU1500 + select DMA_NONCOHERENT config MIPS_DB1550 bool "DB1550 board" @@ -484,24 +537,29 @@ config MIPS_BOSPORUS bool "Bosporus board" depends on SOC_AU1500 + select DMA_NONCOHERENT config MIPS_MIRAGE bool "Mirage board" depends on SOC_AU1500 + select DMA_NONCOHERENT config MIPS_XXS1500 bool "MyCable XXS1500 board" depends on SOC_AU1500 + select DMA_NONCOHERENT config MIPS_MTX1 bool "4G Systems MTX-1 board" depends on SOC_AU1500 + select DMA_NONCOHERENT endchoice config SIBYTE_SB1xxx_SOC bool "Support for Broadcom BCM1xxx SOCs (EXPERIMENTAL)" depends on EXPERIMENTAL + select DMA_COHERENT choice prompt "BCM1xxx SOC-based board" @@ -710,6 +768,7 @@ config SNI_RM200_PCI bool "Support for SNI RM200 PCI" + select DMA_NONCOHERENT select HAVE_STD_PC_SERIAL_PORT select ISA help @@ -720,8 +779,9 @@ config TOSHIBA_RBTX4927 bool "Support for Toshiba TBTX49[23]7 board" - select ISA depends on MIPS32 + select DMA_NONCOHERENT + select ISA config RWSEM_GENERIC_SPINLOCK bool @@ -744,18 +804,12 @@ config DMA_COHERENT bool - depends on SIBYTE_SB1xxx_SOC - default y config DMA_IP27 bool - depends on SGI_IP27 - default y config DMA_NONCOHERENT bool - depends on ZAO_CAPCELLA || VICTOR_MPC30X || TOSHIBA_JMR3927 || TOSHIBA_RBTX4927 || SNI_RM200_PCI || SGI_IP32 || SGI_IP22 || NEC_EAGLE || NEC_OSPREY || DDB5477 || DDB5476 || DDB5074 || MOMENCO_OCELOT || MOMENCO_OCELOT_C || MOMENCO_OCELOT_G || MOMENCO_JAGUAR_ATX || MIPS_BOSPORUS || MIPS_DB1000 || MIPS_DB1100 || MIPS_DB1500 || MIPS_SEAD || MIPS_MALTA || MIPS_MAGNUM_4000 || MIPS_MIRAGE || MIPS_MTX1 || MIPS_XXS1500 || OLIVETTI_M700 || MIPS_ATLAS || LASAT || MIPS_ITE8172 || IBM_WORKPAD || HP_LASERJET || MIPS_IVR || MIPS_EV96100 || MIPS_EV64120 || MACH_DECSTATION || MIPS_COBALT || MIPS_PB1500 || MIPS_PB1100 || MIPS_PB1000 || MIPS_PB1550 || CASIO_E55 || ACER_PICA_61 || TANBAC_TB0226 || TANBAC_TB0229 - default y config EARLY_PRINTK bool @@ -811,14 +865,6 @@ depends on ZAO_CAPCELLA || VICTOR_MPC30X || SIBYTE_SB1xxx_SOC || NEC_EAGLE || NEC_OSPREY || DDB5477 || CASIO_E55 || TANBAC_TB0226 || TANBAC_TB0229 default y -config VRC4171 - tristate "NEC VRC4171 Support" - depends on IBM_WORKPAD - -config VRC4173 - tristate "NEC VRC4173 Support" - depends on NEC_EAGLE || VICTOR_MPC30X - config DDB5XXX_COMMON bool depends on DDB5074 || DDB5476 || DDB5477 @@ -1170,7 +1216,7 @@ config CPU_HAS_PREFETCH bool "Enable prefetches" if CPU_SB1 && !CPU_SB1_PASS_2 - default y if CPU_MIPS32 || CPU_MIPS64 || CPU_RM7000 || CPU_RM9000 + default y if CPU_MIPS32 || CPU_MIPS64 || CPU_RM7000 || CPU_RM9000 || CPU_R10000 config VTAG_ICACHE bool "Support for Virtual Tagged I-cache" if CPU_MIPS64 || CPU_MIPS32 diff -Nru a/arch/mips/au1000/common/Makefile b/arch/mips/au1000/common/Makefile --- a/arch/mips/au1000/common/Makefile Tue May 18 23:38:09 2004 +++ b/arch/mips/au1000/common/Makefile Tue May 18 23:38:09 2004 @@ -7,7 +7,7 @@ # obj-y += prom.o int-handler.o irq.o puts.o time.o reset.o \ - au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o + au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o cputable.o obj-$(CONFIG_AU1X00_USB_DEVICE) += usbdev.o obj-$(CONFIG_KGDB) += dbg_io.o diff -Nru a/arch/mips/au1000/common/cputable.c b/arch/mips/au1000/common/cputable.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/mips/au1000/common/cputable.c Tue May 18 23:38:09 2004 @@ -0,0 +1,56 @@ +/* + * arch/mips/au1000/common/cputable.c + * + * Copyright (C) 2004 Dan Malek (dan@embeddededge.com) + * Copied from PowerPC and updated for Alchemy Au1xxx processors. + * + * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include +#include + +struct cpu_spec* cur_cpu_spec[NR_CPUS]; + +/* With some thought, we can probably use the mask to reduce the + * size of the table. + */ +struct cpu_spec cpu_specs[] = { + { 0xffffffff, 0x00030100, "Au1000 DA", 1, 0 }, + { 0xffffffff, 0x00030201, "Au1000 HA", 1, 0 }, + { 0xffffffff, 0x00030202, "Au1000 HB", 1, 0 }, + { 0xffffffff, 0x00030203, "Au1000 HC", 1, 1 }, + { 0xffffffff, 0x00030204, "Au1000 HD", 1, 1 }, + { 0xffffffff, 0x01030200, "Au1500 AB", 1, 1 }, + { 0xffffffff, 0x01030201, "Au1500 AC", 0, 1 }, + { 0xffffffff, 0x01030202, "Au1500 AD", 0, 1 }, + { 0xffffffff, 0x02030200, "Au1100 AB", 1, 1 }, + { 0xffffffff, 0x02030201, "Au1100 BA", 1, 1 }, + { 0xffffffff, 0x02030202, "Au1100 BC", 1, 1 }, + { 0xffffffff, 0x02030203, "Au1100 BD", 0, 1 }, + { 0xffffffff, 0x02030204, "Au1100 BE", 0, 1 }, + { 0xffffffff, 0x03030200, "Au1550 AA", 0, 1 }, + { 0x00000000, 0x00000000, "Unknown Au1xxx", 1, 0 }, +}; + +void +set_cpuspec(void) +{ + struct cpu_spec *sp; + u32 prid; + + prid = read_c0_prid(); + sp = cpu_specs; + while ((prid & sp->prid_mask) != sp->prid_value) + sp++; + cur_cpu_spec[0] = sp; +} diff -Nru a/arch/mips/au1000/common/power.c b/arch/mips/au1000/common/power.c --- a/arch/mips/au1000/common/power.c Tue May 18 23:38:09 2004 +++ b/arch/mips/au1000/common/power.c Tue May 18 23:38:09 2004 @@ -320,7 +320,7 @@ unsigned long val, pll; #define TMPBUFLEN 64 #define MAX_CPU_FREQ 396 - char buf[8], *p; + char buf[TMPBUFLEN], *p; unsigned long flags, intc0_mask, intc1_mask; unsigned long old_baud_base, old_cpu_freq, baud_rate, old_clk, old_refresh; diff -Nru a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c --- a/arch/mips/au1000/common/setup.c Tue May 18 23:38:09 2004 +++ b/arch/mips/au1000/common/setup.c Tue May 18 23:38:09 2004 @@ -65,40 +65,20 @@ static int __init au1x00_setup(void) { + struct cpu_spec *sp; char *argptr; unsigned long prid, cpupll, bclk = 1; - /* Various early Au1000 Errata corrected by this */ - set_c0_config(1<<19); /* Config[OD] */ + set_cpuspec(); + sp = cur_cpu_spec[0]; board_setup(); /* board specific setup */ prid = read_c0_prid(); - switch (prid) - { - case 0x00030100: printk("Au1000 DA "); bclk = 0; break; - case 0x00030201: printk("Au1000 HA "); bclk = 0; break; - case 0x00030202: printk("Au1000 HB "); bclk = 0; break; - case 0x00030203: printk("Au1000 HC "); break; - case 0x00030204: printk("Au1000 HD "); break; - - case 0x01030200: printk("Au1500 AB "); break; - case 0x01030201: printk("Au1500 AC "); break; - case 0x01030202: printk("Au1500 AD "); break; - - case 0x02030200: printk("Au1100 AB "); break; - case 0x02030201: printk("Au1100 BA "); break; - case 0x02030202: printk("Au1100 BC "); break; - case 0x02030203: printk("Au1100 BD "); break; - case 0x02030204: printk("Au1100 BE "); break; - - case 0x03030200: printk("Au1550 AA "); break; - - default: printk("Unknown Au1x00! "); bclk = 0; break; - } cpupll = (au_readl(0xB1900060) & 0x3F) * 12; printk("(PRId %08X) @ %dMHZ\n", prid, cpupll); + bclk = sp->cpu_bclk; if (bclk) { /* Enable BCLK switching */ @@ -106,6 +86,15 @@ au_writel(bclk | 0x60, 0xB190003C); printk("BCLK switching enabled!\n"); } + + if (sp->cpu_od) { + /* Various early Au1000 Errata corrected by this */ + set_c0_config(1<<19); /* Set Config[OD] */ + } + else { + /* Clear to obtain best system bus performance */ + clear_c0_config(1<<19); /* Clear Config[OD] */ + } argptr = prom_getcmdline(); diff -Nru a/arch/mips/configs/atlas_defconfig b/arch/mips/configs/atlas_defconfig --- a/arch/mips/configs/atlas_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/atlas_defconfig Tue May 18 23:38:09 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -289,8 +292,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -300,7 +301,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -321,12 +324,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -334,6 +337,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -359,7 +367,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -367,10 +374,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set # # Wireless LAN (non-hamradio) @@ -378,37 +387,19 @@ # CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wan interfaces # -# CONFIG_TR is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set # CONFIG_NET_FC is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# # ISDN subsystem # # CONFIG_ISDN is not set @@ -582,6 +573,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/bosporus_defconfig b/arch/mips/configs/bosporus_defconfig --- a/arch/mips/configs/bosporus_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/bosporus_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/capcella_defconfig b/arch/mips/configs/capcella_defconfig --- a/arch/mips/configs/capcella_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/capcella_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ # CONFIG_TANBAC_TB0229 is not set # CONFIG_VICTOR_MPC30X is not set CONFIG_ZAO_CAPCELLA=y +# CONFIG_VRC4173 is not set # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -251,8 +255,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -262,7 +264,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -283,12 +287,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -296,6 +300,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -321,7 +330,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -329,45 +337,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -555,6 +547,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/cobalt_defconfig b/arch/mips/configs/cobalt_defconfig --- a/arch/mips/configs/cobalt_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/cobalt_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -240,8 +243,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -251,7 +252,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -272,12 +275,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -285,6 +288,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -310,7 +318,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -318,45 +325,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -535,6 +526,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig --- a/arch/mips/configs/db1000_defconfig Tue May 18 23:38:07 2004 +++ b/arch/mips/configs/db1000_defconfig Tue May 18 23:38:07 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -250,8 +253,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -272,7 +273,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -293,6 +296,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -314,31 +322,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -354,21 +346,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -557,6 +548,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/db1100_defconfig b/arch/mips/configs/db1100_defconfig --- a/arch/mips/configs/db1100_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/db1100_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -249,8 +252,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -271,7 +272,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -292,6 +295,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -313,31 +321,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -353,21 +345,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -553,6 +544,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/db1500_defconfig b/arch/mips/configs/db1500_defconfig --- a/arch/mips/configs/db1500_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/db1500_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -329,8 +332,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -351,7 +352,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -372,6 +375,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -393,31 +401,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -433,21 +425,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -627,6 +618,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ddb5476_defconfig b/arch/mips/configs/ddb5476_defconfig --- a/arch/mips/configs/ddb5476_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ddb5476_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -251,8 +254,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -262,7 +263,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -283,12 +286,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -296,6 +299,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -328,7 +336,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -336,45 +343,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -573,6 +564,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ddb5477_defconfig b/arch/mips/configs/ddb5477_defconfig --- a/arch/mips/configs/ddb5477_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/ddb5477_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -221,8 +224,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -232,7 +233,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -253,12 +256,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -266,6 +269,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -310,7 +318,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -318,45 +325,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -532,6 +523,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/decstation_defconfig b/arch/mips/configs/decstation_defconfig --- a/arch/mips/configs/decstation_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/decstation_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -247,8 +250,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -258,7 +259,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -279,6 +282,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -300,41 +308,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -511,6 +502,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/e55_defconfig b/arch/mips/configs/e55_defconfig --- a/arch/mips/configs/e55_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/e55_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ # CONFIG_TANBAC_TB0229 is not set # CONFIG_VICTOR_MPC30X is not set # CONFIG_ZAO_CAPCELLA is not set +# CONFIG_VRC4171 is not set # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -246,8 +250,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -257,7 +259,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -278,12 +282,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -291,6 +295,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -313,42 +322,25 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set # -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -535,6 +527,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/eagle_defconfig b/arch/mips/configs/eagle_defconfig --- a/arch/mips/configs/eagle_defconfig Tue May 18 23:38:05 2004 +++ b/arch/mips/configs/eagle_defconfig Tue May 18 23:38:05 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ # CONFIG_TANBAC_TB0229 is not set # CONFIG_VICTOR_MPC30X is not set # CONFIG_ZAO_CAPCELLA is not set +CONFIG_VRC4173=y # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -88,7 +92,6 @@ CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_IRQ_CPU=y CONFIG_DUMMY_KEYB=y -CONFIG_VRC4173=y CONFIG_MIPS_L1_CACHE_SHIFT=5 # CONFIG_FB is not set @@ -329,8 +332,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -340,7 +341,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -361,12 +364,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -374,6 +377,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -399,7 +407,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -407,28 +414,17 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -444,21 +440,16 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -652,6 +643,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ev64120_defconfig b/arch/mips/configs/ev64120_defconfig --- a/arch/mips/configs/ev64120_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ev64120_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -227,8 +230,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -238,7 +239,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -259,12 +262,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -272,6 +275,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -297,7 +305,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -305,6 +312,22 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_PPP=y @@ -316,43 +339,11 @@ # CONFIG_PPP_BSDCOMP is not set # CONFIG_PPPOE is not set # CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# # ISDN subsystem # # CONFIG_ISDN is not set @@ -526,6 +517,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ev96100_defconfig b/arch/mips/configs/ev96100_defconfig --- a/arch/mips/configs/ev96100_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/ev96100_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -220,8 +223,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -231,7 +232,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -252,6 +255,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -273,41 +281,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -481,6 +472,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig --- a/arch/mips/configs/ip22_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ip22_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -32,6 +34,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -298,8 +301,6 @@ CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m CONFIG_IPV6_TUNNEL=m -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -359,6 +360,8 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m CONFIG_IP_NF_COMPAT_IPFWADM=m +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # IPv6: Netfilter Configuration @@ -382,6 +385,7 @@ CONFIG_IP6_NF_TARGET_LOG=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_IP6_NF_RAW=m CONFIG_XFRM=y CONFIG_XFRM_USER=m @@ -395,7 +399,9 @@ # CONFIG_SCTP_HMAC_SHA1 is not set CONFIG_SCTP_HMAC_MD5=y # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -440,6 +446,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y CONFIG_DUMMY=m CONFIG_BONDING=m @@ -461,41 +472,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -709,6 +703,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig --- a/arch/mips/configs/ip27_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ip27_defconfig Tue May 18 23:38:06 2004 @@ -17,8 +17,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=15 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -30,6 +32,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -112,6 +115,7 @@ CONFIG_PAGE_SIZE_4KB=y # CONFIG_PAGE_SIZE_16KB is not set # CONFIG_PAGE_SIZE_64KB is not set +CONFIG_CPU_HAS_PREFETCH=y CONFIG_CPU_HAS_LLSC=y CONFIG_CPU_HAS_LLDSCD=y CONFIG_CPU_HAS_SYNC=y @@ -206,7 +210,7 @@ # # SCSI Transport Attributes # -CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_FC_ATTRS is not set # @@ -293,8 +297,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -304,7 +306,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -320,40 +324,40 @@ # QoS and/or fair queueing # CONFIG_NET_SCHED=y -CONFIG_NET_SCH_CBQ=m -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_CSZ=m -CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_DELAY=m +CONFIG_NET_SCH_CBQ=y +CONFIG_NET_SCH_HTB=y +CONFIG_NET_SCH_HFSC=y +CONFIG_NET_SCH_CSZ=y +CONFIG_NET_SCH_PRIO=y +CONFIG_NET_SCH_RED=y +CONFIG_NET_SCH_SFQ=y +CONFIG_NET_SCH_TEQL=y +CONFIG_NET_SCH_TBF=y +CONFIG_NET_SCH_GRED=y +CONFIG_NET_SCH_DSMARK=y +CONFIG_NET_SCH_DELAY=y CONFIG_NET_QOS=y CONFIG_NET_ESTIMATOR=y CONFIG_NET_CLS=y -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_TCINDEX=y +CONFIG_NET_CLS_ROUTE4=y CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FW=y +CONFIG_NET_CLS_U32=y +CONFIG_NET_CLS_RSVP=y +CONFIG_NET_CLS_RSVP6=y CONFIG_NET_CLS_POLICE=y # # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -361,6 +365,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -389,7 +398,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -397,45 +405,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -602,6 +594,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y @@ -691,27 +684,27 @@ # CONFIG_CRYPTO=y CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA256=m -CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_BLOWFISH=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_SERPENT=y +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_CAST5=y +CONFIG_CRYPTO_CAST6=y +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_MICHAEL_MIC=y # CONFIG_CRYPTO_TEST is not set # # Library routines # CONFIG_CRC32=y -CONFIG_ZLIB_INFLATE=m -CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig --- a/arch/mips/configs/ip32_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ip32_defconfig Tue May 18 23:38:06 2004 @@ -18,8 +18,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -30,6 +32,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -289,8 +292,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -300,7 +301,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -321,12 +324,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -334,6 +337,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -360,7 +368,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -368,45 +375,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -583,6 +574,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/it8172_defconfig b/arch/mips/configs/it8172_defconfig --- a/arch/mips/configs/it8172_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/it8172_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -294,8 +297,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -305,7 +306,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -326,6 +329,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -346,41 +354,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -580,6 +571,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ivr_defconfig b/arch/mips/configs/ivr_defconfig --- a/arch/mips/configs/ivr_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ivr_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -245,8 +248,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -256,7 +257,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -277,12 +280,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -290,6 +293,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -315,7 +323,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -323,45 +330,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -538,6 +529,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/jaguar-atx_defconfig b/arch/mips/configs/jaguar-atx_defconfig --- a/arch/mips/configs/jaguar-atx_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/jaguar-atx_defconfig Tue May 18 23:38:09 2004 @@ -21,6 +21,7 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -32,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -219,10 +221,10 @@ # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -236,16 +238,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -299,14 +306,7 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices @@ -314,26 +314,17 @@ # CONFIG_TR is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set # # ISDN subsystem @@ -483,6 +474,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_TMPFS is not set # CONFIG_HUGETLB_PAGE is not set diff -Nru a/arch/mips/configs/jmr3927_defconfig b/arch/mips/configs/jmr3927_defconfig --- a/arch/mips/configs/jmr3927_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/jmr3927_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -219,8 +222,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -230,7 +231,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -251,12 +254,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -264,6 +267,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -289,7 +297,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -297,45 +304,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -547,6 +538,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_TMPFS is not set # CONFIG_HUGETLB_PAGE is not set diff -Nru a/arch/mips/configs/lasat200_defconfig b/arch/mips/configs/lasat200_defconfig --- a/arch/mips/configs/lasat200_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/lasat200_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -334,8 +337,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -345,7 +346,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -366,16 +369,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -403,7 +411,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -411,45 +418,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -630,6 +621,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig --- a/arch/mips/configs/malta_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/malta_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -233,8 +236,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -244,7 +245,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -265,12 +268,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -278,6 +281,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -322,7 +330,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -330,45 +337,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -543,6 +534,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/mirage_defconfig b/arch/mips/configs/mirage_defconfig --- a/arch/mips/configs/mirage_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/mirage_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/mpc30x_defconfig b/arch/mips/configs/mpc30x_defconfig --- a/arch/mips/configs/mpc30x_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/mpc30x_defconfig Tue May 18 23:38:09 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ # CONFIG_TANBAC_TB0229 is not set CONFIG_VICTOR_MPC30X=y # CONFIG_ZAO_CAPCELLA is not set +CONFIG_VRC4173=y # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -88,7 +92,6 @@ CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_IRQ_CPU=y CONFIG_DUMMY_KEYB=y -CONFIG_VRC4173=y CONFIG_MIPS_L1_CACHE_SHIFT=5 # CONFIG_FB is not set @@ -123,7 +126,9 @@ # # Bus options (PCI, PCMCIA, EISA, ISA, TC) # -# CONFIG_PCI is not set +CONFIG_PCI=y +CONFIG_PCI_LEGACY_PROC=y +CONFIG_PCI_NAMES=y CONFIG_MMU=y # @@ -159,8 +164,13 @@ # Block devices # # CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_LBD is not set @@ -182,6 +192,7 @@ # # Fusion MPT device support # +# CONFIG_FUSION is not set # # IEEE 1394 (FireWire) support @@ -191,6 +202,7 @@ # # I2O device support # +# CONFIG_I2O is not set # # Networking support @@ -221,8 +233,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -232,7 +242,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -253,6 +265,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -261,53 +278,66 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y # CONFIG_MII is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set # -# Ethernet (1000 Mbit) +# Tulip family network device support # +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_NET_PCI is not set # -# Ethernet (10000 Mbit) +# Ethernet (1000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set # -# Wireless LAN (non-hamradio) +# Ethernet (10000 Mbit) # -# CONFIG_NET_RADIO is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set +# CONFIG_TR is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -345,6 +375,7 @@ CONFIG_SERIO_I8042=y CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set # # Input Device Drivers @@ -442,6 +473,7 @@ # # USB support # +# CONFIG_USB is not set # # USB Gadget Support @@ -481,6 +513,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig --- a/arch/mips/configs/mtx1_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/mtx1_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ocelot_c_defconfig b/arch/mips/configs/ocelot_c_defconfig --- a/arch/mips/configs/ocelot_c_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ocelot_c_defconfig Tue May 18 23:38:06 2004 @@ -18,8 +18,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -30,6 +32,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -210,8 +213,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -221,7 +222,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -242,6 +245,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -266,41 +274,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -474,6 +465,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/ocelot_defconfig b/arch/mips/configs/ocelot_defconfig --- a/arch/mips/configs/ocelot_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/ocelot_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -218,8 +221,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -229,7 +230,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -250,6 +253,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -270,41 +278,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -478,6 +469,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/osprey_defconfig b/arch/mips/configs/osprey_defconfig --- a/arch/mips/configs/osprey_defconfig Tue May 18 23:38:05 2004 +++ b/arch/mips/configs/osprey_defconfig Tue May 18 23:38:05 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -212,8 +215,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -223,7 +224,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -244,6 +247,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -264,41 +272,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -472,6 +463,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/pb1000_defconfig b/arch/mips/configs/pb1000_defconfig --- a/arch/mips/configs/pb1000_defconfig Tue May 18 23:38:05 2004 +++ b/arch/mips/configs/pb1000_defconfig Tue May 18 23:38:05 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig --- a/arch/mips/configs/pb1100_defconfig Tue May 18 23:38:07 2004 +++ b/arch/mips/configs/pb1100_defconfig Tue May 18 23:38:07 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig --- a/arch/mips/configs/pb1500_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/pb1500_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -315,8 +318,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -337,7 +338,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -358,12 +361,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -371,6 +374,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -397,7 +405,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -405,35 +412,17 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -449,21 +438,23 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -646,6 +637,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/pb1550_defconfig b/arch/mips/configs/pb1550_defconfig --- a/arch/mips/configs/pb1550_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/pb1550_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -314,8 +317,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -336,7 +337,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -357,12 +360,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -370,6 +373,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -396,7 +404,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -404,35 +411,17 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -448,21 +437,23 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -645,6 +636,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/rm200_defconfig b/arch/mips/configs/rm200_defconfig --- a/arch/mips/configs/rm200_defconfig Tue May 18 23:38:06 2004 +++ b/arch/mips/configs/rm200_defconfig Tue May 18 23:38:06 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -32,6 +34,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -250,7 +253,7 @@ # # SCSI Transport Attributes # -CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_FC_ATTRS is not set # @@ -385,10 +388,6 @@ CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m CONFIG_IPV6_TUNNEL=m -CONFIG_DECNET=m -# CONFIG_DECNET_SIOCGIFCONF is not set -# CONFIG_DECNET_ROUTER is not set -CONFIG_BRIDGE=m CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set CONFIG_BRIDGE_NETFILTER=y @@ -450,6 +449,8 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m CONFIG_IP_NF_COMPAT_IPFWADM=m +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # IPv6: Netfilter Configuration @@ -473,6 +474,7 @@ CONFIG_IP6_NF_TARGET_LOG=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_IP6_NF_RAW=m # # DECnet: Netfilter Configuration @@ -509,7 +511,11 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +CONFIG_BRIDGE=m # CONFIG_VLAN_8021Q is not set +CONFIG_DECNET=m +# CONFIG_DECNET_SIOCGIFCONF is not set +# CONFIG_DECNET_ROUTER is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -554,12 +560,34 @@ # Network testing # # CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_HAMRADIO=y # -# ARCnet devices +# Packet Radio protocols # -# CONFIG_ARCNET is not set +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_NETROM=m +CONFIG_ROSE=m + +# +# AX.25 network device drivers +# +CONFIG_MKISS=m +CONFIG_6PACK=m +CONFIG_BPQETHER=m +# CONFIG_DMASCC is not set +# CONFIG_SCC is not set +# CONFIG_BAYCOM_SER_FDX is not set +# CONFIG_BAYCOM_SER_HDX is not set +# CONFIG_BAYCOM_PAR is not set +# CONFIG_BAYCOM_EPP is not set +# CONFIG_YAM is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +CONFIG_NETDEVICES=y CONFIG_DUMMY=m CONFIG_BONDING=m CONFIG_EQUALIZER=m @@ -567,6 +595,11 @@ CONFIG_ETHERTAP=m # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -633,7 +666,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -641,11 +673,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PLIP=m -# CONFIG_PPP is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set # # Wireless LAN (non-hamradio) @@ -653,59 +686,20 @@ # CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wan interfaces # -# CONFIG_TR is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PLIP=m +# CONFIG_PPP is not set +# CONFIG_SLIP is not set # CONFIG_NET_FC is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -CONFIG_HAMRADIO=y - -# -# Packet Radio protocols -# -CONFIG_AX25=m -CONFIG_AX25_DAMA_SLAVE=y -CONFIG_NETROM=m -CONFIG_ROSE=m - -# -# AX.25 network device drivers -# -# CONFIG_MKISS is not set -# CONFIG_6PACK is not set -CONFIG_BPQETHER=m -# CONFIG_DMASCC is not set -# CONFIG_SCC is not set -# CONFIG_BAYCOM_SER_FDX is not set -# CONFIG_BAYCOM_SER_HDX is not set -# CONFIG_BAYCOM_PAR is not set -# CONFIG_BAYCOM_EPP is not set -# CONFIG_YAM is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# # ISDN subsystem # # CONFIG_ISDN is not set @@ -873,6 +867,7 @@ # CONFIG_USB_EHCI_HCD=m # CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set CONFIG_USB_OHCI_HCD=m CONFIG_USB_UHCI_HCD=m @@ -1019,7 +1014,8 @@ CONFIG_USB_RIO500=m CONFIG_USB_LEGOTOWER=m CONFIG_USB_LCD=m -# CONFIG_USB_LED is not set +CONFIG_USB_LED=m +CONFIG_USB_CYTHERM=m CONFIG_USB_TEST=m # @@ -1031,9 +1027,11 @@ # CONFIG_USB_GADGET_PXA2XX is not set # CONFIG_USB_GADGET_GOKU is not set # CONFIG_USB_GADGET_SA1100 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set CONFIG_USB_GADGET_DUALSPEED=y CONFIG_USB_ZERO=m CONFIG_USB_ETH=m +# CONFIG_USB_ETH_RNDIS is not set CONFIG_USB_GADGETFS=m # CONFIG_USB_FILE_STORAGE is not set # CONFIG_USB_G_SERIAL is not set @@ -1093,6 +1091,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y @@ -1152,7 +1151,7 @@ CONFIG_NCPFS_EXTRAS=y CONFIG_CODA_FS=m CONFIG_CODA_FS_OLD_API=y -# CONFIG_INTERMEZZO_FS is not set +CONFIG_INTERMEZZO_FS=m CONFIG_AFS_FS=m CONFIG_RXRPC=m @@ -1252,7 +1251,7 @@ CONFIG_CRYPTO_CAST6=m # CONFIG_CRYPTO_ARC4 is not set CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=y +CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_TEST=m # diff -Nru a/arch/mips/configs/sb1250-swarm_defconfig b/arch/mips/configs/sb1250-swarm_defconfig --- a/arch/mips/configs/sb1250-swarm_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/sb1250-swarm_defconfig Tue May 18 23:38:09 2004 @@ -18,8 +18,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=15 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -30,6 +32,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -265,8 +268,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -276,7 +277,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -297,12 +300,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -310,6 +313,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -336,7 +344,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -344,45 +351,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -424,6 +415,7 @@ # CONFIG_VT is not set CONFIG_SERIAL_NONSTANDARD=y # CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set # CONFIG_SYNCLINK is not set # CONFIG_SYNCLINKMP is not set # CONFIG_N_HDLC is not set @@ -541,6 +533,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_TMPFS is not set diff -Nru a/arch/mips/configs/sead_defconfig b/arch/mips/configs/sead_defconfig --- a/arch/mips/configs/sead_defconfig Tue May 18 23:38:07 2004 +++ b/arch/mips/configs/sead_defconfig Tue May 18 23:38:07 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -194,11 +197,6 @@ # Networking support # # CONFIG_NET is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set @@ -376,6 +374,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_TMPFS is not set # CONFIG_HUGETLB_PAGE is not set diff -Nru a/arch/mips/configs/tb0226_defconfig b/arch/mips/configs/tb0226_defconfig --- a/arch/mips/configs/tb0226_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/tb0226_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -282,8 +285,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # @@ -291,7 +292,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -312,6 +315,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -332,48 +340,31 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPPOE=m -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -569,6 +560,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/tb0229_defconfig b/arch/mips/configs/tb0229_defconfig --- a/arch/mips/configs/tb0229_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/tb0229_defconfig Tue May 18 23:38:09 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ CONFIG_TANBAC_TB0229=y # CONFIG_VICTOR_MPC30X is not set # CONFIG_ZAO_CAPCELLA is not set +# CONFIG_VRC4173 is not set # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -239,8 +243,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -250,7 +252,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -271,12 +275,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set CONFIG_DUMMY=m # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -284,6 +288,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -309,7 +318,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -317,6 +325,22 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_PPP=m @@ -331,43 +355,11 @@ CONFIG_SLIP_COMPRESSED=y CONFIG_SLIP_SMART=y CONFIG_SLIP_MODE_SLIP6=y - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# # ISDN subsystem # # CONFIG_ISDN is not set @@ -559,6 +551,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/workpad_defconfig b/arch/mips/configs/workpad_defconfig --- a/arch/mips/configs/workpad_defconfig Tue May 18 23:38:08 2004 +++ b/arch/mips/configs/workpad_defconfig Tue May 18 23:38:08 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -56,6 +59,7 @@ # CONFIG_TANBAC_TB0229 is not set # CONFIG_VICTOR_MPC30X is not set # CONFIG_ZAO_CAPCELLA is not set +CONFIG_VRC4171=y # CONFIG_TOSHIBA_JMR3927 is not set # CONFIG_MIPS_COBALT is not set # CONFIG_MACH_DECSTATION is not set @@ -87,7 +91,6 @@ CONFIG_DMA_NONCOHERENT=y CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_IRQ_CPU=y -CONFIG_VRC4171=y CONFIG_MIPS_L1_CACHE_SHIFT=5 # CONFIG_FB is not set @@ -246,8 +249,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set CONFIG_XFRM=y # CONFIG_XFRM_USER is not set @@ -257,7 +258,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -278,12 +281,12 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set @@ -291,6 +294,11 @@ # CONFIG_ETHERTAP is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -313,42 +321,25 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set # -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -539,6 +530,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/xxs1500_defconfig b/arch/mips/configs/xxs1500_defconfig --- a/arch/mips/configs/xxs1500_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/xxs1500_defconfig Tue May 18 23:38:09 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HOTPLUG=y # CONFIG_IKCONFIG is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -231,8 +234,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -253,7 +254,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -274,6 +277,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -294,31 +302,15 @@ # # Ethernet (10000 Mbit) # -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -# CONFIG_PPP_BSDCOMP is not set -CONFIG_PPPOE=m -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set # # Token Ring devices # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set # -# Wan interfaces +# Wireless LAN (non-hamradio) # -# CONFIG_WAN is not set +# CONFIG_NET_RADIO is not set # # PCMCIA network device support @@ -334,21 +326,20 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -531,6 +522,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/configs/yosemite_defconfig b/arch/mips/configs/yosemite_defconfig --- a/arch/mips/configs/yosemite_defconfig Tue May 18 23:38:09 2004 +++ b/arch/mips/configs/yosemite_defconfig Tue May 18 23:38:09 2004 @@ -18,8 +18,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=15 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -251,8 +254,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # @@ -260,7 +261,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -281,6 +284,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set @@ -300,41 +308,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -375,6 +366,7 @@ # CONFIG_VT is not set CONFIG_SERIAL_NONSTANDARD=y # CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set # CONFIG_SYNCLINK is not set # CONFIG_SYNCLINKMP is not set # CONFIG_N_HDLC is not set @@ -489,6 +481,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y diff -Nru a/arch/mips/defconfig b/arch/mips/defconfig --- a/arch/mips/defconfig Tue May 18 23:38:05 2004 +++ b/arch/mips/defconfig Tue May 18 23:38:05 2004 @@ -19,8 +19,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y @@ -32,6 +34,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -298,8 +301,6 @@ CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m CONFIG_IPV6_TUNNEL=m -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -359,6 +360,8 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m CONFIG_IP_NF_COMPAT_IPFWADM=m +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # IPv6: Netfilter Configuration @@ -382,6 +385,7 @@ CONFIG_IP6_NF_TARGET_LOG=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_IP6_NF_RAW=m CONFIG_XFRM=y CONFIG_XFRM_USER=m @@ -395,7 +399,9 @@ # CONFIG_SCTP_HMAC_SHA1 is not set CONFIG_SCTP_HMAC_MD5=y # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -440,6 +446,11 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y CONFIG_DUMMY=m CONFIG_BONDING=m @@ -461,41 +472,24 @@ # # Ethernet (10000 Mbit) # -# CONFIG_PPP is not set -# CONFIG_SLIP is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set # -# Token Ring devices +# Wireless LAN (non-hamradio) # -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -709,6 +703,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set CONFIG_DEVPTS_FS_XATTR=y CONFIG_DEVPTS_FS_SECURITY=y diff -Nru a/arch/mips/gt64120/momenco_ocelot/prom.c b/arch/mips/gt64120/momenco_ocelot/prom.c --- a/arch/mips/gt64120/momenco_ocelot/prom.c Tue May 18 23:38:05 2004 +++ b/arch/mips/gt64120/momenco_ocelot/prom.c Tue May 18 23:38:05 2004 @@ -14,17 +14,7 @@ #include #include - -struct callvectors { - int (*open) (char*, int, int); - int (*close) (int); - int (*read) (int, void*, int); - int (*write) (int, void*, int); - off_t (*lseek) (int, off_t, int); - int (*printf) (const char*, ...); - void (*cacheflush) (void); - char* (*gets) (char*); -}; +#include struct callvectors* debug_vectors; diff -Nru a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S --- a/arch/mips/kernel/entry.S Tue May 18 23:38:06 2004 +++ b/arch/mips/kernel/entry.S Tue May 18 23:38:06 2004 @@ -114,11 +114,13 @@ SAVE_STATIC FEXPORT(syscall_exit_work) LONG_L t0, TI_FLAGS($28) - li t1, _TIF_SYSCALL_TRACE + li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT and t0, t1 beqz t0, work_pending # trace bit is set local_irq_enable # could let do_syscall_trace() # call schedule() instead + move a0, sp + li a1, 1 jal do_syscall_trace b resume_userspace diff -Nru a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c --- a/arch/mips/kernel/irixelf.c Tue May 18 23:38:09 2004 +++ b/arch/mips/kernel/irixelf.c Tue May 18 23:38:09 2004 @@ -1130,7 +1130,7 @@ psinfo.pr_pid = prstatus.pr_pid = current->pid; psinfo.pr_ppid = prstatus.pr_ppid = current->parent->pid; psinfo.pr_pgrp = prstatus.pr_pgrp = process_group(current); - psinfo.pr_sid = prstatus.pr_sid = current->session; + psinfo.pr_sid = prstatus.pr_sid = current->signal->session; prstatus.pr_utime.tv_sec = CT_TO_SECS(current->utime); prstatus.pr_utime.tv_usec = CT_TO_USECS(current->utime); prstatus.pr_stime.tv_sec = CT_TO_SECS(current->stime); diff -Nru a/arch/mips/kernel/irixsig.c b/arch/mips/kernel/irixsig.c --- a/arch/mips/kernel/irixsig.c Tue May 18 23:38:08 2004 +++ b/arch/mips/kernel/irixsig.c Tue May 18 23:38:08 2004 @@ -13,12 +13,11 @@ #include #include #include +#include #include #include -extern asmlinkage void do_syscall_trace(void); - #undef DEBUG_SIG #define _S(nr) (1<<((nr)-1)) @@ -177,6 +176,19 @@ siginfo_t info; int signr; + /* + * We want the common case to go fast, which is why we may in certain + * cases get here from kernel mode. Just return without doing anything + * if so. + */ + if (!user_mode(regs)) + return 1; + + if (current->flags & PF_FREEZE) { + refrigerator(0); + goto no_signal; + } + if (!oldset) oldset = ¤t->blocked; @@ -186,6 +198,7 @@ return 1; } +no_signal: /* * Who's code doesn't conform to the restartable syscall convention * dies here!!! The li instruction, a single machine instruction, @@ -263,7 +276,7 @@ * Don't let your children do this ... */ if (current_thread_info()->flags & TIF_SYSCALL_TRACE) - do_syscall_trace(); + do_syscall_trace(regs, 1); __asm__ __volatile__( "move\t$29,%0\n\t" "j\tsyscall_exit" diff -Nru a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c --- a/arch/mips/kernel/linux32.c Tue May 18 23:38:08 2004 +++ b/arch/mips/kernel/linux32.c Tue May 18 23:38:08 2004 @@ -142,228 +142,6 @@ } /* - * count32() counts the number of arguments/envelopes - */ -static int count32(u32 * argv, int max) -{ - int i = 0; - - if (argv != NULL) { - for (;;) { - u32 p; int error; - - error = get_user(p,argv); - if (error) - return error; - if (!p) - break; - argv++; - if (++i > max) - return -E2BIG; - } - } - return i; -} - - -/* - * 'copy_strings32()' copies argument/envelope strings from user - * memory to free pages in kernel mem. These are in a format ready - * to be put directly into the top of new user memory. - */ -int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm) -{ - struct page *kmapped_page = NULL; - char *kaddr = NULL; - int ret; - - while (argc-- > 0) { - u32 str; - int len; - unsigned long pos; - - if (get_user(str, argv+argc) || !str || - !(len = strnlen_user((char *)A(str), bprm->p))) { - ret = -EFAULT; - goto out; - } - - if (bprm->p < len) { - ret = -E2BIG; - goto out; - } - - bprm->p -= len; - /* XXX: add architecture specific overflow check here. */ - - pos = bprm->p; - while (len > 0) { - int i, new, err; - int offset, bytes_to_copy; - struct page *page; - - offset = pos % PAGE_SIZE; - i = pos/PAGE_SIZE; - page = bprm->page[i]; - new = 0; - if (!page) { - page = alloc_page(GFP_HIGHUSER); - bprm->page[i] = page; - if (!page) { - ret = -ENOMEM; - goto out; - } - new = 1; - } - - if (page != kmapped_page) { - if (kmapped_page) - kunmap(kmapped_page); - kmapped_page = page; - kaddr = kmap(kmapped_page); - } - if (new && offset) - memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; - if (bytes_to_copy > len) { - bytes_to_copy = len; - if (new) - memset(kaddr+offset+len, 0, - PAGE_SIZE-offset-len); - } - err = copy_from_user(kaddr + offset, (char *)A(str), - bytes_to_copy); - if (err) { - ret = -EFAULT; - goto out; - } - - pos += bytes_to_copy; - str += bytes_to_copy; - len -= bytes_to_copy; - } - } - ret = 0; -out: - if (kmapped_page) - kunmap(kmapped_page); - return ret; -} - -#ifdef CONFIG_MMU - -#define free_arg_pages(bprm) do { } while (0) - -#else - -static inline void free_arg_pages(struct linux_binprm *bprm) -{ - int i; - - for (i = 0; i < MAX_ARG_PAGES; i++) { - if (bprm->page[i]) - __free_page(bprm->page[i]); - bprm->page[i] = NULL; - } -} - -#endif /* CONFIG_MMU */ - -/* - * sys32_execve() executes a new program. - */ -static inline int -do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) -{ - struct linux_binprm bprm; - struct file * file; - int retval; - - sched_balance_exec(); - - file = open_exec(filename); - - retval = PTR_ERR(file); - if (IS_ERR(file)) - return retval; - - bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0])); - - bprm.file = file; - bprm.filename = filename; - bprm.interp = filename; - bprm.sh_bang = 0; - bprm.loader = 0; - bprm.exec = 0; - bprm.security = NULL; - bprm.mm = mm_alloc(); - retval = -ENOMEM; - if (!bprm.mm) - goto out_file; - - retval = init_new_context(current, bprm.mm); - if (retval < 0) - goto out_mm; - - bprm.argc = count32(argv, bprm.p / sizeof(u32)); - if ((retval = bprm.argc) < 0) - goto out_mm; - - bprm.envc = count32(envp, bprm.p / sizeof(u32)); - if ((retval = bprm.envc) < 0) - goto out_mm; - - retval = security_bprm_alloc(&bprm); - if (retval) - goto out; - - retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; - - retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; - - bprm.exec = bprm.p; - retval = copy_strings32(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; - - retval = copy_strings32(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; - - retval = search_binary_handler(&bprm, regs); - if (retval >= 0) { - free_arg_pages(&bprm); - - /* execve success */ - security_bprm_free(&bprm); - return retval; - } - -out: - /* Something went wrong, return the inode and free the argument pages*/ - free_arg_pages(&bprm); - - if (bprm.security) - security_bprm_free(&bprm); - -out_mm: - if (bprm.mm) - mmdrop(bprm.mm); - -out_file: - if (bprm.file) { - allow_write_access(bprm.file); - fput(bprm.file); - } - return retval; -} - -/* * sys_execve() executes a new program. */ asmlinkage int sys32_execve(nabi_no_regargs struct pt_regs regs) @@ -371,12 +149,12 @@ int error; char * filename; - filename = getname((char *) (long)regs.regs[4]); + filename = getname(compat_ptr(regs.regs[4])); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; - error = do_execve32(filename, (u32 *) (long)regs.regs[5], - (u32 *) (long)regs.regs[6], ®s); + error = compat_do_execve(filename, compat_ptr(regs.regs[5]), + compat_ptr(regs.regs[6]), ®s); putname(filename); out: @@ -671,150 +449,6 @@ return sys_llseek(fd, offset_high, offset_low, result, origin); } -typedef ssize_t (*IO_fn_t)(struct file *, char *, size_t, loff_t *); - -static long -do_readv_writev32(int type, struct file *file, const struct compat_iovec *vector, - u32 count) -{ - unsigned long tot_len; - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack, *ivp; - struct inode *inode; - long retval, i; - IO_fn_t fn; - - /* First get the "struct iovec" from user memory and - * verify all the pointers - */ - if (!count) - return 0; - if(verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count)) - return -EFAULT; - if (count > UIO_MAXIOV) - return -EINVAL; - if (count > UIO_FASTIOV) { - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - return -ENOMEM; - } - - tot_len = 0; - i = count; - ivp = iov; - while (i > 0) { - u32 len; - u32 buf; - - __get_user(len, &vector->iov_len); - __get_user(buf, &vector->iov_base); - tot_len += len; - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t) len; - vector++; - ivp++; - i--; - } - - inode = file->f_dentry->d_inode; - /* VERIFY_WRITE actually means a read, as we write to user space */ - retval = locks_verify_area((type == VERIFY_WRITE - ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE), - inode, file, file->f_pos, tot_len); - if (retval) { - if (iov != iovstack) - kfree(iov); - return retval; - } - - /* Then do the actual IO. Note that sockets need to be handled - * specially as they have atomicity guarantees and can handle - * iovec's natively - */ -#ifdef CONFIG_NET - if (inode->i_sock) { - int err; - err = sock_readv_writev(type, inode, file, iov, count, tot_len); - if (iov != iovstack) - kfree(iov); - return err; - } -#endif - - if (!file->f_op) { - if (iov != iovstack) - kfree(iov); - return -EINVAL; - } - /* VERIFY_WRITE actually means a read, as we write to user space */ - fn = file->f_op->read; - if (type == VERIFY_READ) - fn = (IO_fn_t) file->f_op->write; - ivp = iov; - while (count > 0) { - void * base; - int len, nr; - - base = ivp->iov_base; - len = ivp->iov_len; - ivp++; - count--; - nr = fn(file, base, len, &file->f_pos); - if (nr < 0) { - if (retval) - break; - retval = nr; - break; - } - retval += nr; - if (nr != len) - break; - } - if (iov != iovstack) - kfree(iov); - - return retval; -} - -asmlinkage long -sys32_readv(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - ssize_t ret; - - ret = -EBADF; - file = fget(fd); - if (!file) - goto bad_file; - if (file->f_op && (file->f_mode & FMODE_READ) && - (file->f_op->readv || file->f_op->read)) - ret = do_readv_writev32(VERIFY_WRITE, file, vector, count); - - fput(file); - -bad_file: - return ret; -} - -asmlinkage long -sys32_writev(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - ssize_t ret; - - ret = -EBADF; - file = fget(fd); - if(!file) - goto bad_file; - if (file->f_op && (file->f_mode & FMODE_WRITE) && - (file->f_op->writev || file->f_op->write)) - ret = do_readv_writev32(VERIFY_READ, file, vector, count); - fput(file); - -bad_file: - return ret; -} - /* From the Single Unix Spec: pread & pwrite act like lseek to pos + op + lseek back to original location. They fail just like lseek does on non-seekable files. */ @@ -885,167 +519,6 @@ bad_file: return ret; } -/* - * Ooo, nasty. We need here to frob 32-bit unsigned longs to - * 64-bit unsigned longs. - */ - -static inline int -get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset) -{ - if (ufdset) { - unsigned long odd; - - if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32))) - return -EFAULT; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - __get_user(l, ufdset); - __get_user(h, ufdset+1); - ufdset += 2; - *fdset++ = h << 32 | l; - n -= 2; - } - if (odd) - __get_user(*fdset, ufdset); - } else { - /* Tricky, must clear full unsigned long in the - * kernel fdset at the end, this makes sure that - * actually happens. - */ - memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32)); - } - return 0; -} - -static inline void -set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) -{ - unsigned long odd; - - if (!ufdset) - return; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - l = *fdset++; - h = l >> 32; - __put_user(l, ufdset); - __put_user(h, ufdset+1); - ufdset += 2; - n -= 2; - } - if (odd) - __put_user(*fdset, ufdset); -} - -/* - * We can actually return ERESTARTSYS instead of EINTR, but I'd - * like to be certain this leads to no problems. So I return - * EINTR just for safety. - * - * Update: ERESTARTSYS breaks at least the xview clock binary, so - * I'm trying ERESTARTNOHAND which restart only when you want to. - */ -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) - -asmlinkage int sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct compat_timeval *tvp) -{ - fd_set_bits fds; - char *bits; - unsigned long nn; - long timeout; - int ret, size; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp) { - time_t sec, usec; - - if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp))) - || (ret = __get_user(sec, &tvp->tv_sec)) - || (ret = __get_user(usec, &tvp->tv_usec))) - goto out_nofds; - - ret = -EINVAL; - if(sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); - if ((ret = get_fd_set32(nn, fds.in, inp)) || - (ret = get_fd_set32(nn, fds.out, outp)) || - (ret = get_fd_set32(nn, fds.ex, exp))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - put_user(sec, &tvp->tv_sec); - put_user(usec, &tvp->tv_usec); - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set32(nn, inp, fds.res_in); - set_fd_set32(nn, outp, fds.res_out); - set_fd_set32(nn, exp, fds.res_ex); - -out: - kfree(bits); -out_nofds: - return ret; -} - asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec *interval) diff -Nru a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c --- a/arch/mips/kernel/mips_ksyms.c Tue May 18 23:38:06 2004 +++ b/arch/mips/kernel/mips_ksyms.c Tue May 18 23:38:06 2004 @@ -33,6 +33,9 @@ EXPORT_SYMBOL_NOVERS(memmove); EXPORT_SYMBOL_NOVERS(strcat); EXPORT_SYMBOL_NOVERS(strchr); +#ifdef CONFIG_MIPS64 +EXPORT_SYMBOL_NOVERS(strncmp); +#endif EXPORT_SYMBOL_NOVERS(strlen); EXPORT_SYMBOL_NOVERS(strpbrk); EXPORT_SYMBOL_NOVERS(strncat); diff -Nru a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c --- a/arch/mips/kernel/process.c Tue May 18 23:38:06 2004 +++ b/arch/mips/kernel/process.c Tue May 18 23:38:06 2004 @@ -280,12 +280,6 @@ return ((unsigned long *)t->reg29)[schedule_frame.pc_offset]; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - /* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */ unsigned long get_wchan(struct task_struct *p) { @@ -297,7 +291,7 @@ if (!mips_frame_info_initialized) return 0; pc = thread_saved_pc(p); - if (pc < first_sched || pc >= last_sched) + if (!in_sched_functions(pc)) goto out; if (pc >= (unsigned long) sleep_on_timeout) @@ -331,7 +325,7 @@ */ pc = ((unsigned long *)frame)[schedule_timeout_frame.pc_offset]; - if (pc >= first_sched && pc < last_sched) { + if (in_sched_functions(pc)) { /* schedule_timeout called by [interruptible_]sleep_on_timeout */ frame = ((unsigned long *)frame)[schedule_timeout_frame.frame_offset]; pc = ((unsigned long *)frame)[sleep_on_timeout_frame.pc_offset]; diff -Nru a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c --- a/arch/mips/kernel/ptrace.c Tue May 18 23:38:09 2004 +++ b/arch/mips/kernel/ptrace.c Tue May 18 23:38:09 2004 @@ -303,8 +303,17 @@ * Notification of system call entry/exit * - triggered by current->work.syscall_trace */ -asmlinkage void do_syscall_trace(void) +asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) { + if (unlikely(current->audit_context)) { + if (!entryexit) + audit_syscall_entry(current, regs->orig_eax, + regs->regs[4], regs->regs[5], + regs->regs[6], regs->regs[7]); + else + audit_syscall_exit(current, regs->regs[2]); + } + if (!test_thread_flag(TIF_SYSCALL_TRACE)) return; if (!(current->ptrace & PT_PTRACED)) diff -Nru a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S --- a/arch/mips/kernel/scall32-o32.S Tue May 18 23:38:05 2004 +++ b/arch/mips/kernel/scall32-o32.S Tue May 18 23:38:05 2004 @@ -33,8 +33,8 @@ sltiu t0, v0, MAX_SYSCALL_NO + 1 # check syscall number addiu t1, 4 # skip to next instruction - beqz t0, illegal_syscall sw t1, PT_EPC(sp) + beqz t0, illegal_syscall /* XXX Put both in one cacheline, should save a bit. */ sll t0, v0, 2 @@ -49,7 +49,7 @@ stack_done: sw a3, PT_R26(sp) # save for syscall restart LONG_L t0, TI_FLAGS($28) # syscall tracing enabled? - li t1, _TIF_SYSCALL_TRACE + li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT and t0, t1, t0 bnez t0, syscall_trace_entry # -> yes @@ -84,6 +84,8 @@ syscall_trace_entry: SAVE_STATIC sw t2, PT_R1(sp) + move a0, sp + li a1, 0 jal do_syscall_trace lw t2, PT_R1(sp) @@ -233,13 +235,15 @@ /* Success, so skip usual error handling garbage. */ LONG_L a2, TI_FLAGS($28) # syscall tracing enabled? - li t0, _TIF_SYSCALL_TRACE + li t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT and t0, a2, t0 bnez t0, 1f b o32_syscall_exit 1: SAVE_STATIC + move a0, sp + li a1, 1 jal do_syscall_trace j syscall_exit @@ -614,6 +618,15 @@ sys sys_clock_nanosleep 4 /* 4265 */ sys sys_tgkill 3 sys sys_utimes 2 + sys sys_ni_syscall 0 /* sys_mbind */ + sys sys_ni_syscall 0 /* sys_get_mempolicy */ + sys sys_ni_syscall 0 /* 4270 sys_set_mempolicy */ + sys sys_mq_open 4 + sys sys_mq_unlink 1 + sys sys_mq_timedsend 5 + sys sys_mq_timedreceive 5 + sys sys_mq_notify 2 /* 4275 */ + sys sys_mq_getsetattr 3 .endm diff -Nru a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S --- a/arch/mips/kernel/scall64-64.S Tue May 18 23:38:08 2004 +++ b/arch/mips/kernel/scall64-64.S Tue May 18 23:38:08 2004 @@ -36,14 +36,16 @@ STI .set at #endif - ld t1, PT_EPC(sp) # skip syscall on return FEXPORT(__handle_sys64) subu t0, v0, __NR_64_Linux # check syscall number sltiu t0, t0, __NR_64_Linux_syscalls + 1 +#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32) + ld t1, PT_EPC(sp) # skip syscall on return daddiu t1, 4 # skip to next instruction - beqz t0, illegal_syscall sd t1, PT_EPC(sp) +#endif + beqz t0, illegal_syscall dsll t0, v0, 3 # offset into table ld t2, (sys_call_table - (__NR_64_Linux * 8))(t0) @@ -85,6 +87,8 @@ syscall_trace_entry: SAVE_STATIC sd t2,PT_R1(sp) + move a0, sp + li a1, 0 jal do_syscall_trace ld t2,PT_R1(sp) @@ -165,13 +169,15 @@ /* Success, so skip usual error handling garbage. */ LONG_L a2, TI_FLAGS($28) # syscall tracing enabled? - li t0, _TIF_SYSCALL_TRACE + li t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT and t0, a2, t0 bnez t0, 1f b syscall_exit 1: SAVE_STATIC + move a0, sp + li a1, 1 jal do_syscall_trace j syscall_exit @@ -432,3 +438,12 @@ PTR sys_clock_nanosleep PTR sys_tgkill /* 5225 */ PTR sys_utimes + PTR sys_ni_syscall /* sys_mbind */ + PTR sys_ni_syscall /* sys_get_mempolicy */ + PTR sys_ni_syscall /* sys_set_mempolicy */ + PTR sys_mq_open /* 5230 */ + PTR sys_mq_unlink + PTR sys_mq_timedsend + PTR sys_mq_timedreceive + PTR sys_mq_notify + PTR sys_mq_getsetattr /* 5235 */ diff -Nru a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S --- a/arch/mips/kernel/scall64-n32.S Tue May 18 23:38:09 2004 +++ b/arch/mips/kernel/scall64-n32.S Tue May 18 23:38:09 2004 @@ -36,21 +36,26 @@ STI .set at #endif - ld t1, PT_EPC(sp) # skip syscall on return subu t0, v0, __NR_N32_Linux # check syscall number sltiu t0, t0, __NR_N32_Linux_syscalls + 1 + +#ifndef CONFIG_MIPS32_O32 + ld t1, PT_EPC(sp) # skip syscall on return daddiu t1, 4 # skip to next instruction - beqz t0, not_n32_scall sd t1, PT_EPC(sp) +#endif + beqz t0, not_n32_scall dsll t0, v0, 3 # offset into table ld t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0) sd a3, PT_R26(sp) # save a3 for syscall restarting + li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT LONG_L t0, TI_FLAGS($28) # syscall tracing enabled? - bltz t0, n32_syscall_trace_entry + and t0, t1, t0 + bnez t0, n32_syscall_trace_entry jalr t2 # Do The Real Thing (TM) @@ -82,6 +87,8 @@ n32_syscall_trace_entry: SAVE_STATIC sd t2,PT_R1(sp) + move a0, sp + li a1, 0 jal do_syscall_trace ld t2,PT_R1(sp) @@ -128,11 +135,11 @@ PTR compat_sys_ioctl /* 6015 */ PTR sys_pread64 PTR sys_pwrite64 - PTR sys32_readv - PTR sys32_writev + PTR compat_sys_readv + PTR compat_sys_writev PTR sys_access /* 6020 */ PTR sys_pipe - PTR sys32_select + PTR compat_sys_select PTR sys_sched_yield PTR sys_mremap PTR sys_msync /* 6025 */ @@ -341,3 +348,12 @@ PTR sys_clock_nanosleep PTR sys_tgkill PTR compat_sys_utimes /* 6230 */ + PTR sys_ni_syscall /* sys_mbind */ + PTR sys_ni_syscall /* sys_get_mempolicy */ + PTR sys_ni_syscall /* sys_set_mempolicy */ + PTR compat_sys_mq_open + PTR sys_mq_unlink /* 6235 */ + PTR compat_sys_mq_timedsend + PTR compat_sys_mq_timedreceive + PTR compat_sys_mq_notify + PTR compat_sys_mq_getsetattr /* 6239 */ diff -Nru a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S --- a/arch/mips/kernel/scall64-o32.S Tue May 18 23:38:05 2004 +++ b/arch/mips/kernel/scall64-o32.S Tue May 18 23:38:05 2004 @@ -34,8 +34,8 @@ subu t0, v0, __NR_O32_Linux # check syscall number sltiu t0, t0, __NR_O32_Linux_syscalls + 1 daddiu t1, 4 # skip to next instruction - beqz t0, not_o32_scall sd t1, PT_EPC(sp) + beqz t0, not_o32_scall #if 0 SAVE_ALL move a1, v0 @@ -58,8 +58,9 @@ bgez t0, stackargs stack_done: - LONG_L t0, TI_FLAGS($28) - # syscall tracing enabled? + li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT + LONG_L t0, TI_FLAGS($28) # syscall tracing enabled? + and t0, t1, t0 bnez t0, trace_a_syscall jalr t2 # Do The Real Thing (TM) @@ -97,6 +98,8 @@ sd a7, PT_R11(sp) sd t2,PT_R1(sp) + move a0, sp + li a1, 0 jal do_syscall_trace ld t2,PT_R1(sp) @@ -397,11 +400,11 @@ sys sys_setfsgid 1 sys sys32_llseek 5 /* 4140 */ sys sys32_getdents 3 - sys sys32_select 5 + sys compat_sys_select 5 sys sys_flock 2 sys sys_msync 3 - sys sys32_readv 3 /* 4145 */ - sys sys32_writev 3 + sys compat_sys_readv 3 /* 4145 */ + sys compat_sys_writev 3 sys sys_cacheflush 3 sys sys_cachectl 3 sys sys_sysmips 4 @@ -523,6 +526,15 @@ sys sys_clock_nanosleep 4 /* 4265 */ sys sys_tgkill 3 sys compat_sys_utimes 2 + sys sys_ni_syscall 0 /* sys_mbind */ + sys sys_ni_syscall 0 /* sys_get_mempolicy */ + sys sys_ni_syscall 0 /* 4270 sys_set_mempolicy */ + sys compat_sys_mq_open 4 + sys sys_mq_unlink 1 + sys compat_sys_mq_timedsend 5 + sys compat_sys_mq_timedreceive 5 + sys compat_sys_mq_notify 2 /* 4275 */ + sys compat_sys_mq_getsetattr 3 .endm diff -Nru a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c --- a/arch/mips/kernel/signal.c Tue May 18 23:38:08 2004 +++ b/arch/mips/kernel/signal.c Tue May 18 23:38:08 2004 @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -34,8 +35,6 @@ extern asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs); -extern asmlinkage void do_syscall_trace(void); - /* * Atomically swap in the new signal mask, and wait for a signal. */ @@ -232,7 +231,7 @@ * Don't let your children do this ... */ if (current_thread_info()->flags & TIF_SYSCALL_TRACE) - do_syscall_trace(); + do_syscall_trace(®s, 1); __asm__ __volatile__( "move\t$29, %0\n\t" "j\tsyscall_exit" @@ -549,6 +548,19 @@ } #endif + /* + * We want the common case to go fast, which is why we may in certain + * cases get here from kernel mode. Just return without doing anything + * if so. + */ + if (!user_mode(regs)) + return 1; + + if (current->flags & PF_FREEZE) { + refrigerator(0); + goto no_signal; + } + if (!oldset) oldset = ¤t->blocked; @@ -558,6 +570,7 @@ return 1; } +no_signal: /* * Who's code doesn't conform to the restartable syscall convention * dies here!!! The li instruction, a single machine instruction, diff -Nru a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c --- a/arch/mips/kernel/signal32.c Tue May 18 23:38:07 2004 +++ b/arch/mips/kernel/signal32.c Tue May 18 23:38:07 2004 @@ -18,9 +18,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -40,8 +42,6 @@ extern asmlinkage int do_signal32(sigset_t *oldset, struct pt_regs *regs); -extern asmlinkage void do_syscall_trace(void); - /* 32-bit compatibility types */ #define _NSIG_BPW32 32 @@ -392,7 +392,7 @@ * Don't let your children do this ... */ if (current_thread_info()->flags & TIF_SYSCALL_TRACE) - do_syscall_trace(); + do_syscall_trace(®s, 1); __asm__ __volatile__( "move\t$29, %0\n\t" "j\tsyscall_exit" @@ -696,6 +696,19 @@ siginfo_t info; int signr; + /* + * We want the common case to go fast, which is why we may in certain + * cases get here from kernel mode. Just return without doing anything + * if so. + */ + if (!user_mode(regs)) + return 1; + + if (current->flags & PF_FREEZE) { + refrigerator(0); + goto no_signal; + } + if (!oldset) oldset = ¤t->blocked; @@ -705,6 +718,7 @@ return 1; } +no_signal: /* * Who's code doesn't conform to the restartable syscall convention * dies here!!! The li instruction, a single machine instruction, diff -Nru a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c --- a/arch/mips/kernel/signal_n32.c Tue May 18 23:38:08 2004 +++ b/arch/mips/kernel/signal_n32.c Tue May 18 23:38:08 2004 @@ -29,6 +29,7 @@ #include #include +#include #include #include #include diff -Nru a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c --- a/arch/mips/kernel/smp.c Tue May 18 23:38:05 2004 +++ b/arch/mips/kernel/smp.c Tue May 18 23:38:05 2004 @@ -151,6 +151,9 @@ if (!cpus) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); diff -Nru a/arch/mips/mm/init.c b/arch/mips/mm/init.c --- a/arch/mips/mm/init.c Tue May 18 23:38:08 2004 +++ b/arch/mips/mm/init.c Tue May 18 23:38:08 2004 @@ -238,7 +238,7 @@ set_page_address(page, lowmem_page_address(page)); #endif set_bit(PG_highmem, &page->flags); - atomic_set(&page->count, 1); + set_page_count(page, 1); __free_page(page); totalhigh_pages++; } diff -Nru a/arch/mips/momentum/jaguar_atx/prom.c b/arch/mips/momentum/jaguar_atx/prom.c --- a/arch/mips/momentum/jaguar_atx/prom.c Tue May 18 23:38:09 2004 +++ b/arch/mips/momentum/jaguar_atx/prom.c Tue May 18 23:38:09 2004 @@ -25,21 +25,11 @@ #include #include #include +#include #include "jaguar_atx_fpga.h" extern void ja_setup_console(void); - -struct callvectors { - int (*open) (char*, int, int); /* 0 */ - int (*close) (int); /* 4 */ - int (*read) (int, void*, int); /* 8 */ - int (*write) (int, void*, int); /* 12 */ - off_t (*lseek) (int, off_t, int); /* 16 */ - int (*printf) (const char*, ...); /* 20 */ - void (*cacheflush) (void); /* 24 */ - char* (*gets) (char*); /* 28 */ -}; struct callvectors *debug_vectors; diff -Nru a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c --- a/arch/mips/momentum/ocelot_c/prom.c Tue May 18 23:38:07 2004 +++ b/arch/mips/momentum/ocelot_c/prom.c Tue May 18 23:38:07 2004 @@ -23,19 +23,9 @@ #include #include #include +#include #include "ocelot_c_fpga.h" - -struct callvectors { - int (*open) (char*, int, int); - int (*close) (int); - int (*read) (int, void*, int); - int (*write) (int, void*, int); - off_t (*lseek) (int, off_t, int); - int (*printf) (const char*, ...); - void (*cacheflush) (void); - char* (*gets) (char*); -}; struct callvectors* debug_vectors; diff -Nru a/arch/mips/momentum/ocelot_g/prom.c b/arch/mips/momentum/ocelot_g/prom.c --- a/arch/mips/momentum/ocelot_g/prom.c Tue May 18 23:38:06 2004 +++ b/arch/mips/momentum/ocelot_g/prom.c Tue May 18 23:38:06 2004 @@ -19,20 +19,10 @@ #include #include +#include #include "gt64240.h" #include "ocelot_pld.h" - -struct callvectors { - int (*open) (char*, int, int); - int (*close) (int); - int (*read) (int, void*, int); - int (*write) (int, void*, int); - off_t (*lseek) (int, off_t, int); - int (*printf) (const char*, ...); - void (*cacheflush) (void); - char* (*gets) (char*); -}; struct callvectors* debug_vectors; diff -Nru a/arch/mips/pci/fixup-au1000.c b/arch/mips/pci/fixup-au1000.c --- a/arch/mips/pci/fixup-au1000.c Tue May 18 23:38:05 2004 +++ b/arch/mips/pci/fixup-au1000.c Tue May 18 23:38:05 2004 @@ -37,22 +37,72 @@ /* * Shortcut */ -#define INTA AU1000_PCI_INTA -#define INTB AU1000_PCI_INTB +#ifdef CONFIG_SOC_AU1500 +#define INTA AU1000_PCI_INTA +#define INTB AU1000_PCI_INTB +#define INTC AU1000_PCI_INTC +#define INTD AU1000_PCI_INTD +#endif + +#ifdef CONFIG_SOC_AU1550 +#define INTA AU1550_PCI_INTA +#define INTB AU1550_PCI_INTB +#define INTC AU1550_PCI_INTC +#define INTD AU1550_PCI_INTD +#endif + +#define INTX 0xFF /* not valid */ + +#ifdef CONFIG_MIPS_DB1500 +static char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX}, /* IDSEL 12 - HPT371 */ + [13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_BOSPORUS +static char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTA, INTB, INTX, INTX}, /* IDSEL 11 - miniPCI */ + [12] = { -1, INTA, INTX, INTX, INTX}, /* IDSEL 12 - SN1741 */ + [13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot */ +}; +#endif +#ifdef CONFIG_MIPS_MIRAGE static char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTA, INTA, INTA, INTA }, - [12] = { -1, INTA, INTA, INTA, INTA }, -#if defined( CONFIG_SOC_AU1550 ) - [13] = { -1, INTB, INTB, INTB, INTB } + [11] = { -1, INTD, INTX, INTX, INTX}, /* IDSEL 11 - SMI VGX */ + [12] = { -1, INTX, INTX, INTC, INTX}, /* IDSEL 12 - PNX1300 */ + [13] = { -1, INTA, INTB, INTX, INTX}, /* IDSEL 13 - miniPCI */ +}; +#endif + +#ifdef CONFIG_MIPS_DB1550 +static char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTC, INTX, INTX, INTX}, /* IDSEL 11 - on-board HPT371 */ + [12] = { -1, INTB, INTC, INTD, INTA}, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot 1 (right) */ +}; +#endif + +#ifdef CONFIG_MIPS_PB1500 +static char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX}, /* IDSEL 12 - HPT370 */ + [13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot */ +}; #endif + +#ifdef CONFIG_MIPS_PB1550 +static char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTB, INTC, INTD, INTA}, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot 1 (right) */ }; +#endif int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { - return irq_tab_alchemy[slot][pin]; +return irq_tab_alchemy[slot][pin]; } struct pci_fixup pcibios_fixups[] __initdata = { - { 0 } +{ 0 } }; diff -Nru a/arch/mips/pci/ops-au1000.c b/arch/mips/pci/ops-au1000.c --- a/arch/mips/pci/ops-au1000.c Tue May 18 23:38:09 2004 +++ b/arch/mips/pci/ops-au1000.c Tue May 18 23:38:09 2004 @@ -33,89 +33,170 @@ #include #include #include +#include #include +#undef DEBUG +#ifdef DEBUG +#define DBG(x...) printk(x) +#else +#define DBG(x...) +#endif + #define PCI_ACCESS_READ 0 #define PCI_ACCESS_WRITE 1 +int (*board_pci_idsel)(unsigned int devsel, int assert); + +/* CP0 hazard avoidance. */ +#define BARRIER __asm__ __volatile__(".set noreorder\n\t" \ + "nop; nop; nop; nop;\t" \ + ".set reorder\n\t") + +void mod_wired_entry(int entry, unsigned long entrylo0, + unsigned long entrylo1, unsigned long entryhi, + unsigned long pagemask) +{ + unsigned long old_pagemask; + unsigned long old_ctx; + + /* Save old context and create impossible VPN2 value */ + old_ctx = read_c0_entryhi() & 0xff; + old_pagemask = read_c0_pagemask(); + write_c0_index(entry); + BARRIER; + write_c0_pagemask(pagemask); + write_c0_entryhi(entryhi); + write_c0_entrylo0(entrylo0); + write_c0_entrylo1(entrylo1); + BARRIER; + tlb_write_indexed(); + BARRIER; + write_c0_entryhi(old_ctx); + BARRIER; + write_c0_pagemask(old_pagemask); +} + +struct vm_struct *pci_cfg_vm; +static int pci_cfg_wired_entry; +static int first_cfg = 1; +unsigned long last_entryLo0, last_entryLo1; + static int config_access(unsigned char access_type, struct pci_bus *bus, - unsigned int devfn, unsigned char where, + unsigned int dev_fn, unsigned char where, u32 * data) { - unsigned int device = PCI_SLOT(devfn); - unsigned int function = PCI_FUNC(devfn); - unsigned long config, status; - unsigned long cfg_addr; +#if defined( CONFIG_SOC_AU1500 ) || defined( CONFIG_SOC_AU1550 ) + unsigned int device = PCI_SLOT(dev_fn); + unsigned int function = PCI_FUNC(dev_fn); + unsigned long offset, status; + unsigned long cfg_base; + unsigned long flags; + int error = PCIBIOS_SUCCESSFUL; + unsigned long entryLo0, entryLo1; if (device > 19) { *data = 0xffffffff; return -1; } - au_writel(((0x2000 << 16) | - (au_readl(Au1500_PCI_STATCMD) & 0xffff)), - Au1500_PCI_STATCMD); - //au_writel(au_readl(Au1500_PCI_CFG) & ~PCI_ERROR, Au1500_PCI_CFG); + local_irq_save(flags); + au_writel(((0x2000 << 16) | (au_readl(Au1500_PCI_STATCMD) & 0xffff)), + Au1500_PCI_STATCMD); au_sync_udelay(1); - /* setup the config window */ - if (bus->number == 0) { - cfg_addr = (unsigned long) ioremap(Au1500_EXT_CFG | - ((1 << device) << 11), - 0x00100000); - } else { - cfg_addr = (unsigned long) ioremap(Au1500_EXT_CFG_TYPE1 | - (bus-> - number << 16) | (device - << - 11), - 0x00100000); - } - - if (!cfg_addr) - panic(KERN_ERR "PCI unable to ioremap cfg space\n"); - - /* setup the lower bits of the 36 bit address */ - config = cfg_addr | (function << 8) | (where & ~0x3); - -#if 1 - if (access_type == PCI_ACCESS_WRITE) { - printk("cfg write: "); - } else { - printk("cfg read: "); - } - printk("devfn %x, device %x func %x \n", devfn, device, function); - if (access_type == PCI_ACCESS_WRITE) { - printk("data %x\n", *data); + /* + * We can't ioremap the entire pci config space because it's + * too large. Nor can we call ioremap dynamically because some + * device drivers use the pci config routines from within + * interrupt handlers and that becomes a problem in get_vm_area(). + * We use one wired tlb to handle all config accesses for all + * busses. To improve performance, if the current device + * is the same as the last device accessed, we don't touch the + * tlb. + */ + if (first_cfg) { + /* reserve a wired entry for pci config accesses */ + first_cfg = 0; + pci_cfg_vm = get_vm_area(0x2000, 0); + if (!pci_cfg_vm) + panic (KERN_ERR "PCI unable to get vm area\n"); + pci_cfg_wired_entry = read_c0_wired(); + add_wired_entry(0, 0, (unsigned long)pci_cfg_vm->addr, PM_4K); + last_entryLo0 = last_entryLo1 = 0xffffffff; + } + + /* Since the Au1xxx doesn't do the idsel timing exactly to spec, + * many board vendors implement their own off-chip idsel, so call + * it now. If it doesn't succeed, may as well bail out at this point. + */ + if (board_pci_idsel) { + if (board_pci_idsel(device, 1) == 0) { + *data = 0xffffffff; + local_irq_restore(flags); + return -1; + } + } + + /* setup the config window */ + if (bus->number == 0) { + cfg_base = ((1<number<<16) | (device<<11); + } + + /* setup the lower bits of the 36 bit address */ + offset = (function << 8) | (where & ~0x3); + /* pick up any address that falls below the page mask */ + offset |= cfg_base & ~PAGE_MASK; + + /* page boundary */ + cfg_base = cfg_base & PAGE_MASK; + + entryLo0 = (6 << 26) | (cfg_base >> 6) | (2 << 3) | 7; + entryLo1 = (6 << 26) | (cfg_base >> 6) | (0x1000 >> 6) | (2 << 3) | 7; + + if ((entryLo0 != last_entryLo0) || (entryLo1 != last_entryLo1)) { + mod_wired_entry(pci_cfg_wired_entry, entryLo0, entryLo1, + (unsigned long)pci_cfg_vm->addr, PM_4K); + last_entryLo0 = entryLo0; + last_entryLo1 = entryLo1; } -#endif if (access_type == PCI_ACCESS_WRITE) { - au_writel(*data, config); + au_writel(*data, (int)(pci_cfg_vm->addr + offset)); } else { - *data = au_readl(config); + *data = au_readl((int)(pci_cfg_vm->addr + offset)); } au_sync_udelay(2); - /* unmap io space */ - iounmap((void *) cfg_addr); + DBG("cfg_access %d bus->number %d dev %d at %x *data %x conf %x\n", + access_type, bus->number, device, where, *data, offset); /* check master abort */ status = au_readl(Au1500_PCI_STATCMD); - if (status & (1 << 29)) { - printk("master abort\n"); + + if (status & (1<<29)) { *data = 0xffffffff; - return -1; + error = -1; + DBG("Au1x Master Abort\n"); } else if ((status >> 28) & 0xf) { - printk("PCI ERR detected: status %x\n", status); + DBG("PCI ERR detected: status %x\n", status); *data = 0xffffffff; - return -1; - } else { - printk("bios_successful: %x\n", *data); - return PCIBIOS_SUCCESSFUL; + error = -1; + } + + /* Take away the idsel. + */ + if (board_pci_idsel) { + (void)board_pci_idsel(device, 0); } + + local_irq_restore(flags); + return error; +#endif } static int read_config_byte(struct pci_bus *bus, unsigned int devfn, diff -Nru a/arch/mips/sgi-ip27/ip27-hubio.c b/arch/mips/sgi-ip27/ip27-hubio.c --- a/arch/mips/sgi-ip27/ip27-hubio.c Tue May 18 23:38:08 2004 +++ b/arch/mips/sgi-ip27/ip27-hubio.c Tue May 18 23:38:08 2004 @@ -166,18 +166,18 @@ REMOTE_HUB_S(nasid, IIO_OUTWIDGET_ACCESS, ii_iowa); } -/** +/* * hub_pio_init - PIO-related hub initalization * * @hub: hubinfo structure for our hub - **/ + */ void hub_pio_init(cnodeid_t cnode) { nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode); unsigned i; /* initialize big window piomaps for this hub */ - CLEAR_BITMAP(HUB_DATA(cnode)->h_bigwin_used, HUB_NUM_BIG_WINDOW); + bitmap_zero(HUB_DATA(cnode)->h_bigwin_used, HUB_NUM_BIG_WINDOW); for (i = 0; i < HUB_NUM_BIG_WINDOW; i++) IIO_ITTE_DISABLE(nasid, i); diff -Nru a/arch/mips/vr41xx/casio-e55/setup.c b/arch/mips/vr41xx/casio-e55/setup.c --- a/arch/mips/vr41xx/casio-e55/setup.c Tue May 18 23:38:06 2004 +++ b/arch/mips/vr41xx/casio-e55/setup.c Tue May 18 23:38:06 2004 @@ -35,7 +35,8 @@ ioport_resource.end = IO_PORT_RESOURCE_END; #ifdef CONFIG_SERIAL_8250 - vr41xx_siu_init(SIU_RS232C, 0); + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); #endif return 0; diff -Nru a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c --- a/arch/mips/vr41xx/common/icu.c Tue May 18 23:38:05 2004 +++ b/arch/mips/vr41xx/common/icu.c Tue May 18 23:38:05 2004 @@ -1,34 +1,23 @@ /* - * FILE NAME - * arch/mips/vr41xx/common/icu.c + * icu.c, Interrupt Control Unit routines for the NEC VR4100 series. * - * BRIEF MODULE DESCRIPTION - * Interrupt Control Unit routines for the NEC VR4100 series. - * - * Author: Yoichi Yuasa - * yyuasa@mvista.com or source@mvista.com - * - * Copyright 2001,2002 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. + * Copyright (C) 2001-2002 MontaVista Software Inc. + * Author: Yoichi Yuasa + * Copyright (C) 2003-2004 Yoichi Yuasa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Changes: @@ -90,6 +79,9 @@ #define MSYSINT2REG 0x06 #define MGIUINTHREG 0x08 +#define MDSIUINTREG KSEG1ADDR(0x0f000096) + #define INTDSIU 0x0800 + #define SYSINT1_IRQ_TO_PIN(x) ((x) - SYSINT1_IRQ_BASE) /* Pin 0-15 */ #define SYSINT2_IRQ_TO_PIN(x) ((x) - SYSINT2_IRQ_BASE) /* Pin 0-15 */ @@ -144,6 +136,18 @@ write_icu2(res, offset); return res; +} + +/*=======================================================================*/ + +void vr41xx_enable_dsiuint(void) +{ + writew(INTDSIU, MDSIUINTREG); +} + +void vr41xx_disable_dsiuint(void) +{ + writew(0, MDSIUINTREG); } /*=======================================================================*/ diff -Nru a/arch/mips/vr41xx/common/serial.c b/arch/mips/vr41xx/common/serial.c --- a/arch/mips/vr41xx/common/serial.c Tue May 18 23:38:06 2004 +++ b/arch/mips/vr41xx/common/serial.c Tue May 18 23:38:06 2004 @@ -40,14 +40,8 @@ #include #include -/* VR4111 and VR4121 SIU Registers */ -#define SIURB_TYPE1 KSEG1ADDR(0x0c000000) #define SIUIRSEL_TYPE1 KSEG1ADDR(0x0c000008) - -/* VR4122, VR4131 and VR4133 SIU Registers */ -#define SIURB_TYPE2 KSEG1ADDR(0x0f000800) #define SIUIRSEL_TYPE2 KSEG1ADDR(0x0f000808) - #define USE_RS232C 0x00 #define USE_IRDA 0x01 #define SIU_USES_IRDA 0x00 @@ -58,21 +52,24 @@ #define TMICTX 0x10 #define TMICMODE 0x20 -#define SIU_BASE_BAUD 1152000 +#define SIU_BASE_TYPE1 0x0c000000UL /* VR4111 and VR4121 */ +#define SIU_BASE_TYPE2 0x0f000800UL /* VR4122, VR4131 and VR4133 */ +#define SIU_SIZE 0x8UL -/* VR4122 and VR4131 DSIU Registers */ -#define DSIURB KSEG1ADDR(0x0f000820) +#define SIU_BASE_BAUD 1152000 -#define MDSIUINTREG KSEG1ADDR(0x0f000096) - #define INTDSIU 0x0800 +/* VR4122, VR4131 and VR4133 DSIU Registers */ +#define DSIU_BASE 0x0f000820UL +#define DSIU_SIZE 0x8UL #define DSIU_BASE_BAUD 1152000 int vr41xx_serial_ports = 0; -void vr41xx_siu_ifselect(int interface, int module) +void vr41xx_select_siu_interface(siu_interface_t interface, + irda_module_t module) { - u16 val = USE_RS232C; /* Select RS-232C */ + uint16_t val = USE_RS232C; /* Select RS-232C */ /* Select IrDA */ if (interface == SIU_IRDA) { @@ -86,6 +83,9 @@ case IRDA_HP: val = IRDA_MODULE_HP; break; + default: + printk(KERN_ERR "SIU: unknown IrDA module\n"); + return; } val |= USE_IRDA | SIU_USES_IRDA; } @@ -101,45 +101,47 @@ writew(val, SIUIRSEL_TYPE2); break; default: - printk(KERN_INFO "Unexpected CPU of NEC VR4100 series\n"); + printk(KERN_ERR "SIU: unsupported CPU of NEC VR4100 series\n"); break; } } -void __init vr41xx_siu_init(int interface, int module) +void __init vr41xx_siu_init(void) { struct uart_port port; - vr41xx_siu_ifselect(interface, module); - memset(&port, 0, sizeof(port)); port.line = vr41xx_serial_ports; - port.uartclk = SIU_BASE_BAUD; + port.uartclk = SIU_BASE_BAUD * 16; port.irq = SIU_IRQ; - port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; + port.flags = UPF_RESOURCES | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; switch (current_cpu_data.cputype) { case CPU_VR4111: case CPU_VR4121: - port.membase = (char *)SIURB_TYPE1; + port.mapbase = SIU_BASE_TYPE1; break; case CPU_VR4122: case CPU_VR4131: case CPU_VR4133: - port.membase = (char *)SIURB_TYPE2; + port.mapbase = SIU_BASE_TYPE2; break; default: - panic("Unexpected CPU of NEC VR4100 series"); - break; + printk(KERN_ERR "SIU: unsupported CPU of NEC VR4100 series\n"); + return; } port.regshift = 0; port.iotype = UPIO_MEM; - if (early_serial_setup(&port) != 0) - printk(KERN_ERR "SIU setup failed!\n"); - - vr41xx_supply_clock(SIU_CLOCK); + port.membase = ioremap(port.mapbase, SIU_SIZE); + if (port.membase != NULL) { + if (early_serial_setup(&port) == 0) { + vr41xx_supply_clock(SIU_CLOCK); + vr41xx_serial_ports++; + return; + } + } - vr41xx_serial_ports++; + printk(KERN_ERR "SIU: setup failed!\n"); } void __init vr41xx_dsiu_init(void) @@ -148,24 +150,29 @@ if (current_cpu_data.cputype != CPU_VR4122 && current_cpu_data.cputype != CPU_VR4131 && - current_cpu_data.cputype != CPU_VR4133) + current_cpu_data.cputype != CPU_VR4133) { + printk(KERN_ERR "DSIU: unsupported CPU of NEC VR4100 series\n"); return; + } memset(&port, 0, sizeof(port)); port.line = vr41xx_serial_ports; - port.uartclk = DSIU_BASE_BAUD; + port.uartclk = DSIU_BASE_BAUD * 16; port.irq = DSIU_IRQ; - port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; - port.membase = (char *)DSIURB; + port.flags = UPF_RESOURCES | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST; + port.mapbase = DSIU_BASE; port.regshift = 0; port.iotype = UPIO_MEM; - if (early_serial_setup(&port) != 0) - printk(KERN_ERR "DSIU setup failed!\n"); - - vr41xx_supply_clock(DSIU_CLOCK); - - writew(INTDSIU, MDSIUINTREG); + port.membase = ioremap(port.mapbase, DSIU_SIZE); + if (port.membase != NULL) { + if (early_serial_setup(&port) == 0) { + vr41xx_supply_clock(DSIU_CLOCK); + vr41xx_enable_dsiuint(); + vr41xx_serial_ports++; + return; + } + } - vr41xx_serial_ports++; + printk(KERN_ERR "DSIU: setup failed!\n"); } diff -Nru a/arch/mips/vr41xx/ibm-workpad/setup.c b/arch/mips/vr41xx/ibm-workpad/setup.c --- a/arch/mips/vr41xx/ibm-workpad/setup.c Tue May 18 23:38:05 2004 +++ b/arch/mips/vr41xx/ibm-workpad/setup.c Tue May 18 23:38:05 2004 @@ -35,7 +35,8 @@ ioport_resource.end = IO_PORT_RESOURCE_END; #ifdef CONFIG_SERIAL_8250 - vr41xx_siu_init(SIU_RS232C, 0); + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); #endif return 0; diff -Nru a/arch/mips/vr41xx/nec-eagle/setup.c b/arch/mips/vr41xx/nec-eagle/setup.c --- a/arch/mips/vr41xx/nec-eagle/setup.c Tue May 18 23:38:05 2004 +++ b/arch/mips/vr41xx/nec-eagle/setup.c Tue May 18 23:38:05 2004 @@ -80,8 +80,9 @@ ioport_resource.end = IO_PORT_RESOURCE_END; #ifdef CONFIG_SERIAL_8250 + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); vr41xx_dsiu_init(); - vr41xx_siu_init(SIU_RS232C, 0); #endif #ifdef CONFIG_PCI diff -Nru a/arch/mips/vr41xx/tanbac-tb0226/setup.c b/arch/mips/vr41xx/tanbac-tb0226/setup.c --- a/arch/mips/vr41xx/tanbac-tb0226/setup.c Tue May 18 23:38:06 2004 +++ b/arch/mips/vr41xx/tanbac-tb0226/setup.c Tue May 18 23:38:06 2004 @@ -83,7 +83,10 @@ ioport_resource.start = IO_PORT_RESOURCE_START; ioport_resource.end = IO_PORT_RESOURCE_END; - vr41xx_siu_init(SIU_RS232C, 0); +#ifdef CONFIG_SERIAL_8250 + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); +#endif #ifdef CONFIG_PCI vr41xx_pciu_init(&pci_address_map); diff -Nru a/arch/mips/vr41xx/tanbac-tb0229/setup.c b/arch/mips/vr41xx/tanbac-tb0229/setup.c --- a/arch/mips/vr41xx/tanbac-tb0229/setup.c Tue May 18 23:38:07 2004 +++ b/arch/mips/vr41xx/tanbac-tb0229/setup.c Tue May 18 23:38:07 2004 @@ -87,8 +87,11 @@ ioport_resource.start = IO_PORT_RESOURCE_START; ioport_resource.end = IO_PORT_RESOURCE_END; - vr41xx_siu_init(SIU_RS232C, 0); +#ifdef CONFIG_SERIAL_8250 + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); vr41xx_dsiu_init(); +#endif #ifdef CONFIG_PCI vr41xx_pciu_init(&pci_address_map); diff -Nru a/arch/mips/vr41xx/victor-mpc30x/setup.c b/arch/mips/vr41xx/victor-mpc30x/setup.c --- a/arch/mips/vr41xx/victor-mpc30x/setup.c Tue May 18 23:38:08 2004 +++ b/arch/mips/vr41xx/victor-mpc30x/setup.c Tue May 18 23:38:08 2004 @@ -84,7 +84,8 @@ ioport_resource.end = IO_PORT_RESOURCE_END; #ifdef CONFIG_SERIAL_8250 - vr41xx_siu_init(SIU_RS232C, 0); + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); #endif #ifdef CONFIG_PCI diff -Nru a/arch/mips/vr41xx/zao-capcella/setup.c b/arch/mips/vr41xx/zao-capcella/setup.c --- a/arch/mips/vr41xx/zao-capcella/setup.c Tue May 18 23:38:06 2004 +++ b/arch/mips/vr41xx/zao-capcella/setup.c Tue May 18 23:38:06 2004 @@ -84,7 +84,8 @@ ioport_resource.end = IO_PORT_RESOURCE_END; #ifdef CONFIG_SERIAL_8250 - vr41xx_siu_init(SIU_RS232C, 0); + vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE); + vr41xx_siu_init(); vr41xx_dsiu_init(); #endif diff -Nru a/arch/parisc/Kconfig b/arch/parisc/Kconfig --- a/arch/parisc/Kconfig Tue May 18 23:38:08 2004 +++ b/arch/parisc/Kconfig Tue May 18 23:38:08 2004 @@ -51,25 +51,34 @@ config PA7000 bool "PA7000/PA7100" ---help--- - This is the processor type of your CPU. This information is used for - optimizing purposes. In order to compile a kernel that can run on - all PA CPUs (albeit not optimally fast), you can specify "PA7000" - here. + This is the processor type of your CPU. This information is + used for optimizing purposes. In order to compile a kernel + that can run on all 32-bit PA CPUs (albeit not optimally fast), + you can specify "PA7000" here. Specifying "PA8000" here will allow you to select a 64-bit kernel which is required on some machines. config PA7100LC - bool "PA7100LC/PA7300LC" + bool "PA7100LC" help - Select this option for a 7100LC or 7300LC processor, as used - in the 712, 715/Mirage, A180, B132, C160L and some other machines. + Select this option for the PCX-L processor, as used in the + 712, 715/64, 715/80, 715/100, 715/100XC, 725/100, 743, 748, + D200, D210, D300, D310 and E-class config PA7200 bool "PA7200" help - Select this option for the PCX-T' processor, as used in C110, D100 - and similar machines. + Select this option for the PCX-T' processor, as used in the + C100, C110, J100, J110, J210XC, D250, D260, D350, D360, + K100, K200, K210, K220, K400, K410 and K420 + +config PA7300LC + bool "PA7300LC" + help + Select this option for the PCX-L2 processor, as used in the + 744, A180, B132L, B160L, B180L, C132L, C160L, C180L, + D220, D230, D320 and D330. config PA8X00 bool "PA8000 and up" @@ -81,14 +90,16 @@ # Define implied options from the CPU selection here config PA20 - bool + def_bool y depends on PA8X00 - default y config PA11 - bool - depends on PA7000 || PA7100LC || PA7200 - default y + def_bool y + depends on PA7000 || PA7100LC || PA7200 || PA7300LC + +config PREFETCH + def_bool y + depends on PA8X00 config PARISC64 bool "64-bit kernel" @@ -105,18 +116,6 @@ config 64BIT def_bool PARISC64 - -config PDC_NARROW - bool "32-bit firmware" - depends on PARISC64 - help - This option will enable owners of C160, C180, C200, C240, C360, J280, - J282, J2240 and some D/K/R class to run a 64bit kernel with their - 32bit PDC firmware. - - Nobody should try this option unless they know what they are doing. - - If unsure, say N. config SMP bool "Symmetric multi-processing support" diff -Nru a/arch/parisc/Makefile b/arch/parisc/Makefile --- a/arch/parisc/Makefile Tue May 18 23:38:09 2004 +++ b/arch/parisc/Makefile Tue May 18 23:38:09 2004 @@ -16,7 +16,7 @@ # Modified for PA-RISC Linux by Paul Lahaie, Alex deVries, # Mike Shaver, Helge Deller and Martin K. Petersen # -NM = sh arch/parisc/nm +NM = sh $(srctree)/arch/parisc/nm ifdef CONFIG_PARISC64 CROSS_COMPILE := hppa64-linux- UTS_MACHINE := parisc64 @@ -48,6 +48,7 @@ cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100 cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200 cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC +cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300 cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000 head-y := arch/parisc/kernel/head.o diff -Nru a/arch/parisc/configs/712_defconfig b/arch/parisc/configs/712_defconfig --- a/arch/parisc/configs/712_defconfig Tue May 18 23:38:09 2004 +++ b/arch/parisc/configs/712_defconfig Tue May 18 23:38:09 2004 @@ -142,6 +142,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_FC_ATTRS=y + +# # SCSI low-level drivers # # CONFIG_SCSI_AIC7XXX_OLD is not set @@ -180,10 +186,6 @@ # # -# Macintosh device drivers -# - -# # Networking support # CONFIG_NET=y @@ -206,7 +208,6 @@ # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set -CONFIG_INET_ECN=y # CONFIG_SYN_COOKIES is not set # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -290,6 +291,8 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem @@ -335,6 +338,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_HIL_OLD is not set @@ -342,6 +346,7 @@ CONFIG_INPUT_MOUSE=y # CONFIG_MOUSE_PS2 is not set # CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_MOUSE_HIL is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set @@ -385,11 +390,6 @@ # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set # CONFIG_TIPAR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set # CONFIG_QIC02_TAPE is not set # @@ -401,7 +401,6 @@ # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set CONFIG_GEN_RTC=y # CONFIG_GEN_RTC_X is not set # CONFIG_DTLK is not set @@ -635,6 +634,7 @@ # CONFIG_CRYPTO_CAST6 is not set # CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_TEST is not set # diff -Nru a/arch/parisc/configs/a500_defconfig b/arch/parisc/configs/a500_defconfig --- a/arch/parisc/configs/a500_defconfig Tue May 18 23:38:06 2004 +++ b/arch/parisc/configs/a500_defconfig Tue May 18 23:38:06 2004 @@ -27,7 +27,7 @@ CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_EMBEDDED=y -# CONFIG_KALLSYMS is not set +CONFIG_KALLSYMS=y CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_IOSCHED_NOOP=y @@ -78,6 +78,7 @@ # PCMCIA/CardBus support # CONFIG_PCMCIA=m +CONFIG_PCMCIA_DEBUG=y CONFIG_YENTA=m CONFIG_CARDBUS=y # CONFIG_I82092 is not set @@ -129,6 +130,7 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=6144 CONFIG_BLK_DEV_INITRD=y @@ -163,6 +165,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -243,10 +251,6 @@ # # -# Macintosh device drivers -# - -# # Networking support # CONFIG_NET=y @@ -270,7 +274,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set CONFIG_INET_AH=m CONFIG_INET_ESP=m @@ -348,7 +351,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -504,6 +506,11 @@ CONFIG_PCMCIA_HERMES=m CONFIG_AIRO_CS=m # CONFIG_PCMCIA_WL3501 is not set + +# +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support +# +# CONFIG_PRISM54 is not set CONFIG_NET_WIRELESS=y # @@ -512,6 +519,7 @@ # CONFIG_TR is not set # CONFIG_NET_FC is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -545,6 +553,8 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem @@ -617,11 +627,6 @@ CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set # CONFIG_QIC02_TAPE is not set # @@ -633,7 +638,6 @@ # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set CONFIG_GEN_RTC=y CONFIG_GEN_RTC_X=y # CONFIG_DTLK is not set @@ -682,7 +686,6 @@ # Console display driver support # # CONFIG_MDA_CONSOLE is not set -# CONFIG_STI_CONSOLE is not set CONFIG_DUMMY_CONSOLE_COLUMNS=160 CONFIG_DUMMY_CONSOLE_ROWS=64 CONFIG_DUMMY_CONSOLE=y @@ -788,7 +791,8 @@ CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=m CONFIG_SUNRPC=m -# CONFIG_SUNRPC_GSS is not set +CONFIG_SUNRPC_GSS=m +CONFIG_RPCSEC_GSS_KRB5=m CONFIG_SMB_FS=m CONFIG_SMB_NLS_DEFAULT=y CONFIG_SMB_NLS_REMOTE="cp437" @@ -887,6 +891,7 @@ CONFIG_CRYPTO_CAST6=m # CONFIG_CRYPTO_ARC4 is not set CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_MICHAEL_MIC is not set CONFIG_CRYPTO_TEST=m # diff -Nru a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig --- a/arch/parisc/configs/b180_defconfig Tue May 18 23:38:06 2004 +++ b/arch/parisc/configs/b180_defconfig Tue May 18 23:38:06 2004 @@ -121,6 +121,7 @@ CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=y # CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_CARMEL=y # CONFIG_BLK_DEV_RAM is not set # @@ -153,6 +154,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -245,10 +252,6 @@ # CONFIG_I2O is not set # -# Macintosh device drivers -# - -# # Networking support # CONFIG_NET=y @@ -271,7 +274,6 @@ # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set -CONFIG_INET_ECN=y # CONFIG_SYN_COOKIES is not set # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -376,6 +378,10 @@ # # CONFIG_AIRO is not set # CONFIG_HERMES is not set + +# +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support +# CONFIG_NET_WIRELESS=y # @@ -403,6 +409,8 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem @@ -449,6 +457,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_HIL_OLD is not set @@ -459,6 +468,7 @@ # CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_MOUSE_HIL is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set @@ -502,11 +512,6 @@ # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set # CONFIG_TIPAR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set # CONFIG_QIC02_TAPE is not set # @@ -518,7 +523,6 @@ # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set CONFIG_GEN_RTC=y # CONFIG_GEN_RTC_X is not set # CONFIG_DTLK is not set @@ -768,6 +772,7 @@ # CONFIG_CRYPTO_CAST6 is not set # CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_TEST is not set # diff -Nru a/arch/parisc/configs/c3000_defconfig b/arch/parisc/configs/c3000_defconfig --- a/arch/parisc/configs/c3000_defconfig Tue May 18 23:38:07 2004 +++ b/arch/parisc/configs/c3000_defconfig Tue May 18 23:38:07 2004 @@ -77,6 +77,7 @@ # PCMCIA/CardBus support # CONFIG_PCMCIA=m +CONFIG_PCMCIA_DEBUG=y CONFIG_YENTA=m CONFIG_CARDBUS=y # CONFIG_I82092 is not set @@ -128,6 +129,7 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set # CONFIG_BLK_DEV_RAM is not set # @@ -213,6 +215,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -230,6 +238,7 @@ CONFIG_SCSI_SATA_PROMISE=m CONFIG_SCSI_SATA_SIL=m CONFIG_SCSI_SATA_VIA=m +# CONFIG_SCSI_SATA_VITESSE is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -304,10 +313,6 @@ # CONFIG_I2O is not set # -# Macintosh device drivers -# - -# # Networking support # CONFIG_NET=y @@ -331,7 +336,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set CONFIG_INET_AH=m CONFIG_INET_ESP=m @@ -409,7 +413,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -543,6 +546,7 @@ # CONFIG_NET_FC is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -576,6 +580,8 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem @@ -619,6 +625,7 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_HIL_OLD is not set @@ -626,6 +633,7 @@ CONFIG_INPUT_MOUSE=y # CONFIG_MOUSE_PS2 is not set # CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_MOUSE_HIL is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set @@ -663,11 +671,6 @@ CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 - -# -# Mice -# -# CONFIG_BUSMOUSE is not set # CONFIG_QIC02_TAPE is not set # @@ -679,7 +682,6 @@ # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set CONFIG_GEN_RTC=y CONFIG_GEN_RTC_X=y # CONFIG_DTLK is not set @@ -831,7 +833,9 @@ CONFIG_USB_WACOM=m CONFIG_USB_KBTAB=m # CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set # CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set # # USB Imaging devices @@ -968,7 +972,7 @@ CONFIG_LOCKD_V4=y CONFIG_EXPORTFS=y CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -1065,6 +1069,7 @@ CONFIG_CRYPTO_CAST6=m # CONFIG_CRYPTO_ARC4 is not set CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_MICHAEL_MIC is not set CONFIG_CRYPTO_TEST=m # diff -Nru a/arch/parisc/kernel/Makefile b/arch/parisc/kernel/Makefile --- a/arch/parisc/kernel/Makefile Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/Makefile Tue May 18 23:38:06 2004 @@ -14,7 +14,7 @@ pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \ ptrace.o hardware.o inventory.o drivers.o semaphore.o \ signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \ - process.o processor.o pdc_cons.o pdc_chassis.o + process.o processor.o pdc_cons.o pdc_chassis.o unwind.o obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_PA11) += pci-dma.o diff -Nru a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c --- a/arch/parisc/kernel/asm-offsets.c Tue May 18 23:38:05 2004 +++ b/arch/parisc/kernel/asm-offsets.c Tue May 18 23:38:05 2004 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -275,6 +276,20 @@ BLANK(); DEFINE(PA_BLOCKSTEP_BIT, 31-PT_BLOCKSTEP_BIT); DEFINE(PA_SINGLESTEP_BIT, 31-PT_SINGLESTEP_BIT); + BLANK(); + DEFINE(ASM_PMD_SHIFT, PMD_SHIFT); + DEFINE(ASM_PGDIR_SHIFT, PGDIR_SHIFT); + DEFINE(ASM_BITS_PER_PGD, BITS_PER_PGD); + DEFINE(ASM_BITS_PER_PMD, BITS_PER_PMD); + DEFINE(ASM_BITS_PER_PTE, BITS_PER_PTE); + DEFINE(ASM_PGD_PMD_OFFSET, -(PAGE_SIZE << PGD_ORDER)); + DEFINE(ASM_PMD_ENTRY, ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT)); + DEFINE(ASM_PGD_ENTRY, PAGE_OFFSET >> PGDIR_SHIFT); + DEFINE(ASM_PGD_ENTRY_SIZE, PGD_ENTRY_SIZE); + DEFINE(ASM_PMD_ENTRY_SIZE, PMD_ENTRY_SIZE); + DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE); + DEFINE(ASM_PT_INITIAL, PT_INITIAL); + DEFINE(ASM_PAGE_SIZE, PAGE_SIZE); BLANK(); return 0; } diff -Nru a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c --- a/arch/parisc/kernel/cache.c Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/cache.c Tue May 18 23:38:06 2004 @@ -230,27 +230,22 @@ void __flush_dcache_page(struct page *page) { struct address_space *mapping = page_mapping(page); - struct mm_struct *mm = current->active_mm; struct list_head *l; flush_kernel_dcache_page(page_address(page)); if (!mapping) return; - /* check shared list first if it's not empty...it's usually - * the shortest */ + + /* We have ensured in arch_get_unmapped_area() that all shared + * mappings are mapped at equivalent addresses, so we only need + * to flush one for them all to become coherent */ list_for_each(l, &mapping->i_mmap_shared) { struct vm_area_struct *mpnt; - unsigned long off; + unsigned long off, addr; mpnt = list_entry(l, struct vm_area_struct, shared); - /* - * If this VMA is not in our MM, we can ignore it. - */ - if (mpnt->vm_mm != mm) - continue; - if (page->index < mpnt->vm_pgoff) continue; @@ -258,26 +253,35 @@ if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT) continue; - flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT)); + addr = mpnt->vm_start + (off << PAGE_SHIFT); + + /* flush instructions produce non access tlb misses. + * On PA, we nullify these instructions rather than + * taking a page fault if the pte doesn't exist, so we + * have to find a congruent address with an existing + * translation */ + + if (!translation_exists(mpnt, addr)) + continue; + + __flush_cache_page(mpnt, addr); - /* All user shared mappings should be equivalently mapped, - * so once we've flushed one we should be ok - */ + /* If we find an address to flush, that will also + * bring all the private mappings up to date (see + * comment below) */ return; } - /* then check private mapping list for read only shared mappings - * which are flagged by VM_MAYSHARE */ + /* we have carefully arranged in arch_get_unmapped_area() that + * *any* mappings of a file are always congruently mapped (whether + * declared as MAP_PRIVATE or MAP_SHARED), so we only need + * to flush one address here too */ list_for_each(l, &mapping->i_mmap) { struct vm_area_struct *mpnt; - unsigned long off; + unsigned long off, addr; mpnt = list_entry(l, struct vm_area_struct, shared); - - if (mpnt->vm_mm != mm || !(mpnt->vm_flags & VM_MAYSHARE)) - continue; - if (page->index < mpnt->vm_pgoff) continue; @@ -285,12 +289,17 @@ if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT) continue; - flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT)); + addr = mpnt->vm_start + (off << PAGE_SHIFT); - /* All user shared mappings should be equivalently mapped, - * so once we've flushed one we should be ok - */ - break; + /* This is just for speed. If the page translation isn't + * there there's no point exciting the nadtlb handler into + * a nullification frenzy */ + if(!translation_exists(mpnt, addr)) + continue; + + __flush_cache_page(mpnt, addr); + + return; } } EXPORT_SYMBOL(__flush_dcache_page); diff -Nru a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S --- a/arch/parisc/kernel/entry.S Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/entry.S Tue May 18 23:38:06 2004 @@ -40,11 +40,13 @@ #ifdef __LP64__ #define CMPIB cmpib,* #define CMPB cmpb,* +#define COND(x) *x .level 2.0w #else #define CMPIB cmpib, #define CMPB cmpb, +#define COND(x) x .level 2.0 #endif @@ -389,6 +391,228 @@ .align 32 .endm + /* The following are simple 32 vs 64 bit instruction + * abstractions for the macros */ + .macro EXTR reg1,start,length,reg2 +#ifdef __LP64__ + extrd,u \reg1,32+\start,\length,\reg2 +#else + extrw,u \reg1,\start,\length,\reg2 +#endif + .endm + + .macro DEP reg1,start,length,reg2 +#ifdef __LP64__ + depd \reg1,32+\start,\length,\reg2 +#else + depw \reg1,\start,\length,\reg2 +#endif + .endm + + .macro DEPI val,start,length,reg +#ifdef __LP64__ + depdi \val,32+\start,\length,\reg +#else + depwi \val,\start,\length,\reg +#endif + .endm + + /* In LP64, the space contains part of the upper 32 bits of the + * fault. We have to extract this and place it in the va, + * zeroing the corresponding bits in the space register */ + .macro space_adjust spc,va,tmp +#ifdef __LP64__ + extrd,u \spc,63,SPACEID_SHIFT,\tmp + depd %r0,63,SPACEID_SHIFT,\spc + depd \tmp,31,SPACEID_SHIFT,\va +#endif + .endm + + .import swapper_pg_dir,code + + /* Get the pgd. For faults on space zero (kernel space), this + * is simply swapper_pg_dir. For user space faults, the + * pgd is stored in %cr25 */ + .macro get_pgd spc,reg + ldil L%PA(swapper_pg_dir),\reg + ldo R%PA(swapper_pg_dir)(\reg),\reg + or,COND(=) %r0,\spc,%r0 + mfctl %cr25,\reg + .endm + + /* Only allow faults on different spaces from the + * currently active one if we're the kernel */ + .macro space_check spc,tmp,fault + mfsp %sr7,\tmp + or,COND(<>) %r0,\spc,%r0 /* user may execute gateway page + * as kernel, so defeat the space + * check if it is */ + copy \spc,\tmp + or,COND(=) %r0,\tmp,%r0 /* nullify if executing as kernel */ + cmpb,COND(<>),n \tmp,\spc,\fault + .endm + + /* Look up a PTE in a 2-Level scheme (faulting at each + * level if the entry isn't present + * + * NOTE: we use ldw even for LP64 because our pte + * and pmd are allocated <4GB */ + .macro L2_ptep pmd,pte,index,va,fault +#if PT_NLEVELS == 3 + EXTR \va,31-ASM_PMD_SHIFT,ASM_BITS_PER_PMD,\index +#else + EXTR \va,31-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index +#endif + DEP %r0,31,PAGE_SHIFT,\pmd /* clear offset */ + copy %r0,\pte + ldw,s \index(\pmd),\pmd + EXTR \va,31-PAGE_SHIFT,ASM_BITS_PER_PTE,\index + bb,>=,n \pmd,_PAGE_PRESENT_BIT,\fault + DEP %r0,31,PAGE_SHIFT,\pmd /* clear offset */ + shladd \index,BITS_PER_PTE_ENTRY,\pmd,\pmd + LDREG %r0(\pmd),\pte /* pmd is now pte */ + bb,>=,n \pte,_PAGE_PRESENT_BIT,\fault + .endm + + /* Look up PTE in a 3-Level scheme. + * + * Here we implement a Hybrid L2/L3 scheme: we allocate the + * first pmd adjacent to the pgd. This means that we can + * subtract a constant offset to get to it. The pmd and pgd + * sizes are arranged so that a single pmd covers 4GB (giving + * a full LP64 process access to 8TB) so our lookups are + * effectively L2 for the first 4GB of the kernel (i.e. for + * all ILP32 processes and all the kernel for machines with + * under 4GB of memory) */ + .macro L3_ptep pgd,pte,index,va,fault + extrd,u \va,63-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index + copy %r0,\pte + extrd,u,*= \va,31,32,%r0 + ldw,s \index(\pgd),\pgd + extrd,u,*<> \va,31,32,%r0 + ldo ASM_PGD_PMD_OFFSET(\pgd),\pgd + extrd,u,*= \va,31,32,%r0 + bb,>=,n \pgd,_PAGE_PRESENT_BIT,\fault + L2_ptep \pgd,\pte,\index,\va,\fault + .endm + + /* Set the _PAGE_ACCESSED bit of the PTE. Be clever and + * don't needlessly dirty the cache line if it was already set */ + .macro update_ptep ptep,pte,tmp,tmp1 + ldi _PAGE_ACCESSED,\tmp1 + or \tmp1,\pte,\tmp + and,COND(<>) \tmp1,\pte,%r0 + STREG \tmp,0(\ptep) + .endm + + /* Set the dirty bit (and accessed bit). No need to be + * clever, this is only used from the dirty fault */ + .macro update_dirty ptep,pte,tmp,tmp1 + ldi _PAGE_ACCESSED|_PAGE_DIRTY,\tmp + or \tmp,\pte,\pte + STREG \pte,0(\ptep) + .endm + + /* Convert the pte and prot to tlb insertion values. How + * this happens is quite subtle, read below */ + .macro make_insert_tlb spc,pte,prot + space_to_prot \spc \prot /* create prot id from space */ + /* The following is the real subtlety. This is depositing + * T <-> _PAGE_REFTRAP + * D <-> _PAGE_DIRTY + * B <-> _PAGE_DMB (memory break) + * + * Then incredible subtlety: The access rights are + * _PAGE_GATEWAY _PAGE_EXEC _PAGE_READ + * See 3-14 of the parisc 2.0 manual + * + * Finally, _PAGE_READ goes in the top bit of PL1 (so we + * trigger an access rights trap in user space if the user + * tries to read an unreadable page */ + depd \pte,8,7,\prot + + /* PAGE_USER indicates the page can be read with user privileges, + * so deposit X1|11 to PL1|PL2 (remember the upper bit of PL1 + * contains _PAGE_READ */ + extrd,u,*= \pte,_PAGE_USER_BIT+32,1,%r0 + depdi 7,11,3,\prot + /* If we're a gateway page, drop PL2 back to zero for promotion + * to kernel privilege (so we can execute the page as kernel). + * Any privilege promotion page always denys read and write */ + extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0 + depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */ + + /* Get rid of prot bits and convert to page addr for iitlbt */ + + depd %r0,63,PAGE_SHIFT,\pte + extrd,u \pte,56,32,\pte + .endm + + /* Identical macro to make_insert_tlb above, except it + * makes the tlb entry for the differently formatted pa11 + * insertion instructions */ + .macro make_insert_tlb_11 spc,pte,prot + zdep \spc,30,15,\prot + dep \pte,8,7,\prot + extru,= \pte,_PAGE_NO_CACHE_BIT,1,%r0 + depi 1,12,1,\prot + extru,= \pte,_PAGE_USER_BIT,1,%r0 + depi 7,11,3,\prot /* Set for user space (1 rsvd for read) */ + extru,= \pte,_PAGE_GATEWAY_BIT,1,%r0 + depi 0,11,2,\prot /* If Gateway, Set PL2 to 0 */ + + /* Get rid of prot bits and convert to page addr for iitlba */ + + depi 0,31,12,\pte + extru \pte,24,25,\pte + + .endm + + /* This is for ILP32 PA2.0 only. The TLB insertion needs + * to extend into I/O space if the address is 0xfXXXXXXX + * so we extend the f's into the top word of the pte in + * this case */ + .macro f_extend pte,tmp + extrd,s \pte,42,4,\tmp + addi,<> 1,\tmp,%r0 + extrd,s \pte,63,25,\pte + .endm + + /* The alias region is an 8MB aligned 16MB to do clear and + * copy user pages at addresses congruent with the user + * virtual address. + * + * To use the alias page, you set %r26 up with the to TLB + * entry (identifying the physical page) and %r23 up with + * the from tlb entry (or nothing if only a to entry---for + * clear_user_page_asm) */ + .macro do_alias spc,tmp,tmp1,va,pte,prot,fault + cmpib,COND(<>),n 0,\spc,\fault + ldil L%(TMPALIAS_MAP_START),\tmp +#if defined(__LP64__) && (TMPALIAS_MAP_START >= 0x80000000) + /* on LP64, ldi will sign extend into the upper 32 bits, + * which is behaviour we don't want */ + depdi 0,31,32,\tmp +#endif + copy \va,\tmp1 + DEPI 0,31,23,\tmp1 + cmpb,COND(<>),n \tmp,\tmp1,\fault + ldi (_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),\prot + depd,z \prot,8,7,\prot + /* + * OK, it is in the temp alias region, check whether "from" or "to". + * Check "subtle" note in pacache.S re: r23/r26. + */ +#ifdef __LP64__ + extrd,u,*= \va,41,1,%r0 +#else + extrw,u,= \va,9,1,%r0 +#endif + or,COND(tr) %r23,%r0,\pte + or %r26,%r0,\pte + .endm + + /* * Align fault_vector_20 on 4K boundary so that both * fault_vector_11 and fault_vector_20 are on the @@ -979,82 +1203,23 @@ #ifdef __LP64__ dtlb_miss_20w: - extrd,u spc,63,7,t1 /* adjust va */ - depd t1,31,7,va /* adjust va */ - depdi 0,63,7,spc /* adjust space */ - mfctl %cr25,ptp /* Assume user space miss */ - or,*<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extrd,u va,33,9,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,*= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,*<>,n t0,spc,dtlb_fault /* forward */ - - /* First level page table lookup */ - - ldd,s t1(ptp),ptp - extrd,u va,42,9,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20w - depdi 0,63,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - ldd,s t0(ptp),ptp - extrd,u va,51,9,t0 /* get third-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20w - depdi 0,63,12,ptp /* clear prot bits */ - - /* Third level page table lookup */ - - shladd t0,3,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldd 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dtlb_check_alias_20w - - /* Check whether the "accessed" bit was set, otherwise do so */ - - or t1,pte,t0 /* t0 has R bit set */ - and,*<> t1,pte,%r0 /* test and nullify if already set */ - std t0,0(ptp) /* write back pte */ - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + space_adjust spc,va,t0 + get_pgd spc,ptp + space_check spc,t0,dtlb_fault - /* Get rid of prot bits and convert to page addr for idtlbt */ + L3_ptep ptp,pte,t0,va,dtlb_check_alias_20w - depdi 0,63,12,pte - extrd,u pte,56,52,pte + update_ptep ptp,pte,t0,t1 + + make_insert_tlb spc,pte,prot + idtlbt pte,prot rfir nop dtlb_check_alias_20w: - - /* Check to see if fault is in the temporary alias region */ - - cmpib,*<>,n 0,spc,dtlb_fault /* forward */ - ldil L%(TMPALIAS_MAP_START),t0 - copy va,t1 - depdi 0,63,23,t1 - cmpb,*<>,n t0,t1,dtlb_fault /* forward */ - ldi (_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),prot - depd,z prot,8,7,prot - - /* - * OK, it is in the temp alias region, check whether "from" or "to". - * Check "subtle" note in pacache.S re: r23/r26. - */ - - extrd,u,*= va,41,1,r0 - or,*tr %r23,%r0,pte /* If "from" use "from" page */ - or,* %r26,%r0,pte /* else "to", use "to" page */ + do_alias spc,t0,t1,va,pte,prot,dtlb_fault idtlbt pte,prot @@ -1062,51 +1227,16 @@ nop nadtlb_miss_20w: - extrd,u spc,63,7,t1 /* adjust va */ - depd t1,31,7,va /* adjust va */ - depdi 0,63,7,spc /* adjust space */ - mfctl %cr25,ptp /* Assume user space miss */ - or,*<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extrd,u va,33,9,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,*= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,*<>,n t0,spc,nadtlb_fault /* forward */ - - /* First level page table lookup */ - - ldd,s t1(ptp),ptp - extrd,u va,42,9,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,nadtlb_emulate - depdi 0,63,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - ldd,s t0(ptp),ptp - extrd,u va,51,9,t0 /* get third-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,nadtlb_emulate - depdi 0,63,12,ptp /* clear prot bits */ - - /* Third level page table lookup */ - - shladd t0,3,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldd 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_20w - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + space_adjust spc,va,t0 + get_pgd spc,ptp + space_check spc,t0,nadtlb_fault - /* Get rid of prot bits and convert to page addr for idtlbt */ + L3_ptep ptp,pte,t0,va,nadtlb_check_flush_20w + + update_ptep ptp,pte,t0,t1 + + make_insert_tlb spc,pte,prot - depdi 0,63,12,pte - extrd,u pte,56,52,pte idtlbt pte,prot rfir @@ -1132,49 +1262,15 @@ #else dtlb_miss_11: - mfctl %cr25,ptp /* Assume user space miss */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,dtlb_fault /* forward */ - - /* First level page table lookup */ - - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_11 - depi 0,31,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dtlb_check_alias_11 - - /* Check whether the "accessed" bit was set, otherwise do so */ - - or t1,pte,t0 /* t0 has R bit set */ - and,<> t1,pte,%r0 /* test and nullify if already set */ - stw t0,0(ptp) /* write back pte */ - - zdep spc,30,15,prot /* create prot id from space */ - dep pte,8,7,prot /* add in prot bits from pte */ - - extru,= pte,_PAGE_NO_CACHE_BIT,1,r0 - depi 1,12,1,prot - extru,= pte,_PAGE_USER_BIT,1,r0 - depi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extru,= pte,_PAGE_GATEWAY_BIT,1,r0 - depi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + get_pgd spc,ptp - /* Get rid of prot bits and convert to page addr for idtlba */ + space_check spc,t0,dtlb_fault - depi 0,31,12,pte - extru pte,24,25,pte + L2_ptep ptp,pte,t0,va,dtlb_check_alias_11 + + update_ptep ptp,pte,t0,t1 + + make_insert_tlb_11 spc,pte,prot mfsp %sr1,t0 /* Save sr1 so we can use it in tlb inserts */ mtsp spc,%sr1 @@ -1215,43 +1311,16 @@ nop nadtlb_miss_11: - mfctl %cr25,ptp /* Assume user space miss */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,nadtlb_fault /* forward */ - - /* First level page table lookup */ - - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,nadtlb_emulate - depi 0,31,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_11 - - zdep spc,30,15,prot /* create prot id from space */ - dep pte,8,7,prot /* add in prot bits from pte */ - - extru,= pte,_PAGE_NO_CACHE_BIT,1,r0 - depi 1,12,1,prot - extru,= pte,_PAGE_USER_BIT,1,r0 - depi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extru,= pte,_PAGE_GATEWAY_BIT,1,r0 - depi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + get_pgd spc,ptp - /* Get rid of prot bits and convert to page addr for idtlba */ + space_check spc,t0,nadtlb_fault + + L2_ptep ptp,pte,t0,va,nadtlb_check_flush_11 + + update_ptep ptp,pte,t0,t1 + + make_insert_tlb_11 spc,pte,prot - depi 0,31,12,pte - extru pte,24,25,pte mfsp %sr1,t0 /* Save sr1 so we can use it in tlb inserts */ mtsp spc,%sr1 @@ -1289,120 +1358,44 @@ nop dtlb_miss_20: - mfctl %cr25,ptp /* Assume user space miss */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,dtlb_fault /* forward */ - - /* First level page table lookup */ - - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20 - depi 0,31,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dtlb_check_alias_20 - - /* Check whether the "accessed" bit was set, otherwise do so */ - - or t1,pte,t0 /* t0 has R bit set */ - and,<> t1,pte,%r0 /* test and nullify if already set */ - stw t0,0(ptp) /* write back pte */ - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + space_adjust spc,va,t0 + get_pgd spc,ptp + space_check spc,t0,dtlb_fault - /* Get rid of prot bits and convert to page addr for idtlbt */ + L2_ptep ptp,pte,t0,va,dtlb_check_alias_20 + + update_ptep ptp,pte,t0,t1 + + make_insert_tlb spc,pte,prot + + f_extend pte,t0 - extrd,s pte,35,4,t0 - depdi 0,63,12,pte /* clear lower 12 bits */ - addi,= 1,t0,0 - extrd,u,*tr pte,56,25,pte - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ idtlbt pte,prot rfir nop dtlb_check_alias_20: - - /* Check to see if fault is in the temporary alias region */ - - cmpib,<>,n 0,spc,dtlb_fault /* forward */ - ldil L%(TMPALIAS_MAP_START),t0 - copy va,t1 - depwi 0,31,23,t1 - cmpb,<>,n t0,t1,dtlb_fault /* forward */ - ldi (_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),prot - depd,z prot,8,7,prot - - /* - * OK, it is in the temp alias region, check whether "from" or "to". - * Check "subtle" note in pacache.S re: r23/r26. - */ - - extrw,u,= va,9,1,r0 - or,tr %r23,%r0,pte /* If "from" use "from" page */ - or %r26,%r0,pte /* else "to", use "to" page */ - + do_alias spc,t0,t1,va,pte,prot,dtlb_fault + idtlbt pte,prot rfir nop nadtlb_miss_20: - mfctl %cr25,ptp /* Assume user space miss */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,nadtlb_fault /* forward */ - - /* First level page table lookup */ - - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,nadtlb_emulate - depi 0,31,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_20 - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + get_pgd spc,ptp - /* Get rid of prot bits and convert to page addr for idtlbt */ + space_check spc,t0,nadtlb_fault + + L2_ptep ptp,pte,t0,va,nadtlb_check_flush_20 + + update_ptep ptp,pte,t0,t1 + + make_insert_tlb spc,pte,prot - extrd,s pte,35,4,t0 - depdi 0,63,12,pte /* clear lower 12 bits */ - addi,= 1,t0,0 - extrd,u,*tr pte,56,25,pte - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ + f_extend pte,t0 + idtlbt pte,prot rfir @@ -1475,119 +1468,33 @@ * on the gateway page which is in the kernel address space. */ - extrd,u spc,63,7,t1 /* adjust va */ - depd t1,31,7,va /* adjust va */ - depdi 0,63,7,spc /* adjust space */ - cmpib,*= 0,spc,itlb_miss_kernel_20w - extrd,u va,33,9,t1 /* Get pgd index */ - - mfctl %cr25,ptp /* load user pgd */ - - mfsp %sr7,t0 /* Get current space */ - or,*= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,*<>,n t0,spc,itlb_fault /* forward */ - - /* First level page table lookup */ - -itlb_miss_common_20w: - ldd,s t1(ptp),ptp - extrd,u va,42,9,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,itlb_fault - depdi 0,63,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ + space_adjust spc,va,t0 + get_pgd spc,ptp + space_check spc,t0,itlb_fault - ldd,s t0(ptp),ptp - extrd,u va,51,9,t0 /* get third-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,itlb_fault - depdi 0,63,12,ptp /* clear prot bits */ + L3_ptep ptp,pte,t0,va,itlb_fault - /* Third level page table lookup */ + update_ptep ptp,pte,t0,t1 - shladd t0,3,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldd 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,itlb_fault - - /* Check whether the "accessed" bit was set, otherwise do so */ - - or t1,pte,t0 /* t0 has R bit set */ - and,*<> t1,pte,%r0 /* test and nullify if already set */ - std t0,0(ptp) /* write back pte */ - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - - /* Get rid of prot bits and convert to page addr for iitlbt */ - - depdi 0,63,12,pte - extrd,u pte,56,32,pte + make_insert_tlb spc,pte,prot + iitlbt pte,prot rfir nop -itlb_miss_kernel_20w: - b itlb_miss_common_20w - mfctl %cr24,ptp /* Load kernel pgd */ #else itlb_miss_11: + get_pgd spc,ptp - /* - * I miss is a little different, since we allow users to fault - * on the gateway page which is in the kernel address space. - */ - - cmpib,= 0,spc,itlb_miss_kernel_11 - extru va,9,10,t1 /* Get pgd index */ - - mfctl %cr25,ptp /* load user pgd */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,itlb_fault /* forward */ + space_check spc,t0,itlb_fault - /* First level page table lookup */ + L2_ptep ptp,pte,t0,va,itlb_fault -itlb_miss_common_11: - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,itlb_fault - depi 0,31,12,ptp /* clear prot bits */ + update_ptep ptp,pte,t0,t1 - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,itlb_fault - - /* Check whether the "accessed" bit was set, otherwise do so */ - - or t1,pte,t0 /* t0 has R bit set */ - and,<> t1,pte,%r0 /* test and nullify if already set */ - stw t0,0(ptp) /* write back pte */ - - zdep spc,30,15,prot /* create prot id from space */ - dep pte,8,7,prot /* add in prot bits from pte */ - - extru,= pte,_PAGE_NO_CACHE_BIT,1,r0 - depi 1,12,1,prot - extru,= pte,_PAGE_USER_BIT,1,r0 - depi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extru,= pte,_PAGE_GATEWAY_BIT,1,r0 - depi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - - /* Get rid of prot bits and convert to page addr for iitlba */ - - depi 0,31,12,pte - extru pte,24,25,pte + make_insert_tlb_11 spc,pte,prot mfsp %sr1,t0 /* Save sr1 so we can use it in tlb inserts */ mtsp spc,%sr1 @@ -1600,106 +1507,35 @@ rfir nop -itlb_miss_kernel_11: - b itlb_miss_common_11 - mfctl %cr24,ptp /* Load kernel pgd */ - itlb_miss_20: + get_pgd spc,ptp - /* - * I miss is a little different, since we allow users to fault - * on the gateway page which is in the kernel address space. - */ - - cmpib,= 0,spc,itlb_miss_kernel_20 - extru va,9,10,t1 /* Get pgd index */ - - mfctl %cr25,ptp /* load user pgd */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,itlb_fault /* forward */ - - /* First level page table lookup */ - -itlb_miss_common_20: - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,itlb_fault - depi 0,31,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp - ldi _PAGE_ACCESSED,t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,itlb_fault - - /* Check whether the "accessed" bit was set, otherwise do so */ + space_check spc,t0,itlb_fault - or t1,pte,t0 /* t0 has R bit set */ - and,<> t1,pte,%r0 /* test and nullify if already set */ - stw t0,0(ptp) /* write back pte */ + L2_ptep ptp,pte,t0,va,itlb_fault - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ + update_ptep ptp,pte,t0,t1 - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ + make_insert_tlb spc,pte,prot - /* Get rid of prot bits and convert to page addr for iitlbt */ + f_extend pte,t0 - extrd,s pte,35,4,t0 - depdi 0,63,12,pte /* clear lower 12 bits */ - addi,= 1,t0,0 - extrd,u,*tr pte,56,25,pte - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ iitlbt pte,prot rfir nop - -itlb_miss_kernel_20: - b itlb_miss_common_20 - mfctl %cr24,ptp /* Load kernel pgd */ #endif #ifdef __LP64__ dbit_trap_20w: - extrd,u spc,63,7,t1 /* adjust va */ - depd t1,31,7,va /* adjust va */ - depdi 0,1,2,va /* adjust va */ - depdi 0,63,7,spc /* adjust space */ - mfctl %cr25,ptp /* Assume user space miss */ - or,*<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extrd,u va,33,9,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,*= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,*<>,n t0,spc,dbit_fault /* forward */ - - /* First level page table lookup */ - - ldd,s t1(ptp),ptp - extrd,u va,42,9,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dbit_fault - depdi 0,63,12,ptp /* clear prot bits */ - - /* Second level page table lookup */ - - ldd,s t0(ptp),ptp - extrd,u va,51,9,t0 /* get third-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dbit_fault - depdi 0,63,12,ptp /* clear prot bits */ + space_adjust spc,va,t0 + get_pgd spc,ptp + space_check spc,t0,dbit_fault - /* Third level page table lookup */ + L3_ptep ptp,pte,t0,va,dbit_fault - shladd t0,3,ptp,ptp #ifdef CONFIG_SMP CMPIB=,n 0,spc,dbit_nolock_20w ldil L%PA(pa_dbit_lock),t0 @@ -1712,27 +1548,10 @@ dbit_nolock_20w: #endif - ldi (_PAGE_ACCESSED|_PAGE_DIRTY),t1 - ldd 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dbit_fault - - /* Set Accessed and Dirty bits in the pte */ - - or t1,pte,pte - std pte,0(ptp) /* write back pte */ - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - - /* Get rid of prot bits and convert to page addr for idtlbt */ + update_dirty ptp,pte,t0,t1 - depdi 0,63,12,pte - extrd,u pte,56,52,pte + make_insert_tlb spc,pte,prot + idtlbt pte,prot #ifdef CONFIG_SMP CMPIB=,n 0,spc,dbit_nounlock_20w @@ -1747,25 +1566,13 @@ #else dbit_trap_11: - mfctl %cr25,ptp /* Assume user space trap */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,dbit_fault /* forward */ + get_pgd spc,ptp - /* First level page table lookup */ + space_check spc,t0,dbit_fault - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dbit_fault - depi 0,31,12,ptp /* clear prot bits */ + L2_ptep ptp,pte,t0,va,dbit_fault - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp #ifdef CONFIG_SMP CMPIB=,n 0,spc,dbit_nolock_11 ldil L%PA(pa_dbit_lock),t0 @@ -1778,29 +1585,9 @@ dbit_nolock_11: #endif - ldi (_PAGE_ACCESSED|_PAGE_DIRTY),t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dbit_fault - - /* Set Accessed and Dirty bits in the pte */ - - or t1,pte,pte - stw pte,0(ptp) /* write back pte */ - - zdep spc,30,15,prot /* create prot id from space */ - dep pte,8,7,prot /* add in prot bits from pte */ - - extru,= pte,_PAGE_NO_CACHE_BIT,1,r0 - depi 1,12,1,prot - extru,= pte,_PAGE_USER_BIT,1,r0 - depi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extru,= pte,_PAGE_GATEWAY_BIT,1,r0 - depi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - - /* Get rid of prot bits and convert to page addr for idtlba */ + update_dirty ptp,pte,t0,t1 - depi 0,31,12,pte - extru pte,24,25,pte + make_insert_tlb_11 spc,pte,prot mfsp %sr1,t1 /* Save sr1 so we can use it in tlb inserts */ mtsp spc,%sr1 @@ -1821,25 +1608,12 @@ nop dbit_trap_20: - mfctl %cr25,ptp /* Assume user space trap */ - or,<> %r0,spc,%r0 /* If it is user space, nullify */ - mfctl %cr24,ptp /* Load kernel pgd instead */ - extru va,9,10,t1 /* Get pgd index */ - - mfsp %sr7,t0 /* Get current space */ - or,= %r0,t0,%r0 /* If kernel, nullify following test */ - cmpb,<>,n t0,spc,dbit_fault /* forward */ + get_pgd spc,ptp - /* First level page table lookup */ + space_check spc,t0,dbit_fault - ldwx,s t1(ptp),ptp - extru va,19,10,t0 /* get second-level index */ - bb,>=,n ptp,_PAGE_PRESENT_BIT,dbit_fault - depi 0,31,12,ptp /* clear prot bits */ + L2_ptep ptp,pte,t0,va,dbit_fault - /* Second level page table lookup */ - - sh2addl t0,ptp,ptp #ifdef CONFIG_SMP CMPIB=,n 0,spc,dbit_nolock_20 ldil L%PA(pa_dbit_lock),t0 @@ -1852,28 +1626,12 @@ dbit_nolock_20: #endif - ldi (_PAGE_ACCESSED|_PAGE_DIRTY),t1 - ldw 0(ptp),pte - bb,>=,n pte,_PAGE_PRESENT_BIT,dbit_fault - - /* Set Accessed and Dirty bits in the pte */ - - or t1,pte,pte - stw pte,0(ptp) /* write back pte */ - - space_to_prot spc prot /* create prot id from space */ - depd pte,8,7,prot /* add in prot bits from pte */ - - extrd,u,*= pte,_PAGE_USER_BIT+32,1,r0 - depdi 7,11,3,prot /* Set for user space (1 rsvd for read) */ - extrd,u,*= pte,_PAGE_GATEWAY_BIT+32,1,r0 - depdi 0,11,2,prot /* If Gateway, Set PL2 to 0 */ - - extrd,s pte,35,4,t0 - depdi 0,63,12,pte /* clear lower 12 bits */ - addi,= 1,t0,0 - extrd,u,*tr pte,56,25,pte - extrd,s pte,56,25,pte /* bit 31:8 >> 8 */ + update_dirty ptp,pte,t0,t1 + + make_insert_tlb spc,pte,prot + + f_extend pte,t0 + idtlbt pte,prot #ifdef CONFIG_SMP @@ -2285,9 +2043,13 @@ bb,<,n %r19, 31-TIF_SIGPENDING, syscall_do_signal /* forward */ syscall_restore: - LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 /* get ti flags */ - bb,< %r19, 31-TIF_SYSCALL_TRACE,syscall_restore_rfi - LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* delay slot! */ + /* Are we being ptraced? */ + LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 + + LDREG TASK_PTRACE(%r1), %r19 + bb,< %r19,31,syscall_restore_rfi + nop + ldo TASK_PT_FR31(%r1),%r19 /* reload fpregs */ rest_fp %r19 @@ -2337,7 +2099,6 @@ * the most efficient way of doing things, but it works. */ syscall_restore_rfi: - LDREG TASK_PTRACE(%r1), %r19 ldo -1(%r0),%r2 /* Set recovery cntr to -1 */ mtctl %r2,%cr0 /* for immediate trap */ LDREG TASK_PT_PSW(%r1),%r2 /* Get old PSW */ diff -Nru a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c --- a/arch/parisc/kernel/firmware.c Tue May 18 23:38:05 2004 +++ b/arch/parisc/kernel/firmware.c Tue May 18 23:38:05 2004 @@ -10,6 +10,7 @@ * Copyright 1999 SuSE GmbH Nuernberg (Philipp Rumpf, prumpf@tux.org) * Copyright 1999 The Puffin Group, (Alex deVries, David Kennedy) * Copyright 2003 Grant Grundler + * Copyright 2003,2004 Ryan Bradetich * * 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 @@ -71,6 +72,15 @@ static unsigned long pdc_result[32] __attribute__ ((aligned (8))); static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); +#ifdef __LP64__ +#define WIDE_FIRMWARE 0x1 +#define NARROW_FIRMWARE 0x2 + +/* Firmware needs to be initially set to narrow to determine the + * actual firmware width. */ +int parisc_narrow_firmware = 1; +#endif + /* on all currently-supported platforms, IODC I/O calls are always * 32-bit calls, and MEM_PDC calls are always the same width as the OS. * This means Cxxx boxes can't run wide kernels right now. -PB @@ -87,11 +97,11 @@ #endif long real32_call(unsigned long function, ...); -#if defined(__LP64__) && ! defined(CONFIG_PDC_NARROW) -#define MEM_PDC (unsigned long)(PAGE0->mem_pdc_hi) << 32 | PAGE0->mem_pdc -# define mem_pdc_call(args...) real64_call(MEM_PDC, args) +#ifdef __LP64__ +# define MEM_PDC (unsigned long)(PAGE0->mem_pdc_hi) << 32 | PAGE0->mem_pdc +# define mem_pdc_call(args...) unlikely(parisc_narrow_firmware) ? real32_call(MEM_PDC, args) : real64_call(MEM_PDC, args) #else -#define MEM_PDC (unsigned long)PAGE0->mem_pdc +# define MEM_PDC (unsigned long)PAGE0->mem_pdc # define mem_pdc_call(args...) real32_call(MEM_PDC, args) #endif @@ -105,12 +115,14 @@ */ static unsigned long f_extend(unsigned long address) { -#ifdef CONFIG_PDC_NARROW - if((address & 0xff000000) == 0xf0000000) - return 0xf0f0f0f000000000 | (u32)address; +#ifdef __LP64__ + if(unlikely(parisc_narrow_firmware)) { + if((address & 0xff000000) == 0xf0000000) + return 0xf0f0f0f000000000 | (u32)address; - if((address & 0xf0000000) == 0xf0000000) - return 0xffffffff00000000 | (u32)address; + if((address & 0xf0000000) == 0xf0000000) + return 0xffffffff00000000 | (u32)address; + } #endif return address; } @@ -125,11 +137,34 @@ */ static void convert_to_wide(unsigned long *addr) { -#ifdef CONFIG_PDC_NARROW +#ifdef __LP64__ int i; - unsigned *p = (unsigned int *)addr; - for(i = 31; i >= 0; --i) - addr[i] = p[i]; + unsigned int *p = (unsigned int *)addr; + + if(unlikely(parisc_narrow_firmware)) { + for(i = 31; i >= 0; --i) + addr[i] = p[i]; + } +#endif +} + +/** + * set_firmware_width - Determine if the firmware is wide or narrow. + * + * This function must be called before any pdc_* function that uses the convert_to_wide + * function. + */ +void __init set_firmware_width(void) +{ +#ifdef __LP64__ + int retval; + + spin_lock_irq(&pdc_lock); + retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); + convert_to_wide(pdc_result); + if(pdc_result[0] != NARROW_FIRMWARE) + parisc_narrow_firmware = 0; + spin_unlock_irq(&pdc_lock); #endif } @@ -582,6 +617,7 @@ case 10: *period = 1000; break; case 20: *period = 500; break; case 40: *period = 250; break; + case 80: *period = 125; break; default: /* Do nothing */ break; } diff -Nru a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c --- a/arch/parisc/kernel/hardware.c Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/hardware.c Tue May 18 23:38:06 2004 @@ -1273,8 +1273,8 @@ { 0x05e6, 0x0ffe, pcxw2 }, /* 0x05e6 - 0x05e7 */ { 0x05e8, 0x0ff8, pcxw2 }, /* 0x05e8 - 0x05ef */ { 0x05f0, 0x0ff0, pcxw2 }, /* 0x05f0 - 0x05ff */ - { 0x0600, 0x0ff0, pcxl }, /* 0x0600 - 0x060f */ - { 0x0610, 0x0ff0, pcxl }, /* 0x0610 - 0x061f */ + { 0x0600, 0x0fe0, pcxl }, /* 0x0600 - 0x061f */ + { 0x0880, 0x0ff0, mako }, /* 0x0880 - 0x088f */ { 0x0000, 0x0000, pcx } /* terminate table */ }; @@ -1289,7 +1289,8 @@ [pcxu_] { "PA8200 (PCX-U+)", "2.0" }, [pcxw] { "PA8500 (PCX-W)", "2.0" }, [pcxw_] { "PA8600 (PCX-W+)", "2.0" }, - [pcxw2] { "PA8700 (PCX-W2)", "2.0" } + [pcxw2] { "PA8700 (PCX-W2)", "2.0" }, + [mako] { "PA8800 (MAKO)", "2.0" } }; const char * __init diff -Nru a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S --- a/arch/parisc/kernel/head.S Tue May 18 23:38:08 2004 +++ b/arch/parisc/kernel/head.S Tue May 18 23:38:08 2004 @@ -82,19 +82,21 @@ ldo R%PA(swapper_pg_dir)(%r4),%r4 mtctl %r4,%cr24 /* Initialize kernel root pointer */ mtctl %r4,%cr25 /* Initialize user root pointer */ + ldi ASM_PT_INITIAL,%r1 + ldo ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4 +1: + stw %r3,0(%r4) + ldo ASM_PAGE_SIZE(%r3),%r3 + addib,> -1,%r1,1b + ldo ASM_PGD_ENTRY_SIZE(%r4),%r4 -#if (__PAGE_OFFSET != 0x10000000UL) -Error! Code below (the next two stw's) needs to be changed -#endif - - stw %r3,0x100(%r4) /* Hardwired 0x1... kernel Vaddr start*/ - ldo 0x1000(%r3),%r3 - stw %r3,0x104(%r4) ldo _PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */ + ldil L%PA(pg0),%r1 + ldo R%PA(pg0)(%r1),%r1 $pgt_fill_loop: - stwm %r3,4(%r1) - ldo 0x1000(%r3),%r3 - bb,>= %r3,8,$pgt_fill_loop + stwm %r3,ASM_PTE_ENTRY_SIZE(%r1) + ldo ASM_PAGE_SIZE(%r3),%r3 + bb,>= %r3,31-KERNEL_INITIAL_ORDER,$pgt_fill_loop nop diff -Nru a/arch/parisc/kernel/head64.S b/arch/parisc/kernel/head64.S --- a/arch/parisc/kernel/head64.S Tue May 18 23:38:05 2004 +++ b/arch/parisc/kernel/head64.S Tue May 18 23:38:05 2004 @@ -88,26 +88,25 @@ mtctl %r4,%cr24 /* Initialize kernel root pointer */ mtctl %r4,%cr25 /* Initialize user root pointer */ -#if (__PAGE_OFFSET != 0x10000000UL) -Error! Code below (the next five std's) needs to be changed -#endif - - std %r3,0x00(%r4) /* Hardwired 0x1... kernel Vaddr start*/ + stw %r3,ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4) ldo _PAGE_TABLE(%r1),%r3 - std %r3,0x400(%r5) /* Hardwired 0x1... kernel Vaddr start*/ - ldo 0x1000(%r3),%r3 - std %r3,0x408(%r5) - ldo 0x1000(%r3),%r3 - std %r3,0x410(%r5) - ldo 0x1000(%r3),%r3 - std %r3,0x418(%r5) + ldo ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r5 + ldi ASM_PT_INITIAL,%r1 +1: + stw %r3,0(%r5) + ldo ASM_PAGE_SIZE(%r3),%r3 + addib,> -1,%r1,1b + ldo ASM_PMD_ENTRY_SIZE(%r5),%r5 ldo _PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */ + ldil L%PA(pg0),%r1 + ldo R%PA(pg0)(%r1),%r1 + $pgt_fill_loop: - std,ma %r3,8(%r1) - ldo 0x1000(%r3),%r3 - bb,>= %r3,8,$pgt_fill_loop + std,ma %r3,ASM_PTE_ENTRY_SIZE(%r1) + ldo ASM_PAGE_SIZE(%r3),%r3 + bb,>= %r3,31-KERNEL_INITIAL_ORDER,$pgt_fill_loop nop /* And the RFI Target address too */ @@ -169,7 +168,6 @@ tophys_r1 %r10 std %r11, TASK_PT_GR11(%r10) -#ifndef CONFIG_PDC_NARROW /* Switch to wide mode; Superdome doesn't support narrow PDC ** calls. */ @@ -179,7 +177,6 @@ bv (%rp) ssm PSW_SM_W,%r0 2: -#endif /* CONFIG_PDC_NARROW */ /* Set Wide mode as the "Default" (eg for traps) ** First trap occurs *right* after (or part of) rfi for slave CPUs. diff -Nru a/arch/parisc/kernel/init_task.c b/arch/parisc/kernel/init_task.c --- a/arch/parisc/kernel/init_task.c Tue May 18 23:38:07 2004 +++ b/arch/parisc/kernel/init_task.c Tue May 18 23:38:07 2004 @@ -52,11 +52,13 @@ __attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) = { INIT_THREAD_INFO(init_task) }; -pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(4096))) = { {0}, }; #ifdef __LP64__ -unsigned long pmd0[PTRS_PER_PMD] __attribute__ ((aligned(4096))) = { 0, }; +/* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout + * with the first pmd adjacent to the pgd and below it */ +pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, }; #endif -unsigned long pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(4096))) = { 0, }; +pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, }; +pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, }; /* * Initial task structure. diff -Nru a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S --- a/arch/parisc/kernel/pacache.S Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/pacache.S Tue May 18 23:38:06 2004 @@ -350,10 +350,6 @@ .procend -#if (TMPALIAS_MAP_START >= 0x80000000UL) -Warning TMPALIAS_MAP_START changed. If > 2 Gb, code in pacache.S is bogus -#endif - /* * NOTE: Code in clear_user_page has a hard coded dependency on the * maximum alias boundary being 4 Mb. We've been assured by the @@ -490,6 +486,9 @@ ldil L%(TMPALIAS_MAP_START),%r28 #ifdef __LP64__ +#if (TMPALIAS_MAP_START >= 0x80000000) + depdi 0,31,32,%r28 /* clear any sign extension */ +#endif extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */ depd %r25,63,22,%r28 /* Form aliased virtual address 'to' */ depdi 0,63,12,%r28 /* Clear any offset bits */ @@ -574,6 +573,95 @@ .exit .procend + + .export flush_user_dcache_page + +flush_user_dcache_page: + .proc + .callinfo NO_CALLS + .entry + + ldil L%dcache_stride,%r1 + ldw R%dcache_stride(%r1),%r23 + +#ifdef __LP64__ + depdi,z 1,63-PAGE_SHIFT,1,%r25 +#else + depwi,z 1,31-PAGE_SHIFT,1,%r25 +#endif + add %r26,%r25,%r25 + sub %r25,%r23,%r25 + + +1: fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + fdc,m %r23(%sr3,%r26) + CMPB<< %r26,%r25,1b + fdc,m %r23(%sr3,%r26) + + sync + bv %r0(%r2) + nop + .exit + + .procend + + .export flush_user_icache_page + +flush_user_icache_page: + .proc + .callinfo NO_CALLS + .entry + + ldil L%dcache_stride,%r1 + ldw R%dcache_stride(%r1),%r23 + +#ifdef __LP64__ + depdi,z 1,63-PAGE_SHIFT,1,%r25 +#else + depwi,z 1,31-PAGE_SHIFT,1,%r25 +#endif + add %r26,%r25,%r25 + sub %r25,%r23,%r25 + + +1: fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + fic,m %r23(%sr3,%r26) + CMPB<< %r26,%r25,1b + fic,m %r23(%sr3,%r26) + + sync + bv %r0(%r2) + nop + .exit + + .procend + .export purge_kernel_dcache_page diff -Nru a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c --- a/arch/parisc/kernel/pci-dma.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/pci-dma.c Tue May 18 23:38:09 2004 @@ -539,10 +539,10 @@ .unmap_single = pa11_dma_unmap_single, .map_sg = pa11_dma_map_sg, .unmap_sg = pa11_dma_unmap_sg, - .dma_sync_single_cpu = pa11_dma_sync_single_cpu, - .dma_sync_single_device = pa11_dma_sync_single_device, - .dma_sync_sg_cpu = pa11_dma_sync_sg_cpu, - .dma_sync_sg_device = pa11_dma_sync_sg_device, + .dma_sync_single_for_cpu = pa11_dma_sync_single_for_cpu, + .dma_sync_single_for_device = pa11_dma_sync_single_for_device, + .dma_sync_sg_for_cpu = pa11_dma_sync_sg_for_cpu, + .dma_sync_sg_for_device = pa11_dma_sync_sg_for_device, }; diff -Nru a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c --- a/arch/parisc/kernel/perf.c Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/perf.c Tue May 18 23:38:06 2004 @@ -506,9 +506,11 @@ perf_processor_interface = ONYX_INTF; } else if (boot_cpu_data.cpu_type == pcxw || boot_cpu_data.cpu_type == pcxw_ || - boot_cpu_data.cpu_type == pcxw2) { + boot_cpu_data.cpu_type == pcxw2 || + boot_cpu_data.cpu_type == mako) { perf_processor_interface = CUDA_INTF; - if (boot_cpu_data.cpu_type == pcxw2) + if (boot_cpu_data.cpu_type == pcxw2 || + boot_cpu_data.cpu_type == mako) bitmask_array = perf_bitmasks_piranha; } else { perf_processor_interface = UNKNOWN_INTF; diff -Nru a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c --- a/arch/parisc/kernel/process.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/process.c Tue May 18 23:38:09 2004 @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -51,6 +52,7 @@ #include #include #include +#include int hlt_counter; @@ -367,4 +369,29 @@ out: return error; +} + +unsigned long +get_wchan(struct task_struct *p) +{ + struct unwind_frame_info info; + unsigned long ip; + int count = 0; + /* + * These bracket the sleeping functions.. + */ +# define first_sched ((unsigned long) scheduling_functions_start_here) +# define last_sched ((unsigned long) scheduling_functions_end_here) + + unwind_frame_init_from_blocked_task(&info, p); + do { + if (unwind_once(&info) < 0) + return 0; + ip = info.ip; + if (ip < first_sched || ip >= last_sched) + return ip; + } while (count++ < 16); + return 0; +# undef first_sched +# undef last_sched } diff -Nru a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c --- a/arch/parisc/kernel/processor.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/processor.c Tue May 18 23:38:09 2004 @@ -231,9 +231,7 @@ boot_cpu_data.hversion = boot_cpu_data.pdc.model.hversion; boot_cpu_data.sversion = boot_cpu_data.pdc.model.sversion; - boot_cpu_data.cpu_type = - parisc_get_cpu_type(boot_cpu_data.hversion); - + boot_cpu_data.cpu_type = parisc_get_cpu_type(boot_cpu_data.hversion); boot_cpu_data.cpu_name = cpu_name_version[boot_cpu_data.cpu_type][0]; boot_cpu_data.family_name = cpu_name_version[boot_cpu_data.cpu_type][1]; } @@ -276,6 +274,7 @@ int ret; struct pdc_coproc_cfg coproc_cfg; + set_firmware_width(); ret = pdc_coproc_cfg(&coproc_cfg); if(ret >= 0 && coproc_cfg.ccr_functional) { diff -Nru a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S --- a/arch/parisc/kernel/real2.S Tue May 18 23:38:07 2004 +++ b/arch/parisc/kernel/real2.S Tue May 18 23:38:07 2004 @@ -26,6 +26,7 @@ save_cr_space: .block REG_SZ * N_SAVED_REGS +save_cr_end: /************************ 32-bit real-mode calls ***********************/ @@ -123,7 +124,7 @@ nop restore_control_regs: - load32 PA(save_cr_space+(N_SAVED_REGS*REG_SZ)), %r26 + load32 PA(save_cr_end), %r26 POP_CR(%cr15, %r26) POP_CR(%cr31, %r26) POP_CR(%cr30, %r26) diff -Nru a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c --- a/arch/parisc/kernel/setup.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/setup.c Tue May 18 23:38:09 2004 @@ -121,8 +121,11 @@ pdc_console_init(); -#ifdef CONFIG_PDC_NARROW - printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n"); +#ifdef __LP64__ + extern int parisc_narrow_firmware; + if(parisc_narrow_firmware) { + printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n"); + } #endif setup_pdc(); setup_cmdline(cmdline_p); @@ -204,6 +207,7 @@ case pcxw: case pcxw_: case pcxw2: + case mako: /* XXX : this is really mckinley bus */ if (NULL == proc_runway_root) { proc_runway_root = proc_mkdir("bus/runway", 0); diff -Nru a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c --- a/arch/parisc/kernel/signal.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/signal.c Tue May 18 23:38:09 2004 @@ -353,12 +353,17 @@ goto give_sigsegv; /* Set up to return from userspace. If provided, use a stub - already in userspace. */ + already in userspace. The first words of tramp are used to + save the previous sigrestartblock trampoline that might be + on the stack. We start the sigreturn trampoline at + SIGRESTARTBLOCK_TRAMP+X. */ err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0, - &frame->tramp[SIGRETURN_TRAMP+0]); - err |= __put_user(INSN_LDI_R20, &frame->tramp[SIGRETURN_TRAMP+1]); - err |= __put_user(INSN_BLE_SR2_R0, &frame->tramp[SIGRETURN_TRAMP+2]); - err |= __put_user(INSN_NOP, &frame->tramp[SIGRETURN_TRAMP+3]); + &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]); + err |= __put_user(INSN_LDI_R20, + &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]); + err |= __put_user(INSN_BLE_SR2_R0, + &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]); + err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]); #if DEBUG_SIG /* Assert that we're flushing in the correct space... */ @@ -370,12 +375,16 @@ } #endif - flush_user_dcache_range((unsigned long) &frame->tramp[SIGRETURN_TRAMP], + flush_user_dcache_range((unsigned long) &frame->tramp[0], (unsigned long) &frame->tramp[TRAMP_SIZE]); - flush_user_icache_range((unsigned long) &frame->tramp[SIGRETURN_TRAMP], + flush_user_icache_range((unsigned long) &frame->tramp[0], (unsigned long) &frame->tramp[TRAMP_SIZE]); - rp = (unsigned long) &frame->tramp[SIGRETURN_TRAMP]; + /* TRAMP Words 0-4, Lenght 5 = SIGRESTARTBLOCK_TRAMP + * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP + * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP + */ + rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP]; if (err) goto give_sigsegv; diff -Nru a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c --- a/arch/parisc/kernel/smp.c Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/smp.c Tue May 18 23:38:09 2004 @@ -3,7 +3,7 @@ ** ** Copyright (C) 1999 Walt Drummond ** Copyright (C) 1999 David Mosberger-Tang -** Copyright (C) 2001 Grant Grundler +** Copyright (C) 2001,2004 Grant Grundler ** ** Lots of stuff stolen from arch/alpha/kernel/smp.c ** ...and then parisc stole from arch/ia64/kernel/smp.c. Thanks David! :^) @@ -60,20 +60,16 @@ volatile struct task_struct *smp_init_current_idle_task; -static volatile int smp_commenced = 0; /* Set when the idlers are all forked */ -static volatile int cpu_now_booting = 0; /* track which CPU is booting */ -cpumask_t cpu_online_map = CPU_MASK_NONE; /* Bitmap of online CPUs */ -#define IS_LOGGED_IN(cpunum) (cpu_isset(cpunum, cpu_online_map)) +static volatile int cpu_now_booting = 0; /* track which CPU is booting */ +static int parisc_max_cpus = -1; /* Command line */ -EXPORT_SYMBOL(cpu_online_map); +unsigned long cache_decay_ticks; /* declared by include/linux/sched.h */ +cpumask_t cpu_online_map = CPU_MASK_NONE; /* Bitmap of online CPUs */ +cpumask_t cpu_possible_map = CPU_MASK_NONE; /* Bitmap of Present CPUs */ -int smp_num_cpus = 1; -int smp_threads_ready = 0; -unsigned long cache_decay_ticks; -static int max_cpus = -1; /* Command line */ -cpumask_t cpu_present_mask; +EXPORT_SYMBOL(cpu_online_map); +EXPORT_SYMBOL(cpu_possible_map); -EXPORT_SYMBOL(cpu_present_mask); struct smp_call_struct { void (*func) (void *info); @@ -114,7 +110,7 @@ #error verify IRQ_OFFSET(IPI_IRQ) is ipi_interrupt() in new IRQ region - if(IS_LOGGED_IN(cpuid) ) + if(cpu_online(cpuid) ) { switch_to_idle_task(current); } @@ -293,12 +289,13 @@ { int i; - for (i = 0; i < smp_num_cpus; i++) { - if (i != smp_processor_id()) + for (i = 0; i < parisc_max_cpus; i++) { + if (cpu_online(i) && i != smp_processor_id()) send_IPI_single(i, op); } } + inline void smp_send_stop(void) { send_IPI_allbutself(IPI_CPU_STOP); } @@ -327,12 +324,15 @@ struct smp_call_struct data; unsigned long timeout; static spinlock_t lock = SPIN_LOCK_UNLOCKED; + + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); data.func = func; data.info = info; data.wait = wait; - atomic_set(&data.unstarted_count, smp_num_cpus - 1); - atomic_set(&data.unfinished_count, smp_num_cpus - 1); + atomic_set(&data.unstarted_count, num_online_cpus() - 1); + atomic_set(&data.unfinished_count, num_online_cpus() - 1); if (retry) { spin_lock (&lock); @@ -392,7 +392,7 @@ static int __init nosmp(char *str) { - max_cpus = 0; + parisc_max_cpus = 0; return 1; } @@ -400,7 +400,7 @@ static int __init maxcpus(char *str) { - get_option(&str, &max_cpus); + get_option(&str, &parisc_max_cpus); return 1; } @@ -496,17 +496,13 @@ local_irq_enable(); /* Interrupts have been off until now */ - /* Slaves wait here until Big Poppa daddy say "jump" */ - mb(); /* PARANOID */ - while (!smp_commenced) ; - mb(); /* PARANOID */ - cpu_idle(); /* Wait for timer to schedule some work */ /* NOTREACHED */ panic("smp_callin() AAAAaaaaahhhh....\n"); } +#if 0 /* * Create the idle task for a new Slave CPU. DO NOT use kernel_thread() * because that could end up calling schedule(). If it did, the new idle @@ -528,7 +524,7 @@ /* * Bring one cpu online. */ -static int __init smp_boot_one_cpu(int cpuid, int cpunum) +int __init smp_boot_one_cpu(int cpuid, int cpunum) { struct task_struct *idle; long timeout; @@ -573,12 +569,11 @@ /* * OK, wait a bit for that CPU to finish staggering about. - * Slave will set a bit when it reaches smp_cpu_init() and then - * wait for smp_commenced to be 1. - * Once we see the bit change, we can move on. + * Slave will set a bit when it reaches smp_cpu_init(). + * Once the "monarch CPU" sees the bit change, it can move on. */ for (timeout = 0; timeout < 10000; timeout++) { - if(IS_LOGGED_IN(cpunum)) { + if(cpu_online(cpunum)) { /* Which implies Slave has started up */ cpu_now_booting = 0; smp_init_current_idle_task = NULL; @@ -605,120 +600,56 @@ #endif return 0; } +#endif - - -/* -** inventory.c:do_inventory() has already 'discovered' the additional CPU's. -** We are ready to wrest them from PDC's control now. -** Called by smp_init bring all the secondaries online and hold them. -** -** o Setup of the IPI irq handler is done in irq.c. -** o MEM_RENDEZ is initialzed in head.S:stext() -** -*/ -void __init smp_boot_cpus(void) +void __devinit smp_prepare_boot_cpu(void) { - int i, cpu_count = 1; - unsigned long bogosum = cpu_data[0].loops_per_jiffy; /* Count Monarch */ - - /* REVISIT - assumes first CPU reported by PAT PDC is BSP */ int bootstrap_processor=cpu_data[0].cpuid; /* CPU ID of BSP */ +#ifdef ENTRY_SYS_CPUS + cpu_data[0].state = STATE_RUNNING; +#endif + /* Setup BSP mappings */ printk(KERN_DEBUG "SMP: bootstrap CPU ID is %d\n",bootstrap_processor); init_task.thread_info->cpu = bootstrap_processor; current->thread_info->cpu = bootstrap_processor; - /* Mark Boostrap processor as present */ - cpu_online_map = cpumask_of_cpu(bootstrap_processor); - current->active_mm = &init_mm; -#ifdef ENTRY_SYS_CPUS - cpu_data[0].state = STATE_RUNNING; -#endif - cpu_present_mask = cpumask_of_cpu(bootstrap_processor); + cpu_set(bootstrap_processor, cpu_online_map); + cpu_set(bootstrap_processor, cpu_possible_map); - /* Nothing to do when told not to. */ - if (max_cpus == 0) { - printk(KERN_INFO "SMP mode deactivated.\n"); - return; - } + /* Mark Boostrap processor as present */ + current->active_mm = &init_mm; - if (max_cpus != -1) - printk(KERN_INFO "Limiting CPUs to %d\n", max_cpus); + cache_decay_ticks = HZ/100; /* FIXME very rough. */ +} - /* We found more than one CPU.... */ - if (boot_cpu_data.cpu_count > 1) { - for (i = 0; i < NR_CPUS; i++) { - if (cpu_data[i].cpuid == NO_PROC_ID || - cpu_data[i].cpuid == bootstrap_processor) - continue; - if (smp_boot_one_cpu(cpu_data[i].cpuid, cpu_count) < 0) - continue; - - bogosum += cpu_data[i].loops_per_jiffy; - cpu_count++; /* Count good CPUs only... */ - - cpu_present_mask |= 1UL << i; - - /* Bail when we've started as many CPUS as told to */ - if (cpu_count == max_cpus) - break; - } - } - if (cpu_count == 1) { - printk(KERN_INFO "SMP: Bootstrap processor only.\n"); - } +/* +** inventory.c:do_inventory() hasn't yet been run and thus we +** don't 'discover' the additional CPU's until later. +*/ +void __init smp_prepare_cpus(unsigned int max_cpus) +{ - /* - * FIXME very rough. - */ - cache_decay_ticks = HZ/100; + if (max_cpus != -1) + printk(KERN_INFO "SMP: Limited to %d CPUs\n", max_cpus); - printk(KERN_INFO "SMP: Total %d of %d processors activated " - "(%lu.%02lu BogoMIPS noticed) (Present Mask: %lu).\n", - cpu_count, boot_cpu_data.cpu_count, (bogosum + 25) / 5000, - ((bogosum + 25) / 50) % 100, cpu_present_mask); + printk(KERN_INFO "SMP: Monarch CPU activated (%lu.%02lu BogoMIPS)\n", + (cpu_data[0].loops_per_jiffy + 25) / 5000, + ((cpu_data[0].loops_per_jiffy + 25) / 50) % 100); - smp_num_cpus = cpu_count; -#ifdef PER_CPU_IRQ_REGION - ipi_init(); -#endif return; } -/* - * Called from main.c by Monarch Processor. - * After this, any CPU can schedule any task. - */ -void smp_commence(void) -{ - smp_commenced = 1; - mb(); - return; -} -/* - * XXX FIXME : do nothing - */ void smp_cpus_done(unsigned int cpu_max) { - smp_threads_ready = 1; -} - -void __init smp_prepare_cpus(unsigned int max_cpus) -{ - smp_boot_cpus(); + return; } -void __devinit smp_prepare_boot_cpu(void) -{ - cpu_set(smp_processor_id(), cpu_online_map); - cpu_set(smp_processor_id(), cpu_present_mask); -} int __devinit __cpu_up(unsigned int cpu) { @@ -745,7 +676,7 @@ #ifdef DUMP_MORE_STATE for(i=0; if_mapping, addr, len, pgoff); + } else if(flags & MAP_SHARED) { + addr = get_shared_area(NULL, addr, len, pgoff); } else { addr = get_unshared_area(addr, len); } diff -Nru a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c --- a/arch/parisc/kernel/sys_parisc32.c Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/sys_parisc32.c Tue May 18 23:38:06 2004 @@ -65,189 +65,6 @@ #endif /* - * count32() counts the number of arguments/envelopes. It is basically - * a copy of count() from fs/exec.c, except that it works - * with 32 bit argv and envp pointers. - */ - -static int count32(u32 *argv, int max) -{ - int i = 0; - - if (argv != NULL) { - for (;;) { - u32 p; - int error; - - error = get_user(p,argv); - if (error) - return error; - if (!p) - break; - argv++; - if(++i > max) - return -E2BIG; - } - } - return i; -} - - -/* - * copy_strings32() is basically a copy of copy_strings() from fs/exec.c - * except that it works with 32 bit argv and envp pointers. - */ - - -static int copy_strings32(int argc, u32 *argv, struct linux_binprm *bprm) -{ - while (argc-- > 0) { - u32 str; - int len; - unsigned long pos; - - if (get_user(str, argv + argc) || - !str || - !(len = strnlen_user((char *)compat_ptr(str), bprm->p))) - return -EFAULT; - - if (bprm->p < len) - return -E2BIG; - - bprm->p -= len; - - pos = bprm->p; - while (len > 0) { - char *kaddr; - int i, new, err; - struct page *page; - int offset, bytes_to_copy; - - offset = pos % PAGE_SIZE; - i = pos/PAGE_SIZE; - page = bprm->page[i]; - new = 0; - if (!page) { - page = alloc_page(GFP_HIGHUSER); - bprm->page[i] = page; - if (!page) - return -ENOMEM; - new = 1; - } - kaddr = (char *)kmap(page); - - if (new && offset) - memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; - if (bytes_to_copy > len) { - bytes_to_copy = len; - if (new) - memset(kaddr+offset+len, 0, PAGE_SIZE-offset-len); - } - err = copy_from_user(kaddr + offset, (char *)compat_ptr(str), bytes_to_copy); - flush_dcache_page(page); - kunmap(page); - - if (err) - return -EFAULT; - - pos += bytes_to_copy; - str += bytes_to_copy; - len -= bytes_to_copy; - } - } - return 0; -} - -/* - * do_execve32() is mostly a copy of do_execve(), with the exception - * that it processes 32 bit argv and envp pointers. - */ - -static inline int -do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) -{ - struct linux_binprm bprm; - struct file *file; - int retval; - int i; - - file = open_exec(filename); - - retval = PTR_ERR(file); - if (IS_ERR(file)) - return retval; - - bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0])); - - DBG(("do_execve32(%s, %p, %p, %p)\n", filename, argv, envp, regs)); - - bprm.file = file; - bprm.filename = filename; - bprm.interp = filename; - bprm.sh_bang = 0; - bprm.loader = 0; - bprm.exec = 0; - - bprm.mm = mm_alloc(); - retval = -ENOMEM; - if (!bprm.mm) - goto out_file; - - retval = init_new_context(current, bprm.mm); - if (retval < 0) - goto out_mm; - - if ((bprm.argc = count32(argv, bprm.p / sizeof(u32))) < 0) - goto out_mm; - - if ((bprm.envc = count32(envp, bprm.p / sizeof(u32))) < 0) - goto out_mm; - - retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; - - retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; - - bprm.exec = bprm.p; - retval = copy_strings32(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; - - retval = copy_strings32(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; - - retval = search_binary_handler(&bprm,regs); - if (retval >= 0) - /* execve success */ - return retval; - -out: - /* Something went wrong, return the inode and free the argument pages*/ - for (i = 0; i < MAX_ARG_PAGES; i++) { - struct page *page = bprm.page[i]; - if (page) - __free_page(page); - } - -out_mm: - mmdrop(bprm.mm); - -out_file: - if (bprm.file) { - allow_write_access(bprm.file); - fput(bprm.file); - } - - return retval; -} - -/* * sys32_execve() executes a new program. */ @@ -261,8 +78,8 @@ error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; - error = do_execve32(filename, (u32 *) regs->gr[25], - (u32 *) regs->gr[24], regs); + error = compat_do_execve(filename, compat_ptr(regs->gr[25]), + compat_ptr(regs->gr[24]), regs); if (error == 0) current->ptrace &= ~PT_DTRACE; putname(filename); @@ -609,149 +426,6 @@ return error; } -/* readv/writev stolen from mips64 */ -typedef ssize_t (*IO_fn_t)(struct file *, char *, size_t, loff_t *); - -static long -do_readv_writev32(int type, struct file *file, const struct compat_iovec *vector, - u32 count) -{ - unsigned long tot_len; - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack, *ivp; - struct inode *inode; - long retval, i; - IO_fn_t fn; - - /* First get the "struct iovec" from user memory and - * verify all the pointers - */ - if (!count) - return 0; - if(verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count)) - return -EFAULT; - if (count > UIO_MAXIOV) - return -EINVAL; - if (count > UIO_FASTIOV) { - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - return -ENOMEM; - } - - tot_len = 0; - i = count; - ivp = iov; - while (i > 0) { - u32 len; - u32 buf; - - __get_user(len, &vector->iov_len); - __get_user(buf, &vector->iov_base); - tot_len += len; - ivp->iov_base = compat_ptr(buf); - ivp->iov_len = (compat_size_t) len; - vector++; - ivp++; - i--; - } - - inode = file->f_dentry->d_inode; - /* VERIFY_WRITE actually means a read, as we write to user space */ - retval = locks_verify_area((type == VERIFY_WRITE - ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE), - inode, file, file->f_pos, tot_len); - if (retval) { - if (iov != iovstack) - kfree(iov); - return retval; - } - - /* Then do the actual IO. Note that sockets need to be handled - * specially as they have atomicity guarantees and can handle - * iovec's natively - */ - if (inode->i_sock) { - int err; - err = sock_readv_writev(type, inode, file, iov, count, tot_len); - if (iov != iovstack) - kfree(iov); - return err; - } - - if (!file->f_op) { - if (iov != iovstack) - kfree(iov); - return -EINVAL; - } - /* VERIFY_WRITE actually means a read, as we write to user space */ - fn = file->f_op->read; - if (type == VERIFY_READ) - fn = (IO_fn_t) file->f_op->write; - ivp = iov; - while (count > 0) { - void * base; - int len, nr; - - base = ivp->iov_base; - len = ivp->iov_len; - ivp++; - count--; - nr = fn(file, base, len, &file->f_pos); - if (nr < 0) { - if (retval) - break; - retval = nr; - break; - } - retval += nr; - if (nr != len) - break; - } - if (iov != iovstack) - kfree(iov); - - return retval; -} - -asmlinkage long -sys32_readv(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - ssize_t ret; - - ret = -EBADF; - file = fget(fd); - if (!file) - goto bad_file; - if (file->f_op && (file->f_mode & FMODE_READ) && - (file->f_op->readv || file->f_op->read)) - ret = do_readv_writev32(VERIFY_WRITE, file, vector, count); - - fput(file); - -bad_file: - return ret; -} - -asmlinkage long -sys32_writev(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - ssize_t ret; - - ret = -EBADF; - file = fget(fd); - if(!file) - goto bad_file; - if (file->f_op && (file->f_mode & FMODE_WRITE) && - (file->f_op->writev || file->f_op->write)) - ret = do_readv_writev32(VERIFY_READ, file, vector, count); - fput(file); - -bad_file: - return ret; -} - /*** copied from mips64 ***/ /* * Ooo, nasty. We need here to frob 32-bit unsigned longs to @@ -814,126 +488,6 @@ __put_user(*fdset, ufdset); } -/*** This is a virtual copy of sys_select from fs/select.c and probably - *** should be compared to it from time to time - ***/ -static inline void *select_bits_alloc(int size) -{ - return kmalloc(6 * size, GFP_KERNEL); -} - -static inline void select_bits_free(void *bits, int size) -{ - kfree(bits); -} - -/* - * We can actually return ERESTARTSYS instead of EINTR, but I'd - * like to be certain this leads to no problems. So I return - * EINTR just for safety. - * - * Update: ERESTARTSYS breaks at least the xview clock binary, so - * I'm trying ERESTARTNOHAND which restart only when you want to. - */ -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) -#define DIVIDE_ROUND_UP(x,y) (((x)+(y)-1)/(y)) - -asmlinkage long -sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct compat_timeval *tvp) -{ - fd_set_bits fds; - char *bits; - long timeout; - int ret, size, err; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp) { - struct compat_timeval tv32; - time_t sec, usec; - - if ((ret = copy_from_user(&tv32, tvp, sizeof tv32))) - goto out_nofds; - - sec = tv32.tv_sec; - usec = tv32.tv_usec; - - ret = -EINVAL; - if (sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = DIVIDE_ROUND_UP(usec, 1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = select_bits_alloc(size); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - if ((ret = get_fd_set32(n, inp, fds.in)) || - (ret = get_fd_set32(n, outp, fds.out)) || - (ret = get_fd_set32(n, exp, fds.ex))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - err = put_user(sec, &tvp->tv_sec); - err |= __put_user(usec, &tvp->tv_usec); - if (err) - ret = -EFAULT; - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set32(n, inp, fds.res_in); - set_fd_set32(n, outp, fds.res_out); - set_fd_set32(n, exp, fds.res_ex); - -out: - select_bits_free(bits, size); -out_nofds: - return ret; -} - struct msgbuf32 { int mtype; char mtext[1]; @@ -991,7 +545,6 @@ return err; } - asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, s32 count) { mm_segment_t old_fs = get_fs(); @@ -1009,94 +562,6 @@ return -EFAULT; return ret; -} - -/* EXPORT/UNEXPORT */ -struct nfsctl_export32 { - char ex_client[NFSCLNT_IDMAX+1]; - char ex_path[NFS_MAXPATHLEN+1]; - __kernel_old_dev_t ex_dev; - compat_ino_t ex_ino; - int ex_flags; - __kernel_uid_t ex_anon_uid; - __kernel_gid_t ex_anon_gid; -}; - -struct nfsctl_arg32 { - int ca_version; /* safeguard */ - /* wide kernel places this union on 8-byte boundary, narrow on 4 */ - union { - struct nfsctl_svc u_svc; - struct nfsctl_client u_client; - struct nfsctl_export32 u_export; - struct nfsctl_fdparm u_getfd; - struct nfsctl_fsparm u_getfs; - } u; -}; - -asmlinkage int sys32_nfsservctl(int cmd, void *argp, void *resp) -{ - int ret, tmp; - struct nfsctl_arg32 n32; - struct nfsctl_arg n; - - ret = copy_from_user(&n, argp, sizeof n.ca_version); - if (ret != 0) - return ret; - - /* adjust argp to point at the union inside the user's n32 struct */ - tmp = (unsigned long)&n32.u - (unsigned long)&n32; - argp = (void *)((unsigned long)argp + tmp); - switch(cmd) { - case NFSCTL_SVC: - ret = copy_from_user(&n.u, argp, sizeof n.u.u_svc); - break; - - case NFSCTL_ADDCLIENT: - case NFSCTL_DELCLIENT: - ret = copy_from_user(&n.u, argp, sizeof n.u.u_client); - break; - - case NFSCTL_GETFD: - ret = copy_from_user(&n.u, argp, sizeof n.u.u_getfd); - break; - - case NFSCTL_GETFS: - ret = copy_from_user(&n.u, argp, sizeof n.u.u_getfs); - break; - - case NFSCTL_UNEXPORT: /* nfsctl_export */ - case NFSCTL_EXPORT: /* nfsctl_export */ - ret = copy_from_user(&n32.u, argp, sizeof n32.u.u_export); -#undef CP -#define CP(x) n.u.u_export.ex_##x = n32.u.u_export.ex_##x - memcpy(n.u.u_export.ex_client, n32.u.u_export.ex_client, sizeof n32.u.u_export.ex_client); - memcpy(n.u.u_export.ex_path, n32.u.u_export.ex_path, sizeof n32.u.u_export.ex_path); - CP(dev); - CP(ino); - CP(flags); - CP(anon_uid); - CP(anon_gid); - break; - - default: - /* lockd probes for some other values (0x10000); - * so don't BUG() */ - ret = -EINVAL; - break; - } - - if (ret == 0) { - unsigned char rbuf[NFS_FHSIZE + sizeof (struct knfsd_fh)]; - KERNEL_SYSCALL(ret, sys_nfsservctl, cmd, &n, &rbuf); - if (cmd == NFSCTL_GETFD) { - ret = copy_to_user(resp, rbuf, NFS_FHSIZE); - } else if (cmd == NFSCTL_GETFS) { - ret = copy_to_user(resp, rbuf, sizeof (struct knfsd_fh)); - } - } - - return ret; } typedef long __kernel_loff_t32; /* move this to asm/posix_types.h? */ diff -Nru a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S --- a/arch/parisc/kernel/syscall.S Tue May 18 23:38:09 2004 +++ b/arch/parisc/kernel/syscall.S Tue May 18 23:38:09 2004 @@ -155,9 +155,10 @@ stw %r21, -56(%r30) /* 6th argument */ #endif + /* Are we being ptraced? */ mfctl %cr30, %r1 - LDREG TI_FLAGS(%r1), %r19 - bb,<,n %r19,31-TIF_SYSCALL_TRACE,.Ltracesys + LDREG TASK_PTRACE(%r1), %r1 + bb,<,n %r1,31,.Ltracesys /* Note! We cannot use the syscall table that is mapped nearby since the gateway page is mapped execute-only. */ diff -Nru a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S --- a/arch/parisc/kernel/syscall_table.S Tue May 18 23:38:05 2004 +++ b/arch/parisc/kernel/syscall_table.S Tue May 18 23:38:05 2004 @@ -232,12 +232,12 @@ ENTRY_DIFF(getdents) /* it is POSSIBLE that select will be OK because even though fd_set * contains longs, the macros and sizes are clever. */ - ENTRY_DIFF(select) + ENTRY_COMP(select) ENTRY_SAME(flock) ENTRY_SAME(msync) /* struct iovec contains pointers */ - ENTRY_DIFF(readv) /* 145 */ - ENTRY_DIFF(writev) + ENTRY_COMP(readv) /* 145 */ + ENTRY_COMP(writev) ENTRY_SAME(getsid) ENTRY_SAME(fdatasync) /* struct __sysctl_args is a mess */ @@ -266,7 +266,7 @@ ENTRY_SAME(ni_syscall) /* query_module */ ENTRY_SAME(poll) /* structs contain pointers and an in_addr... */ - ENTRY_DIFF(nfsservctl) + ENTRY_COMP(nfsservctl) ENTRY_SAME(setresgid) /* 170 */ ENTRY_SAME(getresgid) ENTRY_SAME(prctl) @@ -334,3 +334,12 @@ ENTRY_SAME(epoll_ctl) /* 225 */ ENTRY_SAME(epoll_wait) ENTRY_SAME(remap_file_pages) + ENTRY_SAME(semtimedop) + ENTRY_SAME(mq_open) + ENTRY_SAME(mq_unlink) /* 230 */ + ENTRY_SAME(mq_timedsend) + ENTRY_SAME(mq_timedreceive) + ENTRY_SAME(mq_notify) + ENTRY_SAME(mq_getsetattr) + /* Nothing yet */ /* 235 */ + diff -Nru a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/parisc/kernel/unwind.c Tue May 18 23:38:09 2004 @@ -0,0 +1,295 @@ +/* + * Kernel unwinding support + * + * (c) 2002-2004 Randolph Chung + * + * Derived partially from the IA64 implementation. The PA-RISC + * Runtime Architecture Document is also a useful reference to + * understand what is happening here + */ + +/* + * J. David Anglin writes: + * + * "You have to adjust the current sp to that at the begining of the function. + * There can be up to two stack additions to allocate the frame in the + * prologue. Similar things happen in the epilogue. In the presence of + * interrupts, you have to be concerned about where you are in the function + * and what stack adjustments have taken place." + * + * For now these cases are not handled, but they should be! + */ + +#include +#include +#include +#include + +#include + +#include + +/* #define DEBUG 1 */ +#ifdef DEBUG +#define dbg(x...) printk(x) +#else +#define dbg(x...) +#endif + +extern const struct unwind_table_entry __start___unwind[]; +extern const struct unwind_table_entry __stop___unwind[]; + +static spinlock_t unwind_lock; +/* + * the kernel unwind block is not dynamically allocated so that + * we can call unwind_init as early in the bootup process as + * possible (before the slab allocator is initialized) + */ +static struct unwind_table kernel_unwind_table; +static struct unwind_table *unwind_tables, *unwind_tables_end; + + +static inline const struct unwind_table_entry * +find_unwind_entry_in_table(const struct unwind_table *table, unsigned long addr) +{ + const struct unwind_table_entry *e = 0; + unsigned long lo, hi, mid; + + addr -= table->base_addr; + + for (lo = 0, hi = table->length; lo < hi; ) + { + mid = (lo + hi) / 2; + e = &table->table[mid]; + if (addr < e->region_start) + hi = mid; + else if (addr > e->region_end) + lo = mid + 1; + else + break; + } + + return e; +} + +static inline const struct unwind_table_entry * +find_unwind_entry(unsigned long addr) +{ + struct unwind_table *table = unwind_tables; + const struct unwind_table_entry *e = NULL; + + if (addr >= kernel_unwind_table.start && + addr <= kernel_unwind_table.end) + e = find_unwind_entry_in_table(&kernel_unwind_table, addr); + else + for (; table; table = table->next) + { + if (addr >= table->start && + addr <= table->end) + e = find_unwind_entry_in_table(table, addr); + if (e) + break; + } + + return e; +} + +static void +unwind_table_init(struct unwind_table *table, const char *name, + unsigned long base_addr, unsigned long gp, + const void *table_start, const void *table_end) +{ + const struct unwind_table_entry *start = table_start; + const struct unwind_table_entry *end = table_end - 1; + + table->name = name; + table->base_addr = base_addr; + table->gp = gp; + table->start = base_addr + start->region_start; + table->end = base_addr + end->region_end; + table->table = (struct unwind_table_entry *)table_start; + table->length = end - start; + table->next = NULL; +} + +void * +unwind_table_add(const char *name, unsigned long base_addr, + unsigned long gp, + const void *start, const void *end) +{ + struct unwind_table *table; + unsigned long flags; + + table = kmalloc(sizeof(struct unwind_table), GFP_USER); + if (table == NULL) + return 0; + unwind_table_init(table, name, base_addr, gp, start, end); + spin_lock_irqsave(&unwind_lock, flags); + if (unwind_tables) + { + unwind_tables_end->next = table; + unwind_tables_end = table; + } + else + { + unwind_tables = unwind_tables_end = table; + } + spin_unlock_irqrestore(&unwind_lock, flags); + + return table; +} + +/* Called from setup_arch to import the kernel unwind info */ +static int unwind_init(void) +{ + long start, stop; + register unsigned long gp __asm__ ("r27"); + + start = (long)&__start___unwind[0]; + stop = (long)&__stop___unwind[0]; + + printk("unwind_init: start = 0x%lx, end = 0x%lx, entries = %lu\n", + start, stop, + (stop - start) / sizeof(struct unwind_table_entry)); + + unwind_table_init(&kernel_unwind_table, "kernel", KERNEL_START, + gp, + &__start___unwind[0], &__stop___unwind[0]); +#if 0 + { + int i; + for (i = 0; i < 10; i++) + { + printk("region 0x%x-0x%x\n", + __start___unwind[i].region_start, + __start___unwind[i].region_end); + } + } +#endif + return 0; +} + +static void unwind_frame_regs(struct unwind_frame_info *info) +{ + const struct unwind_table_entry *e; + unsigned long npc; + unsigned int insn; + long frame_size = 0; + int looking_for_rp, rpoffset = 0; + + e = find_unwind_entry(info->ip); + if (!e) { + unsigned long sp; + extern char _stext[], _etext[]; + + dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip); + + /* Since we are doing the unwinding blind, we don't know if + we are adjusting the stack correctly or extracting the rp + correctly. The rp is checked to see if it belongs to the + kernel text section, if not we assume we don't have a + correct stack frame and we continue to unwind the stack. + This is not quite correct, and will fail for loadable + modules. */ + sp = info->sp & ~63; + do { + info->prev_sp = sp - 64; + + /* FIXME: what happens if we unwind too far so that + sp no longer falls in a mapped kernel page? */ +#ifndef __LP64__ + info->prev_ip = *(unsigned long *)(info->prev_sp - 20); +#else + info->prev_ip = *(unsigned long *)(info->prev_sp - 16); +#endif + + sp = info->prev_sp; + } while (info->prev_ip < (unsigned long)_stext || + info->prev_ip > (unsigned long)_etext); + } else { + + dbg("e->start = 0x%x, e->end = 0x%x, Save_SP = %d, Save_RP = %d size = %u\n", + e->region_start, e->region_end, e->Save_SP, e->Save_RP, e->Total_frame_size); + + looking_for_rp = e->Save_RP; + + for (npc = e->region_start; + (frame_size < (e->Total_frame_size << 3) || looking_for_rp) && + npc < info->ip; + npc += 4) { + + insn = *(unsigned int *)npc; + + if ((insn & 0xffffc000) == 0x37de0000 || + (insn & 0xffe00000) == 0x6fc00000) { + /* ldo X(sp), sp, or stwm X,D(sp) */ + frame_size += (insn & 0x1 ? -1 << 13 : 0) | + ((insn & 0x3fff) >> 1); + } else if ((insn & 0xffe00008) == 0x7ec00008) { + /* std,ma X,D(sp) */ + frame_size += (insn & 0x1 ? -1 << 13 : 0) | + (((insn >> 4) & 0x3ff) << 3); + } else if (insn == 0x6bc23fd9) { + /* stw rp,-20(sp) */ + rpoffset = 20; + looking_for_rp = 0; + } else if (insn == 0x0fc212c1) { + /* std rp,-16(sr0,sp) */ + rpoffset = 16; + looking_for_rp = 0; + } + } + + info->prev_sp = info->sp - frame_size; + if (rpoffset) + info->prev_ip = *(unsigned long *)(info->prev_sp - rpoffset); + } +} + +void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, + struct pt_regs *regs) +{ + memset(info, 0, sizeof(struct unwind_frame_info)); + info->t = t; + info->sp = regs->ksp; + info->ip = regs->kpc; + + dbg("(%d) Start unwind from sp=%08lx ip=%08lx\n", (int)t->pid, info->sp, info->ip); +} + +void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t) +{ + struct pt_regs *regs = &t->thread.regs; + unwind_frame_init(info, t, regs); +} + +int unwind_once(struct unwind_frame_info *next_frame) +{ + unwind_frame_regs(next_frame); + + if (next_frame->prev_sp == 0 || + next_frame->prev_ip == 0) + return -1; + + next_frame->sp = next_frame->prev_sp; + next_frame->ip = next_frame->prev_ip; + next_frame->prev_sp = 0; + next_frame->prev_ip = 0; + + dbg("(%d) Continue unwind to sp=%08lx ip=%08lx\n", (int)next_frame->t->pid, next_frame->sp, next_frame->ip); + + return 0; +} + +int unwind_to_user(struct unwind_frame_info *info) +{ + int ret; + + do { + ret = unwind_once(info); + } while (!ret && !(info->ip & 3)); + + return ret; +} + +module_init(unwind_init); diff -Nru a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S --- a/arch/parisc/kernel/vmlinux.lds.S Tue May 18 23:38:06 2004 +++ b/arch/parisc/kernel/vmlinux.lds.S Tue May 18 23:38:06 2004 @@ -26,6 +26,7 @@ #include /* needed for the processor specific cache alignment size */ #include +#include /* ld script to make hppa Linux kernel */ #ifndef CONFIG_PARISC64 @@ -45,13 +46,17 @@ SECTIONS { - . = 0x10100000; + . = KERNEL_BINARY_TEXT_START; _text = .; /* Text and read-only data */ .text ALIGN(16) : { - *(.text*) + *(.text) SCHED_TEXT - *(.PARISC.unwind) + *(.text.do_softirq) + *(.text.sys_exit) + *(.text.do_sigaltstack) + *(.text.do_fork) + *(.text.*) *(.fixup) *(.lock.text) /* out-of-line lock text */ *(.gnu.warning) @@ -72,6 +77,10 @@ __ex_table : { *(__ex_table) } __stop___ex_table = .; + __start___unwind = .; /* unwind info */ + .PARISC.unwind : { *(.PARISC.unwind) } + __stop___unwind = .; + .data : { /* Data */ *(.data) CONSTRUCTORS @@ -87,6 +96,10 @@ . = ALIGN(L1_CACHE_BYTES); .data.cacheline_aligned : { *(.data.cacheline_aligned) } + + /* PA-RISC locks requires 16-byte alignment */ + . = ALIGN(16); + .data.lock_aligned : { *(.data.lock_aligned) } _edata = .; /* End of data section */ diff -Nru a/arch/parisc/lib/bitops.c b/arch/parisc/lib/bitops.c --- a/arch/parisc/lib/bitops.c Tue May 18 23:38:05 2004 +++ b/arch/parisc/lib/bitops.c Tue May 18 23:38:05 2004 @@ -13,22 +13,20 @@ #include #ifdef CONFIG_SMP -spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] = { - [0 ... (ATOMIC_HASH_SIZE-1)] = SPIN_LOCK_UNLOCKED +atomic_lock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned = { + [0 ... (ATOMIC_HASH_SIZE-1)] = (atomic_lock_t) { { 1, 1, 1, 1 } } }; #endif -spinlock_t __atomic_lock = SPIN_LOCK_UNLOCKED; - #ifdef __LP64__ unsigned long __xchg64(unsigned long x, unsigned long *ptr) { unsigned long temp, flags; - SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags); + atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags); temp = *ptr; *ptr = x; - SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags); + atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags); return temp; } #endif @@ -38,10 +36,10 @@ unsigned long flags; unsigned long temp; - SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags); + atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags); (long) temp = (long) *ptr; /* XXX - sign extension wanted? */ *ptr = x; - SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags); + atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags); return temp; } @@ -51,10 +49,10 @@ unsigned long flags; unsigned long temp; - SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags); + atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags); (long) temp = (long) *ptr; /* XXX - sign extension wanted? */ *ptr = x; - SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags); + atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags); return temp; } @@ -65,10 +63,10 @@ unsigned long flags; unsigned long prev; - SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags); + atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags); if ((prev = *ptr) == old) *ptr = new; - SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags); + atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags); return prev; } #endif @@ -78,9 +76,9 @@ unsigned long flags; unsigned int prev; - SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags); + atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags); if ((prev = *ptr) == old) *ptr = new; - SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags); + atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags); return (unsigned long)prev; } diff -Nru a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c --- a/arch/parisc/mm/init.c Tue May 18 23:38:07 2004 +++ b/arch/parisc/mm/init.c Tue May 18 23:38:07 2004 @@ -424,7 +424,12 @@ * a hole of 4kB between each vmalloced area for the same reason. */ -#define MAP_START 0x4000 /* Leave room for gateway page expansion */ + /* Leave room for gateway page expansion */ +#if KERNEL_MAP_START < GATEWAY_PAGE_SIZE +#error KERNEL_MAP_START is in gateway reserved region +#endif +#define MAP_START (KERNEL_MAP_START) + #define VM_MAP_OFFSET (32*1024) #define SET_MAP_OFFSET(x) ((void *)(((unsigned long)(x) + VM_MAP_OFFSET) \ & ~(VM_MAP_OFFSET-1))) @@ -545,7 +550,7 @@ */ if (!pmd) { - pmd = (pmd_t *) alloc_bootmem_low_pages_node(NODE_DATA(0),PAGE_SIZE); + pmd = (pmd_t *) alloc_bootmem_low_pages_node(NODE_DATA(0),PAGE_SIZE << PMD_ORDER); pmd = (pmd_t *) __pa(pmd); } diff -Nru a/arch/ppc/4xx_io/serial_sicc.c b/arch/ppc/4xx_io/serial_sicc.c --- a/arch/ppc/4xx_io/serial_sicc.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/4xx_io/serial_sicc.c Tue May 18 23:38:05 2004 @@ -1431,7 +1431,6 @@ save_flags(flags); cli(); if (tty_hung_up_p(filp)) { - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1452,7 +1451,6 @@ state->count = 0; } if (state->count) { - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1495,7 +1493,6 @@ } info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); wake_up_interruptible(&info->close_wait); - MOD_DEC_USE_COUNT; } static void siccuart_wait_until_sent(struct tty_struct *tty, int timeout) @@ -1685,9 +1682,7 @@ // is this a line that we've got? - MOD_INC_USE_COUNT; if (line >= SERIAL_SICC_NR) { - MOD_DEC_USE_COUNT; return -ENODEV; } @@ -1707,7 +1702,6 @@ if (tmp_buf) free_page(page); else if (!page) { - MOD_DEC_USE_COUNT; return -ENOMEM; } tmp_buf = (u_char *)page; @@ -1720,7 +1714,6 @@ (info->flags & ASYNC_CLOSING)) { if (info->flags & ASYNC_CLOSING) interruptible_sleep_on(&info->close_wait); - MOD_DEC_USE_COUNT; return -EAGAIN; } @@ -1729,13 +1722,11 @@ */ retval = siccuart_startup(info); if (retval) { - MOD_DEC_USE_COUNT; return retval; } retval = block_til_ready(tty, filp, info); if (retval) { - MOD_DEC_USE_COUNT; return retval; } @@ -1778,6 +1769,7 @@ return -ENOMEM; printk("IBM Vesta SICC serial port driver V 0.1 by Yudong Yang and Yi Ge / IBM CRL .\n"); siccnormal_driver->driver_name = "serial_sicc"; + siccnormal_driver->owner = THIS_MODULE; siccnormal_driver->name = SERIAL_SICC_NAME; siccnormal_driver->major = SERIAL_SICC_MAJOR; siccnormal_driver->minor_start = SERIAL_SICC_MINOR; diff -Nru a/arch/ppc/8260_io/uart.c b/arch/ppc/8260_io/uart.c --- a/arch/ppc/8260_io/uart.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/8260_io/uart.c Tue May 18 23:38:05 2004 @@ -592,9 +592,7 @@ #ifdef SERIAL_DEBUG_OPEN printk("scheduling hangup..."); #endif - MOD_INC_USE_COUNT; - if (schedule_work(&info->tqueue_hangup) == 0) - MOD_DEC_USE_COUNT; + schedule_work(&info->tqueue_hangup); } } if (info->flags & ASYNC_CTS_FLOW) { @@ -723,7 +721,6 @@ tty = info->tty; if (tty) tty_hangup(tty); - MOD_DEC_USE_COUNT; } /*static void rs_8xx_timer(void) @@ -1689,7 +1686,6 @@ if (tty_hung_up_p(filp)) { DBG_CNT("before DEC-hung"); - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1716,7 +1712,6 @@ } if (state->count) { DBG_CNT("before DEC-2"); - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1770,7 +1765,6 @@ } info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); wake_up_interruptible(&info->close_wait); - MOD_DEC_USE_COUNT; restore_flags(flags); } @@ -2021,7 +2015,6 @@ if (retval) return retval; - MOD_INC_USE_COUNT; retval = block_til_ready(tty, filp, info); if (retval) { #ifdef SERIAL_DEBUG_OPEN @@ -2530,6 +2523,7 @@ /* Initialize the tty_driver structure */ + serial_driver->owner = THIS_MODULE; serial_driver->driver_name = "serial"; serial_driver->devfs_name = "tts/"; serial_driver->name = "ttyS"; diff -Nru a/arch/ppc/8xx_io/commproc.c b/arch/ppc/8xx_io/commproc.c --- a/arch/ppc/8xx_io/commproc.c Tue May 18 23:38:07 2004 +++ b/arch/ppc/8xx_io/commproc.c Tue May 18 23:38:07 2004 @@ -33,6 +33,7 @@ #include #include #include +#include extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); @@ -55,11 +56,10 @@ #if 1 void -m8xx_cpm_reset() +m8xx_cpm_reset(void) { volatile immap_t *imp; volatile cpm8xx_t *commproc; - pte_t *pte; imp = (immap_t *)IMAP_ADDR; commproc = (cpm8xx_t *)&imp->im_cpm; diff -Nru a/arch/ppc/8xx_io/cs4218_tdm.c b/arch/ppc/8xx_io/cs4218_tdm.c --- a/arch/ppc/8xx_io/cs4218_tdm.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/8xx_io/cs4218_tdm.c Tue May 18 23:38:05 2004 @@ -1456,21 +1456,10 @@ restore_flags(flags); } -static void CS_open(void) -{ - MOD_INC_USE_COUNT; -} - -static void CS_release(void) -{ - MOD_DEC_USE_COUNT; -} - static MACHINE mach_cs4218 = { + .owner = THIS_MODULE, .name = "HIOX CS4218", .name2 = "Built-in Sound", - .open = CS_open, - .release = CS_release, .dma_alloc = CS_Alloc, .dma_free = CS_Free, .irqinit = CS_IrqInit, diff -Nru a/arch/ppc/8xx_io/uart.c b/arch/ppc/8xx_io/uart.c --- a/arch/ppc/8xx_io/uart.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/8xx_io/uart.c Tue May 18 23:38:08 2004 @@ -583,9 +583,7 @@ #ifdef SERIAL_DEBUG_OPEN printk("scheduling hangup..."); #endif - MOD_INC_USE_COUNT; - if (schedule_task(&info->tqueue_hangup) == 0) - MOD_DEC_USE_COUNT; + schedule_task(&info->tqueue_hangup); } } if (info->flags & ASYNC_CTS_FLOW) { @@ -719,7 +717,6 @@ tty = info->tty; if (tty) tty_hangup(tty); - MOD_DEC_USE_COUNT; } /*static void rs_8xx_timer(void) @@ -1664,7 +1661,6 @@ if (tty_hung_up_p(filp)) { DBG_CNT("before DEC-hung"); - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1691,7 +1687,6 @@ } if (state->count) { DBG_CNT("before DEC-2"); - MOD_DEC_USE_COUNT; restore_flags(flags); return; } @@ -1746,7 +1741,6 @@ } info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); wake_up_interruptible(&info->close_wait); - MOD_DEC_USE_COUNT; restore_flags(flags); } @@ -2008,14 +2002,12 @@ if (retval) return retval; - MOD_INC_USE_COUNT; retval = block_til_ready(tty, filp, info); if (retval) { #ifdef SERIAL_DEBUG_OPEN printk("rs_open returning after block_til_ready with %d\n", retval); #endif - MOD_DEC_USE_COUNT; return retval; } @@ -2520,6 +2512,7 @@ /* Initialize the tty_driver structure */ + serial_driver->owner = THIS_MODULE; serial_driver->driver_name = "serial"; serial_driver->devfs_name = "tts/"; serial_driver->name = "ttyS"; diff -Nru a/arch/ppc/Kconfig b/arch/ppc/Kconfig --- a/arch/ppc/Kconfig Tue May 18 23:38:09 2004 +++ b/arch/ppc/Kconfig Tue May 18 23:38:09 2004 @@ -1238,7 +1238,7 @@ bool "Support for early boot texts over serial port" depends on 4xx || GT64260 || LOPEC || PPLUS || PRPMC800 || PPC_GEN550 -config OCP +config PPC_OCP bool depends on IBM_OCP default y diff -Nru a/arch/ppc/Makefile b/arch/ppc/Makefile --- a/arch/ppc/Makefile Tue May 18 23:38:05 2004 +++ b/arch/ppc/Makefile Tue May 18 23:38:05 2004 @@ -43,7 +43,6 @@ drivers-$(CONFIG_8xx) += arch/ppc/8xx_io/ drivers-$(CONFIG_4xx) += arch/ppc/4xx_io/ drivers-$(CONFIG_8260) += arch/ppc/8260_io/ -drivers-$(CONFIG_OCP) += arch/ppc/ocp/ BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm diff -Nru a/arch/ppc/boot/simple/Makefile b/arch/ppc/boot/simple/Makefile --- a/arch/ppc/boot/simple/Makefile Tue May 18 23:38:05 2004 +++ b/arch/ppc/boot/simple/Makefile Tue May 18 23:38:05 2004 @@ -41,7 +41,7 @@ # if present on 'classic' PPC. cacheflag-y := -DCLEAR_CACHES="" # This file will flush / disable the L2, and L3 if present. -clear_L2_L3 := $(boot)/simple/clear.S +clear_L2_L3 := $(srctree)/$(boot)/simple/clear.S # # See arch/ppc/kconfig and arch/ppc/platforms/Kconfig @@ -125,7 +125,7 @@ AFLAGS_head.o += $(cacheflag-y) # Linker args. This specifies where the image will be run at. -LD_ARGS := -T $(boot)/ld.script \ +LD_ARGS := -T $(srctree)/$(boot)/ld.script \ -Ttext $(CONFIG_BOOT_LOAD) -Bstatic OBJCOPY_ARGS := -O elf32-powerpc @@ -159,8 +159,8 @@ targets := dummy.o -$(obj)/zvmlinux: $(OBJS) $(LIBS) $(boot)/ld.script $(images)/vmlinux.gz \ - $(obj)/dummy.o +$(obj)/zvmlinux: $(OBJS) $(LIBS) $(srctree)/$(boot)/ld.script \ + $(images)/vmlinux.gz $(obj)/dummy.o $(OBJCOPY) $(OBJCOPY_ARGS) \ --add-section=.image=$(images)/vmlinux.gz \ --set-section-flags=.image=contents,alloc,load,readonly,data \ @@ -169,7 +169,7 @@ $(OBJCOPY) $(OBJCOPY_ARGS) $@ $@ -R .comment -R .stab \ -R .stabstr -R .ramdisk -R .sysmap -$(obj)/zvmlinux.initrd: $(OBJS) $(LIBS) $(boot)/ld.script \ +$(obj)/zvmlinux.initrd: $(OBJS) $(LIBS) $(srctree)/$(boot)/ld.script \ $(images)/vmlinux.gz $(obj)/dummy.o $(OBJCOPY) $(OBJCOPY_ARGS) \ --add-section=.ramdisk=$(images)/ramdisk.image.gz \ @@ -210,10 +210,10 @@ $(MKTREE) $(obj)/zvmlinux.initrd $(images)/zImage.initrd.$(end-y) \ $(ENTRYPOINT) -$(images)/zImage-PPLUS: $(obj)/zvmlinux $(utils)/mkprep $(MKBUGBOOT) +$(images)/zImage-PPLUS: $(obj)/zvmlinux $(MKPREP) $(MKBUGBOOT) $(MKPREP) -pbp $(obj)/zvmlinux $(images)/zImage.$(end-y) $(MKBUGBOOT) $(obj)/zvmlinux $(images)/zImage.bugboot -$(images)/zImage.initrd-PPLUS: $(obj)/zvmlinux.initrd $(utils)/mkprep $(MKBUGBOOT) +$(images)/zImage.initrd-PPLUS: $(obj)/zvmlinux.initrd $(MKPREP) $(MKBUGBOOT) $(MKPREP) -pbp $(obj)/zvmlinux.initrd $(images)/zImage.initrd.$(end-y) $(MKBUGBOOT) $(obj)/zvmlinux.initrd $(images)/zImage.initrd.bugboot diff -Nru a/arch/ppc/boot/simple/embed_config.c b/arch/ppc/boot/simple/embed_config.c --- a/arch/ppc/boot/simple/embed_config.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/boot/simple/embed_config.c Tue May 18 23:38:05 2004 @@ -705,7 +705,7 @@ #ifdef CONFIG_IBM_OPENBIOS /* This could possibly work for all treeboot roms. */ -#if defined(CONFIG_ASH) || defined(CONFIG_BEECH) +#if defined(CONFIG_ASH) || defined(CONFIG_BEECH) || defined(CONFIG_BUBINGA) #define BOARD_INFO_VECTOR 0xFFF80B50 /* openbios 1.19 moved this vector down - armin */ #else #define BOARD_INFO_VECTOR 0xFFFE0B50 @@ -742,7 +742,7 @@ */ mtdcr(DCRN_MALCR(DCRN_MAL_BASE), MALCR_MMSR); /* 1st reset MAL */ while (mfdcr(DCRN_MALCR(DCRN_MAL_BASE)) & MALCR_MMSR) {}; /* wait for the reset */ - out_be32(EMAC0_BASE,0x20000000); /* then reset EMAC */ + out_be32((volatile u32*)EMAC0_BASE,0x20000000); /* then reset EMAC */ #endif bd = &bdinfo; diff -Nru a/arch/ppc/configs/ash_defconfig b/arch/ppc/configs/ash_defconfig --- a/arch/ppc/configs/ash_defconfig Tue May 18 23:38:05 2004 +++ b/arch/ppc/configs/ash_defconfig Tue May 18 23:38:05 2004 @@ -4,11 +4,17 @@ CONFIG_MMU=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_HAVE_DEC_LOCK=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options # CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y # # General setup @@ -18,9 +24,16 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set +# CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set CONFIG_FUTEX=y # CONFIG_EPOLL is not set +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -33,66 +46,61 @@ CONFIG_KMOD=y # -# Platform support +# Processor # -CONFIG_PPC=y -CONFIG_PPC32=y # CONFIG_6xx is not set CONFIG_40x=y +# CONFIG_44x is not set # CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set # CONFIG_8xx is not set +# CONFIG_MATH_EMULATION is not set +# CONFIG_CPU_FREQ is not set CONFIG_4xx=y # # IBM 4xx options # CONFIG_ASH=y -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set # CONFIG_CPCI405 is not set # CONFIG_EP405 is not set +# CONFIG_EVB405EP is not set # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set # CONFIG_REDWOOD_5 is not set # CONFIG_REDWOOD_6 is not set # CONFIG_SYCAMORE is not set -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set CONFIG_NP405H=y CONFIG_IBM405_ERR77=y CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_IBM_OPENBIOS=y -# CONFIG_405_DMA is not set # CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set CONFIG_NOT_COHERENT_CACHE=y -# CONFIG_SMP is not set -# CONFIG_PREEMPT is not set -# CONFIG_MATH_EMULATION is not set -# CONFIG_CPU_FREQ is not set # -# General setup +# Platform options # -# CONFIG_HIGHMEM is not set -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y # CONFIG_PC_KEYBOARD is not set -CONFIG_KCORE_ELF=y -CONFIG_BINFMT_ELF=y +# CONFIG_SMP is not set +# CONFIG_PREEMPT is not set +# CONFIG_HIGHMEM is not set CONFIG_KERNEL_ELF=y +CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -CONFIG_PCI_LEGACY_PROC=y -# CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # -# Parallel port support +# Bus options # -# CONFIG_PARPORT is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_LEGACY_PROC=y +# CONFIG_PCI_NAMES is not set # # Advanced setup @@ -109,14 +117,26 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# +# Generic Driver Options +# + +# # Memory Technology Devices (MTD) # # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices @@ -127,32 +147,36 @@ # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y +# CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) +# ATA/ATAPI/MFM/RLL support # -# CONFIG_MD is not set +# CONFIG_IDE is not set # -# ATA/IDE/MFM/RLL support +# SCSI device support # -# CONFIG_IDE is not set +# CONFIG_SCSI is not set # -# SCSI support +# Multi-device support (RAID and LVM) # -# CONFIG_SCSI is not set +# CONFIG_MD is not set # # Fusion MPT device support # +# CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -162,6 +186,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -171,38 +199,37 @@ # # CONFIG_PACKET is not set # CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_NET_DIVERT is not set @@ -230,7 +257,6 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -247,6 +273,7 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set +# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -254,6 +281,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +CONFIG_IBM_EMAC=y +# CONFIG_IBM_EMAC_ERRMSG is not set +CONFIG_IBM_EMAC_RXB=64 +CONFIG_IBM_EMAC_TXB=8 +CONFIG_IBM_EMAC_FGAP=8 +CONFIG_IBM_EMAC_SKBRES=0 # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_PPP is not set @@ -265,10 +298,12 @@ # CONFIG_NET_RADIO is not set # -# Token Ring devices (depends on LLC=y) +# Token Ring devices # +# CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -286,47 +321,71 @@ # CONFIG_IRDA is not set # -# ISDN subsystem +# Bluetooth support # -# CONFIG_ISDN_BOOL is not set +# CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # -# Graphics support +# ISDN subsystem # -# CONFIG_FB is not set +# CONFIG_ISDN is not set # -# Old CD-ROM drivers (not SCSI, not IDE) +# Telephony Support # -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support # -# CONFIG_INPUT is not set +CONFIG_INPUT=y # # Userland interfaces # +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set # # Input I/O drivers # # CONFIG_GAMEPORT is not set CONFIG_SOUND_GAMEPORT=y -# CONFIG_SERIO is not set +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set # # Input Device Drivers # - -# -# Macintosh device drivers -# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set # # Character devices # +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -334,6 +393,7 @@ # CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=4 # CONFIG_SERIAL_8250_EXTENDED is not set # @@ -342,100 +402,145 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set +# CONFIG_NVRAM is not set +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set # # I2C support # CONFIG_I2C=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# # CONFIG_I2C_ALGOBIT is not set # CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_IBM_OCP_ALGO=y -CONFIG_I2C_IBM_OCP_ADAP=y -# CONFIG_I2C_CHARDEV is not set # -# I2C Hardware Sensors Mainboard support +# I2C Hardware Bus support # +# CONFIG_I2C_ALI1535 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set # CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_IBM_IIC is not set +# CONFIG_I2C_ISA is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # +# CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set -# CONFIG_I2C_SENSOR is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice +# Other I2C Chip support # -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# IPMI +# Misc devices # -# CONFIG_IPMI_HANDLER is not set # -# Watchdog Cards +# Multimedia devices # -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_WDT is not set -# CONFIG_WDTPCI is not set -# CONFIG_PCWATCHDOG is not set -# CONFIG_ACQUIRE_WDT is not set -# CONFIG_ADVANTECH_WDT is not set -# CONFIG_EUROTECH_WDT is not set -# CONFIG_IB700_WDT is not set -# CONFIG_MIXCOMWD is not set -# CONFIG_SCx200_WDT is not set -# CONFIG_60XX_WDT is not set -# CONFIG_W83877F_WDT is not set -# CONFIG_MACHZ_WDT is not set -# CONFIG_SC520_WDT is not set -# CONFIG_AMD7XX_TCO is not set -# CONFIG_ALIM7101_WDT is not set -# CONFIG_SC1200_WDT is not set -# CONFIG_WAFER_WDT is not set -# CONFIG_CPU5_WDT is not set -# CONFIG_NVRAM is not set -CONFIG_GEN_RTC=y -# CONFIG_GEN_RTC_X is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set +# CONFIG_VIDEO_DEV is not set # -# Ftape, the floppy tape device driver +# Digital Video Broadcasting Devices # -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_DVB is not set # -# Multimedia devices +# Graphics support # -# CONFIG_VIDEO_DEV is not set +# CONFIG_FB is not set # -# Digital Video Broadcasting Devices +# Sound # -# CONFIG_DVB is not set +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set # # File systems @@ -469,10 +574,11 @@ # Pseudo filesystems # CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y # @@ -481,6 +587,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -497,12 +604,13 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -528,26 +636,15 @@ # CONFIG_EFI_PARTITION is not set # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set +# CONFIG_NLS is not set # # IBM 40x options # # -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# # Library routines # CONFIG_CRC32=y @@ -556,7 +653,6 @@ # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set -# CONFIG_KALLSYMS is not set # CONFIG_SERIAL_TEXT_DEBUG is not set CONFIG_OCP=y diff -Nru a/arch/ppc/configs/bubinga_defconfig b/arch/ppc/configs/bubinga_defconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/configs/bubinga_defconfig Tue May 18 23:38:09 2004 @@ -0,0 +1,593 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_MMU=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_HAVE_DEC_LOCK=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +# CONFIG_STANDALONE is not set +CONFIG_BROKEN_ON_SMP=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set +# CONFIG_IKCONFIG is not set +CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set +CONFIG_FUTEX=y +# CONFIG_EPOLL is not set +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# Processor +# +# CONFIG_6xx is not set +CONFIG_40x=y +# CONFIG_44x is not set +# CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set +# CONFIG_8xx is not set +# CONFIG_MATH_EMULATION is not set +# CONFIG_CPU_FREQ is not set +CONFIG_4xx=y + +# +# IBM 4xx options +# +# CONFIG_ASH is not set +CONFIG_BUBINGA=y +# CONFIG_CPCI405 is not set +# CONFIG_EP405 is not set +# CONFIG_OAK is not set +# CONFIG_REDWOOD_5 is not set +# CONFIG_REDWOOD_6 is not set +# CONFIG_SYCAMORE is not set +# CONFIG_WALNUT is not set +CONFIG_IBM405_ERR77=y +CONFIG_IBM405_ERR51=y +CONFIG_IBM_OCP=y +CONFIG_BIOS_FIXUP=y +CONFIG_405EP=y +CONFIG_IBM_OPENBIOS=y +# CONFIG_PM is not set +CONFIG_UART0_TTYS0=y +# CONFIG_UART0_TTYS1 is not set +CONFIG_NOT_COHERENT_CACHE=y + +# +# Platform options +# +# CONFIG_PC_KEYBOARD is not set +# CONFIG_SMP is not set +# CONFIG_PREEMPT is not set +# CONFIG_HIGHMEM is not set +CONFIG_KERNEL_ELF=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_CMDLINE_BOOL is not set + +# +# Bus options +# +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_LEGACY_PROC=y +# CONFIG_PCI_NAMES is not set + +# +# Advanced setup +# +# CONFIG_ADVANCED_OPTIONS is not set + +# +# Default settings for advanced configuration options are used +# +CONFIG_HIGHMEM_START=0xfe000000 +CONFIG_LOWMEM_SIZE=0x30000000 +CONFIG_KERNEL_START=0xc0000000 +CONFIG_TASK_SIZE=0x80000000 +CONFIG_BOOT_LOAD=0x00400000 + +# +# Device Drivers +# + +# +# Generic Driver Options +# + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_LBD is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_SCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# Macintosh device drivers +# + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_IPV6 is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_NETFILTER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_OAKNET is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +# CONFIG_NET_PCI is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +CONFIG_IBM_EMAC=y +# CONFIG_IBM_EMAC_ERRMSG is not set +CONFIG_IBM_EMAC_RXB=64 +CONFIG_IBM_EMAC_TXB=8 +CONFIG_IBM_EMAC_FGAP=8 +CONFIG_IBM_EMAC_SKBRES=0 +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# IBM 40x options +# + +# +# Library routines +# +CONFIG_CRC32=y + +# +# Kernel hacking +# +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_SERIAL_TEXT_DEBUG is not set +CONFIG_PPC_OCP=y + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set diff -Nru a/arch/ppc/configs/common_defconfig b/arch/ppc/configs/common_defconfig --- a/arch/ppc/configs/common_defconfig Tue May 18 23:38:06 2004 +++ b/arch/ppc/configs/common_defconfig Tue May 18 23:38:06 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -20,9 +21,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set @@ -32,6 +36,8 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -113,7 +119,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y CONFIG_PCI_NAMES=y -CONFIG_HOTPLUG=y # # PCMCIA/CardBus support @@ -122,11 +127,6 @@ CONFIG_PCMCIA_PROBE=y # -# Parallel port support -# -# CONFIG_PARPORT is not set - -# # Advanced setup # # CONFIG_ADVANCED_OPTIONS is not set @@ -141,6 +141,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # # CONFIG_FW_LOADER is not set @@ -151,6 +155,11 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # # CONFIG_PNP is not set @@ -167,17 +176,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -199,6 +204,7 @@ # # IDE chipset support/bugfixes # +CONFIG_IDE_GENERIC=y CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y # CONFIG_BLK_DEV_OFFBOARD is not set @@ -206,7 +212,6 @@ # CONFIG_BLK_DEV_OPTI621 is not set CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_IDE_TCQ is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set CONFIG_IDEDMA_PCI_AUTO=y # CONFIG_IDEDMA_ONLYDISK is not set @@ -268,6 +273,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -279,7 +290,6 @@ CONFIG_SCSI_AIC7XXX=m CONFIG_AIC7XXX_CMDS_PER_DEVICE=253 CONFIG_AIC7XXX_RESET_DELAY_MS=15000 -# CONFIG_AIC7XXX_PROBE_EISA_VL is not set # CONFIG_AIC7XXX_BUILD_FIRMWARE is not set CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 @@ -289,6 +299,7 @@ CONFIG_SCSI_ADVANSYS=m # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -307,14 +318,23 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set @@ -325,12 +345,22 @@ CONFIG_SCSI_MAC53C94=y # +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -340,6 +370,24 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_PMU=y +CONFIG_PMAC_PBOOK=y +CONFIG_PMAC_APM_EMU=y +CONFIG_PMAC_BACKLIGHT=y +# CONFIG_MAC_FLOPPY is not set +CONFIG_MAC_SERIAL=m +CONFIG_ADB_MACIO=y +CONFIG_INPUT_ADBHID=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_THERM_WINDTUNNEL=m +CONFIG_THERM_ADT746X=m +# CONFIG_ANSLCD is not set + +# # Networking support # CONFIG_NET=y @@ -360,7 +408,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -371,8 +418,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -425,14 +470,17 @@ # CONFIG_IP_NF_ARPTABLES is not set CONFIG_IP_NF_COMPAT_IPCHAINS=m # CONFIG_IP_NF_COMPAT_IPFWADM is not set +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -453,16 +501,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -488,6 +541,7 @@ CONFIG_TULIP=y # CONFIG_TULIP_MWI is not set CONFIG_TULIP_MMIO=y +# CONFIG_TULIP_NAPI is not set CONFIG_DE4X5=m # CONFIG_WINBOND_840 is not set # CONFIG_DM9102 is not set @@ -502,6 +556,7 @@ # CONFIG_AC3200 is not set # CONFIG_APRICOT is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_CS89x0 is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set @@ -528,7 +583,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -536,17 +590,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=y -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=y -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=y -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set # # Wireless LAN (non-hamradio) @@ -569,98 +618,43 @@ # CONFIG_PLX_HERMES is not set # CONFIG_TMD_HERMES is not set # CONFIG_PCI_HERMES is not set -CONFIG_NET_WIRELESS=y +# CONFIG_ATMEL is not set # -# Token Ring devices +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support # -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set +# CONFIG_PRISM54 is not set +CONFIG_NET_WIRELESS=y # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=y +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -CONFIG_FB=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_OF=y -CONFIG_FB_CONTROL=y -CONFIG_FB_PLATINUM=y -CONFIG_FB_VALKYRIE=y -CONFIG_FB_CT65550=y -CONFIG_FB_IMSTT=y -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -CONFIG_FB_MATROX_MYSTIQUE=y -# CONFIG_FB_MATROX_G450 is not set -# CONFIG_FB_MATROX_G100A is not set -# CONFIG_FB_MATROX_MULTIHEAD is not set -CONFIG_FB_RADEON=y -CONFIG_FB_ATY128=y -CONFIG_FB_ATY=y -CONFIG_FB_ATY_CT=y -CONFIG_FB_ATY_GX=y -# CONFIG_FB_ATY_XL_INIT is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -CONFIG_FB_3DFX=y -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y - -# -# Old CD-ROM drivers (not SCSI, not IDE) -# -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support @@ -696,38 +690,22 @@ CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_PS2_SYNAPTICS is not set # CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y -CONFIG_INPUT_PCSPKR=y CONFIG_INPUT_UINPUT=m # -# Macintosh device drivers -# -CONFIG_ADB_CUDA=y -CONFIG_ADB_PMU=y -CONFIG_PMAC_PBOOK=y -CONFIG_PMAC_APM_EMU=y -CONFIG_PMAC_BACKLIGHT=y -# CONFIG_MAC_FLOPPY is not set -CONFIG_MAC_SERIAL=m -CONFIG_ADB=y -CONFIG_ADB_MACIO=y -CONFIG_INPUT_ADBHID=y -CONFIG_MAC_EMUMOUSEBTN=y -# CONFIG_ANSLCD is not set - -# # Character devices # CONFIG_VT=y @@ -749,79 +727,108 @@ CONFIG_SERIAL_PMACZILOG=y # CONFIG_SERIAL_PMACZILOG_CONSOLE is not set CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_NVRAM=y +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set # # I2C support # -CONFIG_I2C=m +CONFIG_I2C=y CONFIG_I2C_CHARDEV=m # # I2C Algorithms # -# CONFIG_I2C_ALGOBIT is not set +CONFIG_I2C_ALGOBIT=y # CONFIG_I2C_ALGOPCF is not set # # I2C Hardware Bus support # # CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_ELEKTOR is not set +CONFIG_I2C_HYDRA=y # CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set # CONFIG_I2C_ISA is not set CONFIG_I2C_KEYWEST=m # CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set # CONFIG_I2C_SIS5595 is not set # CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # # CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set # CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice -# -CONFIG_BUSMOUSE=y -# CONFIG_QIC02_TAPE is not set - -# -# IPMI +# Other I2C Chip support # -# CONFIG_IPMI_HANDLER is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# Watchdog Cards +# Misc devices # -# CONFIG_WATCHDOG is not set -CONFIG_NVRAM=y -CONFIG_GEN_RTC=y -# CONFIG_GEN_RTC_X is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set # # Multimedia devices @@ -834,152 +841,63 @@ # CONFIG_DVB is not set # -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_DEVFS_FS=y -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -CONFIG_HFS_FS=m -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems +# Graphics support # -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V4 is not set -CONFIG_NFSD=y -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V4 is not set -# CONFIG_NFSD_TCP is not set -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=y -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set +CONFIG_FB=y +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +CONFIG_FB_CONTROL=y +CONFIG_FB_PLATINUM=y +CONFIG_FB_VALKYRIE=y +CONFIG_FB_CT65550=y +CONFIG_FB_IMSTT=y +# CONFIG_FB_S3TRIO is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +# CONFIG_FB_MATROX_G450 is not set +# CONFIG_FB_MATROX_G100A is not set +CONFIG_FB_MATROX_I2C=y +# CONFIG_FB_MATROX_MULTIHEAD is not set +# CONFIG_FB_RADEON_OLD is not set +CONFIG_FB_RADEON=y +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GX=y +# CONFIG_FB_ATY_XL_INIT is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set # -# Partition Types +# Console display driver support # -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y +CONFIG_VGA_CONSOLE=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y # -# Native Language Support +# Logo configuration # -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y # # Sound @@ -992,6 +910,10 @@ # Advanced Linux Sound Architecture # CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m CONFIG_SND_SEQUENCER=m # CONFIG_SND_SEQ_DUMMY is not set CONFIG_SND_OSSEMUL=y @@ -1004,6 +926,8 @@ # # Generic devices # +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m # CONFIG_SND_DUMMY is not set # CONFIG_SND_VIRMIDI is not set # CONFIG_SND_MTPAV is not set @@ -1040,11 +964,17 @@ # PCI devices # # CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set # CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set # CONFIG_SND_CS46XX is not set # CONFIG_SND_CS4281 is not set # CONFIG_SND_EMU10K1 is not set # CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set # CONFIG_SND_NM256 is not set # CONFIG_SND_RME32 is not set # CONFIG_SND_RME96 is not set @@ -1063,6 +993,7 @@ # CONFIG_SND_ICE1712 is not set # CONFIG_SND_ICE1724 is not set # CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set # CONFIG_SND_SONICVIBES is not set # CONFIG_SND_VIA82XX is not set # CONFIG_SND_VX222 is not set @@ -1132,13 +1063,14 @@ # CONFIG_USB_WACOM is not set # CONFIG_USB_KBTAB is not set # CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set # CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set -CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set # CONFIG_USB_HPUSBSCSI is not set @@ -1206,17 +1138,176 @@ # # USB Miscellaneous drivers # +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set # CONFIG_USB_TIGL is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set # CONFIG_USB_TEST is not set + +# +# USB Gadget Support +# # CONFIG_USB_GADGET is not set # +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +CONFIG_DEVFS_FS=y +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/ppc/configs/cpci405_defconfig b/arch/ppc/configs/cpci405_defconfig --- a/arch/ppc/configs/cpci405_defconfig Tue May 18 23:38:09 2004 +++ b/arch/ppc/configs/cpci405_defconfig Tue May 18 23:38:09 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -23,6 +24,7 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y # CONFIG_KALLSYMS is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -59,22 +62,19 @@ # IBM 4xx options # # CONFIG_ASH is not set -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set CONFIG_CPCI405=y # CONFIG_EP405 is not set +# CONFIG_EVB405EP is not set # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set # CONFIG_REDWOOD_5 is not set # CONFIG_REDWOOD_6 is not set # CONFIG_SYCAMORE is not set -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set CONFIG_IBM405_ERR77=y CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_405GP=y -# CONFIG_405_DMA is not set # CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set @@ -90,7 +90,8 @@ CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # # Bus options @@ -99,12 +100,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y # CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -121,6 +116,10 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -130,30 +129,31 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y # CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -174,6 +174,7 @@ # # IDE chipset support/bugfixes # +CONFIG_IDE_GENERIC=y # CONFIG_BLK_DEV_IDEPCI is not set # CONFIG_BLK_DEV_IDEDMA is not set # CONFIG_IDEDMA_AUTO is not set @@ -185,11 +186,17 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # +# CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -199,6 +206,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -214,14 +225,13 @@ CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -234,7 +244,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -292,6 +301,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +CONFIG_IBM_EMAC=y +# CONFIG_IBM_EMAC_ERRMSG is not set +CONFIG_IBM_EMAC_RXB=64 +CONFIG_IBM_EMAC_TXB=8 +CONFIG_IBM_EMAC_FGAP=8 +CONFIG_IBM_EMAC_SKBRES=0 # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_PPP is not set @@ -308,6 +323,7 @@ # CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -328,16 +344,18 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -# CONFIG_FB is not set +# CONFIG_PHONE is not set # # Input device support @@ -374,10 +392,6 @@ # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# - -# # Character devices # # CONFIG_VT is not set @@ -397,52 +411,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -CONFIG_I2C_IBM_IIC=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_W83781D is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -470,6 +440,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -480,6 +459,26 @@ # CONFIG_DVB is not set # +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -525,6 +524,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -541,13 +541,14 @@ CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -560,11 +561,11 @@ # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y -CONFIG_NLS=y # # Native Language Support # +CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_CODEPAGE_437 is not set # CONFIG_NLS_CODEPAGE_737 is not set @@ -605,19 +606,8 @@ # CONFIG_NLS_UTF8 is not set # -# Sound -# -# CONFIG_SOUND is not set - -# # IBM 40x options # - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set # # Library routines diff -Nru a/arch/ppc/configs/ebony_defconfig b/arch/ppc/configs/ebony_defconfig --- a/arch/ppc/configs/ebony_defconfig Tue May 18 23:38:06 2004 +++ b/arch/ppc/configs/ebony_defconfig Tue May 18 23:38:06 2004 @@ -21,8 +21,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -33,6 +35,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -67,7 +70,6 @@ CONFIG_440=y CONFIG_BOOKE=y CONFIG_IBM_OCP=y -CONFIG_PPC_OCP=y # CONFIG_PM is not set CONFIG_NOT_COHERENT_CACHE=y @@ -161,7 +163,6 @@ # # Fusion MPT device support # -# CONFIG_FUSION is not set # # IEEE 1394 (FireWire) support @@ -210,8 +211,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -230,7 +229,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -251,16 +252,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -277,7 +283,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -285,45 +290,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -495,6 +484,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_TMPFS is not set @@ -535,7 +525,6 @@ # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -553,6 +542,7 @@ # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set # # Kernel hacking @@ -567,7 +557,7 @@ CONFIG_BDI_SWITCH=y # CONFIG_DEBUG_INFO is not set # CONFIG_SERIAL_TEXT_DEBUG is not set -CONFIG_OCP=y +CONFIG_PPC_OCP=y # # Security options diff -Nru a/arch/ppc/configs/ep405_defconfig b/arch/ppc/configs/ep405_defconfig --- a/arch/ppc/configs/ep405_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/ep405_defconfig Tue May 18 23:38:08 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -20,17 +21,22 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set -# CONFIG_EMBEDDED is not set +CONFIG_EMBEDDED=y CONFIG_KALLSYMS=y CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -59,16 +65,13 @@ # IBM 4xx options # # CONFIG_ASH is not set -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set +# CONFIG_BUBINGA is not set # CONFIG_CPCI405 is not set CONFIG_EP405=y # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set # CONFIG_REDWOOD_5 is not set # CONFIG_REDWOOD_6 is not set # CONFIG_SYCAMORE is not set -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set # CONFIG_EP405PC is not set CONFIG_IBM405_ERR77=y @@ -77,7 +80,6 @@ CONFIG_BIOS_FIXUP=y CONFIG_405GP=y CONFIG_EMBEDDEDBOOT=y -# CONFIG_405_DMA is not set # CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set @@ -93,7 +95,8 @@ CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # # Bus options @@ -102,12 +105,6 @@ CONFIG_PCI_DOMAINS=y # CONFIG_PCI_LEGACY_PROC is not set # CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -124,6 +121,10 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -133,13 +134,18 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set @@ -147,17 +153,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y # CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set @@ -168,11 +170,16 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -182,6 +189,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -197,30 +208,28 @@ CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -241,16 +250,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -279,7 +293,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -287,59 +300,39 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -# CONFIG_FB is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y +# CONFIG_PHONE is not set # # Input device support @@ -379,15 +372,9 @@ # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# - -# # Character devices # -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -403,53 +390,9 @@ # CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -CONFIG_I2C=y -# CONFIG_I2C_CHARDEV is not set - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -CONFIG_I2C_IBM_IIC=y -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_W83781D is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -477,6 +420,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -487,6 +439,26 @@ # CONFIG_DVB is not set # +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -519,7 +491,9 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y @@ -530,6 +504,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -546,17 +521,17 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -566,31 +541,26 @@ CONFIG_MSDOS_PARTITION=y # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set +# CONFIG_NLS is not set # # IBM 40x options # # -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set # # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set # CONFIG_SERIAL_TEXT_DEBUG is not set -CONFIG_OCP=y +CONFIG_PPC_OCP=y # # Security options diff -Nru a/arch/ppc/configs/ibmchrp_defconfig b/arch/ppc/configs/ibmchrp_defconfig --- a/arch/ppc/configs/ibmchrp_defconfig Tue May 18 23:38:07 2004 +++ b/arch/ppc/configs/ibmchrp_defconfig Tue May 18 23:38:07 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -20,9 +21,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set @@ -32,6 +36,8 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -108,12 +114,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -130,6 +130,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -139,6 +143,11 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # # CONFIG_PNP is not set @@ -155,17 +164,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set @@ -195,6 +200,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -209,6 +220,7 @@ # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -227,14 +239,23 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set @@ -243,12 +264,22 @@ # CONFIG_SCSI_MAC53C94 is not set # +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -258,6 +289,15 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# +# CONFIG_ADB is not set +# CONFIG_ADB_CUDA is not set +# CONFIG_ADB_PMU is not set +# CONFIG_MAC_FLOPPY is not set +# CONFIG_MAC_SERIAL is not set + +# # Networking support # CONFIG_NET=y @@ -278,7 +318,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -289,8 +328,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -345,14 +382,17 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m # CONFIG_IP_NF_COMPAT_IPFWADM is not set +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -373,16 +413,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -414,6 +459,7 @@ # CONFIG_AC3200 is not set # CONFIG_APRICOT is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_CS89x0 is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set @@ -440,7 +486,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -448,104 +493,40 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set # -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set - -# -# Graphics support -# -CONFIG_FB=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_OF=y -# CONFIG_FB_CONTROL is not set -# CONFIG_FB_PLATINUM is not set -# CONFIG_FB_VALKYRIE is not set -# CONFIG_FB_CT65550 is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -CONFIG_FB_MATROX_MYSTIQUE=y -# CONFIG_FB_MATROX_G450 is not set -CONFIG_FB_MATROX_G100A=y -CONFIG_FB_MATROX_G100=y -# CONFIG_FB_MATROX_MULTIHEAD is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -CONFIG_FB_3DFX=y -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_ISDN is not set # -# Old CD-ROM drivers (not SCSI, not IDE) +# Telephony Support # -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support @@ -581,31 +562,22 @@ CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_PS2_SYNAPTICS is not set # CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y -CONFIG_INPUT_PCSPKR=y CONFIG_INPUT_UINPUT=y # -# Macintosh device drivers -# -# CONFIG_ADB_CUDA is not set -# CONFIG_ADB_PMU is not set -# CONFIG_MAC_FLOPPY is not set -# CONFIG_MAC_SERIAL is not set -# CONFIG_ADB is not set - -# # Character devices # CONFIG_VT=y @@ -627,30 +599,8 @@ CONFIG_SERIAL_CORE=y # CONFIG_SERIAL_PMACZILOG is not set CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Algorithms -# - -# -# I2C Hardware Bus support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# Mice -# -CONFIG_BUSMOUSE=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -678,6 +628,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -688,6 +647,75 @@ # CONFIG_DVB is not set # +# Graphics support +# +CONFIG_FB=y +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +# CONFIG_FB_CONTROL is not set +# CONFIG_FB_PLATINUM is not set +# CONFIG_FB_VALKYRIE is not set +# CONFIG_FB_CT65550 is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S3TRIO is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +# CONFIG_FB_MATROX_G450 is not set +CONFIG_FB_MATROX_G100A=y +CONFIG_FB_MATROX_G100=y +# CONFIG_FB_MATROX_MULTIHEAD is not set +# CONFIG_FB_RADEON_OLD is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -724,10 +752,10 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y CONFIG_DEVFS_FS=y # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set @@ -739,6 +767,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -759,7 +788,6 @@ # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -782,11 +810,11 @@ # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set # CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y # # Native Language Support # +CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_CODEPAGE_437 is not set # CONFIG_NLS_CODEPAGE_737 is not set @@ -827,20 +855,10 @@ # CONFIG_NLS_UTF8 is not set # -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set # # Kernel hacking diff -Nru a/arch/ppc/configs/lopec_defconfig b/arch/ppc/configs/lopec_defconfig --- a/arch/ppc/configs/lopec_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/lopec_defconfig Tue May 18 23:38:08 2004 @@ -4,23 +4,39 @@ CONFIG_MMU=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_HAVE_DEC_LOCK=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options # CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y # # General setup # CONFIG_SWAP=y CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 -# CONFIG_EMBEDDED is not set +CONFIG_HOTPLUG=y +# CONFIG_IKCONFIG is not set +CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y CONFIG_FUTEX=y CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -33,24 +49,25 @@ CONFIG_KMOD=y # -# Platform support +# Processor # -CONFIG_PPC=y -CONFIG_PPC32=y CONFIG_6xx=y # CONFIG_40x is not set +# CONFIG_44x is not set # CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set # CONFIG_8xx is not set +CONFIG_ALTIVEC=y +# CONFIG_TAU is not set +# CONFIG_CPU_FREQ is not set +CONFIG_PPC_STD_MMU=y # -# IBM 4xx options +# Platform options # -# CONFIG_8260 is not set -CONFIG_GENERIC_ISA_DMA=y -CONFIG_PPC_STD_MMU=y # CONFIG_PPC_MULTIPLATFORM is not set # CONFIG_APUS is not set -# CONFIG_WILLOW_2 is not set +# CONFIG_WILLOW is not set # CONFIG_PCORE is not set # CONFIG_POWERPMC250 is not set # CONFIG_EV64260 is not set @@ -66,26 +83,31 @@ # CONFIG_K2 is not set # CONFIG_PAL4 is not set # CONFIG_GEMINI is not set +# CONFIG_EST8260 is not set +# CONFIG_SBS8260 is not set +# CONFIG_RPX6 is not set +# CONFIG_TQM8260 is not set CONFIG_EPIC_SERIAL_MODE=y +CONFIG_MPC10X_BRIDGE=y +# CONFIG_MPC10X_STORE_GATHERING is not set +CONFIG_PPCBUG_NVRAM=y # CONFIG_SMP is not set # CONFIG_PREEMPT is not set -CONFIG_ALTIVEC=y -# CONFIG_TAU is not set -# CONFIG_CPU_FREQ is not set +# CONFIG_HIGHMEM is not set +CONFIG_KERNEL_ELF=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # -# General setup +# Bus options # -# CONFIG_HIGHMEM is not set +CONFIG_GENERIC_ISA_DMA=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y -CONFIG_KCORE_ELF=y -CONFIG_BINFMT_ELF=y -CONFIG_KERNEL_ELF=y -CONFIG_BINFMT_MISC=m # CONFIG_PCI_LEGACY_PROC is not set CONFIG_PCI_NAMES=y -CONFIG_HOTPLUG=y # # PCMCIA/CardBus support @@ -93,15 +115,6 @@ # CONFIG_PCMCIA is not set # -# Parallel port support -# -# CONFIG_PARPORT is not set -CONFIG_PPC601_SYNC_FIX=y -# CONFIG_PPCBUG_NVRAM is not set -CONFIG_CMDLINE_BOOL=y -CONFIG_CMDLINE="ip=on" - -# # Advanced setup # # CONFIG_ADVANCED_OPTIONS is not set @@ -116,14 +129,27 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# +# Generic Driver Options +# +# CONFIG_FW_LOADER is not set + +# # Memory Technology Devices (MTD) # # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices @@ -134,47 +160,77 @@ # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=m CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set +# CONFIG_LBD is not set # -# ATA/IDE/MFM/RLL support +# ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# CONFIG_BLK_DEV_IDE=y # # Please see Documentation/ide.txt for help/info on IDE drives # -# CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_IDEDISK=y CONFIG_IDEDISK_MULTI_MODE=y # CONFIG_IDEDISK_STROKE is not set -# CONFIG_BLK_DEV_IDECD is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set # CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set # # IDE chipset support/bugfixes # -# CONFIG_BLK_DEV_IDEPCI is not set +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_IDEPCI_SHARE_IRQ is not set +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_SL82C105=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_BLK_DEV_HD is not set # -# SCSI support +# SCSI device support # CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) @@ -194,6 +250,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -202,11 +264,9 @@ # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_IN2000 is not set -# CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -214,34 +274,41 @@ # CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_GDTH is not set -# CONFIG_SCSI_GENERIC_NCR5380 is not set -# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set -# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_NCR53C7xx is not set CONFIG_SCSI_SYM53C8XX_2=y CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set -# CONFIG_SCSI_PCI2000 is not set -# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC390T is not set -# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -251,6 +318,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -261,38 +332,37 @@ CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set # CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set +# CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set # CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_NET_DIVERT is not set @@ -310,17 +380,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -CONFIG_DUMMY=m -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -342,9 +416,11 @@ # CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set CONFIG_E100=y +# CONFIG_E100_NAPI is not set # CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set @@ -373,102 +449,49 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set # -# Wireless LAN (non-hamradio) +# Token Ring devices # -# CONFIG_NET_RADIO is not set +# CONFIG_TR is not set # -# Token Ring devices (depends on LLC=y) +# Wireless LAN (non-hamradio) # -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set +# CONFIG_NET_RADIO is not set # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_CT65550 is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -# CONFIG_FB_MATROX_MYSTIQUE is not set -# CONFIG_FB_MATROX_G450 is not set -CONFIG_FB_MATROX_G100A=y -CONFIG_FB_MATROX_G100=y -# CONFIG_FB_MATROX_MULTIHEAD is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y - -# -# Old CD-ROM drivers (not SCSI, not IDE) -# -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support # -CONFIG_INPUT=m +# CONFIG_INPUT is not set # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=m -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=m -# CONFIG_INPUT_EVBUG is not set # # Input I/O drivers @@ -476,23 +499,16 @@ # CONFIG_GAMEPORT is not set CONFIG_SOUND_GAMEPORT=y # CONFIG_SERIO is not set +# CONFIG_SERIO_I8042 is not set # # Input Device Drivers # -CONFIG_INPUT_KEYBOARD=y -CONFIG_INPUT_MOUSE=y -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set - -# -# Macintosh device drivers -# # # Character devices # +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -500,6 +516,7 @@ # CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=1 # CONFIG_SERIAL_8250_EXTENDED is not set # @@ -508,26 +525,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -553,122 +552,30 @@ # CONFIG_AGP is not set # CONFIG_DRM is not set # CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set # -# Multimedia devices -# -CONFIG_VIDEO_DEV=m - -# -# Video For Linux +# I2C support # -CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C is not set # -# Video Adapters +# Misc devices # -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_STRADIS is not set # -# Radio Adapters +# Multimedia devices # -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set +# CONFIG_VIDEO_DEV is not set # # Digital Video Broadcasting Devices # # CONFIG_DVB is not set -# CONFIG_VIDEO_BTCX is not set # -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -# CONFIG_FAT_FS is not set -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types +# Graphics support # -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y +# CONFIG_FB is not set # # Sound @@ -707,26 +614,20 @@ # USB Human Interface Devices (HID) # CONFIG_USB_HID=m -CONFIG_USB_HIDINPUT=y -# CONFIG_HID_FF is not set + +# +# Input core support is needed for USB HID input layer or HIDBP support +# # CONFIG_USB_HIDDEV is not set # # USB HID Boot Protocol drivers # -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_XPAD is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set -CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set # CONFIG_USB_HPUSBSCSI is not set @@ -734,14 +635,10 @@ # USB Multimedia devices # # CONFIG_USB_DABUSB is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -CONFIG_USB_SE401=m -# CONFIG_USB_STV680 is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# # # USB Network adaptors @@ -785,28 +682,126 @@ # # USB Miscellaneous drivers # +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set # CONFIG_USB_TIGL is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETSERVO is not set # CONFIG_USB_TEST is not set + +# +# USB Gadget Support +# # CONFIG_USB_GADGET is not set # -# Bluetooth support +# File systems # -# CONFIG_BT is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +# CONFIG_NLS is not set # # Library routines # # CONFIG_CRC32 is not set +# CONFIG_LIBCRC32C is not set # # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set -# CONFIG_KALLSYMS is not set # CONFIG_SERIAL_TEXT_DEBUG is not set # diff -Nru a/arch/ppc/configs/ocotea_defconfig b/arch/ppc/configs/ocotea_defconfig --- a/arch/ppc/configs/ocotea_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/ocotea_defconfig Tue May 18 23:38:08 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -23,14 +24,16 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set -# CONFIG_EMBEDDED is not set +CONFIG_EMBEDDED=y CONFIG_KALLSYMS=y CONFIG_FUTEX=y CONFIG_EPOLL=y CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -63,9 +66,9 @@ CONFIG_OCOTEA=y CONFIG_440GX=y CONFIG_440A=y -CONFIG_PIN_TLB=y CONFIG_BOOKE=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_IBM_EMAC4=y # CONFIG_PM is not set CONFIG_NOT_COHERENT_CACHE=y @@ -90,12 +93,6 @@ CONFIG_PCI_DOMAINS=y # CONFIG_PCI_LEGACY_PROC is not set # CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -112,8 +109,13 @@ CONFIG_BOOT_LOAD=0x01000000 # +# Device Drivers +# + +# # Generic Driver Options # +# CONFIG_DEBUG_DRIVER is not set # # Memory Technology Devices (MTD) @@ -121,29 +123,29 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set # CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set # CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set @@ -154,11 +156,17 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # +# CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -168,6 +176,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -190,7 +202,6 @@ # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -219,7 +230,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -289,6 +299,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +CONFIG_IBM_EMAC=y +# CONFIG_IBM_EMAC_ERRMSG is not set +CONFIG_IBM_EMAC_RXB=128 +CONFIG_IBM_EMAC_TXB=128 +CONFIG_IBM_EMAC_FGAP=8 +CONFIG_IBM_EMAC_SKBRES=0 # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_PPP is not set @@ -305,6 +321,7 @@ # CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -325,23 +342,18 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set - -# -# Graphics support -# -# CONFIG_FB is not set +# CONFIG_ISDN is not set # -# Console display driver support +# Telephony Support # -CONFIG_VGA_CONSOLE=y -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y +# CONFIG_PHONE is not set # # Input device support @@ -381,15 +393,9 @@ # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# - -# # Character devices # -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -411,30 +417,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Algorithms -# - -# -# I2C Hardware Bus support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -461,6 +445,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -471,6 +464,26 @@ # CONFIG_DVB is not set # +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # # CONFIG_EXT2_FS is not set @@ -503,7 +516,6 @@ CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_TMPFS is not set # CONFIG_HUGETLB_PAGE is not set @@ -515,6 +527,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -531,12 +544,13 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -551,15 +565,9 @@ CONFIG_MSDOS_PARTITION=y # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set +# CONFIG_NLS is not set # # Library routines diff -Nru a/arch/ppc/configs/pmac_defconfig b/arch/ppc/configs/pmac_defconfig --- a/arch/ppc/configs/pmac_defconfig Tue May 18 23:38:09 2004 +++ b/arch/ppc/configs/pmac_defconfig Tue May 18 23:38:09 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -20,9 +21,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set @@ -32,6 +36,8 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -119,23 +125,18 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y CONFIG_PCI_NAMES=y -CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # CONFIG_PCMCIA=m +# CONFIG_PCMCIA_DEBUG is not set CONFIG_YENTA=m CONFIG_CARDBUS=y CONFIG_I82092=m CONFIG_TCIC=m # -# Parallel port support -# -# CONFIG_PARPORT is not set - -# # Advanced setup # CONFIG_ADVANCED_OPTIONS=y @@ -149,6 +150,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # # CONFIG_FW_LOADER is not set @@ -159,13 +164,18 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set @@ -173,17 +183,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -206,6 +212,7 @@ # # IDE chipset support/bugfixes # +# CONFIG_IDE_GENERIC is not set CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y # CONFIG_BLK_DEV_OFFBOARD is not set @@ -213,7 +220,6 @@ # CONFIG_BLK_DEV_OPTI621 is not set CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_IDE_TCQ is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set CONFIG_IDEDMA_PCI_AUTO=y # CONFIG_IDEDMA_ONLYDISK is not set @@ -274,6 +280,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -282,7 +294,6 @@ CONFIG_SCSI_AIC7XXX=m CONFIG_AIC7XXX_CMDS_PER_DEVICE=253 CONFIG_AIC7XXX_RESET_DELAY_MS=15000 -# CONFIG_AIC7XXX_PROBE_EISA_VL is not set # CONFIG_AIC7XXX_BUILD_FIRMWARE is not set CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 @@ -291,6 +302,7 @@ # CONFIG_SCSI_AIC79XX is not set CONFIG_SCSI_ADVANSYS=m # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -305,10 +317,19 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set CONFIG_SCSI_MESH=y @@ -323,6 +344,12 @@ # CONFIG_PCMCIA_FDOMAIN is not set # CONFIG_PCMCIA_NINJA_SCSI is not set # CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # # Fusion MPT device support @@ -330,7 +357,7 @@ # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # CONFIG_IEEE1394=m @@ -339,14 +366,13 @@ # # CONFIG_IEEE1394_VERBOSEDEBUG is not set # CONFIG_IEEE1394_OUI_DB is not set +CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y +CONFIG_IEEE1394_CONFIG_ROM_IP1394=y # # Device Drivers # - -# -# Texas Instruments PCILynx requires I2C bit-banging -# +# CONFIG_IEEE1394_PCILYNX is not set CONFIG_IEEE1394_OHCI1394=m # @@ -366,6 +392,24 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_PMU=y +CONFIG_PMAC_PBOOK=y +CONFIG_PMAC_APM_EMU=y +CONFIG_PMAC_BACKLIGHT=y +# CONFIG_MAC_FLOPPY is not set +CONFIG_MAC_SERIAL=y +CONFIG_ADB_MACIO=y +CONFIG_INPUT_ADBHID=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_THERM_WINDTUNNEL=m +CONFIG_THERM_ADT746X=m +# CONFIG_ANSLCD is not set + +# # Networking support # CONFIG_NET=y @@ -386,7 +430,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -397,8 +440,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -453,14 +494,17 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m # CONFIG_IP_NF_COMPAT_IPFWADM is not set +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -481,18 +525,69 @@ # Network testing # # CONFIG_NET_PKTGEN is not set -CONFIG_NETDEVICES=y +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m # -# ARCnet devices +# IrDA protocols # -# CONFIG_ARCNET is not set +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_VLSI_FIR is not set +# CONFIG_BT is not set +CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set # +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y @@ -515,6 +610,7 @@ # CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set # CONFIG_E100 is not set @@ -539,7 +635,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -547,17 +642,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=y -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=y -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=y -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set # # Wireless LAN (non-hamradio) @@ -585,28 +675,20 @@ # CONFIG_PLX_HERMES is not set # CONFIG_TMD_HERMES is not set # CONFIG_PCI_HERMES is not set +# CONFIG_ATMEL is not set # # Wireless 802.11b Pcmcia/Cardbus cards support # CONFIG_PCMCIA_HERMES=m # CONFIG_AIRO_CS is not set -# CONFIG_PCMCIA_ATMEL is not set # CONFIG_PCMCIA_WL3501 is not set -CONFIG_NET_WIRELESS=y # -# Token Ring devices +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support # -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set +# CONFIG_PRISM54 is not set +CONFIG_NET_WIRELESS=y # # PCMCIA network device support @@ -622,123 +704,34 @@ # CONFIG_PCMCIA_AXNET is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -# CONFIG_IRDA_ULTRA is not set - -# -# IrDA options -# -CONFIG_IRDA_CACHE_LAST_LSAP=y -CONFIG_IRDA_FAST_RR=y -# CONFIG_IRDA_DEBUG is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m - -# -# Dongle support -# -# CONFIG_DONGLE is not set - -# -# Old SIR device drivers -# -# CONFIG_IRPORT_SIR is not set - -# -# Old Serial dongle support -# - -# -# FIR device drivers -# -# CONFIG_USB_IRDA is not set -# CONFIG_TOSHIBA_FIR is not set -# CONFIG_VLSI_FIR is not set - -# -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=y +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set - -# -# Graphics support -# -CONFIG_FB=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_OF=y -CONFIG_FB_CONTROL=y -CONFIG_FB_PLATINUM=y -CONFIG_FB_VALKYRIE=y -CONFIG_FB_CT65550=y -CONFIG_FB_IMSTT=y -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -CONFIG_FB_MATROX_MYSTIQUE=y -# CONFIG_FB_MATROX_G450 is not set -CONFIG_FB_MATROX_G100A=y -CONFIG_FB_MATROX_G100=y -# CONFIG_FB_MATROX_MULTIHEAD is not set -CONFIG_FB_RADEON=y -CONFIG_FB_ATY128=y -CONFIG_FB_ATY=y -CONFIG_FB_ATY_CT=y -CONFIG_FB_ATY_GX=y -# CONFIG_FB_ATY_XL_INIT is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -CONFIG_FB_3DFX=y -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_VIRTUAL is not set +# CONFIG_ISDN is not set # -# Console display driver support +# Telephony Support # -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_PHONE is not set # # Input device support @@ -774,32 +767,18 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set CONFIG_INPUT_MOUSE=y # CONFIG_MOUSE_PS2 is not set # CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# -CONFIG_ADB_CUDA=y -CONFIG_ADB_PMU=y -CONFIG_PMAC_PBOOK=y -CONFIG_PMAC_APM_EMU=y -CONFIG_PMAC_BACKLIGHT=y -# CONFIG_MAC_FLOPPY is not set -CONFIG_MAC_SERIAL=y -CONFIG_ADB=y -CONFIG_ADB_MACIO=y -CONFIG_INPUT_ADBHID=y -CONFIG_MAC_EMUMOUSEBTN=y -# CONFIG_ANSLCD is not set - -# # Character devices # CONFIG_VT=y @@ -822,83 +801,112 @@ CONFIG_SERIAL_PMACZILOG=y # CONFIG_SERIAL_PMACZILOG_CONSOLE is not set CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_NVRAM=y +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_RAW_DRIVER is not set # # I2C support # -CONFIG_I2C=m +CONFIG_I2C=y CONFIG_I2C_CHARDEV=m # # I2C Algorithms # -# CONFIG_I2C_ALGOBIT is not set +CONFIG_I2C_ALGOBIT=y # CONFIG_I2C_ALGOPCF is not set # # I2C Hardware Bus support # # CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_HYDRA is not set # CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_ISA is not set CONFIG_I2C_KEYWEST=m # CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set # CONFIG_I2C_SIS5595 is not set # CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # # CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set # CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice +# Other I2C Chip support # -CONFIG_BUSMOUSE=y -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -CONFIG_NVRAM=y -CONFIG_GEN_RTC=y -# CONFIG_GEN_RTC_X is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# PCMCIA character devices +# Misc devices # -# CONFIG_SYNCLINK_CS is not set -# CONFIG_RAW_DRIVER is not set # # Multimedia devices @@ -911,157 +919,64 @@ # CONFIG_DVB is not set # -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -CONFIG_EXT3_FS=y -CONFIG_EXT3_FS_XATTR=y -# CONFIG_EXT3_FS_POSIX_ACL is not set -# CONFIG_EXT3_FS_SECURITY is not set -CONFIG_JBD=y -# CONFIG_JBD_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_DEVFS_FS=y -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -CONFIG_HFS_FS=m -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems +# Graphics support # -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_NFS_V4 is not set -CONFIG_NFSD=y -# CONFIG_NFSD_V3 is not set -# CONFIG_NFSD_TCP is not set -CONFIG_LOCKD=y -CONFIG_EXPORTFS=y -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set +CONFIG_FB=y +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +CONFIG_FB_CONTROL=y +CONFIG_FB_PLATINUM=y +CONFIG_FB_VALKYRIE=y +CONFIG_FB_CT65550=y +CONFIG_FB_IMSTT=y +# CONFIG_FB_S3TRIO is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +# CONFIG_FB_MATROX_G450 is not set +CONFIG_FB_MATROX_G100A=y +CONFIG_FB_MATROX_G100=y +# CONFIG_FB_MATROX_I2C is not set +# CONFIG_FB_MATROX_MULTIHEAD is not set +# CONFIG_FB_RADEON_OLD is not set +CONFIG_FB_RADEON=y +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GX=y +# CONFIG_FB_ATY_XL_INIT is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set # -# Partition Types +# Console display driver support # -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -CONFIG_SMB_NLS=y -CONFIG_NLS=y +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y # -# Native Language Support +# Logo configuration # -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y # # Sound @@ -1074,6 +989,9 @@ # Advanced Linux Sound Architecture # CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_RAWMIDI=m CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_OSSEMUL=y @@ -1096,11 +1014,17 @@ # PCI devices # # CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set # CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set # CONFIG_SND_CS46XX is not set # CONFIG_SND_CS4281 is not set # CONFIG_SND_EMU10K1 is not set # CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set # CONFIG_SND_NM256 is not set # CONFIG_SND_RME32 is not set # CONFIG_SND_RME96 is not set @@ -1119,6 +1043,7 @@ # CONFIG_SND_ICE1712 is not set # CONFIG_SND_ICE1724 is not set # CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set # CONFIG_SND_SONICVIBES is not set # CONFIG_SND_VIA82XX is not set # CONFIG_SND_VX222 is not set @@ -1136,8 +1061,6 @@ # # PCMCIA devices # -# CONFIG_SND_VXPOCKET is not set -# CONFIG_SND_VXP440 is not set # # Open Sound System @@ -1185,13 +1108,14 @@ # CONFIG_USB_WACOM is not set # CONFIG_USB_KBTAB is not set # CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set # CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set -CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set # CONFIG_USB_HPUSBSCSI is not set @@ -1246,17 +1170,180 @@ # # USB Miscellaneous drivers # +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set # CONFIG_USB_TIGL is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set # CONFIG_USB_TEST is not set + +# +# USB Gadget Support +# # CONFIG_USB_GADGET is not set # +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +CONFIG_DEVFS_FS=y +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +# CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_LOCKD=y +CONFIG_EXPORTFS=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/ppc/configs/power3_defconfig b/arch/ppc/configs/power3_defconfig --- a/arch/ppc/configs/power3_defconfig Tue May 18 23:38:06 2004 +++ b/arch/ppc/configs/power3_defconfig Tue May 18 23:38:06 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -19,9 +20,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_HOTPLUG is not set CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set @@ -31,6 +35,8 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -41,6 +47,7 @@ CONFIG_OBSOLETE_MODPARM=y # CONFIG_MODVERSIONS is not set CONFIG_KMOD=y +CONFIG_STOP_MACHINE=y # # Processor @@ -88,6 +95,7 @@ CONFIG_SMP=y # CONFIG_IRQ_ALL_CPUS is not set CONFIG_NR_CPUS=32 +# CONFIG_PREEMPT is not set CONFIG_HIGHMEM=y CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y @@ -106,19 +114,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y CONFIG_PCI_NAMES=y -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -CONFIG_PARPORT=m -CONFIG_PARPORT_PC=m -CONFIG_PARPORT_PC_CML1=m -# CONFIG_PARPORT_SERIAL is not set -CONFIG_PARPORT_PC_FIFO=y -# CONFIG_PARPORT_PC_SUPERIO is not set -# CONFIG_PARPORT_OTHER is not set -# CONFIG_PARPORT_1284 is not set # # Advanced setup @@ -135,6 +130,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -144,6 +143,18 @@ # CONFIG_MTD is not set # +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_CML1=m +# CONFIG_PARPORT_SERIAL is not set +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# # Plug and Play support # # CONFIG_PNP is not set @@ -161,24 +172,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y # -# Multi-device support (RAID and LVM) -# -CONFIG_MD=y -CONFIG_BLK_DEV_MD=y -CONFIG_MD_LINEAR=y -CONFIG_MD_RAID0=y -CONFIG_MD_RAID1=y -CONFIG_MD_RAID5=y -# CONFIG_MD_MULTIPATH is not set -CONFIG_BLK_DEV_DM=y - -# # ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set @@ -208,6 +208,12 @@ CONFIG_SCSI_LOGGING=y # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -222,6 +228,7 @@ # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -242,14 +249,23 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set @@ -258,12 +274,31 @@ # CONFIG_SCSI_MAC53C94 is not set # +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_LINEAR=y +CONFIG_MD_RAID0=y +CONFIG_MD_RAID1=y +CONFIG_MD_RAID5=y +CONFIG_MD_RAID6=y +# CONFIG_MD_MULTIPATH is not set +CONFIG_BLK_DEV_DM=y +CONFIG_DM_CRYPT=y + +# # Fusion MPT device support # # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -273,6 +308,15 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# +# CONFIG_ADB is not set +# CONFIG_ADB_CUDA is not set +# CONFIG_ADB_PMU is not set +# CONFIG_MAC_FLOPPY is not set +# CONFIG_MAC_SERIAL is not set + +# # Networking support # CONFIG_NET=y @@ -293,23 +337,21 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -330,16 +372,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -371,10 +418,12 @@ # CONFIG_AC3200 is not set # CONFIG_APRICOT is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_CS89x0 is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set CONFIG_E100=y +# CONFIG_E100_NAPI is not set # CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set @@ -398,7 +447,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -406,107 +454,41 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -CONFIG_FB=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_OF=y -# CONFIG_FB_CONTROL is not set -# CONFIG_FB_PLATINUM is not set -# CONFIG_FB_VALKYRIE is not set -# CONFIG_FB_CT65550 is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -CONFIG_FB_MATROX_MYSTIQUE=y -# CONFIG_FB_MATROX_G450 is not set -CONFIG_FB_MATROX_G100A=y -CONFIG_FB_MATROX_G100=y -CONFIG_FB_MATROX_I2C=y -# CONFIG_FB_MATROX_MAVEN is not set -CONFIG_FB_MATROX_MULTIHEAD=y -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y - -# -# Old CD-ROM drivers (not SCSI, not IDE) -# -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support @@ -549,31 +531,22 @@ CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_PS2_SYNAPTICS is not set # CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_MISC=y -CONFIG_INPUT_PCSPKR=y CONFIG_INPUT_UINPUT=y # -# Macintosh device drivers -# -# CONFIG_ADB_CUDA is not set -# CONFIG_ADB_PMU is not set -# CONFIG_MAC_FLOPPY is not set -# CONFIG_MAC_SERIAL is not set -# CONFIG_ADB is not set - -# # Character devices # CONFIG_VT=y @@ -596,11 +569,36 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_PMACZILOG is not set CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=2048 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 CONFIG_PRINTER=m # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set # CONFIG_TIPAR is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_NVRAM=y +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set # # I2C support @@ -618,14 +616,18 @@ # I2C Hardware Bus support # # CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_HYDRA is not set # CONFIG_I2C_I801 is not set # CONFIG_I2C_I810 is not set # CONFIG_I2C_ISA is not set # CONFIG_I2C_KEYWEST is not set # CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_PROSAVAGE is not set # CONFIG_I2C_SAVAGE4 is not set @@ -638,56 +640,226 @@ # CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # # CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set # CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice +# Other I2C Chip support # -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# IPMI +# Misc devices # -# CONFIG_IPMI_HANDLER is not set # -# Watchdog Cards +# Multimedia devices # -# CONFIG_WATCHDOG is not set -CONFIG_NVRAM=y -CONFIG_GEN_RTC=y -# CONFIG_GEN_RTC_X is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set +# CONFIG_VIDEO_DEV is not set # -# Ftape, the floppy tape device driver +# Digital Video Broadcasting Devices # -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set +# CONFIG_DVB is not set # -# Multimedia devices +# Graphics support # -# CONFIG_VIDEO_DEV is not set +CONFIG_FB=y +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +# CONFIG_FB_CONTROL is not set +# CONFIG_FB_PLATINUM is not set +# CONFIG_FB_VALKYRIE is not set +# CONFIG_FB_CT65550 is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S3TRIO is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +# CONFIG_FB_MATROX_G450 is not set +CONFIG_FB_MATROX_G100A=y +CONFIG_FB_MATROX_G100=y +CONFIG_FB_MATROX_I2C=y +# CONFIG_FB_MATROX_MAVEN is not set +CONFIG_FB_MATROX_MULTIHEAD=y +# CONFIG_FB_RADEON_OLD is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set # -# Digital Video Broadcasting Devices +# Console display driver support # -# CONFIG_DVB is not set +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_DMASOUND_PMAC is not set + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_SEQUENCER_OSS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_DUMMY=m +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ISA devices +# +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_CS4231 is not set +CONFIG_SND_CS4232=m +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_WAVEFRONT is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_SGALAXY is not set +# CONFIG_SND_SSCAPE is not set + +# +# PCI devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +CONFIG_SND_CS46XX=m +# CONFIG_SND_CS46XX_NEW_DSP is not set +CONFIG_SND_CS4281=m +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VX222 is not set + +# +# ALSA PowerMac devices +# +# CONFIG_SND_POWERMAC is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set # # File systems @@ -726,8 +898,8 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set @@ -739,6 +911,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -755,18 +928,18 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set CONFIG_NFSD=y # CONFIG_NFSD_V3 is not set # CONFIG_NFSD_TCP is not set CONFIG_LOCKD=y CONFIG_EXPORTFS=y CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -774,11 +947,11 @@ # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y -CONFIG_NLS=y # # Native Language Support # +CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y # CONFIG_NLS_CODEPAGE_737 is not set @@ -819,111 +992,12 @@ # CONFIG_NLS_UTF8 is not set # -# Sound -# -CONFIG_SOUND=y -# CONFIG_DMASOUND_PMAC is not set - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_SEQUENCER=m -CONFIG_SND_SEQ_DUMMY=m -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_SEQUENCER_OSS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -CONFIG_SND_DUMMY=m -# CONFIG_SND_VIRMIDI is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ISA devices -# -# CONFIG_SND_AD1848 is not set -# CONFIG_SND_CS4231 is not set -CONFIG_SND_CS4232=m -# CONFIG_SND_CS4236 is not set -# CONFIG_SND_ES1688 is not set -# CONFIG_SND_ES18XX is not set -# CONFIG_SND_GUSCLASSIC is not set -# CONFIG_SND_GUSEXTREME is not set -# CONFIG_SND_GUSMAX is not set -# CONFIG_SND_INTERWAVE is not set -# CONFIG_SND_INTERWAVE_STB is not set -# CONFIG_SND_OPTI92X_AD1848 is not set -# CONFIG_SND_OPTI92X_CS4231 is not set -# CONFIG_SND_OPTI93X is not set -# CONFIG_SND_SB8 is not set -# CONFIG_SND_SB16 is not set -# CONFIG_SND_SBAWE is not set -# CONFIG_SND_WAVEFRONT is not set -# CONFIG_SND_CMI8330 is not set -# CONFIG_SND_OPL3SA2 is not set -# CONFIG_SND_SGALAXY is not set -# CONFIG_SND_SSCAPE is not set - -# -# PCI devices -# -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_AZT3328 is not set -CONFIG_SND_CS46XX=m -# CONFIG_SND_CS46XX_NEW_DSP is not set -CONFIG_SND_CS4281=m -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_YMFPCI is not set -# CONFIG_SND_ALS4000 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VX222 is not set - -# -# ALSA PowerMac devices -# -# CONFIG_SND_POWERMAC is not set - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set - -# -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m # # Kernel hacking @@ -939,4 +1013,23 @@ # # Cryptographic options # -# CONFIG_CRYPTO is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_TEST is not set diff -Nru a/arch/ppc/configs/redwood5_defconfig b/arch/ppc/configs/redwood5_defconfig --- a/arch/ppc/configs/redwood5_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/redwood5_defconfig Tue May 18 23:38:08 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -23,6 +24,7 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y # CONFIG_KALLSYMS is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -59,23 +62,19 @@ # IBM 4xx options # # CONFIG_ASH is not set -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set # CONFIG_CPCI405 is not set # CONFIG_EP405 is not set # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set CONFIG_REDWOOD_5=y # CONFIG_REDWOOD_6 is not set # CONFIG_SYCAMORE is not set -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set CONFIG_IBM405_ERR77=y CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_STB03xxx=y CONFIG_IBM_OPENBIOS=y -# CONFIG_405_DMA is not set # CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set @@ -92,19 +91,14 @@ CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # # Bus options # # CONFIG_PCI is not set # CONFIG_PCI_DOMAINS is not set -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -121,6 +115,10 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -130,13 +128,18 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set @@ -146,11 +149,6 @@ # CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -171,6 +169,7 @@ # # IDE chipset support/bugfixes # +CONFIG_IDE_GENERIC=y # CONFIG_BLK_DEV_IDEDMA is not set # CONFIG_IDEDMA_AUTO is not set # CONFIG_BLK_DEV_HD is not set @@ -181,14 +180,28 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# # I2O device support # # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -211,7 +224,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -224,7 +236,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -268,6 +279,7 @@ # # Ethernet (10000 Mbit) # +# CONFIG_IBM_EMAC is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -280,6 +292,7 @@ # Token Ring devices # # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -300,16 +313,18 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -# CONFIG_FB is not set +# CONFIG_PHONE is not set # # Input device support @@ -345,10 +360,6 @@ # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# - -# # Character devices # # CONFIG_VT is not set @@ -368,43 +379,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_UNIX98_PTYS is not set - -# -# I2C support -# -CONFIG_I2C=y -# CONFIG_I2C_CHARDEV is not set - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -CONFIG_I2C_IBM_IIC=y - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_W83781D is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -432,6 +408,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -442,6 +427,25 @@ # CONFIG_DVB is not set # +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -485,6 +489,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -501,12 +506,13 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -521,18 +527,13 @@ CONFIG_MSDOS_PARTITION=y # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set +# CONFIG_NLS is not set # # IBM 40x options # - -# -# USB support -# -# CONFIG_USB_GADGET is not set # # Library routines diff -Nru a/arch/ppc/configs/redwood6_defconfig b/arch/ppc/configs/redwood6_defconfig --- a/arch/ppc/configs/redwood6_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/redwood6_defconfig Tue May 18 23:38:08 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -23,6 +24,7 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y # CONFIG_KALLSYMS is not set @@ -31,6 +33,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -58,23 +61,19 @@ # IBM 4xx options # # CONFIG_ASH is not set -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set # CONFIG_CPCI405 is not set # CONFIG_EP405 is not set # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set # CONFIG_REDWOOD_5 is not set CONFIG_REDWOOD_6=y # CONFIG_SYCAMORE is not set -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set CONFIG_IBM405_ERR77=y CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_STB03xxx=y CONFIG_IBM_OPENBIOS=y -# CONFIG_405_DMA is not set # CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set @@ -91,19 +90,14 @@ CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # # Bus options # # CONFIG_PCI is not set # CONFIG_PCI_DOMAINS is not set -# CONFIG_HOTPLUG is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set # # Advanced setup @@ -120,6 +114,10 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# # Generic Driver Options # @@ -129,13 +127,18 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices # +# CONFIG_BLK_DEV_FD is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set @@ -145,11 +148,6 @@ # CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set @@ -160,14 +158,28 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# # I2O device support # # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -190,7 +202,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -203,7 +214,6 @@ # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set @@ -247,6 +257,7 @@ # # Ethernet (10000 Mbit) # +# CONFIG_IBM_EMAC is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -259,6 +270,7 @@ # Token Ring devices # # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -279,16 +291,18 @@ # Bluetooth support # # CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -# CONFIG_FB is not set +# CONFIG_PHONE is not set # # Input device support @@ -324,10 +338,6 @@ # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# - -# # Character devices # # CONFIG_VT is not set @@ -347,30 +357,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Algorithms -# - -# -# I2C Hardware Bus support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -397,6 +385,15 @@ # CONFIG_RAW_DRIVER is not set # +# I2C support +# +# CONFIG_I2C is not set + +# +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -407,6 +404,25 @@ # CONFIG_DVB is not set # +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -440,7 +456,6 @@ CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set @@ -452,6 +467,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -468,12 +484,13 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -488,18 +505,13 @@ CONFIG_MSDOS_PARTITION=y # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set +# CONFIG_NLS is not set # # IBM 40x options # - -# -# USB support -# -# CONFIG_USB_GADGET is not set # # Library routines diff -Nru a/arch/ppc/configs/sandpoint_defconfig b/arch/ppc/configs/sandpoint_defconfig --- a/arch/ppc/configs/sandpoint_defconfig Tue May 18 23:38:07 2004 +++ b/arch/ppc/configs/sandpoint_defconfig Tue May 18 23:38:07 2004 @@ -4,23 +4,39 @@ CONFIG_MMU=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_HAVE_DEC_LOCK=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options # CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y # # General setup # -CONFIG_SWAP=y +# CONFIG_SWAP is not set CONFIG_SYSVIPC=y +# CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y +# CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y +CONFIG_KALLSYMS=y CONFIG_FUTEX=y -# CONFIG_EPOLL is not set +CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -33,24 +49,25 @@ CONFIG_KMOD=y # -# Platform support +# Processor # -CONFIG_PPC=y -CONFIG_PPC32=y CONFIG_6xx=y # CONFIG_40x is not set +# CONFIG_44x is not set # CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set # CONFIG_8xx is not set +CONFIG_ALTIVEC=y +# CONFIG_TAU is not set +# CONFIG_CPU_FREQ is not set +CONFIG_PPC_STD_MMU=y # -# IBM 4xx options +# Platform options # -# CONFIG_8260 is not set -CONFIG_GENERIC_ISA_DMA=y -CONFIG_PPC_STD_MMU=y # CONFIG_PPC_MULTIPLATFORM is not set # CONFIG_APUS is not set -# CONFIG_WILLOW_2 is not set +# CONFIG_WILLOW is not set # CONFIG_PCORE is not set # CONFIG_POWERPMC250 is not set # CONFIG_EV64260 is not set @@ -66,28 +83,31 @@ # CONFIG_K2 is not set # CONFIG_PAL4 is not set # CONFIG_GEMINI is not set +# CONFIG_EST8260 is not set +# CONFIG_SBS8260 is not set +# CONFIG_RPX6 is not set +# CONFIG_TQM8260 is not set CONFIG_PPC_GEN550=y CONFIG_EPIC_SERIAL_MODE=y +CONFIG_MPC10X_BRIDGE=y # CONFIG_MPC10X_STORE_GATHERING is not set # CONFIG_SMP is not set # CONFIG_PREEMPT is not set -CONFIG_ALTIVEC=y -# CONFIG_TAU is not set -# CONFIG_CPU_FREQ is not set +# CONFIG_HIGHMEM is not set +CONFIG_KERNEL_ELF=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # -# General setup +# Bus options # -# CONFIG_HIGHMEM is not set +CONFIG_GENERIC_ISA_DMA=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y -CONFIG_KCORE_ELF=y -CONFIG_KERNEL_ELF=y -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_MISC=m # CONFIG_PCI_LEGACY_PROC is not set # CONFIG_PCI_NAMES is not set -CONFIG_HOTPLUG=y # # PCMCIA/CardBus support @@ -95,13 +115,6 @@ # CONFIG_PCMCIA is not set # -# Parallel port support -# -# CONFIG_PARPORT is not set -CONFIG_PPC601_SYNC_FIX=y -# CONFIG_CMDLINE_BOOL is not set - -# # Advanced setup # # CONFIG_ADVANCED_OPTIONS is not set @@ -116,6 +129,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # # CONFIG_FW_LOADER is not set @@ -126,9 +143,13 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices @@ -139,34 +160,28 @@ # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set +# CONFIG_LBD is not set # # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# CONFIG_BLK_DEV_IDE=y # # Please see Documentation/ide.txt for help/info on IDE drives # -# CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_IDEDISK=y # CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_IDEDISK_STROKE is not set CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_IDE_TASK_IOCTL is not set CONFIG_IDE_TASKFILE_IO=y @@ -174,7 +189,11 @@ # # IDE chipset support/bugfixes # +CONFIG_IDE_GENERIC=y # CONFIG_BLK_DEV_IDEPCI is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_HD is not set # # SCSI device support @@ -182,11 +201,16 @@ # CONFIG_SCSI is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -196,6 +220,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -206,38 +234,37 @@ CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set # CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set +# CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set # CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_NET_DIVERT is not set @@ -255,17 +282,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -CONFIG_DUMMY=m -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -287,6 +318,7 @@ CONFIG_TULIP=y # CONFIG_TULIP_MWI is not set # CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_NAPI is not set # CONFIG_DE4X5 is not set # CONFIG_WINBOND_840 is not set # CONFIG_DM9102 is not set @@ -296,15 +328,20 @@ # CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_B44 is not set -# CONFIG_TC35815 is not set +# CONFIG_FORCEDETH is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set CONFIG_E100=y +# CONFIG_E100_NAPI is not set # CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set # CONFIG_8139CP is not set -# CONFIG_8139TOO is not set +CONFIG_8139TOO=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set # CONFIG_SIS900 is not set # CONFIG_EPIC100 is not set # CONFIG_SUNDANCE is not set @@ -328,6 +365,22 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_PPP=m @@ -339,139 +392,45 @@ CONFIG_PPP_BSDCOMP=m # CONFIG_PPPOE is not set # CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices (depends on LLC=y) -# # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # -# Graphics support +# Telephony Support # -CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_CT65550 is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -# CONFIG_FB_MATROX_MYSTIQUE is not set -# CONFIG_FB_MATROX_G450 is not set -# CONFIG_FB_MATROX_G100A is not set -# CONFIG_FB_MATROX_MULTIHEAD is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -# CONFIG_LOGO is not set +# CONFIG_PHONE is not set # # Input device support # -CONFIG_INPUT=y +# CONFIG_INPUT is not set # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set -CONFIG_INPUT_EVDEV=m -# CONFIG_INPUT_EVBUG is not set # # Input I/O drivers # # CONFIG_GAMEPORT is not set CONFIG_SOUND_GAMEPORT=y -CONFIG_SERIO=y -CONFIG_SERIO_I8042=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_CT82C710 is not set -# CONFIG_SERIO_PCIPS2 is not set +# CONFIG_SERIO is not set +# CONFIG_SERIO_I8042 is not set # # Input Device Drivers # -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_PCSPKR is not set -CONFIG_INPUT_UINPUT=m - -# -# Macintosh device drivers -# # # Character devices # -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -479,6 +438,7 @@ # CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 # CONFIG_SERIAL_8250_EXTENDED is not set # @@ -487,26 +447,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# I2C Hardware Sensors Mainboard support -# - -# -# I2C Hardware Sensors Chip support -# -# CONFIG_I2C_SENSOR is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -531,135 +473,31 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -CONFIG_RAW_DRIVER=m -# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_RAW_DRIVER is not set # -# Multimedia devices -# -CONFIG_VIDEO_DEV=m - -# -# Video For Linux +# I2C support # -CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C is not set # -# Video Adapters +# Misc devices # -# CONFIG_VIDEO_PMS is not set -# CONFIG_VIDEO_CPIA is not set -# CONFIG_VIDEO_STRADIS is not set # -# Radio Adapters +# Multimedia devices # -# CONFIG_RADIO_GEMTEK_PCI is not set -# CONFIG_RADIO_MAXIRADIO is not set -# CONFIG_RADIO_MAESTRO is not set +# CONFIG_VIDEO_DEV is not set # # Digital Video Broadcasting Devices # # CONFIG_DVB is not set -# CONFIG_VIDEO_BTCX is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set # -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -# CONFIG_FAT_FS is not set -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -# CONFIG_EXPORTFS is not set -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types +# Graphics support # -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set +# CONFIG_FB is not set # # Sound @@ -692,47 +530,38 @@ # CONFIG_USB_BLUETOOTH_TTY is not set CONFIG_USB_ACM=m # CONFIG_USB_PRINTER is not set +# CONFIG_USB_STORAGE is not set # -# SCSI support is needed for USB Storage +# USB Human Interface Devices (HID) # +# CONFIG_USB_HID is not set # -# USB Human Interface Devices (HID) +# Input core support is needed for USB HID input layer or HIDBP support +# + +# +# USB HID Boot Protocol drivers # -CONFIG_USB_HID=y -CONFIG_USB_HIDINPUT=y -# CONFIG_HID_FF is not set -CONFIG_USB_HIDDEV=y -# CONFIG_USB_AIPTEK is not set -# CONFIG_USB_WACOM is not set -# CONFIG_USB_KBTAB is not set -# CONFIG_USB_POWERMATE is not set -# CONFIG_USB_XPAD is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set -CONFIG_USB_SCANNER=m # # USB Multimedia devices # # CONFIG_USB_DABUSB is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -CONFIG_USB_SE401=m -# CONFIG_USB_STV680 is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# # # USB Network adaptors # -# CONFIG_USB_AX8817X is not set # CONFIG_USB_CATC is not set # CONFIG_USB_KAWETH is not set # CONFIG_USB_PEGASUS is not set @@ -772,22 +601,123 @@ # # USB Miscellaneous drivers # +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set # CONFIG_USB_TIGL is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETSERVO is not set # CONFIG_USB_TEST is not set + +# +# USB Gadget Support +# # CONFIG_USB_GADGET is not set # -# Bluetooth support +# File systems # -# CONFIG_BT is not set +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_EXPORTFS is not set +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +# CONFIG_NLS is not set # # Library routines # -# CONFIG_CRC32 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=m CONFIG_ZLIB_DEFLATE=m @@ -795,7 +725,6 @@ # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set -# CONFIG_KALLSYMS is not set # CONFIG_SERIAL_TEXT_DEBUG is not set # diff -Nru a/arch/ppc/configs/spruce_defconfig b/arch/ppc/configs/spruce_defconfig --- a/arch/ppc/configs/spruce_defconfig Tue May 18 23:38:05 2004 +++ b/arch/ppc/configs/spruce_defconfig Tue May 18 23:38:05 2004 @@ -21,9 +21,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y CONFIG_KALLSYMS=y @@ -32,6 +35,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -102,7 +106,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y # CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set # # Advanced setup @@ -150,8 +153,8 @@ # CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set # CONFIG_BLK_DEV_RAM is not set -# CONFIG_BLK_DEV_INITRD is not set # CONFIG_LBD is not set # @@ -174,7 +177,7 @@ # # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -210,23 +213,21 @@ # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -247,23 +248,27 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y CONFIG_MII=y -CONFIG_CRC32=y # CONFIG_OAKNET is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set @@ -304,7 +309,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -312,47 +316,34 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set # -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set +# CONFIG_ISDN is not set # # Telephony Support @@ -403,12 +394,8 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 - -# -# Mice -# -# CONFIG_BUSMOUSE is not set +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_QIC02_TAPE is not set # @@ -441,6 +428,10 @@ # CONFIG_I2C is not set # +# Misc devices +# + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -510,8 +501,8 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y # CONFIG_HUGETLB_PAGE is not set @@ -523,6 +514,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -545,12 +537,11 @@ CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -567,6 +558,8 @@ # # Library routines # +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set # # Kernel hacking diff -Nru a/arch/ppc/configs/sycamore_defconfig b/arch/ppc/configs/sycamore_defconfig --- a/arch/ppc/configs/sycamore_defconfig Tue May 18 23:38:05 2004 +++ b/arch/ppc/configs/sycamore_defconfig Tue May 18 23:38:05 2004 @@ -4,11 +4,17 @@ CONFIG_MMU=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_HAVE_DEC_LOCK=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options # CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y +CONFIG_BROKEN_ON_SMP=y # # General setup @@ -18,9 +24,16 @@ # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_HOTPLUG is not set +# CONFIG_IKCONFIG is not set CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set CONFIG_FUTEX=y # CONFIG_EPOLL is not set +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -33,66 +46,60 @@ CONFIG_KMOD=y # -# Platform support +# Processor # -CONFIG_PPC=y -CONFIG_PPC32=y # CONFIG_6xx is not set CONFIG_40x=y +# CONFIG_44x is not set # CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set # CONFIG_8xx is not set +# CONFIG_MATH_EMULATION is not set +# CONFIG_CPU_FREQ is not set CONFIG_4xx=y # # IBM 4xx options # # CONFIG_ASH is not set -# CONFIG_BEECH is not set -# CONFIG_CEDAR is not set # CONFIG_CPCI405 is not set # CONFIG_EP405 is not set +# CONFIG_EVB405EP is not set # CONFIG_OAK is not set -# CONFIG_REDWOOD_4 is not set # CONFIG_REDWOOD_5 is not set # CONFIG_REDWOOD_6 is not set CONFIG_SYCAMORE=y -# CONFIG_TIVO is not set # CONFIG_WALNUT is not set -CONFIG_IBM405_ERR77=y -CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y +CONFIG_PPC_OCP=y CONFIG_BIOS_FIXUP=y +CONFIG_405GPR=y CONFIG_IBM_OPENBIOS=y -# CONFIG_405_DMA is not set -CONFIG_PM=y +# CONFIG_PM is not set CONFIG_UART0_TTYS0=y # CONFIG_UART0_TTYS1 is not set CONFIG_NOT_COHERENT_CACHE=y -# CONFIG_SMP is not set -# CONFIG_PREEMPT is not set -# CONFIG_MATH_EMULATION is not set -# CONFIG_CPU_FREQ is not set # -# General setup +# Platform options # -# CONFIG_HIGHMEM is not set -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y # CONFIG_PC_KEYBOARD is not set -CONFIG_KCORE_ELF=y -CONFIG_BINFMT_ELF=y +# CONFIG_SMP is not set +# CONFIG_PREEMPT is not set +# CONFIG_HIGHMEM is not set CONFIG_KERNEL_ELF=y +CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_PCI_LEGACY_PROC is not set -# CONFIG_PCI_NAMES is not set -# CONFIG_HOTPLUG is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # -# Parallel port support +# Bus options # -# CONFIG_PARPORT is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_LEGACY_PROC is not set +# CONFIG_PCI_NAMES is not set # # Advanced setup @@ -109,14 +116,26 @@ CONFIG_BOOT_LOAD=0x00400000 # +# Device Drivers +# + +# +# Generic Driver Options +# + +# # Memory Technology Devices (MTD) # # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # -# CONFIG_PNP is not set # # Block devices @@ -127,32 +146,36 @@ # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y +# CONFIG_LBD is not set # -# Multi-device support (RAID and LVM) +# ATA/ATAPI/MFM/RLL support # -# CONFIG_MD is not set +# CONFIG_IDE is not set # -# ATA/IDE/MFM/RLL support +# SCSI device support # -# CONFIG_IDE is not set +# CONFIG_SCSI is not set # -# SCSI support +# Multi-device support (RAID and LVM) # -# CONFIG_SCSI is not set +# CONFIG_MD is not set # # Fusion MPT device support # +# CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -162,6 +185,10 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# + +# # Networking support # CONFIG_NET=y @@ -171,7 +198,6 @@ # # CONFIG_PACKET is not set # CONFIG_NETLINK_DEV is not set -# CONFIG_NETFILTER is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y @@ -180,29 +206,29 @@ CONFIG_IP_PNP=y # CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_XFRM_USER is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_NETFILTER is not set # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set -# CONFIG_LLC is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_NET_DIVERT is not set @@ -230,7 +256,6 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -259,6 +284,7 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set +# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -266,6 +292,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set +CONFIG_IBM_EMAC=y +# CONFIG_IBM_EMAC_ERRMSG is not set +CONFIG_IBM_EMAC_RXB=64 +CONFIG_IBM_EMAC_TXB=8 +CONFIG_IBM_EMAC_FGAP=8 +CONFIG_IBM_EMAC_SKBRES=0 # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_PPP is not set @@ -277,10 +309,12 @@ # CONFIG_NET_RADIO is not set # -# Token Ring devices (depends on LLC=y) +# Token Ring devices # +# CONFIG_TR is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # Wan interfaces @@ -298,28 +332,38 @@ # CONFIG_IRDA is not set # -# ISDN subsystem +# Bluetooth support # -# CONFIG_ISDN_BOOL is not set +# CONFIG_BT is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set # -# Graphics support +# ISDN subsystem # -# CONFIG_FB is not set +# CONFIG_ISDN is not set # -# Old CD-ROM drivers (not SCSI, not IDE) +# Telephony Support # -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support # -# CONFIG_INPUT is not set +CONFIG_INPUT=y # # Userland interfaces # +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set # # Input I/O drivers @@ -330,18 +374,29 @@ CONFIG_SERIO_I8042=y CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set # # Input Device Drivers # - -# -# Macintosh device drivers -# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set # # Character devices # +# CONFIG_VT is not set # CONFIG_SERIAL_NONSTANDARD is not set # @@ -349,6 +404,7 @@ # CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=4 # CONFIG_SERIAL_8250_EXTENDED is not set # @@ -357,79 +413,132 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set # # I2C support # CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# # CONFIG_I2C_ALGOBIT is not set # CONFIG_I2C_ALGOPCF is not set -CONFIG_I2C_IBM_OCP_ALGO=y -CONFIG_I2C_IBM_OCP_ADAP=y -CONFIG_I2C_CHARDEV=y # -# I2C Hardware Sensors Mainboard support +# I2C Hardware Bus support # +# CONFIG_I2C_ALI1535 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set # CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_IBM_IIC is not set +# CONFIG_I2C_ISA is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # +# CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set -# CONFIG_I2C_SENSOR is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice +# Other I2C Chip support # -# CONFIG_BUSMOUSE is not set -# CONFIG_QIC02_TAPE is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# IPMI +# Misc devices # -# CONFIG_IPMI_HANDLER is not set # -# Watchdog Cards +# Multimedia devices # -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_GEN_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set +# CONFIG_VIDEO_DEV is not set # -# Ftape, the floppy tape device driver +# Digital Video Broadcasting Devices # -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_DVB is not set # -# Multimedia devices +# Graphics support # -# CONFIG_VIDEO_DEV is not set +# CONFIG_FB is not set # -# Digital Video Broadcasting Devices +# Sound # -# CONFIG_DVB is not set +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set # # File systems @@ -463,10 +572,11 @@ # Pseudo filesystems # CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y # CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set CONFIG_RAMFS=y # @@ -475,6 +585,7 @@ # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -491,12 +602,13 @@ CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y # CONFIG_EXPORTFS is not set CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set # CONFIG_SMB_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set @@ -522,35 +634,23 @@ # CONFIG_EFI_PARTITION is not set # -# Sound +# Native Language Support # -# CONFIG_SOUND is not set +# CONFIG_NLS is not set # # IBM 40x options # # -# USB support -# -# CONFIG_USB is not set -# CONFIG_USB_GADGET is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set - -# # Library routines # -# CONFIG_CRC32 is not set +CONFIG_CRC32=y # # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set -# CONFIG_KALLSYMS is not set # CONFIG_SERIAL_TEXT_DEBUG is not set CONFIG_OCP=y diff -Nru a/arch/ppc/configs/walnut_defconfig b/arch/ppc/configs/walnut_defconfig --- a/arch/ppc/configs/walnut_defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/configs/walnut_defconfig Tue May 18 23:38:08 2004 @@ -21,8 +21,10 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 # CONFIG_HOTPLUG is not set # CONFIG_IKCONFIG is not set @@ -33,6 +35,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # @@ -62,6 +65,7 @@ # IBM 4xx options # # CONFIG_ASH is not set +# CONFIG_BUBINGA is not set # CONFIG_CPCI405 is not set # CONFIG_EP405 is not set # CONFIG_OAK is not set @@ -72,7 +76,6 @@ CONFIG_IBM405_ERR77=y CONFIG_IBM405_ERR51=y CONFIG_IBM_OCP=y -CONFIG_PPC_OCP=y CONFIG_BIOS_FIXUP=y CONFIG_405GP=y CONFIG_IBM_OPENBIOS=y @@ -91,7 +94,8 @@ CONFIG_KERNEL_ELF=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="ip=on" # # Bus options @@ -172,7 +176,6 @@ # # Fusion MPT device support # -# CONFIG_FUSION is not set # # IEEE 1394 (FireWire) support @@ -204,9 +207,9 @@ CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y -CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y -CONFIG_IP_PNP_RARP=y +# CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set @@ -216,8 +219,6 @@ # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # @@ -225,7 +226,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -246,16 +249,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -284,7 +292,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -292,45 +299,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set # -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem @@ -495,6 +486,7 @@ # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y # CONFIG_DEVFS_FS is not set # CONFIG_DEVPTS_FS_XATTR is not set CONFIG_TMPFS=y @@ -535,7 +527,6 @@ # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -568,13 +559,14 @@ # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set # # Kernel hacking # # CONFIG_DEBUG_KERNEL is not set # CONFIG_SERIAL_TEXT_DEBUG is not set -CONFIG_OCP=y +CONFIG_PPC_OCP=y # # Security options diff -Nru a/arch/ppc/defconfig b/arch/ppc/defconfig --- a/arch/ppc/defconfig Tue May 18 23:38:08 2004 +++ b/arch/ppc/defconfig Tue May 18 23:38:08 2004 @@ -6,6 +6,7 @@ CONFIG_HAVE_DEC_LOCK=y CONFIG_PPC=y CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y # # Code maturity level options @@ -20,9 +21,12 @@ # CONFIG_SWAP=y CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y # CONFIG_EMBEDDED is not set @@ -32,6 +36,8 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -122,7 +128,6 @@ CONFIG_PCI_DOMAINS=y CONFIG_PCI_LEGACY_PROC=y CONFIG_PCI_NAMES=y -CONFIG_HOTPLUG=y # # PCMCIA/CardBus support @@ -131,11 +136,6 @@ CONFIG_PCMCIA_PROBE=y # -# Parallel port support -# -# CONFIG_PARPORT is not set - -# # Advanced setup # CONFIG_ADVANCED_OPTIONS=y @@ -149,6 +149,10 @@ CONFIG_BOOT_LOAD=0x00800000 # +# Device Drivers +# + +# # Generic Driver Options # # CONFIG_FW_LOADER is not set @@ -159,6 +163,11 @@ # CONFIG_MTD is not set # +# Parallel port support +# +# CONFIG_PARPORT is not set + +# # Plug and Play support # # CONFIG_PNP is not set @@ -175,17 +184,13 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_CARMEL is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_LBD=y # -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# # ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -207,6 +212,7 @@ # # IDE chipset support/bugfixes # +CONFIG_IDE_GENERIC=y CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y # CONFIG_BLK_DEV_OFFBOARD is not set @@ -214,7 +220,6 @@ # CONFIG_BLK_DEV_OPTI621 is not set CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_IDE_TCQ is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set CONFIG_IDEDMA_PCI_AUTO=y # CONFIG_IDEDMA_ONLYDISK is not set @@ -275,6 +280,12 @@ # CONFIG_SCSI_LOGGING is not set # +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set + +# # SCSI low-level drivers # # CONFIG_BLK_DEV_3W_XXXX_RAID is not set @@ -286,7 +297,6 @@ CONFIG_SCSI_AIC7XXX=m CONFIG_AIC7XXX_CMDS_PER_DEVICE=253 CONFIG_AIC7XXX_RESET_DELAY_MS=15000 -# CONFIG_AIC7XXX_PROBE_EISA_VL is not set # CONFIG_AIC7XXX_BUILD_FIRMWARE is not set CONFIG_AIC7XXX_DEBUG_ENABLE=y CONFIG_AIC7XXX_DEBUG_MASK=0 @@ -296,6 +306,7 @@ CONFIG_SCSI_ADVANSYS=m # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set # CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set @@ -314,14 +325,23 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA6322 is not set # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_NSP32 is not set @@ -332,12 +352,22 @@ CONFIG_SCSI_MAC53C94=y # +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# # Fusion MPT device support # # CONFIG_FUSION is not set # -# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# IEEE 1394 (FireWire) support # # CONFIG_IEEE1394 is not set @@ -347,6 +377,24 @@ # CONFIG_I2O is not set # +# Macintosh device drivers +# +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_PMU=y +CONFIG_PMAC_PBOOK=y +CONFIG_PMAC_APM_EMU=y +CONFIG_PMAC_BACKLIGHT=y +# CONFIG_MAC_FLOPPY is not set +CONFIG_MAC_SERIAL=m +CONFIG_ADB_MACIO=y +CONFIG_INPUT_ADBHID=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_THERM_WINDTUNNEL=m +CONFIG_THERM_ADT746X=m +# CONFIG_ANSLCD is not set + +# # Networking support # CONFIG_NET=y @@ -367,7 +415,6 @@ # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set CONFIG_SYN_COOKIES=y # CONFIG_INET_AH is not set # CONFIG_INET_ESP is not set @@ -378,8 +425,6 @@ # # CONFIG_IP_VS is not set # CONFIG_IPV6 is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set @@ -434,14 +479,17 @@ CONFIG_IP_NF_ARP_MANGLE=m CONFIG_IP_NF_COMPAT_IPCHAINS=m # CONFIG_IP_NF_COMPAT_IPFWADM is not set +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_RAW=m # # SCTP Configuration (EXPERIMENTAL) # -CONFIG_IPV6_SCTP__=y # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -462,16 +510,21 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -504,6 +557,7 @@ # CONFIG_AC3200 is not set # CONFIG_APRICOT is not set # CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set # CONFIG_CS89x0 is not set # CONFIG_DGRS is not set # CONFIG_EEPRO100 is not set @@ -530,7 +584,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set # CONFIG_TIGON3 is not set @@ -538,17 +591,12 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PPP=y -CONFIG_PPP_MULTILINK=y -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=y -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=y -# CONFIG_PPP_BSDCOMP is not set -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set # # Wireless LAN (non-hamradio) @@ -571,99 +619,43 @@ # CONFIG_PLX_HERMES is not set # CONFIG_TMD_HERMES is not set # CONFIG_PCI_HERMES is not set -CONFIG_NET_WIRELESS=y +# CONFIG_ATMEL is not set # -# Token Ring devices +# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support # -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set +# CONFIG_PRISM54 is not set +CONFIG_NET_WIRELESS=y # # Wan interfaces # # CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# Bluetooth support -# -# CONFIG_BT is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=y +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=y +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set # # ISDN subsystem # -# CONFIG_ISDN_BOOL is not set - -# -# Graphics support -# -CONFIG_FB=y -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_OF=y -CONFIG_FB_CONTROL=y -CONFIG_FB_PLATINUM=y -CONFIG_FB_VALKYRIE=y -CONFIG_FB_CT65550=y -CONFIG_FB_IMSTT=y -# CONFIG_FB_S3TRIO is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_RIVA is not set -CONFIG_FB_MATROX=y -CONFIG_FB_MATROX_MILLENIUM=y -CONFIG_FB_MATROX_MYSTIQUE=y -# CONFIG_FB_MATROX_G450 is not set -CONFIG_FB_MATROX_G100A=y -CONFIG_FB_MATROX_G100=y -# CONFIG_FB_MATROX_MULTIHEAD is not set -CONFIG_FB_RADEON=y -CONFIG_FB_ATY128=y -CONFIG_FB_ATY=y -CONFIG_FB_ATY_CT=y -CONFIG_FB_ATY_GX=y -# CONFIG_FB_ATY_XL_INIT is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -CONFIG_FB_3DFX=y -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -# CONFIG_MDA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_PCI_CONSOLE=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Logo configuration -# -CONFIG_LOGO=y -CONFIG_LOGO_LINUX_MONO=y -CONFIG_LOGO_LINUX_VGA16=y -CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_ISDN is not set # -# Old CD-ROM drivers (not SCSI, not IDE) +# Telephony Support # -# CONFIG_CD_NO_IDESCSI is not set +# CONFIG_PHONE is not set # # Input device support @@ -699,36 +691,21 @@ CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set CONFIG_INPUT_MOUSE=y CONFIG_MOUSE_PS2=y -# CONFIG_MOUSE_PS2_SYNAPTICS is not set # CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set # -# Macintosh device drivers -# -CONFIG_ADB_CUDA=y -CONFIG_ADB_PMU=y -CONFIG_PMAC_PBOOK=y -CONFIG_PMAC_APM_EMU=y -CONFIG_PMAC_BACKLIGHT=y -# CONFIG_MAC_FLOPPY is not set -CONFIG_MAC_SERIAL=m -CONFIG_ADB=y -CONFIG_ADB_MACIO=y -CONFIG_INPUT_ADBHID=y -CONFIG_MAC_EMUMOUSEBTN=y -# CONFIG_ANSLCD is not set - -# # Character devices # CONFIG_VT=y @@ -751,79 +728,108 @@ CONFIG_SERIAL_PMACZILOG=y # CONFIG_SERIAL_PMACZILOG_CONSOLE is not set CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +CONFIG_NVRAM=y +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set # # I2C support # -CONFIG_I2C=m +CONFIG_I2C=y CONFIG_I2C_CHARDEV=m # # I2C Algorithms # -# CONFIG_I2C_ALGOBIT is not set +CONFIG_I2C_ALGOBIT=y # CONFIG_I2C_ALGOPCF is not set # # I2C Hardware Bus support # # CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_ELEKTOR is not set +CONFIG_I2C_HYDRA=y # CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set # CONFIG_I2C_ISA is not set CONFIG_I2C_KEYWEST=m # CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set # CONFIG_I2C_SIS5595 is not set # CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set # -# I2C Hardware Sensors Chip support +# Hardware Sensors Chip support # # CONFIG_I2C_SENSOR is not set # CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_LM75 is not set # CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM90 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set # -# Mice +# Other I2C Chip support # -CONFIG_BUSMOUSE=y -# CONFIG_QIC02_TAPE is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set # -# Watchdog Cards +# Misc devices # -# CONFIG_WATCHDOG is not set -CONFIG_NVRAM=y -CONFIG_GEN_RTC=y -# CONFIG_GEN_RTC_X is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_RAW_DRIVER is not set # # Multimedia devices @@ -836,152 +842,65 @@ # CONFIG_DVB is not set # -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_DEVFS_FS=y -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_DEVPTS_FS_XATTR is not set -CONFIG_TMPFS=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -CONFIG_HFS_FS=m -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems +# Graphics support # -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V4 is not set -CONFIG_NFSD=y -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V4 is not set -# CONFIG_NFSD_TCP is not set -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=y -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_GSS is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set -# CONFIG_AFS_FS is not set +CONFIG_FB=y +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_OF=y +CONFIG_FB_CONTROL=y +CONFIG_FB_PLATINUM=y +CONFIG_FB_VALKYRIE=y +CONFIG_FB_CT65550=y +CONFIG_FB_IMSTT=y +# CONFIG_FB_S3TRIO is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_RIVA is not set +CONFIG_FB_MATROX=y +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +# CONFIG_FB_MATROX_G450 is not set +CONFIG_FB_MATROX_G100A=y +CONFIG_FB_MATROX_G100=y +CONFIG_FB_MATROX_I2C=y +# CONFIG_FB_MATROX_MAVEN is not set +# CONFIG_FB_MATROX_MULTIHEAD is not set +# CONFIG_FB_RADEON_OLD is not set +CONFIG_FB_RADEON=y +CONFIG_FB_RADEON_I2C=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GX=y +# CONFIG_FB_ATY_XL_INIT is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VIRTUAL is not set # -# Partition Types +# Console display driver support # -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_NEC98_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set -CONFIG_NLS=y +CONFIG_VGA_CONSOLE=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_PCI_CONSOLE=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y # -# Native Language Support +# Logo configuration # -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y # # Sound @@ -994,15 +913,24 @@ # Advanced Linux Sound Architecture # CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m -# CONFIG_SND_OSSEMUL is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_SEQUENCER_OSS=y # CONFIG_SND_VERBOSE_PRINTK is not set # CONFIG_SND_DEBUG is not set # # Generic devices # +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m # CONFIG_SND_DUMMY is not set # CONFIG_SND_VIRMIDI is not set # CONFIG_SND_MTPAV is not set @@ -1039,11 +967,17 @@ # PCI devices # # CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set # CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set # CONFIG_SND_CS46XX is not set # CONFIG_SND_CS4281 is not set # CONFIG_SND_EMU10K1 is not set # CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set # CONFIG_SND_NM256 is not set # CONFIG_SND_RME32 is not set # CONFIG_SND_RME96 is not set @@ -1062,6 +996,7 @@ # CONFIG_SND_ICE1712 is not set # CONFIG_SND_ICE1724 is not set # CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set # CONFIG_SND_SONICVIBES is not set # CONFIG_SND_VIA82XX is not set # CONFIG_SND_VX222 is not set @@ -1131,13 +1066,14 @@ # CONFIG_USB_WACOM is not set # CONFIG_USB_KBTAB is not set # CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set # CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set -CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set # CONFIG_USB_HPUSBSCSI is not set @@ -1205,17 +1141,176 @@ # # USB Miscellaneous drivers # +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set # CONFIG_USB_TIGL is not set # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set # CONFIG_USB_TEST is not set + +# +# USB Gadget Support +# # CONFIG_USB_GADGET is not set # +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +CONFIG_DEVFS_FS=y +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_SUNRPC=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile --- a/arch/ppc/kernel/Makefile Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/Makefile Tue May 18 23:38:09 2004 @@ -29,6 +29,7 @@ obj-$(CONFIG_KGDB) += ppc-stub.o obj-$(CONFIG_SMP) += smp.o smp-tbsync.o obj-$(CONFIG_TAU) += temp.o +obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o ifdef CONFIG_MATH_EMULATION obj-$(CONFIG_8xx) += softemu8xx.o diff -Nru a/arch/ppc/kernel/cputable.c b/arch/ppc/kernel/cputable.c --- a/arch/ppc/kernel/cputable.c Tue May 18 23:38:07 2004 +++ b/arch/ppc/kernel/cputable.c Tue May 18 23:38:07 2004 @@ -209,7 +209,15 @@ 32, 32, __setup_cpu_750fx }, - + { /* 750GX */ + 0xffff0000, 0x70020000, "750GX", + CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_CAN_DOZE | CPU_FTR_USE_TB | + CPU_FTR_L2CR | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_CAN_NAP | + CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS, + COMMON_PPC, + 32, 32, + __setup_cpu_750fx + }, { /* 740/750 (L2CR bit need fixup for 740) */ 0xffff0000, 0x00080000, "740/750", CPU_FTR_COMMON | @@ -537,8 +545,8 @@ 32, 32, 0, /*__setup_cpu_440 */ }, - { /* 440GX Rev. B1 (2.1) */ - 0xf0000fff, 0x50000852, "440GX Rev. B1 (2.1)", + { /* 440GX Rev. C */ + 0xf0000fff, 0x50000892, "440GX Rev. C", CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB, PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, 32, 32, diff -Nru a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S --- a/arch/ppc/kernel/entry.S Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/entry.S Tue May 18 23:38:09 2004 @@ -44,13 +44,41 @@ #define LOAD_MSR_KERNEL(r, x) li r,(x) #endif -#ifdef CONFIG_4xx +#ifdef CONFIG_BOOKE +#define COR r8 +#define BOOKE_LOAD_COR lis COR,crit_save@ha +#define BOOKE_REST_COR mfspr COR,SPRG2 +#define BOOKE_SAVE_COR mtspr SPRG2,COR +#else +#define COR 0 +#define BOOKE_LOAD_COR +#define BOOKE_REST_COR +#define BOOKE_SAVE_COR +#endif + +#ifdef CONFIG_BOOKE + .globl mcheck_transfer_to_handler +mcheck_transfer_to_handler: + mtspr SPRG6W,r8 + lis r8,mcheck_save@ha + lwz r0,mcheck_r10@l(r8) + stw r0,GPR10(r11) + lwz r0,mcheck_r11@l(r8) + stw r0,GPR11(r11) + mfspr r8,SPRG6R + b transfer_to_handler_full +#endif + +#if defined(CONFIG_40x) || defined(CONFIG_BOOKE) .globl crit_transfer_to_handler crit_transfer_to_handler: - lwz r0,crit_r10@l(0) + BOOKE_SAVE_COR + BOOKE_LOAD_COR + lwz r0,crit_r10@l(COR) stw r0,GPR10(r11) - lwz r0,crit_r11@l(0) + lwz r0,crit_r11@l(COR) stw r0,GPR11(r11) + BOOKE_REST_COR /* fall through */ #endif @@ -82,7 +110,7 @@ beq 2f /* if from user, fix up THREAD.regs */ addi r11,r1,STACK_FRAME_OVERHEAD stw r11,PT_REGS(r12) -#ifdef CONFIG_4xx +#if defined(CONFIG_40x) || defined(CONFIG_BOOKE) lwz r12,PTRACE-THREAD(r12) andi. r12,r12,PT_PTRACED beq+ 3f @@ -695,12 +723,14 @@ mtlr r11 lwz r10,_CCR(r1) mtcrf 0xff,r10 +#ifdef CONFIG_40x /* avoid any possible TLB misses here by turning off MSR.DR, we * assume the instructions here are mapped by a pinned TLB entry */ li r10,MSR_IR mtmsr r10 isync tophys(r1, r1) +#endif lwz r9,_DEAR(r1) lwz r10,_ESR(r1) mtspr SPRN_DEAR,r9 @@ -711,30 +741,103 @@ mtspr CSRR1,r12 lwz r9,GPR9(r1) lwz r12,GPR12(r1) - lwz r10,crit_sprg0@l(0) + BOOKE_SAVE_COR + BOOKE_LOAD_COR + lwz r10,crit_sprg0@l(COR) mtspr SPRN_SPRG0,r10 - lwz r10,crit_sprg1@l(0) + lwz r10,crit_sprg1@l(COR) mtspr SPRN_SPRG1,r10 - lwz r10,crit_sprg4@l(0) + lwz r10,crit_sprg4@l(COR) mtspr SPRN_SPRG4,r10 - lwz r10,crit_sprg5@l(0) + lwz r10,crit_sprg5@l(COR) mtspr SPRN_SPRG5,r10 - lwz r10,crit_sprg6@l(0) +#ifdef CONFIG_40x + lwz r10,crit_sprg6@l(COR) mtspr SPRN_SPRG6,r10 - lwz r10,crit_sprg7@l(0) +#endif + lwz r10,crit_sprg7@l(COR) mtspr SPRN_SPRG7,r10 - lwz r10,crit_srr0@l(0) + lwz r10,crit_srr0@l(COR) mtspr SRR0,r10 - lwz r10,crit_srr1@l(0) + lwz r10,crit_srr1@l(COR) mtspr SRR1,r10 - lwz r10,crit_pid@l(0) + lwz r10,crit_pid@l(COR) mtspr SPRN_PID,r10 lwz r10,GPR10(r1) lwz r11,GPR11(r1) lwz r1,GPR1(r1) + BOOKE_REST_COR PPC405_ERR77_SYNC rfci b . /* prevent prefetch past rfci */ + +#ifdef CONFIG_BOOKE +/* + * Return from a machine check interrupt, similar to a critical + * interrupt. + */ + .globl ret_from_mcheck_exc +ret_from_mcheck_exc: + REST_NVGPRS(r1) + lwz r3,_MSR(r1) + andi. r3,r3,MSR_PR + LOAD_MSR_KERNEL(r10,MSR_KERNEL) + bne user_exc_return + + lwz r0,GPR0(r1) + lwz r2,GPR2(r1) + REST_4GPRS(3, r1) + REST_2GPRS(7, r1) + + lwz r10,_XER(r1) + lwz r11,_CTR(r1) + mtspr XER,r10 + mtctr r11 + + stwcx. r0,0,r1 /* to clear the reservation */ + + lwz r11,_LINK(r1) + mtlr r11 + lwz r10,_CCR(r1) + mtcrf 0xff,r10 + lwz r9,_DEAR(r1) + lwz r10,_ESR(r1) + mtspr SPRN_DEAR,r9 + mtspr SPRN_ESR,r10 + lwz r11,_NIP(r1) + lwz r12,_MSR(r1) + mtspr MCSRR0,r11 + mtspr MCSRR1,r12 + lwz r9,GPR9(r1) + lwz r12,GPR12(r1) + mtspr SPRG6W,r8 + lis r8,mcheck_save@ha + lwz r10,mcheck_sprg0@l(r8) + mtspr SPRN_SPRG0,r10 + lwz r10,mcheck_sprg1@l(r8) + mtspr SPRN_SPRG1,r10 + lwz r10,mcheck_sprg4@l(r8) + mtspr SPRN_SPRG4,r10 + lwz r10,mcheck_sprg5@l(r8) + mtspr SPRN_SPRG5,r10 + lwz r10,mcheck_sprg7@l(r8) + mtspr SPRN_SPRG7,r10 + lwz r10,mcheck_srr0@l(r8) + mtspr SRR0,r10 + lwz r10,mcheck_srr1@l(r8) + mtspr SRR1,r10 + lwz r10,mcheck_csrr0@l(r8) + mtspr CSRR0,r10 + lwz r10,mcheck_csrr1@l(r8) + mtspr CSRR1,r10 + lwz r10,mcheck_pid@l(r8) + mtspr SPRN_PID,r10 + lwz r10,GPR10(r1) + lwz r11,GPR11(r1) + lwz r1,GPR1(r1) + mfspr r8,SPRG6R + RFMCI +#endif /* CONFIG_BOOKE */ /* * Load the DBCR0 value for a task that is being ptraced, diff -Nru a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S --- a/arch/ppc/kernel/head.S Tue May 18 23:38:07 2004 +++ b/arch/ppc/kernel/head.S Tue May 18 23:38:07 2004 @@ -491,14 +491,16 @@ /* * The Altivec unavailable trap is at 0x0f20. Foo. * We effectively remap it to 0x3000. + * We include an altivec unavailable exception vector even if + * not configured for Altivec, so that you can't panic a + * non-altivec kernel running on a machine with altivec just + * by executing an altivec instruction. */ . = 0xf00 b Trap_0f . = 0xf20 -#ifdef CONFIG_ALTIVEC b AltiVecUnavailable -#endif Trap_0f: EXCEPTION_PROLOG @@ -705,6 +707,7 @@ #ifndef CONFIG_ALTIVEC #define AltivecAssistException UnknownException #endif + EXCEPTION(0x1300, Trap_13, InstructionBreakpoint, EXC_XFER_EE) EXCEPTION(0x1400, SMI, SMIException, EXC_XFER_EE) EXCEPTION(0x1500, Trap_15, UnknownException, EXC_XFER_EE) @@ -746,12 +749,12 @@ . = 0x3000 -#ifdef CONFIG_ALTIVEC AltiVecUnavailable: EXCEPTION_PROLOG +#ifdef CONFIG_ALTIVEC bne load_up_altivec /* if from user, just load it up */ - EXC_XFER_EE_LITE(0xf20, KernelAltiVec) #endif /* CONFIG_ALTIVEC */ + EXC_XFER_EE_LITE(0xf20, AltivecUnavailException) #ifdef CONFIG_PPC64BRIDGE DataAccess: @@ -1633,7 +1636,7 @@ blr #endif /* CONFIG_POWER4 */ - + #ifdef CONFIG_8260 /* Jump into the system reset for the rom. * We first disable the MMU, and then jump to the ROM reset address. diff -Nru a/arch/ppc/kernel/head_44x.S b/arch/ppc/kernel/head_44x.S --- a/arch/ppc/kernel/head_44x.S Tue May 18 23:38:06 2004 +++ b/arch/ppc/kernel/head_44x.S Tue May 18 23:38:06 2004 @@ -313,7 +313,7 @@ #define NORMAL_EXCEPTION_PROLOG \ mtspr SPRN_SPRG0,r10; /* save two registers to work with */\ mtspr SPRN_SPRG1,r11; \ - mtspr SPRN_SPRG2,r1; \ + mtspr SPRN_SPRG4W,r1; \ mfcr r10; /* save CR in r10 for now */\ mfspr r11,SPRN_SRR1; /* check whether user or kernel */\ andi. r11,r11,MSR_PR; \ @@ -332,7 +332,7 @@ stw r12,GPR11(r11); \ mflr r10; \ stw r10,_LINK(r11); \ - mfspr r10,SPRG2; \ + mfspr r10,SPRG4R; \ mfspr r12,SRR0; \ stw r10,GPR1(r11); \ mfspr r9,SRR1; \ @@ -348,30 +348,34 @@ * can potentially occur at any point during normal exception processing. * Thus we cannot use the same SPRG registers as the normal prolog above. * Instead we use a couple of words of memory at low physical addresses. - * This is OK since we don't support SMP on these processors. + * This is OK since we don't support SMP on these processors. For Book E + * processors, we also have a reserved register (SPRG2) that is only used + * in critical exceptions so we can free up a GPR to use as the base for + * indirect access to the critical exception save area. This is necessary + * since the MMU is always on and the save area is offset from KERNELBASE. */ -/* XXX but we don't have RAM mapped at 0 in space 0 -- paulus. */ #define CRITICAL_EXCEPTION_PROLOG \ - stw r10,crit_r10@l(0); /* save two registers to work with */\ - stw r11,crit_r11@l(0); \ + mtspr SPRG2,r8; /* SPRG2 only used in criticals */ \ + lis r8,crit_save@ha; \ + stw r10,crit_r10@l(r8); \ + stw r11,crit_r11@l(r8); \ mfspr r10,SPRG0; \ - stw r10,crit_sprg0@l(0); \ + stw r10,crit_sprg0@l(r8); \ mfspr r10,SPRG1; \ - stw r10,crit_sprg1@l(0); \ + stw r10,crit_sprg1@l(r8); \ mfspr r10,SPRG4R; \ - stw r10,crit_sprg4@l(0); \ + stw r10,crit_sprg4@l(r8); \ mfspr r10,SPRG5R; \ - stw r10,crit_sprg5@l(0); \ - mfspr r10,SPRG6R; \ - stw r10,crit_sprg6@l(0); \ + stw r10,crit_sprg5@l(r8); \ mfspr r10,SPRG7R; \ - stw r10,crit_sprg7@l(0); \ + stw r10,crit_sprg7@l(r8); \ mfspr r10,SPRN_PID; \ - stw r10,crit_pid@l(0); \ + stw r10,crit_pid@l(r8); \ mfspr r10,SRR0; \ - stw r10,crit_srr0@l(0); \ + stw r10,crit_srr0@l(r8); \ mfspr r10,SRR1; \ - stw r10,crit_srr1@l(0); \ + stw r10,crit_srr1@l(r8); \ + mfspr r8,SPRG2; /* SPRG2 only used in criticals */ \ mfcr r10; /* save CR in r10 for now */\ mfspr r11,SPRN_CSRR1; /* check whether user or kernel */\ andi. r11,r11,MSR_PR; \ @@ -383,7 +387,6 @@ lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ addi r11,r11,THREAD_SIZE; \ 1: subi r11,r11,INT_FRAME_SIZE; /* Allocate an exception frame */\ - tophys(r11,r11); \ stw r10,_CCR(r11); /* save various registers */\ stw r12,GPR12(r11); \ stw r9,GPR9(r11); \ @@ -404,6 +407,71 @@ SAVE_2GPRS(7, r11) /* + * Exception prolog for machine check exceptions. This is similar to + * the critical exception prolog, except that machine check exceptions + * have their own save area. For Book E processors, we also have a + * reserved register (SPRG6) that is only used in machine check exceptions + * so we can free up a GPR to use as the base for indirect access to the + * machine check exception save area. This is necessary since the MMU + * is always on and the save area is offset from KERNELBASE. + */ +#define MCHECK_EXCEPTION_PROLOG \ + mtspr SPRG6W,r8; /* SPRG6 used in machine checks */ \ + lis r8,mcheck_save@ha; \ + stw r10,mcheck_r10@l(r8); \ + stw r11,mcheck_r11@l(r8); \ + mfspr r10,SPRG0; \ + stw r10,mcheck_sprg0@l(r8); \ + mfspr r10,SPRG1; \ + stw r10,mcheck_sprg1@l(r8); \ + mfspr r10,SPRG4R; \ + stw r10,mcheck_sprg4@l(r8); \ + mfspr r10,SPRG5R; \ + stw r10,mcheck_sprg5@l(r8); \ + mfspr r10,SPRG7R; \ + stw r10,mcheck_sprg7@l(r8); \ + mfspr r10,SPRN_PID; \ + stw r10,mcheck_pid@l(r8); \ + mfspr r10,SRR0; \ + stw r10,mcheck_srr0@l(r8); \ + mfspr r10,SRR1; \ + stw r10,mcheck_srr1@l(r8); \ + mfspr r10,CSRR0; \ + stw r10,mcheck_csrr0@l(r8); \ + mfspr r10,CSRR1; \ + stw r10,mcheck_csrr1@l(r8); \ + mfspr r8,SPRG6R; /* SPRG6 used in machine checks */ \ + mfcr r10; /* save CR in r10 for now */\ + mfspr r11,SPRN_MCSRR1; /* check whether user or kernel */\ + andi. r11,r11,MSR_PR; \ + lis r11,mcheck_stack_top@h; \ + ori r11,r11,mcheck_stack_top@l; \ + beq 1f; \ + /* COMING FROM USER MODE */ \ + mfspr r11,SPRG3; /* if from user, start at top of */\ + lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\ + addi r11,r11,THREAD_SIZE; \ +1: subi r11,r11,INT_FRAME_SIZE; /* Allocate an exception frame */\ + stw r10,_CCR(r11); /* save various registers */\ + stw r12,GPR12(r11); \ + stw r9,GPR9(r11); \ + mflr r10; \ + stw r10,_LINK(r11); \ + mfspr r12,SPRN_DEAR; /* save DEAR and ESR in the frame */\ + stw r12,_DEAR(r11); /* since they may have had stuff */\ + mfspr r9,SPRN_ESR; /* in them at the point where the */\ + stw r9,_ESR(r11); /* exception was taken */\ + mfspr r12,MCSRR0; \ + stw r1,GPR1(r11); \ + mfspr r9,MCSRR1; \ + stw r1,0(r11); \ + tovirt(r1,r11); \ + rlwinm r9,r9,0,14,12; /* clear MSR_WE (necessary?) */\ + stw r0,GPR0(r11); \ + SAVE_4GPRS(3, r11); \ + SAVE_2GPRS(7, r11) + +/* * Exception vectors. */ #define START_EXCEPTION(label) \ @@ -429,6 +497,18 @@ NOCOPY, transfer_to_handler_full, \ ret_from_except_full) +#define MCHECK_EXCEPTION(n, label, hdlr) \ + START_EXCEPTION(label); \ + MCHECK_EXCEPTION_PROLOG; \ + lis r4,MCSR_MCS@h; \ + mtspr SPRN_MCSR,r4; \ + mfspr r5,SPRN_ESR; \ + stw r5,_ESR(r11); \ + addi r3,r1,STACK_FRAME_OVERHEAD; \ + EXC_XFER_TEMPLATE(hdlr, n+2, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \ + NOCOPY, mcheck_transfer_to_handler, \ + ret_from_mcheck_exc) + #define EXC_XFER_TEMPLATE(hdlr, trap, msr, copyee, tfer, ret) \ li r10,trap; \ stw r10,TRAP(r11); \ @@ -463,7 +543,11 @@ CRITICAL_EXCEPTION(0x0100, CriticalInput, UnknownException) /* Machine Check Interrupt */ +#ifdef CONFIG_440A + MCHECK_EXCEPTION(0x0200, MachineCheck, MachineCheckException) +#else CRITICAL_EXCEPTION(0x0200, MachineCheck, MachineCheckException) +#endif /* Data Storage Interrupt */ START_EXCEPTION(DataStorage) @@ -471,7 +555,6 @@ mtspr SPRG1, r11 mtspr SPRG4W, r12 mtspr SPRG5W, r13 - mtspr SPRG6W, r14 mfcr r11 mtspr SPRG7W, r11 @@ -544,15 +627,14 @@ rlwinm r11,r11,0,20,15 /* Clear U0-U3 */ /* find the TLB index that caused the fault. It has to be here. */ - tlbsx r14, 0, r10 + tlbsx r10, 0, r10 - tlbwe r11, r14, PPC44x_TLB_ATTRIB /* Write ATTRIB */ + tlbwe r11, r10, PPC44x_TLB_ATTRIB /* Write ATTRIB */ /* Done...restore registers and get out of here. */ mfspr r11, SPRG7R mtcr r11 - mfspr r14, SPRG6R mfspr r13, SPRG5R mfspr r12, SPRG4R @@ -567,7 +649,6 @@ */ mfspr r11, SPRG7R mtcr r11 - mfspr r14, SPRG6R mfspr r13, SPRG5R mfspr r12, SPRG4R @@ -635,7 +716,6 @@ mtspr SPRG1, r11 mtspr SPRG4W, r12 mtspr SPRG5W, r13 - mtspr SPRG6W, r14 mfcr r11 mtspr SPRG7W, r11 mfspr r10, SPRN_DEAR /* Get faulting address */ @@ -688,7 +768,6 @@ */ mfspr r11, SPRG7R mtcr r11 - mfspr r14, SPRG6R mfspr r13, SPRG5R mfspr r12, SPRG4R mfspr r11, SPRG1 @@ -706,7 +785,6 @@ mtspr SPRG1, r11 mtspr SPRG4W, r12 mtspr SPRG5W, r13 - mtspr SPRG6W, r14 mfcr r11 mtspr SPRG7W, r11 mfspr r10, SRR0 /* Get faulting address */ @@ -759,7 +837,6 @@ */ mfspr r11, SPRG7R mtcr r11 - mfspr r14, SPRG6R mfspr r13, SPRG5R mfspr r12, SPRG4R mfspr r11, SPRG1 @@ -780,61 +857,50 @@ * the MSR_DE bit set. */ /* Debug Interrupt */ - CRITICAL_EXCEPTION(0x2000, Debug, DebugException) -#if 0 START_EXCEPTION(Debug) - /* This first instruction was already executed by the exception - * handler and must be the first instruction of every exception - * handler. - */ - mtspr SPRN_SPRG0,r10 /* Save some working registers... */ - mtspr SPRN_SPRG1,r11 - mtspr SPRN_SPRG4W,r12 - mfcr r10 /* ..and the cr because we change it */ - - mfspr r11,SPRN_CSRR1 /* MSR at the time of fault */ - andi. r11,r11,MSR_PR - bne+ 2f /* trapped from problem state */ - - mfspr r11,SPRN_CSRR0 /* Faulting instruction address */ - lis r12, KERNELBASE@h - ori r12, r12, KERNELBASE@l - cmplw r11,r12 - blt+ 2f /* addr below exception vectors */ - - lis r12, Debug@h - ori r12, r12, Debug@l - cmplw r11,r12 - bgt+ 2f /* addr above TLB exception vectors */ - - lis r11,DBSR_IC@h /* Remove the trap status */ - mtspr SPRN_DBSR,r11 - - mfspr r11,SPRN_CSRR1 - rlwinm r11,r11,0,23,21 /* clear MSR_DE */ - mtspr SPRN_CSRR1, r11 /* restore MSR at rcfi without DE */ - - mtcrf 0xff,r10 /* restore registers */ - mfspr r12,SPRN_SPRG4R - mfspr r11,SPRN_SPRG1 - mfspr r10,SPRN_SPRG0 - - sync - rfci /* return to the exception handler */ - b . /* prevent prefetch past rfci */ + CRITICAL_EXCEPTION_PROLOG -2: - mtcrf 0xff,r10 /* restore registers */ - mfspr r12,SPRN_SPRG4R - mfspr r11,SPRN_SPRG1 - mfspr r10,SPRN_SPRG0 + /* + * If this is a single step or branch-taken exception in an + * exception entry sequence, it was probably meant to apply to + * the code where the exception occurred (since exception entry + * doesn't turn off DE automatically). We simulate the effect + * of turning off DE on entry to an exception handler by turning + * off DE in the CSRR1 value and clearing the debug status. + */ + mfspr r10,SPRN_DBSR /* check single-step/branch taken */ + andis. r10,r10,(DBSR_IC|DBSR_BT)@h + beq+ 1f + andi. r0,r9,MSR_PR /* check supervisor */ + beq 2f /* branch if we need to fix it up... */ - CRIT_EXCEPTION_PROLOG + /* continue normal handling for a critical exception... */ +1: mfspr r4,SPRN_DBSR addi r3,r1,STACK_FRAME_OVERHEAD - li r7,CRIT_EXC; - li r9,MSR_KERNEL - FINISH_EXCEPTION(DebugException) -#endif + EXC_XFER_TEMPLATE(DebugException, 0x2002, \ + (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \ + NOCOPY, crit_transfer_to_handler, ret_from_crit_exc) + + /* here it looks like we got an inappropriate debug exception. */ +2: rlwinm r9,r9,0,~MSR_DE /* clear DE in the CSRR1 value */ + mtspr SPRN_DBSR,r10 /* clear the IC/BT debug intr status */ + /* restore state and get out */ + lwz r10,_CCR(r11) + lwz r0,GPR0(r11) + lwz r1,GPR1(r11) + mtcrf 0x80,r10 + mtspr CSRR0,r12 + mtspr CSRR1,r9 + lwz r9,GPR9(r11) + + mtspr SPRG2,r8; /* SPRG2 only used in criticals */ + lis r8,crit_save@ha; + lwz r10,crit_r10@l(r8) + lwz r11,crit_r11@l(r8) + mfspr r8,SPRG2 + + rfci + b . /* * Local functions @@ -860,7 +926,6 @@ * r11 - available to use * r12 - Pointer to the 64-bit PTE * r13 - available to use - * r14 - available to use * MMUCR - loaded with proper value when we get here * Upon exit, we reload everything and RFI. */ @@ -875,51 +940,50 @@ /* Load the next available TLB index */ lis r13, tlb_44x_index@ha - lwz r14, tlb_44x_index@l(r13) + lwz r13, tlb_44x_index@l(r13) /* Load the TLB high watermark */ - lis r13, tlb_44x_hwater@ha - lwz r11, tlb_44x_hwater@l(r13) + lis r11, tlb_44x_hwater@ha + lwz r11, tlb_44x_hwater@l(r11) /* Increment, rollover, and store TLB index */ - addi r14, r14, 1 - cmpw 0, r14, r11 /* reserve entries */ + addi r13, r13, 1 + cmpw 0, r13, r11 /* reserve entries */ ble 7f - li r14, 0 + li r13, 0 7: /* Store the next available TLB index */ - lis r13, tlb_44x_index@ha - stw r14, tlb_44x_index@l(r13) + lis r11, tlb_44x_index@ha + stw r13, tlb_44x_index@l(r11) - lwz r13, 0(r12) /* Get MS word of PTE */ - lwz r11, 4(r12) /* Get LS word of PTE */ - rlwimi r13, r11, 0, 0 , 19 /* Insert RPN */ - tlbwe r13, r14, PPC44x_TLB_XLAT /* Write XLAT */ + lwz r11, 0(r12) /* Get MS word of PTE */ + lwz r12, 4(r12) /* Get LS word of PTE */ + rlwimi r11, r12, 0, 0 , 19 /* Insert RPN */ + tlbwe r11, r13, PPC44x_TLB_XLAT /* Write XLAT */ /* * Create PAGEID. This is the faulting address, * page size, and valid flag. */ - li r12, PPC44x_TLB_VALID | PPC44x_TLB_4K - rlwimi r10, r12, 0, 20, 31 /* Insert valid and page size */ - tlbwe r10, r14, PPC44x_TLB_PAGEID /* Write PAGEID */ - - li r13, PPC44x_TLB_SR@l /* Set SR */ - rlwimi r13, r11, 0, 30, 30 /* Set SW = _PAGE_RW */ - rlwimi r13, r11, 29, 29, 29 /* SX = _PAGE_HWEXEC */ - rlwimi r13, r11, 29, 28, 28 /* UR = _PAGE_USER */ - rlwimi r12, r11, 31, 26, 26 /* (_PAGE_USER>>1)->r12 */ - and r12, r12, r11 /* HWEXEC & USER */ - rlwimi r13, r12, 0, 26, 26 /* UX = HWEXEC & USER */ - - rlwimi r11, r13, 0, 26, 31 /* Insert static perms */ - rlwinm r11, r11, 0, 20, 15 /* Clear U0-U3 */ - tlbwe r11, r14, PPC44x_TLB_ATTRIB /* Write ATTRIB */ + li r11, PPC44x_TLB_VALID | PPC44x_TLB_4K + rlwimi r10, r11, 0, 20, 31 /* Insert valid and page size */ + tlbwe r10, r13, PPC44x_TLB_PAGEID /* Write PAGEID */ + + li r10, PPC44x_TLB_SR@l /* Set SR */ + rlwimi r10, r12, 0, 30, 30 /* Set SW = _PAGE_RW */ + rlwimi r10, r12, 29, 29, 29 /* SX = _PAGE_HWEXEC */ + rlwimi r10, r12, 29, 28, 28 /* UR = _PAGE_USER */ + rlwimi r11, r12, 31, 26, 26 /* (_PAGE_USER>>1)->r12 */ + and r11, r12, r11 /* HWEXEC & USER */ + rlwimi r10, r11, 0, 26, 26 /* UX = HWEXEC & USER */ + + rlwimi r12, r10, 0, 26, 31 /* Insert static perms */ + rlwinm r12, r12, 0, 20, 15 /* Clear U0-U3 */ + tlbwe r12, r13, PPC44x_TLB_ATTRIB /* Write ATTRIB */ /* Done...restore registers and get out of here. */ mfspr r11, SPRG7R mtcr r11 - mfspr r14, SPRG6R mfspr r13, SPRG5R mfspr r12, SPRG4R mfspr r11, SPRG1 @@ -985,32 +1049,30 @@ _GLOBAL(swapper_pg_dir) .space 8192 -/* Stack for handling critical exceptions from kernel mode */ .section .bss +/* Stack for handling critical exceptions from kernel mode */ critical_stack_bottom: .space 4096 critical_stack_top: .previous -/* - * This space gets a copy of optional info passed to us by the bootstrap - * which is used to pass parameters into the kernel like root=/dev/sda1, etc. - */ -_GLOBAL(cmd_line) - .space 512 - -/* - * Room for two PTE pointers, usually the kernel and current user pointers - * to their respective root page table. - */ -abatron_pteptrs: - .space 8 +/* Stack for handling machine check exceptions from kernel mode */ +mcheck_stack_bottom: + .space 4096 +mcheck_stack_top: + .previous /* * This area is used for temporarily saving registers during the - * critical exception prolog. + * critical and machine check exception prologs. It must always + * follow the page aligned allocations, so it starts on a page + * boundary, ensuring that all crit_save areas are in a single + * page. */ -crit_save: + +/* crit_save */ +_GLOBAL(crit_save) + .space 4 _GLOBAL(crit_r10) .space 4 _GLOBAL(crit_r11) @@ -1023,8 +1085,6 @@ .space 4 _GLOBAL(crit_sprg5) .space 4 -_GLOBAL(crit_sprg6) - .space 4 _GLOBAL(crit_sprg7) .space 4 _GLOBAL(crit_pid) @@ -1033,3 +1093,47 @@ .space 4 _GLOBAL(crit_srr1) .space 4 + +/* mcheck_save */ +_GLOBAL(mcheck_save) + .space 4 +_GLOBAL(mcheck_r10) + .space 4 +_GLOBAL(mcheck_r11) + .space 4 +_GLOBAL(mcheck_sprg0) + .space 4 +_GLOBAL(mcheck_sprg1) + .space 4 +_GLOBAL(mcheck_sprg4) + .space 4 +_GLOBAL(mcheck_sprg5) + .space 4 +_GLOBAL(mcheck_sprg7) + .space 4 +_GLOBAL(mcheck_pid) + .space 4 +_GLOBAL(mcheck_srr0) + .space 4 +_GLOBAL(mcheck_srr1) + .space 4 +_GLOBAL(mcheck_csrr0) + .space 4 +_GLOBAL(mcheck_csrr1) + .space 4 + +/* + * This space gets a copy of optional info passed to us by the bootstrap + * which is used to pass parameters into the kernel like root=/dev/sda1, etc. + */ +_GLOBAL(cmd_line) + .space 512 + +/* + * Room for two PTE pointers, usually the kernel and current user pointers + * to their respective root page table. + */ +abatron_pteptrs: + .space 8 + + diff -Nru a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S --- a/arch/ppc/kernel/misc.S Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/misc.S Tue May 18 23:38:09 2004 @@ -780,9 +780,18 @@ _GLOBAL(copy_page) addi r3,r3,-4 addi r4,r4,-4 + +#ifdef CONFIG_8xx + /* don't use prefetch on 8xx */ + li r0,4096/L1_CACHE_LINE_SIZE + mtctr r0 +1: COPY_16_BYTES + bdnz 1b + blr + +#else /* not 8xx, we can prefetch */ li r5,4 -#ifndef CONFIG_8xx #if MAX_COPY_PREFETCH > 1 li r0,MAX_COPY_PREFETCH li r11,4 @@ -790,19 +799,17 @@ 11: dcbt r11,r4 addi r11,r11,L1_CACHE_LINE_SIZE bdnz 11b -#else /* MAX_L1_COPY_PREFETCH == 1 */ +#else /* MAX_COPY_PREFETCH == 1 */ dcbt r5,r4 li r11,L1_CACHE_LINE_SIZE+4 -#endif /* MAX_L1_COPY_PREFETCH */ -#endif /* CONFIG_8xx */ - - li r0,4096/L1_CACHE_LINE_SIZE +#endif /* MAX_COPY_PREFETCH */ + li r0,4096/L1_CACHE_LINE_SIZE - MAX_COPY_PREFETCH + crclr 4*cr0+eq +2: mtctr r0 1: -#ifndef CONFIG_8xx dcbt r11,r4 dcbz r5,r3 -#endif COPY_16_BYTES #if L1_CACHE_LINE_SIZE >= 32 COPY_16_BYTES @@ -818,7 +825,12 @@ #endif #endif bdnz 1b - blr + beqlr + crnot 4*cr0+eq,4*cr0+eq + li r0,MAX_COPY_PREFETCH + li r11,4 + b 2b +#endif /* CONFIG_8xx */ /* * void atomic_clear_mask(atomic_t mask, atomic_t *addr) diff -Nru a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c --- a/arch/ppc/kernel/ppc_ksyms.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/ppc_ksyms.c Tue May 18 23:38:09 2004 @@ -72,7 +72,7 @@ extern unsigned long mm_ptov (unsigned long paddr); -EXPORT_SYMBOL(clear_page); +EXPORT_SYMBOL(clear_pages); EXPORT_SYMBOL(clear_user_page); EXPORT_SYMBOL(do_signal); EXPORT_SYMBOL(do_syscall_trace); @@ -336,7 +336,7 @@ EXPORT_SYMBOL(cpm_install_handler); EXPORT_SYMBOL(cpm_free_handler); #endif /* CONFIG_8xx */ -#if defined(CONFIG_8xx) || defined(CONFIG_4xx) +#if defined(CONFIG_8xx) || defined(CONFIG_40x) EXPORT_SYMBOL(__res); #endif #if defined(CONFIG_8xx) diff -Nru a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c --- a/arch/ppc/kernel/process.c Tue May 18 23:38:07 2004 +++ b/arch/ppc/kernel/process.c Tue May 18 23:38:07 2004 @@ -668,12 +668,6 @@ } #endif -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long ip, sp; @@ -688,7 +682,7 @@ return 0; if (count > 0) { ip = *(unsigned long *)(sp + 4); - if (ip < first_sched || ip >= last_sched) + if (!in_sched_functions(ip)) return ip; } } while (count++ < 16); diff -Nru a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c --- a/arch/ppc/kernel/setup.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/setup.c Tue May 18 23:38:09 2004 @@ -37,6 +37,7 @@ #include #include #include +#include #if defined CONFIG_KGDB #include @@ -682,6 +683,12 @@ /* set up the bootmem stuff with available memory */ do_init_bootmem(); if ( ppc_md.progress ) ppc_md.progress("setup_arch: bootmem", 0x3eab); + +#ifdef CONFIG_PPC_OCP + /* Initialize OCP device list */ + ocp_early_init(); + if ( ppc_md.progress ) ppc_md.progress("ocp: exit", 0x3eab); +#endif ppc_md.setup_arch(); if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab); diff -Nru a/arch/ppc/kernel/smp.c b/arch/ppc/kernel/smp.c --- a/arch/ppc/kernel/smp.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/kernel/smp.c Tue May 18 23:38:09 2004 @@ -211,6 +211,8 @@ bitmask. --RR */ if (num_online_cpus() <= 1) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); return __smp_call_function(func, info, wait, MSG_ALL_BUT_SELF); } diff -Nru a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c --- a/arch/ppc/kernel/traps.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/kernel/traps.c Tue May 18 23:38:06 2004 @@ -41,9 +41,6 @@ #include #endif -extern int fix_alignment(struct pt_regs *); -extern void bad_page_fault(struct pt_regs *, unsigned long, int sig); - #ifdef CONFIG_XMON void (*debugger)(struct pt_regs *regs) = xmon; int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; @@ -222,14 +219,43 @@ if (check_io_access(regs)) return; -#ifdef CONFIG_4xx +#if defined(CONFIG_4xx) && !defined(CONFIG_440A) if (reason & ESR_IMCP) { printk("Instruction"); mtspr(SPRN_ESR, reason & ~ESR_IMCP); } else printk("Data"); printk(" machine check in kernel mode.\n"); +#elif defined(CONFIG_440A) + printk("Machine check in kernel mode.\n"); + if (reason & ESR_IMCP){ + printk("Instruction Synchronous Machine Check exception\n"); + mtspr(SPRN_ESR, reason & ~ESR_IMCP); + } + else { + u32 mcsr = mfspr(SPRN_MCSR); + if (mcsr & MCSR_IB) + printk("Instruction Read PLB Error\n"); + if (mcsr & MCSR_DRB) + printk("Data Read PLB Error\n"); + if (mcsr & MCSR_DWB) + printk("Data Write PLB Error\n"); + if (mcsr & MCSR_TLBP) + printk("TLB Parity Error\n"); + if (mcsr & MCSR_ICP){ + flush_instruction_cache(); + printk("I-Cache Parity Error\n"); + } + if (mcsr & MCSR_DCSP) + printk("D-Cache Search Parity Error\n"); + if (mcsr & MCSR_DCFP) + printk("D-Cache Flush Parity Error\n"); + if (mcsr & MCSR_IMPE) + printk("Machine Check exception is imprecise\n"); + /* Clear MCSR */ + mtspr(SPRN_MCSR, mcsr); + } #else /* !CONFIG_4xx */ printk("Machine check in kernel mode.\n"); printk("Caused by (from SRR1=%lx): ", reason); @@ -605,17 +631,54 @@ } #endif /* CONFIG_INT_TAU */ +void AltivecUnavailException(struct pt_regs *regs) +{ + static int kernel_altivec_count; + +#ifndef CONFIG_ALTIVEC + if (user_mode(regs)) { + /* A user program has executed an altivec instruction, + but this kernel doesn't support altivec. */ + _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); + return; + } +#endif + /* The kernel has executed an altivec instruction without + first enabling altivec. Whinge but let it do it. */ + if (++kernel_altivec_count < 10) + printk(KERN_ERR "AltiVec used in kernel (task=%p, pc=%x)\n", + current, regs->nip); + regs->msr |= MSR_VEC; +} + #ifdef CONFIG_ALTIVEC void AltivecAssistException(struct pt_regs *regs) { + int err; + preempt_disable(); if (regs->msr & MSR_VEC) giveup_altivec(current); preempt_enable(); - /* XXX quick hack for now: set the non-Java bit in the VSCR */ - current->thread.vscr.u[3] |= 0x10000; + err = emulate_altivec(regs); + if (err == 0) { + regs->nip += 4; /* skip emulated instruction */ + emulate_single_step(regs); + return; + } + + if (err == -EFAULT) { + /* got an error reading the instruction */ + _exception(SIGSEGV, regs, SEGV_ACCERR, regs->nip); + } else { + /* didn't recognize the instruction */ + /* XXX quick hack for now: set the non-Java bit in the VSCR */ + printk(KERN_ERR "unrecognized altivec instruction " + "in %s at %lx\n", current->comm, regs->nip); + current->thread.vscr.u[3] |= 0x10000; + } } #endif /* CONFIG_ALTIVEC */ diff -Nru a/arch/ppc/kernel/vecemu.c b/arch/ppc/kernel/vecemu.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/kernel/vecemu.c Tue May 18 23:38:09 2004 @@ -0,0 +1,346 @@ +/* + * Routines to emulate some Altivec/VMX instructions, specifically + * those that can trap when given denormalized operands in Java mode. + */ +#include +#include +#include +#include +#include +#include + +/* Functions in vector.S */ +extern void vaddfp(vector128 *dst, vector128 *a, vector128 *b); +extern void vsubfp(vector128 *dst, vector128 *a, vector128 *b); +extern void vmaddfp(vector128 *dst, vector128 *a, vector128 *b, vector128 *c); +extern void vnmsubfp(vector128 *dst, vector128 *a, vector128 *b, vector128 *c); +extern void vrefp(vector128 *dst, vector128 *src); +extern void vrsqrtefp(vector128 *dst, vector128 *src); +extern void vexptep(vector128 *dst, vector128 *src); + +static unsigned int exp2s[8] = { + 0x800000, + 0x8b95c2, + 0x9837f0, + 0xa5fed7, + 0xb504f3, + 0xc5672a, + 0xd744fd, + 0xeac0c7 +}; + +/* + * Computes an estimate of 2^x. The `s' argument is the 32-bit + * single-precision floating-point representation of x. + */ +static unsigned int eexp2(unsigned int s) +{ + int exp, pwr; + unsigned int mant, frac; + + /* extract exponent field from input */ + exp = ((s >> 23) & 0xff) - 127; + if (exp > 7) { + /* check for NaN input */ + if (exp == 128 && (s & 0x7fffff) != 0) + return s | 0x400000; /* return QNaN */ + /* 2^-big = 0, 2^+big = +Inf */ + return (s & 0x80000000)? 0: 0x7f800000; /* 0 or +Inf */ + } + if (exp < -23) + return 0x3f800000; /* 1.0 */ + + /* convert to fixed point integer in 9.23 representation */ + pwr = (s & 0x7fffff) | 0x800000; + if (exp > 0) + pwr <<= exp; + else + pwr >>= -exp; + if (s & 0x80000000) + pwr = -pwr; + + /* extract integer part, which becomes exponent part of result */ + exp = (pwr >> 23) + 126; + if (exp >= 254) + return 0x7f800000; + if (exp < -23) + return 0; + + /* table lookup on top 3 bits of fraction to get mantissa */ + mant = exp2s[(pwr >> 20) & 7]; + + /* linear interpolation using remaining 20 bits of fraction */ + asm("mulhwu %0,%1,%2" : "=r" (frac) + : "r" (pwr << 12), "r" (0x172b83ff)); + asm("mulhwu %0,%1,%2" : "=r" (frac) : "r" (frac), "r" (mant)); + mant += frac; + + if (exp >= 0) + return mant + (exp << 23); + + /* denormalized result */ + exp = -exp; + mant += 1 << (exp - 1); + return mant >> exp; +} + +/* + * Computes an estimate of log_2(x). The `s' argument is the 32-bit + * single-precision floating-point representation of x. + */ +static unsigned int elog2(unsigned int s) +{ + int exp, mant, lz, frac; + + exp = s & 0x7f800000; + mant = s & 0x7fffff; + if (exp == 0x7f800000) { /* Inf or NaN */ + if (mant != 0) + s |= 0x400000; /* turn NaN into QNaN */ + return s; + } + if ((exp | mant) == 0) /* +0 or -0 */ + return 0xff800000; /* return -Inf */ + + if (exp == 0) { + /* denormalized */ + asm("cntlzw %0,%1" : "=r" (lz) : "r" (mant)); + mant <<= lz - 8; + exp = (-118 - lz) << 23; + } else { + mant |= 0x800000; + exp -= 127 << 23; + } + + if (mant >= 0xb504f3) { /* 2^0.5 * 2^23 */ + exp |= 0x400000; /* 0.5 * 2^23 */ + asm("mulhwu %0,%1,%2" : "=r" (mant) + : "r" (mant), "r" (0xb504f334)); /* 2^-0.5 * 2^32 */ + } + if (mant >= 0x9837f0) { /* 2^0.25 * 2^23 */ + exp |= 0x200000; /* 0.25 * 2^23 */ + asm("mulhwu %0,%1,%2" : "=r" (mant) + : "r" (mant), "r" (0xd744fccb)); /* 2^-0.25 * 2^32 */ + } + if (mant >= 0x8b95c2) { /* 2^0.125 * 2^23 */ + exp |= 0x100000; /* 0.125 * 2^23 */ + asm("mulhwu %0,%1,%2" : "=r" (mant) + : "r" (mant), "r" (0xeac0c6e8)); /* 2^-0.125 * 2^32 */ + } + if (mant > 0x800000) { /* 1.0 * 2^23 */ + /* calculate (mant - 1) * 1.381097463 */ + /* 1.381097463 == 0.125 / (2^0.125 - 1) */ + asm("mulhwu %0,%1,%2" : "=r" (frac) + : "r" ((mant - 0x800000) << 1), "r" (0xb0c7cd3a)); + exp += frac; + } + s = exp & 0x80000000; + if (exp != 0) { + if (s) + exp = -exp; + asm("cntlzw %0,%1" : "=r" (lz) : "r" (exp)); + lz = 8 - lz; + if (lz > 0) + exp >>= lz; + else if (lz < 0) + exp <<= -lz; + s += ((lz + 126) << 23) + exp; + } + return s; +} + +#define VSCR_SAT 1 + +static int ctsxs(unsigned int x, int scale, unsigned int *vscrp) +{ + int exp, mant; + + exp = (x >> 23) & 0xff; + mant = x & 0x7fffff; + if (exp == 255 && mant != 0) + return 0; /* NaN -> 0 */ + exp = exp - 127 + scale; + if (exp < 0) + return 0; /* round towards zero */ + if (exp >= 31) { + /* saturate, unless the result would be -2^31 */ + if (x + (scale << 23) != 0xcf000000) + *vscrp |= VSCR_SAT; + return (x & 0x80000000)? 0x80000000: 0x7fffffff; + } + mant |= 0x800000; + mant = (mant << 7) >> (30 - exp); + return (x & 0x80000000)? -mant: mant; +} + +static unsigned int ctuxs(unsigned int x, int scale, unsigned int *vscrp) +{ + int exp; + unsigned int mant; + + exp = (x >> 23) & 0xff; + mant = x & 0x7fffff; + if (exp == 255 && mant != 0) + return 0; /* NaN -> 0 */ + exp = exp - 127 + scale; + if (exp < 0) + return 0; /* round towards zero */ + if (x & 0x80000000) { + /* negative => saturate to 0 */ + *vscrp |= VSCR_SAT; + return 0; + } + if (exp >= 32) { + /* saturate */ + *vscrp |= VSCR_SAT; + return 0xffffffff; + } + mant |= 0x800000; + mant = (mant << 8) >> (31 - exp); + return mant; +} + +/* Round to floating integer, towards 0 */ +static unsigned int rfiz(unsigned int x) +{ + int exp; + + exp = ((x >> 23) & 0xff) - 127; + if (exp == 128 && (x & 0x7fffff) != 0) + return x | 0x400000; /* NaN -> make it a QNaN */ + if (exp >= 23) + return x; /* it's an integer already (or Inf) */ + if (exp < 0) + return x & 0x80000000; /* |x| < 1.0 rounds to 0 */ + return x & ~(0x7fffff >> exp); +} + +/* Round to floating integer, towards +/- Inf */ +static unsigned int rfii(unsigned int x) +{ + int exp, mask; + + exp = ((x >> 23) & 0xff) - 127; + if (exp == 128 && (x & 0x7fffff) != 0) + return x | 0x400000; /* NaN -> make it a QNaN */ + if (exp >= 23) + return x; /* it's an integer already (or Inf) */ + if ((x & 0x7fffffff) == 0) + return x; /* +/-0 -> +/-0 */ + if (exp < 0) + /* 0 < |x| < 1.0 rounds to +/- 1.0 */ + return (x & 0x80000000) | 0x3f800000; + mask = 0x7fffff >> exp; + /* mantissa overflows into exponent - that's OK, + it can't overflow into the sign bit */ + return (x + mask) & ~mask; +} + +/* Round to floating integer, to nearest */ +static unsigned int rfin(unsigned int x) +{ + int exp, half; + + exp = ((x >> 23) & 0xff) - 127; + if (exp == 128 && (x & 0x7fffff) != 0) + return x | 0x400000; /* NaN -> make it a QNaN */ + if (exp >= 23) + return x; /* it's an integer already (or Inf) */ + if (exp < -1) + return x & 0x80000000; /* |x| < 0.5 -> +/-0 */ + if (exp == -1) + /* 0.5 <= |x| < 1.0 rounds to +/- 1.0 */ + return (x & 0x80000000) | 0x3f800000; + half = 0x400000 >> exp; + /* add 0.5 to the magnitude and chop off the fraction bits */ + return (x + half) & ~(0x7fffff >> exp); +} + +int +emulate_altivec(struct pt_regs *regs) +{ + unsigned int instr, i; + unsigned int va, vb, vc, vd; + vector128 *vrs; + + if (get_user(instr, (unsigned int *) regs->nip)) + return -EFAULT; + if ((instr >> 26) != 4) + return -EINVAL; /* not an altivec instruction */ + vd = (instr >> 21) & 0x1f; + va = (instr >> 16) & 0x1f; + vb = (instr >> 11) & 0x1f; + vc = (instr >> 6) & 0x1f; + + vrs = current->thread.vr; + switch (instr & 0x3f) { + case 10: + switch (vc) { + case 0: /* vaddfp */ + vaddfp(&vrs[vd], &vrs[va], &vrs[vb]); + break; + case 1: /* vsubfp */ + vsubfp(&vrs[vd], &vrs[va], &vrs[vb]); + break; + case 4: /* vrefp */ + vrefp(&vrs[vd], &vrs[vb]); + break; + case 5: /* vrsqrtefp */ + vrsqrtefp(&vrs[vd], &vrs[vb]); + break; + case 6: /* vexptefp */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = eexp2(vrs[vb].u[i]); + break; + case 7: /* vlogefp */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = elog2(vrs[vb].u[i]); + break; + case 8: /* vrfin */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = rfin(vrs[vb].u[i]); + break; + case 9: /* vrfiz */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = rfiz(vrs[vb].u[i]); + break; + case 10: /* vrfip */ + for (i = 0; i < 4; ++i) { + u32 x = vrs[vb].u[i]; + x = (x & 0x80000000)? rfiz(x): rfii(x); + vrs[vd].u[i] = x; + } + break; + case 11: /* vrfim */ + for (i = 0; i < 4; ++i) { + u32 x = vrs[vb].u[i]; + x = (x & 0x80000000)? rfii(x): rfiz(x); + vrs[vd].u[i] = x; + } + break; + case 14: /* vctuxs */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = ctuxs(vrs[vb].u[i], va, + ¤t->thread.vscr.u[3]); + break; + case 15: /* vctsxs */ + for (i = 0; i < 4; ++i) + vrs[vd].u[i] = ctsxs(vrs[vb].u[i], va, + ¤t->thread.vscr.u[3]); + break; + default: + return -EINVAL; + } + break; + case 46: /* vmaddfp */ + vmaddfp(&vrs[vd], &vrs[va], &vrs[vb], &vrs[vc]); + break; + case 47: /* vnmsubfp */ + vnmsubfp(&vrs[vd], &vrs[va], &vrs[vb], &vrs[vc]); + break; + default: + return -EINVAL; + } + + return 0; +} diff -Nru a/arch/ppc/kernel/vector.S b/arch/ppc/kernel/vector.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/kernel/vector.S Tue May 18 23:38:09 2004 @@ -0,0 +1,217 @@ +#include +#include + +/* + * The routines below are in assembler so we can closely control the + * usage of floating-point registers. These routines must be called + * with preempt disabled. + */ + .data +fpzero: + .long 0 +fpone: + .long 0x3f800000 /* 1.0 in single-precision FP */ +fphalf: + .long 0x3f000000 /* 0.5 in single-precision FP */ + + .text +/* + * Internal routine to enable floating point and set FPSCR to 0. + * Don't call it from C; it doesn't use the normal calling convention. + */ +fpenable: + mfmsr r10 + ori r11,r10,MSR_FP + mtmsr r11 + isync + stfd fr0,24(r1) + stfd fr1,16(r1) + stfd fr31,8(r1) + lis r11,fpzero@ha + mffs fr31 + lfs fr1,fpzero@l(r11) + mtfsf 0xff,fr1 + blr + +fpdisable: + mtfsf 0xff,fr31 + lfd fr31,8(r1) + lfd fr1,16(r1) + lfd fr0,24(r1) + mtmsr r10 + isync + blr + +/* + * Vector add, floating point. + */ + .globl vaddfp +vaddfp: + stwu r1,-32(r1) + mflr r0 + stw r0,36(r1) + bl fpenable + li r0,4 + mtctr r0 + li r6,0 +1: lfsx fr0,r4,r6 + lfsx fr1,r5,r6 + fadds fr0,fr0,fr1 + stfsx fr0,r3,r6 + addi r6,r6,4 + bdnz 1b + bl fpdisable + lwz r0,36(r1) + mtlr r0 + addi r1,r1,32 + blr + +/* + * Vector subtract, floating point. + */ + .globl vsubfp +vsubfp: + stwu r1,-32(r1) + mflr r0 + stw r0,36(r1) + bl fpenable + li r0,4 + mtctr r0 + li r6,0 +1: lfsx fr0,r4,r6 + lfsx fr1,r5,r6 + fsubs fr0,fr0,fr1 + stfsx fr0,r3,r6 + addi r6,r6,4 + bdnz 1b + bl fpdisable + lwz r0,36(r1) + mtlr r0 + addi r1,r1,32 + blr + +/* + * Vector multiply and add, floating point. + */ + .globl vmaddfp +vmaddfp: + stwu r1,-48(r1) + mflr r0 + stw r0,52(r1) + bl fpenable + stfd fr2,32(r1) + li r0,4 + mtctr r0 + li r7,0 +1: lfsx fr0,r4,r7 + lfsx fr1,r5,r7 + lfsx fr2,r6,r7 + fmadds fr0,fr0,fr1,fr2 + stfsx fr0,r3,r7 + addi r7,r7,4 + bdnz 1b + lfd fr2,32(r1) + bl fpdisable + lwz r0,52(r1) + mtlr r0 + addi r1,r1,48 + blr + +/* + * Vector negative multiply and subtract, floating point. + */ + .globl vnmsubfp +vnmsubfp: + stwu r1,-48(r1) + mflr r0 + stw r0,52(r1) + bl fpenable + stfd fr2,32(r1) + li r0,4 + mtctr r0 + li r7,0 +1: lfsx fr0,r4,r7 + lfsx fr1,r5,r7 + lfsx fr2,r6,r7 + fnmsubs fr0,fr0,fr1,fr2 + stfsx fr0,r3,r7 + addi r7,r7,4 + bdnz 1b + lfd fr2,32(r1) + bl fpdisable + lwz r0,52(r1) + mtlr r0 + addi r1,r1,48 + blr + +/* + * Vector reciprocal estimate. We just compute 1.0/x. + * r3 -> destination, r4 -> source. + */ + .globl vrefp +vrefp: + stwu r1,-32(r1) + mflr r0 + stw r0,36(r1) + bl fpenable + lis r9,fpone@ha + li r0,4 + lfs fr1,fpone@l(r9) + mtctr r0 + li r6,0 +1: lfsx fr0,r4,r6 + fdivs fr0,fr1,fr0 + stfsx fr0,r3,r6 + addi r6,r6,4 + bdnz 1b + bl fpdisable + lwz r0,36(r1) + mtlr r0 + addi r1,r1,32 + blr + +/* + * Vector reciprocal square-root estimate, floating point. + * We use the frsqrte instruction for the initial estimate followed + * by 2 iterations of Newton-Raphson to get sufficient accuracy. + * r3 -> destination, r4 -> source. + */ + .globl vrsqrtefp +vrsqrtefp: + stwu r1,-48(r1) + mflr r0 + stw r0,52(r1) + bl fpenable + stfd fr2,32(r1) + stfd fr3,40(r1) + stfd fr4,48(r1) + stfd fr5,56(r1) + lis r9,fpone@ha + lis r8,fphalf@ha + li r0,4 + lfs fr4,fpone@l(r9) + lfs fr5,fphalf@l(r8) + mtctr r0 + li r6,0 +1: lfsx fr0,r4,r6 + frsqrte fr1,fr0 /* r = frsqrte(s) */ + fmuls fr3,fr1,fr0 /* r * s */ + fmuls fr2,fr1,fr5 /* r * 0.5 */ + fnmsubs fr3,fr1,fr3,fr4 /* 1 - s * r * r */ + fmadds fr1,fr2,fr3,fr1 /* r = r + 0.5 * r * (1 - s * r * r) */ + fmuls fr3,fr1,fr0 /* r * s */ + fmuls fr2,fr1,fr5 /* r * 0.5 */ + fnmsubs fr3,fr1,fr3,fr4 /* 1 - s * r * r */ + fmadds fr1,fr2,fr3,fr1 /* r = r + 0.5 * r * (1 - s * r * r) */ + stfsx fr1,r3,r6 + addi r6,r6,4 + bdnz 1b + lfd fr5,56(r1) + lfd fr4,48(r1) + lfd fr3,40(r1) + lfd fr2,32(r1) + bl fpdisable + lwz r0,36(r1) + mtlr r0 + addi r1,r1,32 + blr diff -Nru a/arch/ppc/lib/string.S b/arch/ppc/lib/string.S --- a/arch/ppc/lib/string.S Tue May 18 23:38:08 2004 +++ b/arch/ppc/lib/string.S Tue May 18 23:38:08 2004 @@ -436,48 +436,57 @@ 73: stwu r9,4(r6) bdnz 72b + .section __ex_table,"a" + .align 2 + .long 70b,100f + .long 71b,101f + .long 72b,102f + .long 73b,103f + .text + 58: srwi. r0,r5,LG_CACHELINE_BYTES /* # complete cachelines */ clrlwi r5,r5,32-LG_CACHELINE_BYTES li r11,4 beq 63f -#if !defined(CONFIG_8xx) +#ifdef CONFIG_8xx + /* Don't use prefetch on 8xx */ + mtctr r0 +53: COPY_16_BYTES_WITHEX(0) + bdnz 53b + +#else /* not CONFIG_8xx */ /* Here we decide how far ahead to prefetch the source */ + li r3,4 + cmpwi r0,1 + li r7,0 + ble 114f + li r7,1 #if MAX_COPY_PREFETCH > 1 /* Heuristically, for large transfers we prefetch MAX_COPY_PREFETCH cachelines ahead. For small transfers we prefetch 1 cacheline ahead. */ cmpwi r0,MAX_COPY_PREFETCH - li r7,1 - li r3,4 - ble 111f + ble 112f li r7,MAX_COPY_PREFETCH -111: mtctr r7 -112: dcbt r3,r4 +112: mtctr r7 +111: dcbt r3,r4 addi r3,r3,CACHELINE_BYTES - bdnz 112b -#else /* MAX_COPY_PREFETCH == 1 */ - li r3,CACHELINE_BYTES + 4 - dcbt r11,r4 -#endif /* MAX_COPY_PREFETCH */ -#endif /* CONFIG_8xx */ - - mtctr r0 -53: -#if !defined(CONFIG_8xx) + bdnz 111b +#else dcbt r3,r4 + addi r3,r3,CACHELINE_BYTES +#endif /* MAX_COPY_PREFETCH > 1 */ + +114: subf r8,r7,r0 + mr r0,r7 + mtctr r8 + +53: dcbt r3,r4 54: dcbz r11,r6 -#endif -/* had to move these to keep extable in order */ .section __ex_table,"a" .align 2 - .long 70b,100f - .long 71b,101f - .long 72b,102f - .long 73b,103f -#if !defined(CONFIG_8xx) .long 54b,105f -#endif .text /* the main body of the cacheline loop */ COPY_16_BYTES_WITHEX(0) @@ -495,6 +504,11 @@ #endif #endif bdnz 53b + cmpwi r0,0 + li r3,4 + li r7,0 + bne 114b +#endif /* CONFIG_8xx */ 63: srwi. r0,r5,2 mtctr r0 diff -Nru a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c --- a/arch/ppc/mm/fault.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/mm/fault.c Tue May 18 23:38:06 2004 @@ -51,11 +51,6 @@ unsigned long pte_errors; /* updated by do_page_fault() */ unsigned int probingmem; -extern void die_if_kernel(char *, struct pt_regs *, long); -void bad_page_fault(struct pt_regs *, unsigned long, int sig); -void do_page_fault(struct pt_regs *, unsigned long, unsigned long); -extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); - /* * Check whether the instruction at regs->nip is a store using * an update addressing form which will update r1. @@ -227,8 +222,7 @@ struct page *page = pte_page(*ptep); if (! test_bit(PG_arch_1, &page->flags)) { - unsigned long phys = page_to_pfn(page) << PAGE_SHIFT; - __flush_dcache_icache_phys(phys); + flush_dcache_icache_page(page); set_bit(PG_arch_1, &page->flags); } pte_update(ptep, 0, _PAGE_HWEXEC); @@ -332,7 +326,6 @@ void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig) { - extern void die(const char *,struct pt_regs *,long); const struct exception_table_entry *entry; /* Are we prepared to handle this fault? */ @@ -359,7 +352,6 @@ pgd_t *dir; pmd_t *pmd; pte_t *pte; - struct mm_struct *mm; if (address < TASK_SIZE) return NULL; diff -Nru a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c --- a/arch/ppc/mm/init.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/mm/init.c Tue May 18 23:38:06 2004 @@ -458,7 +458,7 @@ ClearPageReserved(page); set_bit(PG_highmem, &page->flags); - atomic_set(&page->count, 1); + set_page_count(page, 1); __free_page(page); totalhigh_pages++; } @@ -572,6 +572,16 @@ clear_bit(PG_arch_1, &page->flags); } +void flush_dcache_icache_page(struct page *page) +{ +#ifdef CONFIG_BOOKE + __flush_dcache_icache(kmap(page)); + kunmap(page); +#else + __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT); +#endif + +} void clear_user_page(void *page, unsigned long vaddr, struct page *pg) { clear_page(page); @@ -614,7 +624,7 @@ if (vma->vm_mm == current->active_mm) __flush_dcache_icache((void *) address); else - __flush_dcache_icache_phys(pfn << PAGE_SHIFT); + flush_dcache_icache_page(page); set_bit(PG_arch_1, &page->flags); } } diff -Nru a/arch/ppc/mm/mem_pieces.c b/arch/ppc/mm/mem_pieces.c --- a/arch/ppc/mm/mem_pieces.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/mm/mem_pieces.c Tue May 18 23:38:05 2004 @@ -120,23 +120,6 @@ printk("\n"); } -#if defined(CONFIG_APUS) || defined(CONFIG_PPC_OF) -/* - * Add some memory to an array of pieces - */ -void __init -mem_pieces_append(struct mem_pieces *mp, unsigned int start, unsigned int size) -{ - struct reg_property *rp; - - if (mp->n_regions >= MEM_PIECES_MAX) - return; - rp = &mp->regions[mp->n_regions++]; - rp->address = start; - rp->size = size; -} -#endif /* CONFIG_APUS || CONFIG_PPC_OF */ - void __init mem_pieces_sort(struct mem_pieces *mp) { diff -Nru a/arch/ppc/mm/mem_pieces.h b/arch/ppc/mm/mem_pieces.h --- a/arch/ppc/mm/mem_pieces.h Tue May 18 23:38:05 2004 +++ b/arch/ppc/mm/mem_pieces.h Tue May 18 23:38:05 2004 @@ -38,8 +38,6 @@ extern void *mem_pieces_find(unsigned int size, unsigned int align); extern void mem_pieces_remove(struct mem_pieces *mp, unsigned int start, unsigned int size, int must_exist); -extern void mem_pieces_append(struct mem_pieces *mp, unsigned int start, - unsigned int size); extern void mem_pieces_coalesce(struct mem_pieces *mp); extern void mem_pieces_sort(struct mem_pieces *mp); diff -Nru a/arch/ppc/ocp/Makefile b/arch/ppc/ocp/Makefile --- a/arch/ppc/ocp/Makefile Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,6 +0,0 @@ -# -# Makefile for the linux kernel. -# - -obj-y := ocp.o ocp-driver.o ocp-probe.o - diff -Nru a/arch/ppc/ocp/ocp-driver.c b/arch/ppc/ocp/ocp-driver.c --- a/arch/ppc/ocp/ocp-driver.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,195 +0,0 @@ -/* - * FILE NAME: ocp-driver.c - * - * BRIEF MODULE DESCRIPTION: - * driver callback, id matching and registration - * Based on drivers/pci/pci-driver, Copyright (c) 1997--1999 Martin Mares - * - * Maintained by: Armin - * - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -/* - * Registration of OCP drivers and handling of hot-pluggable devices. - */ - -static int -ocp_device_probe(struct device *dev) -{ - int error = 0; - struct ocp_driver *drv; - struct ocp_device *ocp_dev; - - drv = to_ocp_driver(dev->driver); - ocp_dev = to_ocp_dev(dev); - - if (drv->probe) { - error = drv->probe(ocp_dev); - DBG("probe return code %d\n", error); - if (error >= 0) { - ocp_dev->driver = drv; - error = 0; - } - } - return error; -} - -static int -ocp_device_remove(struct device *dev) -{ - struct ocp_device *ocp_dev = to_ocp_dev(dev); - - if (ocp_dev->driver) { - if (ocp_dev->driver->remove) - ocp_dev->driver->remove(ocp_dev); - ocp_dev->driver = NULL; - } - return 0; -} - -static int -ocp_device_suspend(struct device *dev, u32 state, u32 level) -{ - struct ocp_device *ocp_dev = to_ocp_dev(dev); - - int error = 0; - - if (ocp_dev->driver) { - if (level == SUSPEND_SAVE_STATE && ocp_dev->driver->save_state) - error = ocp_dev->driver->save_state(ocp_dev, state); - else if (level == SUSPEND_POWER_DOWN - && ocp_dev->driver->suspend) - error = ocp_dev->driver->suspend(ocp_dev, state); - } - return error; -} - -static int -ocp_device_resume(struct device *dev, u32 level) -{ - struct ocp_device *ocp_dev = to_ocp_dev(dev); - - if (ocp_dev->driver) { - if (level == RESUME_POWER_ON && ocp_dev->driver->resume) - ocp_dev->driver->resume(ocp_dev); - } - return 0; -} - -/** - * ocp_bus_match - Works out whether an OCP device matches any - * of the IDs listed for a given OCP driver. - * @dev: the generic device struct for the OCP device - * @drv: the generic driver struct for the OCP driver - * - * Used by a driver to check whether a OCP device present in the - * system is in its list of supported devices. Returns 1 for a - * match, or 0 if there is no match. - */ -static int -ocp_bus_match(struct device *dev, struct device_driver *drv) -{ - struct ocp_device *ocp_dev = to_ocp_dev(dev); - struct ocp_driver *ocp_drv = to_ocp_driver(drv); - const struct ocp_device_id *ids = ocp_drv->id_table; - - if (!ids) - return 0; - - while (ids->vendor || ids->device) { - if ((ids->vendor == OCP_ANY_ID - || ids->vendor == ocp_dev->vendor) - && (ids->device == OCP_ANY_ID - || ids->device == ocp_dev->device)) { - DBG("Bus match -vendor:%x device:%x\n", ids->vendor, - ids->device); - return 1; - } - ids++; - } - return 0; -} - -struct bus_type ocp_bus_type = { - .name = "ocp", - .match = ocp_bus_match, -}; - -static int __init -ocp_driver_init(void) -{ - return bus_register(&ocp_bus_type); -} - -postcore_initcall(ocp_driver_init); - -/** - * ocp_register_driver - register a new ocp driver - * @drv: the driver structure to register - * - * Adds the driver structure to the list of registered drivers - * Returns the number of ocp devices which were claimed by the driver - * during registration. The driver remains registered even if the - * return value is zero. - */ -int -ocp_register_driver(struct ocp_driver *drv) -{ - int count = 0; - - /* initialize common driver fields */ - drv->driver.name = drv->name; - drv->driver.bus = &ocp_bus_type; - drv->driver.probe = ocp_device_probe; - drv->driver.resume = ocp_device_resume; - drv->driver.suspend = ocp_device_suspend; - drv->driver.remove = ocp_device_remove; - - /* register with core */ - count = driver_register(&drv->driver); - return count ? count : 1; -} - -/** - * ocp_unregister_driver - unregister a ocp driver - * @drv: the driver structure to unregister - * - * Deletes the driver structure from the list of registered OCP drivers, - * gives it a chance to clean up by calling its remove() function for - * each device it was responsible for, and marks those devices as - * driverless. - */ - -void -ocp_unregister_driver(struct ocp_driver *drv) -{ - driver_unregister(&drv->driver); -} - -EXPORT_SYMBOL(ocp_register_driver); -EXPORT_SYMBOL(ocp_unregister_driver); -EXPORT_SYMBOL(ocp_bus_type); diff -Nru a/arch/ppc/ocp/ocp-probe.c b/arch/ppc/ocp/ocp-probe.c --- a/arch/ppc/ocp/ocp-probe.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,113 +0,0 @@ -/* - * FILE NAME: ocp-probe.c - * - * BRIEF MODULE DESCRIPTION: - * Device scanning & bus set routines - * Based on drivers/pci/probe, Copyright (c) 1997--1999 Martin Mares - * - * Maintained by: Armin - * - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include -#include - -LIST_HEAD(ocp_devices); -struct device *ocp_bus; - -static struct ocp_device * __devinit -ocp_setup_dev(struct ocp_def *odef, unsigned int index) -{ - struct ocp_device *dev; - - dev = kmalloc(sizeof(*dev), GFP_KERNEL); - if (!dev) - return NULL; - memset(dev, 0, sizeof(*dev)); - - dev->vendor = odef->vendor; - dev->device = odef->device; - dev->num = ocp_get_num(dev->device); - dev->paddr = odef->paddr; - dev->irq = odef->irq; - dev->pm = odef->pm; - dev->current_state = 4; - - sprintf(dev->name, "OCP device %04x:%04x", dev->vendor, dev->device); - - DBG("%s %s 0x%lx irq:%d pm:0x%lx \n", dev->slot_name, dev->name, - (unsigned long) dev->paddr, dev->irq, dev->pm); - - /* now put in global tree */ - sprintf(dev->dev.bus_id, "%d", index); - dev->dev.parent = ocp_bus; - dev->dev.bus = &ocp_bus_type; - device_register(&dev->dev); - - return dev; -} - -static struct device * __devinit ocp_alloc_primary_bus(void) -{ - struct device *b; - - b = kmalloc(sizeof(struct device), GFP_KERNEL); - if (b == NULL) - return NULL; - memset(b, 0, sizeof(struct device)); - strcpy(b->bus_id, "ocp"); - - device_register(b); - - return b; -} - -void __devinit ocp_setup_devices(struct ocp_def *odef) -{ - int index; - struct ocp_device *dev; - - if (ocp_bus == NULL) - ocp_bus = ocp_alloc_primary_bus(); - for (index = 0; odef->vendor != OCP_VENDOR_INVALID; ++index, ++odef) { - dev = ocp_setup_dev(odef, index); - if (dev != NULL) - list_add_tail(&dev->global_list, &ocp_devices); - } -} - -extern struct ocp_def core_ocp[]; - -static int __init -ocparch_init(void) -{ - ocp_setup_devices(core_ocp); - return 0; -} - -subsys_initcall(ocparch_init); - -EXPORT_SYMBOL(ocp_devices); diff -Nru a/arch/ppc/ocp/ocp.c b/arch/ppc/ocp/ocp.c --- a/arch/ppc/ocp/ocp.c Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,109 +0,0 @@ -/* - * ocp.c - * - * The is drived from pci.c - * - * Current Maintainer - * Armin Kuster akuster@dslextreme.com - * Jan, 2002 - * - * - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * ocp_get_num - This determines how many OCP devices of a given - * device are registered - * @device: OCP device such as HOST, PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII, - * - * The routine returns the number that devices which is registered - */ -unsigned int ocp_get_num(unsigned int device) -{ - unsigned int count = 0; - struct ocp_device *ocp; - struct list_head *ocp_l; - - list_for_each(ocp_l, &ocp_devices) { - ocp = list_entry(ocp_l, struct ocp_device, global_list); - if (device == ocp->device) - count++; - } - return count; -} - -/** - * ocp_get_dev - get ocp driver pointer for ocp device and instance of it - * @device: OCP device such as PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII - * @dev_num: ocp device number whos paddr you want - * - * The routine returns ocp device pointer - * in list based on device and instance of that device - * - */ -struct ocp_device * -ocp_get_dev(unsigned int device, int dev_num) -{ - struct ocp_device *ocp; - struct list_head *ocp_l; - int count = 0; - - list_for_each(ocp_l, &ocp_devices) { - ocp = list_entry(ocp_l, struct ocp_device, global_list); - if (device == ocp->device) { - if (dev_num == count) - return ocp; - count++; - } - } - return NULL; -} - -EXPORT_SYMBOL(ocp_get_dev); -EXPORT_SYMBOL(ocp_get_num); - -#ifdef CONFIG_PM -int ocp_generic_suspend(struct ocp_device *pdev, u32 state) -{ - ocp_force_power_off(pdev); - return 0; -} - -int ocp_generic_resume(struct ocp_device *pdev) -{ - ocp_force_power_on(pdev); -} - -EXPORT_SYMBOL(ocp_generic_suspend); -EXPORT_SYMBOL(ocp_generic_resume); -#endif /* CONFIG_PM */ diff -Nru a/arch/ppc/platforms/4xx/Kconfig b/arch/ppc/platforms/4xx/Kconfig --- a/arch/ppc/platforms/4xx/Kconfig Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/Kconfig Tue May 18 23:38:05 2004 @@ -16,6 +16,11 @@ help This option enables support for the IBM NP405H evaluation board. +config BUBINGA + bool "Bubinga" + help + This option enables support for the IBM 405EP evaluation board. + config CPCI405 bool "CPCI405" help @@ -122,7 +127,7 @@ config IBM_OCP bool - depends on ASH || CPCI405 || EBONY || EP405 || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT + depends on ASH || BUBINGA || CPCI405 || EBONY || EP405 || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT default y config IBM_EMAC4 @@ -132,7 +137,7 @@ config BIOS_FIXUP bool - depends on EP405 || SYCAMORE || WALNUT + depends on BUBINGA || EP405 || SYCAMORE || WALNUT default y config 403GCX @@ -140,6 +145,11 @@ depends OAK default y +config 405EP + bool + depends on BUBINGA + default y + config 405GP bool depends on CPCI405 || EP405 || WALNUT @@ -148,6 +158,7 @@ config 405GPR bool depends on SYCAMORE + default y config STB03xxx bool @@ -161,7 +172,7 @@ config IBM_OPENBIOS bool - depends on ASH || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT + depends on ASH || BUBINGA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT default y config PM diff -Nru a/arch/ppc/platforms/4xx/Makefile b/arch/ppc/platforms/4xx/Makefile --- a/arch/ppc/platforms/4xx/Makefile Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/4xx/Makefile Tue May 18 23:38:09 2004 @@ -5,6 +5,7 @@ obj-$(CONFIG_CPCI405) += cpci405.o obj-$(CONFIG_EBONY) += ebony.o obj-$(CONFIG_EP405) += ep405.o +obj-$(CONFIG_BUBINGA) += bubinga.o obj-$(CONFIG_OAK) += oak.o obj-$(CONFIG_OCOTEA) += ocotea.o obj-$(CONFIG_REDWOOD_5) += redwood5.o @@ -16,6 +17,7 @@ obj-$(CONFIG_REDWOOD_5) += ibmstb4.o obj-$(CONFIG_NP405H) += ibmnp405h.o obj-$(CONFIG_REDWOOD_6) += ibmstbx25.o -obj-$(CONFIG_EBONY) += ibm440gp.o -obj-$(CONFIG_OCOTEA) += ibm440gx.o +obj-$(CONFIG_440GP) += ibm440gp.o +obj-$(CONFIG_440GX) += ibm440gx.o +obj-$(CONFIG_405EP) += ibm405ep.o obj-$(CONFIG_405GPR) += ibm405gpr.o diff -Nru a/arch/ppc/platforms/4xx/ash.c b/arch/ppc/platforms/4xx/ash.c --- a/arch/ppc/platforms/4xx/ash.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ash.c Tue May 18 23:38:05 2004 @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include #ifdef DEBUG @@ -53,10 +55,10 @@ void __init ash_setup_arch(void) { - bd_t *bip = &__res; - ppc4xx_setup_arch(); + ibm_ocp_set_emac(0, 3); + #ifdef CONFIG_DEBUG_BRINGUP int i; printk("\n"); @@ -96,8 +98,6 @@ void __init bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip) { - - unsigned int bar_response, bar; /* * Expected PCI mapping: * diff -Nru a/arch/ppc/platforms/4xx/ash.h b/arch/ppc/platforms/4xx/ash.h --- a/arch/ppc/platforms/4xx/ash.h Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ash.h Tue May 18 23:38:05 2004 @@ -15,7 +15,6 @@ #ifdef __KERNEL__ #ifndef __ASM_ASH_H__ #define __ASM_ASH_H__ -#include #include #ifndef __ASSEMBLY__ diff -Nru a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/platforms/4xx/bubinga.c Tue May 18 23:38:09 2004 @@ -0,0 +1,263 @@ +/* + * Support for IBM PPC 405EP evaluation board (Bubinga). + * + * Author: SAW (IBM), derived from walnut.c. + * Maintained by MontaVista Software + * + * 2003 (c) MontaVista Softare Inc. This file is licensed under the + * terms of the GNU General Public License version 2. This program is + * licensed "as is" without any warranty of any kind, whether express + * or implied. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#undef DEBUG + +#ifdef DEBUG +#define DBG(x...) printk(x) +#else +#define DBG(x...) +#endif + +extern bd_t __res; + +void *bubinga_rtc_base; + +/* Some IRQs unique to the board + * Used by the generic 405 PCI setup functions in ppc4xx_pci.c + */ +int __init +ppc405_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin) +{ + static char pci_irq_table[][4] = + /* + * PCI IDSEL/INTPIN->INTLINE + * A B C D + */ + { + {28, 28, 28, 28}, /* IDSEL 1 - PCI slot 1 */ + {29, 29, 29, 29}, /* IDSEL 2 - PCI slot 2 */ + {30, 30, 30, 30}, /* IDSEL 3 - PCI slot 3 */ + {31, 31, 31, 31}, /* IDSEL 4 - PCI slot 4 */ + }; + + const long min_idsel = 1, max_idsel = 4, irqs_per_slot = 4; + return PCI_IRQ_TABLE_LOOKUP; +}; + +/* The serial clock for the chip is an internal clock determined by + * different clock speeds/dividers. + * Calculate the proper input baud rate and setup the serial driver. + */ +static void __init +bubinga_early_serial_map(void) +{ + u32 uart_div; + int uart_clock; + struct uart_port port; + + /* Calculate the serial clock input frequency + * + * The base baud is the PLL OUTA (provided in the board info + * structure) divided by the external UART Divisor, divided + * by 16. + */ + uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV); + uart_clock = __res.bi_pllouta_freq / uart_div; + + /* Setup serial port access */ + memset(&port, 0, sizeof(port)); + port.membase = (void*)ACTING_UART0_IO_BASE; + port.irq = ACTING_UART0_INT; + port.uartclk = uart_clock; + port.regshift = 0; + port.iotype = SERIAL_IO_MEM; + port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; + port.line = 0; + + if (early_serial_setup(&port) != 0) { + printk("Early serial init of port 0 failed\n"); + } + + port.membase = (void*)ACTING_UART1_IO_BASE; + port.irq = ACTING_UART1_INT; + port.line = 1; + + if (early_serial_setup(&port) != 0) { + printk("Early serial init of port 1 failed\n"); + } +} + +void __init +bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip) +{ + + unsigned int bar_response, bar; + /* + * Expected PCI mapping: + * + * PLB addr PCI memory addr + * --------------------- --------------------- + * 0000'0000 - 7fff'ffff <--- 0000'0000 - 7fff'ffff + * 8000'0000 - Bfff'ffff ---> 8000'0000 - Bfff'ffff + * + * PLB addr PCI io addr + * --------------------- --------------------- + * e800'0000 - e800'ffff ---> 0000'0000 - 0001'0000 + * + * The following code is simplified by assuming that the bootrom + * has been well behaved in following this mapping. + */ + +#ifdef DEBUG + int i; + + printk("ioremap PCLIO_BASE = 0x%x\n", pcip); + printk("PCI bridge regs before fixup \n"); + for (i = 0; i <= 3; i++) { + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha))); + } + printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms))); + printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la))); + printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms))); + printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la))); + +#endif + + /* added for IBM boot rom version 1.15 bios bar changes -AK */ + + /* Disable region first */ + out_le32((void *) &(pcip->pmm[0].ma), 0x00000000); + /* PLB starting addr, PCI: 0x80000000 */ + out_le32((void *) &(pcip->pmm[0].la), 0x80000000); + /* PCI start addr, 0x80000000 */ + out_le32((void *) &(pcip->pmm[0].pcila), PPC405_PCI_MEM_BASE); + /* 512MB range of PLB to PCI */ + out_le32((void *) &(pcip->pmm[0].pciha), 0x00000000); + /* Enable no pre-fetch, enable region */ + out_le32((void *) &(pcip->pmm[0].ma), ((0xffffffff - + (PPC405_PCI_UPPER_MEM - + PPC405_PCI_MEM_BASE)) | 0x01)); + + /* Disable region one */ + out_le32((void *) &(pcip->pmm[1].ma), 0x00000000); + out_le32((void *) &(pcip->pmm[1].la), 0x00000000); + out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000); + out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000); + out_le32((void *) &(pcip->pmm[1].ma), 0x00000000); + out_le32((void *) &(pcip->ptm1ms), 0x00000001); + + /* Disable region two */ + out_le32((void *) &(pcip->pmm[2].ma), 0x00000000); + out_le32((void *) &(pcip->pmm[2].la), 0x00000000); + out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000); + out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000); + out_le32((void *) &(pcip->pmm[2].ma), 0x00000000); + out_le32((void *) &(pcip->ptm2ms), 0x00000000); + out_le32((void *) &(pcip->ptm2la), 0x00000000); + + /* Zero config bars */ + for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) { + early_write_config_dword(hose, hose->first_busno, + PCI_FUNC(hose->first_busno), bar, + 0x00000000); + early_read_config_dword(hose, hose->first_busno, + PCI_FUNC(hose->first_busno), bar, + &bar_response); + DBG("BUS %d, device %d, Function %d bar 0x%8.8x is 0x%8.8x\n", + hose->first_busno, PCI_SLOT(hose->first_busno), + PCI_FUNC(hose->first_busno), bar, bar_response); + } + /* end work arround */ + +#ifdef DEBUG + printk("PCI bridge regs after fixup \n"); + for (i = 0; i <= 3; i++) { + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila))); + printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha))); + } + printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms))); + printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la))); + printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms))); + printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la))); + +#endif +} + +void __init +bubinga_setup_arch(void) +{ + ppc4xx_setup_arch(); + + ibm_ocp_set_emac(0, 1); + + bubinga_early_serial_map(); + + /* RTC step for the evb405ep */ + bubinga_rtc_base = (void *) BUBINGA_RTC_VADDR; + TODC_INIT(TODC_TYPE_DS1743, bubinga_rtc_base, bubinga_rtc_base, + bubinga_rtc_base, 8); + /* Identify the system */ + printk("IBM Bubinga port (MontaVista Software, Inc. )\n"); +} + +void __init +bubinga_map_io(void) +{ + ppc4xx_map_io(); + io_block_mapping(BUBINGA_RTC_VADDR, + BUBINGA_RTC_PADDR, BUBINGA_RTC_SIZE, _PAGE_IO); +} + +void __init +platform_init(unsigned long r3, unsigned long r4, unsigned long r5, + unsigned long r6, unsigned long r7) +{ + ppc4xx_init(r3, r4, r5, r6, r7); + + ppc_md.setup_arch = bubinga_setup_arch; + ppc_md.setup_io_mappings = bubinga_map_io; + +#ifdef CONFIG_GEN_RTC + ppc_md.time_init = todc_time_init; + ppc_md.set_rtc_time = todc_set_rtc_time; + ppc_md.get_rtc_time = todc_get_rtc_time; + ppc_md.nvram_read_val = todc_direct_read_val; + ppc_md.nvram_write_val = todc_direct_write_val; +#endif +#ifdef CONFIG_KGDB + ppc_md.early_serial_map = bubinga_early_serial_map; +#endif +} + diff -Nru a/arch/ppc/platforms/4xx/bubinga.h b/arch/ppc/platforms/4xx/bubinga.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/platforms/4xx/bubinga.h Tue May 18 23:38:09 2004 @@ -0,0 +1,69 @@ +/* + * Support for IBM PPC 405EP evaluation board (Bubinga). + * + * Author: SAW (IBM), derived from walnut.h. + * Maintained by MontaVista Software + * + * 2003 (c) MontaVista Softare Inc. This file is licensed under the + * terms of the GNU General Public License version 2. This program is + * licensed "as is" without any warranty of any kind, whether express + * or implied. + */ + +#ifdef __KERNEL__ +#ifndef __BUBINGA_H__ +#define __BUBINGA_H__ + +/* 405EP */ +#include + +#ifndef __ASSEMBLY__ +/* + * Data structure defining board information maintained by the boot + * ROM on IBM's evaluation board. An effort has been made to + * keep the field names consistent with the 8xx 'bd_t' board info + * structures. + */ + +typedef struct board_info { + unsigned char bi_s_version[4]; /* Version of this structure */ + unsigned char bi_r_version[30]; /* Version of the IBM ROM */ + unsigned int bi_memsize; /* DRAM installed, in bytes */ + unsigned char bi_enetaddr[2][6]; /* Local Ethernet MAC address */ unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */ + unsigned int bi_intfreq; /* Processor speed, in Hz */ + unsigned int bi_busfreq; /* PLB Bus speed, in Hz */ + unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */ + unsigned int bi_opb_busfreq; /* OPB Bus speed, in Hz */ + unsigned int bi_pllouta_freq; /* PLL OUTA speed, in Hz */ +} bd_t; + +/* Some 4xx parts use a different timebase frequency from the internal clock. +*/ +#define bi_tbfreq bi_intfreq + + +/* Memory map for the Bubinga board. + * Generic 4xx plus RTC. + */ + +extern void *bubinga_rtc_base; +#define BUBINGA_RTC_PADDR ((uint)0xf0000000) +#define BUBINGA_RTC_VADDR BUBINGA_RTC_PADDR +#define BUBINGA_RTC_SIZE ((uint)8*1024) + +/* The UART clock is based off an internal clock - + * define BASE_BAUD based on the internal clock and divider(s). + * Since BASE_BAUD must be a constant, we will initialize it + * using clock/divider values which OpenBIOS initializes + * for typical configurations at various CPU speeds. + * The base baud is calculated as (FWDA / EXT UART DIV / 16) + */ +#define BASE_BAUD 0 + +#define BUBINGA_FPGA_BASE 0xF0300000 + +#define PPC4xx_MACHINE_NAME "IBM Bubinga" + +#endif /* !__ASSEMBLY__ */ +#endif /* __BUBINGA_H__ */ +#endif /* __KERNEL__ */ diff -Nru a/arch/ppc/platforms/4xx/cpci405.c b/arch/ppc/platforms/4xx/cpci405.c --- a/arch/ppc/platforms/4xx/cpci405.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/cpci405.c Tue May 18 23:38:08 2004 @@ -22,6 +22,7 @@ #include #include #include +#include void *cpci405_nvram; @@ -53,6 +54,9 @@ cpci405_setup_arch(void) { ppc4xx_setup_arch(); + + ibm_ocp_set_emac(0, 0); + TODC_INIT(TODC_TYPE_MK48T35, cpci405_nvram, cpci405_nvram, cpci405_nvram, 8); } diff -Nru a/arch/ppc/platforms/4xx/ebony.c b/arch/ppc/platforms/4xx/ebony.c --- a/arch/ppc/platforms/4xx/ebony.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/4xx/ebony.c Tue May 18 23:38:09 2004 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -119,9 +120,6 @@ extern void abort(void); -/* Global Variables */ -bd_t __res; - static void __init ebony_calibrate_decr(void) { @@ -308,7 +306,9 @@ ebony_setup_arch(void) { unsigned char * vpd_base; - struct ibm440gp_clocks clocks; + struct ibm44x_clocks clocks; + struct ocp_def *def; + struct ocp_func_emac_data *emacdata; #if !defined(CONFIG_BDI_SWITCH) /* @@ -318,10 +318,15 @@ mtspr(SPRN_DBCR0, (DBCR0_TDE | DBCR0_IDM)); #endif - /* Retrieve MAC addresses */ + /* Set mac_addr for each EMAC */ vpd_base = ioremap64(EBONY_VPD_BASE, EBONY_VPD_SIZE); - memcpy(__res.bi_enetaddr[0],EBONY_NA0_ADDR(vpd_base),6); - memcpy(__res.bi_enetaddr[1],EBONY_NA1_ADDR(vpd_base),6); + def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 0); + emacdata = def->additions; + memcpy(emacdata->mac_addr, EBONY_NA0_ADDR(vpd_base), 6); + def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 1); + emacdata = def->additions; + memcpy(emacdata->mac_addr, EBONY_NA1_ADDR(vpd_base), 6); + iounmap(vpd_base); /* * Determine various clocks. @@ -330,10 +335,7 @@ * --ebs */ ibm440gp_get_clocks(&clocks, 33333333, 6 * 1843200); - __res.bi_opb_busfreq = clocks.opb; - - /* Use IIC in standard (100 kHz) mode */ - __res.bi_iic_fast[0] = __res.bi_iic_fast[1] = 0; + ocp_sys_info.opb_bus_freq = clocks.opb; /* Setup TODC access */ TODC_INIT(TODC_TYPE_DS1743, diff -Nru a/arch/ppc/platforms/4xx/ebony.h b/arch/ppc/platforms/4xx/ebony.h --- a/arch/ppc/platforms/4xx/ebony.h Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ebony.h Tue May 18 23:38:08 2004 @@ -65,8 +65,6 @@ #define UART1_IO_BASE (u8 *) 0xE0000300 #define BASE_BAUD 33000000/3/16 -#define UART0_INT 0 -#define UART1_INT 1 #define STD_UART_OP(num) \ { 0, BASE_BAUD, 0, UART##num##_INT, \ diff -Nru a/arch/ppc/platforms/4xx/ep405.c b/arch/ppc/platforms/4xx/ep405.c --- a/arch/ppc/platforms/4xx/ep405.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ep405.c Tue May 18 23:38:05 2004 @@ -18,6 +18,7 @@ #include #include #include +#include #include #undef DEBUG @@ -58,6 +59,8 @@ ep405_setup_arch(void) { ppc4xx_setup_arch(); + + ibm_ocp_set_emac(0, 0); if (__res.bi_nvramsize == 512*1024) { /* FIXME: we should properly handle NVRTCs of different sizes */ diff -Nru a/arch/ppc/platforms/4xx/ibm405ep.c b/arch/ppc/platforms/4xx/ibm405ep.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/platforms/4xx/ibm405ep.c Tue May 18 23:38:09 2004 @@ -0,0 +1,134 @@ +/* + * arch/ppc/platforms/ibm405ep.c + * + * Support for IBM PPC 405EP processors. + * + * Author: SAW (IBM), derived from ibmnp405l.c. + * Maintained by MontaVista Software + * + * 2003 (c) MontaVista Softare Inc. This file is licensed under the + * terms of the GNU General Public License version 2. This program is + * licensed "as is" without any warranty of any kind, whether express + * or implied. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +static struct ocp_func_mal_data ibm405ep_mal0_def = { + .num_tx_chans = 4, /* Number of TX channels */ + .num_rx_chans = 2, /* Number of RX channels */ + .txeob_irq = 11, /* TX End Of Buffer IRQ */ + .rxeob_irq = 12, /* RX End Of Buffer IRQ */ + .txde_irq = 13, /* TX Descriptor Error IRQ */ + .rxde_irq = 14, /* RX Descriptor Error IRQ */ + .serr_irq = 10, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() + +static struct ocp_func_emac_data ibm405ep_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = -1, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 9, /* WOL interrupt number */ + .mdio_idx = 0, /* MDIO via EMAC0 */ + .tah_idx = -1, /* No TAH */ +}; + +static struct ocp_func_emac_data ibm405ep_emac1_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = -1, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 1, /* MAL rx channel number */ + .mal_tx_chan = 2, /* MAL tx channel number */ + .wol_irq = 9, /* WOL interrupt number */ + .mdio_idx = 0, /* MDIO via EMAC0 */ + .tah_idx = -1, /* No TAH */ +}; +OCP_SYSFS_EMAC_DATA() + +static struct ocp_func_iic_data ibm405ep_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() + +struct ocp_def core_ocp[] = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0xEF600000, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = 0xEF600500, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibm405ep_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = 0xEF600700, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibm405ep_mal0_def, + .show = &ocp_show_mal_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = EMAC0_BASE, + .irq = 15, + .pm = OCP_CPM_NA, + .additions = &ibm405ep_emac0_def, + .show = &ocp_show_emac_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 1, + .paddr = 0xEF600900, + .irq = 17, + .pm = OCP_CPM_NA, + .additions = &ibm405ep_emac1_def, + .show = &ocp_show_emac_data + }, + { .vendor = OCP_VENDOR_INVALID + } +}; diff -Nru a/arch/ppc/platforms/4xx/ibm405ep.h b/arch/ppc/platforms/4xx/ibm405ep.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/platforms/4xx/ibm405ep.h Tue May 18 23:38:09 2004 @@ -0,0 +1,148 @@ +/* + * arch/ppc/platforms/4xx/ibm405ep.h + * + * IBM PPC 405EP processor defines. + * + * Author: SAW (IBM), derived from ibm405gp.h. + * Maintained by MontaVista Software + * + * 2003 (c) MontaVista Softare Inc. This file is licensed under the + * terms of the GNU General Public License version 2. This program is + * licensed "as is" without any warranty of any kind, whether express + * or implied. + */ + +#ifdef __KERNEL__ +#ifndef __ASM_IBM405EP_H__ +#define __ASM_IBM405EP_H__ + +#include + +/* ibm405.h at bottom of this file */ + +/* PCI + * PCI Bridge config reg definitions + * see 17-19 of manual + */ + +#define PPC405_PCI_CONFIG_ADDR 0xeec00000 +#define PPC405_PCI_CONFIG_DATA 0xeec00004 + +#define PPC405_PCI_PHY_MEM_BASE 0x80000000 /* hose_a->pci_mem_offset */ + /* setbat */ +#define PPC405_PCI_MEM_BASE PPC405_PCI_PHY_MEM_BASE /* setbat */ +#define PPC405_PCI_PHY_IO_BASE 0xe8000000 /* setbat */ +#define PPC405_PCI_IO_BASE PPC405_PCI_PHY_IO_BASE /* setbat */ + +#define PPC405_PCI_LOWER_MEM 0x80000000 /* hose_a->mem_space.start */ +#define PPC405_PCI_UPPER_MEM 0xBfffffff /* hose_a->mem_space.end */ +#define PPC405_PCI_LOWER_IO 0x00000000 /* hose_a->io_space.start */ +#define PPC405_PCI_UPPER_IO 0x0000ffff /* hose_a->io_space.end */ + +#define PPC405_ISA_IO_BASE PPC405_PCI_IO_BASE + +#define PPC4xx_PCI_IO_PADDR ((uint)PPC405_PCI_PHY_IO_BASE) +#define PPC4xx_PCI_IO_VADDR PPC4xx_PCI_IO_PADDR +#define PPC4xx_PCI_IO_SIZE ((uint)64*1024) +#define PPC4xx_PCI_CFG_PADDR ((uint)PPC405_PCI_CONFIG_ADDR) +#define PPC4xx_PCI_CFG_VADDR PPC4xx_PCI_CFG_PADDR +#define PPC4xx_PCI_CFG_SIZE ((uint)4*1024) +#define PPC4xx_PCI_LCFG_PADDR ((uint)0xef400000) +#define PPC4xx_PCI_LCFG_VADDR PPC4xx_PCI_LCFG_PADDR +#define PPC4xx_PCI_LCFG_SIZE ((uint)4*1024) +#define PPC4xx_ONB_IO_PADDR ((uint)0xef600000) +#define PPC4xx_ONB_IO_VADDR PPC4xx_ONB_IO_PADDR +#define PPC4xx_ONB_IO_SIZE ((uint)4*1024) + +/* serial port defines */ +#define RS_TABLE_SIZE 2 + +#define UART0_INT 0 +#define UART1_INT 1 + +#define PCIL0_BASE 0xEF400000 +#define UART0_IO_BASE 0xEF600300 +#define UART1_IO_BASE 0xEF600400 +#define EMAC0_BASE 0xEF600800 + +#define BD_EMAC_ADDR(e,i) bi_enetaddr[e][i] + +#if defined(CONFIG_UART0_TTYS0) +#define ACTING_UART0_IO_BASE UART0_IO_BASE +#define ACTING_UART1_IO_BASE UART1_IO_BASE +#define ACTING_UART0_INT UART0_INT +#define ACTING_UART1_INT UART1_INT +#else +#define ACTING_UART0_IO_BASE UART1_IO_BASE +#define ACTING_UART1_IO_BASE UART0_IO_BASE +#define ACTING_UART0_INT UART1_INT +#define ACTING_UART1_INT UART0_INT +#endif + +#define STD_UART_OP(num) \ + { 0, BASE_BAUD, 0, ACTING_UART##num##_INT, \ + (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \ + iomem_base: (u8 *)ACTING_UART##num##_IO_BASE, \ + io_type: SERIAL_IO_MEM}, + +#define SERIAL_DEBUG_IO_BASE ACTING_UART0_IO_BASE +#define SERIAL_PORT_DFNS \ + STD_UART_OP(0) \ + STD_UART_OP(1) + +/* DCR defines */ +#define DCRN_CPMSR_BASE 0x0BA +#define DCRN_CPMFR_BASE 0x0B9 + +#define DCRN_CPC0_PLLMR0_BASE 0x0F0 +#define DCRN_CPC0_BOOT_BASE 0x0F1 +#define DCRN_CPC0_CR1_BASE 0x0F2 +#define DCRN_CPC0_EPRCSR_BASE 0x0F3 +#define DCRN_CPC0_PLLMR1_BASE 0x0F4 +#define DCRN_CPC0_UCR_BASE 0x0F5 +#define DCRN_CPC0_UCR_U0DIV 0x07F +#define DCRN_CPC0_SRR_BASE 0x0F6 +#define DCRN_CPC0_JTAGID_BASE 0x0F7 +#define DCRN_CPC0_SPARE_BASE 0x0F8 +#define DCRN_CPC0_PCI_BASE 0x0F9 + + +#define IBM_CPM_GPT 0x80000000 /* GPT interface */ +#define IBM_CPM_PCI 0x40000000 /* PCI bridge */ +#define IBM_CPM_UIC 0x00010000 /* Universal Int Controller */ +#define IBM_CPM_CPU 0x00008000 /* processor core */ +#define IBM_CPM_EBC 0x00002000 /* EBC controller */ +#define IBM_CPM_SDRAM0 0x00004000 /* SDRAM memory controller */ +#define IBM_CPM_GPIO0 0x00001000 /* General Purpose IO */ +#define IBM_CPM_TMRCLK 0x00000400 /* CPU timers */ +#define IBM_CPM_PLB 0x00000100 /* PLB bus arbiter */ +#define IBM_CPM_OPB 0x00000080 /* PLB to OPB bridge */ +#define IBM_CPM_DMA 0x00000040 /* DMA controller */ +#define IBM_CPM_IIC0 0x00000010 /* IIC interface */ +#define IBM_CPM_UART1 0x00000002 /* serial port 0 */ +#define IBM_CPM_UART0 0x00000001 /* serial port 1 */ +#define DFLT_IBM4xx_PM ~(IBM_CPM_PCI | IBM_CPM_CPU | IBM_CPM_DMA \ + | IBM_CPM_OPB | IBM_CPM_EBC \ + | IBM_CPM_SDRAM0 | IBM_CPM_PLB \ + | IBM_CPM_UIC | IBM_CPM_TMRCLK) +#define DCRN_DMA0_BASE 0x100 +#define DCRN_DMA1_BASE 0x108 +#define DCRN_DMA2_BASE 0x110 +#define DCRN_DMA3_BASE 0x118 +#define DCRNCAP_DMA_SG 1 /* have DMA scatter/gather capability */ +#define DCRN_DMASR_BASE 0x120 +#define DCRN_EBC_BASE 0x012 +#define DCRN_DCP0_BASE 0x014 +#define DCRN_MAL_BASE 0x180 +#define DCRN_OCM0_BASE 0x018 +#define DCRN_PLB0_BASE 0x084 +#define DCRN_PLLMR_BASE 0x0B0 +#define DCRN_POB0_BASE 0x0A0 +#define DCRN_SDRAM0_BASE 0x010 +#define DCRN_UIC0_BASE 0x0C0 +#define UIC0 DCRN_UIC0_BASE + +#include + +#endif /* __ASM_IBM405EP_H__ */ +#endif /* __KERNEL__ */ diff -Nru a/arch/ppc/platforms/4xx/ibm405gp.c b/arch/ppc/platforms/4xx/ibm405gp.c --- a/arch/ppc/platforms/4xx/ibm405gp.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ibm405gp.c Tue May 18 23:38:08 2004 @@ -1,26 +1,111 @@ /* - * arch/ppc/platforms/4xx/ibm405gp.c * - * Author: Armin Kuster + * Copyright 2000-2001 MontaVista Software Inc. + * Original author: Armin Kuster akuster@mvista.com + * + * Module name: ibm405gp.c + * + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. * - * 2001 (c) MontaVista, Software, Inc. This file is licensed under - * the terms of the GNU General Public License version 2. This program - * is licensed "as is" without any warranty of any kind, whether express - * or implied. */ #include #include -#include +#include +#include +#include +#include #include +#include +#include + +static struct ocp_func_emac_data ibm405gp_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = -1, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 9, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +OCP_SYSFS_EMAC_DATA() + +static struct ocp_func_mal_data ibm405gp_mal0_def = { + .num_tx_chans = 1, /* Number of TX channels */ + .num_rx_chans = 1, /* Number of RX channels */ + .txeob_irq = 11, /* TX End Of Buffer IRQ */ + .rxeob_irq = 12, /* RX End Of Buffer IRQ */ + .txde_irq = 13, /* TX Descriptor Error IRQ */ + .rxde_irq = 14, /* RX Descriptor Error IRQ */ + .serr_irq = 10, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() -struct ocp_def core_ocp[] __initdata = { - {OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +static struct ocp_func_iic_data ibm405gp_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() +struct ocp_def core_ocp[] = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0xEF600000, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = 0xEF600500, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibm405gp_iic0_def, + .show = &ocp_show_iic_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = 0xEF600700, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibm405gp_mal0_def, + .show = &ocp_show_mal_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = EMAC0_BASE, + .irq = 15, + .pm = IBM_CPM_EMAC0, + .additions = &ibm405gp_emac0_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ibm405gp.h b/arch/ppc/platforms/4xx/ibm405gp.h --- a/arch/ppc/platforms/4xx/ibm405gp.h Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ibm405gp.h Tue May 18 23:38:05 2004 @@ -51,9 +51,6 @@ #define PPC4xx_ONB_IO_VADDR PPC4xx_ONB_IO_PADDR #define PPC4xx_ONB_IO_SIZE ((uint)4*1024) -#define OPB_BASE_START 0x40000000 -#define EBIU_BASE_START 0xF0100000 - /* serial port defines */ #define RS_TABLE_SIZE 2 @@ -63,24 +60,8 @@ #define PCIL0_BASE 0xEF400000 #define UART0_IO_BASE 0xEF600300 #define UART1_IO_BASE 0xEF600400 -#define IIC0_BASE 0xEF600500 -#define OPB0_BASE 0xEF600600 -#define GPIO0_BASE 0xEF600700 #define EMAC0_BASE 0xEF600800 -#define BL_MAC_WOL 9 /* WOL */ -#define BL_MAL_SERR 10 /* MAL SERR */ -#define BL_MAL_TXDE 13 /* MAL TXDE */ -#define BL_MAL_RXDE 14 /* MAL RXDE */ -#define BL_MAL_TXEOB 11 /* MAL TX EOB */ -#define BL_MAL_RXEOB 12 /* MAL RX EOB */ -#define BL_MAC_ETH0 15 /* MAC */ - -#define EMAC_NUMS 1 -#define IIC0_IRQ 2 -#define IIC1_IRQ 0 -#define IIC_OWN 0x55 -#define IIC_CLOCK 50 #define BD_EMAC_ADDR(e,i) bi_enetaddr[i] #define STD_UART_OP(num) \ diff -Nru a/arch/ppc/platforms/4xx/ibm405gpr.c b/arch/ppc/platforms/4xx/ibm405gpr.c --- a/arch/ppc/platforms/4xx/ibm405gpr.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ibm405gpr.c Tue May 18 23:38:08 2004 @@ -11,17 +11,98 @@ #include #include +#include +#include +#include +#include +#include +#include #include -#include "ibm405gpr.h" +static struct ocp_func_emac_data ibm405gpr_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = -1, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 9, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +OCP_SYSFS_EMAC_DATA() -struct ocp_def core_ocp[] __initdata = { - {OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +static struct ocp_func_mal_data ibm405gpr_mal0_def = { + .num_tx_chans = 1, /* Number of TX channels */ + .num_rx_chans = 1, /* Number of RX channels */ + .txeob_irq = 11, /* TX End Of Buffer IRQ */ + .rxeob_irq = 12, /* RX End Of Buffer IRQ */ + .txde_irq = 13, /* TX Descriptor Error IRQ */ + .rxde_irq = 14, /* RX Descriptor Error IRQ */ + .serr_irq = 10, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() +static struct ocp_func_iic_data ibm405gpr_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; + +OCP_SYSFS_IIC_DATA() + +struct ocp_def core_ocp[] = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0xEF600000, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = 0xEF600500, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibm405gpr_iic0_def, + .show = &ocp_show_iic_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = 0xEF600700, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibm405gpr_mal0_def, + .show = &ocp_show_mal_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = EMAC0_BASE, + .irq = 15, + .pm = IBM_CPM_EMAC0, + .additions = &ibm405gpr_emac0_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ibm405gpr.h b/arch/ppc/platforms/4xx/ibm405gpr.h --- a/arch/ppc/platforms/4xx/ibm405gpr.h Tue May 18 23:38:07 2004 +++ b/arch/ppc/platforms/4xx/ibm405gpr.h Tue May 18 23:38:07 2004 @@ -51,9 +51,6 @@ #define PPC4xx_ONB_IO_VADDR PPC4xx_ONB_IO_PADDR #define PPC4xx_ONB_IO_SIZE ((uint)4*1024) -#define OPB_BASE_START 0x40000000 -#define EBIU_BASE_START 0xF0100000 - /* serial port defines */ #define RS_TABLE_SIZE 2 @@ -63,20 +60,8 @@ #define PCIL0_BASE 0xEF400000 #define UART0_IO_BASE 0xEF600300 #define UART1_IO_BASE 0xEF600400 -#define IIC0_BASE 0xEF600500 -#define OPB0_BASE 0xEF600600 -#define GPIO0_BASE 0xEF600700 #define EMAC0_BASE 0xEF600800 -#define BL_MAC_WOL 9 /* WOL */ -#define BL_MAL_SERR 10 /* MAL SERR */ -#define BL_MAL_TXDE 13 /* MAL TXDE */ -#define BL_MAL_RXDE 14 /* MAL RXDE */ -#define BL_MAL_TXEOB 11 /* MAL TX EOB */ -#define BL_MAL_RXEOB 12 /* MAL RX EOB */ -#define BL_MAC_ETH0 15 /* MAC */ -#define IIC_OWN 0x55 -#define IIC_CLOCK 50 #define BD_EMAC_ADDR(e,i) bi_enetaddr[i] #define STD_UART_OP(num) \ diff -Nru a/arch/ppc/platforms/4xx/ibm440gp.c b/arch/ppc/platforms/4xx/ibm440gp.c --- a/arch/ppc/platforms/4xx/ibm440gp.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ibm440gp.c Tue May 18 23:38:08 2004 @@ -4,8 +4,10 @@ * PPC440GP I/O descriptions * * Matt Porter + * Copyright 2002-2004 MontaVista Software Inc. * - * Copyright 2002 MontaVista Software Inc. + * Eugene Surovegin or + * Copyright (c) 2003, 2004 Zultys Technologies * * 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 @@ -13,19 +15,137 @@ * option) any later version. * */ +#include +#include #include #include -#include -struct ocp_def core_ocp[] __initdata = { - {OCP_VENDOR_IBM, OCP_FUNC_OPB, PPC440GP_OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GP_UART0_ADDR, UART0_INT, IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GP_UART1_ADDR, UART1_INT, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GP_IIC0_ADDR, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GP_IIC1_ADDR, IIC1_IRQ, IBM_CPM_IIC1}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, PPC440GP_GPIO0_ADDR, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GP_EMAC0_ADDR, BL_MAC_ETH0, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GP_EMAC1_ADDR, BL_MAC_ETH1, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_ZMII, PPC440GP_ZMII_ADDR, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +static struct ocp_func_emac_data ibm440gp_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 61, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; + +static struct ocp_func_emac_data ibm440gp_emac1_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 1, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 1, /* MAL rx channel number */ + .mal_tx_chan = 2, /* MAL tx channel number */ + .wol_irq = 63, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +OCP_SYSFS_EMAC_DATA() + +static struct ocp_func_mal_data ibm440gp_mal0_def = { + .num_tx_chans = 4, /* Number of TX channels */ + .num_rx_chans = 2, /* Number of RX channels */ + .txeob_irq = 10, /* TX End Of Buffer IRQ */ + .rxeob_irq = 11, /* RX End Of Buffer IRQ */ + .txde_irq = 33, /* TX Descriptor Error IRQ */ + .rxde_irq = 34, /* RX Descriptor Error IRQ */ + .serr_irq = 32, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() + +static struct ocp_func_iic_data ibm440gp_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; + +static struct ocp_func_iic_data ibm440gp_iic1_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() + +struct ocp_def core_ocp[] = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0x0000000140000000ULL, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = PPC440GP_UART0_ADDR, + .irq = UART0_INT, + .pm = IBM_CPM_UART0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = PPC440GP_UART1_ADDR, + .irq = UART1_INT, + .pm = IBM_CPM_UART1, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .index = 0, + .paddr = 0x0000000140000400ULL, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibm440gp_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .index = 1, + .paddr = 0x0000000140000500ULL, + .irq = 3, + .pm = IBM_CPM_IIC1, + .additions = &ibm440gp_iic1_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .index = 0, + .paddr = 0x0000000140000700ULL, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibm440gp_mal0_def, + .show = &ocp_show_mal_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = 0x0000000140000800ULL, + .irq = 60, + .pm = OCP_CPM_NA, + .additions = &ibm440gp_emac0_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 1, + .paddr = 0x0000000140000900ULL, + .irq = 62, + .pm = OCP_CPM_NA, + .additions = &ibm440gp_emac1_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_ZMII, + .paddr = 0x0000000140000780ULL, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ibm440gp.h b/arch/ppc/platforms/4xx/ibm440gp.h --- a/arch/ppc/platforms/4xx/ibm440gp.h Tue May 18 23:38:06 2004 +++ b/arch/ppc/platforms/4xx/ibm440gp.h Tue May 18 23:38:06 2004 @@ -22,44 +22,11 @@ #include -#define EMAC_NUMS 2 -#define UART_NUMS 2 -#define ZMII_NUMS 1 -#define IIC_NUMS 2 -#define IIC0_IRQ 2 -#define IIC1_IRQ 3 -#define GPIO_NUMS 1 - -/* UART location */ +/* UART */ #define PPC440GP_UART0_ADDR 0x0000000140000200ULL #define PPC440GP_UART1_ADDR 0x0000000140000300ULL - -/* EMAC location */ -#define PPC440GP_EMAC0_ADDR 0x0000000140000800ULL -#define PPC440GP_EMAC1_ADDR 0x0000000140000900ULL -#define PPC440GP_EMAC_SIZE 0x70 - -/* EMAC IRQ's */ -#define BL_MAC_WOL 61 /* WOL */ -#define BL_MAC_WOL1 63 /* WOL */ -#define BL_MAL_SERR 32 /* MAL SERR */ -#define BL_MAL_TXDE 33 /* MAL TXDE */ -#define BL_MAL_RXDE 34 /* MAL RXDE */ -#define BL_MAL_TXEOB 10 /* MAL TX EOB */ -#define BL_MAL_RXEOB 11 /* MAL RX EOB */ -#define BL_MAC_ETH0 60 /* MAC */ -#define BL_MAC_ETH1 62 /* MAC */ - -/* ZMII location */ -#define PPC440GP_ZMII_ADDR 0x0000000140000780ULL -#define PPC440GP_ZMII_SIZE 0x0c - -/* I2C location */ -#define PPC440GP_IIC0_ADDR 0x40000400 -#define PPC440GP_IIC1_ADDR 0x40000500 - -/* GPIO location */ -#define PPC440GP_GPIO0_ADDR 0x0000000140000700ULL +#define UART0_INT 0 +#define UART1_INT 1 /* Clock and Power Management */ #define IBM_CPM_IIC0 0x80000000 /* IIC interface */ @@ -87,9 +54,6 @@ | IBM_CPM_EBC | IBM_CPM_SRAM | IBM_CPM_BGO \ | IBM_CPM_EBM | IBM_CPM_PLB | IBM_CPM_OPB \ | IBM_CPM_TMRCLK | IBM_CPM_DMA | IBM_CPM_PCI) - -#define PPC440GP_OPB_BASE_START 0x0000000140000000ULL - /* * Serial port defines */ diff -Nru a/arch/ppc/platforms/4xx/ibm440gx.c b/arch/ppc/platforms/4xx/ibm440gx.c --- a/arch/ppc/platforms/4xx/ibm440gx.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ibm440gx.c Tue May 18 23:38:08 2004 @@ -1,11 +1,13 @@ /* - * arch/ppc/platforms/ibm440gx.c + * arch/ppc/platforms/4xx/ibm440gx.c * * PPC440GX I/O descriptions * * Matt Porter + * Copyright 2002-2004 MontaVista Software Inc. * - * Copyright 2002-2003 MontaVista Software Inc. + * Eugene Surovegin or + * Copyright (c) 2003, 2004 Zultys Technologies * * 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 @@ -13,25 +15,203 @@ * option) any later version. * */ - -#include #include -#include -#include -#include -#include -#include +#include #include +#include + +static struct ocp_func_emac_data ibm440gx_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 61, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; + +static struct ocp_func_emac_data ibm440gx_emac1_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 1, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 1, /* MAL rx channel number */ + .mal_tx_chan = 1, /* MAL tx channel number */ + .wol_irq = 63, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; + +static struct ocp_func_emac_data ibm440gx_emac2_def = { + .rgmii_idx = 0, /* RGMII device index */ + .rgmii_mux = 0, /* RGMII input of this EMAC */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 2, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 2, /* MAL rx channel number */ + .mal_tx_chan = 2, /* MAL tx channel number */ + .wol_irq = 65, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = 0, /* TAH device index */ + .jumbo = 1, /* Jumbo frames supported */ +}; + +static struct ocp_func_emac_data ibm440gx_emac3_def = { + .rgmii_idx = 0, /* RGMII device index */ + .rgmii_mux = 1, /* RGMII input of this EMAC */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 3, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 3, /* MAL rx channel number */ + .mal_tx_chan = 3, /* MAL tx channel number */ + .wol_irq = 67, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = 1, /* TAH device index */ + .jumbo = 1, /* Jumbo frames supported */ +}; +OCP_SYSFS_EMAC_DATA() + +static struct ocp_func_mal_data ibm440gx_mal0_def = { + .num_tx_chans = 4, /* Number of TX channels */ + .num_rx_chans = 4, /* Number of RX channels */ + .txeob_irq = 10, /* TX End Of Buffer IRQ */ + .rxeob_irq = 11, /* RX End Of Buffer IRQ */ + .txde_irq = 33, /* TX Descriptor Error IRQ */ + .rxde_irq = 34, /* RX Descriptor Error IRQ */ + .serr_irq = 32, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() + +static struct ocp_func_iic_data ibm440gx_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; + +static struct ocp_func_iic_data ibm440gx_iic1_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() -struct ocp_def core_ocp[] __initdata = { - {OCP_VENDOR_IBM, OCP_FUNC_OPB, PPC440GX_OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GX_UART0_ADDR, UART0_IRQ, IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GX_UART1_ADDR, UART1_IRQ, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GX_IIC0_ADDR, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GX_IIC1_ADDR, IIC1_IRQ, IBM_CPM_IIC1}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, PPC440GX_GPIO0_ADDR, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GX_EMAC0_ADDR, BL_MAC_ETH0, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GX_EMAC1_ADDR, BL_MAC_ETH1, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_ZMII, PPC440GX_ZMII_ADDR, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +struct ocp_def core_ocp[] = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0x0000000140000000ULL, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = PPC440GX_UART0_ADDR, + .irq = UART0_INT, + .pm = IBM_CPM_UART0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = PPC440GX_UART1_ADDR, + .irq = UART1_INT, + .pm = IBM_CPM_UART1, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .index = 0, + .paddr = 0x0000000140000400ULL, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibm440gx_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .index = 1, + .paddr = 0x0000000140000500ULL, + .irq = 3, + .pm = IBM_CPM_IIC1, + .additions = &ibm440gx_iic1_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .index = 0, + .paddr = 0x0000000140000700ULL, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibm440gx_mal0_def, + .show = &ocp_show_mal_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = 0x0000000140000800ULL, + .irq = 60, + .pm = OCP_CPM_NA, + .additions = &ibm440gx_emac0_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 1, + .paddr = 0x0000000140000900ULL, + .irq = 62, + .pm = OCP_CPM_NA, + .additions = &ibm440gx_emac1_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 2, + .paddr = 0x0000000140000C00ULL, + .irq = 64, + .pm = OCP_CPM_NA, + .additions = &ibm440gx_emac2_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 3, + .paddr = 0x0000000140000E00ULL, + .irq = 66, + .pm = OCP_CPM_NA, + .additions = &ibm440gx_emac3_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_RGMII, + .paddr = 0x0000000140000790ULL, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_ZMII, + .paddr = 0x0000000140000780ULL, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_TAH, + .index = 0, + .paddr = 0x0000000140000b50ULL, + .irq = 68, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_TAH, + .index = 1, + .paddr = 0x0000000140000d50ULL, + .irq = 69, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ibm440gx.h b/arch/ppc/platforms/4xx/ibm440gx.h --- a/arch/ppc/platforms/4xx/ibm440gx.h Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/4xx/ibm440gx.h Tue May 18 23:38:09 2004 @@ -26,53 +26,8 @@ /* UART */ #define PPC440GX_UART0_ADDR 0x0000000140000200ULL #define PPC440GX_UART1_ADDR 0x0000000140000300ULL -#define UART0_IRQ 0 -#define UART1_IRQ 1 - -/* EMAC */ -#define PPC440GX_EMAC0_ADDR 0x0000000140000800ULL -#define PPC440GX_EMAC1_ADDR 0x0000000140000900ULL -#define PPC440GX_EMAC2_ADDR 0x0000000140000C00ULL -#define PPC440GX_EMAC3_ADDR 0x0000000140000E00ULL -#define PPC440GX_EMAC_SIZE 0xFC -#define EMAC_NUMS 2 -#define BL_MAC_WOL 61 /* WOL */ -#define BL_MAC_WOL1 63 /* WOL */ -#define BL_MAC_WOL2 65 /* WOL */ -#define BL_MAC_WOL3 67 /* WOL */ -#define BL_MAL_SERR 32 /* MAL SERR */ -#define BL_MAL_TXDE 33 /* MAL TXDE */ -#define BL_MAL_RXDE 34 /* MAL RXDE */ -#define BL_MAL_TXEOB 10 /* MAL TX EOB */ -#define BL_MAL_RXEOB 11 /* MAL RX EOB */ -#define BL_MAC_ETH0 60 /* MAC */ -#define BL_MAC_ETH1 62 /* MAC */ -#define BL_MAC_ETH2 64 /* MAC */ -#define BL_MAC_ETH3 66 /* MAC */ -#define BL_TAH0 68 /* TAH 0 */ -#define BL_TAH1 69 /* TAH 1 */ - -/* TAH */ -#define PPC440GX_TAH0_ADDR 0x0000000140000B00ULL -#define PPC440GX_TAH1_ADDR 0x0000000140000D00ULL -#define PPC440GX_TAH_SIZE 0xFC - -/* ZMII */ -#define PPC440GX_ZMII_ADDR 0x0000000140000780ULL -#define PPC440GX_ZMII_SIZE 0x0c - -/* RGMII */ -#define PPC440GX_RGMII_ADDR 0x0000000140000790ULL -#define PPC440GX_RGMII_SIZE 0x0c - -/* IIC */ -#define PPC440GX_IIC0_ADDR 0x40000400 -#define PPC440GX_IIC1_ADDR 0x40000500 -#define IIC0_IRQ 2 -#define IIC1_IRQ 3 - -/* GPIO */ -#define PPC440GX_GPIO0_ADDR 0x0000000140000700ULL +#define UART0_INT 0 +#define UART1_INT 1 /* Clock and Power Management */ #define IBM_CPM_IIC0 0x80000000 /* IIC interface */ @@ -110,10 +65,6 @@ | IBM_CPM_TAHOE0 | IBM_CPM_TAHOE1 \ | IBM_CPM_EMAC0 | IBM_CPM_EMAC1 \ | IBM_CPM_EMAC2 | IBM_CPM_EMAC3 ) - -/* OPB */ -#define PPC440GX_OPB_BASE_START 0x0000000140000000ULL - /* * Serial port defines */ diff -Nru a/arch/ppc/platforms/4xx/ibmnp405h.c b/arch/ppc/platforms/4xx/ibmnp405h.c --- a/arch/ppc/platforms/4xx/ibmnp405h.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/4xx/ibmnp405h.c Tue May 18 23:38:09 2004 @@ -14,21 +14,159 @@ #include #include +static struct ocp_func_emac_data ibmnp405h_emac0_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 0, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 0, /* MAL rx channel number */ + .mal_tx_chan = 0, /* MAL tx channel number */ + .wol_irq = 41, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; + +static struct ocp_func_emac_data ibmnp405h_emac1_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 1, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 1, /* MAL rx channel number */ + .mal_tx_chan = 1, /* MAL tx channel number */ + .wol_irq = 41, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +static struct ocp_func_emac_data ibmnp405h_emac2_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 2, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 2, /* MAL rx channel number */ + .mal_tx_chan = 2, /* MAL tx channel number */ + .wol_irq = 41, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +static struct ocp_func_emac_data ibmnp405h_emac3_def = { + .rgmii_idx = -1, /* No RGMII */ + .rgmii_mux = -1, /* No RGMII */ + .zmii_idx = 0, /* ZMII device index */ + .zmii_mux = 3, /* ZMII input of this EMAC */ + .mal_idx = 0, /* MAL device index */ + .mal_rx_chan = 3, /* MAL rx channel number */ + .mal_tx_chan = 3, /* MAL tx channel number */ + .wol_irq = 41, /* WOL interrupt number */ + .mdio_idx = -1, /* No shared MDIO */ + .tah_idx = -1, /* No TAH */ +}; +OCP_SYSFS_EMAC_DATA() + +static struct ocp_func_mal_data ibmnp405h_mal0_def = { + .num_tx_chans = 8, /* Number of TX channels */ + .num_rx_chans = 4, /* Number of RX channels */ + .txeob_irq = 17, /* TX End Of Buffer IRQ */ + .rxeob_irq = 18, /* RX End Of Buffer IRQ */ + .txde_irq = 46, /* TX Descriptor Error IRQ */ + .rxde_irq = 47, /* RX Descriptor Error IRQ */ + .serr_irq = 45, /* MAL System Error IRQ */ +}; +OCP_SYSFS_MAL_DATA() + +static struct ocp_func_iic_data ibmnp405h_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() struct ocp_def core_ocp[] = { -// {OCP_VENDOR_IBM, OCP_FUNC_PLB, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC1_BASE, BL_MAC_ETH1, IBM_CPM_EMAC1}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC2_BASE, BL_MAC_ETH2, IBM_CPM_EMAC2}, - {OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC3_BASE, BL_MAC_ETH3, IBM_CPM_EMAC3}, - {OCP_VENDOR_IBM, OCP_FUNC_PHY, ZMII0_BASE, OCP_IRQ_NA, OCP_CPM_NA}, -// {OCP_VENDOR_IBM, OCP_FUNC_EXT, EBIU_BASE_START, OCP_IRQ_NA,IBM_CPM_EBC}, -// {OCP_VENDOR_IBM, OCP_FUNC_PCI, PCIL0_BASE, OCP_IRQ_NA, IBM_CPM_PCI}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_OPB, + .index = 0, + .paddr = 0xEF600000, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = 0xEF600500, + .irq = 2, + .pm = IBM_CPM_IIC0, + .additions = &ibmnp405h_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = 0xEF600700, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0 + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_MAL, + .paddr = OCP_PADDR_NA, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + .additions = &ibmnp405h_mal0_def, + .show = &ocp_show_mal_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 0, + .paddr = EMAC0_BASE, + .irq = 37, + .pm = IBM_CPM_EMAC0, + .additions = &ibmnp405h_emac0_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 1, + .paddr = 0xEF600900, + .irq = 38, + .pm = IBM_CPM_EMAC1, + .additions = &ibmnp405h_emac1_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 2, + .paddr = 0xEF600a00, + .irq = 39, + .pm = IBM_CPM_EMAC2, + .additions = &ibmnp405h_emac2_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_EMAC, + .index = 3, + .paddr = 0xEF600b00, + .irq = 40, + .pm = IBM_CPM_EMAC3, + .additions = &ibmnp405h_emac3_def, + .show = &ocp_show_emac_data, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_ZMII, + .paddr = 0xEF600C10, + .irq = OCP_IRQ_NA, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ibmnp405h.h b/arch/ppc/platforms/4xx/ibmnp405h.h --- a/arch/ppc/platforms/4xx/ibmnp405h.h Tue May 18 23:38:07 2004 +++ b/arch/ppc/platforms/4xx/ibmnp405h.h Tue May 18 23:38:07 2004 @@ -14,7 +14,6 @@ #define __ASM_IBMNP405H_H__ #include -#include /* ibm405.h at bottom of this file */ @@ -42,9 +41,6 @@ #define PPC4xx_ONB_IO_ADDR ((uint)0xef600000) #define PPC4xx_ONB_IO_SIZE ((uint)4*1024) -#define OPB_BASE_START 0x40000000 -#define EBIU_BASE_START 0xF0100000 - /* serial port defines */ #define RS_TABLE_SIZE 4 @@ -53,27 +49,8 @@ #define PCIL0_BASE 0xEF400000 #define UART0_IO_BASE 0xEF600300 #define UART1_IO_BASE 0xEF600400 -#define IIC0_BASE 0xEF600500 #define OPB0_BASE 0xEF600600 -#define GPIO0_BASE 0xEF600700 #define EMAC0_BASE 0xEF600800 -#define EMAC1_BASE 0xEF600900 -#define EMAC2_BASE 0xEF600a00 -#define EMAC3_BASE 0xEF600b00 -#define ZMII0_BASE 0xEF600C10 -#define BL_MAC_WOL 41 /* WOL */ -#define BL_MAL_SERR 45 /* MAL SERR */ -#define BL_MAL_TXDE 46 /* MAL TXDE */ -#define BL_MAL_RXDE 47 /* MAL RXDE */ -#define BL_MAL_TXEOB 17 /* MAL TX EOB */ -#define BL_MAL_RXEOB 18 /* MAL RX EOB */ -#define BL_MAC_ETH0 37 /* MAC */ -#define BL_MAC_ETH1 38 /* MAC */ -#define BL_MAC_ETH2 39 /* MAC */ -#define BL_MAC_ETH3 40 /* MAC */ - -#define EMAC_NUMS 4 -#define IIC0_IRQ 2 #define BD_EMAC_ADDR(e,i) bi_enetaddr[e][i] diff -Nru a/arch/ppc/platforms/4xx/ibmstb4.c b/arch/ppc/platforms/4xx/ibmstb4.c --- a/arch/ppc/platforms/4xx/ibmstb4.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ibmstb4.c Tue May 18 23:38:05 2004 @@ -9,19 +9,75 @@ * or implied. */ -#include -#include -#include "ibmstb4.h" +#include #include +#include -struct ocp_def core_ocp[] = { - {UART, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0}, - {UART, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1}, - {UART, UART2_IO_BASE, UART2_INT, IBM_CPM_UART2}, - {IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0}, - {IIC, IIC1_BASE, IIC1_IRQ, IBM_CPM_IIC1}, - {GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {IDE, IDE0_BASE, IDE0_IRQ, OCP_CPM_NA}, - {USB, USB0_BASE, USB0_IRQ, IBM_CPM_USB0}, - {OCP_NULL_TYPE, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +static struct ocp_func_iic_data ibmstb4_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; + +static struct ocp_func_iic_data ibmstb4_iic1_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() + +struct ocp_def core_ocp[] __initdata = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 2, + .paddr = UART2_IO_BASE, + .irq = UART2_INT, + .pm = IBM_CPM_UART2, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = IIC0_BASE, + .irq = IIC0_IRQ, + .pm = IBM_CPM_IIC0, + .additions = &ibmstb4_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = IIC1_BASE, + .irq = IIC1_IRQ, + .pm = IBM_CPM_IIC1, + .additions = &ibmstb4_iic1_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = GPIO0_BASE, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IDE, + .paddr = IDE0_BASE, + .irq = IDE0_IRQ, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_USB, + .paddr = USB0_BASE, + .irq = USB0_IRQ, + .pm = OCP_CPM_NA, + }, + { .vendor = OCP_VENDOR_INVALID, + } }; diff -Nru a/arch/ppc/platforms/4xx/ibmstb4.h b/arch/ppc/platforms/4xx/ibmstb4.h --- a/arch/ppc/platforms/4xx/ibmstb4.h Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/4xx/ibmstb4.h Tue May 18 23:38:09 2004 @@ -14,7 +14,6 @@ #define __ASM_IBMSTB4_H__ #include -#include /* serial port defines */ #define STB04xxx_IO_BASE ((uint)0xe0000000) diff -Nru a/arch/ppc/platforms/4xx/ibmstbx25.c b/arch/ppc/platforms/4xx/ibmstbx25.c --- a/arch/ppc/platforms/4xx/ibmstbx25.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/platforms/4xx/ibmstbx25.c Tue May 18 23:38:05 2004 @@ -9,22 +9,51 @@ * or implied. */ -#include -#include #include #include -#include "ibmstbx25.h" +#include -struct ocp_def core_ocp[] __initdata = { - {OCP_VENDOR_IBM, OCP_FUNC_PLB, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1}, - {OCP_VENDOR_IBM, OCP_FUNC_16550, UART2_IO_BASE,UART2_INT, IBM_CPM_UART2}, - {OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0}, - {OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0}, - {OCP_VENDOR_IBM, OCP_FUNC_IDE, IDE0_BASE, IDE0_IRQ, OCP_CPM_NA}, - {OCP_VENDOR_IBM, OCP_FUNC_EXT, EBIU_BASE_START, OCP_IRQ_NA,IBM_CPM_EBIU}, - {OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA}, +static struct ocp_func_iic_data ibmstbx25_iic0_def = { + .fast_mode = 0, /* Use standad mode (100Khz) */ +}; +OCP_SYSFS_IIC_DATA() +struct ocp_def core_ocp[] __initdata = { + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 0, + .paddr = UART0_IO_BASE, + .irq = UART0_INT, + .pm = IBM_CPM_UART0, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 1, + .paddr = UART1_IO_BASE, + .irq = UART1_INT, + .pm = IBM_CPM_UART1, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_16550, + .index = 2, + .paddr = UART2_IO_BASE, + .irq = UART2_INT, + .pm = IBM_CPM_UART2, + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_IIC, + .paddr = IIC0_BASE, + .irq = IIC0_IRQ, + .pm = IBM_CPM_IIC0, + .additions = &ibmstbx25_iic0_def, + .show = &ocp_show_iic_data + }, + { .vendor = OCP_VENDOR_IBM, + .function = OCP_FUNC_GPIO, + .paddr = GPIO0_BASE, + .irq = OCP_IRQ_NA, + .pm = IBM_CPM_GPIO0, + }, + { .vendor = OCP_VENDOR_INVALID + } }; diff -Nru a/arch/ppc/platforms/4xx/ocotea.c b/arch/ppc/platforms/4xx/ocotea.c --- a/arch/ppc/platforms/4xx/ocotea.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/ocotea.c Tue May 18 23:38:08 2004 @@ -41,16 +41,23 @@ #include #include #include +#include #include #include #include #include #include -extern void abort(void); +#include -/* Global Variables */ -bd_t __res; +/* + * This is a horrible kludge, we eventually need to abstract this + * generic PHY stuff, so the standard phy mode defines can be + * easily used from arch code. + */ +#include "../../../../drivers/net/ibm_emac/ibm_emac_phy.h" + +extern void abort(void); static void __init ocotea_calibrate_decr(void) @@ -202,15 +209,15 @@ TODC_ALLOC(); static void __init -ocotea_early_serial_map(void) +ocotea_early_serial_map(const struct ibm44x_clocks *clks) { struct uart_port port; /* Setup ioremapped serial port access */ memset(&port, 0, sizeof(port)); port.membase = ioremap64(PPC440GX_UART0_ADDR, 8); - port.irq = 0; - port.uartclk = BASE_BAUD * 16; + port.irq = UART0_INT; + port.uartclk = clks->uart0; port.regshift = 0; port.iotype = SERIAL_IO_MEM; port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST; @@ -221,7 +228,8 @@ } port.membase = ioremap64(PPC440GX_UART1_ADDR, 8); - port.irq = 1; + port.irq = UART1_INT; + port.uartclk = clks->uart1; port.line = 1; if (early_serial_setup(&port) != 0) { @@ -234,15 +242,42 @@ { unsigned char *addr; unsigned long long mac64; + struct ocp_def *def; + struct ocp_func_emac_data *emacdata; + int i; + struct ibm44x_clocks clocks; - /* Retrieve MAC addresses from flash */ + /* + * Note: Current rev. board only operates in Group 4a + * mode, so we always set EMAC0-1 for SMII and EMAC2-3 + * for RGMII (though these could run in RTBI just the same). + * + * The FPGA reg 3 information isn't even suitable for + * determining the phy_mode, so if the board becomes + * usable in !4a, it will be necessary to parse an environment + * variable from the firmware or similar to properly configure + * the phy_map/phy_mode. + */ + /* Set phy_map, phy_mode, and mac_addr for each EMAC */ addr = ioremap64(OCOTEA_MAC_BASE, OCOTEA_MAC_SIZE); - mac64 = simple_strtoull(addr, 0, 16); - memcpy(__res.bi_enetaddr[0], (char *)&mac64+2, 6); - mac64 = simple_strtoull(addr+OCOTEA_MAC1_OFFSET, 0, 16); - memcpy(__res.bi_enetaddr[1], (char *)&mac64+2, 6); + for (i=0; i<4; i++) { + mac64 = simple_strtoull(addr+OCOTEA_MAC_OFFSET*i, 0, 16); + def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i); + emacdata = def->additions; + if (i < 2) { + emacdata->phy_map = 0x00000001; /* Skip 0x00 */ + emacdata->phy_mode = PHY_MODE_SMII; + } + else { + emacdata->phy_map = 0x0000ffff; /* Skip 0x00-0x0f */ + emacdata->phy_mode = PHY_MODE_RGMII; + } + memcpy(emacdata->mac_addr, (char *)&mac64+2, 6); + } iounmap(addr); + ibm440gx_tah_enable(); + #if !defined(CONFIG_BDI_SWITCH) /* * The Abatron BDI JTAG debugger does not tolerate others @@ -251,6 +286,15 @@ mtspr(SPRN_DBCR0, (DBCR0_TDE | DBCR0_IDM)); #endif + /* + * Determine various clocks. + * To be completely correct we should get SysClk + * from FPGA, because it can be changed by on-board switches + * --ebs + */ + ibm440gx_get_clocks(&clocks, 33333333, 6 * 1843200); + ocp_sys_info.opb_bus_freq = clocks.opb; + /* Setup TODC access */ TODC_INIT(TODC_TYPE_DS1743, 0, @@ -279,7 +323,7 @@ conswitchp = &dummy_con; #endif - ocotea_early_serial_map(); + ocotea_early_serial_map(&clocks); /* Identify the system */ printk("IBM Ocotea port (MontaVista Software, Inc. )\n"); @@ -370,9 +414,6 @@ { int i; - /* Enable PPC440GP interrupt compatibility mode */ - SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) | DCRN_SDR_MFR_PCM); - ppc4xx_pic_init(); for (i = 0; i < NR_IRQS; i++) @@ -430,6 +471,9 @@ unsigned long r5, unsigned long r6, unsigned long r7) { parse_bootinfo((struct bi_record *) (r3 + KERNELBASE)); + + /* Disable L2-Cache due to hardware issues */ + ibm440gx_l2c_disable(); ppc_md.setup_arch = ocotea_setup_arch; ppc_md.show_cpuinfo = ocotea_show_cpuinfo; diff -Nru a/arch/ppc/platforms/4xx/ocotea.h b/arch/ppc/platforms/4xx/ocotea.h --- a/arch/ppc/platforms/4xx/ocotea.h Tue May 18 23:38:07 2004 +++ b/arch/ppc/platforms/4xx/ocotea.h Tue May 18 23:38:07 2004 @@ -25,9 +25,9 @@ #define PPC44x_EMAC0_MR0 0xE0000800 /* Location of MAC addresses in firmware */ -#define OCOTEA_MAC_BASE (OCOTEA_SMALL_FLASH_HIGH+0xc0500) +#define OCOTEA_MAC_BASE (OCOTEA_SMALL_FLASH_HIGH+0xb0500) #define OCOTEA_MAC_SIZE 0x200 -#define OCOTEA_MAC1_OFFSET 0x100 +#define OCOTEA_MAC_OFFSET 0x100 /* Default clock rate */ #define OCOTEA_SYSCLK 25000000 @@ -37,7 +37,7 @@ #define OCOTEA_RTC_SIZE 0x2000 /* Flash */ -#define OCOTEA_FPGA_ADDR 0x0000000148300000ULL +#define OCOTEA_FPGA_REG_0 0x0000000148300000ULL #define OCOTEA_BOOT_LARGE_FLASH(x) (x & 0x40) #define OCOTEA_SMALL_FLASH_LOW 0x00000001ff900000ULL #define OCOTEA_SMALL_FLASH_HIGH 0x00000001fff00000ULL @@ -46,6 +46,9 @@ #define OCOTEA_LARGE_FLASH_HIGH 0x00000001ffc00000ULL #define OCOTEA_LARGE_FLASH_SIZE 0x400000 +/* FPGA_REG_3 (Ethernet Groups) */ +#define OCOTEA_FPGA_REG_3 0x0000000148300003ULL + /* * Serial port defines */ @@ -57,7 +60,7 @@ #define BASE_BAUD 11059200/16 #define STD_UART_OP(num) \ - { 0, BASE_BAUD, 0, UART##num##_IRQ, \ + { 0, BASE_BAUD, 0, UART##num##_INT, \ (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \ iomem_base: UART##num##_IO_BASE, \ io_type: SERIAL_IO_MEM}, diff -Nru a/arch/ppc/platforms/4xx/redwood5.c b/arch/ppc/platforms/4xx/redwood5.c --- a/arch/ppc/platforms/4xx/redwood5.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/platforms/4xx/redwood5.c Tue May 18 23:38:06 2004 @@ -20,8 +20,6 @@ void __init redwood5_setup_arch(void) { - bd_t *bip = &__res; - ppc4xx_setup_arch(); #ifdef CONFIG_DEBUG_BRINGUP diff -Nru a/arch/ppc/platforms/4xx/sycamore.c b/arch/ppc/platforms/4xx/sycamore.c --- a/arch/ppc/platforms/4xx/sycamore.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/4xx/sycamore.c Tue May 18 23:38:08 2004 @@ -28,6 +28,7 @@ #include #include #include +#include #include #undef DEBUG @@ -119,6 +120,8 @@ ppc4xx_setup_arch(); + ibm_ocp_set_emac(0, 1); + kb_data = ioremap(SYCAMORE_PS2_BASE, 8); if (!kb_data) { printk(KERN_CRIT @@ -218,21 +221,25 @@ (PPC405_PCI_UPPER_MEM - PPC405_PCI_MEM_BASE)) | 0x01)); - /* Disable region one */ + /* Enable inbound region one - 1GB size */ + out_le32((void *) &(pcip->ptm1ms), 0xc0000001); + + /* Disable outbound region one */ out_le32((void *) &(pcip->pmm[1].ma), 0x00000000); out_le32((void *) &(pcip->pmm[1].la), 0x00000000); out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000); out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000); out_le32((void *) &(pcip->pmm[1].ma), 0x00000000); - out_le32((void *) &(pcip->ptm1ms), 0x00000000); - /* Disable region two */ + /* Disable inbound region two */ + out_le32((void *) &(pcip->ptm2ms), 0x00000000); + + /* Disable outbound region two */ out_le32((void *) &(pcip->pmm[2].ma), 0x00000000); out_le32((void *) &(pcip->pmm[2].la), 0x00000000); out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000); out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000); out_le32((void *) &(pcip->pmm[2].ma), 0x00000000); - out_le32((void *) &(pcip->ptm2ms), 0x00000000); /* Zero config bars */ for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) { @@ -283,9 +290,11 @@ ppc_md.setup_arch = sycamore_setup_arch; ppc_md.setup_io_mappings = sycamore_map_io; +#ifdef CONFIG_GEN_RTC ppc_md.time_init = todc_time_init; ppc_md.set_rtc_time = todc_set_rtc_time; ppc_md.get_rtc_time = todc_get_rtc_time; ppc_md.nvram_read_val = todc_direct_read_val; ppc_md.nvram_write_val = todc_direct_write_val; +#endif } diff -Nru a/arch/ppc/platforms/4xx/walnut.c b/arch/ppc/platforms/4xx/walnut.c --- a/arch/ppc/platforms/4xx/walnut.c Tue May 18 23:38:07 2004 +++ b/arch/ppc/platforms/4xx/walnut.c Tue May 18 23:38:07 2004 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -77,6 +78,8 @@ void *fpga_trigger; ppc4xx_setup_arch(); + + ibm_ocp_set_emac(0, 0); kb_data = ioremap(WALNUT_PS2_BASE, 8); if (!kb_data) { diff -Nru a/arch/ppc/platforms/pmac_pic.c b/arch/ppc/platforms/pmac_pic.c --- a/arch/ppc/platforms/pmac_pic.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/platforms/pmac_pic.c Tue May 18 23:38:09 2004 @@ -260,7 +260,7 @@ node->child->intrs = &gatwick_int_pool[count]; count += 3; } - node->child->n_intrs = 3; + node->child->n_intrs = 3; node->child->intrs[0].line = 15+irq_base; node->child->intrs[1].line = 4+irq_base; node->child->intrs[2].line = 5+irq_base; @@ -279,7 +279,7 @@ node->intrs[0].line = 29+irq_base; printk(KERN_INFO "irq: fixed media-bay on second controller (%d)\n", node->intrs[0].line); - + ya_node = node->child; while(ya_node) { @@ -501,7 +501,7 @@ pmac_irq_hw[i] = (volatile struct pmac_irq_hw*) (addr + (2 - i) * 0x10); } - + /* get addresses of second controller */ irqctrler = irqctrler->next; if (irqctrler && irqctrler->n_addrs > 0) { diff -Nru a/arch/ppc/platforms/pmac_setup.c b/arch/ppc/platforms/pmac_setup.c --- a/arch/ppc/platforms/pmac_setup.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/platforms/pmac_setup.c Tue May 18 23:38:08 2004 @@ -136,7 +136,7 @@ if (pmac_call_feature(PMAC_FTR_GET_MB_INFO, NULL, PMAC_MB_INFO_NAME, (int)&mbname) != 0) mbname = "Unknown"; - + /* find motherboard type */ seq_printf(m, "machine\t\t: "); np = find_devices("device-tree"); @@ -196,7 +196,7 @@ int n; struct reg_property *reg = (struct reg_property *) get_property(np, "reg", &n); - + if (reg != 0) { unsigned long total = 0; @@ -207,9 +207,9 @@ } /* Checks "l2cr-value" property in the registry */ - np = find_devices("cpus"); + np = find_devices("cpus"); if (np == 0) - np = find_type_devices("cpu"); + np = find_type_devices("cpu"); if (np != 0) { unsigned int *l2cr = (unsigned int *) get_property(np, "l2cr-value", NULL); @@ -277,9 +277,9 @@ /* Checks "l2cr-value" property in the registry */ if (cur_cpu_spec[0]->cpu_features & CPU_FTR_L2CR) { - struct device_node *np = find_devices("cpus"); + struct device_node *np = find_devices("cpus"); if (np == 0) - np = find_type_devices("cpu"); + np = find_type_devices("cpu"); if (np != 0) { unsigned int *l2cr = (unsigned int *) get_property(np, "l2cr-value", NULL); @@ -478,11 +478,11 @@ cuda_poll(); break; #endif /* CONFIG_ADB_CUDA */ -#ifdef CONFIG_ADB_PMU +#ifdef CONFIG_ADB_PMU case SYS_CTRLER_PMU: pmu_restart(); break; -#endif /* CONFIG_ADB_PMU */ +#endif /* CONFIG_ADB_PMU */ default: ; } } diff -Nru a/arch/ppc/syslib/Makefile b/arch/ppc/syslib/Makefile --- a/arch/ppc/syslib/Makefile Tue May 18 23:38:05 2004 +++ b/arch/ppc/syslib/Makefile Tue May 18 23:38:05 2004 @@ -13,8 +13,11 @@ CFLAGS_btext.o += -mrelocatable-lib obj-$(CONFIG_PPCBUG_NVRAM) += prep_nvram.o +obj-$(CONFIG_PPC_OCP) += ocp.o +obj-$(CONFIG_IBM_OCP) += ibm_ocp.o obj-$(CONFIG_44x) += ibm44x_common.o obj-$(CONFIG_440GP) += ibm440gp_common.o +obj-$(CONFIG_440GX) += ibm440gx_common.o ifeq ($(CONFIG_4xx),y) obj-$(CONFIG_4xx) += ppc4xx_pic.o obj-$(CONFIG_40x) += ppc4xx_setup.o diff -Nru a/arch/ppc/syslib/ibm440gp_common.c b/arch/ppc/syslib/ibm440gp_common.c --- a/arch/ppc/syslib/ibm440gp_common.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/syslib/ibm440gp_common.c Tue May 18 23:38:06 2004 @@ -24,7 +24,7 @@ /* * Calculate 440GP clocks */ -void __init ibm440gp_get_clocks(struct ibm440gp_clocks* p, +void __init ibm440gp_get_clocks(struct ibm44x_clocks* p, unsigned int sys_clk, unsigned int ser_clk) { @@ -68,11 +68,11 @@ if (cpc0_cr0 & 0x00400000){ /* External UART clock */ - p->uart = ser_clk; + p->uart0 = p->uart1 = ser_clk; } else { /* Internal UART clock */ u32 uart_div = ((cpc0_cr0 >> 16) & 0x1f) + 1; - p->uart = p->plb / uart_div; + p->uart0 = p->uart1 = p->plb / uart_div; } } diff -Nru a/arch/ppc/syslib/ibm440gp_common.h b/arch/ppc/syslib/ibm440gp_common.h --- a/arch/ppc/syslib/ibm440gp_common.h Tue May 18 23:38:06 2004 +++ b/arch/ppc/syslib/ibm440gp_common.h Tue May 18 23:38:06 2004 @@ -1,5 +1,5 @@ /* - * arch/ppc/syslib/ibm440gp_common.h + * arch/ppc/kernel/ibm440gp_common.h * * PPC440GP system library * @@ -20,24 +20,14 @@ #include #include - -/* - * All clocks are in Hz - */ -struct ibm440gp_clocks { - unsigned int cpu; /* CPUCoreClk */ - unsigned int plb; /* PLBClk */ - unsigned int opb; /* OPBClk */ - unsigned int ebc; /* PerClk */ - unsigned int uart; -}; +#include /* * Please, refer to the Figure 13.1 in 440GP user manual * * if internal UART clock is used, ser_clk is ignored */ -void ibm440gp_get_clocks(struct ibm440gp_clocks*, unsigned int sys_clk, +void ibm440gp_get_clocks(struct ibm44x_clocks*, unsigned int sys_clk, unsigned int ser_clk) __init; #endif /* __ASSEMBLY__ */ diff -Nru a/arch/ppc/syslib/ibm440gx_common.c b/arch/ppc/syslib/ibm440gx_common.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/syslib/ibm440gx_common.c Tue May 18 23:38:09 2004 @@ -0,0 +1,212 @@ +/* + * arch/ppc/kernel/ibm440gx_common.c + * + * PPC440GX system library + * + * Eugene Surovegin or + * Copyright (c) 2003 Zultys Technologies + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ +#include +#include +#include +#include +#include +#include + +/* + * Calculate 440GX clocks + */ +static inline u32 __fix_zero(u32 v, u32 def){ + return v ? v : def; +} + +void __init ibm440gx_get_clocks(struct ibm44x_clocks* p, unsigned int sys_clk, + unsigned int ser_clk) +{ + u32 pllc = CPR_READ(DCRN_CPR_PLLC); + u32 plld = CPR_READ(DCRN_CPR_PLLD); + u32 uart0 = SDR_READ(DCRN_SDR_UART0); + u32 uart1 = SDR_READ(DCRN_SDR_UART1); + + /* Dividers */ + u32 fbdv = __fix_zero((plld >> 24) & 0x1f, 32); + u32 fwdva = __fix_zero((plld >> 16) & 0xf, 16); + u32 fwdvb = __fix_zero((plld >> 8) & 7, 8); + u32 lfbdv = __fix_zero(plld & 0x3f, 64); + u32 pradv0 = __fix_zero((CPR_READ(DCRN_CPR_PRIMAD) >> 24) & 7, 8); + u32 prbdv0 = __fix_zero((CPR_READ(DCRN_CPR_PRIMBD) >> 24) & 7, 8); + u32 opbdv0 = __fix_zero((CPR_READ(DCRN_CPR_OPBD) >> 24) & 3, 4); + u32 perdv0 = __fix_zero((CPR_READ(DCRN_CPR_PERD) >> 24) & 3, 4); + + /* Input clocks for primary dividers */ + u32 clk_a, clk_b; + + if (pllc & 0x40000000){ + u32 m; + + /* Feedback path */ + switch ((pllc >> 24) & 7){ + case 0: + /* PLLOUTx */ + m = ((pllc & 0x20000000) ? fwdvb : fwdva) * lfbdv; + break; + case 1: + /* CPU */ + m = fwdva * pradv0; + break; + case 5: + /* PERClk */ + m = fwdvb * prbdv0 * opbdv0 * perdv0; + break; + default: + printk(KERN_EMERG "invalid PLL feedback source\n"); + goto bypass; + } + m *= fbdv; + p->vco = sys_clk * m; + clk_a = p->vco / fwdva; + clk_b = p->vco / fwdvb; + } + else { +bypass: + /* Bypass system PLL */ + p->vco = 0; + clk_a = clk_b = sys_clk; + } + + p->cpu = clk_a / pradv0; + p->plb = clk_b / prbdv0; + p->opb = p->plb / opbdv0; + p->ebc = p->opb / perdv0; + + /* UARTs clock */ + if (uart0 & 0x00800000) + p->uart0 = ser_clk; + else + p->uart0 = p->plb / __fix_zero(uart0 & 0xff, 256); + + if (uart1 & 0x00800000) + p->uart1 = ser_clk; + else + p->uart1 = p->plb / __fix_zero(uart1 & 0xff, 256); +} + +/* Enable L2 cache (call with IRQs disabled) */ +void __init ibm440gx_l2c_enable(void){ + u32 r; + + asm volatile ("sync" ::: "memory"); + + /* Disable SRAM */ + mtdcr(DCRN_SRAM0_DPC, mfdcr(DCRN_SRAM0_DPC) & ~SRAM_DPC_ENABLE); + mtdcr(DCRN_SRAM0_SB0CR, mfdcr(DCRN_SRAM0_SB0CR) & ~SRAM_SBCR_BU_MASK); + mtdcr(DCRN_SRAM0_SB1CR, mfdcr(DCRN_SRAM0_SB1CR) & ~SRAM_SBCR_BU_MASK); + mtdcr(DCRN_SRAM0_SB2CR, mfdcr(DCRN_SRAM0_SB2CR) & ~SRAM_SBCR_BU_MASK); + mtdcr(DCRN_SRAM0_SB3CR, mfdcr(DCRN_SRAM0_SB3CR) & ~SRAM_SBCR_BU_MASK); + + /* Enable L2_MODE without ICU/DCU */ + r = mfdcr(DCRN_L2C0_CFG) & ~(L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_SS_MASK); + r |= L2C_CFG_L2M | L2C_CFG_SS_256; + mtdcr(DCRN_L2C0_CFG, r); + + mtdcr(DCRN_L2C0_ADDR, 0); + + /* Hardware Clear Command */ + mtdcr(DCRN_L2C0_CMD, L2C_CMD_HCC); + while (!(mfdcr(DCRN_L2C0_SR) & L2C_SR_CC)) ; + + /* Clear Cache Parity and Tag Errors */ + mtdcr(DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE); + + /* Enable 64G snoop region starting at 0 */ + r = mfdcr(DCRN_L2C0_SNP0) & ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK); + r |= L2C_SNP_SSR_32G | L2C_SNP_ESR; + mtdcr(DCRN_L2C0_SNP0, r); + + r = mfdcr(DCRN_L2C0_SNP1) & ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK); + r |= 0x80000000 | L2C_SNP_SSR_32G | L2C_SNP_ESR; + mtdcr(DCRN_L2C0_SNP1, r); + + asm volatile ("sync" ::: "memory"); + + /* Enable ICU/DCU ports */ + r = mfdcr(DCRN_L2C0_CFG); + r &= ~(L2C_CFG_DCW_MASK | L2C_CFG_CPIM | L2C_CFG_TPIM | L2C_CFG_LIM + | L2C_CFG_PMUX_MASK | L2C_CFG_PMIM | L2C_CFG_TPEI | L2C_CFG_CPEI + | L2C_CFG_NAM | L2C_CFG_NBRM); + r |= L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_TPC | L2C_CFG_CPC | L2C_CFG_FRAN + | L2C_CFG_SMCM; + mtdcr(DCRN_L2C0_CFG, r); + + asm volatile ("sync; isync" ::: "memory"); +} + +/* Disable L2 cache (call with IRQs disabled) */ +void __init ibm440gx_l2c_disable(void){ + u32 r; + + asm volatile ("sync" ::: "memory"); + + /* Disable L2C mode */ + r = mfdcr(DCRN_L2C0_CFG) & ~(L2C_CFG_L2M | L2C_CFG_ICU | L2C_CFG_DCU); + mtdcr(DCRN_L2C0_CFG, r); + + /* Enable SRAM */ + mtdcr(DCRN_SRAM0_DPC, mfdcr(DCRN_SRAM0_DPC) | SRAM_DPC_ENABLE); + mtdcr(DCRN_SRAM0_SB0CR, + SRAM_SBCR_BAS0 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW); + mtdcr(DCRN_SRAM0_SB1CR, + SRAM_SBCR_BAS1 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW); + mtdcr(DCRN_SRAM0_SB2CR, + SRAM_SBCR_BAS2 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW); + mtdcr(DCRN_SRAM0_SB3CR, + SRAM_SBCR_BAS3 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW); + + asm volatile ("sync; isync" ::: "memory"); +} + +int __init ibm440gx_get_eth_grp(void) +{ + return (SDR_READ(DCRN_SDR_PFC1) & DCRN_SDR_PFC1_EPS) >> DCRN_SDR_PFC1_EPS_SHIFT; +} + +void __init ibm440gx_set_eth_grp(int group) +{ + SDR_WRITE(DCRN_SDR_PFC1, (SDR_READ(DCRN_SDR_PFC1) & ~DCRN_SDR_PFC1_EPS) | (group << DCRN_SDR_PFC1_EPS_SHIFT)); +} + +void __init ibm440gx_tah_enable(void) +{ + /* Enable TAH0 and TAH1 */ + SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) & + ~DCRN_SDR_MFR_TAH0); + SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) & + ~DCRN_SDR_MFR_TAH1); +} + +int ibm440gx_show_cpuinfo(struct seq_file *m){ + + u32 l2c_cfg = mfdcr(DCRN_L2C0_CFG); + const char* s; + if (l2c_cfg & L2C_CFG_L2M){ + switch (l2c_cfg & (L2C_CFG_ICU | L2C_CFG_DCU)){ + case L2C_CFG_ICU: s = "I-Cache only"; break; + case L2C_CFG_DCU: s = "D-Cache only"; break; + default: s = "I-Cache/D-Cache"; break; + } + } + else + s = "disabled"; + + seq_printf(m, "L2-Cache\t: %s (0x%08x 0x%08x)\n", s, + l2c_cfg, mfdcr(DCRN_L2C0_SR)); + + return 0; +} + diff -Nru a/arch/ppc/syslib/ibm440gx_common.h b/arch/ppc/syslib/ibm440gx_common.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/syslib/ibm440gx_common.h Tue May 18 23:38:09 2004 @@ -0,0 +1,54 @@ +/* + * arch/ppc/kernel/ibm440gx_common.h + * + * PPC440GX system library + * + * Eugene Surovegin or + * Copyright (c) 2003 Zultys Technologies + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ +#ifdef __KERNEL__ +#ifndef __PPC_SYSLIB_IBM440GX_COMMON_H +#define __PPC_SYSLIB_IBM440GX_COMMON_H + +#ifndef __ASSEMBLY__ + +#include +#include +#include +#include + +/* + * Please, refer to the Figure 14.1 in 440GX user manual + * + * if internal UART clock is used, ser_clk is ignored + */ +void ibm440gx_get_clocks(struct ibm44x_clocks*, unsigned int sys_clk, + unsigned int ser_clk) __init; + +/* Enable L2 cache */ +void ibm440gx_l2c_enable(void) __init; + +/* Disable L2 cache */ +void ibm440gx_l2c_disable(void) __init; + +/* Get Ethernet Group */ +int ibm440gx_get_eth_grp(void) __init; + +/* Set Ethernet Group */ +void ibm440gx_set_eth_grp(int group) __init; + +/* Enable TAH devices */ +void ibm440gx_tah_enable(void) __init; + +/* Add L2C info to /proc/cpuinfo */ +int ibm440gx_show_cpuinfo(struct seq_file*); + +#endif /* __ASSEMBLY__ */ +#endif /* __PPC_SYSLIB_IBM440GX_COMMON_H */ +#endif /* __KERNEL__ */ diff -Nru a/arch/ppc/syslib/ibm44x_common.h b/arch/ppc/syslib/ibm44x_common.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/syslib/ibm44x_common.h Tue May 18 23:38:09 2004 @@ -0,0 +1,36 @@ +/* + * arch/ppc/kernel/ibm44x_common.h + * + * PPC44x system library + * + * Eugene Surovegin or + * Copyright (c) 2003 Zultys Technologies + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ +#ifdef __KERNEL__ +#ifndef __PPC_SYSLIB_IBM44x_COMMON_H +#define __PPC_SYSLIB_IBM44x_COMMON_H + +#ifndef __ASSEMBLY__ + +/* + * All clocks are in Hz + */ +struct ibm44x_clocks { + unsigned int vco; /* VCO, 0 if system PLL is bypassed */ + unsigned int cpu; /* CPUCoreClk */ + unsigned int plb; /* PLBClk */ + unsigned int opb; /* OPBClk */ + unsigned int ebc; /* PerClk */ + unsigned int uart0; + unsigned int uart1; +}; + +#endif /* __ASSEMBLY__ */ +#endif /* __PPC_SYSLIB_IBM44x_COMMON_H */ +#endif /* __KERNEL__ */ diff -Nru a/arch/ppc/syslib/ibm_ocp.c b/arch/ppc/syslib/ibm_ocp.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/syslib/ibm_ocp.c Tue May 18 23:38:09 2004 @@ -0,0 +1,9 @@ +#include +#include + +struct ocp_sys_info_data ocp_sys_info = { + .opb_bus_freq = 50000000, /* OPB Bus Frequency (Hz) */ + .ebc_bus_freq = 33333333, /* EBC Bus Frequency (Hz) */ +}; + +EXPORT_SYMBOL(ocp_sys_info); diff -Nru a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c --- a/arch/ppc/syslib/m8xx_setup.c Tue May 18 23:38:06 2004 +++ b/arch/ppc/syslib/m8xx_setup.c Tue May 18 23:38:06 2004 @@ -214,14 +214,13 @@ m8xx_restart(char *cmd) { __volatile__ unsigned char dummy; - uint msr; cli(); ((immap_t *)IMAP_ADDR)->im_clkrst.car_plprcr |= 0x00000080; /* Clear the ME bit in MSR to cause checkstop on machine check */ - mtmsr(mfmsr(msr) & ~0x1000); + mtmsr(mfmsr() & ~0x1000); dummy = ((immap_t *)IMAP_ADDR)->im_clkrst.res[0]; printk("Restart failed\n"); @@ -248,8 +247,8 @@ bp = (bd_t *)__res; - seq_printf(m, "clock\t\t: %dMHz\n" - "bus clock\t: %dMHz\n", + seq_printf(m, "clock\t\t: %ldMHz\n" + "bus clock\t: %ldMHz\n", bp->bi_intfreq / 1000000, bp->bi_busfreq / 1000000); diff -Nru a/arch/ppc/syslib/ocp.c b/arch/ppc/syslib/ocp.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc/syslib/ocp.c Tue May 18 23:38:09 2004 @@ -0,0 +1,487 @@ +/* + * ocp.c + * + * (c) Benjamin Herrenschmidt (benh@kernel.crashing.org) + * Mipsys - France + * + * Derived from work (c) Armin Kuster akuster@pacbell.net + * + * Additional support and port to 2.6 LDM/sysfs by + * Matt Porter + * Copyright 2004 MontaVista Software, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * OCP (On Chip Peripheral) is a software emulated "bus" with a + * pseudo discovery method for dumb peripherals. Usually these type + * of peripherals are found on embedded SoC (System On a Chip) + * processors or highly integrated system controllers that have + * a host bridge and many peripherals. Common examples where + * this is already used include the PPC4xx, PPC85xx, MPC52xx, + * and MV64xxx parts. + * + * This subsystem creates a standard OCP bus type within the + * device model. The devices on the OCP bus are seeded by an + * an initial OCP device array created by the arch-specific + * Device entries can be added/removed/modified through OCP + * helper functions to accomodate system and board-specific + * parameters commonly found in embedded systems. OCP also + * provides a standard method for devices to describe extended + * attributes about themselves to the system. A standard access + * method allows OCP drivers to obtain the information, both + * SoC-specific and system/board-specific, needed for operation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +//#define DBG(x) printk x +#define DBG(x) + +extern int mem_init_done; + +extern struct ocp_def core_ocp[]; /* Static list of devices, provided by + CPU core */ + +LIST_HEAD(ocp_devices); /* List of all OCP devices */ +DECLARE_RWSEM(ocp_devices_sem); /* Global semaphores for those lists */ + +static int ocp_inited; + +/* Sysfs support */ +#define OCP_DEF_ATTR(field, format_string) \ +static ssize_t \ +show_##field(struct device *dev, char *buf) \ +{ \ + struct ocp_device *odev = to_ocp_dev(dev); \ + \ + return sprintf(buf, format_string, odev->def->field); \ +} \ +static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL); + +OCP_DEF_ATTR(vendor, "0x%04x\n"); +OCP_DEF_ATTR(function, "0x%04x\n"); +OCP_DEF_ATTR(index, "0x%04x\n"); +#ifdef CONFIG_PTE_64BIT +OCP_DEF_ATTR(paddr, "0x%16Lx\n"); +#else +OCP_DEF_ATTR(paddr, "0x%08lx\n"); +#endif +OCP_DEF_ATTR(irq, "%d\n"); +OCP_DEF_ATTR(pm, "%lu\n"); + +void ocp_create_sysfs_dev_files(struct ocp_device *odev) +{ + struct device *dev = &odev->dev; + + /* Current OCP device def attributes */ + device_create_file(dev, &dev_attr_vendor); + device_create_file(dev, &dev_attr_function); + device_create_file(dev, &dev_attr_index); + device_create_file(dev, &dev_attr_paddr); + device_create_file(dev, &dev_attr_irq); + device_create_file(dev, &dev_attr_pm); + /* Current OCP device additions attributes */ + if (odev->def->additions && odev->def->show) + odev->def->show(dev); +} + +/** + * ocp_device_match - Match one driver to one device + * @drv: driver to match + * @dev: device to match + * + * This function returns 0 if the driver and device don't match + */ +static int +ocp_device_match(struct device *dev, struct device_driver *drv) +{ + struct ocp_device *ocp_dev = to_ocp_dev(dev); + struct ocp_driver *ocp_drv = to_ocp_drv(drv); + const struct ocp_device_id *ids = ocp_drv->id_table; + + if (!ids) + return 0; + + while (ids->vendor || ids->function) { + if ((ids->vendor == OCP_ANY_ID + || ids->vendor == ocp_dev->def->vendor) + && (ids->function == OCP_ANY_ID + || ids->function == ocp_dev->def->function)) + return 1; + ids++; + } + return 0; +} + +static int +ocp_device_probe(struct device *dev) +{ + int error = 0; + struct ocp_driver *drv; + struct ocp_device *ocp_dev; + + drv = to_ocp_drv(dev->driver); + ocp_dev = to_ocp_dev(dev); + + if (drv->probe) { + error = drv->probe(ocp_dev); + if (error >= 0) { + ocp_dev->driver = drv; + error = 0; + } + } + return error; +} + +static int +ocp_device_remove(struct device *dev) +{ + struct ocp_device *ocp_dev = to_ocp_dev(dev); + + if (ocp_dev->driver) { + if (ocp_dev->driver->remove) + ocp_dev->driver->remove(ocp_dev); + ocp_dev->driver = NULL; + } + return 0; +} + +static int +ocp_device_suspend(struct device *dev, u32 state) +{ + struct ocp_device *ocp_dev = to_ocp_dev(dev); + struct ocp_driver *ocp_drv = to_ocp_drv(dev->driver); + + if (dev->driver && ocp_drv->suspend) + return ocp_drv->suspend(ocp_dev, state); + return 0; +} + +static int +ocp_device_resume(struct device *dev) +{ + struct ocp_device *ocp_dev = to_ocp_dev(dev); + struct ocp_driver *ocp_drv = to_ocp_drv(dev->driver); + + if (dev->driver && ocp_drv->resume) + return ocp_drv->resume(ocp_dev); + return 0; +} + +struct bus_type ocp_bus_type = { + .name = "ocp", + .match = ocp_device_match, + .suspend = ocp_device_suspend, + .resume = ocp_device_resume, +}; + +/** + * ocp_register_driver - Register an OCP driver + * @drv: pointer to statically defined ocp_driver structure + * + * The driver's probe() callback is called either recursively + * by this function or upon later call of ocp_driver_init + * + * NOTE: Detection of devices is a 2 pass step on this implementation, + * hotswap isn't supported. First, all OCP devices are put in the device + * list, _then_ all drivers are probed on each match. + */ +int +ocp_register_driver(struct ocp_driver *drv) +{ + int count = 0; + + /* initialize common driver fields */ + drv->driver.name = drv->name; + drv->driver.bus = &ocp_bus_type; + drv->driver.probe = ocp_device_probe; + drv->driver.remove = ocp_device_remove; + + /* register with core */ + return driver_register(&drv->driver); +} + +/** + * ocp_unregister_driver - Unregister an OCP driver + * @drv: pointer to statically defined ocp_driver structure + * + * The driver's remove() callback is called recursively + * by this function for any device already registered + */ +void +ocp_unregister_driver(struct ocp_driver *drv) +{ + DBG(("ocp: ocp_unregister_driver(%s)...\n", drv->name)); + + driver_unregister(&drv->driver); + + DBG(("ocp: ocp_unregister_driver(%s)... done.\n", drv->name)); +} + +/* Core of ocp_find_device(). Caller must hold ocp_devices_sem */ +static struct ocp_device * +__ocp_find_device(unsigned int vendor, unsigned int function, int index) +{ + struct list_head *entry; + struct ocp_device *dev, *found = NULL; + + DBG(("ocp: __ocp_find_device(vendor: %x, function: %x, index: %d)...\n", vendor, function, index)); + + list_for_each(entry, &ocp_devices) { + dev = list_entry(entry, struct ocp_device, link); + if (vendor != OCP_ANY_ID && vendor != dev->def->vendor) + continue; + if (function != OCP_ANY_ID && function != dev->def->function) + continue; + if (index != OCP_ANY_INDEX && index != dev->def->index) + continue; + found = dev; + break; + } + + DBG(("ocp: __ocp_find_device(vendor: %x, function: %x, index: %d)... done\n", vendor, function, index)); + + return found; +} + +/** + * ocp_find_device - Find a device by function & index + * @vendor: vendor ID of the device (or OCP_ANY_ID) + * @function: function code of the device (or OCP_ANY_ID) + * @idx: index of the device (or OCP_ANY_INDEX) + * + * This function allows a lookup of a given function by it's + * index, it's typically used to find the MAL or ZMII associated + * with an EMAC or similar horrors. + * You can pass vendor, though you usually want OCP_ANY_ID there... + */ +struct ocp_device * +ocp_find_device(unsigned int vendor, unsigned int function, int index) +{ + struct ocp_device *dev; + + down_read(&ocp_devices_sem); + dev = __ocp_find_device(vendor, function, index); + up_read(&ocp_devices_sem); + + return dev; +} + +/** + * ocp_get_one_device - Find a def by function & index + * @vendor: vendor ID of the device (or OCP_ANY_ID) + * @function: function code of the device (or OCP_ANY_ID) + * @idx: index of the device (or OCP_ANY_INDEX) + * + * This function allows a lookup of a given ocp_def by it's + * vendor, function, and index. The main purpose for is to + * allow modification of the def before binding to the driver + */ +struct ocp_def * +ocp_get_one_device(unsigned int vendor, unsigned int function, int index) +{ + struct ocp_device *dev; + struct ocp_def *found = NULL; + + DBG(("ocp: ocp_get_one_device(vendor: %x, function: %x, index: %d)...\n", + vendor, function, index)); + + dev = ocp_find_device(vendor, function, index); + + if (dev) + found = dev->def; + + DBG(("ocp: ocp_get_one_device(vendor: %x, function: %x, index: %d)... done.\n", + vendor, function, index)); + + return found; +} + +/** + * ocp_add_one_device - Add a device + * @def: static device definition structure + * + * This function adds a device definition to the + * device list. It may only be called before + * ocp_driver_init() and will return an error + * otherwise. + */ +int +ocp_add_one_device(struct ocp_def *def) +{ + struct ocp_device *dev; + + DBG(("ocp: ocp_add_one_device()...\n")); + + /* Can't be called after ocp driver init */ + if (ocp_inited) + return 1; + + if (mem_init_done) + dev = kmalloc(sizeof(*dev), GFP_KERNEL); + else + dev = alloc_bootmem(sizeof(*dev)); + + if (dev == NULL) + return 1; + memset(dev, 0, sizeof(*dev)); + dev->def = def; + dev->current_state = 4; + sprintf(dev->name, "OCP device %04x:%04x:%04x", + dev->def->vendor, dev->def->function, dev->def->index); + down_write(&ocp_devices_sem); + list_add_tail(&dev->link, &ocp_devices); + up_write(&ocp_devices_sem); + + DBG(("ocp: ocp_add_one_device()...done\n")); + + return 0; +} + +/** + * ocp_remove_one_device - Remove a device by function & index + * @vendor: vendor ID of the device (or OCP_ANY_ID) + * @function: function code of the device (or OCP_ANY_ID) + * @idx: index of the device (or OCP_ANY_INDEX) + * + * This function allows removal of a given function by its + * index. It may only be called before ocp_driver_init() + * and will return an error otherwise. + */ +int +ocp_remove_one_device(unsigned int vendor, unsigned int function, int index) +{ + struct ocp_device *dev; + + DBG(("ocp: ocp_remove_one_device(vendor: %x, function: %x, index: %d)...\n", vendor, function, index)); + + /* Can't be called after ocp driver init */ + if (ocp_inited) + return 1; + + down_write(&ocp_devices_sem); + dev = __ocp_find_device(vendor, function, index); + list_del((struct list_head *)dev); + up_write(&ocp_devices_sem); + + DBG(("ocp: ocp_remove_one_device(vendor: %x, function: %x, index: %d)... done.\n", vendor, function, index)); + + return 0; +} + +/** + * ocp_for_each_device - Iterate over OCP devices + * @callback: routine to execute for each ocp device. + * @arg: user data to be passed to callback routine. + * + * This routine holds the ocp_device semaphore, so the + * callback routine cannot modify the ocp_device list. + */ +void +ocp_for_each_device(void(*callback)(struct ocp_device *, void *arg), void *arg) +{ + struct list_head *entry; + + if (callback) { + down_read(&ocp_devices_sem); + list_for_each(entry, &ocp_devices) + callback(list_entry(entry, struct ocp_device, link), + arg); + up_read(&ocp_devices_sem); + } +} + +/** + * ocp_early_init - Init OCP device management + * + * This function builds the list of devices before setup_arch. + * This allows platform code to modify the device lists before + * they are bound to drivers (changes to paddr, removing devices + * etc) + */ +int __init +ocp_early_init(void) +{ + struct ocp_def *def; + + DBG(("ocp: ocp_early_init()...\n")); + + /* Fill the devices list */ + for (def = core_ocp; def->vendor != OCP_VENDOR_INVALID; def++) + ocp_add_one_device(def); + + DBG(("ocp: ocp_early_init()... done.\n")); + + return 0; +} + +/** + * ocp_driver_init - Init OCP device management + * + * This function is meant to be called via OCP bus registration. + */ +static int __init +ocp_driver_init(void) +{ + int ret = 0, index = 0; + struct device *ocp_bus; + struct list_head *entry; + struct ocp_device *dev; + + if (ocp_inited) + return ret; + ocp_inited = 1; + + DBG(("ocp: ocp_driver_init()...\n")); + + /* Allocate/register primary OCP bus */ + ocp_bus = kmalloc(sizeof(struct device), GFP_KERNEL); + if (ocp_bus == NULL) + return 1; + memset(ocp_bus, 0, sizeof(struct device)); + strcpy(ocp_bus->bus_id, "ocp"); + + bus_register(&ocp_bus_type); + + device_register(ocp_bus); + + /* Put each OCP device into global device list */ + list_for_each(entry, &ocp_devices) { + dev = list_entry(entry, struct ocp_device, link); + sprintf(dev->dev.bus_id, "%2.2x", index); + dev->dev.parent = ocp_bus; + dev->dev.bus = &ocp_bus_type; + device_register(&dev->dev); + ocp_create_sysfs_dev_files(dev); + index++; + } + + DBG(("ocp: ocp_driver_init()... done.\n")); + + return 0; +} + +postcore_initcall(ocp_driver_init); + +EXPORT_SYMBOL(ocp_bus_type); +EXPORT_SYMBOL(ocp_find_device); +EXPORT_SYMBOL(ocp_register_driver); +EXPORT_SYMBOL(ocp_unregister_driver); diff -Nru a/arch/ppc/syslib/ppc405_pci.c b/arch/ppc/syslib/ppc405_pci.c --- a/arch/ppc/syslib/ppc405_pci.c Tue May 18 23:38:08 2004 +++ b/arch/ppc/syslib/ppc405_pci.c Tue May 18 23:38:08 2004 @@ -57,14 +57,6 @@ ) ) { - DBG(KERN_ERR "PCI: 0x%lx <= resource[%d] <= 0x%lx" - ", bus 0x%x dev 0x%2.2x.%1.1x,\n" - KERN_ERR " %s\n" - KERN_ERR " fixup will be attempted later\n", - min_host_addr, i, max_host_addr, - dev->bus->number, PCI_SLOT(dev->devfn), - PCI_FUNC(dev->devfn), dev->slot.name); - /* force pcibios_assign_resources() to assign a new address */ res->end -= res->start; res->start = 0; diff -Nru a/arch/ppc/syslib/ppc4xx_pic.c b/arch/ppc/syslib/ppc4xx_pic.c --- a/arch/ppc/syslib/ppc4xx_pic.c Tue May 18 23:38:05 2004 +++ b/arch/ppc/syslib/ppc4xx_pic.c Tue May 18 23:38:05 2004 @@ -142,9 +142,12 @@ #ifndef UIC1 #define UIC1 UIC0 #endif +#ifndef UIC2 +#define UIC2 UIC1 +#endif static void -ppc405_uic_enable(unsigned int irq) +ppc4xx_uic_enable(unsigned int irq) { int bit, word; irq_desc_t *desc = irq_desc + irq; @@ -153,7 +156,7 @@ word = irq >> 5; #ifdef UIC_DEBUG - printk("ppc405_uic_enable - irq %d word %d bit 0x%x\n", irq, word, bit); + printk("ppc4xx_uic_enable - irq %d word %d bit 0x%x\n", irq, word, bit); #endif ppc_cached_irq_mask[word] |= 1 << (31 - bit); switch (word) { @@ -162,38 +165,35 @@ if ((mfdcr(DCRN_UIC_TR(UIC0)) & (1 << (31 - bit))) == 0) desc->status |= IRQ_LEVEL; else - /* lets hope this works since in linux/irq.h - * there is no define for EDGE and it's assumed - * once you set status to LEVEL you would not - * want to change it - Armin - */ - desc->status = desc->status & ~IRQ_LEVEL; + desc->status = desc->status & ~IRQ_LEVEL; break; case 1: mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]); if ((mfdcr(DCRN_UIC_TR(UIC1)) & (1 << (31 - bit))) == 0) desc->status |= IRQ_LEVEL; else - /* lets hope this works since in linux/irq.h - * there is no define for EDGE and it's assumed - * once you set status to LEVEL you would not - * want to change it - Armin - */ - desc->status = desc->status & ~IRQ_LEVEL; - break; + desc->status = desc->status & ~IRQ_LEVEL; + break; + case 2: + mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]); + if ((mfdcr(DCRN_UIC_TR(UIC2)) & (1 << (31 - bit))) == 0) + desc->status |= IRQ_LEVEL; + else + desc->status = desc->status & ~IRQ_LEVEL; + break; } } static void -ppc405_uic_disable(unsigned int irq) +ppc4xx_uic_disable(unsigned int irq) { int bit, word; bit = irq & 0x1f; word = irq >> 5; #ifdef UIC_DEBUG - printk("ppc405_uic_disable - irq %d word %d bit 0x%x\n", irq, word, + printk("ppc4xx_uic_disable - irq %d word %d bit 0x%x\n", irq, word, bit); #endif ppc_cached_irq_mask[word] &= ~(1 << (31 - bit)); @@ -204,11 +204,14 @@ case 1: mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]); break; + case 2: + mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]); + break; } } static void -ppc405_uic_disable_and_ack(unsigned int irq) +ppc4xx_uic_disable_and_ack(unsigned int irq) { int bit, word; @@ -216,7 +219,7 @@ word = irq >> 5; #ifdef UIC_DEBUG - printk("ppc405_uic_disable_and_ack - irq %d word %d bit 0x%x\n", irq, + printk("ppc4xx_uic_disable_and_ack - irq %d word %d bit 0x%x\n", irq, word, bit); #endif ppc_cached_irq_mask[word] &= ~(1 << (31 - bit)); @@ -224,16 +227,30 @@ case 0: mtdcr(DCRN_UIC_ER(UIC0), ppc_cached_irq_mask[word]); mtdcr(DCRN_UIC_SR(UIC0), (1 << (31 - bit))); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC0NC); +#endif break; case 1: mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]); mtdcr(DCRN_UIC_SR(UIC1), (1 << (31 - bit))); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC1NC); +#endif + break; + case 2: + mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]); + mtdcr(DCRN_UIC_SR(UIC2), (1 << (31 - bit))); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC2NC); +#endif break; } + } static void -ppc405_uic_end(unsigned int irq) +ppc4xx_uic_end(unsigned int irq) { int bit, word; unsigned int tr_bits; @@ -242,7 +259,7 @@ word = irq >> 5; #ifdef UIC_DEBUG - printk("ppc405_uic_end - irq %d word %d bit 0x%x\n", irq, word, bit); + printk("ppc4xx_uic_end - irq %d word %d bit 0x%x\n", irq, word, bit); #endif switch (word) { @@ -252,6 +269,9 @@ case 1: tr_bits = mfdcr(DCRN_UIC_TR(UIC1)); break; + case 2: + tr_bits = mfdcr(DCRN_UIC_TR(UIC2)); + break; } if ((tr_bits & (1 << (31 - bit))) == 0) { @@ -259,9 +279,21 @@ switch (word) { case 0: mtdcr(DCRN_UIC_SR(UIC0), 1 << (31 - bit)); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC0NC); +#endif break; case 1: mtdcr(DCRN_UIC_SR(UIC1), 1 << (31 - bit)); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC1NC); +#endif + break; + case 2: + mtdcr(DCRN_UIC_SR(UIC2), 1 << (31 - bit)); +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), UICB_UIC2NC); +#endif break; } } @@ -275,11 +307,14 @@ case 1: mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]); break; + case 2: + mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]); + break; } } } -static struct hw_interrupt_type ppc405_uic = { +static struct hw_interrupt_type ppc4xx_uic = { #if (NR_UICS == 1) "IBM UIC", #else @@ -287,15 +322,15 @@ #endif NULL, NULL, - ppc405_uic_enable, - ppc405_uic_disable, - ppc405_uic_disable_and_ack, - ppc405_uic_end, + ppc4xx_uic_enable, + ppc4xx_uic_disable, + ppc4xx_uic_disable_and_ack, + ppc4xx_uic_end, 0 }; int -ppc405_pic_get_irq(struct pt_regs *regs) +ppc4xx_pic_get_irq(struct pt_regs *regs) { int irq, cas_irq; unsigned long bits; @@ -305,9 +340,25 @@ * enabled. */ +#if (NR_UICS > 2) + bits = mfdcr(DCRN_UIC_MSR(UICB)); +#else bits = mfdcr(DCRN_UIC_MSR(UIC0)); - -#if (NR_UICS > 1) +#endif +#if (NR_UICS > 2) + if (bits & UICB_UIC0NC) { + bits = mfdcr(DCRN_UIC_MSR(UIC0)); + irq = 32 - ffs(bits); + } else if (bits & UICB_UIC1NC) { + bits = mfdcr(DCRN_UIC_MSR(UIC1)); + irq = 64 - ffs(bits); + } else if (bits & UICB_UIC2NC) { + bits = mfdcr(DCRN_UIC_MSR(UIC2)); + irq = 96 - ffs(bits); + } else { + irq = -1; + } +#elif (NR_UICS > 1) if (bits & UIC_CASCADE_MASK) { bits = mfdcr(DCRN_UIC_MSR(UIC1)); cas_irq = 32 - ffs(bits); @@ -330,7 +381,7 @@ irq = -1; #ifdef UIC_DEBUG - printk("ppc405_pic_get_irq - irq %d bit 0x%x\n", irq, bits); + printk("ppc4xx_pic_get_irq - irq %d bit 0x%x\n", irq, bits); #endif return (irq); @@ -354,8 +405,10 @@ unsigned long ppc_cached_pol_mask[NR_MASK_WORDS]; ppc_cached_sense_mask[0] = 0; ppc_cached_sense_mask[1] = 0; + ppc_cached_sense_mask[2] = 0; ppc_cached_pol_mask[0] = 0; ppc_cached_pol_mask[1] = 0; + ppc_cached_pol_mask[2] = 0; for (irq = 0; irq < NR_IRQS; irq++) { @@ -398,6 +451,18 @@ mtdcr(DCRN_UIC_TR(UIC1), ppc_cached_sense_mask[word]); break; + case 2: +#ifdef PPC4xx_PIC_DEBUG + printk("Pol %x ", mfdcr(DCRN_UIC_PR(UIC2))); + printk("Level %x\n", mfdcr(DCRN_UIC_TR(UIC2))); +#endif + /* polarity setting */ + mtdcr(DCRN_UIC_PR(UIC2), ppc_cached_pol_mask[word]); + + /* Level setting */ + mtdcr(DCRN_UIC_TR(UIC2), ppc_cached_sense_mask[word]); + + break; } } @@ -405,13 +470,13 @@ void __init ppc4xx_pic_init(void) { - /* * Disable all external interrupts until they are * explicity requested. */ ppc_cached_irq_mask[0] = 0; ppc_cached_irq_mask[1] = 0; + ppc_cached_irq_mask[2] = 0; #if defined CONFIG_403 mtdcr(DCRN_EXIER, ppc_cached_irq_mask[0]); @@ -419,11 +484,21 @@ ppc4xx_pic = &ppc403_aic; ppc_md.get_irq = ppc403_pic_get_irq; #else +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_ER(UICB), UICB_UIC0NC | UICB_UIC1NC | UICB_UIC2NC); + mtdcr(DCRN_UIC_CR(UICB), 0); + + mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[2]); + mtdcr(DCRN_UIC_CR(UIC2), 0); + +#endif #if (NR_UICS > 1) - ppc_cached_irq_mask[0] |= 1 << (31 - UIC0_UIC1NC); /* enable cascading interrupt */ +#if (NR_UICS == 2) + /* enable cascading interrupt */ + ppc_cached_irq_mask[0] |= 1 << (31 - UIC0_UIC1NC); +#endif mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[1]); mtdcr(DCRN_UIC_CR(UIC1), 0); - #endif mtdcr(DCRN_UIC_ER(UIC0), ppc_cached_irq_mask[0]); mtdcr(DCRN_UIC_CR(UIC0), 0); @@ -432,13 +507,16 @@ ppc4xx_extpic_init(); /* Clear any pending interrupts */ +#if (NR_UICS > 2) + mtdcr(DCRN_UIC_SR(UICB), 0xffffffff); + mtdcr(DCRN_UIC_SR(UIC2), 0xffffffff); +#endif #if (NR_UICS > 1) mtdcr(DCRN_UIC_SR(UIC1), 0xffffffff); #endif mtdcr(DCRN_UIC_SR(UIC0), 0xffffffff); - ppc4xx_pic = &ppc405_uic; - ppc_md.get_irq = ppc405_pic_get_irq; + ppc4xx_pic = &ppc4xx_uic; + ppc_md.get_irq = ppc4xx_pic_get_irq; #endif - } diff -Nru a/arch/ppc/syslib/ppc8xx_pic.h b/arch/ppc/syslib/ppc8xx_pic.h --- a/arch/ppc/syslib/ppc8xx_pic.h Tue May 18 23:38:06 2004 +++ b/arch/ppc/syslib/ppc8xx_pic.h Tue May 18 23:38:06 2004 @@ -3,6 +3,7 @@ #include #include +#include extern struct hw_interrupt_type ppc8xx_pic; diff -Nru a/arch/ppc/syslib/prom_init.c b/arch/ppc/syslib/prom_init.c --- a/arch/ppc/syslib/prom_init.c Tue May 18 23:38:09 2004 +++ b/arch/ppc/syslib/prom_init.c Tue May 18 23:38:09 2004 @@ -800,8 +800,7 @@ /* First get a handle for the stdout device */ prom = pp; - prom_chosen = call_prom("finddevice", 1, 1, - "/chosen"); + prom_chosen = call_prom("finddevice", 1, 1, "/chosen"); if (prom_chosen == (void *)-1) prom_exit(); if ((int) call_prom("getprop", 4, 1, prom_chosen, diff -Nru a/arch/ppc64/Kconfig b/arch/ppc64/Kconfig --- a/arch/ppc64/Kconfig Tue May 18 23:38:07 2004 +++ b/arch/ppc64/Kconfig Tue May 18 23:38:07 2004 @@ -49,6 +49,10 @@ source "init/Kconfig" +config SYSVIPC_COMPAT + bool + depends on COMPAT && SYSVIPC + default y menu "Platform support" @@ -89,6 +93,16 @@ bool "Apple PowerMac G5 support" select ADB_PMU +config PPC_SPLPAR + depends on PPC_PSERIES + bool "Support for shared-processor logical partitions" + default n + help + Enabling this option will make the kernel run more efficiently + on logically-partitioned pSeries systems which use shared + processors, that is, which share physical processors between + two or more partitions. + config PMAC_DART bool "Enable DART/IOMMU on PowerMac (allow >2G of RAM)" depends on PPC_PMAC @@ -173,6 +187,15 @@ bool "NUMA support" depends on DISCONTIGMEM +config SCHED_SMT + bool "SMT (Hyperthreading) scheduler support" + depends on SMP + default off + help + SMT scheduler support improves the CPU scheduler's decision making + when dealing with POWER5 cpus at a cost of slightly increased + overhead in some places. If unsure say N here. + config PREEMPT bool "Preemptible Kernel" depends on BROKEN @@ -396,6 +419,16 @@ If you don't debug the kernel, you can say N. endmenu + +config SPINLINE + bool "Inline spinlock code at each call site" + depends on SMP && !PPC_SPLPAR && !PPC_ISERIES + help + Say Y if you want to have the code for acquiring spinlocks + and rwlocks inlined at each call site. This makes the kernel + somewhat bigger, but can be useful when profiling the kernel. + + If in doubt, say N. source "security/Kconfig" diff -Nru a/arch/ppc64/kernel/HvLpEvent.c b/arch/ppc64/kernel/HvLpEvent.c --- a/arch/ppc64/kernel/HvLpEvent.c Tue May 18 23:38:07 2004 +++ b/arch/ppc64/kernel/HvLpEvent.c Tue May 18 23:38:07 2004 @@ -8,6 +8,7 @@ */ #include #include +#include #include #include #include @@ -41,6 +42,8 @@ } return rc; } +EXPORT_SYMBOL(HvLpEvent_registerHandler); +EXPORT_SYMBOL(HvLpEvent_unregisterHandler); /* (lpIndex is the partition index of the target partition. * needed only for VirtualIo, VirtualLan and SessionMgr. Zero diff -Nru a/arch/ppc64/kernel/cpu_setup_power4.S b/arch/ppc64/kernel/cpu_setup_power4.S --- a/arch/ppc64/kernel/cpu_setup_power4.S Tue May 18 23:38:05 2004 +++ b/arch/ppc64/kernel/cpu_setup_power4.S Tue May 18 23:38:05 2004 @@ -119,7 +119,9 @@ /* We only deal with 970 for now */ mfspr r0,SPRN_PVR srwi r0,r0,16 - cmpwi r0,0x39 + cmpwi cr0,r0,0x39 + cmpwi cr1,r0,0x3c + cror 4*cr0+eq,4*cr0+eq,4*cr1+eq bne 1f /* Save HID0,1,4 and 5 */ @@ -149,7 +151,9 @@ /* We only deal with 970 for now */ mfspr r0,SPRN_PVR srwi r0,r0,16 - cmpwi r0,0x39 + cmpwi cr0,r0,0x39 + cmpwi cr1,r0,0x3c + cror 4*cr0+eq,4*cr0+eq,4*cr1+eq bne 1f /* Clear interrupt prefix */ diff -Nru a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S --- a/arch/ppc64/kernel/head.S Tue May 18 23:38:07 2004 +++ b/arch/ppc64/kernel/head.S Tue May 18 23:38:07 2004 @@ -265,6 +265,9 @@ mfspr r23,SPRG2; /* Save r20 in exc. frame */ \ std r23,EX_R20(r21); \ \ + mfmsr r22; /* set MSR.RI */ \ + ori r22,r22,MSR_RI; \ + mtmsrd r22,1; \ mfcr r23; /* save CR in r23 */ /* diff -Nru a/arch/ppc64/kernel/iommu.c b/arch/ppc64/kernel/iommu.c --- a/arch/ppc64/kernel/iommu.c Tue May 18 23:38:05 2004 +++ b/arch/ppc64/kernel/iommu.c Tue May 18 23:38:05 2004 @@ -491,7 +491,7 @@ */ if (order >= IOMAP_MAX_ORDER) { printk("iommu_alloc_consistent size too large: 0x%lx\n", size); - return (void *)DMA_ERROR_CODE; + return NULL; } if (!tbl) diff -Nru a/arch/ppc64/kernel/irq.c b/arch/ppc64/kernel/irq.c --- a/arch/ppc64/kernel/irq.c Tue May 18 23:38:06 2004 +++ b/arch/ppc64/kernel/irq.c Tue May 18 23:38:06 2004 @@ -376,10 +376,8 @@ int status = 0; int retval = 0; -#ifndef CONFIG_PPC_ISERIES if (!(action->flags & SA_INTERRUPT)) local_irq_enable(); -#endif do { status |= action->flags; @@ -388,9 +386,7 @@ } while (action); if (status & SA_SAMPLE_RANDOM) add_interrupt_randomness(irq); -#ifndef CONFIG_PPC_ISERIES local_irq_disable(); -#endif return retval; } @@ -627,6 +623,21 @@ int irq, first = 1; irq_enter(); + +#ifdef CONFIG_DEBUG_STACKOVERFLOW + /* Debugging check for stack overflow: is there less than 4KB free? */ + { + long sp; + + sp = __get_SP() & (THREAD_SIZE-1); + + if (unlikely(sp < (sizeof(struct thread_info) + 4096))) { + printk("do_IRQ: stack overflow: %ld\n", + sp - sizeof(struct thread_info)); + dump_stack(); + } + } +#endif /* * Every arch is required to implement ppc_md.get_irq. diff -Nru a/arch/ppc64/kernel/mf_proc.c b/arch/ppc64/kernel/mf_proc.c --- a/arch/ppc64/kernel/mf_proc.c Tue May 18 23:38:06 2004 +++ b/arch/ppc64/kernel/mf_proc.c Tue May 18 23:38:06 2004 @@ -177,10 +177,14 @@ static int proc_mf_change_vmlinux(struct file *file, const char *buffer, unsigned long count, void *data) { + int rc; if (!capable(CAP_SYS_ADMIN)) return -EACCES; - mf_setVmlinuxChunk(buffer, count, file->f_pos, (u64)data); + rc = mf_setVmlinuxChunk(buffer, count, file->f_pos, (u64)data); + if (rc < 0) + return rc; + file->f_pos += count; return count; diff -Nru a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S --- a/arch/ppc64/kernel/misc.S Tue May 18 23:38:09 2004 +++ b/arch/ppc64/kernel/misc.S Tue May 18 23:38:09 2004 @@ -316,6 +316,8 @@ eieio stbu r5,1(r4) bdnz 00b + twi 0,r5,0 + isync blr _GLOBAL(_outsb) @@ -325,8 +327,8 @@ blelr- 00: lbzu r5,1(r4) stb r5,0(r3) - eieio bdnz 00b + sync blr _GLOBAL(_insw) @@ -338,6 +340,8 @@ eieio sthu r5,2(r4) bdnz 00b + twi 0,r5,0 + isync blr _GLOBAL(_outsw) @@ -346,9 +350,9 @@ subi r4,r4,2 blelr- 00: lhzu r5,2(r4) - eieio sthbrx r5,0,r3 bdnz 00b + sync blr _GLOBAL(_insl) @@ -360,6 +364,8 @@ eieio stwu r5,4(r4) bdnz 00b + twi 0,r5,0 + isync blr _GLOBAL(_outsl) @@ -369,8 +375,8 @@ blelr- 00: lwzu r5,4(r4) stwbrx r5,0,r3 - eieio bdnz 00b + sync blr /* _GLOBAL(ide_insw) now in drivers/ide/ide-iops.c */ @@ -383,6 +389,8 @@ eieio sthu r5,2(r4) bdnz 00b + twi 0,r5,0 + isync blr /* _GLOBAL(ide_outsw) now in drivers/ide/ide-iops.c */ @@ -393,8 +401,8 @@ blelr- 00: lhzu r5,2(r4) sth r5,0(r3) - eieio bdnz 00b + sync blr _GLOBAL(_insl_ns) @@ -406,6 +414,8 @@ eieio stwu r5,4(r4) bdnz 00b + twi 0,r5,0 + isync blr _GLOBAL(_outsl_ns) @@ -415,8 +425,8 @@ blelr- 00: lwzu r5,4(r4) stw r5,0(r3) - eieio bdnz 00b + sync blr _GLOBAL(abs) @@ -717,8 +727,8 @@ .llong .ppc32_select .llong .sys_flock .llong .sys_msync - .llong .sys32_readv /* 145 */ - .llong .sys32_writev + .llong .compat_sys_readv /* 145 */ + .llong .compat_sys_writev .llong .sys32_getsid .llong .sys_fdatasync .llong .sys32_sysctl @@ -740,7 +750,7 @@ .llong .sys_getresuid /* 165 */ .llong .sys_ni_syscall /* old query_module syscall */ .llong .sys_poll - .llong .sys32_nfsservctl + .llong .compat_sys_nfsservctl .llong .sys_setresgid .llong .sys_getresgid /* 170 */ .llong .sys32_prctl diff -Nru a/arch/ppc64/kernel/module.c b/arch/ppc64/kernel/module.c --- a/arch/ppc64/kernel/module.c Tue May 18 23:38:09 2004 +++ b/arch/ppc64/kernel/module.c Tue May 18 23:38:09 2004 @@ -138,6 +138,16 @@ return relocs * sizeof(struct ppc64_stub_entry); } +static void dedotify_versions(struct modversion_info *vers, + unsigned long size) +{ + struct modversion_info *end; + + for (end = (void *)vers + size; vers < end; vers++) + if (vers->name[0] == '.') + memmove(vers->name, vers->name+1, strlen(vers->name)); +} + /* Undefined symbols which refer to .funcname, hack to funcname */ static void dedotify(Elf64_Sym *syms, unsigned int numsyms, char *strtab) { @@ -166,6 +176,9 @@ me->arch.stubs_section = i; else if (strcmp(secstrings + sechdrs[i].sh_name, ".toc") == 0) me->arch.toc_section = i; + else if (strcmp(secstrings+sechdrs[i].sh_name,"__versions")==0) + dedotify_versions((void *)hdr + sechdrs[i].sh_offset, + sechdrs[i].sh_size); /* We don't handle .init for the moment: rename to _init */ while ((p = strstr(secstrings + sechdrs[i].sh_name, ".init"))) diff -Nru a/arch/ppc64/kernel/pSeries_nvram.c b/arch/ppc64/kernel/pSeries_nvram.c --- a/arch/ppc64/kernel/pSeries_nvram.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/kernel/pSeries_nvram.c Tue May 18 23:38:08 2004 @@ -29,7 +29,7 @@ #include static unsigned int nvram_size; -static unsigned int nvram_fetch, nvram_store; +static int nvram_fetch, nvram_store; static char nvram_buf[NVRW_CNT]; /* assume this is in the first 4GB */ static spinlock_t nvram_lock = SPIN_LOCK_UNLOCKED; diff -Nru a/arch/ppc64/kernel/pacaData.c b/arch/ppc64/kernel/pacaData.c --- a/arch/ppc64/kernel/pacaData.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/kernel/pacaData.c Tue May 18 23:38:08 2004 @@ -36,6 +36,7 @@ { \ .xLpPacaPtr = &paca[number].xLpPaca, \ .xLpRegSavePtr = &paca[number].xRegSav, \ + .lock_token = 0x8000, \ .xPacaIndex = (number), /* Paca Index */ \ .default_decr = 0x00ff0000, /* Initial Decr */ \ .xStab_data = { \ diff -Nru a/arch/ppc64/kernel/process.c b/arch/ppc64/kernel/process.c --- a/arch/ppc64/kernel/process.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/kernel/process.c Tue May 18 23:38:08 2004 @@ -469,12 +469,6 @@ return 1; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched (*(unsigned long *)scheduling_functions_start_here) -#define last_sched (*(unsigned long *)scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long ip, sp; @@ -493,7 +487,7 @@ return 0; if (count > 0) { ip = *(unsigned long *)(sp + 16); - if (ip < first_sched || ip >= last_sched) + if (!in_sched_functions(ip)) return ip; } } while (count++ < 16); diff -Nru a/arch/ppc64/kernel/rtas.c b/arch/ppc64/kernel/rtas.c --- a/arch/ppc64/kernel/rtas.c Tue May 18 23:38:05 2004 +++ b/arch/ppc64/kernel/rtas.c Tue May 18 23:38:05 2004 @@ -345,7 +345,7 @@ rtas_firmware_flash_list.num_blocks = 0; flist = (struct flash_block_list *)&rtas_firmware_flash_list; rtas_block_list = virt_to_abs(flist); - if (rtas_block_list >= (4UL << 20)) { + if (rtas_block_list >= 4UL*1024*1024*1024) { printk(KERN_ALERT "FLASH: kernel bug...flash list header addr above 4GB\n"); return; } diff -Nru a/arch/ppc64/kernel/rtas_flash.c b/arch/ppc64/kernel/rtas_flash.c --- a/arch/ppc64/kernel/rtas_flash.c Tue May 18 23:38:09 2004 +++ b/arch/ppc64/kernel/rtas_flash.c Tue May 18 23:38:09 2004 @@ -692,7 +692,7 @@ if (rc != 0) goto cleanup; - manage_pde = create_flash_pde("ppc64/rtas" MANAGE_FLASH_NAME, + manage_pde = create_flash_pde("ppc64/rtas/" MANAGE_FLASH_NAME, &manage_flash_operations); if (manage_pde == NULL) { rc = -ENOMEM; diff -Nru a/arch/ppc64/kernel/rtasd.c b/arch/ppc64/kernel/rtasd.c --- a/arch/ppc64/kernel/rtasd.c Tue May 18 23:38:06 2004 +++ b/arch/ppc64/kernel/rtasd.c Tue May 18 23:38:06 2004 @@ -372,7 +372,7 @@ if (event_scan == RTAS_UNKNOWN_SERVICE || get_eventscan_parms() == -1) goto error; - rtas_log_buf = vmalloc(rtas_error_log_max*LOG_NUMBER); + rtas_log_buf = vmalloc(rtas_error_log_buffer_max*LOG_NUMBER); if (!rtas_log_buf) { printk(KERN_ERR "rtasd: no memory\n"); goto error; @@ -450,7 +450,7 @@ return 1; } - entry = create_proc_entry("ppc64/error_log", S_IRUSR, NULL); + entry = create_proc_entry("ppc64/rtas/error_log", S_IRUSR, NULL); if (entry) entry->proc_fops = &proc_rtas_log_operations; else diff -Nru a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c --- a/arch/ppc64/kernel/smp.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/kernel/smp.c Tue May 18 23:38:08 2004 @@ -692,6 +692,9 @@ int ret = -1, cpus; unsigned long timeout; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); @@ -834,11 +837,6 @@ paca[boot_cpuid].prof_counter = 1; paca[boot_cpuid].prof_multiplier = 1; - /* - * XXX very rough. - */ - cache_decay_ticks = HZ/100; - #ifndef CONFIG_PPC_ISERIES paca[boot_cpuid].next_jiffy_update_tb = tb_last_stamp = get_tb(); @@ -992,3 +990,218 @@ set_cpus_allowed(current, old_mask); } + +#ifdef CONFIG_SCHED_SMT +#ifdef CONFIG_NUMA +static struct sched_group sched_group_cpus[NR_CPUS]; +static struct sched_group sched_group_phys[NR_CPUS]; +static struct sched_group sched_group_nodes[MAX_NUMNODES]; +static DEFINE_PER_CPU(struct sched_domain, cpu_domains); +static DEFINE_PER_CPU(struct sched_domain, phys_domains); +static DEFINE_PER_CPU(struct sched_domain, node_domains); +__init void arch_init_sched_domains(void) +{ + int i; + struct sched_group *first = NULL, *last = NULL; + + /* Set up domains */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_domain *phys_domain = &per_cpu(phys_domains, i); + struct sched_domain *node_domain = &per_cpu(node_domains, i); + int node = cpu_to_node(i); + cpumask_t nodemask = node_to_cpumask(node); + cpumask_t my_cpumask = cpumask_of_cpu(i); + cpumask_t sibling_cpumask = cpumask_of_cpu(i ^ 0x1); + + *cpu_domain = SD_SIBLING_INIT; + if (cur_cpu_spec->cpu_features & CPU_FTR_SMT) + cpus_or(cpu_domain->span, my_cpumask, sibling_cpumask); + else + cpu_domain->span = my_cpumask; + cpu_domain->parent = phys_domain; + cpu_domain->groups = &sched_group_cpus[i]; + + *phys_domain = SD_CPU_INIT; + phys_domain->span = nodemask; + phys_domain->parent = node_domain; + phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)]; + + *node_domain = SD_NODE_INIT; + node_domain->span = cpu_possible_map; + node_domain->groups = &sched_group_nodes[node]; + } + + /* Set up CPU (sibling) groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + int j; + first = last = NULL; + + if (i != first_cpu(cpu_domain->span)) + continue; + + for_each_cpu_mask(j, cpu_domain->span) { + struct sched_group *cpu = &sched_group_cpus[j]; + + cpus_clear(cpu->cpumask); + cpu_set(j, cpu->cpumask); + cpu->cpu_power = SCHED_LOAD_SCALE; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + for (i = 0; i < MAX_NUMNODES; i++) { + int j; + cpumask_t nodemask; + struct sched_group *node = &sched_group_nodes[i]; + cpumask_t node_cpumask = node_to_cpumask(i); + cpus_and(nodemask, node_cpumask, cpu_possible_map); + + if (cpus_empty(nodemask)) + continue; + + first = last = NULL; + /* Set up physical groups */ + for_each_cpu_mask(j, nodemask) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, j); + struct sched_group *cpu = &sched_group_phys[j]; + + if (j != first_cpu(cpu_domain->span)) + continue; + + cpu->cpumask = cpu_domain->span; + /* + * Make each extra sibling increase power by 10% of + * the basic CPU. This is very arbitrary. + */ + cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10; + node->cpu_power += cpu->cpu_power; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + /* Set up nodes */ + first = last = NULL; + for (i = 0; i < MAX_NUMNODES; i++) { + struct sched_group *cpu = &sched_group_nodes[i]; + cpumask_t nodemask; + cpumask_t node_cpumask = node_to_cpumask(i); + cpus_and(nodemask, node_cpumask, cpu_possible_map); + + if (cpus_empty(nodemask)) + continue; + + cpu->cpumask = nodemask; + /* ->cpu_power already setup */ + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + + mb(); + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + cpu_attach_domain(cpu_domain, i); + } +} +#else /* !CONFIG_NUMA */ +static struct sched_group sched_group_cpus[NR_CPUS]; +static struct sched_group sched_group_phys[NR_CPUS]; +static DEFINE_PER_CPU(struct sched_domain, cpu_domains); +static DEFINE_PER_CPU(struct sched_domain, phys_domains); +__init void arch_init_sched_domains(void) +{ + int i; + struct sched_group *first = NULL, *last = NULL; + + /* Set up domains */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_domain *phys_domain = &per_cpu(phys_domains, i); + cpumask_t my_cpumask = cpumask_of_cpu(i); + cpumask_t sibling_cpumask = cpumask_of_cpu(i ^ 0x1); + + *cpu_domain = SD_SIBLING_INIT; + if (cur_cpu_spec->cpu_features & CPU_FTR_SMT) + cpus_or(cpu_domain->span, my_cpumask, sibling_cpumask); + else + cpu_domain->span = my_cpumask; + cpu_domain->parent = phys_domain; + cpu_domain->groups = &sched_group_cpus[i]; + + *phys_domain = SD_CPU_INIT; + phys_domain->span = cpu_possible_map; + phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)]; + } + + /* Set up CPU (sibling) groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + int j; + first = last = NULL; + + if (i != first_cpu(cpu_domain->span)) + continue; + + for_each_cpu_mask(j, cpu_domain->span) { + struct sched_group *cpu = &sched_group_cpus[j]; + + cpus_clear(cpu->cpumask); + cpu_set(j, cpu->cpumask); + cpu->cpu_power = SCHED_LOAD_SCALE; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + first = last = NULL; + /* Set up physical groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_group *cpu = &sched_group_phys[i]; + + if (i != first_cpu(cpu_domain->span)) + continue; + + cpu->cpumask = cpu_domain->span; + /* See SMT+NUMA setup for comment */ + cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + + mb(); + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + cpu_attach_domain(cpu_domain, i); + } +} +#endif /* CONFIG_NUMA */ +#endif /* CONFIG_SCHED_SMT */ diff -Nru a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c --- a/arch/ppc64/kernel/sys_ppc32.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/kernel/sys_ppc32.c Tue May 18 23:38:08 2004 @@ -15,7 +15,6 @@ */ #include -#include #include #include #include @@ -60,17 +59,17 @@ #include #include #include +#include + +#include +#include +#include #include #include #include #include - #include - -#include -#include -#include #include #include #include @@ -78,178 +77,6 @@ #include "pci.h" -typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *); -typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *); - -static long do_readv_writev32(int type, struct file *file, - const struct compat_iovec *vector, u32 count) -{ - compat_ssize_t tot_len; - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack, *ivp; - struct inode *inode; - long retval, i; - io_fn_t fn; - iov_fn_t fnv; - - /* - * SuS says "The readv() function *may* fail if the iovcnt argument - * was less than or equal to 0, or greater than {IOV_MAX}. Linux has - * traditionally returned zero for zero segments, so... - */ - retval = 0; - if (count == 0) - goto out; - - /* First get the "struct iovec" from user memory and - * verify all the pointers - */ - retval = -EINVAL; - if (count > UIO_MAXIOV) - goto out; - if (!file->f_op) - goto out; - if (count > UIO_FASTIOV) { - retval = -ENOMEM; - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - goto out; - } - retval = -EFAULT; - if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count)) - goto out; - - /* - * Single unix specification: - * We should -EINVAL if an element length is not >= 0 and fitting an - * ssize_t. The total length is fitting an ssize_t - * - * Be careful here because iov_len is a size_t not an ssize_t - */ - tot_len = 0; - i = count; - ivp = iov; - retval = -EINVAL; - while(i > 0) { - compat_ssize_t tmp = tot_len; - compat_ssize_t len; - u32 buf; - - if (__get_user(len, &vector->iov_len) || - __get_user(buf, &vector->iov_base)) { - retval = -EFAULT; - goto out; - } - if (len < 0) /* size_t not fitting an compat_ssize_t .. */ - goto out; - tot_len += len; - if (tot_len < tmp) /* maths overflow on the compat_ssize_t */ - goto out; - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t) len; - vector++; - ivp++; - i--; - } - if (tot_len == 0) { - retval = 0; - goto out; - } - - inode = file->f_dentry->d_inode; - /* VERIFY_WRITE actually means a read, as we write to user space */ - retval = locks_verify_area((type == READ - ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE), - inode, file, file->f_pos, tot_len); - if (retval) - goto out; - - if (type == READ) { - fn = file->f_op->read; - fnv = file->f_op->readv; - } else { - fn = (io_fn_t)file->f_op->write; - fnv = file->f_op->writev; - } - if (fnv) { - retval = fnv(file, iov, count, &file->f_pos); - goto out; - } - - /* Do it by hand, with file-ops */ - ivp = iov; - while (count > 0) { - void * base; - int len, nr; - - base = ivp->iov_base; - len = ivp->iov_len; - ivp++; - count--; - - nr = fn(file, base, len, &file->f_pos); - - if (nr < 0) { - if (!retval) - retval = nr; - break; - } - retval += nr; - if (nr != len) - break; - } -out: - if (iov != iovstack) - kfree(iov); - if ((retval + (type == READ)) > 0) - dnotify_parent(file->f_dentry, - (type == READ) ? DN_ACCESS : DN_MODIFY); - - return retval; -} - -asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - int ret = -EBADF; - - file = fget(fd); - if (!file || !(file->f_mode & FMODE_READ)) - goto out; - - ret = -EINVAL; - if (!file->f_op || (!file->f_op->readv && !file->f_op->read)) - goto out; - - ret = do_readv_writev32(READ, file, vector, count); - -out: - if (file) - fput(file); - return ret; -} - -asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - int ret = -EBADF; - - file = fget(fd); - if (!file || !(file->f_mode & FMODE_WRITE)) - goto out; - - ret = -EINVAL; - if (!file->f_op || (!file->f_op->writev && !file->f_op->write)) - goto out; - - ret = do_readv_writev32(WRITE, file, vector, count); - -out: - if (file) - fput(file); - return ret; -} - /* readdir & getdents */ #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de))) #define ROUND_UP(x) (((x)+sizeof(u32)-1) & ~(sizeof(u32)-1)) @@ -398,167 +225,12 @@ return error; } -/* - * Ooo, nasty. We need here to frob 32-bit unsigned longs to - * 64-bit unsigned longs. - */ -static inline int -get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset) -{ - if (ufdset) { - unsigned long odd; - - if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32))) - return -EFAULT; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - __get_user(l, ufdset); - __get_user(h, ufdset+1); - ufdset += 2; - *fdset++ = h << 32 | l; - n -= 2; - } - if (odd) - __get_user(*fdset, ufdset); - } else { - /* Tricky, must clear full unsigned long in the - * kernel fdset at the end, this makes sure that - * actually happens. - */ - memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32)); - } - return 0; -} - -static inline void -set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) -{ - unsigned long odd; - - if (!ufdset) - return; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - l = *fdset++; - h = l >> 32; - __put_user(l, ufdset); - __put_user(h, ufdset+1); - ufdset += 2; - n -= 2; - } - if (odd) - __put_user(*fdset, ufdset); -} - - - -#define MAX_SELECT_SECONDS ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) - -asmlinkage long sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, u32 tvp_x) -{ - fd_set_bits fds; - struct compat_timeval *tvp = (struct compat_timeval *)AA(tvp_x); - char *bits; - unsigned long nn; - long timeout; - int ret, size, max_fdset; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp) { - time_t sec, usec; - if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp))) - || (ret = __get_user(sec, &tvp->tv_sec)) - || (ret = __get_user(usec, &tvp->tv_usec))) - goto out_nofds; - - ret = -EINVAL; - if(sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - - /* max_fdset can increase, so grab it once to avoid race */ - max_fdset = current->files->max_fdset; - if (n > max_fdset) - n = max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); - if ((ret = get_fd_set32(nn, fds.in, inp)) || - (ret = get_fd_set32(nn, fds.out, outp)) || - (ret = get_fd_set32(nn, fds.ex, exp))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - put_user(sec, &tvp->tv_sec); - put_user(usec, &tvp->tv_usec); - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set32(nn, inp, fds.res_in); - set_fd_set32(nn, outp, fds.res_out); - set_fd_set32(nn, exp, fds.res_ex); - -out: - kfree(bits); - -out_nofds: - return ret; -} - -int ppc32_select(u32 n, u32* inp, u32* outp, u32* exp, u32 tvp_x) +asmlinkage long ppc32_select(u32 n, compat_ulong_t __user *inp, + compat_ulong_t __user *outp, compat_ulong_t __user *exp, + compat_uptr_t tvp_x) { /* sign extend n */ - return sys32_select((int)n, inp, outp, exp, tvp_x); + return compat_sys_select((int)n, inp, outp, exp, compat_ptr(tvp_x)); } int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) @@ -678,245 +350,6 @@ return ret; } -/* Stuff for NFS server syscalls... */ -struct nfsctl_svc32 { - u16 svc32_port; - s32 svc32_nthreads; -}; - -struct nfsctl_client32 { - s8 cl32_ident[NFSCLNT_IDMAX+1]; - s32 cl32_naddr; - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; - s32 cl32_fhkeytype; - s32 cl32_fhkeylen; - u8 cl32_fhkey[NFSCLNT_KEYMAX]; -}; - -struct nfsctl_export32 { - s8 ex32_client[NFSCLNT_IDMAX+1]; - s8 ex32_path[NFS_MAXPATHLEN+1]; - compat_dev_t ex32_dev; - compat_ino_t ex32_ino; - s32 ex32_flags; - compat_uid_t ex32_anon_uid; - compat_gid_t ex32_anon_gid; -}; - -struct nfsctl_fdparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_version; -}; - -struct nfsctl_fsparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_maxlen; -}; - -struct nfsctl_arg32 { - s32 ca32_version; /* safeguard */ - union { - struct nfsctl_svc32 u32_svc; - struct nfsctl_client32 u32_client; - struct nfsctl_export32 u32_export; - struct nfsctl_fdparm32 u32_getfd; - struct nfsctl_fsparm32 u32_getfs; - } u; -#define ca32_svc u.u32_svc -#define ca32_client u.u32_client -#define ca32_export u.u32_export -#define ca32_getfd u.u32_getfd -#define ca32_getfs u.u32_getfs -}; - -union nfsctl_res32 { - __u8 cr32_getfh[NFS_FHSIZE]; - struct knfsd_fh cr32_getfs; -}; - -static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port); - err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads); - return err; -} - -static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_client.cl_ident[0], - &arg32->ca32_client.cl32_ident[0], - NFSCLNT_IDMAX); - err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr); - err |= copy_from_user(&karg->ca_client.cl_addrlist[0], - &arg32->ca32_client.cl32_addrlist[0], - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)); - err |= __get_user(karg->ca_client.cl_fhkeytype, - &arg32->ca32_client.cl32_fhkeytype); - err |= __get_user(karg->ca_client.cl_fhkeylen, - &arg32->ca32_client.cl32_fhkeylen); - err |= copy_from_user(&karg->ca_client.cl_fhkey[0], - &arg32->ca32_client.cl32_fhkey[0], - NFSCLNT_KEYMAX); - - if(err) return -EFAULT; - return 0; -} - -static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_export.ex_client[0], - &arg32->ca32_export.ex32_client[0], - NFSCLNT_IDMAX); - err |= copy_from_user(&karg->ca_export.ex_path[0], - &arg32->ca32_export.ex32_path[0], - NFS_MAXPATHLEN); - err |= __get_user(karg->ca_export.ex_dev, - &arg32->ca32_export.ex32_dev); - err |= __get_user(karg->ca_export.ex_ino, - &arg32->ca32_export.ex32_ino); - err |= __get_user(karg->ca_export.ex_flags, - &arg32->ca32_export.ex32_flags); - err |= __get_user(karg->ca_export.ex_anon_uid, - &arg32->ca32_export.ex32_anon_uid); - err |= __get_user(karg->ca_export.ex_anon_gid, - &arg32->ca32_export.ex32_anon_gid); - karg->ca_export.ex_anon_uid = karg->ca_export.ex_anon_uid; - karg->ca_export.ex_anon_gid = karg->ca_export.ex_anon_gid; - - if(err) return -EFAULT; - return 0; -} - -static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfd.gd_addr, - &arg32->ca32_getfd.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfd.gd_path, - &arg32->ca32_getfd.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfd.gd_version, - &arg32->ca32_getfd.gd32_version); - - if(err) return -EFAULT; - return 0; -} - -static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfs.gd_addr, - &arg32->ca32_getfs.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfs.gd_path, - &arg32->ca32_getfs.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfs.gd_maxlen, - &arg32->ca32_getfs.gd32_maxlen); - - if(err) return -EFAULT; - return 0; -} - -/* This really doesn't need translations, we are only passing - * back a union which contains opaque nfs file handle data. - */ -static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32) -{ - int err; - - err = copy_to_user(res32, kres, sizeof(*res32)); - - if(err) return -EFAULT; - return 0; -} - -/* Note: it is necessary to treat cmd_parm as an unsigned int, - * with the corresponding cast to a signed int to insure that the - * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode) - * and the register representation of a signed int (msr in 64-bit mode) is performed. - */ -int asmlinkage sys32_nfsservctl(u32 cmd_parm, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32) -{ - int cmd = (int)cmd_parm; - struct nfsctl_arg *karg = NULL; - union nfsctl_res *kres = NULL; - mm_segment_t oldfs; - int err; - - karg = kmalloc(sizeof(*karg), GFP_USER); - if(!karg) - return -ENOMEM; - if(res32) { - kres = kmalloc(sizeof(*kres), GFP_USER); - if(!kres) { - kfree(karg); - return -ENOMEM; - } - } - switch(cmd) { - case NFSCTL_SVC: - err = nfs_svc32_trans(karg, arg32); - break; - case NFSCTL_ADDCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_DELCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_EXPORT: - case NFSCTL_UNEXPORT: - err = nfs_exp32_trans(karg, arg32); - break; - case NFSCTL_GETFD: - err = nfs_getfd32_trans(karg, arg32); - break; - case NFSCTL_GETFS: - err = nfs_getfs32_trans(karg, arg32); - break; - default: - err = -EINVAL; - break; - } - if(err) - goto done; - oldfs = get_fs(); - set_fs(KERNEL_DS); - err = sys_nfsservctl(cmd, karg, kres); - set_fs(oldfs); - - if (err) - goto done; - - if((cmd == NFSCTL_GETFD) || - (cmd == NFSCTL_GETFS)) - err = nfs_getfh32_res_trans(kres, res32); - -done: - if(karg) - kfree(karg); - if(kres) - kfree(kres); - return err; -} - - /* These are here just in case some old sparc32 binary calls it. */ asmlinkage long sys32_pause(void) @@ -1057,625 +490,69 @@ return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL); } - -struct msgbuf32 { - compat_long_t mtype; - char mtext[1]; -}; - -struct semid_ds32 { - struct ipc_perm sem_perm; - compat_time_t sem_otime; - compat_time_t sem_ctime; - compat_uptr_t sem_base; - compat_uptr_t sem_pending; - compat_uptr_t sem_pending_last; - compat_uptr_t undo; - unsigned short sem_nsems; -}; - -struct semid64_ds32 { - struct ipc64_perm sem_perm; - unsigned int __unused1; - compat_time_t sem_otime; - unsigned int __unused2; - compat_time_t sem_ctime; - compat_ulong_t sem_nsems; - compat_ulong_t __unused3; - compat_ulong_t __unused4; -}; - -struct msqid_ds32 { - struct ipc_perm msg_perm; - compat_uptr_t msg_first; - compat_uptr_t msg_last; - compat_time_t msg_stime; - compat_time_t msg_rtime; - compat_time_t msg_ctime; - compat_ulong_t msg_lcbytes; - compat_ulong_t msg_lqbytes; - unsigned short msg_cbytes; - unsigned short msg_qnum; - unsigned short msg_qbytes; - compat_ipc_pid_t msg_lspid; - compat_ipc_pid_t msg_lrpid; -}; - -struct msqid64_ds32 { - struct ipc64_perm msg_perm; - unsigned int __unused1; - compat_time_t msg_stime; - unsigned int __unused2; - compat_time_t msg_rtime; - unsigned int __unused3; - compat_time_t msg_ctime; - compat_ulong_t msg_cbytes; - compat_ulong_t msg_qnum; - compat_ulong_t msg_qbytes; - compat_pid_t msg_lspid; - compat_pid_t msg_lrpid; - compat_ulong_t __unused4; - compat_ulong_t __unused5; -}; - -struct shmid_ds32 { - struct ipc_perm shm_perm; - int shm_segsz; - compat_time_t shm_atime; - compat_time_t shm_dtime; - compat_time_t shm_ctime; - compat_ipc_pid_t shm_cpid; - compat_ipc_pid_t shm_lpid; - unsigned short shm_nattch; - unsigned short __unused; - compat_uptr_t __unused2; - compat_uptr_t __unused3; -}; - -struct shmid64_ds32 { - struct ipc64_perm shm_perm; - unsigned int __unused1; - compat_time_t shm_atime; - unsigned int __unused2; - compat_time_t shm_dtime; - unsigned int __unused3; - compat_time_t shm_ctime; - unsigned int __unused4; - compat_size_t shm_segsz; - compat_pid_t shm_cpid; - compat_pid_t shm_lpid; - compat_ulong_t shm_nattch; - compat_ulong_t __unused5; - compat_ulong_t __unused6; -}; - -/* - * sys32_ipc() is the de-multiplexer for the SysV IPC calls in 32bit - * emulation.. - * - * This is really horribly ugly. - */ -static long do_sys32_semctl(int first, int second, int third, void *uptr) -{ - union semun fourth; - u32 pad; - int err, err2; - mm_segment_t old_fs; - - if (!uptr) - return -EINVAL; - err = -EFAULT; - if (get_user(pad, (u32 *)uptr)) - return err; - if ((third & ~IPC_64) == SETVAL) - fourth.val = (int)pad; - else - fourth.__pad = (void *)A(pad); - switch (third & (~IPC_64)) { - - case IPC_INFO: - case IPC_RMID: - case SEM_INFO: - case GETVAL: - case GETPID: - case GETNCNT: - case GETZCNT: - case GETALL: - case SETALL: - case SETVAL: - err = sys_semctl(first, second, third, fourth); - break; - - case IPC_STAT: - case SEM_STAT: - if (third & IPC_64) { - struct semid64_ds s64; - struct semid64_ds32 *usp; - - usp = (struct semid64_ds32 *)A(pad); - fourth.__pad = &s64; - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_semctl(first, second, third, fourth); - set_fs(old_fs); - err2 = copy_to_user(&usp->sem_perm, &s64.sem_perm, - sizeof(struct ipc64_perm)); - err2 |= __put_user(s64.sem_otime, &usp->sem_otime); - err2 |= __put_user(s64.sem_ctime, &usp->sem_ctime); - err2 |= __put_user(s64.sem_nsems, &usp->sem_nsems); - if (err2) - err = -EFAULT; - } else { - struct semid_ds s; - struct semid_ds32 *usp; - - usp = (struct semid_ds32 *)A(pad); - fourth.__pad = &s; - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_semctl(first, second, third, fourth); - set_fs(old_fs); - err2 = copy_to_user(&usp->sem_perm, &s.sem_perm, - sizeof(struct ipc_perm)); - err2 |= __put_user(s.sem_otime, &usp->sem_otime); - err2 |= __put_user(s.sem_ctime, &usp->sem_ctime); - err2 |= __put_user(s.sem_nsems, &usp->sem_nsems); - if (err2) - err = -EFAULT; - } - break; - - case IPC_SET: - if (third & IPC_64) { - struct semid64_ds s64; - struct semid64_ds32 *usp; - - usp = (struct semid64_ds32 *)A(pad); - - err = get_user(s64.sem_perm.uid, &usp->sem_perm.uid); - err |= __get_user(s64.sem_perm.gid, - &usp->sem_perm.gid); - err |= __get_user(s64.sem_perm.mode, - &usp->sem_perm.mode); - if (err) - goto out; - fourth.__pad = &s64; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_semctl(first, second, third, fourth); - set_fs(old_fs); - - } else { - struct semid_ds s; - struct semid_ds32 *usp; - - usp = (struct semid_ds32 *)A(pad); - - err = get_user(s.sem_perm.uid, &usp->sem_perm.uid); - err |= __get_user(s.sem_perm.gid, - &usp->sem_perm.gid); - err |= __get_user(s.sem_perm.mode, - &usp->sem_perm.mode); - if (err) - goto out; - fourth.__pad = &s; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_semctl(first, second, third, fourth); - set_fs(old_fs); - } - break; - default: - err = -EINVAL; - } -out: - return err; -} - -#define MAXBUF (64*1024) - -static int -do_sys32_msgsnd(int first, int second, int third, void *uptr) -{ - struct msgbuf *p; - struct msgbuf32 *up = (struct msgbuf32 *)uptr; - mm_segment_t old_fs; - int err; - - if (second < 0 || (second >= MAXBUF-sizeof(struct msgbuf))) - return -EINVAL; - - p = kmalloc(second + sizeof(struct msgbuf), GFP_USER); - if (!p) - return -ENOMEM; - err = get_user(p->mtype, &up->mtype); - err |= copy_from_user(p->mtext, &up->mtext, second); - if (err) { - err = -EFAULT; - goto out; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgsnd(first, p, second, third); - set_fs(old_fs); -out: - kfree(p); - return err; -} - -static int -do_sys32_msgrcv(int first, int second, int msgtyp, int third, - int version, void *uptr) -{ - struct msgbuf32 *up; - struct msgbuf *p; - mm_segment_t old_fs; - int err; - - if (second < 0 || (second >= MAXBUF-sizeof(struct msgbuf))) - return -EINVAL; - - if (!version) { - struct ipc_kludge_32 *uipck = (struct ipc_kludge_32 *)uptr; - struct ipc_kludge_32 ipck; - - err = -EINVAL; - if (!uptr) - goto out; - err = -EFAULT; - if (copy_from_user(&ipck, uipck, sizeof(struct ipc_kludge_32))) - goto out; - uptr = (void *)A(ipck.msgp); - msgtyp = ipck.msgtyp; - } - err = -ENOMEM; - p = kmalloc(second + sizeof (struct msgbuf), GFP_USER); - if (!p) - goto out; - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgrcv(first, p, second, msgtyp, third); - set_fs(old_fs); - if (err < 0) - goto free_then_out; - up = (struct msgbuf32 *)uptr; - if (put_user(p->mtype, &up->mtype) || - copy_to_user(&up->mtext, p->mtext, err)) - err = -EFAULT; -free_then_out: - kfree(p); -out: - return err; -} - -static int -do_sys32_msgctl(int first, int second, void *uptr) +long sys32_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr, + u32 fifth) { - int err = -EINVAL, err2; - mm_segment_t old_fs; + int version; - switch (second & (~IPC_64)) { - - case IPC_INFO: - case IPC_RMID: - case MSG_INFO: - err = sys_msgctl(first, second, (struct msqid_ds *)uptr); - break; - - case IPC_SET: - if (second & IPC_64) { - struct msqid64_ds m64; - struct msqid64_ds32 *up = (struct msqid64_ds32 *)uptr; - - err2 = copy_from_user(&m64.msg_perm, &up->msg_perm, - sizeof(struct ipc64_perm)); - err2 |= __get_user(m64.msg_qbytes, &up->msg_qbytes); - if (err2) { - err = -EFAULT; - break; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgctl(first, second, - (struct msqid_ds *)&m64); - set_fs(old_fs); - } else { - struct msqid_ds m; - struct msqid_ds32 *up = (struct msqid_ds32 *)uptr; - - err2 = copy_from_user(&m.msg_perm, &up->msg_perm, - sizeof(struct ipc_perm)); - err2 |= __get_user(m.msg_qbytes, &up->msg_qbytes); - if (err2) { - err = -EFAULT; - break; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgctl(first, second, &m); - set_fs(old_fs); - } - break; - - case IPC_STAT: - case MSG_STAT: - if (second & IPC_64) { - struct msqid64_ds m64; - struct msqid64_ds32 *up = (struct msqid64_ds32 *)uptr; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgctl(first, second, - (struct msqid_ds *)&m64); - set_fs(old_fs); - - err2 = copy_to_user(&up->msg_perm, &m64.msg_perm, - sizeof(struct ipc64_perm)); - err2 |= __put_user(m64.msg_stime, &up->msg_stime); - err2 |= __put_user(m64.msg_rtime, &up->msg_rtime); - err2 |= __put_user(m64.msg_ctime, &up->msg_ctime); - err2 |= __put_user(m64.msg_cbytes, &up->msg_cbytes); - err2 |= __put_user(m64.msg_qnum, &up->msg_qnum); - err2 |= __put_user(m64.msg_qbytes, &up->msg_qbytes); - err2 |= __put_user(m64.msg_lspid, &up->msg_lspid); - err2 |= __put_user(m64.msg_lrpid, &up->msg_lrpid); - if (err2) - err = -EFAULT; - } else { - struct msqid64_ds m; - struct msqid_ds32 *up = (struct msqid_ds32 *)uptr; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_msgctl(first, second, (struct msqid_ds *)&m); - set_fs(old_fs); - - err2 = copy_to_user(&up->msg_perm, &m.msg_perm, - sizeof(struct ipc_perm)); - err2 |= __put_user(m.msg_stime, &up->msg_stime); - err2 |= __put_user(m.msg_rtime, &up->msg_rtime); - err2 |= __put_user(m.msg_ctime, &up->msg_ctime); - err2 |= __put_user(m.msg_cbytes, &up->msg_cbytes); - err2 |= __put_user(m.msg_qnum, &up->msg_qnum); - err2 |= __put_user(m.msg_qbytes, &up->msg_qbytes); - err2 |= __put_user(m.msg_lspid, &up->msg_lspid); - err2 |= __put_user(m.msg_lrpid, &up->msg_lrpid); - if (err2) - err = -EFAULT; - } - break; - } - return err; -} - -static int -do_sys32_shmat(int first, int second, int third, int version, void *uptr) -{ - unsigned long raddr; - u32 *uaddr = (u32 *)A((u32)third); - int err = -EINVAL; - - if (version == 1) - return err; - err = do_shmat(first, uptr, second, &raddr); - if (err) - return err; - err = put_user(raddr, uaddr); - return err; -} - -static int -do_sys32_shmctl(int first, int second, void *uptr) -{ - int err = -EINVAL, err2; - mm_segment_t old_fs; - - switch (second & (~IPC_64)) { - - case IPC_INFO: - case IPC_RMID: - case SHM_LOCK: - case SHM_UNLOCK: - err = sys_shmctl(first, second, (struct shmid_ds *)uptr); - break; - case IPC_SET: - if (second & IPC_64) { - struct shmid64_ds32 *up = (struct shmid64_ds32 *)uptr; - struct shmid64_ds s64; - - err = get_user(s64.shm_perm.uid, &up->shm_perm.uid); - err |= __get_user(s64.shm_perm.gid, &up->shm_perm.gid); - err |= __get_user(s64.shm_perm.mode, - &up->shm_perm.mode); - if (err) - break; - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_shmctl(first, second, - (struct shmid_ds *)&s64); - set_fs(old_fs); - } else { - struct shmid_ds32 *up = (struct shmid_ds32 *)uptr; - struct shmid_ds s; - - err = get_user(s.shm_perm.uid, &up->shm_perm.uid); - err |= __get_user(s.shm_perm.gid, &up->shm_perm.gid); - err |= __get_user(s.shm_perm.mode, &up->shm_perm.mode); - if (err) - break; - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_shmctl(first, second, &s); - set_fs(old_fs); - } - break; - - case IPC_STAT: - case SHM_STAT: - if (second & IPC_64) { - struct shmid64_ds32 *up = (struct shmid64_ds32 *)uptr; - struct shmid64_ds s64; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_shmctl(first, second, - (struct shmid_ds *)&s64); - set_fs(old_fs); - if (err < 0) - break; - - err2 = copy_to_user(&up->shm_perm, &s64.shm_perm, - sizeof(struct ipc64_perm)); - err2 |= __put_user(s64.shm_atime, &up->shm_atime); - err2 |= __put_user(s64.shm_dtime, &up->shm_dtime); - err2 |= __put_user(s64.shm_ctime, &up->shm_ctime); - err2 |= __put_user(s64.shm_segsz, &up->shm_segsz); - err2 |= __put_user(s64.shm_nattch, &up->shm_nattch); - err2 |= __put_user(s64.shm_cpid, &up->shm_cpid); - err2 |= __put_user(s64.shm_lpid, &up->shm_lpid); - if (err2) - err = -EFAULT; - } else { - struct shmid_ds32 *up = (struct shmid_ds32 *)uptr; - struct shmid_ds s; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_shmctl(first, second, &s); - set_fs(old_fs); - if (err < 0) - break; - - err2 = copy_to_user(&up->shm_perm, &s.shm_perm, - sizeof(struct ipc_perm)); - err2 |= __put_user (s.shm_atime, &up->shm_atime); - err2 |= __put_user (s.shm_dtime, &up->shm_dtime); - err2 |= __put_user (s.shm_ctime, &up->shm_ctime); - err2 |= __put_user (s.shm_segsz, &up->shm_segsz); - err2 |= __put_user (s.shm_nattch, &up->shm_nattch); - err2 |= __put_user (s.shm_cpid, &up->shm_cpid); - err2 |= __put_user (s.shm_lpid, &up->shm_lpid); - if (err2) - err = -EFAULT; - } - break; - - case SHM_INFO: { - struct shm_info si; - struct shm_info32 { - int used_ids; - u32 shm_tot, shm_rss, shm_swp; - u32 swap_attempts, swap_successes; - } *uip = (struct shm_info32 *)uptr; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_shmctl(first, second, (struct shmid_ds *)&si); - set_fs(old_fs); - if (err < 0) - break; - err2 = put_user(si.used_ids, &uip->used_ids); - err2 |= __put_user(si.shm_tot, &uip->shm_tot); - err2 |= __put_user(si.shm_rss, &uip->shm_rss); - err2 |= __put_user(si.shm_swp, &uip->shm_swp); - err2 |= __put_user(si.swap_attempts, &uip->swap_attempts); - err2 |= __put_user(si.swap_successes, &uip->swap_successes); - if (err2) - err = -EFAULT; - break; - } - } - return err; -} - -static int sys32_semtimedop(int semid, struct sembuf *tsems, int nsems, - const struct compat_timespec *timeout32) -{ - struct compat_timespec t32; - struct timespec *t64 = compat_alloc_user_space(sizeof(*t64)); - - if (copy_from_user(&t32, timeout32, sizeof(t32))) - return -EFAULT; - - if (put_user(t32.tv_sec, &t64->tv_sec) || - put_user(t32.tv_nsec, &t64->tv_nsec)) - return -EFAULT; - - return sys_semtimedop(semid, tsems, nsems, t64); -} - -/* - * Note: it is necessary to treat first_parm, second_parm, and - * third_parm as unsigned ints, with the corresponding cast to a - * signed int to insure that the proper conversion (sign extension) - * between the register representation of a signed int (msr in 32-bit - * mode) and the register representation of a signed int (msr in - * 64-bit mode) is performed. - */ -asmlinkage long sys32_ipc(u32 call, u32 first_parm, u32 second_parm, u32 third_parm, u32 ptr, u32 fifth) -{ - int first = (int)first_parm; - int second = (int)second_parm; - int third = (int)third_parm; - int version, err; - version = call >> 16; /* hack for backward compatibility */ call &= 0xffff; switch (call) { + case SEMTIMEDOP: + if (third) + /* sign extend semid */ + return compat_sys_semtimedop((int)first, + compat_ptr(ptr), second, + compat_ptr(third)); + /* else fall through for normal semop() */ case SEMOP: /* struct sembuf is the same on 32 and 64bit :)) */ - err = sys_semtimedop(first, (struct sembuf *)AA(ptr), - second, NULL); - break; - case SEMTIMEDOP: - err = sys32_semtimedop(first, (struct sembuf *)AA(ptr), second, - (const struct compat_timespec *)AA(fifth)); - break; + /* sign extend semid */ + return sys_semtimedop((int)first, compat_ptr(ptr), second, + NULL); case SEMGET: - err = sys_semget(first, second, third); - break; + /* sign extend key, nsems */ + return sys_semget((int)first, (int)second, third); case SEMCTL: - err = do_sys32_semctl(first, second, third, - (void *)AA(ptr)); - break; + /* sign extend semid, semnum */ + return compat_sys_semctl((int)first, (int)second, third, + compat_ptr(ptr)); case MSGSND: - err = do_sys32_msgsnd(first, second, third, - (void *)AA(ptr)); - break; + /* sign extend msqid */ + return compat_sys_msgsnd((int)first, (int)second, third, + compat_ptr(ptr)); case MSGRCV: - err = do_sys32_msgrcv(first, second, fifth, third, - version, (void *)AA(ptr)); - break; + /* sign extend msqid, msgtyp */ + return compat_sys_msgrcv((int)first, second, (int)fifth, + third, version, compat_ptr(ptr)); case MSGGET: - err = sys_msgget((key_t)first, second); - break; + /* sign extend key */ + return sys_msgget((int)first, second); case MSGCTL: - err = do_sys32_msgctl(first, second, (void *)AA(ptr)); - break; + /* sign extend msqid */ + return compat_sys_msgctl((int)first, second, compat_ptr(ptr)); case SHMAT: - err = do_sys32_shmat(first, second, third, - version, (void *)AA(ptr)); - break; - case SHMDT: - err = sys_shmdt((char *)AA(ptr)); - break; + /* sign extend shmid */ + return compat_sys_shmat((int)first, second, third, version, + compat_ptr(ptr)); + case SHMDT: + return sys_shmdt(compat_ptr(ptr)); case SHMGET: - err = sys_shmget(first, second_parm, third); - break; + /* sign extend key_t */ + return sys_shmget((int)first, second, third); case SHMCTL: - err = do_sys32_shmctl(first, second, (void *)AA(ptr)); - break; + /* sign extend shmid */ + return compat_sys_shmctl((int)first, second, compat_ptr(ptr)); + default: - err = -ENOSYS; - break; + return -ENOSYS; } - return err; + + return -ENOSYS; } /* Note: it is necessary to treat out_fd and in_fd as unsigned ints, @@ -1721,191 +598,6 @@ return ret; } -/* - * count32() counts the number of arguments/envelopes - */ -static int count32(u32 * argv, int max) -{ - int i = 0; - - if (argv != NULL) { - for (;;) { - u32 p; int error; - - error = get_user(p,argv); - if (error) - return error; - if (!p) - break; - argv++; - if (++i > max) - return -E2BIG; - } - } - return i; -} - -/* - * 'copy_string32()' copies argument/envelope strings from user - * memory to free pages in kernel mem. These are in a format ready - * to be put directly into the top of new user memory. - */ -static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm) -{ - while (argc-- > 0) { - u32 str; - int len; - unsigned long pos; - - if (get_user(str, argv + argc) || - !str || - !(len = strnlen_user((char *)A(str), bprm->p))) - return -EFAULT; - - if (bprm->p < len) - return -E2BIG; - - bprm->p -= len; - - pos = bprm->p; - while (len) { - char *kaddr; - struct page *page; - int offset, bytes_to_copy, new, err; - - offset = pos % PAGE_SIZE; - page = bprm->page[pos / PAGE_SIZE]; - new = 0; - if (!page) { - page = alloc_page(GFP_USER); - bprm->page[pos / PAGE_SIZE] = page; - if (!page) - return -ENOMEM; - new = 1; - } - kaddr = (char *)kmap(page); - - if (new && offset) - memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; - if (bytes_to_copy > len) { - bytes_to_copy = len; - if (new) - memset(kaddr+offset+len, 0, - PAGE_SIZE-offset-len); - } - - err = copy_from_user(kaddr + offset, (char *)A(str), - bytes_to_copy); - kunmap((unsigned long)kaddr); - - if (err) - return -EFAULT; - - pos += bytes_to_copy; - str += bytes_to_copy; - len -= bytes_to_copy; - } - } - return 0; -} - -/* - * sys32_execve() executes a new program. - */ -static int do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) -{ - struct linux_binprm bprm; - struct file * file; - int retval; - int i; - - sched_balance_exec(); - - file = open_exec(filename); - - retval = PTR_ERR(file); - if (IS_ERR(file)) - return retval; - - bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0])); - - bprm.file = file; - bprm.filename = filename; - bprm.interp = filename; - bprm.sh_bang = 0; - bprm.loader = 0; - bprm.exec = 0; - bprm.security = NULL; - bprm.mm = mm_alloc(); - retval = -ENOMEM; - if (!bprm.mm) - goto out_file; - - retval = init_new_context(current, bprm.mm); - if (retval < 0) - goto out_mm; - - bprm.argc = count32(argv, bprm.p / sizeof(u32)); - if ((retval = bprm.argc) < 0) - goto out_mm; - - bprm.envc = count32(envp, bprm.p / sizeof(u32)); - if ((retval = bprm.envc) < 0) - goto out_mm; - - retval = security_bprm_alloc(&bprm); - if (retval) - goto out; - - retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; - - retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; - - bprm.exec = bprm.p; - retval = copy_strings32(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; - - retval = copy_strings32(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; - - retval = search_binary_handler(&bprm,regs); - if (retval >= 0) { - /* execve success */ - security_bprm_free(&bprm); - return retval; - } - -out: - /* Something went wrong, return the inode and free the argument pages*/ - for (i = 0 ; i < MAX_ARG_PAGES ; i++) { - struct page * page = bprm.page[i]; - if (page) - __free_page(page); - } - - if (bprm.security) - security_bprm_free(&bprm); - -out_mm: - if (bprm.mm) - mmdrop(bprm.mm); - -out_file: - if (bprm.file) { - allow_write_access(bprm.file); - fput(bprm.file); - } - return retval; -} - long sys32_execve(unsigned long a0, unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4, unsigned long a5, struct pt_regs *regs) @@ -1924,7 +616,7 @@ giveup_altivec(current); #endif /* CONFIG_ALTIVEC */ - error = do_execve32(filename, (u32*) a1, (u32*) a2, regs); + error = compat_do_execve(filename, compat_ptr(a1), compat_ptr(a2), regs); if (error == 0) current->ptrace &= ~PT_DTRACE; diff -Nru a/arch/ppc64/kernel/sysfs.c b/arch/ppc64/kernel/sysfs.c --- a/arch/ppc64/kernel/sysfs.c Tue May 18 23:38:05 2004 +++ b/arch/ppc64/kernel/sysfs.c Tue May 18 23:38:05 2004 @@ -114,6 +114,7 @@ unsigned long hid0; unsigned long set, reset; int ret; + unsigned int ctrl; /* Only need to enable them once */ if (__get_cpu_var(pmcs_enabled)) @@ -157,6 +158,16 @@ if (cur_cpu_spec->firmware_features & FW_FEATURE_SPLPAR) { char *ptr = (char *)&paca[smp_processor_id()].xLpPaca; ptr[0xBB] = 1; + } + + /* + * On SMT machines we have to set the run latch in the ctrl register + * in order to make PMC6 spin. + */ + if (cur_cpu_spec->cpu_features & CPU_FTR_SMT) { + ctrl = mfspr(CTRLF); + ctrl |= RUNLATCH; + mtspr(CTRLT, ctrl); } } #endif diff -Nru a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c --- a/arch/ppc64/kernel/time.c Tue May 18 23:38:09 2004 +++ b/arch/ppc64/kernel/time.c Tue May 18 23:38:09 2004 @@ -66,7 +66,7 @@ void smp_local_timer_interrupt(struct pt_regs *); -u64 jiffies_64 = INITIAL_JIFFIES; +u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; EXPORT_SYMBOL(jiffies_64); @@ -256,7 +256,7 @@ * call will not be needed) */ -unsigned long tb_last_stamp=0; +unsigned long tb_last_stamp __cacheline_aligned_in_smp; /* * timer_interrupt - gets called when the decrementer overflows, diff -Nru a/arch/ppc64/kernel/vio.c b/arch/ppc64/kernel/vio.c --- a/arch/ppc64/kernel/vio.c Tue May 18 23:38:06 2004 +++ b/arch/ppc64/kernel/vio.c Tue May 18 23:38:06 2004 @@ -267,6 +267,15 @@ kfree(viodev); } +static ssize_t viodev_show_devspec(struct device *dev, char *buf) +{ + struct vio_dev *viodev = to_vio_dev(dev); + struct device_node *of_node = viodev->archdata; + + return sprintf(buf, "%s\n", of_node->full_name); +} +DEVICE_ATTR(devspec, S_IRUSR | S_IRGRP | S_IROTH, viodev_show_devspec, NULL); + static ssize_t viodev_show_name(struct device *dev, char *buf) { struct vio_dev *viodev = to_vio_dev(dev); @@ -345,6 +354,7 @@ return NULL; } device_create_file(&viodev->dev, &dev_attr_name); + device_create_file(&viodev->dev, &dev_attr_devspec); return viodev; } @@ -353,6 +363,8 @@ void __devinit vio_unregister_device(struct vio_dev *viodev) { DBGENTER(); + device_remove_file(&viodev->dev, &dev_attr_devspec); + device_remove_file(&viodev->dev, &dev_attr_name); device_unregister(&viodev->dev); } EXPORT_SYMBOL(vio_unregister_device); diff -Nru a/arch/ppc64/kernel/xics.c b/arch/ppc64/kernel/xics.c --- a/arch/ppc64/kernel/xics.c Tue May 18 23:38:07 2004 +++ b/arch/ppc64/kernel/xics.c Tue May 18 23:38:07 2004 @@ -56,7 +56,7 @@ }; /* This is used to map real irq numbers to virtual */ -static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_KERNEL); +static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_ATOMIC); #define XICS_IPI 2 #define XICS_IRQ_SPURIOUS 0 diff -Nru a/arch/ppc64/lib/Makefile b/arch/ppc64/lib/Makefile --- a/arch/ppc64/lib/Makefile Tue May 18 23:38:05 2004 +++ b/arch/ppc64/lib/Makefile Tue May 18 23:38:05 2004 @@ -4,3 +4,8 @@ lib-y := checksum.o dec_and_lock.o string.o strcase.o lib-y += copypage.o memcpy.o copyuser.o + +# Lock primitives are defined as no-ops in include/linux/spinlock.h +# for non-SMP configs. Don't build the real versions. + +lib-$(CONFIG_SMP) += locks.o diff -Nru a/arch/ppc64/lib/locks.c b/arch/ppc64/lib/locks.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ppc64/lib/locks.c Tue May 18 23:38:09 2004 @@ -0,0 +1,285 @@ +/* + * Spin and read/write lock operations. + * + * Copyright (C) 2001-2004 Paul Mackerras , IBM + * Copyright (C) 2001 Anton Blanchard , IBM + * Copyright (C) 2002 Dave Engebretsen , IBM + * Rework to support virtual processors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include +#include + +#ifndef CONFIG_SPINLINE + +/* + * On a system with shared processors (that is, where a physical + * processor is multiplexed between several virtual processors), + * there is no point spinning on a lock if the holder of the lock + * isn't currently scheduled on a physical processor. Instead + * we detect this situation and ask the hypervisor to give the + * rest of our timeslice to the lock holder. + * + * So that we can tell which virtual processor is holding a lock, + * we put 0x80000000 | smp_processor_id() in the lock when it is + * held. Conveniently, we have a word in the paca that holds this + * value. + */ + +/* waiting for a spinlock... */ +#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) +void __spin_yield(spinlock_t *lock) +{ + unsigned int lock_value, holder_cpu, yield_count; + struct paca_struct *holder_paca; + + lock_value = lock->lock; + if (lock_value == 0) + return; + holder_cpu = lock_value & 0xffff; + BUG_ON(holder_cpu >= NR_CPUS); + holder_paca = &paca[holder_cpu]; + yield_count = holder_paca->xLpPaca.xYieldCount; + if ((yield_count & 1) == 0) + return; /* virtual cpu is currently running */ + rmb(); + if (lock->lock != lock_value) + return; /* something has changed */ +#ifdef CONFIG_PPC_ISERIES + HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc, + ((u64)holder_cpu << 32) | yield_count); +#else + plpar_hcall_norets(H_CONFER, holder_cpu, yield_count); +#endif +} + +#else /* SPLPAR || ISERIES */ +#define __spin_yield(x) barrier() +#endif + +/* + * This returns the old value in the lock, so we succeeded + * in getting the lock if the return value is 0. + */ +static __inline__ unsigned long __spin_trylock(spinlock_t *lock) +{ + unsigned long tmp, tmp2; + + __asm__ __volatile__( +" lwz %1,24(13) # __spin_trylock\n\ +1: lwarx %0,0,%2\n\ + cmpwi 0,%0,0\n\ + bne- 2f\n\ + stwcx. %1,0,%2\n\ + bne- 1b\n\ + isync\n\ +2:" : "=&r" (tmp), "=&r" (tmp2) + : "r" (&lock->lock) + : "cr0", "memory"); + + return tmp; +} + +int _raw_spin_trylock(spinlock_t *lock) +{ + return __spin_trylock(lock) == 0; +} + +EXPORT_SYMBOL(_raw_spin_trylock); + +void _raw_spin_lock(spinlock_t *lock) +{ + while (1) { + if (likely(__spin_trylock(lock) == 0)) + break; + do { + HMT_low(); + __spin_yield(lock); + } while (likely(lock->lock != 0)); + HMT_medium(); + } +} + +EXPORT_SYMBOL(_raw_spin_lock); + +void _raw_spin_lock_flags(spinlock_t *lock, unsigned long flags) +{ + unsigned long flags_dis; + + while (1) { + if (likely(__spin_trylock(lock) == 0)) + break; + local_save_flags(flags_dis); + local_irq_restore(flags); + do { + HMT_low(); + __spin_yield(lock); + } while (likely(lock->lock != 0)); + HMT_medium(); + local_irq_restore(flags_dis); + } +} + +EXPORT_SYMBOL(_raw_spin_lock_flags); + +void spin_unlock_wait(spinlock_t *lock) +{ + while (lock->lock) + __spin_yield(lock); +} + +EXPORT_SYMBOL(spin_unlock_wait); + +/* + * Waiting for a read lock or a write lock on a rwlock... + * This turns out to be the same for read and write locks, since + * we only know the holder if it is write-locked. + */ +#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) +void __rw_yield(rwlock_t *rw) +{ + int lock_value; + unsigned int holder_cpu, yield_count; + struct paca_struct *holder_paca; + + lock_value = rw->lock; + if (lock_value >= 0) + return; /* no write lock at present */ + holder_cpu = lock_value & 0xffff; + BUG_ON(holder_cpu >= NR_CPUS); + holder_paca = &paca[holder_cpu]; + yield_count = holder_paca->xLpPaca.xYieldCount; + if ((yield_count & 1) == 0) + return; /* virtual cpu is currently running */ + rmb(); + if (rw->lock != lock_value) + return; /* something has changed */ +#ifdef CONFIG_PPC_ISERIES + HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc, + ((u64)holder_cpu << 32) | yield_count); +#else + plpar_hcall_norets(H_CONFER, holder_cpu, yield_count); +#endif +} + +#else /* SPLPAR || ISERIES */ +#define __rw_yield(x) barrier() +#endif + +/* + * This returns the old value in the lock + 1, + * so we got a read lock if the return value is > 0. + */ +static __inline__ long __read_trylock(rwlock_t *rw) +{ + long tmp; + + __asm__ __volatile__( +"1: lwarx %0,0,%1 # read_trylock\n\ + extsw %0,%0\n\ + addic. %0,%0,1\n\ + ble- 2f\n\ + stwcx. %0,0,%1\n\ + bne- 1b\n\ + isync\n\ +2:" : "=&r" (tmp) + : "r" (&rw->lock) + : "cr0", "xer", "memory"); + + return tmp; +} + +int _raw_read_trylock(rwlock_t *rw) +{ + return __read_trylock(rw) > 0; +} + +EXPORT_SYMBOL(_raw_read_trylock); + +void _raw_read_lock(rwlock_t *rw) +{ + while (1) { + if (likely(__read_trylock(rw) > 0)) + break; + do { + HMT_low(); + __rw_yield(rw); + } while (likely(rw->lock < 0)); + HMT_medium(); + } +} + +EXPORT_SYMBOL(_raw_read_lock); + +void _raw_read_unlock(rwlock_t *rw) +{ + long tmp; + + __asm__ __volatile__( + "eieio # read_unlock\n\ +1: lwarx %0,0,%1\n\ + addic %0,%0,-1\n\ + stwcx. %0,0,%1\n\ + bne- 1b" + : "=&r"(tmp) + : "r"(&rw->lock) + : "cr0", "memory"); +} + +EXPORT_SYMBOL(_raw_read_unlock); + +/* + * This returns the old value in the lock, + * so we got the write lock if the return value is 0. + */ +static __inline__ long __write_trylock(rwlock_t *rw) +{ + long tmp, tmp2; + + __asm__ __volatile__( +" lwz %1,24(13) # write_trylock\n\ +1: lwarx %0,0,%2\n\ + cmpwi 0,%0,0\n\ + bne- 2f\n\ + stwcx. %1,0,%2\n\ + bne- 1b\n\ + isync\n\ +2:" : "=&r" (tmp), "=&r" (tmp2) + : "r" (&rw->lock) + : "cr0", "memory"); + + return tmp; +} + +int _raw_write_trylock(rwlock_t *rw) +{ + return __write_trylock(rw) == 0; +} + +EXPORT_SYMBOL(_raw_write_trylock); + +void _raw_write_lock(rwlock_t *rw) +{ + while (1) { + if (likely(__write_trylock(rw) == 0)) + break; + do { + HMT_low(); + __rw_yield(rw); + } while (likely(rw->lock != 0)); + HMT_medium(); + } +} + +EXPORT_SYMBOL(_raw_write_lock); + +#endif /* CONFIG_SPINLINE */ diff -Nru a/arch/ppc64/mm/hugetlbpage.c b/arch/ppc64/mm/hugetlbpage.c --- a/arch/ppc64/mm/hugetlbpage.c Tue May 18 23:38:07 2004 +++ b/arch/ppc64/mm/hugetlbpage.c Tue May 18 23:38:07 2004 @@ -452,8 +452,9 @@ goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); - unlock_page(page); - if (ret) { + if (! ret) { + unlock_page(page); + } else { hugetlb_put_quota(mapping); free_huge_page(page); goto out; diff -Nru a/arch/ppc64/oprofile/common.c b/arch/ppc64/oprofile/common.c --- a/arch/ppc64/oprofile/common.c Tue May 18 23:38:09 2004 +++ b/arch/ppc64/oprofile/common.c Tue May 18 23:38:09 2004 @@ -155,12 +155,14 @@ break; case PV_GPUL: + case PV_GPULp: model = &op_model_power4; model->num_counters = 8; oprof_ppc64_ops.cpu_type = "ppc64/970"; break; case PV_POWER5: + case PV_POWER5p: model = &op_model_power4; model->num_counters = 6; oprof_ppc64_ops.cpu_type = "ppc64/power5"; diff -Nru a/arch/ppc64/oprofile/op_model_power4.c b/arch/ppc64/oprofile/op_model_power4.c --- a/arch/ppc64/oprofile/op_model_power4.c Tue May 18 23:38:08 2004 +++ b/arch/ppc64/oprofile/op_model_power4.c Tue May 18 23:38:08 2004 @@ -24,6 +24,8 @@ static unsigned long reset_value[OP_MAX_COUNTER]; static int num_counters; +static int oprofile_running; +static int mmcra_has_sihv; static void power4_reg_setup(struct op_counter_config *ctr, struct op_system_config *sys, @@ -33,6 +35,16 @@ num_counters = num_ctrs; + /* + * SIHV / SIPR bits are only implemented on POWER4+ (GQ) and above. + * However we disable it on all POWER4 until we verify it works + * (I was seeing some strange behaviour last time I tried). + * + * It has been verified to work on POWER5 so we enable it there. + */ + if (!(__is_processor(PV_POWER4) || __is_processor(PV_POWER4p))) + mmcra_has_sihv = 1; + for (i = 0; i < num_counters; ++i) reset_value[i] = 0x80000000UL - ctr[i].count; @@ -99,6 +111,8 @@ mmcr0 &= ~MMCR0_FC; mtspr(SPRN_MMCR0, mmcr0); + oprofile_running = 1; + dbg("start on cpu %d, mmcr0 %x\n", smp_processor_id(), mmcr0); } @@ -111,6 +125,8 @@ mmcr0 |= MMCR0_FC; mtspr(SPRN_MMCR0, mmcr0); + oprofile_running = 0; + dbg("stop on cpu %d, mmcr0 %x\n", smp_processor_id(), mmcr0); mb(); @@ -129,9 +145,6 @@ { } -/* XXX Not currently working */ -static int mmcra_has_sihv = 0; - /* * On GQ and newer the MMCRA stores the HV and PR bits at the time * the SIAR was sampled. We use that to work out if the SIAR was sampled in @@ -210,7 +223,7 @@ for (i = 0; i < num_counters; ++i) { val = ctr_read(i); if (val < 0) { - if (ctr[i].enabled) { + if (oprofile_running && ctr[i].enabled) { oprofile_add_sample(pc, is_kernel, i, cpu); ctr_write(i, reset_value[i]); } else { diff -Nru a/arch/s390/defconfig b/arch/s390/defconfig --- a/arch/s390/defconfig Tue May 18 23:38:08 2004 +++ b/arch/s390/defconfig Tue May 18 23:38:08 2004 @@ -178,6 +178,8 @@ # S/390 character device drivers # CONFIG_TN3270=y +CONFIG_TN3270_TTY=y +CONFIG_TN3270_FS=m CONFIG_TN3270_CONSOLE=y CONFIG_TN3215=y CONFIG_TN3215_CONSOLE=y @@ -433,7 +435,6 @@ # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -505,9 +506,11 @@ # CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_DEFLATE is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set # CONFIG_CRYPTO_TEST is not set # # Library routines # # CONFIG_CRC32 is not set +# CONFIG_LIBCRC32C is not set diff -Nru a/arch/s390/kernel/binfmt_elf32.c b/arch/s390/kernel/binfmt_elf32.c --- a/arch/s390/kernel/binfmt_elf32.c Tue May 18 23:38:09 2004 +++ b/arch/s390/kernel/binfmt_elf32.c Tue May 18 23:38:09 2004 @@ -32,10 +32,6 @@ #define NUM_FPRS 16 #define NUM_ACRS 16 -#define TASK31_SIZE (0x80000000UL) -#undef TASK_SIZE -#define TASK_SIZE TASK31_SIZE - /* For SVR4/S390 the function pointer to be registered with `atexit` is passed in R14. */ #define ELF_PLAT_INIT(_r, load_addr) \ @@ -51,7 +47,7 @@ the loader. We need to make sure that it is out of the way of the program that it will "exec", and that there is sufficient room for the brk. */ -#define ELF_ET_DYN_BASE (TASK31_SIZE / 3 * 2) +#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2) /* Wow, the "main" arch needs arch dependent functions too.. :) */ @@ -169,7 +165,6 @@ #undef start_thread #define start_thread start_thread31 #define setup_arg_pages(bprm, exec) setup_arg_pages32(bprm, exec) -#define elf_map elf_map32 MODULE_DESCRIPTION("Binary format loader for compatibility with 32bit Linux for S390 binaries," " Copyright 2000 IBM Corporation"); @@ -188,19 +183,3 @@ #include "../../../fs/binfmt_elf.c" -static unsigned long -elf_map32 (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type) -{ - unsigned long map_addr; - - if (!addr) - addr = TASK_UNMAPPED_BASE; - - down_write(¤t->mm->mmap_sem); - map_addr = do_mmap(filep, ELF_PAGESTART(addr), - eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr), - prot, type, - eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr)); - up_write(¤t->mm->mmap_sem); - return(map_addr); -} diff -Nru a/arch/s390/kernel/compat_exec.c b/arch/s390/kernel/compat_exec.c --- a/arch/s390/kernel/compat_exec.c Tue May 18 23:38:09 2004 +++ b/arch/s390/kernel/compat_exec.c Tue May 18 23:38:09 2004 @@ -34,9 +34,6 @@ #endif -#undef STACK_TOP -#define STACK_TOP TASK31_SIZE - int setup_arg_pages32(struct linux_binprm *bprm, int executable_stack) { unsigned long stack_base; diff -Nru a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c --- a/arch/s390/kernel/compat_linux.c Tue May 18 23:38:08 2004 +++ b/arch/s390/kernel/compat_linux.c Tue May 18 23:38:08 2004 @@ -355,144 +355,6 @@ return sys_ftruncate(fd, (high << 32) | low); } -typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *); -typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *); - -static long do_readv_writev32(int type, struct file *file, - const struct compat_iovec *vector, u32 count) -{ - unsigned long tot_len; - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack, *ivp; - struct inode *inode; - long retval, i; - io_fn_t fn; - iov_fn_t fnv; - - /* First get the "struct iovec" from user memory and - * verify all the pointers - */ - if (!count) - return 0; - if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count)) - return -EFAULT; - if (count > UIO_MAXIOV) - return -EINVAL; - if (count > UIO_FASTIOV) { - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - return -ENOMEM; - } - - tot_len = 0; - i = count; - ivp = iov; - retval = -EINVAL; - while(i > 0) { - compat_ssize_t tmp = tot_len; - compat_ssize_t len; - u32 buf; - - if (__get_user(len, &vector->iov_len) || - __get_user(buf, &vector->iov_base)) { - retval = -EFAULT; - goto out; - } - if (len < 0) /* size_t not fitting an ssize_t32 .. */ - goto out; - tot_len += len; - if (tot_len < tmp) /* maths overflow on the compat_ssize_t */ - goto out; - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t) len; - vector++; - ivp++; - i--; - } - if (tot_len == 0) { - retval = 0; - goto out; - } - - inode = file->f_dentry->d_inode; - /* VERIFY_WRITE actually means a read, as we write to user space */ - retval = locks_verify_area((type == VERIFY_WRITE - ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE), - inode, file, file->f_pos, tot_len); - if (retval) - goto out; - - /* VERIFY_WRITE actually means a read, as we write to user space */ - fnv = (type == VERIFY_WRITE ? file->f_op->readv : file->f_op->writev); - if (fnv) { - retval = fnv(file, iov, count, &file->f_pos); - goto out; - } - - fn = (type == VERIFY_WRITE ? file->f_op->read : - (io_fn_t) file->f_op->write); - - ivp = iov; - while (count > 0) { - void * base; - int len, nr; - - base = ivp->iov_base; - len = ivp->iov_len; - ivp++; - count--; - nr = fn(file, base, len, &file->f_pos); - if (nr < 0) { - if (!retval) - retval = nr; - break; - } - retval += nr; - if (nr != len) - break; - } -out: - if (iov != iovstack) - kfree(iov); - - return retval; -} - -asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, unsigned long count) -{ - struct file *file; - long ret = -EBADF; - - file = fget(fd); - if(!file) - goto bad_file; - - if (file->f_op && (file->f_mode & FMODE_READ) && - (file->f_op->readv || file->f_op->read)) - ret = do_readv_writev32(VERIFY_WRITE, file, vector, count); - fput(file); - -bad_file: - return ret; -} - -asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, unsigned long count) -{ - struct file *file; - int ret = -EBADF; - - file = fget(fd); - if(!file) - goto bad_file; - if (file->f_op && (file->f_mode & FMODE_WRITE) && - (file->f_op->writev || file->f_op->write)) - ret = do_readv_writev32(VERIFY_READ, file, vector, count); - fput(file); - -bad_file: - return ret; -} - /* readdir & getdents */ #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de))) @@ -623,160 +485,6 @@ /* end of readdir & getdents */ -/* - * Ooo, nasty. We need here to frob 32-bit unsigned longs to - * 64-bit unsigned longs. - */ - -static inline int -get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset) -{ - if (ufdset) { - unsigned long odd; - - if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32))) - return -EFAULT; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - __get_user(l, ufdset); - __get_user(h, ufdset+1); - ufdset += 2; - *fdset++ = h << 32 | l; - n -= 2; - } - if (odd) - __get_user(*fdset, ufdset); - } else { - /* Tricky, must clear full unsigned long in the - * kernel fdset at the end, this makes sure that - * actually happens. - */ - memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32)); - } - return 0; -} - -static inline void -set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) -{ - unsigned long odd; - - if (!ufdset) - return; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - l = *fdset++; - h = l >> 32; - __put_user(l, ufdset); - __put_user(h, ufdset+1); - ufdset += 2; - n -= 2; - } - if (odd) - __put_user(*fdset, ufdset); -} - -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) - -asmlinkage long sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, - struct compat_timeval *tvp) -{ - fd_set_bits fds; - char *bits; - unsigned long nn; - long timeout; - int ret, size; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp) { - int sec, usec; - - if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp))) - || (ret = __get_user(sec, &tvp->tv_sec)) - || (ret = __get_user(usec, &tvp->tv_usec))) - goto out_nofds; - - ret = -EINVAL; - if(sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); - if ((ret = get_fd_set32(nn, fds.in, inp)) || - (ret = get_fd_set32(nn, fds.out, outp)) || - (ret = get_fd_set32(nn, fds.ex, exp))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp && !(current->personality & STICKY_TIMEOUTS)) { - int sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - put_user(sec, &tvp->tv_sec); - put_user(usec, &tvp->tv_usec); - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set32(nn, inp, fds.res_in); - set_fd_set32(nn, outp, fds.res_out); - set_fd_set32(nn, exp, fds.res_ex); - -out: - kfree(bits); -out_nofds: - return ret; -} - int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) { int err; @@ -1026,188 +734,6 @@ return ret; } -extern void check_pending(int signum); - -/* - * count32() counts the number of arguments/envelopes - */ -static int count32(u32 * argv) -{ - int i = 0; - - if (argv != NULL) { - for (;;) { - u32 p; int error; - - error = get_user(p,argv); - if (error) return error; - if (!p) break; - argv++; i++; - } - } - return i; -} - -/* - * 'copy_string32()' copies argument/envelope strings from user - * memory to free pages in kernel mem. These are in a format ready - * to be put directly into the top of new user memory. - */ -static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm) -{ - while (argc-- > 0) { - u32 str; - int len; - unsigned long pos; - - if (get_user(str, argv + argc) || - !str || - !(len = strnlen_user((char *)A(str), bprm->p))) - return -EFAULT; - - if (bprm->p < len) - return -E2BIG; - - bprm->p -= len; - - pos = bprm->p; - while (len) { - char *kaddr; - struct page *page; - int offset, bytes_to_copy, new, err; - - offset = pos % PAGE_SIZE; - page = bprm->page[pos / PAGE_SIZE]; - new = 0; - if (!page) { - page = alloc_page(GFP_USER); - bprm->page[pos / PAGE_SIZE] = page; - if (!page) - return -ENOMEM; - new = 1; - } - kaddr = (char *)kmap(page); - - if (new && offset) - memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; - if (bytes_to_copy > len) { - bytes_to_copy = len; - if (new) - memset(kaddr+offset+len, 0, - PAGE_SIZE-offset-len); - } - - err = copy_from_user(kaddr + offset, (char *)A(str), - bytes_to_copy); - kunmap(page); - - if (err) - return -EFAULT; - - pos += bytes_to_copy; - str += bytes_to_copy; - len -= bytes_to_copy; - } - } - return 0; -} - -/* - * sys32_execve() executes a new program. - */ -static inline int -do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) -{ - struct linux_binprm bprm; - struct file * file; - int retval; - int i; - - sched_balance_exec(); - - file = open_exec(filename); - - retval = PTR_ERR(file); - if (IS_ERR(file)) - return retval; - - bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0])); - - bprm.file = file; - bprm.filename = filename; - bprm.interp = filename; - bprm.sh_bang = 0; - bprm.loader = 0; - bprm.exec = 0; - bprm.mm = mm_alloc(); - retval = -ENOMEM; - if (!bprm.mm) - goto out_file; - - /* init_new_context is empty for s390x. */ - - bprm.argc = count32(argv); - if ((retval = bprm.argc) < 0) - goto out_mm; - - bprm.envc = count32(envp); - if ((retval = bprm.envc) < 0) - goto out_mm; - - retval = security_bprm_alloc(&bprm); - if (retval) - goto out; - - retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; - - retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; - - bprm.exec = bprm.p; - retval = copy_strings32(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; - - retval = copy_strings32(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; - - retval = search_binary_handler(&bprm, regs); - if (retval >= 0) { - /* execve success */ - security_bprm_free(&bprm); - return retval; - } - -out: - /* Something went wrong, return the inode and free the argument pages*/ - for (i=0 ; iptrace &= ~PT_DTRACE; @@ -1269,226 +796,6 @@ } #endif /* CONFIG_MODULES */ - -/* Stuff for NFS server syscalls... */ -struct nfsctl_svc32 { - u16 svc32_port; - s32 svc32_nthreads; -}; - -struct nfsctl_client32 { - s8 cl32_ident[NFSCLNT_IDMAX+1]; - s32 cl32_naddr; - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; - s32 cl32_fhkeytype; - s32 cl32_fhkeylen; - u8 cl32_fhkey[NFSCLNT_KEYMAX]; -}; - -struct nfsctl_export32 { - s8 ex32_client[NFSCLNT_IDMAX+1]; - s8 ex32_path[NFS_MAXPATHLEN+1]; - compat_dev_t ex32_dev; - compat_ino_t ex32_ino; - s32 ex32_flags; - compat_uid_t ex32_anon_uid; - compat_gid_t ex32_anon_gid; -}; - -struct nfsctl_fdparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_version; -}; - -struct nfsctl_fsparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_maxlen; -}; - -struct nfsctl_arg32 { - s32 ca32_version; /* safeguard */ - union { - struct nfsctl_svc32 u32_svc; - struct nfsctl_client32 u32_client; - struct nfsctl_export32 u32_export; - struct nfsctl_fdparm32 u32_getfd; - struct nfsctl_fsparm32 u32_getfs; - } u; -#define ca32_svc u.u32_svc -#define ca32_client u.u32_client -#define ca32_export u.u32_export -#define ca32_getfd u.u32_getfd -#define ca32_getfs u.u32_getfs -#define ca32_authd u.u32_authd -}; - -union nfsctl_res32 { - __u8 cr32_getfh[NFS_FHSIZE]; - struct knfsd_fh cr32_getfs; -}; - -static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port); - err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads); - return err; -} - -static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_client.cl_ident[0], - &arg32->ca32_client.cl32_ident[0], - NFSCLNT_IDMAX); - err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr); - err |= copy_from_user(&karg->ca_client.cl_addrlist[0], - &arg32->ca32_client.cl32_addrlist[0], - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)); - err |= __get_user(karg->ca_client.cl_fhkeytype, - &arg32->ca32_client.cl32_fhkeytype); - err |= __get_user(karg->ca_client.cl_fhkeylen, - &arg32->ca32_client.cl32_fhkeylen); - err |= copy_from_user(&karg->ca_client.cl_fhkey[0], - &arg32->ca32_client.cl32_fhkey[0], - NFSCLNT_KEYMAX); - return err; -} - -static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_export.ex_client[0], - &arg32->ca32_export.ex32_client[0], - NFSCLNT_IDMAX); - err |= copy_from_user(&karg->ca_export.ex_path[0], - &arg32->ca32_export.ex32_path[0], - NFS_MAXPATHLEN); - err |= __get_user(karg->ca_export.ex_dev, - &arg32->ca32_export.ex32_dev); - err |= __get_user(karg->ca_export.ex_ino, - &arg32->ca32_export.ex32_ino); - err |= __get_user(karg->ca_export.ex_flags, - &arg32->ca32_export.ex32_flags); - err |= __get_user(karg->ca_export.ex_anon_uid, - &arg32->ca32_export.ex32_anon_uid); - err |= __get_user(karg->ca_export.ex_anon_gid, - &arg32->ca32_export.ex32_anon_gid); - karg->ca_export.ex_anon_uid = high2lowuid(karg->ca_export.ex_anon_uid); - karg->ca_export.ex_anon_gid = high2lowgid(karg->ca_export.ex_anon_gid); - return err; -} - -static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfd.gd_addr, - &arg32->ca32_getfd.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfd.gd_path, - &arg32->ca32_getfd.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfd.gd_version, - &arg32->ca32_getfd.gd32_version); - return err; -} - -static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfs.gd_addr, - &arg32->ca32_getfs.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfs.gd_path, - &arg32->ca32_getfs.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfs.gd_maxlen, - &arg32->ca32_getfs.gd32_maxlen); - return err; -} - -/* This really doesn't need translations, we are only passing - * back a union which contains opaque nfs file handle data. - */ -static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32) -{ - return copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0; -} - -long asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32) -{ - struct nfsctl_arg *karg = NULL; - union nfsctl_res *kres = NULL; - mm_segment_t oldfs; - int err; - - karg = kmalloc(sizeof(*karg), GFP_USER); - if(!karg) - return -ENOMEM; - if(res32) { - kres = kmalloc(sizeof(*kres), GFP_USER); - if(!kres) { - kfree(karg); - return -ENOMEM; - } - } - switch(cmd) { - case NFSCTL_SVC: - err = nfs_svc32_trans(karg, arg32); - break; - case NFSCTL_ADDCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_DELCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_EXPORT: - case NFSCTL_UNEXPORT: - err = nfs_exp32_trans(karg, arg32); - break; - case NFSCTL_GETFD: - err = nfs_getfd32_trans(karg, arg32); - break; - case NFSCTL_GETFS: - err = nfs_getfs32_trans(karg, arg32); - break; - default: - err = -EINVAL; - break; - } - if(err) - goto done; - oldfs = get_fs(); - set_fs(KERNEL_DS); - err = sys_nfsservctl(cmd, karg, kres); - set_fs(oldfs); - - if (err) - goto done; - - if((cmd == NFSCTL_GETFD) || - (cmd == NFSCTL_GETFS)) - err = nfs_getfh32_res_trans(kres, res32); - -done: - if(karg) - kfree(karg); - if(kres) - kfree(kres); - return err; -} /* Translations due to time_t size differences. Which affects all sorts of things, like timeval and itimerval. */ diff -Nru a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S --- a/arch/s390/kernel/compat_wrapper.S Tue May 18 23:38:09 2004 +++ b/arch/s390/kernel/compat_wrapper.S Tue May 18 23:38:09 2004 @@ -641,14 +641,14 @@ llgfr %r4,%r4 # unsigned int jg sys32_getdents # branch to system call - .globl sys32_select_wrapper -sys32_select_wrapper: + .globl compat_sys_select_wrapper +compat_sys_select_wrapper: lgfr %r2,%r2 # int - llgtr %r3,%r3 # fd_set * - llgtr %r4,%r4 # fd_set * - llgtr %r5,%r5 # fd_set * - llgtr %r6,%r6 # struct timeval_emu31 * - jg sys32_select # branch to system call + llgtr %r3,%r3 # compat_fd_set * + llgtr %r4,%r4 # compat_fd_set * + llgtr %r5,%r5 # compat_fd_set * + llgtr %r6,%r6 # struct compat_timeval * + jg compat_sys_select # branch to system call .globl sys32_flock_wrapper sys32_flock_wrapper: @@ -663,19 +663,19 @@ lgfr %r4,%r4 # int jg sys_msync # branch to system call - .globl sys32_readv_wrapper -sys32_readv_wrapper: + .globl compat_sys_readv_wrapper +compat_sys_readv_wrapper: lgfr %r2,%r2 # int - llgtr %r3,%r3 # const struct iovec_emu31 * + llgtr %r3,%r3 # const struct compat_iovec * llgfr %r4,%r4 # unsigned long - jg sys32_readv # branch to system call + jg compat_sys_readv # branch to system call - .globl sys32_writev_wrapper -sys32_writev_wrapper: + .globl compat_sys_writev_wrapper +compat_sys_writev_wrapper: lgfr %r2,%r2 # int - llgtr %r3,%r3 # const struct iovec_emu31 * + llgtr %r3,%r3 # const struct compat_iovec * llgfr %r4,%r4 # unsigned long - jg sys32_writev # branch to system call + jg compat_sys_writev # branch to system call .globl sys32_getsid_wrapper sys32_getsid_wrapper: @@ -786,12 +786,12 @@ lgfr %r4,%r4 # long jg sys_poll # branch to system call - .globl sys32_nfsservctl_wrapper -sys32_nfsservctl_wrapper: + .globl compat_sys_nfsservctl_wrapper +compat_sys_nfsservctl_wrapper: lgfr %r2,%r2 # int - llgtr %r3,%r3 # struct nfsctl_arg_emu31 * - llgtr %r4,%r4 # union nfsctl_res_emu31 * - jg sys32_nfsservctl # branch to system call + llgtr %r3,%r3 # struct compat_nfsctl_arg* + llgtr %r4,%r4 # union compat_nfsctl_res* + jg compat_sys_nfsservctl # branch to system call .globl sys32_setresgid16_wrapper sys32_setresgid16_wrapper: diff -Nru a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S --- a/arch/s390/kernel/entry.S Tue May 18 23:38:06 2004 +++ b/arch/s390/kernel/entry.S Tue May 18 23:38:06 2004 @@ -471,9 +471,10 @@ pgm_per_std: SAVE_ALL __LC_PGM_OLD_PSW,__LC_SAVE_AREA,1 GET_THREAD_INFO - mvc __THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID - mvc __THREAD_per+__PER_address(4,%r9),__LC_PER_ADDRESS - mvc __THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID + l %r1,__TI_task(%r9) + mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID + mvc __THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS + mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID la %r4,0x7f l %r3,__LC_PGM_ILC # load program interruption code nr %r4,%r3 # clear per-event-bit and ilc @@ -495,11 +496,12 @@ pgm_svcper: SAVE_ALL __LC_SVC_OLD_PSW,__LC_SAVE_AREA,1 lh %r7,0x8a # get svc number from lowcore - stosm 24(%r15),0x03 # reenable interrupts GET_THREAD_INFO # load pointer to task_struct to R9 - mvc __THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID - mvc __THREAD_per+__PER_address(4,%r9),__LC_PER_ADDRESS - mvc __THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID + l %r1,__TI_task(%r9) + mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID + mvc __THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS + mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID + stosm 24(%r15),0x03 # reenable interrupts sla %r7,2 # *4 and test for svc 0 bnz BASED(pgm_svcstd) # svc number > 0 ? # svc 0: system call number in %r1 diff -Nru a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S --- a/arch/s390/kernel/entry64.S Tue May 18 23:38:06 2004 +++ b/arch/s390/kernel/entry64.S Tue May 18 23:38:06 2004 @@ -505,9 +505,10 @@ pgm_per_std: SAVE_ALL __LC_PGM_OLD_PSW,__LC_SAVE_AREA,1 GET_THREAD_INFO - mvc __THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID - mvc __THREAD_per+__PER_address(8,%r9),__LC_PER_ADDRESS - mvc __THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID + lg %r1,__TI_task(%r9) + mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID + mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS + mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID lghi %r4,0x7f lgf %r3,__LC_PGM_ILC # load program interruption code nr %r4,%r3 # clear per-event-bit and ilc @@ -528,11 +529,12 @@ pgm_svcper: SAVE_ALL __LC_SVC_OLD_PSW,__LC_SAVE_AREA,1 llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore - stosm 48(%r15),0x03 # reenable interrupts GET_THREAD_INFO # load pointer to task_struct to R9 - mvc __THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID - mvc __THREAD_per+__PER_address(8,%r9),__LC_PER_ADDRESS - mvc __THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID + lg %r1,__TI_task(%r9) + mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID + mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS + mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID + stosm 48(%r15),0x03 # reenable interrupts slag %r7,%r7,2 # *4 and test for svc 0 jnz pgm_svcstd # svc 0: system call number in %r1 diff -Nru a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c --- a/arch/s390/kernel/module.c Tue May 18 23:38:09 2004 +++ b/arch/s390/kernel/module.c Tue May 18 23:38:09 2004 @@ -277,7 +277,8 @@ *(unsigned int *) loc = val; else if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT) - *(unsigned int *) loc = val >> 1; + *(unsigned int *) loc = + (val + (Elf_Addr) me->module_core - loc) >> 1; else if (r_type == R_390_GOT64 || r_type == R_390_GOTPLT64) *(unsigned long *) loc = val; diff -Nru a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c --- a/arch/s390/kernel/process.c Tue May 18 23:38:08 2004 +++ b/arch/s390/kernel/process.c Tue May 18 23:38:08 2004 @@ -385,12 +385,6 @@ dump->regs.per_info = current->thread.per_info; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long r14, r15, bc; @@ -413,12 +407,10 @@ #else r14 = *(unsigned long *) (bc+112); #endif - if (r14 < first_sched || r14 >= last_sched) + if (!in_sched_functions(r14)) return r14; bc = (*(unsigned long *) bc) & PSW_ADDR_INSN; } while (count++ < 16); return 0; } -#undef last_sched -#undef first_sched diff -Nru a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c --- a/arch/s390/kernel/smp.c Tue May 18 23:38:05 2004 +++ b/arch/s390/kernel/smp.c Tue May 18 23:38:05 2004 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -127,6 +128,9 @@ if (cpus <= 0) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); @@ -647,6 +651,24 @@ { return 0; } + +static DEFINE_PER_CPU(struct cpu, cpu_devices); + +static int __init topology_init(void) +{ + int cpu; + int ret; + + for_each_cpu(cpu) { + ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL); + if (ret) + printk(KERN_WARNING "topology_init: register_cpu %d " + "failed (%d)\n", cpu, ret); + } + return 0; +} + +subsys_initcall(topology_init); EXPORT_SYMBOL(cpu_possible_map); EXPORT_SYMBOL(lowcore_ptr); diff -Nru a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c --- a/arch/s390/kernel/sys_s390.c Tue May 18 23:38:06 2004 +++ b/arch/s390/kernel/sys_s390.c Tue May 18 23:38:06 2004 @@ -138,38 +138,6 @@ return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); } -#else /* CONFIG_ARCH_S390X */ -unsigned long -arch_get_unmapped_area(struct file *filp, unsigned long addr, - unsigned long len, unsigned long pgoff, - unsigned long flags) -{ - struct vm_area_struct *vma; - unsigned long end; - - if (test_thread_flag(TIF_31BIT)) { - if (!addr) - addr = 0x40000000; - end = 0x80000000; - } else { - if (!addr) - addr = TASK_SIZE / 2; - end = TASK_SIZE; - } - - if (len > end) - return -ENOMEM; - addr = PAGE_ALIGN(addr); - - for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { - /* At this point: (!vma || addr < vma->vm_end). */ - if (end - len < addr) - return -ENOMEM; - if (!vma || addr + len <= vma->vm_start) - return addr; - addr = vma->vm_end; - } -} #endif /* CONFIG_ARCH_S390X */ /* diff -Nru a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S --- a/arch/s390/kernel/syscalls.S Tue May 18 23:38:05 2004 +++ b/arch/s390/kernel/syscalls.S Tue May 18 23:38:05 2004 @@ -150,11 +150,11 @@ SYSCALL(sys_setfsgid16,sys_ni_syscall,sys32_setfsgid16_wrapper) /* old setfsgid16 syscall */ SYSCALL(sys_llseek,sys_llseek,sys32_llseek_wrapper) /* 140 */ SYSCALL(sys_getdents,sys_getdents,sys32_getdents_wrapper) -SYSCALL(sys_select,sys_select,sys32_select_wrapper) +SYSCALL(sys_select,sys_select,compat_sys_select_wrapper) SYSCALL(sys_flock,sys_flock,sys32_flock_wrapper) SYSCALL(sys_msync,sys_msync,sys32_msync_wrapper) -SYSCALL(sys_readv,sys_readv,sys32_readv_wrapper) /* 145 */ -SYSCALL(sys_writev,sys_writev,sys32_writev_wrapper) +SYSCALL(sys_readv,sys_readv,compat_sys_readv_wrapper) /* 145 */ +SYSCALL(sys_writev,sys_writev,compat_sys_writev_wrapper) SYSCALL(sys_getsid,sys_getsid,sys32_getsid_wrapper) SYSCALL(sys_fdatasync,sys_fdatasync,sys32_fdatasync_wrapper) SYSCALL(sys_sysctl,sys_sysctl,sys32_sysctl_wrapper) @@ -177,7 +177,7 @@ NI_SYSCALL /* for vm86 */ NI_SYSCALL /* old sys_query_module */ SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper) -SYSCALL(sys_nfsservctl,sys_nfsservctl,sys32_nfsservctl_wrapper) +SYSCALL(sys_nfsservctl,sys_nfsservctl,compat_sys_nfsservctl_wrapper) SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper) /* 170 old setresgid16 syscall */ SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper) /* old getresgid16 syscall */ SYSCALL(sys_prctl,sys_prctl,sys32_prctl_wrapper) diff -Nru a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c --- a/arch/s390/kernel/time.c Tue May 18 23:38:05 2004 +++ b/arch/s390/kernel/time.c Tue May 18 23:38:05 2004 @@ -468,7 +468,7 @@ __u64 tmp; __u32 ticks; - if (!cpu_isset(smp_processor_id(), idle_cpu_mask)) + if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) return; /* Calculate how many ticks have passed */ @@ -511,7 +511,7 @@ do_timer(regs); #endif } - cpu_clear(smp_processor_id(), idle_cpu_mask); + cpu_clear(smp_processor_id(), nohz_cpu_mask); } /* @@ -536,7 +536,7 @@ * This cpu is going really idle. Set up the clock comparator * for the next event. */ - cpu_set(smp_processor_id(), idle_cpu_mask); + cpu_set(smp_processor_id(), nohz_cpu_mask); timer = (__u64) (next_timer_interrupt() - jiffies) + jiffies_64; timer = jiffies_timer_cc + timer * CLK_TICKS_PER_JIFFY; asm volatile ("SCKC %0" : : "m" (timer)); diff -Nru a/arch/s390/mm/init.c b/arch/s390/mm/init.c --- a/arch/s390/mm/init.c Tue May 18 23:38:08 2004 +++ b/arch/s390/mm/init.c Tue May 18 23:38:08 2004 @@ -69,7 +69,7 @@ else if (PageSwapCache(mem_map+i)) cached++; else if (page_count(mem_map+i)) - shared += atomic_read(&mem_map[i].count) - 1; + shared += page_count(mem_map+i) - 1; } printk("%d pages of RAM\n",total); printk("%d reserved pages\n",reserved); diff -Nru a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c --- a/arch/sh/kernel/process.c Tue May 18 23:38:08 2004 +++ b/arch/sh/kernel/process.c Tue May 18 23:38:08 2004 @@ -461,12 +461,6 @@ return error; } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long schedule_frame; @@ -479,7 +473,7 @@ * The same comment as on the Alpha applies here, too ... */ pc = thread_saved_pc(p); - if (pc >= first_sched && pc < last_sched) { + if (in_sched_functions(pc)) { schedule_frame = ((unsigned long *)(long)p->thread.sp)[1]; return (unsigned long)((unsigned long *)schedule_frame)[1]; } diff -Nru a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c --- a/arch/sh/kernel/smp.c Tue May 18 23:38:07 2004 +++ b/arch/sh/kernel/smp.c Tue May 18 23:38:07 2004 @@ -181,6 +181,9 @@ if (nr_cpus < 2) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + spin_lock(&smp_fn_call.lock); atomic_set(&smp_fn_call.finished, 0); diff -Nru a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c --- a/arch/sh/mm/hugetlbpage.c Tue May 18 23:38:07 2004 +++ b/arch/sh/mm/hugetlbpage.c Tue May 18 23:38:07 2004 @@ -248,8 +248,9 @@ goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); - unlock_page(page); - if (ret) { + if (! ret) { + unlock_page(page); + } else { hugetlb_put_quota(mapping); free_huge_page(page); goto out; diff -Nru a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c --- a/arch/sparc/kernel/process.c Tue May 18 23:38:05 2004 +++ b/arch/sparc/kernel/process.c Tue May 18 23:38:05 2004 @@ -721,8 +721,7 @@ break; rw = (struct reg_window *) fp; pc = rw->ins[7]; - if (pc < ((unsigned long) scheduling_functions_start_here) || - pc >= ((unsigned long) scheduling_functions_end_here)) { + if (!in_sched_functions(pc)) { ret = pc; goto out; } diff -Nru a/arch/sparc/mm/init.c b/arch/sparc/mm/init.c --- a/arch/sparc/mm/init.c Tue May 18 23:38:07 2004 +++ b/arch/sparc/mm/init.c Tue May 18 23:38:07 2004 @@ -388,7 +388,7 @@ ClearPageReserved(page); set_bit(PG_highmem, &page->flags); - atomic_set(&page->count, 1); + set_page_count(page, 1); __free_page(page); totalhigh_pages++; } diff -Nru a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c --- a/arch/sparc64/kernel/pci.c Tue May 18 23:38:05 2004 +++ b/arch/sparc64/kernel/pci.c Tue May 18 23:38:05 2004 @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -799,6 +800,7 @@ return ret; } +EXPORT_SYMBOL(pci_domain_nr); int pci_name_bus(char *name, struct pci_bus *bus) { diff -Nru a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c --- a/arch/sparc64/kernel/process.c Tue May 18 23:38:06 2004 +++ b/arch/sparc64/kernel/process.c Tue May 18 23:38:06 2004 @@ -847,8 +847,7 @@ break; rw = (struct reg_window *) fp; pc = rw->ins[7]; - if (pc < ((unsigned long) scheduling_functions_start_here) || - pc >= ((unsigned long) scheduling_functions_end_here)) { + if (!in_sched_functions(pc)) { ret = pc; goto out; } diff -Nru a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c --- a/arch/sparc64/kernel/smp.c Tue May 18 23:38:05 2004 +++ b/arch/sparc64/kernel/smp.c Tue May 18 23:38:05 2004 @@ -598,6 +598,9 @@ if (!cpus) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.finished, 0); diff -Nru a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c --- a/arch/sparc64/kernel/sys_sparc32.c Tue May 18 23:38:08 2004 +++ b/arch/sparc64/kernel/sys_sparc32.c Tue May 18 23:38:08 2004 @@ -832,182 +832,6 @@ return sys_ftruncate(fd, (high << 32) | low); } -typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *); -typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *); - -static long do_readv_writev32(int type, struct file *file, - const struct compat_iovec *vector, u32 count) -{ - compat_ssize_t tot_len; - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack, *ivp; - struct inode *inode; - long retval, i; - io_fn_t fn; - iov_fn_t fnv; - - /* - * SuS says "The readv() function *may* fail if the iovcnt argument - * was less than or equal to 0, or greater than {IOV_MAX}. Linux has - * traditionally returned zero for zero segments, so... - */ - retval = 0; - if (count == 0) - goto out; - - /* First get the "struct iovec" from user memory and - * verify all the pointers - */ - retval = -EINVAL; - if (count > UIO_MAXIOV) - goto out; - if (!file->f_op) - goto out; - if (count > UIO_FASTIOV) { - retval = -ENOMEM; - iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - goto out; - } - retval = -EFAULT; - if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count)) - goto out; - - /* - * Single unix specification: - * We should -EINVAL if an element length is not >= 0 and fitting an - * ssize_t. The total length is fitting an ssize_t - * - * Be careful here because iov_len is a size_t not an ssize_t - */ - tot_len = 0; - i = count; - ivp = iov; - retval = -EINVAL; - while(i > 0) { - compat_ssize_t tmp = tot_len; - compat_ssize_t len; - u32 buf; - - if (__get_user(len, &vector->iov_len) || - __get_user(buf, &vector->iov_base)) { - retval = -EFAULT; - goto out; - } - if (len < 0) /* size_t not fitting an ssize_t32 .. */ - goto out; - tot_len += len; - if (tot_len < tmp) /* maths overflow on the compat_ssize_t */ - goto out; - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t) len; - vector++; - ivp++; - i--; - } - if (tot_len == 0) { - retval = 0; - goto out; - } - - inode = file->f_dentry->d_inode; - /* VERIFY_WRITE actually means a read, as we write to user space */ - retval = locks_verify_area((type == READ - ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE), - inode, file, file->f_pos, tot_len); - if (retval) - goto out; - - if (type == READ) { - fn = file->f_op->read; - fnv = file->f_op->readv; - } else { - fn = (io_fn_t)file->f_op->write; - fnv = file->f_op->writev; - } - if (fnv) { - retval = fnv(file, iov, count, &file->f_pos); - goto out; - } - - /* Do it by hand, with file-ops */ - ivp = iov; - while (count > 0) { - void * base; - int len, nr; - - base = ivp->iov_base; - len = ivp->iov_len; - ivp++; - count--; - - nr = fn(file, base, len, &file->f_pos); - - if (nr < 0) { - if (!retval) - retval = nr; - break; - } - retval += nr; - if (nr != len) - break; - } -out: - if (iov != iovstack) - kfree(iov); - if ((retval + (type == READ)) > 0) - dnotify_parent(file->f_dentry, - (type == READ) ? DN_ACCESS : DN_MODIFY); - - return retval; -} - -asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - int ret; - - file = fget(fd); - if(!file) - return -EBADF; - - ret = -EBADF; - if (!(file->f_mode & FMODE_READ)) - goto out; - ret = -EINVAL; - if (!file->f_op || (!file->f_op->readv && !file->f_op->read)) - goto out; - - ret = do_readv_writev32(READ, file, vector, count); - -out: - fput(file); - return ret; -} - -asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count) -{ - struct file *file; - int ret; - - file = fget(fd); - if(!file) - return -EBADF; - - ret = -EBADF; - if (!(file->f_mode & FMODE_WRITE)) - goto out; - ret = -EINVAL; - if (!file->f_op || (!file->f_op->writev && !file->f_op->write)) - goto out; - - ret = do_readv_writev32(WRITE, file, vector, count); - -out: - fput(file); - return ret; -} - /* readdir & getdents */ #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de))) @@ -1140,158 +964,6 @@ /* end of readdir & getdents */ -/* - * Ooo, nasty. We need here to frob 32-bit unsigned longs to - * 64-bit unsigned longs. - */ - -static int get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset) -{ - if (ufdset) { - unsigned long odd; - - if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32))) - return -EFAULT; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - __get_user(l, ufdset); - __get_user(h, ufdset+1); - ufdset += 2; - *fdset++ = h << 32 | l; - n -= 2; - } - if (odd) - __get_user(*fdset, ufdset); - } else { - /* Tricky, must clear full unsigned long in the - * kernel fdset at the end, this makes sure that - * actually happens. - */ - memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32)); - } - return 0; -} - -static void set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset) -{ - unsigned long odd; - - if (!ufdset) - return; - - odd = n & 1UL; - n &= ~1UL; - while (n) { - unsigned long h, l; - l = *fdset++; - h = l >> 32; - __put_user(l, ufdset); - __put_user(h, ufdset+1); - ufdset += 2; - n -= 2; - } - if (odd) - __put_user(*fdset, ufdset); -} - -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) - -asmlinkage int sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, u32 tvp_x) -{ - fd_set_bits fds; - struct compat_timeval *tvp = (struct compat_timeval *)AA(tvp_x); - char *bits; - unsigned long nn; - long timeout; - int ret, size; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp) { - time_t sec, usec; - - if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp))) - || (ret = __get_user(sec, &tvp->tv_sec)) - || (ret = __get_user(usec, &tvp->tv_usec))) - goto out_nofds; - - ret = -EINVAL; - if(sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32)); - if ((ret = get_fd_set32(nn, fds.in, inp)) || - (ret = get_fd_set32(nn, fds.out, outp)) || - (ret = get_fd_set32(nn, fds.ex, exp))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - put_user(sec, &tvp->tv_sec); - put_user(usec, &tvp->tv_usec); - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set32(nn, inp, fds.res_in); - set_fd_set32(nn, outp, fds.res_out); - set_fd_set32(nn, exp, fds.res_ex); - -out: - kfree(bits); -out_nofds: - return ret; -} - int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) { int err; @@ -1562,8 +1234,6 @@ return ret; } -extern void check_pending(int signum); - asmlinkage int sys32_sigaction (int sig, struct old_sigaction32 *act, struct old_sigaction32 *oact) { struct k_sigaction new_ka, old_ka; @@ -1659,193 +1329,6 @@ return ret; } - -/* - * count32() counts the number of arguments/envelopes - */ -static int count32(u32 * argv, int max) -{ - int i = 0; - - if (argv != NULL) { - for (;;) { - u32 p; int error; - - error = get_user(p,argv); - if (error) - return error; - if (!p) - break; - argv++; - if (++i > max) - return -E2BIG; - } - } - return i; -} - -/* - * 'copy_string32()' copies argument/envelope strings from user - * memory to free pages in kernel mem. These are in a format ready - * to be put directly into the top of new user memory. - */ -static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm) -{ - while (argc-- > 0) { - u32 str; - int len; - unsigned long pos; - - if (get_user(str, argv + argc) || - !str || - !(len = strnlen_user((char *)A(str), bprm->p))) - return -EFAULT; - - if (bprm->p < len) - return -E2BIG; - - bprm->p -= len; - - pos = bprm->p; - while (len) { - char *kaddr; - struct page *page; - int offset, bytes_to_copy, new, err; - - offset = pos % PAGE_SIZE; - page = bprm->page[pos / PAGE_SIZE]; - new = 0; - if (!page) { - page = alloc_page(GFP_USER); - bprm->page[pos / PAGE_SIZE] = page; - if (!page) - return -ENOMEM; - new = 1; - } - kaddr = kmap(page); - - if (new && offset) - memset(kaddr, 0, offset); - bytes_to_copy = PAGE_SIZE - offset; - if (bytes_to_copy > len) { - bytes_to_copy = len; - if (new) - memset(kaddr+offset+len, 0, - PAGE_SIZE-offset-len); - } - - err = copy_from_user(kaddr + offset, (char *)A(str), - bytes_to_copy); - kunmap(page); - - if (err) - return -EFAULT; - - pos += bytes_to_copy; - str += bytes_to_copy; - len -= bytes_to_copy; - } - } - return 0; -} - -/* - * sys32_execve() executes a new program. - */ -static inline int -do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs) -{ - struct linux_binprm bprm; - struct file * file; - int retval; - int i; - - sched_balance_exec(); - - file = open_exec(filename); - - retval = PTR_ERR(file); - if (IS_ERR(file)) - return retval; - - bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); - memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0])); - - bprm.file = file; - bprm.filename = filename; - bprm.interp = filename; - bprm.sh_bang = 0; - bprm.loader = 0; - bprm.exec = 0; - bprm.security = NULL; - bprm.mm = mm_alloc(); - retval = -ENOMEM; - if (!bprm.mm) - goto out_file; - - retval = init_new_context(current, bprm.mm); - if (retval < 0) - goto out_mm; - - bprm.argc = count32(argv, bprm.p / sizeof(u32)); - if ((retval = bprm.argc) < 0) - goto out_mm; - - bprm.envc = count32(envp, bprm.p / sizeof(u32)); - if ((retval = bprm.envc) < 0) - goto out_mm; - - retval = security_bprm_alloc(&bprm); - if (retval) - goto out; - - retval = prepare_binprm(&bprm); - if (retval < 0) - goto out; - - retval = copy_strings_kernel(1, &bprm.filename, &bprm); - if (retval < 0) - goto out; - - bprm.exec = bprm.p; - retval = copy_strings32(bprm.envc, envp, &bprm); - if (retval < 0) - goto out; - - retval = copy_strings32(bprm.argc, argv, &bprm); - if (retval < 0) - goto out; - - retval = search_binary_handler(&bprm, regs); - if (retval >= 0) { - /* execve success */ - security_bprm_free(&bprm); - return retval; - } - -out: - /* Something went wrong, return the inode and free the argument pages*/ - for (i = 0 ; i < MAX_ARG_PAGES ; i++) { - struct page * page = bprm.page[i]; - if (page) - __free_page(page); - } - - if (bprm.security) - security_bprm_free(&bprm); - -out_mm: - if (bprm.mm) - mmdrop(bprm.mm); - -out_file: - if (bprm.file) { - allow_write_access(bprm.file); - fput(bprm.file); - } - return retval; -} - /* * sparc32_execve() executes a new program after the asm stub has set * things up for us. This should basically do what I want it to. @@ -1865,9 +1348,9 @@ error = PTR_ERR(filename); if(IS_ERR(filename)) goto out; - error = do_execve32(filename, - (u32 *)AA((u32)regs->u_regs[base + UREG_I1]), - (u32 *)AA((u32)regs->u_regs[base + UREG_I2]), regs); + error = compat_do_execve(filename, + compat_ptr((u32)regs->u_regs[base + UREG_I1]), + compat_ptr((u32)regs->u_regs[base + UREG_I2]), regs); putname(filename); if(!error) { @@ -1908,232 +1391,6 @@ } #endif /* CONFIG_MODULES */ - -#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE) -/* Stuff for NFS server syscalls... */ -struct nfsctl_svc32 { - u16 svc32_port; - s32 svc32_nthreads; -}; - -struct nfsctl_client32 { - s8 cl32_ident[NFSCLNT_IDMAX+1]; - s32 cl32_naddr; - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; - s32 cl32_fhkeytype; - s32 cl32_fhkeylen; - u8 cl32_fhkey[NFSCLNT_KEYMAX]; -}; - -struct nfsctl_export32 { - s8 ex32_client[NFSCLNT_IDMAX+1]; - s8 ex32_path[NFS_MAXPATHLEN+1]; - compat_dev_t ex32_dev; - compat_ino_t ex32_ino; - s32 ex32_flags; - compat_uid_t ex32_anon_uid; - compat_gid_t ex32_anon_gid; -}; - -struct nfsctl_fdparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_version; -}; - -struct nfsctl_fsparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_maxlen; -}; - -struct nfsctl_arg32 { - s32 ca32_version; /* safeguard */ - union { - struct nfsctl_svc32 u32_svc; - struct nfsctl_client32 u32_client; - struct nfsctl_export32 u32_export; - struct nfsctl_fdparm32 u32_getfd; - struct nfsctl_fsparm32 u32_getfs; - } u; -#define ca32_svc u.u32_svc -#define ca32_client u.u32_client -#define ca32_export u.u32_export -#define ca32_getfd u.u32_getfd -#define ca32_getfs u.u32_getfs -}; - -union nfsctl_res32 { - __u8 cr32_getfh[NFS_FHSIZE]; - struct knfsd_fh cr32_getfs; -}; - -static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port); - err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads); - return err; -} - -static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_client.cl_ident[0], - &arg32->ca32_client.cl32_ident[0], - NFSCLNT_IDMAX); - err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr); - err |= copy_from_user(&karg->ca_client.cl_addrlist[0], - &arg32->ca32_client.cl32_addrlist[0], - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)); - err |= __get_user(karg->ca_client.cl_fhkeytype, - &arg32->ca32_client.cl32_fhkeytype); - err |= __get_user(karg->ca_client.cl_fhkeylen, - &arg32->ca32_client.cl32_fhkeylen); - err |= copy_from_user(&karg->ca_client.cl_fhkey[0], - &arg32->ca32_client.cl32_fhkey[0], - NFSCLNT_KEYMAX); - return (err ? -EFAULT : 0); -} - -static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_export.ex_client[0], - &arg32->ca32_export.ex32_client[0], - NFSCLNT_IDMAX); - err |= copy_from_user(&karg->ca_export.ex_path[0], - &arg32->ca32_export.ex32_path[0], - NFS_MAXPATHLEN); - err |= __get_user(karg->ca_export.ex_dev, - &arg32->ca32_export.ex32_dev); - err |= __get_user(karg->ca_export.ex_ino, - &arg32->ca32_export.ex32_ino); - err |= __get_user(karg->ca_export.ex_flags, - &arg32->ca32_export.ex32_flags); - err |= __get_user(karg->ca_export.ex_anon_uid, - &arg32->ca32_export.ex32_anon_uid); - err |= __get_user(karg->ca_export.ex_anon_gid, - &arg32->ca32_export.ex32_anon_gid); - karg->ca_export.ex_anon_uid = high2lowuid(karg->ca_export.ex_anon_uid); - karg->ca_export.ex_anon_gid = high2lowgid(karg->ca_export.ex_anon_gid); - return (err ? -EFAULT : 0); -} - -static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfd.gd_addr, - &arg32->ca32_getfd.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfd.gd_path, - &arg32->ca32_getfd.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfd.gd_version, - &arg32->ca32_getfd.gd32_version); - return (err ? -EFAULT : 0); -} - -static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = __get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfs.gd_addr, - &arg32->ca32_getfs.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfs.gd_path, - &arg32->ca32_getfs.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= __get_user(karg->ca_getfs.gd_maxlen, - &arg32->ca32_getfs.gd32_maxlen); - return (err ? -EFAULT : 0); -} - -/* This really doesn't need translations, we are only passing - * back a union which contains opaque nfs file handle data. - */ -static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32) -{ - return (copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0); -} - -int asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32) -{ - struct nfsctl_arg *karg = NULL; - union nfsctl_res *kres = NULL; - mm_segment_t oldfs; - int err; - - karg = kmalloc(sizeof(*karg), GFP_USER); - if(!karg) - return -ENOMEM; - if(res32) { - kres = kmalloc(sizeof(*kres), GFP_USER); - if(!kres) { - kfree(karg); - return -ENOMEM; - } - } - switch(cmd) { - case NFSCTL_SVC: - err = nfs_svc32_trans(karg, arg32); - break; - case NFSCTL_ADDCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_DELCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_EXPORT: - case NFSCTL_UNEXPORT: - err = nfs_exp32_trans(karg, arg32); - break; - case NFSCTL_GETFD: - err = nfs_getfd32_trans(karg, arg32); - break; - case NFSCTL_GETFS: - err = nfs_getfs32_trans(karg, arg32); - break; - default: - err = -EINVAL; - break; - } - if(err) - goto done; - oldfs = get_fs(); - set_fs(KERNEL_DS); - err = sys_nfsservctl(cmd, karg, kres); - set_fs(oldfs); - - if (err) - goto done; - - if((cmd == NFSCTL_GETFD) || - (cmd == NFSCTL_GETFS)) - err = nfs_getfh32_res_trans(kres, res32); - -done: - if(karg) - kfree(karg); - if(kres) - kfree(kres); - return err; -} -#else /* !NFSD */ -int asmlinkage sys32_nfsservctl(int cmd, void *notused, void *notused2) -{ - return sys_ni_syscall(); -} -#endif /* Translations due to time_t size differences. Which affects all sorts of things, like timeval and itimerval. */ diff -Nru a/arch/sparc64/kernel/sys_sunos32.c b/arch/sparc64/kernel/sys_sunos32.c --- a/arch/sparc64/kernel/sys_sunos32.c Tue May 18 23:38:08 2004 +++ b/arch/sparc64/kernel/sys_sunos32.c Tue May 18 23:38:08 2004 @@ -528,18 +528,15 @@ return ret; } -/* SunOS mount system call emulation */ -extern asmlinkage int -sys32_select(int n, u32 inp, u32 outp, u32 exp, u32 tvp); - asmlinkage int sunos_select(int width, u32 inp, u32 outp, u32 exp, u32 tvp_x) { int ret; /* SunOS binaries expect that select won't change the tvp contents */ - ret = sys32_select (width, inp, outp, exp, tvp_x); + ret = compat_sys_select(width, compat_ptr(inp), compat_ptr(outp), + compat_ptr(exp), compat_ptr(tvp_x)); if (ret == -EINTR && tvp_x) { - struct compat_timeval *tvp = (struct compat_timeval *)A(tvp_x); + struct compat_timeval *tvp = compat_ptr(tvp_x); time_t sec, usec; __get_user(sec, &tvp->tv_sec); @@ -1203,9 +1200,6 @@ return ret; } -extern asmlinkage int sys32_readv(u32 fd, u32 vector, s32 count); -extern asmlinkage int sys32_writev(u32 fd, u32 vector, s32 count); - asmlinkage int sunos_read(unsigned int fd, u32 buf, u32 count) { int ret; @@ -1218,7 +1212,7 @@ { int ret; - ret = check_nonblock(sys32_readv(fd, vector, count), fd); + ret = check_nonblock(compat_sys_readv(fd, (void*)A(vector), count), fd); return ret; } @@ -1234,7 +1228,7 @@ { int ret; - ret = check_nonblock(sys32_writev(fd, vector, count), fd); + ret = check_nonblock(compat_sys_writev(fd, (void*)A(vector), count), fd); return ret; } diff -Nru a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S --- a/arch/sparc64/kernel/systbls.S Tue May 18 23:38:06 2004 +++ b/arch/sparc64/kernel/systbls.S Tue May 18 23:38:06 2004 @@ -37,13 +37,13 @@ .word sys_madvise, sys_vhangup, sys32_truncate64, sys_mincore, sys32_getgroups16 /*80*/ .word sys32_setgroups16, sys_getpgrp, sys_setgroups, compat_sys_setitimer, sys32_ftruncate64 .word sys_swapon, compat_sys_getitimer, sys_setuid, sys_sethostname, sys_setgid -/*90*/ .word sys_dup2, sys_setfsuid, compat_sys_fcntl, sys32_select, sys_setfsgid +/*90*/ .word sys_dup2, sys_setfsuid, compat_sys_fcntl, compat_sys_select, sys_setfsgid .word sys_fsync, sys_setpriority32, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall /*100*/ .word sys_getpriority, sys32_rt_sigreturn, sys32_rt_sigaction, sys32_rt_sigprocmask, sys32_rt_sigpending .word sys32_rt_sigtimedwait, sys32_rt_sigqueueinfo, sys32_rt_sigsuspend, sys_setresuid, sys_getresuid /*110*/ .word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall .word sys_getgroups, sys32_gettimeofday, compat_sys_getrusage, sys_nis_syscall, sys_getcwd -/*120*/ .word sys32_readv, sys32_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod +/*120*/ .word compat_sys_readv, compat_sys_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod .word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate /*130*/ .word sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall .word sys_nis_syscall, sys_mkdir, sys_rmdir, sys32_utimes, sys_stat64 @@ -65,11 +65,11 @@ .word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex /*220*/ .word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid .word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16 -/*230*/ .word sys32_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64 +/*230*/ .word compat_sys_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64 .word compat_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall /*240*/ .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler .word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep -/*250*/ .word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl +/*250*/ .word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, compat_sys_nfsservctl .word sys_ni_syscall, compat_clock_settime, compat_clock_gettime, compat_clock_getres, compat_clock_nanosleep /*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, compat_timer_settime, compat_timer_gettime, sys_timer_getoverrun .word sys_timer_delete, sys32_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy diff -Nru a/arch/sparc64/kernel/unaligned.c b/arch/sparc64/kernel/unaligned.c --- a/arch/sparc64/kernel/unaligned.c Tue May 18 23:38:06 2004 +++ b/arch/sparc64/kernel/unaligned.c Tue May 18 23:38:06 2004 @@ -175,7 +175,7 @@ } /* This is just to make gcc think die_if_kernel does return... */ -static void unaligned_panic(char *str, struct pt_regs *regs) +static void __attribute_used__ unaligned_panic(char *str, struct pt_regs *regs) { die_if_kernel(str, regs); } diff -Nru a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c --- a/arch/sparc64/mm/hugetlbpage.c Tue May 18 23:38:08 2004 +++ b/arch/sparc64/mm/hugetlbpage.c Tue May 18 23:38:08 2004 @@ -245,8 +245,9 @@ goto out; } ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC); - unlock_page(page); - if (ret) { + if (! ret) { + unlock_page(page); + } else { hugetlb_put_quota(mapping); free_huge_page(page); goto out; diff -Nru a/arch/um/drivers/harddog_kern.c b/arch/um/drivers/harddog_kern.c --- a/arch/um/drivers/harddog_kern.c Tue May 18 23:38:08 2004 +++ b/arch/um/drivers/harddog_kern.c Tue May 18 23:38:08 2004 @@ -71,7 +71,7 @@ if(timer_alive) return -EBUSY; #ifdef CONFIG_HARDDOG_NOWAYOUT - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); #endif #ifdef CONFIG_MCONSOLE diff -Nru a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c --- a/arch/um/drivers/net_kern.c Tue May 18 23:38:07 2004 +++ b/arch/um/drivers/net_kern.c Tue May 18 23:38:07 2004 @@ -124,7 +124,6 @@ spin_lock(&opened_lock); list_add(&lp->list, &opened); spin_unlock(&opened_lock); - MOD_INC_USE_COUNT; out: spin_unlock(&lp->lock); return(err); @@ -144,7 +143,6 @@ list_del(&lp->list); spin_unlock(&opened_lock); - MOD_DEC_USE_COUNT; spin_unlock(&lp->lock); return 0; } diff -Nru a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c --- a/arch/um/kernel/mem.c Tue May 18 23:38:06 2004 +++ b/arch/um/kernel/mem.c Tue May 18 23:38:06 2004 @@ -294,7 +294,7 @@ page = &map[i]; ClearPageReserved(page); set_bit(PG_highmem, &page->flags); - atomic_set(&page->count, 1); + set_page_count(page, 1); __free_page(page); } phys += cur; diff -Nru a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c --- a/arch/um/kernel/smp.c Tue May 18 23:38:06 2004 +++ b/arch/um/kernel/smp.c Tue May 18 23:38:06 2004 @@ -266,6 +266,9 @@ if (!cpus) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + spin_lock_bh(&call_lock); atomic_set(&scf_started, 0); atomic_set(&scf_finished, 0); diff -Nru a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c --- a/arch/v850/kernel/process.c Tue May 18 23:38:05 2004 +++ b/arch/v850/kernel/process.c Tue May 18 23:38:05 2004 @@ -203,8 +203,8 @@ /* * These bracket the sleeping functions.. */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) +#define first_sched ((unsigned long)__sched_text_start) +#define last_sched ((unsigned long)__sched_text_end) unsigned long get_wchan (struct task_struct *p) { diff -Nru a/arch/v850/kernel/vmlinux.lds.S b/arch/v850/kernel/vmlinux.lds.S --- a/arch/v850/kernel/vmlinux.lds.S Tue May 18 23:38:08 2004 +++ b/arch/v850/kernel/vmlinux.lds.S Tue May 18 23:38:08 2004 @@ -12,6 +12,7 @@ */ #include +#define VMLINUX_SYMBOL(_sym_) _##_sym_ #include /* For most platforms, this will define useful things like RAM addr/size. */ diff -Nru a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig --- a/arch/x86_64/Kconfig Tue May 18 23:38:08 2004 +++ b/arch/x86_64/Kconfig Tue May 18 23:38:08 2004 @@ -239,7 +239,16 @@ Say Y here if you are feeling brave and building a kernel for a desktop, embedded or real-time system. Say N if you are unsure. -# someone write a better help text please. +config SCHED_SMT + bool "SMT (Hyperthreading) scheduler support" + depends on SMP + default off + help + SMT scheduler support improves the CPU scheduler's decision making + when dealing with Intel Pentium 4 chips with HyperThreading at a + cost of slightly increased overhead in some places. If unsure say + N here. + config K8_NUMA bool "K8 NUMA support" depends on SMP @@ -247,9 +256,9 @@ Enable NUMA (Non Unified Memory Architecture) support for AMD Opteron Multiprocessor systems. The kernel will try to allocate memory used by a CPU on the local memory controller of the CPU - and in the future do more optimizations. This may improve performance - or it may not. Code is still experimental. - Say N if unsure. + and add some more NUMA awareness to the kernel. + This code is recommended on all multiprocessor Opteron systems + and normally doesn't hurt on others. config DISCONTIGMEM bool diff -Nru a/arch/x86_64/boot/compressed/misc.c b/arch/x86_64/boot/compressed/misc.c --- a/arch/x86_64/boot/compressed/misc.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/boot/compressed/misc.c Tue May 18 23:38:06 2004 @@ -92,7 +92,7 @@ static void *malloc(int size); static void free(void *where); -static void puts(const char *); +static void putstr(const char *); extern int end; static long free_mem_ptr = (long)&end; @@ -153,7 +153,7 @@ vidmem[i] = ' '; } -static void puts(const char *s) +static void putstr(const char *s) { int x,y,pos; char c; @@ -270,9 +270,9 @@ static void error(char *x) { - puts("\n\n"); - puts(x); - puts("\n\n -- System halted"); + putstr("\n\n"); + putstr(x); + putstr("\n\n -- System halted"); while(1); } @@ -346,9 +346,9 @@ else setup_output_buffer_if_we_run_high(mv); makecrc(); - puts(".\nDecompressing Linux..."); + putstr(".\nDecompressing Linux..."); gunzip(); - puts("done.\nBooting the kernel.\n"); + putstr("done.\nBooting the kernel.\n"); if (high_loaded) close_output_buffer_if_we_run_high(mv); return high_loaded; } diff -Nru a/arch/x86_64/boot/setup.S b/arch/x86_64/boot/setup.S --- a/arch/x86_64/boot/setup.S Tue May 18 23:38:09 2004 +++ b/arch/x86_64/boot/setup.S Tue May 18 23:38:09 2004 @@ -132,7 +132,7 @@ ramdisk_size: .long 0 # its size in bytes bootsect_kludge: - .word bootsect_helper, SETUPSEG + .long 0 # obsolete heap_end_ptr: .word modelist+1024 # (Header version 0x0201 or later) # space from here (exclusive) down to @@ -759,87 +759,6 @@ outb %al, $0x70 lret -# This routine only gets called, if we get loaded by the simple -# bootsect loader _and_ have a bzImage to load. -# Because there is no place left in the 512 bytes of the boot sector, -# we must emigrate to code space here. -bootsect_helper: - cmpw $0, %cs:bootsect_es - jnz bootsect_second - - movb $0x20, %cs:type_of_loader - movw %es, %ax - shrw $4, %ax - movb %ah, %cs:bootsect_src_base+2 - movw %es, %ax - movw %ax, %cs:bootsect_es - subw $SYSSEG, %ax - lret # nothing else to do for now - -bootsect_second: - pushw %cx - pushw %si - pushw %bx - testw %bx, %bx # 64K full? - jne bootsect_ex - - movw $0x8000, %cx # full 64K, INT15 moves words - pushw %cs - popw %es - movw $bootsect_gdt, %si - movw $0x8700, %ax - int $0x15 - jc bootsect_panic # this, if INT15 fails - - movw %cs:bootsect_es, %es # we reset %es to always point - incb %cs:bootsect_dst_base+2 # to 0x10000 -bootsect_ex: - movb %cs:bootsect_dst_base+2, %ah - shlb $4, %ah # we now have the number of - # moved frames in %ax - xorb %al, %al - popw %bx - popw %si - popw %cx - lret - -bootsect_gdt: - .word 0, 0, 0, 0 - .word 0, 0, 0, 0 - -bootsect_src: - .word 0xffff - -bootsect_src_base: - .byte 0x00, 0x00, 0x01 # base = 0x010000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - -bootsect_dst: - .word 0xffff - -bootsect_dst_base: - .byte 0x00, 0x00, 0x10 # base = 0x100000 - .byte 0x93 # typbyte - .word 0 # limit16,base24 =0 - .word 0, 0, 0, 0 # BIOS CS - .word 0, 0, 0, 0 # BIOS DS - -bootsect_es: - .word 0 - -bootsect_panic: - pushw %cs - popw %ds - cld - leaw bootsect_panic_mess, %si - call prtstr - -bootsect_panic_loop: - jmp bootsect_panic_loop - -bootsect_panic_mess: - .string "INT15 refuses to access high mem, giving up." # This routine checks that the keyboard command queue is empty # (after emptying the output buffers) diff -Nru a/arch/x86_64/defconfig b/arch/x86_64/defconfig --- a/arch/x86_64/defconfig Tue May 18 23:38:08 2004 +++ b/arch/x86_64/defconfig Tue May 18 23:38:08 2004 @@ -72,6 +72,7 @@ CONFIG_MTRR=y CONFIG_SMP=y # CONFIG_PREEMPT is not set +CONFIG_SCHED_SMT=y CONFIG_K8_NUMA=y CONFIG_DISCONTIGMEM=y CONFIG_NUMA=y @@ -282,6 +283,7 @@ # CONFIG_SCSI_SATA_SVW is not set CONFIG_SCSI_ATA_PIIX=y # CONFIG_SCSI_SATA_PROMISE is not set +# CONFIG_SCSI_SATA_SX4 is not set # CONFIG_SCSI_SATA_SIL is not set # CONFIG_SCSI_SATA_SIS is not set CONFIG_SCSI_SATA_VIA=y @@ -296,6 +298,7 @@ # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set @@ -331,6 +334,7 @@ # # I2O device support # +# CONFIG_I2O is not set # # Networking support @@ -363,8 +367,6 @@ # CONFIG_INET6_ESP is not set # CONFIG_INET6_IPCOMP is not set # CONFIG_IPV6_TUNNEL is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set # CONFIG_NETFILTER is not set # @@ -372,7 +374,9 @@ # # CONFIG_IP_SCTP is not set # CONFIG_ATM is not set +# CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -393,16 +397,23 @@ # Network testing # # CONFIG_NET_PKTGEN is not set +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_RX is not set +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set # # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) @@ -421,6 +432,7 @@ CONFIG_NET_PCI=y # CONFIG_PCNET32 is not set CONFIG_AMD8111_ETH=y +# CONFIG_AMD8111E_NAPI is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_B44 is not set CONFIG_FORCEDETH=y @@ -436,7 +448,6 @@ # CONFIG_8139TOO_TUNE_TWISTER is not set # CONFIG_8139TOO_8129 is not set # CONFIG_8139_OLD_RX_RESET is not set -CONFIG_8139_RXBUF_IDX=2 # CONFIG_SIS900 is not set # CONFIG_EPIC100 is not set # CONFIG_SUNDANCE is not set @@ -453,7 +464,6 @@ # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_R8169 is not set -# CONFIG_SIS190 is not set # CONFIG_SK98LIN is not set CONFIG_TIGON3=y @@ -461,47 +471,29 @@ # Ethernet (10000 Mbit) # # CONFIG_IXGB is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set +# CONFIG_S2IO is not set # # Token Ring devices # # CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_SHAPER is not set -CONFIG_NETCONSOLE=y - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set # -# IrDA (infrared) support +# Wireless LAN (non-hamradio) # -# CONFIG_IRDA is not set +# CONFIG_NET_RADIO is not set # -# Bluetooth support +# Wan interfaces # -# CONFIG_BT is not set -CONFIG_NETPOLL=y -# CONFIG_NETPOLL_RX is not set -# CONFIG_NETPOLL_TRAP is not set -CONFIG_NET_POLL_CONTROLLER=y +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +CONFIG_NETCONSOLE=y # # ISDN subsystem @@ -685,7 +677,108 @@ # # USB support # -# CONFIG_USB is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_UHCI_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH_TTY is not set +# CONFIG_USB_MIDI is not set +# CONFIG_USB_ACM is not set +CONFIG_USB_PRINTER=y +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=y +CONFIG_USB_HIDINPUT=y +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set +# CONFIG_USB_EGALAX is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_TIGL is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_TEST is not set # # USB Gadget Support @@ -696,6 +789,7 @@ # Firmware Drivers # # CONFIG_EDD is not set +# CONFIG_SMBIOS is not set # # File systems @@ -714,6 +808,9 @@ CONFIG_REISERFS_FS=y # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +# CONFIG_REISERFS_FS_SECURITY is not set # CONFIG_JFS_FS is not set CONFIG_FS_POSIX_ACL=y # CONFIG_XFS_FS is not set @@ -787,7 +884,6 @@ # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set # CONFIG_AFS_FS is not set # @@ -833,3 +929,4 @@ # Library routines # CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set diff -Nru a/arch/x86_64/ia32/ia32_signal.c b/arch/x86_64/ia32/ia32_signal.c --- a/arch/x86_64/ia32/ia32_signal.c Tue May 18 23:38:09 2004 +++ b/arch/x86_64/ia32/ia32_signal.c Tue May 18 23:38:09 2004 @@ -98,6 +98,7 @@ int ia32_copy_siginfo_from_user(siginfo_t *to, siginfo_t32 __user *from) { int err; + u32 ptr32; if (!access_ok (VERIFY_READ, from, sizeof(siginfo_t32))) return -EFAULT; @@ -107,7 +108,8 @@ err |= __get_user(to->si_pid, &from->si_pid); err |= __get_user(to->si_uid, &from->si_uid); - err |= __get_user((u32)(u64)to->si_ptr, &from->si_ptr); + err |= __get_user(ptr32, &from->si_ptr); + to->si_ptr = (void*)(u64)ptr32; return err; } diff -Nru a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S --- a/arch/x86_64/ia32/ia32entry.S Tue May 18 23:38:07 2004 +++ b/arch/x86_64/ia32/ia32entry.S Tue May 18 23:38:07 2004 @@ -447,11 +447,11 @@ .quad sys_setfsgid16 .quad sys_llseek /* 140 */ .quad sys32_getdents - .quad sys32_select + .quad compat_sys_select .quad sys_flock .quad sys_msync - .quad sys32_readv /* 145 */ - .quad sys32_writev + .quad compat_sys_readv /* 145 */ + .quad compat_sys_writev .quad sys_getsid .quad sys_fdatasync .quad sys32_sysctl /* sysctl */ @@ -474,7 +474,7 @@ .quad sys32_vm86_warning /* vm86 */ .quad quiet_ni_syscall /* query_module */ .quad sys_poll - .quad sys32_nfsservctl + .quad compat_sys_nfsservctl .quad sys_setresgid16 /* 170 */ .quad sys_getresgid16 .quad sys_prctl diff -Nru a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c --- a/arch/x86_64/ia32/ptrace32.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/ia32/ptrace32.c Tue May 18 23:38:06 2004 @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -25,8 +26,6 @@ #include #include #include -#include -#include /* determines which flags the user has access to. */ /* 1 = access 0 = no access */ diff -Nru a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c --- a/arch/x86_64/ia32/sys_ia32.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/ia32/sys_ia32.c Tue May 18 23:38:06 2004 @@ -606,107 +606,6 @@ return error; } -/* - * We can actually return ERESTARTSYS instead of EINTR, but I'd - * like to be certain this leads to no problems. So I return - * EINTR just for safety. - * - * Update: ERESTARTSYS breaks at least the xview clock binary, so - * I'm trying ERESTARTNOHAND which restart only when you want to. - */ -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) -#define ROUND_UP_TIME(x,y) (((x)+(y)-1)/(y)) - -asmlinkage long -sys32_select(int n, fd_set *inp, fd_set *outp, fd_set *exp, struct compat_timeval *tvp32) -{ - fd_set_bits fds; - char *bits; - long timeout; - int ret, size; - - timeout = MAX_SCHEDULE_TIMEOUT; - if (tvp32) { - time_t sec, usec; - - get_user(sec, &tvp32->tv_sec); - get_user(usec, &tvp32->tv_usec); - - ret = -EINVAL; - if (sec < 0 || usec < 0) - goto out_nofds; - - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = ROUND_UP_TIME(usec, 1000000/HZ); - timeout += sec * (unsigned long) HZ; - } - } - - ret = -EINVAL; - if (n < 0) - goto out_nofds; - - if (n > current->files->max_fdset) - n = current->files->max_fdset; - - /* - * We need 6 bitmaps (in/out/ex for both incoming and outgoing), - * since we used fdset we need to allocate memory in units of - * long-words. - */ - ret = -ENOMEM; - size = FDS_BYTES(n); - bits = kmalloc(6 * size, GFP_KERNEL); - if (!bits) - goto out_nofds; - fds.in = (unsigned long *) bits; - fds.out = (unsigned long *) (bits + size); - fds.ex = (unsigned long *) (bits + 2*size); - fds.res_in = (unsigned long *) (bits + 3*size); - fds.res_out = (unsigned long *) (bits + 4*size); - fds.res_ex = (unsigned long *) (bits + 5*size); - - if ((ret = get_fd_set(n, inp, fds.in)) || - (ret = get_fd_set(n, outp, fds.out)) || - (ret = get_fd_set(n, exp, fds.ex))) - goto out; - zero_fd_set(n, fds.res_in); - zero_fd_set(n, fds.res_out); - zero_fd_set(n, fds.res_ex); - - ret = do_select(n, &fds, &timeout); - - if (tvp32 && !(current->personality & STICKY_TIMEOUTS)) { - time_t sec = 0, usec = 0; - if (timeout) { - sec = timeout / HZ; - usec = timeout % HZ; - usec *= (1000000/HZ); - } - put_user(sec, (int *)&tvp32->tv_sec); - put_user(usec, (int *)&tvp32->tv_usec); - } - - if (ret < 0) - goto out; - if (!ret) { - ret = -ERESTARTNOHAND; - if (signal_pending(current)) - goto out; - ret = 0; - } - - set_fd_set(n, inp, fds.res_in); - set_fd_set(n, outp, fds.res_out); - set_fd_set(n, exp, fds.res_ex); - -out: - kfree(bits); -out_nofds: - return ret; -} - struct sel_arg_struct { unsigned int n; unsigned int inp; @@ -722,106 +621,8 @@ if (copy_from_user(&a, arg, sizeof(a))) return -EFAULT; - return sys32_select(a.n, (fd_set *)A(a.inp), (fd_set *)A(a.outp), (fd_set *)A(a.exp), - (struct compat_timeval *)A(a.tvp)); -} - -static struct iovec * -get_compat_iovec(struct compat_iovec *iov32, struct iovec *iov_buf, u32 *count, int type, int *errp) -{ - int i; - u32 buf, len; - struct iovec *ivp, *iov; - unsigned long totlen; - - /* Get the "struct iovec" from user memory */ - - *errp = 0; - if (!*count) - return 0; - *errp = -EINVAL; - if (*count > UIO_MAXIOV) - return(struct iovec *)0; - *errp = -EFAULT; - if(verify_area(VERIFY_READ, iov32, sizeof(struct compat_iovec)*(*count))) - return(struct iovec *)0; - if (*count > UIO_FASTIOV) { - *errp = -ENOMEM; - iov = kmalloc(*count*sizeof(struct iovec), GFP_KERNEL); - if (!iov) - return((struct iovec *)0); - } else - iov = iov_buf; - - ivp = iov; - totlen = 0; - for (i = 0; i < *count; i++) { - *errp = __get_user(len, &iov32->iov_len) | - __get_user(buf, &iov32->iov_base); - if (*errp) - goto error; - *errp = verify_area(type, (void *)A(buf), len); - if (*errp) { - if (i > 0) { - *count = i; - break; - } - goto error; - } - /* SuS checks: */ - *errp = -EINVAL; - if ((int)len < 0) - goto error; - if ((totlen += len) >= 0x7fffffff) - goto error; - ivp->iov_base = (void *)A(buf); - ivp->iov_len = (__kernel_size_t)len; - iov32++; - ivp++; - } - *errp = 0; - return(iov); - -error: - if (iov != iov_buf) - kfree(iov); - return NULL; -} - -asmlinkage long -sys32_readv(int fd, struct compat_iovec *vector, u32 count) -{ - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov; - int ret; - mm_segment_t old_fs = get_fs(); - - if ((iov = get_compat_iovec(vector, iovstack, &count, VERIFY_WRITE, &ret)) == NULL) - return ret; - set_fs(KERNEL_DS); - ret = sys_readv(fd, iov, count); - set_fs(old_fs); - if (iov != iovstack) - kfree(iov); - return ret; -} - -asmlinkage long -sys32_writev(int fd, struct compat_iovec *vector, u32 count) -{ - struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov; - int ret; - mm_segment_t old_fs = get_fs(); - - if ((iov = get_compat_iovec(vector, iovstack, &count, VERIFY_READ, &ret)) == NULL) - return ret; - set_fs(KERNEL_DS); - ret = sys_writev(fd, iov, count); - set_fs(old_fs); - if (iov != iovstack) - kfree(iov); - return ret; + return compat_sys_select(a.n, compat_ptr(a.inp), compat_ptr(a.outp), + compat_ptr(a.exp), compat_ptr(a.tvp)); } /* @@ -1323,93 +1124,22 @@ return ret; } -static int nargs(u32 src, char **dst) -{ - int cnt; - u32 val; - - cnt = 0; - do { - int ret = get_user(val, (__u32 *)(u64)src); - if (ret) - return ret; - if (dst) - dst[cnt] = (char *)(u64)val; - cnt++; - src += 4; - if (cnt >= (MAX_ARG_PAGES*PAGE_SIZE)/sizeof(void*)) - return -E2BIG; - } while(val); - if (dst) - dst[cnt-1] = 0; - return cnt; -} - -asmlinkage long sys32_execve(char *name, u32 argv, u32 envp, struct pt_regs regs) -{ - mm_segment_t oldseg; - char **buf = NULL; - int na = 0,ne = 0; - int ret; - unsigned sz = 0; - - if (argv) { - na = nargs(argv, NULL); - if (na < 0) - return -EFAULT; - } - if (envp) { - ne = nargs(envp, NULL); - if (ne < 0) - return -EFAULT; - } - - if (argv || envp) { - sz = (na+ne)*sizeof(void *); - if (sz > PAGE_SIZE) - buf = vmalloc(sz); - else - buf = kmalloc(sz, GFP_KERNEL); - if (!buf) - return -ENOMEM; - } - - if (argv) { - ret = nargs(argv, buf); - if (ret < 0) - goto free; - } - - if (envp) { - ret = nargs(envp, buf + na); - if (ret < 0) - goto free; - } - - name = getname(name); - ret = PTR_ERR(name); - if (IS_ERR(name)) - goto free; - - oldseg = get_fs(); - set_fs(KERNEL_DS); - ret = do_execve(name, argv ? buf : NULL, envp ? buf+na : NULL, ®s); - set_fs(oldseg); +asmlinkage long sys32_execve(char *name, compat_uptr_t __user *argv, + compat_uptr_t __user *envp, struct pt_regs regs) +{ + long error; + char * filename; - if (ret == 0) + filename = getname(name); + error = PTR_ERR(filename); + if (IS_ERR(filename)) + return error; + error = compat_do_execve(filename, argv, envp, ®s); + if (error == 0) current->ptrace &= ~PT_DTRACE; - - putname(name); - -free: - if (argv || envp) { - if (sz > PAGE_SIZE) - vfree(buf); - else - kfree(buf); - } - return ret; -} + putname(filename); + return error; +} asmlinkage long sys32_clone(unsigned int clone_flags, unsigned int newsp, struct pt_regs regs) { @@ -1435,233 +1165,6 @@ return sys_kill(pid, sig); } - -#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE) -/* Stuff for NFS server syscalls... */ -struct nfsctl_svc32 { - u16 svc32_port; - s32 svc32_nthreads; -}; - -struct nfsctl_client32 { - s8 cl32_ident[NFSCLNT_IDMAX+1]; - s32 cl32_naddr; - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; - s32 cl32_fhkeytype; - s32 cl32_fhkeylen; - u8 cl32_fhkey[NFSCLNT_KEYMAX]; -}; - -struct nfsctl_export32 { - s8 ex32_client[NFSCLNT_IDMAX+1]; - s8 ex32_path[NFS_MAXPATHLEN+1]; - compat_dev_t ex32_dev; - compat_ino_t ex32_ino; - s32 ex32_flags; - compat_pid_t ex32_anon_uid; - compat_gid_t ex32_anon_gid; -}; - -struct nfsctl_fdparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_version; -}; - -struct nfsctl_fsparm32 { - struct sockaddr gd32_addr; - s8 gd32_path[NFS_MAXPATHLEN+1]; - s32 gd32_maxlen; -}; - -struct nfsctl_arg32 { - s32 ca32_version; /* safeguard */ - union { - struct nfsctl_svc32 u32_svc; - struct nfsctl_client32 u32_client; - struct nfsctl_export32 u32_export; - struct nfsctl_fdparm32 u32_getfd; - struct nfsctl_fsparm32 u32_getfs; - } u; -#define ca32_svc u.u32_svc -#define ca32_client u.u32_client -#define ca32_export u.u32_export -#define ca32_getfd u.u32_getfd -#define ca32_getfs u.u32_getfs -}; - -union nfsctl_res32 { - __u8 cr32_getfh[NFS_FHSIZE]; - struct knfsd_fh cr32_getfs; -}; - -static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = get_user(karg->ca_version, &arg32->ca32_version); - err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port); - err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads); - return err; -} - -static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_client.cl_ident[0], - &arg32->ca32_client.cl32_ident[0], - NFSCLNT_IDMAX); - err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr); - err |= copy_from_user(&karg->ca_client.cl_addrlist[0], - &arg32->ca32_client.cl32_addrlist[0], - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)); - err |= __get_user(karg->ca_client.cl_fhkeytype, - &arg32->ca32_client.cl32_fhkeytype); - err |= __get_user(karg->ca_client.cl_fhkeylen, - &arg32->ca32_client.cl32_fhkeylen); - err |= copy_from_user(&karg->ca_client.cl_fhkey[0], - &arg32->ca32_client.cl32_fhkey[0], - NFSCLNT_KEYMAX); - return err; -} - -static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_export.ex_client[0], - &arg32->ca32_export.ex32_client[0], - NFSCLNT_IDMAX); - err |= copy_from_user(&karg->ca_export.ex_path[0], - &arg32->ca32_export.ex32_path[0], - NFS_MAXPATHLEN); - err |= __get_user(karg->ca_export.ex_dev, - &arg32->ca32_export.ex32_dev); - err |= __get_user(karg->ca_export.ex_ino, - &arg32->ca32_export.ex32_ino); - err |= __get_user(karg->ca_export.ex_flags, - &arg32->ca32_export.ex32_flags); - err |= __get_user(karg->ca_export.ex_anon_uid, - &arg32->ca32_export.ex32_anon_uid); - err |= __get_user(karg->ca_export.ex_anon_gid, - &arg32->ca32_export.ex32_anon_gid); - SET_UID(karg->ca_export.ex_anon_uid, karg->ca_export.ex_anon_uid); - SET_GID(karg->ca_export.ex_anon_gid, karg->ca_export.ex_anon_gid); - return err; -} - - -static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfd.gd_addr, - &arg32->ca32_getfd.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfd.gd_path, - &arg32->ca32_getfd.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= get_user(karg->ca_getfd.gd_version, - &arg32->ca32_getfd.gd32_version); - return err; -} - -static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) -{ - int err; - - err = get_user(karg->ca_version, &arg32->ca32_version); - err |= copy_from_user(&karg->ca_getfs.gd_addr, - &arg32->ca32_getfs.gd32_addr, - (sizeof(struct sockaddr))); - err |= copy_from_user(&karg->ca_getfs.gd_path, - &arg32->ca32_getfs.gd32_path, - (NFS_MAXPATHLEN+1)); - err |= get_user(karg->ca_getfs.gd_maxlen, - &arg32->ca32_getfs.gd32_maxlen); - return err; -} - -/* This really doesn't need translations, we are only passing - * back a union which contains opaque nfs file handle data. - */ -static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32) -{ - return copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0; -} - -long asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32) -{ - struct nfsctl_arg *karg = NULL; - union nfsctl_res *kres = NULL; - mm_segment_t oldfs; - int err; - - karg = kmalloc(sizeof(*karg), GFP_USER); - if(!karg) - return -ENOMEM; - if(res32) { - kres = kmalloc(sizeof(*kres), GFP_USER); - if(!kres) { - kfree(karg); - return -ENOMEM; - } - } - switch(cmd) { - case NFSCTL_SVC: - err = nfs_svc32_trans(karg, arg32); - break; - case NFSCTL_ADDCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_DELCLIENT: - err = nfs_clnt32_trans(karg, arg32); - break; - case NFSCTL_EXPORT: - case NFSCTL_UNEXPORT: - err = nfs_exp32_trans(karg, arg32); - break; - case NFSCTL_GETFD: - err = nfs_getfd32_trans(karg, arg32); - break; - case NFSCTL_GETFS: - err = nfs_getfs32_trans(karg, arg32); - break; - default: - err = -EINVAL; - break; - } - if(err) - goto done; - oldfs = get_fs(); - set_fs(KERNEL_DS); - err = sys_nfsservctl(cmd, karg, kres); - set_fs(oldfs); - - if (err) - goto done; - - if((cmd == NFSCTL_GETFD) || - (cmd == NFSCTL_GETFS)) - err = nfs_getfh32_res_trans(kres, res32); - -done: - if(karg) - kfree(karg); - if(kres) - kfree(kres); - return err; -} -#else /* !NFSD */ -long asmlinkage sys32_nfsservctl(int cmd, void *notused, void *notused2) -{ - return sys_ni_syscall(); -} -#endif long sys32_io_setup(unsigned nr_reqs, u32 *ctx32p) { diff -Nru a/arch/x86_64/ia32/tls32.c b/arch/x86_64/ia32/tls32.c --- a/arch/x86_64/ia32/tls32.c Tue May 18 23:38:08 2004 +++ b/arch/x86_64/ia32/tls32.c Tue May 18 23:38:08 2004 @@ -94,7 +94,7 @@ ((desc)->a & 0x0ffff) | \ ((desc)->b & 0xf0000) ) -#define GET_32BIT(desc) (((desc)->b >> 23) & 1) +#define GET_32BIT(desc) (((desc)->b >> 22) & 1) #define GET_CONTENTS(desc) (((desc)->b >> 10) & 3) #define GET_WRITABLE(desc) (((desc)->b >> 9) & 1) #define GET_LIMIT_PAGES(desc) (((desc)->b >> 23) & 1) diff -Nru a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile --- a/arch/x86_64/kernel/Makefile Tue May 18 23:38:08 2004 +++ b/arch/x86_64/kernel/Makefile Tue May 18 23:38:08 2004 @@ -25,6 +25,7 @@ obj-$(CONFIG_GART_IOMMU) += pci-gart.o aperture.o obj-$(CONFIG_DUMMY_IOMMU) += pci-nommu.o pci-dma.o obj-$(CONFIG_SWIOTLB) += swiotlb.o +obj-$(CONFIG_SCHED_SMT) += domain.o obj-$(CONFIG_MODULES) += module.o diff -Nru a/arch/x86_64/kernel/domain.c b/arch/x86_64/kernel/domain.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/x86_64/kernel/domain.c Tue May 18 23:38:09 2004 @@ -0,0 +1,93 @@ +#include +#include + +/* Don't do any NUMA setup on Opteron right now. They seem to be + better off with flat scheduling. This is just for SMT. */ + +#ifdef CONFIG_SCHED_SMT + +static struct sched_group sched_group_cpus[NR_CPUS]; +static struct sched_group sched_group_phys[NR_CPUS]; +static DEFINE_PER_CPU(struct sched_domain, cpu_domains); +static DEFINE_PER_CPU(struct sched_domain, phys_domains); +__init void arch_init_sched_domains(void) +{ + int i; + struct sched_group *first = NULL, *last = NULL; + + /* Set up domains */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_domain *phys_domain = &per_cpu(phys_domains, i); + + *cpu_domain = SD_SIBLING_INIT; + /* Disable SMT NICE for CMP */ + /* RED-PEN use a generic flag */ + if (cpu_data[i].x86_vendor == X86_VENDOR_AMD) + cpu_domain->flags &= ~SD_SHARE_CPUPOWER; + cpu_domain->span = cpu_sibling_map[i]; + cpu_domain->parent = phys_domain; + cpu_domain->groups = &sched_group_cpus[i]; + + *phys_domain = SD_CPU_INIT; + phys_domain->span = cpu_possible_map; + phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)]; + } + + /* Set up CPU (sibling) groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + int j; + first = last = NULL; + + if (i != first_cpu(cpu_domain->span)) + continue; + + for_each_cpu_mask(j, cpu_domain->span) { + struct sched_group *cpu = &sched_group_cpus[j]; + + cpus_clear(cpu->cpumask); + cpu_set(j, cpu->cpumask); + cpu->cpu_power = SCHED_LOAD_SCALE; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + } + + first = last = NULL; + /* Set up physical groups */ + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + struct sched_group *cpu = &sched_group_phys[i]; + + if (i != first_cpu(cpu_domain->span)) + continue; + + cpu->cpumask = cpu_domain->span; + /* + * Make each extra sibling increase power by 10% of + * the basic CPU. This is very arbitrary. + */ + cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10; + + if (!first) + first = cpu; + if (last) + last->next = cpu; + last = cpu; + } + last->next = first; + + mb(); + for_each_cpu(i) { + struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i); + cpu_attach_domain(cpu_domain, i); + } +} + +#endif diff -Nru a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c --- a/arch/x86_64/kernel/io_apic.c Tue May 18 23:38:07 2004 +++ b/arch/x86_64/kernel/io_apic.c Tue May 18 23:38:07 2004 @@ -237,6 +237,7 @@ for (func = 0; func < 8; func++) { u32 class; u32 vendor; + u8 type; class = read_pci_config(num,slot,func, PCI_CLASS_REVISION); if (class == 0xffffffff) @@ -270,8 +271,8 @@ } /* No multi-function device? */ - u8 type = read_pci_config_byte(num,slot,func, - PCI_HEADER_TYPE); + type = read_pci_config_byte(num,slot,func, + PCI_HEADER_TYPE); if (!(type & 0x80)) break; } diff -Nru a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c --- a/arch/x86_64/kernel/mpparse.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/kernel/mpparse.c Tue May 18 23:38:06 2004 @@ -920,8 +920,11 @@ } /* Don't set up the ACPI SCI because it's already set up */ - if (acpi_fadt.sci_int == gsi) + if (acpi_fadt.sci_int == gsi) { + /* we still need to set up the entry's irq */ + acpi_gsi_to_irq(gsi, &entry->irq); continue; + } ioapic = mp_find_ioapic(gsi); if (ioapic < 0) diff -Nru a/arch/x86_64/kernel/msr.c b/arch/x86_64/kernel/msr.c --- a/arch/x86_64/kernel/msr.c Tue May 18 23:38:05 2004 +++ b/arch/x86_64/kernel/msr.c Tue May 18 23:38:05 2004 @@ -1,4 +1,3 @@ -#ident "$Id$" /* ----------------------------------------------------------------------- * * * Copyright 2000 H. Peter Anvin - All Rights Reserved diff -Nru a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c --- a/arch/x86_64/kernel/pci-gart.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/kernel/pci-gart.c Tue May 18 23:38:06 2004 @@ -30,7 +30,6 @@ #include #include #include -#include #ifdef CONFIG_PREEMPT #define preempt_atomic() in_atomic() diff -Nru a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c --- a/arch/x86_64/kernel/process.c Tue May 18 23:38:07 2004 +++ b/arch/x86_64/kernel/process.c Tue May 18 23:38:07 2004 @@ -574,12 +574,6 @@ NULL, NULL); } -/* - * These bracket the sleeping functions.. - */ -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - unsigned long get_wchan(struct task_struct *p) { unsigned long stack; @@ -596,14 +590,12 @@ if (fp < (unsigned long)stack || fp > (unsigned long)stack+THREAD_SIZE) return 0; rip = *(u64 *)(fp+8); - if (rip < first_sched || rip >= last_sched) + if (!in_sched_functions(rip)) return rip; fp = *(u64 *)fp; } while (count++ < 16); return 0; } -#undef last_sched -#undef first_sched long do_arch_prctl(struct task_struct *task, int code, unsigned long addr) { diff -Nru a/arch/x86_64/kernel/reboot.c b/arch/x86_64/kernel/reboot.c --- a/arch/x86_64/kernel/reboot.c Tue May 18 23:38:08 2004 +++ b/arch/x86_64/kernel/reboot.c Tue May 18 23:38:08 2004 @@ -29,9 +29,9 @@ static int reboot_mode = 0; /* reboot=b[ios] | t[riple] | k[bd] [, [w]arm | [c]old] - bios Use the CPU reboto vector for warm reset + bios Use the CPU reboot vector for warm reset warm Don't set the cold reboot flag - cold Set the cold reboto flag + cold Set the cold reboot flag triple Force a triple fault (init) kbd Use the keyboard controller. cold reset (default) */ diff -Nru a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c --- a/arch/x86_64/kernel/setup.c Tue May 18 23:38:05 2004 +++ b/arch/x86_64/kernel/setup.c Tue May 18 23:38:05 2004 @@ -663,7 +663,7 @@ return r; } -static void __init detect_ht(void) +static void __init detect_ht(struct cpuinfo_x86 *c) { #ifdef CONFIG_SMP u32 eax, ebx, ecx, edx; @@ -671,6 +671,9 @@ int initial_apic_id; int cpu = smp_processor_id(); + if (!cpu_has(c, X86_FEATURE_HT)) + return; + cpuid(1, &eax, &ebx, &ecx, &edx); smp_num_siblings = (ebx & 0xff0000) >> 16; @@ -768,7 +771,6 @@ unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; unsigned n; - select_idle_routine(c); if (c->cpuid_level > 1) { /* supports eax=2 call */ int i, j, n; @@ -837,9 +839,6 @@ c->x86_cache_size = l2 ? l2 : (l1i+l1d); } - if (cpu_has(c, X86_FEATURE_HT)) - detect_ht(); - n = cpuid_eax(0x80000000); if (n >= 0x80000008) { unsigned eax = cpuid_eax(0x80000008); @@ -969,6 +968,9 @@ break; } + select_idle_routine(c); + detect_ht(c); + /* * On SMP, boot_cpu_data holds the common feature set between * all CPUs; so make sure that we indicate which features are diff -Nru a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c --- a/arch/x86_64/kernel/smp.c Tue May 18 23:38:06 2004 +++ b/arch/x86_64/kernel/smp.c Tue May 18 23:38:06 2004 @@ -404,6 +404,9 @@ if (!cpus) return 0; + /* Can deadlock when called with interrupts disabled */ + WARN_ON(irqs_disabled()); + data.func = func; data.info = info; atomic_set(&data.started, 0); diff -Nru a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c --- a/arch/x86_64/kernel/smpboot.c Tue May 18 23:38:09 2004 +++ b/arch/x86_64/kernel/smpboot.c Tue May 18 23:38:09 2004 @@ -73,7 +73,7 @@ /* Set when the idlers are all forked */ int smp_threads_ready; -char cpu_sibling_map[NR_CPUS] __cacheline_aligned; +cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned; /* * Trampoline 80x86 program as an array. @@ -874,31 +874,36 @@ } /* - * If Hyper-Threading is avaialble, construct cpu_sibling_map[], so - * that we can tell the sibling CPU efficiently. + * Construct cpu_sibling_map[], so that we can tell the + * sibling CPU efficiently. */ - if (cpu_has_ht && smp_num_siblings > 1) { - for (cpu = 0; cpu < NR_CPUS; cpu++) - cpu_sibling_map[cpu] = NO_PROC_ID; - - for (cpu = 0; cpu < NR_CPUS; cpu++) { - int i; - if (!cpu_isset(cpu, cpu_callout_map)) - continue; + for (cpu = 0; cpu < NR_CPUS; cpu++) + cpus_clear(cpu_sibling_map[cpu]); + + for (cpu = 0; cpu < NR_CPUS; cpu++) { + int siblings = 0; + int i; + if (!cpu_isset(cpu, cpu_callout_map)) + continue; + if (smp_num_siblings > 1) { for (i = 0; i < NR_CPUS; i++) { - if (i == cpu || !cpu_isset(i, cpu_callout_map)) + if (!cpu_isset(i, cpu_callout_map)) continue; if (phys_proc_id[cpu] == phys_proc_id[i]) { - cpu_sibling_map[cpu] = i; - break; + siblings++; + cpu_set(i, cpu_sibling_map[cpu]); } } - if (cpu_sibling_map[cpu] == (char)NO_PROC_ID) { - smp_num_siblings = 1; - printk(KERN_WARNING "WARNING: No sibling found for CPU %d.\n", cpu); - } + } else { + siblings++; + cpu_set(cpu, cpu_sibling_map[cpu]); } + + if (siblings != smp_num_siblings) + printk(KERN_WARNING + "WARNING: %d siblings found for CPU%d, should be %d\n", + siblings, cpu, smp_num_siblings); } Dprintk("Boot done.\n"); diff -Nru a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c --- a/arch/x86_64/kernel/time.c Tue May 18 23:38:08 2004 +++ b/arch/x86_64/kernel/time.c Tue May 18 23:38:08 2004 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -54,7 +55,7 @@ unsigned int cpu_khz; /* TSC clocks / usec, not used here */ unsigned long hpet_period; /* fsecs / HPET clock */ unsigned long hpet_tick; /* HPET clocks / interrupt */ -unsigned long vxtime_hz = 1193182; +unsigned long vxtime_hz = PIT_TICK_RATE; int report_lost_ticks; /* command line option */ unsigned long long monotonic_base; @@ -600,8 +601,8 @@ outb((inb(0x61) & ~0x02) | 0x01, 0x61); outb(0xb0, 0x43); - outb((1193182 / (1000 / 50)) & 0xff, 0x42); - outb((1193182 / (1000 / 50)) >> 8, 0x42); + outb((PIT_TICK_RATE / (1000 / 50)) & 0xff, 0x42); + outb((PIT_TICK_RATE / (1000 / 50)) >> 8, 0x42); rdtscll(start); sync_core(); while ((inb(0x61) & 0x20) == 0); diff -Nru a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c --- a/arch/x86_64/kernel/traps.c Tue May 18 23:38:05 2004 +++ b/arch/x86_64/kernel/traps.c Tue May 18 23:38:05 2004 @@ -256,8 +256,8 @@ printk("CPU %d ", cpu); __show_regs(regs); - printk("Process %s (pid: %d, stackpage=%08lx)\n", - cur->comm, cur->pid, 4096+(unsigned long)cur); + printk("Process %s (pid: %d, threadinfo %p, task %p)\n", + cur->comm, cur->pid, cur->thread_info, cur); /* * When in-kernel, we also print out the stack and code at the diff -Nru a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c --- a/arch/x86_64/kernel/x8664_ksyms.c Tue May 18 23:38:05 2004 +++ b/arch/x86_64/kernel/x8664_ksyms.c Tue May 18 23:38:05 2004 @@ -151,6 +151,7 @@ #undef strcmp #undef strcpy #undef strcat +#undef memcmp extern void * memset(void *,int,__kernel_size_t); extern size_t strlen(const char *); @@ -161,6 +162,7 @@ extern void * memcpy(void *,const void *,__kernel_size_t); extern void * __memcpy(void *,const void *,__kernel_size_t); extern char * strcat(char *, const char *); +extern int memcmp(const void * cs,const void * ct,size_t count); EXPORT_SYMBOL_NOVERS(memset); EXPORT_SYMBOL_NOVERS(strlen); @@ -178,6 +180,7 @@ EXPORT_SYMBOL_NOVERS(memscan); EXPORT_SYMBOL_NOVERS(memcpy); EXPORT_SYMBOL_NOVERS(__memcpy); +EXPORT_SYMBOL_NOVERS(memcmp); /* syscall export needed for misdesigned sound drivers. */ EXPORT_SYMBOL(sys_read); diff -Nru a/arch/x86_64/mm/ioremap.c b/arch/x86_64/mm/ioremap.c --- a/arch/x86_64/mm/ioremap.c Tue May 18 23:38:09 2004 +++ b/arch/x86_64/mm/ioremap.c Tue May 18 23:38:09 2004 @@ -132,13 +132,13 @@ * Don't allow anybody to remap normal RAM that we're using.. */ if (phys_addr < virt_to_phys(high_memory)) { +#ifndef CONFIG_DISCONTIGMEM char *t_addr, *t_end; + struct page *page; t_addr = __va(phys_addr); t_end = t_addr + (size - 1); -#ifndef CONFIG_DISCONTIGMEM - struct page *page; for(page = virt_to_page(t_addr); page <= virt_to_page(t_end); page++) if(!PageReserved(page)) return NULL; diff -Nru a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c --- a/arch/x86_64/mm/pageattr.c Tue May 18 23:38:07 2004 +++ b/arch/x86_64/mm/pageattr.c Tue May 18 23:38:07 2004 @@ -32,7 +32,8 @@ return pte; } -static struct page *split_large_page(unsigned long address, pgprot_t prot) +static struct page *split_large_page(unsigned long address, pgprot_t prot, + pgprot_t ref_prot) { int i; unsigned long addr; @@ -45,7 +46,7 @@ pbase = (pte_t *)page_address(base); for (i = 0; i < PTRS_PER_PTE; i++, addr += PAGE_SIZE) { pbase[i] = pfn_pte(addr >> PAGE_SHIFT, - addr == address ? prot : PAGE_KERNEL); + addr == address ? prot : ref_prot); } return base; } @@ -95,7 +96,8 @@ * No more special protections in this 2/4MB area - revert to a * large page again. */ -static void revert_page(struct page *kpte_page, unsigned long address) +static void revert_page(struct page *kpte_page, unsigned long address, + pgprot_t ref_prot) { pgd_t *pgd; pmd_t *pmd; @@ -104,12 +106,14 @@ pgd = pgd_offset_k(address); pmd = pmd_offset(pgd, address); BUG_ON(pmd_val(*pmd) & _PAGE_PSE); - large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, PAGE_KERNEL_LARGE); + pgprot_val(ref_prot) |= _PAGE_PSE; + large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, ref_prot); set_pte((pte_t *)pmd, large_pte); } static int -__change_page_attr(unsigned long address, struct page *page, pgprot_t prot) +__change_page_attr(unsigned long address, struct page *page, pgprot_t prot, + pgprot_t ref_prot) { pte_t *kpte; struct page *kpte_page; @@ -119,29 +123,29 @@ if (!kpte) return 0; kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK); kpte_flags = pte_val(*kpte); - if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) { + if (pgprot_val(prot) != pgprot_val(ref_prot)) { if ((kpte_flags & _PAGE_PSE) == 0) { pte_t old = *kpte; - pte_t standard = mk_pte(page, PAGE_KERNEL); + pte_t standard = mk_pte(page, ref_prot); set_pte(kpte, mk_pte(page, prot)); if (pte_same(old,standard)) - atomic_inc(&kpte_page->count); + get_page(kpte_page); } else { - struct page *split = split_large_page(address, prot); + struct page *split = split_large_page(address, prot, ref_prot); if (!split) return -ENOMEM; - atomic_inc(&kpte_page->count); - set_pte(kpte,mk_pte(split, PAGE_KERNEL)); + get_page(kpte_page); + set_pte(kpte,mk_pte(split, ref_prot)); } } else if ((kpte_flags & _PAGE_PSE) == 0) { - set_pte(kpte, mk_pte(page, PAGE_KERNEL)); - atomic_dec(&kpte_page->count); + set_pte(kpte, mk_pte(page, ref_prot)); + __put_page(kpte_page); } - if (atomic_read(&kpte_page->count) == 1) { + if (page_count(kpte_page) == 1) { save_page(address, kpte_page); - revert_page(kpte_page, address); + revert_page(kpte_page, address, ref_prot); } return 0; } @@ -167,13 +171,16 @@ down_write(&init_mm.mmap_sem); for (i = 0; i < numpages; !err && i++, page++) { unsigned long address = (unsigned long)page_address(page); - err = __change_page_attr(address, page, prot); + err = __change_page_attr(address, page, prot, PAGE_KERNEL); if (err) break; - /* Handle kernel mapping too which aliases part of the lowmem */ + /* Handle kernel mapping too which aliases part of the + * lowmem */ if (page_to_phys(page) < KERNEL_TEXT_SIZE) { - unsigned long addr2 = __START_KERNEL_map + page_to_phys(page); - err = __change_page_attr(addr2, page, prot); + unsigned long addr2; + addr2 = __START_KERNEL_map + page_to_phys(page); + err = __change_page_attr(addr2, page, prot, + PAGE_KERNEL_EXECUTABLE); } } up_write(&init_mm.mmap_sem); diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c --- a/drivers/acpi/pci_link.c Tue May 18 23:38:05 2004 +++ b/drivers/acpi/pci_link.c Tue May 18 23:38:05 2004 @@ -479,7 +479,7 @@ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ9 PCI, often acpi */ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ10 PCI */ PIRQ_PENALTY_PCI_AVAILABLE, /* IRQ11 PCI */ - PIRQ_PENALTY_ISA_TYPICAL, /* IRQ12 mouse */ + PIRQ_PENALTY_ISA_USED, /* IRQ12 mouse */ PIRQ_PENALTY_ISA_USED, /* IRQ13 fpe, sometimes */ PIRQ_PENALTY_ISA_USED, /* IRQ14 ide0 */ PIRQ_PENALTY_ISA_USED, /* IRQ15 ide1 */ @@ -546,17 +546,23 @@ if (link->irq.active == link->irq.possible[i]) break; } + /* + * forget active IRQ that is not in possible list + */ + if (i == link->irq.possible_count) { + if (acpi_strict) + printk(KERN_WARNING PREFIX "_CRS %d not found" + " in _PRS\n", link->irq.active); + link->irq.active = 0; + } /* * if active found, use it; else pick entry from end of possible list. */ - if (i != link->irq.possible_count) { + if (link->irq.active) { irq = link->irq.active; } else { irq = link->irq.possible[link->irq.possible_count - 1]; - if (acpi_strict) - printk(KERN_WARNING PREFIX "_CRS %d not found" - " in _PRS\n", link->irq.active); } if (acpi_irq_balance || !link->irq.active) { diff -Nru a/drivers/base/bus.c b/drivers/base/bus.c --- a/drivers/base/bus.c Tue May 18 23:38:06 2004 +++ b/drivers/base/bus.c Tue May 18 23:38:06 2004 @@ -451,7 +451,11 @@ if (bus) { pr_debug("bus %s: add driver %s\n",bus->name,drv->name); - kobject_set_name(&drv->kobj,drv->name); + error = kobject_set_name(&drv->kobj,drv->name); + if (error) { + put_bus(bus); + return error; + } drv->kobj.kset = &bus->drivers; if ((error = kobject_register(&drv->kobj))) { put_bus(bus); @@ -555,21 +559,39 @@ */ int bus_register(struct bus_type * bus) { - kobject_set_name(&bus->subsys.kset.kobj,bus->name); + int retval; + + retval = kobject_set_name(&bus->subsys.kset.kobj,bus->name); + if (retval) + goto out; + subsys_set_kset(bus,bus_subsys); - subsystem_register(&bus->subsys); + retval = subsystem_register(&bus->subsys); + if (retval) + goto out; kobject_set_name(&bus->devices.kobj, "devices"); bus->devices.subsys = &bus->subsys; - kset_register(&bus->devices); + retval = kset_register(&bus->devices); + if (retval) + goto bus_devices_fail; kobject_set_name(&bus->drivers.kobj, "drivers"); bus->drivers.subsys = &bus->subsys; bus->drivers.ktype = &ktype_driver; - kset_register(&bus->drivers); + retval = kset_register(&bus->drivers); + if (retval) + goto bus_drivers_fail; pr_debug("bus type '%s' registered\n",bus->name); return 0; + +bus_drivers_fail: + kset_unregister(&bus->devices); +bus_devices_fail: + subsystem_unregister(&bus->subsys); +out: + return retval; } diff -Nru a/drivers/base/class.c b/drivers/base/class.c --- a/drivers/base/class.c Tue May 18 23:38:09 2004 +++ b/drivers/base/class.c Tue May 18 23:38:09 2004 @@ -361,6 +361,8 @@ int class_device_rename(struct class_device *class_dev, char *new_name) { + int error = 0; + class_dev = class_device_get(class_dev); if (!class_dev) return -EINVAL; @@ -370,11 +372,11 @@ strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN); - kobject_rename(&class_dev->kobj, new_name); + error = kobject_rename(&class_dev->kobj, new_name); class_device_put(class_dev); - return 0; + return error; } struct class_device * class_device_get(struct class_device *class_dev) diff -Nru a/drivers/base/map.c b/drivers/base/map.c --- a/drivers/base/map.c Tue May 18 23:38:08 2004 +++ b/drivers/base/map.c Tue May 18 23:38:08 2004 @@ -138,6 +138,13 @@ struct kobj_map *p = kmalloc(sizeof(struct kobj_map), GFP_KERNEL); struct probe *base = kmalloc(sizeof(struct probe), GFP_KERNEL); int i; + + if ((p == NULL) || (base == NULL)) { + kfree(p); + kfree(base); + return NULL; + } + memset(base, 0, sizeof(struct probe)); base->dev = 1; base->range = ~0; diff -Nru a/drivers/base/platform.c b/drivers/base/platform.c --- a/drivers/base/platform.c Tue May 18 23:38:05 2004 +++ b/drivers/base/platform.c Tue May 18 23:38:05 2004 @@ -57,8 +57,9 @@ * type of device, like "pci" or "floppy", and is the * enumerated instance of the device, like '0' or '42'. * Driver IDs are simply "". - * So, extract the from the device, and compare it against - * the name of the driver. Return whether they match or not. + * So, extract the from the platform_device structure, + * and compare it against the name of the driver. Return whether + * they match or not. */ static int platform_match(struct device * dev, struct device_driver * drv) diff -Nru a/drivers/base/sys.c b/drivers/base/sys.c --- a/drivers/base/sys.c Tue May 18 23:38:05 2004 +++ b/drivers/base/sys.c Tue May 18 23:38:05 2004 @@ -180,8 +180,11 @@ /* But make sure we point to the right type for sysfs translation */ sysdev->kobj.ktype = &ktype_sysdev; - kobject_set_name(&sysdev->kobj,"%s%d", + error = kobject_set_name(&sysdev->kobj,"%s%d", kobject_name(&cls->kset.kobj),sysdev->id); + if (error) + return error; + pr_debug("Registering sys device '%s'\n",kobject_name(&sysdev->kobj)); /* Register the object */ diff -Nru a/drivers/block/as-iosched.c b/drivers/block/as-iosched.c --- a/drivers/block/as-iosched.c Tue May 18 23:38:05 2004 +++ b/drivers/block/as-iosched.c Tue May 18 23:38:05 2004 @@ -43,7 +43,7 @@ * read_batch_expire describes how long we will allow a stream of reads to * persist before looking to see whether it is time to switch over to writes. */ -#define default_read_batch_expire (HZ / 4) +#define default_read_batch_expire (HZ / 2) /* * write_batch_expire describes how long we want a stream of writes to run for. @@ -51,7 +51,7 @@ * See, the problem is: we can send a lot of writes to disk cache / TCQ in * a short amount of time... */ -#define default_write_batch_expire (HZ / 16) +#define default_write_batch_expire (HZ / 8) /* * max time we may wait to anticipate a read (default around 6ms) @@ -1216,13 +1216,12 @@ } as_remove_queued_request(ad->q, rq); + WARN_ON(arq->state != AS_RQ_QUEUED); + list_add(&rq->queuelist, insert); + arq->state = AS_RQ_DISPATCHED; if (arq->io_context && arq->io_context->aic) atomic_inc(&arq->io_context->aic->nr_dispatched); - - WARN_ON(arq->state != AS_RQ_QUEUED); - arq->state = AS_RQ_DISPATCHED; - ad->nr_dispatched++; } @@ -1492,6 +1491,21 @@ as_antic_stop(ad); } +/* + * Account a request that is inserted directly onto the dispatch queue. + * arq->io_context->aic->nr_dispatched should not need to be incremented + * because only new requests should come through here: requeues go through + * our explicit requeue handler. + */ +static void as_account_queued_request(struct as_data *ad, struct request *rq) +{ + if (blk_fs_request(rq)) { + struct as_rq *arq = RQ_DATA(rq); + arq->state = AS_RQ_DISPATCHED; + ad->nr_dispatched++; + } +} + static void as_insert_request(request_queue_t *q, struct request *rq, int where) { @@ -1522,10 +1536,12 @@ as_move_to_dispatch(ad, ad->next_arq[REQ_ASYNC]); list_add_tail(&rq->queuelist, ad->dispatch); + as_account_queued_request(ad, rq); as_antic_stop(ad); break; case ELEVATOR_INSERT_FRONT: list_add(&rq->queuelist, ad->dispatch); + as_account_queued_request(ad, rq); as_antic_stop(ad); break; case ELEVATOR_INSERT_SORT: diff -Nru a/drivers/block/carmel.c b/drivers/block/carmel.c --- a/drivers/block/carmel.c Tue May 18 23:38:08 2004 +++ b/drivers/block/carmel.c Tue May 18 23:38:08 2004 @@ -438,17 +438,6 @@ return -EOPNOTSUPP; } -static inline unsigned long msecs_to_jiffies(unsigned long msecs) -{ - return ((HZ * msecs + 999) / 1000); -} - -static void msleep(unsigned long msecs) -{ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(msecs_to_jiffies(msecs)); -} - static const u32 msg_sizes[] = { 32, 64, 128, CARM_MSG_SIZE }; static inline int carm_lookup_bucket(u32 msg_size) diff -Nru a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c --- a/drivers/block/cpqarray.c Tue May 18 23:38:05 2004 +++ b/drivers/block/cpqarray.c Tue May 18 23:38:05 2004 @@ -1193,7 +1193,7 @@ if (error) goto out_passthru; error = -EFAULT; - if (copy_to_user(io, &my_io, sizeof(*my_io))) + if (copy_to_user(io, my_io, sizeof(*my_io))) goto out_passthru; error = 0; out_passthru: diff -Nru a/drivers/block/elevator.c b/drivers/block/elevator.c --- a/drivers/block/elevator.c Tue May 18 23:38:08 2004 +++ b/drivers/block/elevator.c Tue May 18 23:38:08 2004 @@ -169,6 +169,13 @@ void __elv_add_request(request_queue_t *q, struct request *rq, int where, int plug) { + /* + * barriers implicitly indicate back insertion + */ + if (rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER) && + where == ELEVATOR_INSERT_SORT) + where = ELEVATOR_INSERT_BACK; + if (plug) blk_plug_device(q); diff -Nru a/drivers/block/floppy.c b/drivers/block/floppy.c --- a/drivers/block/floppy.c Tue May 18 23:38:05 2004 +++ b/drivers/block/floppy.c Tue May 18 23:38:05 2004 @@ -604,28 +604,27 @@ } #endif -#ifdef DEBUGT -static long unsigned debugtimer; -#endif - /* * Debugging * ========= */ +#ifdef DEBUGT +static long unsigned debugtimer; + static inline void set_debugt(void) { -#ifdef DEBUGT debugtimer = jiffies; -#endif } static inline void debugt(const char *message) { -#ifdef DEBUGT if (DP->flags & DEBUGT) printk("%s dtime=%lu\n", message, jiffies - debugtimer); -#endif } +#else +static inline void set_debugt(void) { } +static inline void debugt(const char *message) { } +#endif /* DEBUGT */ typedef void (*timeout_fn) (unsigned long); static struct timer_list fd_timeout = TIMER_INITIALIZER(floppy_shutdown, 0, 0); @@ -1546,9 +1545,8 @@ for (i = 0; i < raw_cmd->cmd_count; i++) r |= output_byte(raw_cmd->cmd[i]); -#ifdef DEBUGT debugt("rw_command: "); -#endif + if (r) { cont->error(); reset_fdc(); @@ -1570,9 +1568,7 @@ */ static void seek_interrupt(void) { -#ifdef DEBUGT debugt("seek interrupt:"); -#endif if (inr != 2 || (ST0 & 0xF8) != 0x20) { DPRINT("seek failed\n"); DRS->track = NEED_2_RECAL; @@ -1676,24 +1672,18 @@ output_byte(FD_SEEK); output_byte(UNIT(current_drive)); LAST_OUT(track); -#ifdef DEBUGT debugt("seek command:"); -#endif } static void recal_interrupt(void) { -#ifdef DEBUGT debugt("recal interrupt:"); -#endif if (inr != 2) FDCS->reset = 1; else if (ST0 & ST0_ECE) { switch (DRS->track) { case NEED_1_RECAL: -#ifdef DEBUGT debugt("recal interrupt need 1 recal:"); -#endif /* after a second recalibrate, we still haven't * reached track 0. Probably no drive. Raise an * error, as failing immediately might upset @@ -1702,9 +1692,7 @@ cont->redo(); return; case NEED_2_RECAL: -#ifdef DEBUGT debugt("recal interrupt need 2 recal:"); -#endif /* If we already did a recalibrate, * and we are not at track 0, this * means we have moved. (The only way @@ -1722,9 +1710,7 @@ DRS->select_date = jiffies; /* fall through */ default: -#ifdef DEBUGT debugt("recal interrupt default:"); -#endif /* Recalibrate moves the head by at * most 80 steps. If after one * recalibrate we don't have reached @@ -1813,9 +1799,7 @@ static void recalibrate_floppy(void) { -#ifdef DEBUGT debugt("recalibrate floppy:"); -#endif do_floppy = recal_interrupt; output_byte(FD_RECALIBRATE); LAST_OUT(UNIT(current_drive)); @@ -1826,9 +1810,7 @@ */ static void reset_interrupt(void) { -#ifdef DEBUGT debugt("reset interrupt:"); -#endif result(); /* get the status ready for set_fdc */ if (FDCS->reset) { printk("reset set in interrupt, calling %p\n", cont->error); @@ -2266,9 +2248,7 @@ buffer_track = -1; setup_format_params(format_req.track << STRETCH(_floppy)); floppy_start(); -#ifdef DEBUGT debugt("queue format request"); -#endif } static struct cont_t format_cont = { @@ -2992,9 +2972,7 @@ if (TESTF(FD_NEED_TWADDLE)) twaddle(); schedule_bh(floppy_start); -#ifdef DEBUGT debugt("queue fd request"); -#endif return; } #undef REPEAT @@ -4247,35 +4225,40 @@ int __init floppy_init(void) { int i, unit, drive; - int err; + int err, dr; raw_cmd = NULL; + i = 0; - for (i = 0; i < N_DRIVE; i++) { - disks[i] = alloc_disk(1); - if (!disks[i]) - goto Enomem; - - disks[i]->major = FLOPPY_MAJOR; - disks[i]->first_minor = TOMINOR(i); - disks[i]->fops = &floppy_fops; - sprintf(disks[i]->disk_name, "fd%d", i); - - init_timer(&motor_off_timer[i]); - motor_off_timer[i].data = i; - motor_off_timer[i].function = motor_off_callback; + for (dr = 0; dr < N_DRIVE; dr++) { + disks[dr] = alloc_disk(1); + if (!disks[dr]) { + err = -ENOMEM; + goto out_put_disk; + } + + disks[dr]->major = FLOPPY_MAJOR; + disks[dr]->first_minor = TOMINOR(i); + disks[dr]->fops = &floppy_fops; + sprintf(disks[dr]->disk_name, "fd%d", dr); + + init_timer(&motor_off_timer[dr]); + motor_off_timer[dr].data = dr; + motor_off_timer[dr].function = motor_off_callback; } devfs_mk_dir("floppy"); - if ((err = register_blkdev(FLOPPY_MAJOR, "fd"))) - goto out; + + err = register_blkdev(FLOPPY_MAJOR, "fd"); + if (err) + goto out_devfs_remove; floppy_queue = blk_init_queue(do_fd_request, &floppy_lock); - blk_queue_max_sectors(floppy_queue, 64); if (!floppy_queue) { err = -ENOMEM; - goto fail_queue; + goto out_unreg_blkdev; } + blk_queue_max_sectors(floppy_queue, 64); blk_register_region(MKDEV(FLOPPY_MAJOR, 0), 256, THIS_MODULE, floppy_find, NULL, NULL); @@ -4306,17 +4289,20 @@ use_virtual_dma = can_use_virtual_dma & 1; fdc_state[0].address = FDC1; if (fdc_state[0].address == -1) { + del_timer(&fd_timeout); err = -ENODEV; - goto out1; + goto out_unreg_region; } #if N_FDC > 1 fdc_state[1].address = FDC2; #endif fdc = 0; /* reset fdc in case of unexpected interrupt */ - if (floppy_grab_irq_and_dma()) { + err = floppy_grab_irq_and_dma(); + if (err) { + del_timer(&fd_timeout); err = -EBUSY; - goto out1; + goto out_unreg_region; } /* initialise drive state */ @@ -4373,11 +4359,8 @@ initialising = 0; if (have_no_fdc) { DPRINT("no floppy controllers found\n"); - flush_scheduled_work(); - if (usage_count) - floppy_release_irq_and_dma(); err = have_no_fdc; - goto out2; + goto out_flush_work; } for (drive = 0; drive < N_DRIVE; drive++) { @@ -4392,26 +4375,37 @@ add_disk(disks[drive]); } - platform_device_register(&floppy_device); + err = platform_device_register(&floppy_device); + if (err) + goto out_del_disk; + return 0; -out1: - del_timer(&fd_timeout); -out2: +out_del_disk: + for (drive = 0; drive < N_DRIVE; drive++) { + if (!(allowed_drive_mask & (1 << drive))) + continue; + if (fdc_state[FDC(drive)].version == FDC_NONE) + continue; + del_gendisk(disks[drive]); + } +out_flush_work: + flush_scheduled_work(); + if (usage_count) + floppy_release_irq_and_dma(); +out_unreg_region: blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); blk_cleanup_queue(floppy_queue); -fail_queue: +out_unreg_blkdev: unregister_blkdev(FLOPPY_MAJOR, "fd"); -out: - for (i = 0; i < N_DRIVE; i++) - put_disk(disks[i]); +out_devfs_remove: devfs_remove("floppy"); +out_put_disk: + while (dr--) { + del_timer(&motor_off_timer[dr]); + put_disk(disks[dr]); + } return err; - -Enomem: - while (i--) - put_disk(disks[i]); - return -ENOMEM; } static spinlock_t floppy_usage_lock = SPIN_LOCK_UNLOCKED; diff -Nru a/drivers/block/genhd.c b/drivers/block/genhd.c --- a/drivers/block/genhd.c Tue May 18 23:38:07 2004 +++ b/drivers/block/genhd.c Tue May 18 23:38:07 2004 @@ -357,16 +357,6 @@ return sprintf(page, "%llu\n", (unsigned long long)get_capacity(disk)); } -static inline unsigned jiffies_to_msec(unsigned jif) -{ -#if 1000 % HZ == 0 - return jif * (1000 / HZ); -#elif HZ % 1000 == 0 - return jif / (HZ / 1000); -#else - return (jif / HZ) * 1000 + (jif % HZ) * 1000 / HZ; -#endif -} static ssize_t disk_stats_read(struct gendisk * disk, char *page) { disk_round_stats(disk); @@ -377,14 +367,14 @@ "\n", disk_stat_read(disk, reads), disk_stat_read(disk, read_merges), (unsigned long long)disk_stat_read(disk, read_sectors), - jiffies_to_msec(disk_stat_read(disk, read_ticks)), + jiffies_to_msecs(disk_stat_read(disk, read_ticks)), disk_stat_read(disk, writes), disk_stat_read(disk, write_merges), (unsigned long long)disk_stat_read(disk, write_sectors), - jiffies_to_msec(disk_stat_read(disk, write_ticks)), + jiffies_to_msecs(disk_stat_read(disk, write_ticks)), disk->in_flight, - jiffies_to_msec(disk_stat_read(disk, io_ticks)), - jiffies_to_msec(disk_stat_read(disk, time_in_queue))); + jiffies_to_msecs(disk_stat_read(disk, io_ticks)), + jiffies_to_msecs(disk_stat_read(disk, time_in_queue))); } static struct disk_attribute disk_attr_dev = { .attr = {.name = "dev", .mode = S_IRUGO }, @@ -498,13 +488,13 @@ gp->major, n + gp->first_minor, disk_name(gp, n, buf), disk_stat_read(gp, reads), disk_stat_read(gp, read_merges), (unsigned long long)disk_stat_read(gp, read_sectors), - jiffies_to_msec(disk_stat_read(gp, read_ticks)), + jiffies_to_msecs(disk_stat_read(gp, read_ticks)), disk_stat_read(gp, writes), disk_stat_read(gp, write_merges), (unsigned long long)disk_stat_read(gp, write_sectors), - jiffies_to_msec(disk_stat_read(gp, write_ticks)), + jiffies_to_msecs(disk_stat_read(gp, write_ticks)), gp->in_flight, - jiffies_to_msec(disk_stat_read(gp, io_ticks)), - jiffies_to_msec(disk_stat_read(gp, time_in_queue))); + jiffies_to_msecs(disk_stat_read(gp, io_ticks)), + jiffies_to_msecs(disk_stat_read(gp, time_in_queue))); /* now show all non-0 size partitions of it */ for (n = 0; n < gp->minors - 1; n++) { diff -Nru a/drivers/block/ida_cmd.h b/drivers/block/ida_cmd.h --- a/drivers/block/ida_cmd.h Tue May 18 23:38:06 2004 +++ b/drivers/block/ida_cmd.h Tue May 18 23:38:06 2004 @@ -67,7 +67,7 @@ __u8 reserved; } rhdr_t; -#define SG_MAX 31 +#define SG_MAX 32 typedef struct { rhdr_t hdr; sg_t sg[SG_MAX]; diff -Nru a/drivers/block/ioctl.c b/drivers/block/ioctl.c --- a/drivers/block/ioctl.c Tue May 18 23:38:05 2004 +++ b/drivers/block/ioctl.c Tue May 18 23:38:05 2004 @@ -203,7 +203,8 @@ case BLKROSET: if (disk->fops->ioctl) { ret = disk->fops->ioctl(inode, file, cmd, arg); - if (ret != -EINVAL) + /* -EINVAL to handle old uncorrected drivers */ + if (ret != -EINVAL && ret != -ENOTTY) return ret; } if (!capable(CAP_SYS_ADMIN)) diff -Nru a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c --- a/drivers/block/ll_rw_blk.c Tue May 18 23:38:05 2004 +++ b/drivers/block/ll_rw_blk.c Tue May 18 23:38:05 2004 @@ -42,6 +42,16 @@ */ static kmem_cache_t *request_cachep; +/* + * For queue allocation + */ +static kmem_cache_t *requestq_cachep; + +/* + * For io context allocations + */ +static kmem_cache_t *iocontext_cachep; + static wait_queue_head_t congestion_wqh[2] = { __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]), __WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1]) @@ -70,14 +80,7 @@ */ static inline int queue_congestion_on_threshold(struct request_queue *q) { - int ret; - - ret = q->nr_requests - (q->nr_requests / 8) + 1; - - if (ret > q->nr_requests) - ret = q->nr_requests; - - return ret; + return q->nr_congestion_on; } /* @@ -85,14 +88,22 @@ */ static inline int queue_congestion_off_threshold(struct request_queue *q) { - int ret; + return q->nr_congestion_off; +} - ret = q->nr_requests - (q->nr_requests / 8) - 1; +static void blk_queue_congestion_threshold(struct request_queue *q) +{ + int nr; - if (ret < 1) - ret = 1; + nr = q->nr_requests - (q->nr_requests / 8) + 1; + if (nr > q->nr_requests) + nr = q->nr_requests; + q->nr_congestion_on = nr; - return ret; + nr = q->nr_requests - (q->nr_requests / 8) - 1; + if (nr < 1) + nr = 1; + q->nr_congestion_off = nr; } /* @@ -229,6 +240,7 @@ blk_queue_max_sectors(q, MAX_SECTORS); blk_queue_hardsect_size(q, 512); blk_queue_dma_alignment(q, 511); + blk_queue_congestion_threshold(q); q->unplug_thresh = 4; /* hmm */ q->unplug_delay = (3 * HZ) / 1000; /* 3 milliseconds */ @@ -265,8 +277,6 @@ void blk_queue_bounce_limit(request_queue_t *q, u64 dma_addr) { unsigned long bounce_pfn = dma_addr >> PAGE_SHIFT; - unsigned long mb = dma_addr >> 20; - static request_queue_t *last_q; /* * set appropriate bounce gfp mask -- unfortunately we don't have a @@ -280,19 +290,7 @@ } else q->bounce_gfp = GFP_NOIO; - /* - * keep this for debugging for now... - */ - if (dma_addr != BLK_BOUNCE_HIGH && q != last_q) { - printk("blk: queue %p, ", q); - if (dma_addr == BLK_BOUNCE_ANY) - printk("no I/O memory limit\n"); - else - printk("I/O limit %luMb (mask 0x%Lx)\n", mb, (long long) dma_addr); - } - q->bounce_pfn = bounce_pfn; - last_q = q; } EXPORT_SYMBOL(blk_queue_bounce_limit); @@ -1142,7 +1140,7 @@ /** * generic_unplug_device - fire a request queue - * @data: The &request_queue_t in question + * @q: The &request_queue_t in question * * Description: * Linux uses plugging to build bigger requests queues before letting @@ -1159,7 +1157,8 @@ } EXPORT_SYMBOL(generic_unplug_device); -static void blk_backing_dev_unplug(struct backing_dev_info *bdi) +static void blk_backing_dev_unplug(struct backing_dev_info *bdi, + struct page *page) { request_queue_t *q = bdi->unplug_io_data; @@ -1206,7 +1205,7 @@ clear_bit(QUEUE_FLAG_REENTER, &q->queue_flags); } else { blk_plug_device(q); - schedule_work(&q->unplug_work); + kblockd_schedule_work(&q->unplug_work); } } @@ -1283,7 +1282,7 @@ if (blk_queue_tagged(q)) blk_queue_free_tags(q); - kfree(q); + kmem_cache_free(requestq_cachep, q); } EXPORT_SYMBOL(blk_cleanup_queue); @@ -1347,7 +1346,7 @@ request_queue_t *blk_alloc_queue(int gfp_mask) { - request_queue_t *q = kmalloc(sizeof(*q), gfp_mask); + request_queue_t *q = kmem_cache_alloc(requestq_cachep, gfp_mask); if (!q) return NULL; @@ -1436,7 +1435,7 @@ out_elv: blk_cleanup_queue(q); out_init: - kfree(q); + kmem_cache_free(requestq_cachep, q); return NULL; } @@ -2444,7 +2443,7 @@ if (unlikely(block_dump)) { char b[BDEVNAME_SIZE]; - printk("%s(%d): %s block %Lu on %s\n", + printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n", current->comm, current->pid, (rw & WRITE) ? "WRITE" : "READ", (unsigned long long)bio->bi_sector, @@ -2828,6 +2827,16 @@ if (!request_cachep) panic("Can't create request pool slab cache\n"); + requestq_cachep = kmem_cache_create("blkdev_queue", + sizeof(request_queue_t), 0, 0, NULL, NULL); + if (!requestq_cachep) + panic("Can't create request queue slab cache\n"); + + iocontext_cachep = kmem_cache_create("blkdev_ioc", + sizeof(struct io_context), 0, 0, NULL, NULL); + if (!iocontext_cachep) + panic("Can't create io context slab cache\n"); + blk_max_low_pfn = max_low_pfn; blk_max_pfn = max_pfn; return 0; @@ -2846,7 +2855,7 @@ if (atomic_dec_and_test(&ioc->refcount)) { if (ioc->aic && ioc->aic->dtor) ioc->aic->dtor(ioc->aic); - kfree(ioc); + kmem_cache_free(iocontext_cachep, ioc); } } @@ -2885,7 +2894,7 @@ local_irq_save(flags); ret = tsk->io_context; if (ret == NULL) { - ret = kmalloc(sizeof(*ret), GFP_ATOMIC); + ret = kmem_cache_alloc(iocontext_cachep, GFP_ATOMIC); if (ret) { atomic_set(&ret->refcount, 1); ret->pid = tsk->pid; @@ -2960,6 +2969,7 @@ int ret = queue_var_store(&q->nr_requests, page, count); if (q->nr_requests < BLKDEV_MIN_RQ) q->nr_requests = BLKDEV_MIN_RQ; + blk_queue_congestion_threshold(q); if (rl->count[READ] >= queue_congestion_on_threshold(q)) set_queue_congested(q, READ); @@ -2987,14 +2997,41 @@ return ret; } +static ssize_t queue_ra_show(struct request_queue *q, char *page) +{ + int ra_kb = q->backing_dev_info.ra_pages << (PAGE_CACHE_SHIFT - 10); + + return queue_var_show(ra_kb, (page)); +} + +static ssize_t +queue_ra_store(struct request_queue *q, const char *page, size_t count) +{ + unsigned long ra_kb; + ssize_t ret = queue_var_store(&ra_kb, page, count); + + if (ra_kb > (q->max_sectors >> 1)) + ra_kb = (q->max_sectors >> 1); + + q->backing_dev_info.ra_pages = ra_kb >> (PAGE_CACHE_SHIFT - 10); + return ret; +} + static struct queue_sysfs_entry queue_requests_entry = { .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR }, .show = queue_requests_show, .store = queue_requests_store, }; +static struct queue_sysfs_entry queue_ra_entry = { + .attr = {.name = "read_ahead_kb", .mode = S_IRUGO | S_IWUSR }, + .show = queue_ra_show, + .store = queue_ra_store, +}; + static struct attribute *default_attrs[] = { &queue_requests_entry.attr, + &queue_ra_entry.attr, NULL, }; diff -Nru a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c --- a/drivers/block/paride/pg.c Tue May 18 23:38:08 2004 +++ b/drivers/block/paride/pg.c Tue May 18 23:38:08 2004 @@ -161,6 +161,7 @@ #include #include #include +#include #include @@ -240,6 +241,8 @@ static char pg_scratch[512]; /* scratch block buffer */ +static struct class_simple *pg_class; + /* kernel glue structures */ static struct file_operations pg_fops = { @@ -658,15 +661,19 @@ static int __init pg_init(void) { - int unit; + int unit, err = 0; - if (disable) - return -1; + if (disable){ + err = -1; + goto out; + } pg_init_units(); - if (pg_detect()) - return -1; + if (pg_detect()) { + err = -1; + goto out; + } if (register_chrdev(major, name, &pg_fops)) { printk("pg_init: unable to get major number %d\n", major); @@ -675,18 +682,37 @@ if (dev->present) pi_release(dev->pi); } - return -1; + err = -1; + goto out; + } + pg_class = class_simple_create(THIS_MODULE, "pg"); + if (IS_ERR(pg_class)) { + err = PTR_ERR(pg_class); + goto out_chrdev; } devfs_mk_dir("pg"); for (unit = 0; unit < PG_UNITS; unit++) { struct pg *dev = &devices[unit]; if (dev->present) { - devfs_mk_cdev(MKDEV(major, unit), + class_simple_device_add(pg_class, MKDEV(major, unit), + NULL, "pg%u", unit); + err = devfs_mk_cdev(MKDEV(major, unit), S_IFCHR | S_IRUSR | S_IWUSR, "pg/%u", unit); + if (err) + goto out_class; } } - return 0; + err = 0; + goto out; + +out_class: + class_simple_device_remove(MKDEV(major, unit)); + class_simple_destroy(pg_class); +out_chrdev: + unregister_chrdev(major, "pg"); +out: + return err; } static void __exit pg_exit(void) @@ -695,10 +721,12 @@ for (unit = 0; unit < PG_UNITS; unit++) { struct pg *dev = &devices[unit]; - if (dev->present) + if (dev->present) { + class_simple_device_remove(MKDEV(major, unit)); devfs_remove("pg/%u", unit); + } } - + class_simple_destroy(pg_class); devfs_remove("pg"); unregister_chrdev(major, name); diff -Nru a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c --- a/drivers/block/paride/pt.c Tue May 18 23:38:06 2004 +++ b/drivers/block/paride/pt.c Tue May 18 23:38:06 2004 @@ -145,6 +145,7 @@ #include #include #include +#include #include @@ -260,6 +261,9 @@ .release = pt_release, }; +/* sysfs class support */ +static struct class_simple *pt_class; + static inline int status_reg(struct pi_adapter *pi) { return pi_read_regr(pi, 1, 6); @@ -959,33 +963,62 @@ static int __init pt_init(void) { - int unit; + int unit, err = 0; - if (disable) - return -1; + if (disable) { + err = -1; + goto out; + } - if (pt_detect()) - return -1; + if (pt_detect()) { + err = -1; + goto out; + } if (register_chrdev(major, name, &pt_fops)) { printk("pt_init: unable to get major number %d\n", major); for (unit = 0; unit < PT_UNITS; unit++) if (pt[unit].present) pi_release(pt[unit].pi); - return -1; + err = -1; + goto out; + } + pt_class = class_simple_create(THIS_MODULE, "pt"); + if (IS_ERR(pt_class)) { + err = PTR_ERR(pt_class); + goto out_chrdev; } devfs_mk_dir("pt"); for (unit = 0; unit < PT_UNITS; unit++) if (pt[unit].present) { - devfs_mk_cdev(MKDEV(major, unit), + class_simple_device_add(pt_class, MKDEV(major, unit), + NULL, "pt%d", unit); + err = devfs_mk_cdev(MKDEV(major, unit), S_IFCHR | S_IRUSR | S_IWUSR, "pt/%d", unit); - devfs_mk_cdev(MKDEV(major, unit + 128), + if (err) { + class_simple_device_remove(MKDEV(major, unit)); + goto out_class; + } + class_simple_device_add(pt_class, MKDEV(major, unit + 128), + NULL, "pt%dn", unit); + err = devfs_mk_cdev(MKDEV(major, unit + 128), S_IFCHR | S_IRUSR | S_IWUSR, "pt/%dn", unit); + if (err) { + class_simple_device_remove(MKDEV(major, unit + 128)); + goto out_class; + } } - return 0; + goto out; + +out_class: + class_simple_destroy(pt_class); +out_chrdev: + unregister_chrdev(major, "pt"); +out: + return err; } static void __exit pt_exit(void) @@ -993,9 +1026,12 @@ int unit; for (unit = 0; unit < PT_UNITS; unit++) if (pt[unit].present) { + class_simple_device_remove(MKDEV(major, unit)); devfs_remove("pt/%d", unit); + class_simple_device_remove(MKDEV(major, unit + 128)); devfs_remove("pt/%dn", unit); } + class_simple_destroy(pt_class); devfs_remove("pt"); unregister_chrdev(major, name); for (unit = 0; unit < PT_UNITS; unit++) diff -Nru a/drivers/block/viodasd.c b/drivers/block/viodasd.c --- a/drivers/block/viodasd.c Tue May 18 23:38:06 2004 +++ b/drivers/block/viodasd.c Tue May 18 23:38:06 2004 @@ -175,6 +175,13 @@ struct viodasd_device *d = ino->i_bdev->bd_disk->private_data; HvLpEvent_Rc hvrc; struct viodasd_waitevent we; + u16 flags = 0; + + if (d->read_only) { + if ((fil != NULL) && (fil->f_mode & FMODE_WRITE)) + return -EROFS; + flags = vioblockflags_ro; + } init_completion(&we.com); @@ -186,7 +193,7 @@ viopath_sourceinst(viopath_hostLp), viopath_targetinst(viopath_hostLp), (u64)(unsigned long)&we, VIOVERSION << 16, - ((u64)DEVICE_NO(d) << 48) /* | ((u64)flags << 32) */, + ((u64)DEVICE_NO(d) << 48) | ((u64)flags << 32), 0, 0, 0); if (hvrc != 0) { printk(VIOD_KERN_WARNING "HV open failed %d\n", (int)hvrc); @@ -456,7 +463,9 @@ int dev_no = DEVICE_NO(d); struct gendisk *g; struct request_queue *q; + u16 flags = 0; +retry: init_completion(&we.com); /* Send the open event to OS/400 */ @@ -467,7 +476,7 @@ viopath_sourceinst(viopath_hostLp), viopath_targetinst(viopath_hostLp), (u64)(unsigned long)&we, VIOVERSION << 16, - ((u64)dev_no << 48) | ((u64)vioblockflags_ro << 32), + ((u64)dev_no << 48) | ((u64)flags<< 32), 0, 0, 0); if (hvrc != 0) { printk(VIOD_KERN_WARNING "bad rc on HV open %d\n", (int)hvrc); @@ -476,8 +485,13 @@ wait_for_completion(&we.com); - if (we.rc != 0) - return; + if (we.rc != 0) { + if (flags != 0) + return; + /* try again with read only flag set */ + flags = vioblockflags_ro; + goto retry; + } if (we.max_disk > (MAX_DISKNO - 1)) { static int warned; @@ -498,7 +512,7 @@ viopath_sourceinst(viopath_hostLp), viopath_targetinst(viopath_hostLp), 0, VIOVERSION << 16, - ((u64)dev_no << 48) | ((u64)vioblockflags_ro << 32), + ((u64)dev_no << 48) | ((u64)flags << 32), 0, 0, 0); if (hvrc != 0) { printk(VIOD_KERN_WARNING @@ -506,11 +520,12 @@ return; } printk(VIOD_KERN_INFO "disk %d: %lu sectors (%lu MB) " - "CHS=%d/%d/%d sector size %d\n", + "CHS=%d/%d/%d sector size %d%s\n", dev_no, (unsigned long)(d->size >> 9), (unsigned long)(d->size >> 20), (int)d->cylinders, (int)d->tracks, - (int)d->sectors, (int)d->bytes_per_sector); + (int)d->sectors, (int)d->bytes_per_sector, + d->read_only ? " (RO)" : ""); /* create the request queue for the disk */ spin_lock_init(&d->q_lock); q = blk_init_queue(do_viodasd_request, &d->q_lock); diff -Nru a/drivers/bluetooth/bcm203x.c b/drivers/bluetooth/bcm203x.c --- a/drivers/bluetooth/bcm203x.c Tue May 18 23:38:05 2004 +++ b/drivers/bluetooth/bcm203x.c Tue May 18 23:38:05 2004 @@ -174,7 +174,7 @@ BT_DBG("intf %p id %p", intf, id); - if (intf->altsetting->desc.bInterfaceNumber != 0) + if (intf->cur_altsetting->desc.bInterfaceNumber != 0) return -ENODEV; data = kmalloc(sizeof(*data), GFP_KERNEL); diff -Nru a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c --- a/drivers/bluetooth/bfusb.c Tue May 18 23:38:08 2004 +++ b/drivers/bluetooth/bfusb.c Tue May 18 23:38:08 2004 @@ -98,14 +98,6 @@ static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs); static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs); -static inline void bfusb_wait_for_urb(struct urb *urb) -{ - while (atomic_read(&urb->count) > 1) { - current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout((5 * HZ + 999) / 1000); - } -} - static struct urb *bfusb_get_completed(struct bfusb *bfusb) { struct sk_buff *skb; @@ -132,7 +124,6 @@ while ((skb = skb_dequeue(&bfusb->pending_q))) { urb = ((struct bfusb_scb *) skb->cb)->urb; usb_unlink_urb(urb); - bfusb_wait_for_urb(urb); skb_queue_tail(&bfusb->completed_q, skb); } @@ -661,11 +652,11 @@ BT_DBG("intf %p id %p", intf, id); /* Check number of endpoints */ - if (intf->altsetting[0].desc.bNumEndpoints < 2) + if (intf->cur_altsetting->desc.bNumEndpoints < 2) return -EIO; - bulk_out_ep = &intf->altsetting[0].endpoint[0]; - bulk_in_ep = &intf->altsetting[0].endpoint[1]; + bulk_out_ep = &intf->cur_altsetting->endpoint[0]; + bulk_in_ep = &intf->cur_altsetting->endpoint[1]; if (!bulk_out_ep || !bulk_in_ep) { BT_ERR("Bulk endpoints not found"); diff -Nru a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c --- a/drivers/bluetooth/hci_usb.c Tue May 18 23:38:09 2004 +++ b/drivers/bluetooth/hci_usb.c Tue May 18 23:38:09 2004 @@ -342,7 +342,7 @@ static inline void hci_usb_wait_for_urb(struct urb *urb) { - while (atomic_read(&urb->count) > 1) { + while (atomic_read(&urb->kref.refcount) > 1) { current->state = TASK_UNINTERRUPTIBLE; schedule_timeout((5 * HZ + 999) / 1000); } @@ -795,17 +795,15 @@ int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct usb_device *udev = interface_to_usbdev(intf); - struct usb_host_endpoint *bulk_out_ep[HCI_MAX_IFACE_NUM]; - struct usb_host_endpoint *isoc_out_ep[HCI_MAX_IFACE_NUM]; - struct usb_host_endpoint *bulk_in_ep[HCI_MAX_IFACE_NUM]; - struct usb_host_endpoint *isoc_in_ep[HCI_MAX_IFACE_NUM]; - struct usb_host_endpoint *intr_in_ep[HCI_MAX_IFACE_NUM]; + struct usb_host_endpoint *bulk_out_ep = NULL; + struct usb_host_endpoint *bulk_in_ep = NULL; + struct usb_host_endpoint *intr_in_ep = NULL; struct usb_host_endpoint *ep; struct usb_host_interface *uif; - struct usb_interface *iface, *isoc_iface; + struct usb_interface *isoc_iface; struct hci_usb *husb; struct hci_dev *hdev; - int i, a, e, size, ifn, isoc_ifnum, isoc_alts; + int i, e, size, isoc_ifnum, isoc_alts; BT_DBG("udev %p intf %p", udev, intf); @@ -816,84 +814,38 @@ id = match; } - iface = udev->actconfig->interface[0]; - if (id->driver_info & HCI_IGNORE) return -ENODEV; - if (intf->altsetting->desc.bInterfaceNumber > 0) + if (intf->cur_altsetting->desc.bInterfaceNumber > 0) return -ENODEV; - - /* Check number of endpoints */ - if (intf->altsetting[0].desc.bNumEndpoints < 3) - return -EIO; - - memset(bulk_out_ep, 0, sizeof(bulk_out_ep)); - memset(isoc_out_ep, 0, sizeof(isoc_out_ep)); - memset(bulk_in_ep, 0, sizeof(bulk_in_ep)); - memset(isoc_in_ep, 0, sizeof(isoc_in_ep)); - memset(intr_in_ep, 0, sizeof(intr_in_ep)); - - size = 0; - isoc_iface = NULL; - isoc_alts = isoc_ifnum = 0; /* Find endpoints that we need */ - ifn = min_t(unsigned int, udev->actconfig->desc.bNumInterfaces, HCI_MAX_IFACE_NUM); - for (i = 0; i < ifn; i++) { - iface = udev->actconfig->interface[i]; - for (a = 0; a < iface->num_altsetting; a++) { - uif = &iface->altsetting[a]; - for (e = 0; e < uif->desc.bNumEndpoints; e++) { - ep = &uif->endpoint[e]; - - switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { - case USB_ENDPOINT_XFER_INT: - if (ep->desc.bEndpointAddress & USB_DIR_IN) - intr_in_ep[i] = ep; - break; - - case USB_ENDPOINT_XFER_BULK: - if (ep->desc.bEndpointAddress & USB_DIR_IN) - bulk_in_ep[i] = ep; - else - bulk_out_ep[i] = ep; - break; - -#ifdef CONFIG_BT_HCIUSB_SCO - case USB_ENDPOINT_XFER_ISOC: - if (ep->desc.wMaxPacketSize < size || a > 2) - break; - size = ep->desc.wMaxPacketSize; - - isoc_iface = iface; - isoc_alts = a; - isoc_ifnum = i; - - if (ep->desc.bEndpointAddress & USB_DIR_IN) - isoc_in_ep[i] = ep; - else - isoc_out_ep[i] = ep; - break; -#endif - } - } + uif = intf->cur_altsetting; + for (e = 0; e < uif->desc.bNumEndpoints; e++) { + ep = &uif->endpoint[e]; + + switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { + case USB_ENDPOINT_XFER_INT: + if (ep->desc.bEndpointAddress & USB_DIR_IN) + intr_in_ep = ep; + break; + + case USB_ENDPOINT_XFER_BULK: + if (ep->desc.bEndpointAddress & USB_DIR_IN) + bulk_in_ep = ep; + else + bulk_out_ep = ep; + break; } } - if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) { + if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) { BT_DBG("Bulk endpoints not found"); goto done; } -#ifdef CONFIG_BT_HCIUSB_SCO - if (!isoc_in_ep[1] || !isoc_out_ep[1]) { - BT_DBG("Isoc endpoints not found"); - isoc_iface = NULL; - } -#endif - if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) { BT_ERR("Can't allocate: control structure"); goto done; @@ -902,26 +854,67 @@ memset(husb, 0, sizeof(struct hci_usb)); husb->udev = udev; - husb->bulk_out_ep = bulk_out_ep[0]; - husb->bulk_in_ep = bulk_in_ep[0]; - husb->intr_in_ep = intr_in_ep[0]; + husb->bulk_out_ep = bulk_out_ep; + husb->bulk_in_ep = bulk_in_ep; + husb->intr_in_ep = intr_in_ep; if (id->driver_info & HCI_DIGIANSWER) husb->ctrl_req = HCI_DIGI_REQ; else husb->ctrl_req = HCI_CTRL_REQ; + + /* Find isochronous endpoints that we can use */ + + size = 0; + isoc_iface = NULL; + isoc_alts = 0; + isoc_ifnum = 1; #ifdef CONFIG_BT_HCIUSB_SCO + isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum); if (isoc_iface) { - BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts); - if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) { - BT_ERR("Can't set isoc interface settings"); - isoc_iface = NULL; - } - usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb); - husb->isoc_iface = isoc_iface; - husb->isoc_in_ep = isoc_in_ep[isoc_ifnum]; - husb->isoc_out_ep = isoc_out_ep[isoc_ifnum]; + int a; + struct usb_host_endpoint *isoc_out_ep = NULL; + struct usb_host_endpoint *isoc_in_ep = NULL; + + for (a = 0; a < isoc_iface->num_altsetting; a++) { + uif = &isoc_iface->altsetting[a]; + for (e = 0; e < uif->desc.bNumEndpoints; e++) { + ep = &uif->endpoint[e]; + + switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) { + case USB_ENDPOINT_XFER_ISOC: + if (ep->desc.wMaxPacketSize < size || + uif->desc.bAlternateSetting > 2) + break; + size = ep->desc.wMaxPacketSize; + + isoc_alts = uif->desc.bAlternateSetting; + + if (ep->desc.bEndpointAddress & USB_DIR_IN) + isoc_in_ep = ep; + else + isoc_out_ep = ep; + break; + } + } + } + + if (!isoc_in_ep || !isoc_out_ep) + BT_DBG("Isoc endpoints not found"); + else { + BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts); + if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0) + BT_ERR("Can't claim isoc interface"); + else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) { + BT_ERR("Can't set isoc interface settings"); + usb_driver_release_interface(&hci_usb_driver, isoc_iface); + } else { + husb->isoc_iface = isoc_iface; + husb->isoc_in_ep = isoc_in_ep; + husb->isoc_out_ep = isoc_out_ep; + } + } } #endif @@ -967,6 +960,8 @@ return 0; probe_error: + if (husb->isoc_iface) + usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface); kfree(husb); done: @@ -976,11 +971,13 @@ static void hci_usb_disconnect(struct usb_interface *intf) { struct hci_usb *husb = usb_get_intfdata(intf); - struct hci_dev *hdev = husb->hdev; + struct hci_dev *hdev; - if (!husb) + if (!husb || intf == husb->isoc_iface) return; + usb_set_intfdata(intf, NULL); + hdev = husb->hdev; BT_DBG("%s", hdev->name); diff -Nru a/drivers/char/Kconfig b/drivers/char/Kconfig --- a/drivers/char/Kconfig Tue May 18 23:38:05 2004 +++ b/drivers/char/Kconfig Tue May 18 23:38:05 2004 @@ -112,14 +112,12 @@ tristate "Cyclades async mux support" depends on SERIAL_NONSTANDARD ---help--- - This is a driver for a card that gives you many serial ports. You - would need something like this to connect more than two modems to + This driver supports Cyclades Z and Y multiserial boards. + You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. + For information about the Cyclades-Z card, read . - - As of 1.3.9x kernels, this driver's minor numbers start at 0 instead - of 32. To compile this driver as a module, choose M here: the module will be called cyclades. diff -Nru a/drivers/char/Makefile b/drivers/char/Makefile --- a/drivers/char/Makefile Tue May 18 23:38:09 2004 +++ b/drivers/char/Makefile Tue May 18 23:38:09 2004 @@ -39,7 +39,6 @@ obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o obj-$(CONFIG_SX) += sx.o generic_serial.o obj-$(CONFIG_RIO) += rio/ generic_serial.o -obj-$(CONFIG_SH_SCI) += sh-sci.o generic_serial.o obj-$(CONFIG_HVC_CONSOLE) += hvc_console.o obj-$(CONFIG_RAW_DRIVER) += raw.o obj-$(CONFIG_SGI_L1_SERIAL) += sn_serial.o @@ -70,7 +69,6 @@ obj-$(CONFIG_FTAPE) += ftape/ obj-$(CONFIG_H8) += h8.o obj-$(CONFIG_PPDEV) += ppdev.o -obj-$(CONFIG_DZ) += dz.o obj-$(CONFIG_NWBUTTON) += nwbutton.o obj-$(CONFIG_NWFLASH) += nwflash.o obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o diff -Nru a/drivers/char/consolemap.c b/drivers/char/consolemap.c --- a/drivers/char/consolemap.c Tue May 18 23:38:08 2004 +++ b/drivers/char/consolemap.c Tue May 18 23:38:08 2004 @@ -577,6 +577,7 @@ dflt = p; return err; } +EXPORT_SYMBOL(con_set_default_unimap); int con_copy_unimap(int dstcon, int srccon) diff -Nru a/drivers/char/cyclades.c b/drivers/char/cyclades.c --- a/drivers/char/cyclades.c Tue May 18 23:38:06 2004 +++ b/drivers/char/cyclades.c Tue May 18 23:38:06 2004 @@ -681,20 +681,6 @@ static void cy_throttle (struct tty_struct *tty); static void cy_send_xchar (struct tty_struct *tty, char ch); -static unsigned long -cy_get_user(unsigned long *addr) -{ - unsigned long result = 0; - int error = get_user (result, addr); - if (error) - printk ("cyclades: cy_get_user: error == %d\n", error); - return result; -} - -#ifndef MIN -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#endif - #define IS_CYC_Z(card) ((card).num_chips == -1) #define Z_FPGA_CHECK(card) \ @@ -708,7 +694,7 @@ ((card).base_addr+ID_ADDRESS))->signature))) #ifndef SERIAL_XMIT_SIZE -#define SERIAL_XMIT_SIZE (MIN(PAGE_SIZE, 4096)) +#define SERIAL_XMIT_SIZE (min(PAGE_SIZE, 4096)) #endif #define WAKEUP_CHARS 256 @@ -2680,7 +2666,7 @@ unsigned char *base_addr; int card,chip,channel,index; unsigned long orig_jiffies; - signed long char_time; + int char_time; if (serial_paranoia_check(info, tty->name, "cy_wait_until_sent")) return; @@ -2705,7 +2691,7 @@ if (timeout < 0) timeout = 0; if (timeout) - char_time = MIN(char_time, timeout); + char_time = min(char_time, timeout); /* * If the transmitter hasn't cleared in twice the approximate * amount of time to send the entire FIFO, it probably won't @@ -2932,8 +2918,8 @@ while (1) { int c1; - c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, - SERIAL_XMIT_SIZE - info->xmit_head)); + c = min(count, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1), + (int)(SERIAL_XMIT_SIZE - info->xmit_head))); if (c <= 0) break; @@ -2945,8 +2931,8 @@ break; } CY_LOCK(info, flags); - c1 = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, - SERIAL_XMIT_SIZE - info->xmit_head)); + c1 = min(c, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1), + (int)(SERIAL_XMIT_SIZE - info->xmit_head))); if (c1 < c) c = c1; @@ -2962,8 +2948,8 @@ } else { CY_LOCK(info, flags); while (1) { - c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, - SERIAL_XMIT_SIZE - info->xmit_head)); + c = min(count, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1), + (int)(SERIAL_XMIT_SIZE - info->xmit_head))); if (c <= 0) break; @@ -5648,8 +5634,10 @@ #endif /* CONFIG_CYZ_INTR */ ) free_irq(cy_card[i].irq, &cy_card[i]); +#ifdef CONFIG_PCI if (cy_card[i].pdev) pci_release_regions(cy_card[i].pdev); +#endif } } if (tmp_buf) { diff -Nru a/drivers/char/drm/ati_pcigart.h b/drivers/char/drm/ati_pcigart.h --- a/drivers/char/drm/ati_pcigart.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/ati_pcigart.h Tue May 18 23:38:09 2004 @@ -67,7 +67,7 @@ page = virt_to_page( address ); for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) { - atomic_inc( &page->count ); + get_page(page); SetPageReserved( page ); } @@ -84,7 +84,7 @@ page = virt_to_page( address ); for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) { - atomic_dec( &page->count ); + __put_page(page); ClearPageReserved( page ); } diff -Nru a/drivers/char/drm/drm.h b/drivers/char/drm/drm.h --- a/drivers/char/drm/drm.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/drm.h Tue May 18 23:38:06 2004 @@ -46,8 +46,8 @@ #define DRM_IOC_WRITE _IOC_WRITE #define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) -#elif defined(__FreeBSD__) || defined(__NetBSD__) -#if defined(__FreeBSD__) && defined(XFree86Server) +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) && defined(IN_MODULE) /* Prevent name collision when including sys/ioccom.h */ #undef ioctl #include @@ -130,6 +130,18 @@ unsigned int age; } drm_tex_region_t; +/** + * Hardware lock. + * + * The lock structure is a simple cache-line aligned integer. To avoid + * processor bus contention on a multiprocessor system, there should not be any + * other data stored in the same cache line. + */ +typedef struct drm_hw_lock { + __volatile__ unsigned int lock; /**< lock variable */ + char padding[60]; /**< Pad to cache line */ +} drm_hw_lock_t; + /** * DRM_IOCTL_VERSION ioctl argument type. @@ -580,6 +592,16 @@ unsigned long handle; /**< Used for mapping / unmapping */ } drm_scatter_gather_t; +/** + * DRM_IOCTL_SET_VERSION ioctl argument type. + */ +typedef struct drm_set_version { + int drm_di_major; + int drm_di_minor; + int drm_dd_major; + int drm_dd_minor; +} drm_set_version_t; + #define DRM_IOCTL_BASE 'd' #define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) @@ -594,6 +616,7 @@ #define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, drm_map_t) #define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, drm_client_t) #define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, drm_stats_t) +#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, drm_set_version_t) #define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, drm_unique_t) #define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, drm_auth_t) diff -Nru a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h --- a/drivers/char/drm/drmP.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/drmP.h Tue May 18 23:38:08 2004 @@ -92,8 +92,8 @@ #ifndef __HAVE_DMA #define __HAVE_DMA 0 #endif -#ifndef __HAVE_DMA_IRQ -#define __HAVE_DMA_IRQ 0 +#ifndef __HAVE_IRQ +#define __HAVE_IRQ 0 #endif #ifndef __HAVE_DMA_WAITLIST #define __HAVE_DMA_WAITLIST 0 @@ -148,6 +148,7 @@ #define DRM_MEM_CTXBITMAP 18 #define DRM_MEM_STUB 19 #define DRM_MEM_SGLISTS 20 +#define DRM_MEM_CTXLIST 21 #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8) @@ -324,6 +325,7 @@ #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x)) #define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist) +#define DRM_IF_VERSION(maj, min) (maj << 16 | min) /** * Get the private SAREA mapping. * @@ -362,11 +364,6 @@ typedef int drm_ioctl_t( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg ); -typedef struct drm_pci_list { - u16 vendor; - u16 device; -} drm_pci_list_t; - typedef struct drm_ioctl_desc { drm_ioctl_t *func; int auth_needed; @@ -463,18 +460,6 @@ drm_freelist_t freelist; } drm_buf_entry_t; -/** - * Hardware lock. - * - * The lock structure is a simple cache-line aligned integer. To avoid - * processor bus contention on a multiprocessor system, there should not be any - * other data stored in the same cache line. - */ -typedef struct drm_hw_lock { - __volatile__ unsigned int lock; /**< lock variable */ - char padding[60]; /**< Pad to cache line */ -} drm_hw_lock_t; - /** File private data */ typedef struct drm_file { int authenticated; @@ -488,6 +473,9 @@ struct drm_device *dev; int remove_auth_on_close; unsigned long lock_count; +#ifdef DRIVER_FILE_FIELDS + DRIVER_FILE_FIELDS; +#endif } drm_file_t; /** Wait queue */ @@ -602,6 +590,15 @@ typedef drm_map_t drm_local_map_t; +/** + * Context handle list + */ +typedef struct drm_ctx_list { + struct list_head head; /**< list head */ + drm_context_t handle; /**< context handle */ + drm_file_t *tag; /**< associated fd private data */ +} drm_ctx_list_t; + #if __HAVE_VBL_IRQ typedef struct drm_vbl_sig { @@ -622,6 +619,8 @@ int unique_len; /**< Length of unique field */ dev_t device; /**< Device number for mknod */ char *devname; /**< For /proc/interrupts */ + int minor; /**< Minor device number */ + int if_version; /**< Highest interface version set */ int blocked; /**< Blocked due to VC switch? */ struct proc_dir_entry *root; /**< Root for this device's entries */ @@ -660,6 +659,12 @@ drm_map_list_t *maplist; /**< Linked list of regions */ int map_count; /**< Number of mappable regions */ + /** \name Context handle management */ + /*@{*/ + drm_ctx_list_t *ctxlist; /**< Linked list of context handles */ + int ctx_count; /**< Number of context handles */ + struct semaphore ctxlist_sem; /**< For ctxlist */ + drm_map_t **context_sareas; /**< per-context SAREA's */ int max_context; @@ -679,6 +684,7 @@ /** \name Context support */ /*@{*/ int irq; /**< Interrupt used by board */ + int irq_enabled; /**< True if irq handler is enabled */ __volatile__ long context_flag; /**< Context swapping flag */ __volatile__ long interrupt_flag; /**< Interruption handler flag */ __volatile__ long dma_flag; /**< DMA dispatch flag */ @@ -714,7 +720,12 @@ #if __REALLY_HAVE_AGP drm_agp_head_t *agp; /**< AGP data */ #endif - struct pci_dev *pdev; /**< PCI device structure */ + + struct pci_dev *pdev; /**< PCI device structure */ + int pci_domain; /**< PCI bus domain number */ + int pci_bus; /**< PCI bus number */ + int pci_slot; /**< PCI slot number */ + int pci_func; /**< PCI function number */ #ifdef __alpha__ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,3) struct pci_controler *hose; @@ -758,18 +769,6 @@ extern int DRM(fasync)(int fd, struct file *filp, int on); /* Mapping support (drm_vm.h) */ -extern struct page *DRM(vm_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type); -extern struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type); -extern struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type); -extern struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type); extern void DRM(vm_open)(struct vm_area_struct *vma); extern void DRM(vm_close)(struct vm_area_struct *vma); extern void DRM(vm_shm_close)(struct vm_area_struct *vma); @@ -804,8 +803,8 @@ #endif /* Misc. IOCTL support (drm_ioctl.h) */ -extern int DRM(irq_busid)(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg); +extern int DRM(irq_by_busid)(struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg); extern int DRM(getunique)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); extern int DRM(setunique)(struct inode *inode, struct file *filp, @@ -816,6 +815,8 @@ unsigned int cmd, unsigned long arg); extern int DRM(getstats)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); +extern int DRM(setversion)(struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg); /* Context IOCTL support (drm_context.h) */ extern int DRM(resctx)( struct inode *inode, struct file *filp, @@ -900,12 +901,17 @@ extern void DRM(dma_takedown)(drm_device_t *dev); extern void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf); extern void DRM(reclaim_buffers)( struct file *filp ); -#if __HAVE_DMA_IRQ +#endif /* __HAVE_DMA */ + + /* IRQ support (drm_irq.h) */ +#if __HAVE_IRQ || __HAVE_DMA extern int DRM(control)( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg ); -extern int DRM(irq_install)( drm_device_t *dev, int irq ); +#endif +#if __HAVE_IRQ +extern int DRM(irq_install)( drm_device_t *dev ); extern int DRM(irq_uninstall)( drm_device_t *dev ); -extern irqreturn_t DRM(dma_service)( DRM_IRQ_ARGS ); +extern irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ); extern void DRM(driver_irq_preinstall)( drm_device_t *dev ); extern void DRM(driver_irq_postinstall)( drm_device_t *dev ); extern void DRM(driver_irq_uninstall)( drm_device_t *dev ); @@ -915,12 +921,11 @@ extern int DRM(vblank_wait)(drm_device_t *dev, unsigned int *vbl_seq); extern void DRM(vbl_send_signals)( drm_device_t *dev ); #endif -#if __HAVE_DMA_IRQ_BH -extern void DRM(dma_immediate_bh)( void *dev ); +#if __HAVE_IRQ_BH +extern void DRM(irq_immediate_bh)( void *dev ); #endif #endif -#endif /* __HAVE_DMA */ #if __REALLY_HAVE_AGP /* AGP/GART support (drm_agpsupport.h) */ diff -Nru a/drivers/char/drm/drm_agpsupport.h b/drivers/char/drm/drm_agpsupport.h --- a/drivers/char/drm/drm_agpsupport.h Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/drm_agpsupport.h Tue May 18 23:38:05 2004 @@ -103,7 +103,13 @@ drm_device_t *dev = priv->dev; int retcode; - if (!dev->agp || dev->agp->acquired || !drm_agp->acquire) + if (!dev->agp) + return -ENODEV; + if (dev->agp->acquired) + return -EBUSY; + if (!drm_agp->acquire) + return -EINVAL; + if ( dev->agp->cant_use_aperture ) return -EINVAL; if ((retcode = drm_agp->acquire())) return retcode; diff -Nru a/drivers/char/drm/drm_bufs.h b/drivers/char/drm/drm_bufs.h --- a/drivers/char/drm/drm_bufs.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/drm_bufs.h Tue May 18 23:38:06 2004 @@ -147,7 +147,9 @@ MTRR_TYPE_WRCOMB, 1 ); } #endif - map->handle = DRM(ioremap)( map->offset, map->size, dev ); + if (map->type == _DRM_REGISTERS) + map->handle = DRM(ioremap)( map->offset, map->size, + dev ); break; case _DRM_SHM: @@ -160,6 +162,12 @@ } map->offset = (unsigned long)map->handle; if ( map->flags & _DRM_CONTAINS_LOCK ) { + /* Prevent a 2nd X Server from creating a 2nd lock */ + if (dev->lock.hw_lock != NULL) { + vfree( map->handle ); + DRM(free)( map, sizeof(*map), DRM_MEM_MAPS ); + return -EBUSY; + } dev->sigdata.lock = dev->lock.hw_lock = map->handle; /* Pointer to lock */ } @@ -767,7 +775,7 @@ } #endif /* __HAVE_PCI_DMA */ -#ifdef __HAVE_SG +#if __HAVE_SG int DRM(addbufs_sg)( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg ) { diff -Nru a/drivers/char/drm/drm_context.h b/drivers/char/drm/drm_context.h --- a/drivers/char/drm/drm_context.h Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/drm_context.h Tue May 18 23:38:05 2004 @@ -401,6 +401,7 @@ { drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; + drm_ctx_list_t * ctx_entry; drm_ctx_t ctx; if ( copy_from_user( &ctx, (drm_ctx_t *)arg, sizeof(ctx) ) ) @@ -421,6 +422,20 @@ if ( ctx.handle != DRM_KERNEL_CONTEXT ) DRIVER_CTX_CTOR(ctx.handle); /* XXX: also pass dev ? */ #endif + ctx_entry = DRM(alloc)( sizeof(*ctx_entry), DRM_MEM_CTXLIST ); + if ( !ctx_entry ) { + DRM_DEBUG("out of memory\n"); + return -ENOMEM; + } + + INIT_LIST_HEAD( &ctx_entry->head ); + ctx_entry->handle = ctx.handle; + ctx_entry->tag = priv; + + down( &dev->ctxlist_sem ); + list_add( &ctx_entry->head, &dev->ctxlist->head ); + ++dev->ctx_count; + up( &dev->ctxlist_sem ); if ( copy_to_user( (drm_ctx_t *)arg, &ctx, sizeof(ctx) ) ) return -EFAULT; @@ -542,6 +557,20 @@ #endif DRM(ctxbitmap_free)( dev, ctx.handle ); } + + down( &dev->ctxlist_sem ); + if ( !list_empty( &dev->ctxlist->head ) ) { + drm_ctx_list_t *pos, *n; + + list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) { + if ( pos->handle == ctx.handle ) { + list_del( &pos->head ); + DRM(free)( pos, sizeof(*pos), DRM_MEM_CTXLIST ); + --dev->ctx_count; + } + } + } + up( &dev->ctxlist_sem ); return 0; } diff -Nru a/drivers/char/drm/drm_dma.h b/drivers/char/drm/drm_dma.h --- a/drivers/char/drm/drm_dma.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/drm_dma.h Tue May 18 23:38:08 2004 @@ -35,7 +35,6 @@ #include "drmP.h" -#include /* For task queue support */ #ifndef __HAVE_DMA_WAITQUEUE #define __HAVE_DMA_WAITQUEUE 0 @@ -43,15 +42,6 @@ #ifndef __HAVE_DMA_RECLAIM #define __HAVE_DMA_RECLAIM 0 #endif -#ifndef __HAVE_SHARED_IRQ -#define __HAVE_SHARED_IRQ 0 -#endif - -#if __HAVE_SHARED_IRQ -#define DRM_IRQ_TYPE SA_SHIRQ -#else -#define DRM_IRQ_TYPE 0 -#endif #if __HAVE_DMA @@ -214,293 +204,11 @@ } #endif - - - -#if __HAVE_DMA_IRQ - -/** - * Install IRQ handler. - * - * \param dev DRM device. - * \param irq IRQ number. - * - * Initializes the IRQ related data, and setups drm_device::vbl_queue. Installs the handler, calling the driver - * \c DRM(driver_irq_preinstall)() and \c DRM(driver_irq_postinstall)() functions - * before and after the installation. - */ -int DRM(irq_install)( drm_device_t *dev, int irq ) -{ - int ret; - - if ( !irq ) - return -EINVAL; - - down( &dev->struct_sem ); - - /* Driver must have been initialized */ - if ( !dev->dev_private ) { - up( &dev->struct_sem ); - return -EINVAL; - } - - if ( dev->irq ) { - up( &dev->struct_sem ); - return -EBUSY; - } - dev->irq = irq; - up( &dev->struct_sem ); - - DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, irq ); - - dev->context_flag = 0; - dev->interrupt_flag = 0; - dev->dma_flag = 0; - - dev->dma->next_buffer = NULL; - dev->dma->next_queue = NULL; - dev->dma->this_buffer = NULL; - -#if __HAVE_DMA_IRQ_BH - INIT_WORK(&dev->work, DRM(dma_immediate_bh), dev); -#endif - -#if __HAVE_VBL_IRQ - init_waitqueue_head(&dev->vbl_queue); - - spin_lock_init( &dev->vbl_lock ); - - INIT_LIST_HEAD( &dev->vbl_sigs.head ); - - dev->vbl_pending = 0; -#endif - - /* Before installing handler */ - DRM(driver_irq_preinstall)(dev); - - /* Install handler */ - ret = request_irq( dev->irq, DRM(dma_service), - DRM_IRQ_TYPE, dev->devname, dev ); - if ( ret < 0 ) { - down( &dev->struct_sem ); - dev->irq = 0; - up( &dev->struct_sem ); - return ret; - } - - /* After installing handler */ - DRM(driver_irq_postinstall)(dev); - - return 0; -} - -/** - * Uninstall the IRQ handler. - * - * \param dev DRM device. - * - * Calls the driver's \c DRM(driver_irq_uninstall)() function, and stops the irq. - */ -int DRM(irq_uninstall)( drm_device_t *dev ) -{ - int irq; - - down( &dev->struct_sem ); - irq = dev->irq; - dev->irq = 0; - up( &dev->struct_sem ); - - if ( !irq ) - return -EINVAL; - - DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, irq ); - - DRM(driver_irq_uninstall)( dev ); - - free_irq( irq, dev ); - - return 0; -} - -/** - * IRQ control ioctl. - * - * \param inode device inode. - * \param filp file pointer. - * \param cmd command. - * \param arg user argument, pointing to a drm_control structure. - * \return zero on success or a negative number on failure. - * - * Calls irq_install() or irq_uninstall() according to \p arg. - */ -int DRM(control)( struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg ) -{ - drm_file_t *priv = filp->private_data; - drm_device_t *dev = priv->dev; - drm_control_t ctl; - - if ( copy_from_user( &ctl, (drm_control_t *)arg, sizeof(ctl) ) ) - return -EFAULT; - - switch ( ctl.func ) { - case DRM_INST_HANDLER: - return DRM(irq_install)( dev, ctl.irq ); - case DRM_UNINST_HANDLER: - return DRM(irq_uninstall)( dev ); - default: - return -EINVAL; - } -} - -#if __HAVE_VBL_IRQ - -/** - * Wait for VBLANK. - * - * \param inode device inode. - * \param filp file pointer. - * \param cmd command. - * \param data user argument, pointing to a drm_wait_vblank structure. - * \return zero on success or a negative number on failure. - * - * Verifies the IRQ is installed. - * - * If a signal is requested checks if this task has already scheduled the same signal - * for the same vblank sequence number - nothing to be done in - * that case. If the number of tasks waiting for the interrupt exceeds 100 the - * function fails. Otherwise adds a new entry to drm_device::vbl_sigs for this - * task. - * - * If a signal is not requested, then calls vblank_wait(). - */ -int DRM(wait_vblank)( DRM_IOCTL_ARGS ) -{ - drm_file_t *priv = filp->private_data; - drm_device_t *dev = priv->dev; - drm_wait_vblank_t vblwait; - struct timeval now; - int ret = 0; - unsigned int flags; - - if (!dev->irq) - return -EINVAL; - - DRM_COPY_FROM_USER_IOCTL( vblwait, (drm_wait_vblank_t *)data, - sizeof(vblwait) ); - - switch ( vblwait.request.type & ~_DRM_VBLANK_FLAGS_MASK ) { - case _DRM_VBLANK_RELATIVE: - vblwait.request.sequence += atomic_read( &dev->vbl_received ); - vblwait.request.type &= ~_DRM_VBLANK_RELATIVE; - case _DRM_VBLANK_ABSOLUTE: - break; - default: - return -EINVAL; - } - - flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK; - - if ( flags & _DRM_VBLANK_SIGNAL ) { - unsigned long irqflags; - drm_vbl_sig_t *vbl_sig; - - vblwait.reply.sequence = atomic_read( &dev->vbl_received ); - - spin_lock_irqsave( &dev->vbl_lock, irqflags ); - - /* Check if this task has already scheduled the same signal - * for the same vblank sequence number; nothing to be done in - * that case - */ - list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) { - if (vbl_sig->sequence == vblwait.request.sequence - && vbl_sig->info.si_signo == vblwait.request.signal - && vbl_sig->task == current) - { - spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); - goto done; - } - } - - if ( dev->vbl_pending >= 100 ) { - spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); - return -EBUSY; - } - - dev->vbl_pending++; - - spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); - - if ( !( vbl_sig = DRM_MALLOC( sizeof( drm_vbl_sig_t ) ) ) ) { - return -ENOMEM; - } - - memset( (void *)vbl_sig, 0, sizeof(*vbl_sig) ); - - vbl_sig->sequence = vblwait.request.sequence; - vbl_sig->info.si_signo = vblwait.request.signal; - vbl_sig->task = current; - - spin_lock_irqsave( &dev->vbl_lock, irqflags ); - - list_add_tail( (struct list_head *) vbl_sig, &dev->vbl_sigs.head ); - - spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); - } else { - ret = DRM(vblank_wait)( dev, &vblwait.request.sequence ); - - do_gettimeofday( &now ); - vblwait.reply.tval_sec = now.tv_sec; - vblwait.reply.tval_usec = now.tv_usec; - } - -done: - DRM_COPY_TO_USER_IOCTL( (drm_wait_vblank_t *)data, vblwait, - sizeof(vblwait) ); - - return ret; -} - -/** - * Send the VBLANK signals. - * - * \param dev DRM device. - * - * Sends a signal for each task in drm_device::vbl_sigs and empties the list. - * - * If a signal is not requested, then calls vblank_wait(). +#if !__HAVE_IRQ +/* This stub DRM_IOCTL_CONTROL handler is for the drivers that used to require + * IRQs for DMA but no longer do. It maintains compatibility with the X Servers + * that try to use the control ioctl by simply returning success. */ -void DRM(vbl_send_signals)( drm_device_t *dev ) -{ - struct list_head *list, *tmp; - drm_vbl_sig_t *vbl_sig; - unsigned int vbl_seq = atomic_read( &dev->vbl_received ); - unsigned long flags; - - spin_lock_irqsave( &dev->vbl_lock, flags ); - - list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) { - vbl_sig = list_entry( list, drm_vbl_sig_t, head ); - if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) { - vbl_sig->info.si_code = vbl_seq; - send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task ); - - list_del( list ); - - DRM_FREE( vbl_sig, sizeof(*vbl_sig) ); - - dev->vbl_pending--; - } - } - - spin_unlock_irqrestore( &dev->vbl_lock, flags ); -} - -#endif /* __HAVE_VBL_IRQ */ - -#else - int DRM(control)( struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg ) { @@ -517,7 +225,6 @@ return -EINVAL; } } - -#endif /* __HAVE_DMA_IRQ */ +#endif #endif /* __HAVE_DMA */ diff -Nru a/drivers/char/drm/drm_drv.h b/drivers/char/drm/drm_drv.h --- a/drivers/char/drm/drm_drv.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/drm_drv.h Tue May 18 23:38:08 2004 @@ -58,8 +58,8 @@ #ifndef __HAVE_CTX_BITMAP #define __HAVE_CTX_BITMAP 0 #endif -#ifndef __HAVE_DMA_IRQ -#define __HAVE_DMA_IRQ 0 +#ifndef __HAVE_IRQ +#define __HAVE_IRQ 0 #endif #ifndef __HAVE_DMA_QUEUE #define __HAVE_DMA_QUEUE 0 @@ -126,6 +126,9 @@ #ifndef DRIVER_IOCTLS #define DRIVER_IOCTLS #endif +#ifndef DRIVER_OPEN_HELPER +#define DRIVER_OPEN_HELPER( priv, dev ) +#endif #ifndef DRIVER_FOPS #define DRIVER_FOPS \ static struct file_operations DRM(fops) = { \ @@ -159,15 +162,8 @@ #undef DRM_OPTIONS_FUNC #endif -/** - * The default number of instances (minor numbers) to initialize. - */ -#ifndef DRIVER_NUM_CARDS -#define DRIVER_NUM_CARDS 1 -#endif - -static drm_device_t *DRM(device); -static int *DRM(minor); +#define MAX_DEVICES 4 +static drm_device_t DRM(device)[MAX_DEVICES]; static int DRM(numdevs) = 0; DRIVER_FOPS; @@ -177,10 +173,13 @@ [DRM_IOCTL_NR(DRM_IOCTL_VERSION)] = { DRM(version), 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE)] = { DRM(getunique), 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_GET_MAGIC)] = { DRM(getmagic), 0, 0 }, - [DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)] = { DRM(irq_busid), 0, 1 }, +#if __HAVE_IRQ + [DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)] = { DRM(irq_by_busid), 0, 1 }, +#endif [DRM_IOCTL_NR(DRM_IOCTL_GET_MAP)] = { DRM(getmap), 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_GET_CLIENT)] = { DRM(getclient), 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_GET_STATS)] = { DRM(getstats), 0, 0 }, + [DRM_IOCTL_NR(DRM_IOCTL_SET_VERSION)] = { DRM(setversion), 0, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = { DRM(setunique), 1, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { DRM(noop), 1, 1 }, @@ -222,9 +221,9 @@ [DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { DRM(infobufs), 1, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)] = { DRM(mapbufs), 1, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)] = { DRM(freebufs), 1, 0 }, - - /* The DRM_IOCTL_DMA ioctl should be defined by the driver. - */ + /* The DRM_IOCTL_DMA ioctl should be defined by the driver. */ +#endif +#if __HAVE_IRQ || __HAVE_DMA [DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = { DRM(control), 1, 1 }, #endif @@ -330,6 +329,12 @@ memset(dev->maplist, 0, sizeof(*dev->maplist)); INIT_LIST_HEAD(&dev->maplist->head); + dev->ctxlist = DRM(alloc)(sizeof(*dev->ctxlist), + DRM_MEM_CTXLIST); + if(dev->ctxlist == NULL) return -ENOMEM; + memset(dev->ctxlist, 0, sizeof(*dev->ctxlist)); + INIT_LIST_HEAD(&dev->ctxlist->head); + dev->vmalist = NULL; dev->sigdata.lock = dev->lock.hw_lock = NULL; init_waitqueue_head( &dev->lock.lock_queue ); @@ -337,7 +342,7 @@ dev->queue_reserved = 0; dev->queue_slots = 0; dev->queuelist = NULL; - dev->irq = 0; + dev->irq_enabled = 0; dev->context_flag = 0; dev->interrupt_flag = 0; dev->dma_flag = 0; @@ -345,6 +350,7 @@ dev->last_switch = 0; dev->last_checked = 0; init_waitqueue_head( &dev->context_wait ); + dev->if_version = 0; dev->ctx_start = 0; dev->lck_start = 0; @@ -391,8 +397,8 @@ DRM_DEBUG( "\n" ); DRIVER_PRETAKEDOWN(); -#if __HAVE_DMA_IRQ - if ( dev->irq ) DRM(irq_uninstall)( dev ); +#if __HAVE_IRQ + if ( dev->irq_enabled ) DRM(irq_uninstall)( dev ); #endif down( &dev->struct_sem ); @@ -534,43 +540,104 @@ return 0; } -/** - * Figure out how many instances to initialize. - * - * \return number of cards found. - * - * Searches for every PCI card in \c DRIVER_CARD_LIST with matching vendor and device ids. - */ -static int drm_count_cards(void) +#include "drm_pciids.h" + +static struct pci_device_id DRM(pciidlist)[] = { + DRM(PCI_IDS) +}; + +static int DRM(probe)(struct pci_dev *pdev) { - int num = 0; -#if defined(DRIVER_CARD_LIST) - int i; - drm_pci_list_t *l; - u16 device, vendor; - struct pci_dev *pdev = NULL; + drm_device_t *dev; +#if __HAVE_CTX_BITMAP + int retcode; #endif + int i; + int is_compat = 0; DRM_DEBUG( "\n" ); -#if defined(DRIVER_COUNT_CARDS) - num = DRIVER_COUNT_CARDS(); -#elif defined(DRIVER_CARD_LIST) - for (i = 0, l = DRIVER_CARD_LIST; l[i].vendor != 0; i++) { - pdev = NULL; - vendor = l[i].vendor; - device = l[i].device; - if(device == 0xffff) device = PCI_ANY_ID; - if(vendor == 0xffff) vendor = PCI_ANY_ID; - while ((pdev = pci_find_device(vendor, device, pdev))) { - num++; + for (i = 0; DRM(pciidlist)[i].vendor != 0; i++) { + if ((DRM(pciidlist)[i].vendor == pdev->vendor) && + (DRM(pciidlist)[i].device == pdev->device)) { + is_compat = 1; } } + if (is_compat == 0) + return -ENODEV; + + if (DRM(numdevs) >= MAX_DEVICES) + return -ENODEV; + + dev = &(DRM(device)[DRM(numdevs)]); + + memset( (void *)dev, 0, sizeof(*dev) ); + dev->count_lock = SPIN_LOCK_UNLOCKED; + init_timer( &dev->timer ); + sema_init( &dev->struct_sem, 1 ); + sema_init( &dev->ctxlist_sem, 1 ); + + if ((dev->minor = DRM(stub_register)(DRIVER_NAME, &DRM(fops),dev)) < 0) + return -EPERM; + dev->device = MKDEV(DRM_MAJOR, dev->minor ); + dev->name = DRIVER_NAME; + + dev->pdev = pdev; +#ifdef __alpha__ + dev->hose = pdev->sysdata; + dev->pci_domain = dev->hose->bus->number; #else - num = DRIVER_NUM_CARDS; + dev->pci_domain = 0; +#endif + dev->pci_bus = pdev->bus->number; + dev->pci_slot = PCI_SLOT(pdev->devfn); + dev->pci_func = PCI_FUNC(pdev->devfn); + dev->irq = pdev->irq; + + DRIVER_PREINIT(); + +#if __REALLY_HAVE_AGP + dev->agp = DRM(agp_init)(); +#if __MUST_HAVE_AGP + if ( dev->agp == NULL ) { + DRM_ERROR( "Cannot initialize the agpgart module.\n" ); + DRM(stub_unregister)(dev->minor); + DRM(takedown)( dev ); + return -EINVAL; + } +#endif +#if __REALLY_HAVE_MTRR + if (dev->agp) + dev->agp->agp_mtrr = mtrr_add( dev->agp->agp_info.aper_base, + dev->agp->agp_info.aper_size*1024*1024, + MTRR_TYPE_WRCOMB, + 1 ); +#endif +#endif + +#if __HAVE_CTX_BITMAP + retcode = DRM(ctxbitmap_init)( dev ); + if( retcode ) { + DRM_ERROR( "Cannot allocate memory for context bitmap.\n" ); + DRM(stub_unregister)(dev->minor); + DRM(takedown)( dev ); + return retcode; + } #endif - DRM_DEBUG("numdevs = %d\n", num); - return num; + DRM(numdevs)++; /* no errors, mark it reserved */ + + DRM_INFO( "Initialized %s %d.%d.%d %s on minor %d: %s\n", + DRIVER_NAME, + DRIVER_MAJOR, + DRIVER_MINOR, + DRIVER_PATCHLEVEL, + DRIVER_DATE, + dev->minor, + pci_pretty_name(pdev)); + + DRIVER_POSTINIT(); + + return 0; } /** @@ -579,7 +646,7 @@ * * \return zero on success or a negative number on failure. * - * Allocates and initialize an array of drm_device structures, and attempts to + * Initializes an array of drm_device structures, and attempts to * initialize all available devices, using consecutive minors, registering the * stubs and initializing the AGP device. * @@ -588,88 +655,19 @@ */ static int __init drm_init( void ) { + struct pci_dev *pdev = NULL; - drm_device_t *dev; - int i; -#if __HAVE_CTX_BITMAP - int retcode; -#endif DRM_DEBUG( "\n" ); #ifdef MODULE DRM(parse_options)( drm_opts ); #endif - DRM(numdevs) = drm_count_cards(); - /* Force at least one instance. */ - if (DRM(numdevs) <= 0) - DRM(numdevs) = 1; - - DRM(device) = kmalloc(sizeof(*DRM(device)) * DRM(numdevs), GFP_KERNEL); - if (!DRM(device)) { - return -ENOMEM; - } - DRM(minor) = kmalloc(sizeof(*DRM(minor)) * DRM(numdevs), GFP_KERNEL); - if (!DRM(minor)) { - kfree(DRM(device)); - return -ENOMEM; - } - - DRIVER_PREINIT(); - DRM(mem_init)(); - for (i = 0; i < DRM(numdevs); i++) { - dev = &(DRM(device)[i]); - memset( (void *)dev, 0, sizeof(*dev) ); - dev->count_lock = SPIN_LOCK_UNLOCKED; - init_timer( &dev->timer ); - sema_init( &dev->struct_sem, 1 ); - - if ((DRM(minor)[i] = DRM(stub_register)(DRIVER_NAME, &DRM(fops),dev)) < 0) - return -EPERM; - dev->device = MKDEV(DRM_MAJOR, DRM(minor)[i] ); - dev->name = DRIVER_NAME; - -#if __REALLY_HAVE_AGP - dev->agp = DRM(agp_init)(); -#if __MUST_HAVE_AGP - if ( dev->agp == NULL ) { - DRM_ERROR( "Cannot initialize the agpgart module.\n" ); - DRM(stub_unregister)(DRM(minor)[i]); - DRM(takedown)( dev ); - return -EINVAL; - } -#endif -#if __REALLY_HAVE_MTRR - if (dev->agp) - dev->agp->agp_mtrr = mtrr_add( dev->agp->agp_info.aper_base, - dev->agp->agp_info.aper_size*1024*1024, - MTRR_TYPE_WRCOMB, - 1 ); -#endif -#endif - -#if __HAVE_CTX_BITMAP - retcode = DRM(ctxbitmap_init)( dev ); - if( retcode ) { - DRM_ERROR( "Cannot allocate memory for context bitmap.\n" ); - DRM(stub_unregister)(DRM(minor)[i]); - DRM(takedown)( dev ); - return retcode; - } -#endif - DRM_INFO( "Initialized %s %d.%d.%d %s on minor %d\n", - DRIVER_NAME, - DRIVER_MAJOR, - DRIVER_MINOR, - DRIVER_PATCHLEVEL, - DRIVER_DATE, - DRM(minor)[i] ); + while ((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { + DRM(probe)(pdev); } - - DRIVER_POSTINIT(); - return 0; } @@ -689,10 +687,10 @@ for (i = DRM(numdevs) - 1; i >= 0; i--) { dev = &(DRM(device)[i]); - if ( DRM(stub_unregister)(DRM(minor)[i]) ) { + if ( DRM(stub_unregister)(dev->minor) ) { DRM_ERROR( "Cannot unload module\n" ); } else { - DRM_DEBUG("minor %d unregistered\n", DRM(minor)[i]); + DRM_DEBUG("minor %d unregistered\n", dev->minor); if (i == 0) { DRM_INFO( "Module unloaded\n" ); } @@ -722,8 +720,6 @@ #endif } DRIVER_POSTCLEANUP(); - kfree(DRM(minor)); - kfree(DRM(device)); DRM(numdevs) = 0; } @@ -795,7 +791,7 @@ int i; for (i = 0; i < DRM(numdevs); i++) { - if (iminor(inode) == DRM(minor)[i]) { + if (iminor(inode) == DRM(device)[i].minor) { dev = &(DRM(device)[i]); break; } @@ -907,6 +903,26 @@ #endif DRM(fasync)( -1, filp, 0 ); + + down( &dev->ctxlist_sem ); + if ( !list_empty( &dev->ctxlist->head ) ) { + drm_ctx_list_t *pos, *n; + + list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) { + if ( pos->tag == priv && + pos->handle != DRM_KERNEL_CONTEXT ) { +#ifdef DRIVER_CTX_DTOR + DRIVER_CTX_DTOR(pos->handle); +#endif +#if __HAVE_CTX_BITMAP + DRM(ctxbitmap_free)( dev, pos->handle ); +#endif + list_del( &pos->head ); + DRM(free)( pos, sizeof(*pos), DRM_MEM_CTXLIST ); + } + } + } + up( &dev->ctxlist_sem ); down( &dev->struct_sem ); if ( priv->remove_auth_on_close == 1 ) { diff -Nru a/drivers/char/drm/drm_fops.h b/drivers/char/drm/drm_fops.h --- a/drivers/char/drm/drm_fops.h Tue May 18 23:38:07 2004 +++ b/drivers/char/drm/drm_fops.h Tue May 18 23:38:07 2004 @@ -72,6 +72,8 @@ priv->authenticated = capable(CAP_SYS_ADMIN); priv->lock_count = 0; + DRIVER_OPEN_HELPER( priv, dev ); + down(&dev->struct_sem); if (!dev->file_last) { priv->next = NULL; diff -Nru a/drivers/char/drm/drm_ioctl.h b/drivers/char/drm/drm_ioctl.h --- a/drivers/char/drm/drm_ioctl.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/drm_ioctl.h Tue May 18 23:38:06 2004 @@ -35,69 +35,7 @@ #include "drmP.h" - -/** - * Get interrupt from bus id. - * - * \param inode device inode. - * \param filp file pointer. - * \param cmd command. - * \param arg user argument, pointing to a drm_irq_busid structure. - * \return zero on success or a negative number on failure. - * - * Finds the PCI device with the specified bus id and gets its IRQ number. - */ -int DRM(irq_busid)(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg) -{ - drm_irq_busid_t p; - struct pci_dev *dev; - - if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p))) - return -EFAULT; -#ifdef __alpha__ - { - int domain = p.busnum >> 8; - p.busnum &= 0xff; - - /* - * Find the hose the device is on (the domain number is the - * hose index) and offset the bus by the root bus of that - * hose. - */ - for(dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,NULL); - dev; - dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,dev)) { - struct pci_controller *hose = dev->sysdata; - - if (hose->index == domain) { - p.busnum += hose->bus->number; - break; - } - } - } -#endif - dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum)); - if (!dev) { - DRM_ERROR("pci_find_slot failed for %d:%d:%d\n", - p.busnum, p.devnum, p.funcnum); - p.irq = 0; - goto out; - } - if (pci_enable_device(dev) != 0) { - DRM_ERROR("pci_enable_device failed for %d:%d:%d\n", - p.busnum, p.devnum, p.funcnum); - p.irq = 0; - goto out; - } - p.irq = dev->irq; - out: - DRM_DEBUG("%d:%d:%d => IRQ %d\n", - p.busnum, p.devnum, p.funcnum, p.irq); - if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p))) - return -EFAULT; - return 0; -} +#include "linux/pci.h" /** * Get the bus id. @@ -138,8 +76,10 @@ * \param arg user argument, pointing to a drm_unique structure. * \return zero on success or a negative number on failure. * - * Copies the bus id from userspace into drm_device::unique, and searches for - * the respective PCI device, updating drm_device::pdev. + * Copies the bus id from userspace into drm_device::unique, and verifies that + * it matches the device this DRM is attached to (EINVAL otherwise). Deprecated + * in interface version 1.1 and will return EBUSY when setversion has requested + * version 1.1 or greater. */ int DRM(setunique)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) @@ -147,6 +87,7 @@ drm_file_t *priv = filp->private_data; drm_device_t *dev = priv->dev; drm_unique_t u; + int domain, bus, slot, func, ret; if (dev->unique_len || dev->unique) return -EBUSY; @@ -164,55 +105,42 @@ dev->devname = DRM(alloc)(strlen(dev->name) + strlen(dev->unique) + 2, DRM_MEM_DRIVER); - if(!dev->devname) { - DRM(free)(dev->devname, sizeof(*dev->devname), DRM_MEM_DRIVER); + if (!dev->devname) return -ENOMEM; - } + sprintf(dev->devname, "%s@%s", dev->name, dev->unique); - do { - struct pci_dev *pci_dev; - int domain, b, d, f; - char *p; - - for(p = dev->unique; p && *p && *p != ':'; p++); - if (!p || !*p) break; - b = (int)simple_strtoul(p+1, &p, 10); - if (*p != ':') break; - d = (int)simple_strtoul(p+1, &p, 10); - if (*p != ':') break; - f = (int)simple_strtoul(p+1, &p, 10); - if (*p) break; - - domain = b >> 8; - b &= 0xff; - -#ifdef __alpha__ - /* - * Find the hose the device is on (the domain number is the - * hose index) and offset the bus by the root bus of that - * hose. - */ - for(pci_dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,NULL); - pci_dev; - pci_dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,pci_dev)) { - struct pci_controller *hose = pci_dev->sysdata; - - if (hose->index == domain) { - b += hose->bus->number; - break; - } - } -#endif + /* Return error if the busid submitted doesn't match the device's actual + * busid. + */ + ret = sscanf(dev->unique, "PCI:%d:%d:%d", &bus, &slot, &func); + if (ret != 3) + return DRM_ERR(EINVAL); + domain = bus >> 8; + bus &= 0xff; + + if ((domain != dev->pci_domain) || + (bus != dev->pci_bus) || + (slot != dev->pci_slot) || + (func != dev->pci_func)) + return -EINVAL; - pci_dev = pci_find_slot(b, PCI_DEVFN(d,f)); - if (pci_dev) { - dev->pdev = pci_dev; -#ifdef __alpha__ - dev->hose = pci_dev->sysdata; -#endif - } - } while(0); + return 0; +} + +static int +DRM(set_busid)(drm_device_t *dev) +{ + if (dev->unique != NULL) + return EBUSY; + + dev->unique_len = 20; + dev->unique = DRM(alloc)(dev->unique_len + 1, DRM_MEM_DRIVER); + if (dev->unique == NULL) + return ENOMEM; + + snprintf(dev->unique, dev->unique_len, "pci:%04x:%02x:%02x.%d", + dev->pci_domain, dev->pci_bus, dev->pci_slot, dev->pci_func); return 0; } @@ -361,5 +289,49 @@ if (copy_to_user((drm_stats_t *)arg, &stats, sizeof(stats))) return -EFAULT; + return 0; +} + +#define DRM_IF_MAJOR 1 +#define DRM_IF_MINOR 2 + +int DRM(setversion)(DRM_IOCTL_ARGS) +{ + DRM_DEVICE; + drm_set_version_t sv; + drm_set_version_t retv; + int if_version; + + DRM_COPY_FROM_USER_IOCTL(sv, (drm_set_version_t *)data, sizeof(sv)); + + retv.drm_di_major = DRM_IF_MAJOR; + retv.drm_di_minor = DRM_IF_MINOR; + retv.drm_dd_major = DRIVER_MAJOR; + retv.drm_dd_minor = DRIVER_MINOR; + + DRM_COPY_TO_USER_IOCTL((drm_set_version_t *)data, retv, sizeof(sv)); + + if (sv.drm_di_major != -1) { + if (sv.drm_di_major != DRM_IF_MAJOR || + sv.drm_di_minor < 0 || sv.drm_di_minor > DRM_IF_MINOR) + return EINVAL; + if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_dd_minor); + dev->if_version = DRM_MAX(if_version, dev->if_version); + if (sv.drm_di_minor >= 1) { + /* + * Version 1.1 includes tying of DRM to specific device + */ + DRM(set_busid)(dev); + } + } + + if (sv.drm_dd_major != -1) { + if (sv.drm_dd_major != DRIVER_MAJOR || + sv.drm_dd_minor < 0 || sv.drm_dd_minor > DRIVER_MINOR) + return EINVAL; +#ifdef DRIVER_SETVERSION + DRIVER_SETVERSION(dev, &sv); +#endif + } return 0; } diff -Nru a/drivers/char/drm/drm_irq.h b/drivers/char/drm/drm_irq.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/char/drm/drm_irq.h Tue May 18 23:38:09 2004 @@ -0,0 +1,371 @@ +/** + * \file drm_irq.h + * IRQ support + * + * \author Rickard E. (Rik) Faith + * \author Gareth Hughes + */ + +/* + * Created: Fri Mar 19 14:30:16 1999 by faith@valinux.com + * + * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. + * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" + +#include /* For task queue support */ + +#ifndef __HAVE_SHARED_IRQ +#define __HAVE_SHARED_IRQ 0 +#endif + +#if __HAVE_SHARED_IRQ +#define DRM_IRQ_TYPE SA_SHIRQ +#else +#define DRM_IRQ_TYPE 0 +#endif + +/** + * Get interrupt from bus id. + * + * \param inode device inode. + * \param filp file pointer. + * \param cmd command. + * \param arg user argument, pointing to a drm_irq_busid structure. + * \return zero on success or a negative number on failure. + * + * Finds the PCI device with the specified bus id and gets its IRQ number. + * This IOCTL is deprecated, and will now return EINVAL for any busid not equal + * to that of the device that this DRM instance attached to. + */ +int DRM(irq_by_busid)(struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg) +{ + drm_file_t *priv = filp->private_data; + drm_device_t *dev = priv->dev; + drm_irq_busid_t p; + + if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p))) + return -EFAULT; + + if ((p.busnum >> 8) != dev->pci_domain || + (p.busnum & 0xff) != dev->pci_bus || + p.devnum != dev->pci_slot || + p.funcnum != dev->pci_func) + return -EINVAL; + + p.irq = dev->irq; + + DRM_DEBUG("%d:%d:%d => IRQ %d\n", + p.busnum, p.devnum, p.funcnum, p.irq); + if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p))) + return -EFAULT; + return 0; +} + +#if __HAVE_IRQ + +/** + * Install IRQ handler. + * + * \param dev DRM device. + * \param irq IRQ number. + * + * Initializes the IRQ related data, and setups drm_device::vbl_queue. Installs the handler, calling the driver + * \c DRM(driver_irq_preinstall)() and \c DRM(driver_irq_postinstall)() functions + * before and after the installation. + */ +int DRM(irq_install)( drm_device_t *dev ) +{ + int ret; + + if ( dev->irq == 0 ) + return -EINVAL; + + down( &dev->struct_sem ); + + /* Driver must have been initialized */ + if ( !dev->dev_private ) { + up( &dev->struct_sem ); + return -EINVAL; + } + + if ( dev->irq_enabled ) { + up( &dev->struct_sem ); + return -EBUSY; + } + dev->irq_enabled = 1; + up( &dev->struct_sem ); + + DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, dev->irq ); + +#if __HAVE_DMA + dev->dma->next_buffer = NULL; + dev->dma->next_queue = NULL; + dev->dma->this_buffer = NULL; +#endif + +#if __HAVE_IRQ_BH + INIT_WORK(&dev->work, DRM(irq_immediate_bh), dev); +#endif + +#if __HAVE_VBL_IRQ + init_waitqueue_head(&dev->vbl_queue); + + spin_lock_init( &dev->vbl_lock ); + + INIT_LIST_HEAD( &dev->vbl_sigs.head ); + + dev->vbl_pending = 0; +#endif + + /* Before installing handler */ + DRM(driver_irq_preinstall)(dev); + + /* Install handler */ + ret = request_irq( dev->irq, DRM(irq_handler), + DRM_IRQ_TYPE, dev->devname, dev ); + if ( ret < 0 ) { + down( &dev->struct_sem ); + dev->irq_enabled = 0; + up( &dev->struct_sem ); + return ret; + } + + /* After installing handler */ + DRM(driver_irq_postinstall)(dev); + + return 0; +} + +/** + * Uninstall the IRQ handler. + * + * \param dev DRM device. + * + * Calls the driver's \c DRM(driver_irq_uninstall)() function, and stops the irq. + */ +int DRM(irq_uninstall)( drm_device_t *dev ) +{ + int irq_enabled; + + down( &dev->struct_sem ); + irq_enabled = dev->irq_enabled; + dev->irq_enabled = 0; + up( &dev->struct_sem ); + + if ( !irq_enabled ) + return -EINVAL; + + DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, dev->irq ); + + DRM(driver_irq_uninstall)( dev ); + + free_irq( dev->irq, dev ); + + return 0; +} + +/** + * IRQ control ioctl. + * + * \param inode device inode. + * \param filp file pointer. + * \param cmd command. + * \param arg user argument, pointing to a drm_control structure. + * \return zero on success or a negative number on failure. + * + * Calls irq_install() or irq_uninstall() according to \p arg. + */ +int DRM(control)( struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg ) +{ + drm_file_t *priv = filp->private_data; + drm_device_t *dev = priv->dev; + drm_control_t ctl; + + if ( copy_from_user( &ctl, (drm_control_t *)arg, sizeof(ctl) ) ) + return -EFAULT; + + switch ( ctl.func ) { + case DRM_INST_HANDLER: + if (dev->if_version < DRM_IF_VERSION(1, 2) && + ctl.irq != dev->irq) + return -EINVAL; + return DRM(irq_install)( dev ); + case DRM_UNINST_HANDLER: + return DRM(irq_uninstall)( dev ); + default: + return -EINVAL; + } +} + +#if __HAVE_VBL_IRQ + +/** + * Wait for VBLANK. + * + * \param inode device inode. + * \param filp file pointer. + * \param cmd command. + * \param data user argument, pointing to a drm_wait_vblank structure. + * \return zero on success or a negative number on failure. + * + * Verifies the IRQ is installed. + * + * If a signal is requested checks if this task has already scheduled the same signal + * for the same vblank sequence number - nothing to be done in + * that case. If the number of tasks waiting for the interrupt exceeds 100 the + * function fails. Otherwise adds a new entry to drm_device::vbl_sigs for this + * task. + * + * If a signal is not requested, then calls vblank_wait(). + */ +int DRM(wait_vblank)( DRM_IOCTL_ARGS ) +{ + drm_file_t *priv = filp->private_data; + drm_device_t *dev = priv->dev; + drm_wait_vblank_t vblwait; + struct timeval now; + int ret = 0; + unsigned int flags; + + if (!dev->irq) + return -EINVAL; + + DRM_COPY_FROM_USER_IOCTL( vblwait, (drm_wait_vblank_t *)data, + sizeof(vblwait) ); + + switch ( vblwait.request.type & ~_DRM_VBLANK_FLAGS_MASK ) { + case _DRM_VBLANK_RELATIVE: + vblwait.request.sequence += atomic_read( &dev->vbl_received ); + vblwait.request.type &= ~_DRM_VBLANK_RELATIVE; + case _DRM_VBLANK_ABSOLUTE: + break; + default: + return -EINVAL; + } + + flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK; + + if ( flags & _DRM_VBLANK_SIGNAL ) { + unsigned long irqflags; + drm_vbl_sig_t *vbl_sig; + + vblwait.reply.sequence = atomic_read( &dev->vbl_received ); + + spin_lock_irqsave( &dev->vbl_lock, irqflags ); + + /* Check if this task has already scheduled the same signal + * for the same vblank sequence number; nothing to be done in + * that case + */ + list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) { + if (vbl_sig->sequence == vblwait.request.sequence + && vbl_sig->info.si_signo == vblwait.request.signal + && vbl_sig->task == current) + { + spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); + goto done; + } + } + + if ( dev->vbl_pending >= 100 ) { + spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); + return -EBUSY; + } + + dev->vbl_pending++; + + spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); + + if ( !( vbl_sig = DRM_MALLOC( sizeof( drm_vbl_sig_t ) ) ) ) { + return -ENOMEM; + } + + memset( (void *)vbl_sig, 0, sizeof(*vbl_sig) ); + + vbl_sig->sequence = vblwait.request.sequence; + vbl_sig->info.si_signo = vblwait.request.signal; + vbl_sig->task = current; + + spin_lock_irqsave( &dev->vbl_lock, irqflags ); + + list_add_tail( (struct list_head *) vbl_sig, &dev->vbl_sigs.head ); + + spin_unlock_irqrestore( &dev->vbl_lock, irqflags ); + } else { + ret = DRM(vblank_wait)( dev, &vblwait.request.sequence ); + + do_gettimeofday( &now ); + vblwait.reply.tval_sec = now.tv_sec; + vblwait.reply.tval_usec = now.tv_usec; + } + +done: + DRM_COPY_TO_USER_IOCTL( (drm_wait_vblank_t *)data, vblwait, + sizeof(vblwait) ); + + return ret; +} + +/** + * Send the VBLANK signals. + * + * \param dev DRM device. + * + * Sends a signal for each task in drm_device::vbl_sigs and empties the list. + * + * If a signal is not requested, then calls vblank_wait(). + */ +void DRM(vbl_send_signals)( drm_device_t *dev ) +{ + struct list_head *list, *tmp; + drm_vbl_sig_t *vbl_sig; + unsigned int vbl_seq = atomic_read( &dev->vbl_received ); + unsigned long flags; + + spin_lock_irqsave( &dev->vbl_lock, flags ); + + list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) { + vbl_sig = list_entry( list, drm_vbl_sig_t, head ); + if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) { + vbl_sig->info.si_code = vbl_seq; + send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task ); + + list_del( list ); + + DRM_FREE( vbl_sig, sizeof(*vbl_sig) ); + + dev->vbl_pending--; + } + } + + spin_unlock_irqrestore( &dev->vbl_lock, flags ); +} + +#endif /* __HAVE_VBL_IRQ */ + +#endif /* __HAVE_IRQ */ diff -Nru a/drivers/char/drm/drm_memory_debug.h b/drivers/char/drm/drm_memory_debug.h --- a/drivers/char/drm/drm_memory_debug.h Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/drm_memory_debug.h Tue May 18 23:38:05 2004 @@ -67,6 +67,7 @@ [DRM_MEM_TOTALAGP] = { "totalagp" }, [DRM_MEM_BOUNDAGP] = { "boundagp" }, [DRM_MEM_CTXBITMAP] = { "ctxbitmap"}, + [DRM_MEM_CTXLIST] = { "ctxlist" }, [DRM_MEM_STUB] = { "stub" }, { NULL, 0, } /* Last entry must be null */ }; diff -Nru a/drivers/char/drm/drm_os_linux.h b/drivers/char/drm/drm_os_linux.h --- a/drivers/char/drm/drm_os_linux.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/drm_os_linux.h Tue May 18 23:38:09 2004 @@ -62,14 +62,20 @@ verify_area( VERIFY_READ, uaddr, size ) #define DRM_COPY_FROM_USER_UNCHECKED(arg1, arg2, arg3) \ __copy_from_user(arg1, arg2, arg3) +#define DRM_COPY_TO_USER_UNCHECKED(arg1, arg2, arg3) \ + __copy_to_user(arg1, arg2, arg3) #define DRM_GET_USER_UNCHECKED(val, uaddr) \ __get_user(val, uaddr) +#define DRM_PUT_USER_UNCHECKED(uaddr, val) \ + __put_user(val, uaddr) /** 'malloc' without the overhead of DRM(alloc)() */ #define DRM_MALLOC(x) kmalloc(x, GFP_KERNEL) /** 'free' without the overhead of DRM(free)() */ #define DRM_FREE(x,size) kfree(x) + +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data /** * Get the pointer to the SAREA. diff -Nru a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/char/drm/drm_pciids.h Tue May 18 23:38:09 2004 @@ -0,0 +1,203 @@ +/* + This file is auto-generated from the drm_pciids.txt in the DRM CVS + Please contact dri-devel@lists.sf.net to add new cards to this list +*/ +#define radeon_PCI_IDS \ + {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4237, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4336, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4337, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4437, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4965, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4966, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4967, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C58, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C59, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C5A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C65, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x514F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5158, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5159, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x515A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5168, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5169, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x516A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x516B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x516C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5836, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5837, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5960, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5961, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5962, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5963, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5968, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x596A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x596B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5c61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5c62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5c63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5c64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define r128_PCI_IDS \ + {0x1002, 0x4c45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4d46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4d4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5041, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5043, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5044, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5045, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5046, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5047, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5048, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5049, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x504F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5050, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5051, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5052, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5054, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5055, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5056, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5057, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x524b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x524c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x534d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x544C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x5452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define mga_PCI_IDS \ + {0x102b, 0x0521, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x102b, 0x0525, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x102b, 0x2527, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define mach64_PCI_IDS \ + {0x1002, 0x4749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4742, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4744, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c51, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x474c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x474f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4752, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4753, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x474d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x474e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c53, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1002, 0x4c4e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define sisdrv_PCI_IDS \ + {0x1039, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define tdfx_PCI_IDS \ + {0x121a, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x121a, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x121a, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x121a, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x121a, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x121a, 0x000b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define viadrv_PCI_IDS \ + {0x1106, 0x3022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1106, 0x3122, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1106, 0x7205, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x1106, 0x7204, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define i810_PCI_IDS \ + {0x8086, 0x7121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x7123, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x7125, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x1132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define i830_PCI_IDS \ + {0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define gamma_PCI_IDS \ + {0x3d3d, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define savage_PCI_IDS \ + {0x5333, 0x8a22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8a23, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c10, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c11, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c13, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c24, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8c2f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8a25, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8a26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8d01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8d02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0x5333, 0x8d04, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ + {0, 0, 0} + +#define ffb_PCI_IDS \ + {0, 0, 0} + diff -Nru a/drivers/char/drm/drm_sarea.h b/drivers/char/drm/drm_sarea.h --- a/drivers/char/drm/drm_sarea.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/drm_sarea.h Tue May 18 23:38:09 2004 @@ -32,8 +32,22 @@ #ifndef _DRM_SAREA_H_ #define _DRM_SAREA_H_ +#include "drm.h" + +/* SAREA area needs to be at least a page */ +#if defined(__alpha__) +#define SAREA_MAX 0x2000 +#elif defined(__ia64__) +#define SAREA_MAX 0x10000 /* 64kB */ +#else +/* Intel 830M driver needs at least 8k SAREA */ +#define SAREA_MAX 0x2000 +#endif + /** Maximum number of drawables in the SAREA */ #define SAREA_MAX_DRAWABLES 256 + +#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000 /** SAREA drawable */ typedef struct drm_sarea_drawable { diff -Nru a/drivers/char/drm/drm_stub.h b/drivers/char/drm/drm_stub.h --- a/drivers/char/drm/drm_stub.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/drm_stub.h Tue May 18 23:38:08 2004 @@ -209,8 +209,8 @@ ret2 = DRM(stub_info).info_register(name, fops, dev); if (ret2) { if (!ret1) { - unregister_chrdev(DRM_MAJOR, "drm"); - class_simple_destroy(drm_class); + unregister_chrdev(DRM_MAJOR, "drm"); + class_simple_destroy(drm_class); } if (!i) inter_module_unregister("drm"); diff -Nru a/drivers/char/drm/drm_vm.h b/drivers/char/drm/drm_vm.h --- a/drivers/char/drm/drm_vm.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/drm_vm.h Tue May 18 23:38:09 2004 @@ -35,48 +35,19 @@ #include "drmP.h" -/** AGP virtual memory operations */ -struct vm_operations_struct DRM(vm_ops) = { - .nopage = DRM(vm_nopage), - .open = DRM(vm_open), - .close = DRM(vm_close), -}; - -/** Shared virtual memory operations */ -struct vm_operations_struct DRM(vm_shm_ops) = { - .nopage = DRM(vm_shm_nopage), - .open = DRM(vm_open), - .close = DRM(vm_shm_close), -}; - -/** DMA virtual memory operations */ -struct vm_operations_struct DRM(vm_dma_ops) = { - .nopage = DRM(vm_dma_nopage), - .open = DRM(vm_open), - .close = DRM(vm_close), -}; - -/** Scatter-gather virtual memory operations */ -struct vm_operations_struct DRM(vm_sg_ops) = { - .nopage = DRM(vm_sg_nopage), - .open = DRM(vm_open), - .close = DRM(vm_close), -}; /** * \c nopage method for AGP virtual memory. * * \param vma virtual memory area. * \param address access address. - * \param write_access sharing. * \return pointer to the page structure. * * Find the right map and if it's AGP memory find the real physical page to * map, get the page, increment the use count and return it. */ -struct page *DRM(vm_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type) +static __inline__ struct page *DRM(do_vm_nopage)(struct vm_area_struct *vma, + unsigned long address) { #if __REALLY_HAVE_AGP drm_file_t *priv = vma->vm_file->private_data; @@ -131,10 +102,8 @@ DRM_DEBUG("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n", baddr, __va(agpmem->memory->memory[offset]), offset, - atomic_read(&page->count)); + page_count(page)); - if (type) - *type = VM_FAULT_MINOR; return page; } vm_nopage_error: @@ -148,15 +117,13 @@ * * \param vma virtual memory area. * \param address access address. - * \param write_access sharing. * \return pointer to the page structure. * * Get the the mapping, find the real physical page to map, get the page, and * return it. */ -struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type) +static __inline__ struct page *DRM(do_vm_shm_nopage)(struct vm_area_struct *vma, + unsigned long address) { drm_map_t *map = (drm_map_t *)vma->vm_private_data; unsigned long offset; @@ -172,8 +139,6 @@ if (!page) return NOPAGE_OOM; get_page(page); - if (type) - *type = VM_FAULT_MINOR; DRM_DEBUG("shm_nopage 0x%lx\n", address); return page; @@ -265,14 +230,12 @@ * * \param vma virtual memory area. * \param address access address. - * \param write_access sharing. * \return pointer to the page structure. * * Determine the page number from the page offset and get it from drm_device_dma::pagelist. */ -struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type) +static __inline__ struct page *DRM(do_vm_dma_nopage)(struct vm_area_struct *vma, + unsigned long address) { drm_file_t *priv = vma->vm_file->private_data; drm_device_t *dev = priv->dev; @@ -291,8 +254,6 @@ (offset & (~PAGE_MASK)))); get_page(page); - if (type) - *type = VM_FAULT_MINOR; DRM_DEBUG("dma_nopage 0x%lx (page %lu)\n", address, page_nr); return page; @@ -303,14 +264,12 @@ * * \param vma virtual memory area. * \param address access address. - * \param write_access sharing. * \return pointer to the page structure. * * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist. */ -struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, - unsigned long address, - int *type) +static __inline__ struct page *DRM(do_vm_sg_nopage)(struct vm_area_struct *vma, + unsigned long address) { drm_map_t *map = (drm_map_t *)vma->vm_private_data; drm_file_t *priv = vma->vm_file->private_data; @@ -331,11 +290,98 @@ page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT); page = entry->pagelist[page_offset]; get_page(page); - if (type) - *type = VM_FAULT_MINOR; return page; } + + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) + +static struct page *DRM(vm_nopage)(struct vm_area_struct *vma, + unsigned long address, + int *type) { + if (type) *type = VM_FAULT_MINOR; + return DRM(do_vm_nopage)(vma, address); +} + +static struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, + unsigned long address, + int *type) { + if (type) *type = VM_FAULT_MINOR; + return DRM(do_vm_shm_nopage)(vma, address); +} + +static struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, + unsigned long address, + int *type) { + if (type) *type = VM_FAULT_MINOR; + return DRM(do_vm_dma_nopage)(vma, address); +} + +static struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, + unsigned long address, + int *type) { + if (type) *type = VM_FAULT_MINOR; + return DRM(do_vm_sg_nopage)(vma, address); +} + +#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */ + +static struct page *DRM(vm_nopage)(struct vm_area_struct *vma, + unsigned long address, + int unused) { + return DRM(do_vm_nopage)(vma, address); +} + +static struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, + unsigned long address, + int unused) { + return DRM(do_vm_shm_nopage)(vma, address); +} + +static struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, + unsigned long address, + int unused) { + return DRM(do_vm_dma_nopage)(vma, address); +} + +static struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, + unsigned long address, + int unused) { + return DRM(do_vm_sg_nopage)(vma, address); +} + +#endif + + +/** AGP virtual memory operations */ +static struct vm_operations_struct DRM(vm_ops) = { + .nopage = DRM(vm_nopage), + .open = DRM(vm_open), + .close = DRM(vm_close), +}; + +/** Shared virtual memory operations */ +static struct vm_operations_struct DRM(vm_shm_ops) = { + .nopage = DRM(vm_shm_nopage), + .open = DRM(vm_open), + .close = DRM(vm_shm_close), +}; + +/** DMA virtual memory operations */ +static struct vm_operations_struct DRM(vm_dma_ops) = { + .nopage = DRM(vm_dma_nopage), + .open = DRM(vm_open), + .close = DRM(vm_close), +}; + +/** Scatter-gather virtual memory operations */ +static struct vm_operations_struct DRM(vm_sg_ops) = { + .nopage = DRM(vm_sg_nopage), + .open = DRM(vm_open), + .close = DRM(vm_close), +}; + /** * \c open method for shared virtual memory. diff -Nru a/drivers/char/drm/ffb.h b/drivers/char/drm/ffb.h --- a/drivers/char/drm/ffb.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/ffb.h Tue May 18 23:38:08 2004 @@ -13,3 +13,4 @@ #define __HAVE_KERNEL_CTX_SWITCH 1 #define __HAVE_RELEASE 1 #endif + diff -Nru a/drivers/char/drm/gamma.h b/drivers/char/drm/gamma.h --- a/drivers/char/drm/gamma.h Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/gamma.h Tue May 18 23:38:05 2004 @@ -104,8 +104,8 @@ return 0; \ } while (0) -#define __HAVE_DMA_IRQ 1 -#define __HAVE_DMA_IRQ_BH 1 +#define __HAVE_IRQ 1 +#define __HAVE_IRQ_BH 1 #define DRIVER_AGP_BUFFERS_MAP( dev ) \ ((drm_gamma_private_t *)((dev)->dev_private))->buffers diff -Nru a/drivers/char/drm/gamma_dma.c b/drivers/char/drm/gamma_dma.c --- a/drivers/char/drm/gamma_dma.c Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/gamma_dma.c Tue May 18 23:38:09 2004 @@ -116,7 +116,7 @@ return (!GAMMA_READ(GAMMA_DMACOUNT)); } -irqreturn_t gamma_dma_service( DRM_IRQ_ARGS ) +irqreturn_t gamma_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *)arg; drm_device_dma_t *dma = dev->dma; @@ -262,7 +262,7 @@ gamma_dma_schedule((drm_device_t *)dev, 0); } -void gamma_dma_immediate_bh(void *dev) +void gamma_irq_immediate_bh(void *dev) { gamma_dma_schedule(dev, 0); } @@ -656,12 +656,12 @@ { DRM_DEBUG( "%s\n", __FUNCTION__ ); -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if ( dev->irq ) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if ( dev->dev_private ) { diff -Nru a/drivers/char/drm/gamma_drv.c b/drivers/char/drm/gamma_drv.c --- a/drivers/char/drm/gamma_drv.c Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/gamma_drv.c Tue May 18 23:38:09 2004 @@ -48,6 +48,7 @@ #include "drm_fops.h" #include "drm_init.h" #include "drm_ioctl.h" +#include "drm_irq.h" #include "gamma_lists.h" /* NOTE */ #include "drm_lock.h" #include "gamma_lock.h" /* NOTE */ diff -Nru a/drivers/char/drm/i810.h b/drivers/char/drm/i810.h --- a/drivers/char/drm/i810.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/i810.h Tue May 18 23:38:06 2004 @@ -77,7 +77,6 @@ [DRM_IOCTL_NR(DRM_IOCTL_I810_MC)] = { i810_dma_mc, 1, 1 }, \ [DRM_IOCTL_NR(DRM_IOCTL_I810_RSTATUS)] = { i810_rstatus, 1, 0 }, \ [DRM_IOCTL_NR(DRM_IOCTL_I810_FLIP)] = { i810_flip_bufs, 1, 0 } - #define __HAVE_COUNTERS 4 #define __HAVE_COUNTER6 _DRM_STAT_IRQ @@ -112,7 +111,7 @@ * a noop stub is generated for compatibility. */ /* XXX: Add vblank support? */ -#define __HAVE_DMA_IRQ 0 +#define __HAVE_IRQ 0 /* Buffer customization: */ diff -Nru a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c --- a/drivers/char/drm/i810_dma.c Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/i810_dma.c Tue May 18 23:38:06 2004 @@ -232,12 +232,12 @@ { drm_device_dma_t *dma = dev->dma; -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if (dev->irq) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if (dev->dev_private) { diff -Nru a/drivers/char/drm/i830.h b/drivers/char/drm/i830.h --- a/drivers/char/drm/i830.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/i830.h Tue May 18 23:38:06 2004 @@ -115,10 +115,10 @@ #define USE_IRQS 0 #if USE_IRQS -#define __HAVE_DMA_IRQ 1 +#define __HAVE_IRQ 1 #define __HAVE_SHARED_IRQ 1 #else -#define __HAVE_DMA_IRQ 0 +#define __HAVE_IRQ 0 #endif diff -Nru a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c --- a/drivers/char/drm/i830_dma.c Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/i830_dma.c Tue May 18 23:38:05 2004 @@ -232,12 +232,12 @@ { drm_device_dma_t *dma = dev->dma; -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if (dev->irq) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if (dev->dev_private) { @@ -1540,7 +1540,7 @@ switch( param.param ) { case I830_PARAM_IRQ_ACTIVE: - value = dev->irq ? 1 : 0; + value = dev->irq_enabled; break; default: return -EINVAL; diff -Nru a/drivers/char/drm/i830_drv.c b/drivers/char/drm/i830_drv.c --- a/drivers/char/drm/i830_drv.c Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/i830_drv.c Tue May 18 23:38:06 2004 @@ -50,6 +50,7 @@ #include "drm_fops.h" #include "drm_init.h" #include "drm_ioctl.h" +#include "drm_irq.h" #include "drm_lock.h" #include "drm_memory.h" #include "drm_proc.h" diff -Nru a/drivers/char/drm/i830_irq.c b/drivers/char/drm/i830_irq.c --- a/drivers/char/drm/i830_irq.c Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/i830_irq.c Tue May 18 23:38:08 2004 @@ -35,7 +35,7 @@ #include -irqreturn_t DRM(dma_service)( DRM_IRQ_ARGS ) +irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *)arg; drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private; diff -Nru a/drivers/char/drm/mga.h b/drivers/char/drm/mga.h --- a/drivers/char/drm/mga.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/mga.h Tue May 18 23:38:09 2004 @@ -78,7 +78,7 @@ /* DMA customization: */ #define __HAVE_DMA 1 -#define __HAVE_DMA_IRQ 1 +#define __HAVE_IRQ 1 #define __HAVE_VBL_IRQ 1 #define __HAVE_SHARED_IRQ 1 diff -Nru a/drivers/char/drm/mga_dma.c b/drivers/char/drm/mga_dma.c --- a/drivers/char/drm/mga_dma.c Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/mga_dma.c Tue May 18 23:38:09 2004 @@ -500,14 +500,6 @@ return DRM_ERR(EINVAL); } - DRM_FIND_MAP( dev_priv->fb, init->fb_offset ); - if(!dev_priv->fb) { - DRM_ERROR( "failed to find framebuffer!\n" ); - /* Assign dev_private so we can do cleanup. */ - dev->dev_private = (void *)dev_priv; - mga_do_cleanup_dma( dev ); - return DRM_ERR(EINVAL); - } DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset ); if(!dev_priv->mmio) { DRM_ERROR( "failed to find mmio region!\n" ); @@ -639,12 +631,12 @@ { DRM_DEBUG( "\n" ); -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if ( dev->irq ) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if ( dev->dev_private ) { diff -Nru a/drivers/char/drm/mga_drm.h b/drivers/char/drm/mga_drm.h --- a/drivers/char/drm/mga_drm.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/mga_drm.h Tue May 18 23:38:08 2004 @@ -117,6 +117,8 @@ #define MGA_NR_TEX_REGIONS 16 #define MGA_LOG_MIN_TEX_REGION_SIZE 16 +#define DRM_MGA_IDLE_RETRY 2048 + #endif /* __MGA_SAREA_DEFINES__ */ @@ -230,16 +232,27 @@ /* MGA specific ioctls * The device specific ioctl range is 0x40 to 0x79. */ -#define DRM_IOCTL_MGA_INIT DRM_IOW( 0x40, drm_mga_init_t) -#define DRM_IOCTL_MGA_FLUSH DRM_IOW( 0x41, drm_lock_t) -#define DRM_IOCTL_MGA_RESET DRM_IO( 0x42) -#define DRM_IOCTL_MGA_SWAP DRM_IO( 0x43) -#define DRM_IOCTL_MGA_CLEAR DRM_IOW( 0x44, drm_mga_clear_t) -#define DRM_IOCTL_MGA_VERTEX DRM_IOW( 0x45, drm_mga_vertex_t) -#define DRM_IOCTL_MGA_INDICES DRM_IOW( 0x46, drm_mga_indices_t) -#define DRM_IOCTL_MGA_ILOAD DRM_IOW( 0x47, drm_mga_iload_t) -#define DRM_IOCTL_MGA_BLIT DRM_IOW( 0x48, drm_mga_blit_t) -#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(0x49, drm_mga_getparam_t) +#define DRM_MGA_INIT 0x00 +#define DRM_MGA_FLUSH 0x01 +#define DRM_MGA_RESET 0x02 +#define DRM_MGA_SWAP 0x03 +#define DRM_MGA_CLEAR 0x04 +#define DRM_MGA_VERTEX 0x05 +#define DRM_MGA_INDICES 0x06 +#define DRM_MGA_ILOAD 0x07 +#define DRM_MGA_BLIT 0x08 +#define DRM_MGA_GETPARAM 0x09 + +#define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t) +#define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, drm_lock_t) +#define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET) +#define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP) +#define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t) +#define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t) +#define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t) +#define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t) +#define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t) +#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t) typedef struct _drm_mga_warp_index { int installed; @@ -330,7 +343,7 @@ typedef struct drm_mga_getparam { int param; - int *value; + void *value; } drm_mga_getparam_t; #endif diff -Nru a/drivers/char/drm/mga_drv.c b/drivers/char/drm/mga_drv.c --- a/drivers/char/drm/mga_drv.c Tue May 18 23:38:07 2004 +++ b/drivers/char/drm/mga_drv.c Tue May 18 23:38:07 2004 @@ -45,6 +45,7 @@ #include "drm_fops.h" #include "drm_init.h" #include "drm_ioctl.h" +#include "drm_irq.h" #include "drm_lock.h" #include "drm_memory.h" #include "drm_proc.h" diff -Nru a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h --- a/drivers/char/drm/mga_drv.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/mga_drv.h Tue May 18 23:38:09 2004 @@ -91,7 +91,6 @@ unsigned int texture_size; drm_local_map_t *sarea; - drm_local_map_t *fb; drm_local_map_t *mmio; drm_local_map_t *status; drm_local_map_t *warp; diff -Nru a/drivers/char/drm/mga_irq.c b/drivers/char/drm/mga_irq.c --- a/drivers/char/drm/mga_irq.c Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/mga_irq.c Tue May 18 23:38:05 2004 @@ -36,7 +36,7 @@ #include "mga_drm.h" #include "mga_drv.h" -irqreturn_t mga_dma_service( DRM_IRQ_ARGS ) +irqreturn_t mga_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_mga_private_t *dev_priv = diff -Nru a/drivers/char/drm/r128.h b/drivers/char/drm/r128.h --- a/drivers/char/drm/r128.h Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/r128.h Tue May 18 23:38:06 2004 @@ -97,7 +97,7 @@ /* DMA customization: */ #define __HAVE_DMA 1 -#define __HAVE_DMA_IRQ 1 +#define __HAVE_IRQ 1 #define __HAVE_VBL_IRQ 1 #define __HAVE_SHARED_IRQ 1 diff -Nru a/drivers/char/drm/r128_cce.c b/drivers/char/drm/r128_cce.c --- a/drivers/char/drm/r128_cce.c Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/r128_cce.c Tue May 18 23:38:05 2004 @@ -212,7 +212,7 @@ int i; for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { - if ( GET_RING_HEAD( &dev_priv->ring ) == dev_priv->ring.tail ) { + if ( GET_RING_HEAD( dev_priv ) == dev_priv->ring.tail ) { int pm4stat = R128_READ( R128_PM4_STAT ); if ( ( (pm4stat & R128_PM4_FIFOCNT_MASK) >= dev_priv->cce_fifo_size ) && @@ -238,7 +238,8 @@ r128_do_wait_for_idle( dev_priv ); R128_WRITE( R128_PM4_BUFFER_CNTL, - dev_priv->cce_mode | dev_priv->ring.size_l2qw ); + dev_priv->cce_mode | dev_priv->ring.size_l2qw + | R128_PM4_BUFFER_CNTL_NOUPDATE ); R128_READ( R128_PM4_BUFFER_ADDR ); /* as per the sample code */ R128_WRITE( R128_PM4_MICRO_CNTL, R128_PM4_MICRO_FREERUN ); @@ -253,7 +254,6 @@ { R128_WRITE( R128_PM4_BUFFER_DL_WPTR, 0 ); R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 ); - SET_RING_HEAD( &dev_priv->ring, 0 ); dev_priv->ring.tail = 0; } @@ -264,7 +264,8 @@ static void r128_do_cce_stop( drm_r128_private_t *dev_priv ) { R128_WRITE( R128_PM4_MICRO_CNTL, 0 ); - R128_WRITE( R128_PM4_BUFFER_CNTL, R128_PM4_NONPM4 ); + R128_WRITE( R128_PM4_BUFFER_CNTL, + R128_PM4_NONPM4 | R128_PM4_BUFFER_CNTL_NOUPDATE ); dev_priv->cce_running = 0; } @@ -333,26 +334,6 @@ R128_WRITE( R128_PM4_BUFFER_DL_WPTR, 0 ); R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 ); - /* DL_RPTR_ADDR is a physical address in AGP space. */ - SET_RING_HEAD( &dev_priv->ring, 0 ); - - if ( !dev_priv->is_pci ) { - R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR, - dev_priv->ring_rptr->offset ); - } else { - drm_sg_mem_t *entry = dev->sg; - unsigned long tmp_ofs, page_ofs; - - tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; - page_ofs = tmp_ofs >> PAGE_SHIFT; - - R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR, - entry->busaddr[page_ofs]); - DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n", - (unsigned long) entry->busaddr[page_ofs], - entry->handle + tmp_ofs ); - } - /* Set watermark control */ R128_WRITE( R128_PM4_BUFFER_WM_CNTL, ((R128_WATERMARK_L/4) << R128_WMA_SHIFT) @@ -486,13 +467,6 @@ return DRM_ERR(EINVAL); } - DRM_FIND_MAP( dev_priv->fb, init->fb_offset ); - if(!dev_priv->fb) { - DRM_ERROR("could not find framebuffer!\n"); - dev->dev_private = (void *)dev_priv; - r128_do_cleanup_cce( dev ); - return DRM_ERR(EINVAL); - } DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset ); if(!dev_priv->mmio) { DRM_ERROR("could not find mmio region!\n"); @@ -567,9 +541,6 @@ #endif dev_priv->cce_buffers_offset = dev->sg->handle; - dev_priv->ring.head = ((__volatile__ u32 *) - dev_priv->ring_rptr->handle); - dev_priv->ring.start = (u32 *)dev_priv->cce_ring->handle; dev_priv->ring.end = ((u32 *)dev_priv->cce_ring->handle + init->ring_size / sizeof(u32)); @@ -580,7 +551,6 @@ (dev_priv->ring.size / sizeof(u32)) - 1; dev_priv->ring.high_mark = 128; - dev_priv->ring.ring_rptr = dev_priv->ring_rptr; dev_priv->sarea_priv->last_frame = 0; R128_WRITE( R128_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame ); @@ -589,8 +559,9 @@ R128_WRITE( R128_LAST_DISPATCH_REG, dev_priv->sarea_priv->last_dispatch ); -#if __REALLY_HAVE_SG +#if __REALLY_HAVE_AGP if ( dev_priv->is_pci ) { +#endif if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart, &dev_priv->bus_pci_gart) ) { DRM_ERROR( "failed to init PCI GART!\n" ); @@ -599,6 +570,7 @@ return DRM_ERR(ENOMEM); } R128_WRITE( R128_PCI_GART_PAGE, dev_priv->bus_pci_gart ); +#if __REALLY_HAVE_AGP } #endif @@ -615,12 +587,12 @@ int r128_do_cleanup_cce( drm_device_t *dev ) { -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if ( dev->irq ) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if ( dev->dev_private ) { @@ -901,7 +873,7 @@ int i; for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { - r128_update_ring_snapshot( ring ); + r128_update_ring_snapshot( dev_priv ); if ( ring->space >= n ) return 0; DRM_UDELAY( 1 ); diff -Nru a/drivers/char/drm/r128_drm.h b/drivers/char/drm/r128_drm.h --- a/drivers/char/drm/r128_drm.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/r128_drm.h Tue May 18 23:38:08 2004 @@ -176,24 +176,47 @@ /* Rage 128 specific ioctls * The device specific ioctl range is 0x40 to 0x79. */ -#define DRM_IOCTL_R128_INIT DRM_IOW( 0x40, drm_r128_init_t) -#define DRM_IOCTL_R128_CCE_START DRM_IO( 0x41) -#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( 0x42, drm_r128_cce_stop_t) -#define DRM_IOCTL_R128_CCE_RESET DRM_IO( 0x43) -#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( 0x44) -#define DRM_IOCTL_R128_RESET DRM_IO( 0x46) -#define DRM_IOCTL_R128_SWAP DRM_IO( 0x47) -#define DRM_IOCTL_R128_CLEAR DRM_IOW( 0x48, drm_r128_clear_t) -#define DRM_IOCTL_R128_VERTEX DRM_IOW( 0x49, drm_r128_vertex_t) -#define DRM_IOCTL_R128_INDICES DRM_IOW( 0x4a, drm_r128_indices_t) -#define DRM_IOCTL_R128_BLIT DRM_IOW( 0x4b, drm_r128_blit_t) -#define DRM_IOCTL_R128_DEPTH DRM_IOW( 0x4c, drm_r128_depth_t) -#define DRM_IOCTL_R128_STIPPLE DRM_IOW( 0x4d, drm_r128_stipple_t) -#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(0x4f, drm_r128_indirect_t) -#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( 0x50, drm_r128_fullscreen_t) -#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( 0x51, drm_r128_clear2_t) -#define DRM_IOCTL_R128_GETPARAM DRM_IOW( 0x52, drm_r128_getparam_t) -#define DRM_IOCTL_R128_FLIP DRM_IO( 0x53) +#define DRM_R128_INIT 0x00 +#define DRM_R128_CCE_START 0x01 +#define DRM_R128_CCE_STOP 0x02 +#define DRM_R128_CCE_RESET 0x03 +#define DRM_R128_CCE_IDLE 0x04 +/* 0x05 not used */ +#define DRM_R128_RESET 0x06 +#define DRM_R128_SWAP 0x07 +#define DRM_R128_CLEAR 0x08 +#define DRM_R128_VERTEX 0x09 +#define DRM_R128_INDICES 0x0a +#define DRM_R128_BLIT 0x0b +#define DRM_R128_DEPTH 0x0c +#define DRM_R128_STIPPLE 0x0d +/* 0x0e not used */ +#define DRM_R128_INDIRECT 0x0f +#define DRM_R128_FULLSCREEN 0x10 +#define DRM_R128_CLEAR2 0x11 +#define DRM_R128_GETPARAM 0x12 +#define DRM_R128_FLIP 0x13 + +#define DRM_IOCTL_R128_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t) +#define DRM_IOCTL_R128_CCE_START DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_START) +#define DRM_IOCTL_R128_CCE_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t) +#define DRM_IOCTL_R128_CCE_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_RESET) +#define DRM_IOCTL_R128_CCE_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_R128_CCE_IDLE) +/* 0x05 not used */ +#define DRM_IOCTL_R128_RESET DRM_IO( DRM_COMMAND_BASE + DRM_R128_RESET) +#define DRM_IOCTL_R128_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_R128_SWAP) +#define DRM_IOCTL_R128_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t) +#define DRM_IOCTL_R128_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t) +#define DRM_IOCTL_R128_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t) +#define DRM_IOCTL_R128_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t) +#define DRM_IOCTL_R128_DEPTH DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t) +#define DRM_IOCTL_R128_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t) +/* 0x0e not used */ +#define DRM_IOCTL_R128_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t) +#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t) +#define DRM_IOCTL_R128_CLEAR2 DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t) +#define DRM_IOCTL_R128_GETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t) +#define DRM_IOCTL_R128_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_R128_FLIP) typedef struct drm_r128_init { enum { @@ -316,7 +339,7 @@ typedef struct drm_r128_getparam { int param; - int *value; + void *value; } drm_r128_getparam_t; #endif diff -Nru a/drivers/char/drm/r128_drv.c b/drivers/char/drm/r128_drv.c --- a/drivers/char/drm/r128_drv.c Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/r128_drv.c Tue May 18 23:38:06 2004 @@ -47,6 +47,7 @@ #include "drm_fops.h" #include "drm_init.h" #include "drm_ioctl.h" +#include "drm_irq.h" #include "drm_lock.h" #include "drm_memory.h" #include "drm_proc.h" diff -Nru a/drivers/char/drm/r128_drv.h b/drivers/char/drm/r128_drv.h --- a/drivers/char/drm/r128_drv.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/r128_drv.h Tue May 18 23:38:09 2004 @@ -34,8 +34,7 @@ #ifndef __R128_DRV_H__ #define __R128_DRV_H__ -#define GET_RING_HEAD(ring) DRM_READ32( (ring)->ring_rptr, 0 ) /* (ring)->head */ -#define SET_RING_HEAD(ring,val) DRM_WRITE32( (ring)->ring_rptr, 0, (val) ) /* (ring)->head */ +#define GET_RING_HEAD(dev_priv) R128_READ( R128_PM4_BUFFER_DL_RPTR ) typedef struct drm_r128_freelist { unsigned int age; @@ -50,13 +49,11 @@ int size; int size_l2qw; - volatile u32 *head; u32 tail; u32 tail_mask; int space; int high_mark; - drm_local_map_t *ring_rptr; } drm_r128_ring_buffer_t; typedef struct drm_r128_private { @@ -100,7 +97,6 @@ u32 span_pitch_offset_c; drm_local_map_t *sarea; - drm_local_map_t *fb; drm_local_map_t *mmio; drm_local_map_t *cce_ring; drm_local_map_t *ring_rptr; @@ -132,14 +128,6 @@ extern int r128_wait_ring( drm_r128_private_t *dev_priv, int n ); -static __inline__ void -r128_update_ring_snapshot( drm_r128_ring_buffer_t *ring ) -{ - ring->space = (GET_RING_HEAD( ring ) - ring->tail) * sizeof(u32); - if ( ring->space <= 0 ) - ring->space += ring->size; -} - extern int r128_do_cce_idle( drm_r128_private_t *dev_priv ); extern int r128_do_cleanup_cce( drm_device_t *dev ); extern int r128_do_cleanup_pageflip( drm_device_t *dev ); @@ -279,6 +267,7 @@ # define R128_PM4_64PIO_64VCBM_64INDBM (7 << 28) # define R128_PM4_64BM_64VCBM_64INDBM (8 << 28) # define R128_PM4_64PIO_64VCPIO_64INDPIO (15 << 28) +# define R128_PM4_BUFFER_CNTL_NOUPDATE (1 << 27) #define R128_PM4_BUFFER_WM_CNTL 0x0708 # define R128_WMA_SHIFT 0 @@ -403,6 +392,15 @@ (pkt) | ((n) << 16)) +static __inline__ void +r128_update_ring_snapshot( drm_r128_private_t *dev_priv ) +{ + drm_r128_ring_buffer_t *ring = &dev_priv->ring; + ring->space = (GET_RING_HEAD( dev_priv ) - ring->tail) * sizeof(u32); + if ( ring->space <= 0 ) + ring->space += ring->size; +} + /* ================================================================ * Misc helper macros */ @@ -412,7 +410,7 @@ drm_r128_ring_buffer_t *ring = &dev_priv->ring; int i; \ if ( ring->space < ring->high_mark ) { \ for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) { \ - r128_update_ring_snapshot( ring ); \ + r128_update_ring_snapshot( dev_priv ); \ if ( ring->space >= ring->high_mark ) \ goto __ring_space_done; \ DRM_UDELAY(1); \ @@ -445,17 +443,10 @@ * Ring control */ -#if defined(__powerpc__) -#define r128_flush_write_combine() (void) GET_RING_HEAD( &dev_priv->ring ) -#else -#define r128_flush_write_combine() DRM_WRITEMEMORYBARRIER() -#endif - - #define R128_VERBOSE 0 #define RING_LOCALS \ - int write; unsigned int tail_mask; volatile u32 *ring; + int write, _nr; unsigned int tail_mask; volatile u32 *ring; #define BEGIN_RING( n ) do { \ if ( R128_VERBOSE ) { \ @@ -463,9 +454,10 @@ (n), __FUNCTION__ ); \ } \ if ( dev_priv->ring.space <= (n) * sizeof(u32) ) { \ + COMMIT_RING(); \ r128_wait_ring( dev_priv, (n) * sizeof(u32) ); \ } \ - dev_priv->ring.space -= (n) * sizeof(u32); \ + _nr = n; dev_priv->ring.space -= (n) * sizeof(u32); \ ring = dev_priv->ring.start; \ write = dev_priv->ring.tail; \ tail_mask = dev_priv->ring.tail_mask; \ @@ -488,9 +480,23 @@ dev_priv->ring.start, \ write * sizeof(u32) ); \ } \ - r128_flush_write_combine(); \ - dev_priv->ring.tail = write; \ - R128_WRITE( R128_PM4_BUFFER_DL_WPTR, write ); \ + if (((dev_priv->ring.tail + _nr) & tail_mask) != write) { \ + DRM_ERROR( \ + "ADVANCE_RING(): mismatch: nr: %x write: %x line: %d\n", \ + ((dev_priv->ring.tail + _nr) & tail_mask), \ + write, __LINE__); \ + } else \ + dev_priv->ring.tail = write; \ +} while (0) + +#define COMMIT_RING() do { \ + if ( R128_VERBOSE ) { \ + DRM_INFO( "COMMIT_RING() tail=0x%06x\n", \ + dev_priv->ring.tail ); \ + } \ + DRM_MEMORYBARRIER(); \ + R128_WRITE( R128_PM4_BUFFER_DL_WPTR, dev_priv->ring.tail ); \ + R128_READ( R128_PM4_BUFFER_DL_WPTR ); \ } while (0) #define OUT_RING( x ) do { \ diff -Nru a/drivers/char/drm/r128_irq.c b/drivers/char/drm/r128_irq.c --- a/drivers/char/drm/r128_irq.c Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/r128_irq.c Tue May 18 23:38:09 2004 @@ -36,7 +36,7 @@ #include "r128_drm.h" #include "r128_drv.h" -irqreturn_t r128_dma_service( DRM_IRQ_ARGS ) +irqreturn_t r128_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_r128_private_t *dev_priv = diff -Nru a/drivers/char/drm/r128_state.c b/drivers/char/drm/r128_state.c --- a/drivers/char/drm/r128_state.c Tue May 18 23:38:05 2004 +++ b/drivers/char/drm/r128_state.c Tue May 18 23:38:05 2004 @@ -45,7 +45,7 @@ RING_LOCALS; DRM_DEBUG( " %s\n", __FUNCTION__ ); - BEGIN_RING( 17 ); + BEGIN_RING( (count < 3? count: 3) * 5 + 2 ); if ( count >= 1 ) { OUT_RING( CCE_PACKET0( R128_AUX1_SC_LEFT, 3 ) ); @@ -1011,7 +1011,7 @@ DRM_DEBUG( "\n" ); count = depth->n; - if (count > 4096 || count <= 0) + if (count > 4096 || count <= 0) return -EMSGSIZE; xbuf_size = count * sizeof(*x); @@ -1280,6 +1280,7 @@ sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS; r128_cce_dispatch_clear( dev, &clear ); + COMMIT_RING(); /* Make sure we restore the 3D state next time. */ @@ -1315,8 +1316,10 @@ R128_WRITE( R128_CRTC_OFFSET, dev_priv->crtc_offset ); R128_WRITE( R128_CRTC_OFFSET_CNTL, dev_priv->crtc_offset_cntl ); - if (dev_priv->current_page != 0) + if (dev_priv->current_page != 0) { r128_cce_dispatch_flip( dev ); + COMMIT_RING(); + } dev_priv->page_flipping = 0; return 0; @@ -1341,6 +1344,7 @@ r128_cce_dispatch_flip( dev ); + COMMIT_RING(); return 0; } @@ -1362,6 +1366,7 @@ dev_priv->sarea_priv->dirty |= (R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS); + COMMIT_RING(); return 0; } @@ -1421,6 +1426,7 @@ r128_cce_dispatch_vertex( dev, buf ); + COMMIT_RING(); return 0; } @@ -1492,6 +1498,7 @@ r128_cce_dispatch_indices( dev, buf, elts.start, elts.end, count ); + COMMIT_RING(); return 0; } @@ -1501,6 +1508,7 @@ drm_device_dma_t *dma = dev->dma; drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_blit_t blit; + int ret; LOCK_TEST_WITH_RETURN( dev, filp ); @@ -1518,7 +1526,10 @@ RING_SPACE_TEST_WITH_RETURN( dev_priv ); VB_AGE_TEST_WITH_RETURN( dev_priv ); - return r128_cce_dispatch_blit( filp, dev, &blit ); + ret = r128_cce_dispatch_blit( filp, dev, &blit ); + + COMMIT_RING(); + return ret; } int r128_cce_depth( DRM_IOCTL_ARGS ) @@ -1526,6 +1537,7 @@ DRM_DEVICE; drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_depth_t depth; + int ret; LOCK_TEST_WITH_RETURN( dev, filp ); @@ -1534,18 +1546,20 @@ RING_SPACE_TEST_WITH_RETURN( dev_priv ); + ret = DRM_ERR(EINVAL); switch ( depth.func ) { case R128_WRITE_SPAN: - return r128_cce_dispatch_write_span( dev, &depth ); + ret = r128_cce_dispatch_write_span( dev, &depth ); case R128_WRITE_PIXELS: - return r128_cce_dispatch_write_pixels( dev, &depth ); + ret = r128_cce_dispatch_write_pixels( dev, &depth ); case R128_READ_SPAN: - return r128_cce_dispatch_read_span( dev, &depth ); + ret = r128_cce_dispatch_read_span( dev, &depth ); case R128_READ_PIXELS: - return r128_cce_dispatch_read_pixels( dev, &depth ); + ret = r128_cce_dispatch_read_pixels( dev, &depth ); } - return DRM_ERR(EINVAL); + COMMIT_RING(); + return ret; } int r128_cce_stipple( DRM_IOCTL_ARGS ) @@ -1568,6 +1582,7 @@ r128_cce_dispatch_stipple( dev, mask ); + COMMIT_RING(); return 0; } @@ -1643,6 +1658,7 @@ */ r128_cce_dispatch_indirect( dev, buf, indirect.start, indirect.end ); + COMMIT_RING(); return 0; } diff -Nru a/drivers/char/drm/radeon.h b/drivers/char/drm/radeon.h --- a/drivers/char/drm/radeon.h Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/radeon.h Tue May 18 23:38:09 2004 @@ -51,7 +51,7 @@ #define DRIVER_DATE "20020828" #define DRIVER_MAJOR 1 -#define DRIVER_MINOR 9 +#define DRIVER_MINOR 10 #define DRIVER_PATCHLEVEL 0 /* Interface history: @@ -81,6 +81,9 @@ * Add 'GET' queries for starting additional clients on different VT's. * 1.9 - Add DRM_IOCTL_RADEON_CP_RESUME ioctl. * Add texture rectangle support for r100. + * 1.10- Add SETPARAM ioctl; first parameter to set is FB_LOCATION, which + * clients use to tell the DRM where they think the framebuffer is + * located in the card's address space */ #define DRIVER_IOCTLS \ [DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \ @@ -106,10 +109,21 @@ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_ALLOC)] = { radeon_mem_alloc, 1, 0 }, \ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_FREE)] = { radeon_mem_free, 1, 0 }, \ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_INIT_HEAP)] = { radeon_mem_init_heap, 1, 1 }, \ - [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_EMIT)] = { radeon_irq_emit, 1, 0 }, \ - [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_WAIT)] = { radeon_irq_wait, 1, 0 }, + [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_EMIT)] = { radeon_irq_emit, 1, 0 }, \ + [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_WAIT)] = { radeon_irq_wait, 1, 0 }, \ + [DRM_IOCTL_NR(DRM_IOCTL_RADEON_SETPARAM)] = { radeon_cp_setparam, 1, 0 }, \ +#define DRIVER_FILE_FIELDS \ + int64_t radeon_fb_delta; \ +#define DRIVER_OPEN_HELPER( filp_priv, dev ) \ +do { \ + drm_radeon_private_t *dev_priv = dev->dev_private; \ + if ( dev_priv ) \ + filp_priv->radeon_fb_delta = dev_priv->fb_location; \ + else \ + filp_priv->radeon_fb_delta = 0; \ +} while( 0 ) /* When a client dies: * - Check for and clean up flipped page state @@ -142,7 +156,7 @@ /* DMA customization: */ #define __HAVE_DMA 1 -#define __HAVE_DMA_IRQ 1 +#define __HAVE_IRQ 1 #define __HAVE_VBL_IRQ 1 #define __HAVE_SHARED_IRQ 1 diff -Nru a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c --- a/drivers/char/drm/radeon_cp.c Tue May 18 23:38:06 2004 +++ b/drivers/char/drm/radeon_cp.c Tue May 18 23:38:06 2004 @@ -855,7 +855,8 @@ /* Initialize the memory controller */ RADEON_WRITE( RADEON_MC_FB_LOCATION, - (dev_priv->gart_vm_start - 1) & 0xffff0000 ); + ( ( dev_priv->gart_vm_start - 1 ) & 0xffff0000 ) + | ( dev_priv->fb_location >> 16 ) ); #if __REALLY_HAVE_AGP if ( !dev_priv->is_pci ) { @@ -1071,13 +1072,6 @@ dev_priv->depth_offset = init->depth_offset; dev_priv->depth_pitch = init->depth_pitch; - dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) | - (dev_priv->front_offset >> 10)); - dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) | - (dev_priv->back_offset >> 10)); - dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) | - (dev_priv->depth_offset >> 10)); - /* Hardware state for depth clears. Remove this if/when we no * longer clear the depth buffer with a 3D rectangle. Hard-code * all values to prevent unwanted 3D state from slipping through @@ -1124,13 +1118,6 @@ return DRM_ERR(EINVAL); } - DRM_FIND_MAP( dev_priv->fb, init->fb_offset ); - if(!dev_priv->fb) { - DRM_ERROR("could not find framebuffer!\n"); - dev->dev_private = (void *)dev_priv; - radeon_do_cleanup_cp(dev); - return DRM_ERR(EINVAL); - } DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset ); if(!dev_priv->mmio) { DRM_ERROR("could not find mmio region!\n"); @@ -1204,9 +1191,26 @@ dev_priv->buffers->handle ); } + dev_priv->fb_location = ( RADEON_READ( RADEON_MC_FB_LOCATION ) + & 0xffff ) << 16; + + dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) | + ( ( dev_priv->front_offset + + dev_priv->fb_location ) >> 10 ) ); + + dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) | + ( ( dev_priv->back_offset + + dev_priv->fb_location ) >> 10 ) ); + + dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) | + ( ( dev_priv->depth_offset + + dev_priv->fb_location ) >> 10 ) ); + dev_priv->gart_size = init->gart_size; - dev_priv->gart_vm_start = RADEON_READ( RADEON_CONFIG_APER_SIZE ); + dev_priv->gart_vm_start = dev_priv->fb_location + + RADEON_READ( RADEON_CONFIG_APER_SIZE ); + #if __REALLY_HAVE_AGP if ( !dev_priv->is_pci ) dev_priv->gart_buffers_offset = (dev_priv->buffers->offset @@ -1271,12 +1275,12 @@ { DRM_DEBUG( "\n" ); -#if _HAVE_DMA_IRQ +#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ - if ( dev->irq ) DRM(irq_uninstall)(dev); + if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); #endif if ( dev->dev_private ) { diff -Nru a/drivers/char/drm/radeon_drm.h b/drivers/char/drm/radeon_drm.h --- a/drivers/char/drm/radeon_drm.h Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/radeon_drm.h Tue May 18 23:38:08 2004 @@ -226,6 +226,13 @@ #define RADEON_MAX_TEXTURE_LEVELS 12 #define RADEON_MAX_TEXTURE_UNITS 3 +/* Blits have strict offset rules. All blit offset must be aligned on + * a 1K-byte boundary. + */ +#define RADEON_OFFSET_SHIFT 10 +#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) +#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) + #endif /* __RADEON_SAREA_DEFINES__ */ typedef struct { @@ -365,31 +372,58 @@ /* Radeon specific ioctls * The device specific ioctl range is 0x40 to 0x79. */ -#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( 0x40, drm_radeon_init_t) -#define DRM_IOCTL_RADEON_CP_START DRM_IO( 0x41) -#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( 0x42, drm_radeon_cp_stop_t) -#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( 0x43) -#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( 0x44) -#define DRM_IOCTL_RADEON_RESET DRM_IO( 0x45) -#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( 0x46, drm_radeon_fullscreen_t) -#define DRM_IOCTL_RADEON_SWAP DRM_IO( 0x47) -#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( 0x48, drm_radeon_clear_t) -#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( 0x49, drm_radeon_vertex_t) -#define DRM_IOCTL_RADEON_INDICES DRM_IOW( 0x4a, drm_radeon_indices_t) -#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( 0x4c, drm_radeon_stipple_t) -#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(0x4d, drm_radeon_indirect_t) -#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(0x4e, drm_radeon_texture_t) -#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( 0x4f, drm_radeon_vertex2_t) -#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( 0x50, drm_radeon_cmd_buffer_t) -#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(0x51, drm_radeon_getparam_t) -#define DRM_IOCTL_RADEON_FLIP DRM_IO( 0x52) -#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR( 0x53, drm_radeon_mem_alloc_t) -#define DRM_IOCTL_RADEON_FREE DRM_IOW( 0x54, drm_radeon_mem_free_t) -#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( 0x55, drm_radeon_mem_init_heap_t) -#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR( 0x56, drm_radeon_irq_emit_t) -#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( 0x57, drm_radeon_irq_wait_t) -/* added by Charl P. Botha - see radeon_cp.c for details */ -#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO(0x58) +#define DRM_RADEON_CP_INIT 0x00 +#define DRM_RADEON_CP_START 0x01 +#define DRM_RADEON_CP_STOP 0x02 +#define DRM_RADEON_CP_RESET 0x03 +#define DRM_RADEON_CP_IDLE 0x04 +#define DRM_RADEON_RESET 0x05 +#define DRM_RADEON_FULLSCREEN 0x06 +#define DRM_RADEON_SWAP 0x07 +#define DRM_RADEON_CLEAR 0x08 +#define DRM_RADEON_VERTEX 0x09 +#define DRM_RADEON_INDICES 0x0A +#define DRM_RADEON_NOT_USED +#define DRM_RADEON_STIPPLE 0x0C +#define DRM_RADEON_INDIRECT 0x0D +#define DRM_RADEON_TEXTURE 0x0E +#define DRM_RADEON_VERTEX2 0x0F +#define DRM_RADEON_CMDBUF 0x10 +#define DRM_RADEON_GETPARAM 0x11 +#define DRM_RADEON_FLIP 0x12 +#define DRM_RADEON_ALLOC 0x13 +#define DRM_RADEON_FREE 0x14 +#define DRM_RADEON_INIT_HEAP 0x15 +#define DRM_RADEON_IRQ_EMIT 0x16 +#define DRM_RADEON_IRQ_WAIT 0x17 +#define DRM_RADEON_CP_RESUME 0x18 +#define DRM_RADEON_SETPARAM 0x19 + +#define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) +#define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) +#define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) +#define DRM_IOCTL_RADEON_CP_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) +#define DRM_IOCTL_RADEON_CP_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) +#define DRM_IOCTL_RADEON_RESET DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_RESET) +#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t) +#define DRM_IOCTL_RADEON_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_SWAP) +#define DRM_IOCTL_RADEON_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) +#define DRM_IOCTL_RADEON_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) +#define DRM_IOCTL_RADEON_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) +#define DRM_IOCTL_RADEON_STIPPLE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) +#define DRM_IOCTL_RADEON_INDIRECT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) +#define DRM_IOCTL_RADEON_TEXTURE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) +#define DRM_IOCTL_RADEON_VERTEX2 DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) +#define DRM_IOCTL_RADEON_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) +#define DRM_IOCTL_RADEON_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) +#define DRM_IOCTL_RADEON_FLIP DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_FLIP) +#define DRM_IOCTL_RADEON_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) +#define DRM_IOCTL_RADEON_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) +#define DRM_IOCTL_RADEON_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t) +#define DRM_IOCTL_RADEON_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) +#define DRM_IOCTL_RADEON_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) +#define DRM_IOCTL_RADEON_CP_RESUME DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) +#define DRM_IOCTL_RADEON_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) typedef struct drm_radeon_init { enum { @@ -502,7 +536,7 @@ } drm_radeon_tex_image_t; typedef struct drm_radeon_texture { - int offset; + unsigned int offset; int pitch; int format; int width; /* Texture image coordinates */ @@ -537,10 +571,11 @@ #define RADEON_PARAM_STATUS_HANDLE 8 #define RADEON_PARAM_SAREA_HANDLE 9 #define RADEON_PARAM_GART_TEX_HANDLE 10 +#define RADEON_PARAM_SCRATCH_OFFSET 11 typedef struct drm_radeon_getparam { int param; - int *value; + void *value; } drm_radeon_getparam_t; /* 1.6: Set up a memory manager for regions of shared memory: @@ -576,6 +611,18 @@ typedef struct drm_radeon_irq_wait { int irq_seq; } drm_radeon_irq_wait_t; + + +/* 1.10: Clients tell the DRM where they think the framebuffer is located in + * the card's address space, via a new generic ioctl to set parameters + */ + +typedef struct drm_radeon_setparam { + unsigned int param; + int64_t value; +} drm_radeon_setparam_t; + +#define RADEON_SETPARAM_FB_LOCATION 1 /* determined framebuffer location */ #endif diff -Nru a/drivers/char/drm/radeon_drv.c b/drivers/char/drm/radeon_drv.c --- a/drivers/char/drm/radeon_drv.c Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/radeon_drv.c Tue May 18 23:38:08 2004 @@ -48,6 +48,7 @@ #include "drm_fops.h" #include "drm_init.h" #include "drm_ioctl.h" +#include "drm_irq.h" #include "drm_lock.h" #include "drm_memory.h" #include "drm_proc.h" diff -Nru a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h --- a/drivers/char/drm/radeon_drv.h Tue May 18 23:38:07 2004 +++ b/drivers/char/drm/radeon_drv.h Tue May 18 23:38:07 2004 @@ -73,6 +73,8 @@ drm_radeon_ring_buffer_t ring; drm_radeon_sarea_t *sarea_priv; + u32 fb_location; + int gart_size; u32 gart_vm_start; unsigned long gart_buffers_offset; @@ -133,7 +135,6 @@ unsigned long gart_textures_offset; drm_local_map_t *sarea; - drm_local_map_t *fb; drm_local_map_t *mmio; drm_local_map_t *cp_ring; drm_local_map_t *ring_rptr; @@ -184,6 +185,7 @@ extern int radeon_cp_vertex2( DRM_IOCTL_ARGS ); extern int radeon_cp_cmdbuf( DRM_IOCTL_ARGS ); extern int radeon_cp_getparam( DRM_IOCTL_ARGS ); +extern int radeon_cp_setparam( DRM_IOCTL_ARGS ); extern int radeon_cp_flip( DRM_IOCTL_ARGS ); extern int radeon_mem_alloc( DRM_IOCTL_ARGS ); @@ -239,6 +241,7 @@ #define RADEON_CRTC2_OFFSET 0x0324 #define RADEON_CRTC2_OFFSET_CNTL 0x0328 +#define RADEON_RB3D_COLOROFFSET 0x1c40 #define RADEON_RB3D_COLORPITCH 0x1c48 #define RADEON_DP_GUI_MASTER_CNTL 0x146c @@ -332,6 +335,7 @@ #define RADEON_PP_MISC 0x1c14 #define RADEON_PP_ROT_MATRIX_0 0x1d58 #define RADEON_PP_TXFILTER_0 0x1c54 +#define RADEON_PP_TXOFFSET_0 0x1c5c #define RADEON_PP_TXFILTER_1 0x1c6c #define RADEON_PP_TXFILTER_2 0x1c84 diff -Nru a/drivers/char/drm/radeon_irq.c b/drivers/char/drm/radeon_irq.c --- a/drivers/char/drm/radeon_irq.c Tue May 18 23:38:09 2004 +++ b/drivers/char/drm/radeon_irq.c Tue May 18 23:38:09 2004 @@ -54,7 +54,7 @@ * tied to dma at all, this is just a hangover from dri prehistory. */ -irqreturn_t DRM(dma_service)( DRM_IRQ_ARGS ) +irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_radeon_private_t *dev_priv = diff -Nru a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c --- a/drivers/char/drm/radeon_state.c Tue May 18 23:38:08 2004 +++ b/drivers/char/drm/radeon_state.c Tue May 18 23:38:08 2004 @@ -36,6 +36,240 @@ /* ================================================================ + * Helper functions for client state checking and fixup + */ + +static __inline__ int radeon_check_and_fixup_offset( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + u32 *offset ) { + u32 off = *offset; + + if ( off >= dev_priv->fb_location && + off < ( dev_priv->gart_vm_start + dev_priv->gart_size ) ) + return 0; + + off += filp_priv->radeon_fb_delta; + + DRM_DEBUG( "offset fixed up to 0x%x\n", off ); + + if ( off < dev_priv->fb_location || + off >= ( dev_priv->gart_vm_start + dev_priv->gart_size ) ) + return DRM_ERR( EINVAL ); + + *offset = off; + + return 0; +} + +static __inline__ int radeon_check_and_fixup_offset_user( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + u32 *offset ) { + u32 off; + + DRM_GET_USER_UNCHECKED( off, offset ); + + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &off ) ) + return DRM_ERR( EINVAL ); + + DRM_PUT_USER_UNCHECKED( offset, off ); + + return 0; +} + +static __inline__ int radeon_check_and_fixup_packets( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + int id, + u32 *data ) { + switch ( id ) { + + case RADEON_EMIT_PP_MISC: + if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv, + &data[( RADEON_RB3D_DEPTHOFFSET + - RADEON_PP_MISC ) / 4] ) ) { + DRM_ERROR( "Invalid depth buffer offset\n" ); + return DRM_ERR( EINVAL ); + } + break; + + case RADEON_EMIT_PP_CNTL: + if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv, + &data[( RADEON_RB3D_COLOROFFSET + - RADEON_PP_CNTL ) / 4] ) ) { + DRM_ERROR( "Invalid colour buffer offset\n" ); + return DRM_ERR( EINVAL ); + } + break; + + case R200_EMIT_PP_TXOFFSET_0: + case R200_EMIT_PP_TXOFFSET_1: + case R200_EMIT_PP_TXOFFSET_2: + case R200_EMIT_PP_TXOFFSET_3: + case R200_EMIT_PP_TXOFFSET_4: + case R200_EMIT_PP_TXOFFSET_5: + if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv, + &data[0] ) ) { + DRM_ERROR( "Invalid R200 texture offset\n" ); + return DRM_ERR( EINVAL ); + } + break; + + case RADEON_EMIT_PP_TXFILTER_0: + case RADEON_EMIT_PP_TXFILTER_1: + case RADEON_EMIT_PP_TXFILTER_2: + if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv, + &data[( RADEON_PP_TXOFFSET_0 + - RADEON_PP_TXFILTER_0 ) / 4] ) ) { + DRM_ERROR( "Invalid R100 texture offset\n" ); + return DRM_ERR( EINVAL ); + } + break; + + case R200_EMIT_PP_CUBIC_OFFSETS_0: + case R200_EMIT_PP_CUBIC_OFFSETS_1: + case R200_EMIT_PP_CUBIC_OFFSETS_2: + case R200_EMIT_PP_CUBIC_OFFSETS_3: + case R200_EMIT_PP_CUBIC_OFFSETS_4: + case R200_EMIT_PP_CUBIC_OFFSETS_5: { + int i; + for ( i = 0; i < 5; i++ ) { + if ( radeon_check_and_fixup_offset_user( dev_priv, + filp_priv, + &data[i] ) ) { + DRM_ERROR( "Invalid R200 cubic texture offset\n" ); + return DRM_ERR( EINVAL ); + } + } + break; + } + + case RADEON_EMIT_RB3D_COLORPITCH: + case RADEON_EMIT_RE_LINE_PATTERN: + case RADEON_EMIT_SE_LINE_WIDTH: + case RADEON_EMIT_PP_LUM_MATRIX: + case RADEON_EMIT_PP_ROT_MATRIX_0: + case RADEON_EMIT_RB3D_STENCILREFMASK: + case RADEON_EMIT_SE_VPORT_XSCALE: + case RADEON_EMIT_SE_CNTL: + case RADEON_EMIT_SE_CNTL_STATUS: + case RADEON_EMIT_RE_MISC: + case RADEON_EMIT_PP_BORDER_COLOR_0: + case RADEON_EMIT_PP_BORDER_COLOR_1: + case RADEON_EMIT_PP_BORDER_COLOR_2: + case RADEON_EMIT_SE_ZBIAS_FACTOR: + case RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT: + case RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED: + case R200_EMIT_PP_TXCBLEND_0: + case R200_EMIT_PP_TXCBLEND_1: + case R200_EMIT_PP_TXCBLEND_2: + case R200_EMIT_PP_TXCBLEND_3: + case R200_EMIT_PP_TXCBLEND_4: + case R200_EMIT_PP_TXCBLEND_5: + case R200_EMIT_PP_TXCBLEND_6: + case R200_EMIT_PP_TXCBLEND_7: + case R200_EMIT_TCL_LIGHT_MODEL_CTL_0: + case R200_EMIT_TFACTOR_0: + case R200_EMIT_VTX_FMT_0: + case R200_EMIT_VAP_CTL: + case R200_EMIT_MATRIX_SELECT_0: + case R200_EMIT_TEX_PROC_CTL_2: + case R200_EMIT_TCL_UCP_VERT_BLEND_CTL: + case R200_EMIT_PP_TXFILTER_0: + case R200_EMIT_PP_TXFILTER_1: + case R200_EMIT_PP_TXFILTER_2: + case R200_EMIT_PP_TXFILTER_3: + case R200_EMIT_PP_TXFILTER_4: + case R200_EMIT_PP_TXFILTER_5: + case R200_EMIT_VTE_CNTL: + case R200_EMIT_OUTPUT_VTX_COMP_SEL: + case R200_EMIT_PP_TAM_DEBUG3: + case R200_EMIT_PP_CNTL_X: + case R200_EMIT_RB3D_DEPTHXY_OFFSET: + case R200_EMIT_RE_AUX_SCISSOR_CNTL: + case R200_EMIT_RE_SCISSOR_TL_0: + case R200_EMIT_RE_SCISSOR_TL_1: + case R200_EMIT_RE_SCISSOR_TL_2: + case R200_EMIT_SE_VAP_CNTL_STATUS: + case R200_EMIT_SE_VTX_STATE_CNTL: + case R200_EMIT_RE_POINTSIZE: + case R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0: + case R200_EMIT_PP_CUBIC_FACES_0: + case R200_EMIT_PP_CUBIC_FACES_1: + case R200_EMIT_PP_CUBIC_FACES_2: + case R200_EMIT_PP_CUBIC_FACES_3: + case R200_EMIT_PP_CUBIC_FACES_4: + case R200_EMIT_PP_CUBIC_FACES_5: + case RADEON_EMIT_PP_TEX_SIZE_0: + case RADEON_EMIT_PP_TEX_SIZE_1: + case RADEON_EMIT_PP_TEX_SIZE_2: + /* These packets don't contain memory offsets */ + break; + + default: + DRM_ERROR( "Unknown state packet ID %d\n", id ); + return DRM_ERR( EINVAL ); + } + + return 0; +} + +static __inline__ int radeon_check_and_fixup_packet3( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + drm_radeon_cmd_buffer_t *cmdbuf, + unsigned int *cmdsz ) { + u32 tmp[4], *cmd = ( u32* )cmdbuf->buf; + + if ( DRM_COPY_FROM_USER_UNCHECKED( tmp, cmd, sizeof( tmp ) ) ) { + DRM_ERROR( "Failed to copy data from user space\n" ); + return DRM_ERR( EFAULT ); + } + + *cmdsz = 2 + ( ( tmp[0] & RADEON_CP_PACKET_COUNT_MASK ) >> 16 ); + + if ( ( tmp[0] & 0xc0000000 ) != RADEON_CP_PACKET3 ) { + DRM_ERROR( "Not a type 3 packet\n" ); + return DRM_ERR( EINVAL ); + } + + if ( 4 * *cmdsz > cmdbuf->bufsz ) { + DRM_ERROR( "Packet size larger than size of data provided\n" ); + return DRM_ERR( EINVAL ); + } + + /* Check client state and fix it up if necessary */ + if ( tmp[0] & 0x8000 ) { /* MSB of opcode: next DWORD GUI_CNTL */ + u32 offset; + + if ( tmp[1] & ( RADEON_GMC_SRC_PITCH_OFFSET_CNTL + | RADEON_GMC_DST_PITCH_OFFSET_CNTL ) ) { + offset = tmp[2] << 10; + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &offset ) ) { + DRM_ERROR( "Invalid first packet offset\n" ); + return DRM_ERR( EINVAL ); + } + tmp[2] = ( tmp[2] & 0xffc00000 ) | offset >> 10; + } + + if ( ( tmp[1] & RADEON_GMC_SRC_PITCH_OFFSET_CNTL ) && + ( tmp[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL ) ) { + offset = tmp[3] << 10; + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &offset ) ) { + DRM_ERROR( "Invalid second packet offset\n" ); + return DRM_ERR( EINVAL ); + } + tmp[3] = ( tmp[3] & 0xffc00000 ) | offset >> 10; + } + + if ( DRM_COPY_TO_USER_UNCHECKED( cmd, tmp, sizeof( tmp ) ) ) { + DRM_ERROR( "Failed to copy data to user space\n" ); + return DRM_ERR( EFAULT ); + } + } + + return 0; +} + + +/* ================================================================ * CP hardware state programming functions */ @@ -57,15 +291,28 @@ /* Emit 1.1 state */ -static void radeon_emit_state( drm_radeon_private_t *dev_priv, - drm_radeon_context_regs_t *ctx, - drm_radeon_texture_regs_t *tex, - unsigned int dirty ) +static int radeon_emit_state( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + drm_radeon_context_regs_t *ctx, + drm_radeon_texture_regs_t *tex, + unsigned int dirty ) { RING_LOCALS; DRM_DEBUG( "dirty=0x%08x\n", dirty ); if ( dirty & RADEON_UPLOAD_CONTEXT ) { + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, + &ctx->rb3d_depthoffset ) ) { + DRM_ERROR( "Invalid depth buffer offset\n" ); + return DRM_ERR( EINVAL ); + } + + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, + &ctx->rb3d_coloroffset ) ) { + DRM_ERROR( "Invalid depth buffer offset\n" ); + return DRM_ERR( EINVAL ); + } + BEGIN_RING( 14 ); OUT_RING( CP_PACKET0( RADEON_PP_MISC, 6 ) ); OUT_RING( ctx->pp_misc ); @@ -149,6 +396,12 @@ } if ( dirty & RADEON_UPLOAD_TEX0 ) { + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, + &tex[0].pp_txoffset ) ) { + DRM_ERROR( "Invalid texture offset for unit 0\n" ); + return DRM_ERR( EINVAL ); + } + BEGIN_RING( 9 ); OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_0, 5 ) ); OUT_RING( tex[0].pp_txfilter ); @@ -163,6 +416,12 @@ } if ( dirty & RADEON_UPLOAD_TEX1 ) { + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, + &tex[1].pp_txoffset ) ) { + DRM_ERROR( "Invalid texture offset for unit 1\n" ); + return DRM_ERR( EINVAL ); + } + BEGIN_RING( 9 ); OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_1, 5 ) ); OUT_RING( tex[1].pp_txfilter ); @@ -177,6 +436,12 @@ } if ( dirty & RADEON_UPLOAD_TEX2 ) { + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, + &tex[2].pp_txoffset ) ) { + DRM_ERROR( "Invalid texture offset for unit 2\n" ); + return DRM_ERR( EINVAL ); + } + BEGIN_RING( 9 ); OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_2, 5 ) ); OUT_RING( tex[2].pp_txfilter ); @@ -189,12 +454,15 @@ OUT_RING( tex[2].pp_border_color ); ADVANCE_RING(); } + + return 0; } /* Emit 1.2 state */ -static void radeon_emit_state2( drm_radeon_private_t *dev_priv, - drm_radeon_state_t *state ) +static int radeon_emit_state2( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, + drm_radeon_state_t *state ) { RING_LOCALS; @@ -206,7 +474,7 @@ ADVANCE_RING(); } - radeon_emit_state( dev_priv, &state->context, + return radeon_emit_state( dev_priv, filp_priv, &state->context, state->tex, state->dirty ); } @@ -1065,6 +1333,7 @@ drm_radeon_tex_image_t *image ) { drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; drm_buf_t *buf; u32 format; u32 *buffer; @@ -1074,6 +1343,13 @@ int i; RING_LOCALS; + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + + if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &tex->offset ) ) { + DRM_ERROR( "Invalid destination offset\n" ); + return DRM_ERR( EINVAL ); + } + dev_priv->stats.boxes |= RADEON_BOX_TEXTURE_LOAD; /* Flush the pixel cache. This ensures no pixel data gets mixed @@ -1377,6 +1653,7 @@ { DRM_DEVICE; drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_device_dma_t *dma = dev->dma; drm_buf_t *buf; @@ -1390,6 +1667,8 @@ return DRM_ERR(EINVAL); } + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + DRM_COPY_FROM_USER_IOCTL( vertex, (drm_radeon_vertex_t *)data, sizeof(vertex) ); @@ -1429,11 +1708,14 @@ buf->used = vertex.count; /* not used? */ if ( sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS ) { - radeon_emit_state( dev_priv, - &sarea_priv->context_state, - sarea_priv->tex_state, - sarea_priv->dirty ); - + if ( radeon_emit_state( dev_priv, filp_priv, + &sarea_priv->context_state, + sarea_priv->tex_state, + sarea_priv->dirty ) ) { + DRM_ERROR( "radeon_emit_state failed\n" ); + return DRM_ERR( EINVAL ); + } + sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES | RADEON_UPLOAD_TEX1IMAGES | RADEON_UPLOAD_TEX2IMAGES | @@ -1461,6 +1743,7 @@ { DRM_DEVICE; drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_device_dma_t *dma = dev->dma; drm_buf_t *buf; @@ -1475,6 +1758,8 @@ return DRM_ERR(EINVAL); } + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + DRM_COPY_FROM_USER_IOCTL( elts, (drm_radeon_indices_t *)data, sizeof(elts) ); @@ -1523,10 +1808,13 @@ buf->used = elts.end; if ( sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS ) { - radeon_emit_state( dev_priv, - &sarea_priv->context_state, - sarea_priv->tex_state, - sarea_priv->dirty ); + if ( radeon_emit_state( dev_priv, filp_priv, + &sarea_priv->context_state, + sarea_priv->tex_state, + sarea_priv->dirty ) ) { + DRM_ERROR( "radeon_emit_state failed\n" ); + return DRM_ERR( EINVAL ); + } sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES | RADEON_UPLOAD_TEX1IMAGES | @@ -1686,6 +1974,7 @@ { DRM_DEVICE; drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_device_dma_t *dma = dev->dma; drm_buf_t *buf; @@ -1700,6 +1989,8 @@ return DRM_ERR(EINVAL); } + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + DRM_COPY_FROM_USER_IOCTL( vertex, (drm_radeon_vertex2_t *)data, sizeof(vertex) ); @@ -1747,7 +2038,10 @@ sizeof(state) ) ) return DRM_ERR(EFAULT); - radeon_emit_state2( dev_priv, &state ); + if ( radeon_emit_state2( dev_priv, filp_priv, &state ) ) { + DRM_ERROR( "radeon_emit_state2 failed\n" ); + return DRM_ERR( EINVAL ); + } laststate = prim.stateidx; } @@ -1784,6 +2078,7 @@ static int radeon_emit_packets( drm_radeon_private_t *dev_priv, + drm_file_t *filp_priv, drm_radeon_cmd_header_t header, drm_radeon_cmd_buffer_t *cmdbuf ) { @@ -1798,8 +2093,15 @@ sz = packet[id].len; reg = packet[id].start; - if (sz * sizeof(int) > cmdbuf->bufsz) + if (sz * sizeof(int) > cmdbuf->bufsz) { + DRM_ERROR( "Packet size provided larger than data provided\n" ); return DRM_ERR(EINVAL); + } + + if ( radeon_check_and_fixup_packets( dev_priv, filp_priv, id, data ) ) { + DRM_ERROR( "Packet verification failed\n" ); + return DRM_ERR( EINVAL ); + } BEGIN_RING(sz+1); OUT_RING( CP_PACKET0( reg, (sz-1) ) ); @@ -1882,24 +2184,21 @@ static int radeon_emit_packet3( drm_device_t *dev, + drm_file_t *filp_priv, drm_radeon_cmd_buffer_t *cmdbuf ) { drm_radeon_private_t *dev_priv = dev->dev_private; - int cmdsz, tmp; - int *cmd = (int *)cmdbuf->buf; + unsigned int cmdsz; + int *cmd = (int *)cmdbuf->buf, ret; RING_LOCALS; - DRM_DEBUG("\n"); - if (DRM_GET_USER_UNCHECKED( tmp, &cmd[0])) - return DRM_ERR(EFAULT); - - cmdsz = 2 + ((tmp & RADEON_CP_PACKET_COUNT_MASK) >> 16); - - if ((tmp & 0xc0000000) != RADEON_CP_PACKET3 || - cmdsz * 4 > cmdbuf->bufsz) - return DRM_ERR(EINVAL); + if ( ( ret = radeon_check_and_fixup_packet3( dev_priv, filp_priv, + cmdbuf, &cmdsz ) ) ) { + DRM_ERROR( "Packet verification failed\n" ); + return ret; + } BEGIN_RING( cmdsz ); OUT_RING_USER_TABLE( cmd, cmdsz ); @@ -1912,27 +2211,25 @@ static int radeon_emit_packet3_cliprect( drm_device_t *dev, + drm_file_t *filp_priv, drm_radeon_cmd_buffer_t *cmdbuf, int orig_nbox ) { drm_radeon_private_t *dev_priv = dev->dev_private; drm_clip_rect_t box; - int cmdsz, tmp; - int *cmd = (int *)cmdbuf->buf; + unsigned int cmdsz; + int *cmd = (int *)cmdbuf->buf, ret; drm_clip_rect_t *boxes = cmdbuf->boxes; int i = 0; RING_LOCALS; DRM_DEBUG("\n"); - if (DRM_GET_USER_UNCHECKED( tmp, &cmd[0])) - return DRM_ERR(EFAULT); - - cmdsz = 2 + ((tmp & RADEON_CP_PACKET_COUNT_MASK) >> 16); - - if ((tmp & 0xc0000000) != RADEON_CP_PACKET3 || - cmdsz * 4 > cmdbuf->bufsz) - return DRM_ERR(EINVAL); + if ( ( ret = radeon_check_and_fixup_packet3( dev_priv, filp_priv, + cmdbuf, &cmdsz ) ) ) { + DRM_ERROR( "Packet verification failed\n" ); + return ret; + } if (!orig_nbox) goto out; @@ -2009,6 +2306,7 @@ { DRM_DEVICE; drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; drm_device_dma_t *dma = dev->dma; drm_buf_t *buf = 0; int idx; @@ -2023,6 +2321,8 @@ return DRM_ERR(EINVAL); } + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + DRM_COPY_FROM_USER_IOCTL( cmdbuf, (drm_radeon_cmd_buffer_t *)data, sizeof(cmdbuf) ); @@ -2053,7 +2353,7 @@ switch (header.header.cmd_type) { case RADEON_CMD_PACKET: DRM_DEBUG("RADEON_CMD_PACKET\n"); - if (radeon_emit_packets( dev_priv, header, &cmdbuf )) { + if (radeon_emit_packets( dev_priv, filp_priv, header, &cmdbuf )) { DRM_ERROR("radeon_emit_packets failed\n"); return DRM_ERR(EINVAL); } @@ -2096,7 +2396,7 @@ case RADEON_CMD_PACKET3: DRM_DEBUG("RADEON_CMD_PACKET3\n"); - if (radeon_emit_packet3( dev, &cmdbuf )) { + if (radeon_emit_packet3( dev, filp_priv, &cmdbuf )) { DRM_ERROR("radeon_emit_packet3 failed\n"); return DRM_ERR(EINVAL); } @@ -2104,7 +2404,7 @@ case RADEON_CMD_PACKET3_CLIP: DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n"); - if (radeon_emit_packet3_cliprect( dev, &cmdbuf, orig_nbox )) { + if (radeon_emit_packet3_cliprect( dev, filp_priv, &cmdbuf, orig_nbox )) { DRM_ERROR("radeon_emit_packet3_clip failed\n"); return DRM_ERR(EINVAL); } @@ -2212,5 +2512,33 @@ return DRM_ERR(EFAULT); } + return 0; +} + +int radeon_cp_setparam( DRM_IOCTL_ARGS ) { + DRM_DEVICE; + drm_radeon_private_t *dev_priv = dev->dev_private; + drm_file_t *filp_priv; + drm_radeon_setparam_t sp; + + if ( !dev_priv ) { + DRM_ERROR( "%s called with no initialization\n", __FUNCTION__ ); + return DRM_ERR( EINVAL ); + } + + DRM_GET_PRIV_WITH_RETURN( filp_priv, filp ); + + DRM_COPY_FROM_USER_IOCTL( sp, ( drm_radeon_setparam_t* )data, + sizeof( sp ) ); + + switch( sp.param ) { + case RADEON_SETPARAM_FB_LOCATION: + filp_priv->radeon_fb_delta = dev_priv->fb_location - sp.value; + break; + default: + DRM_DEBUG( "Invalid parameter %d\n", sp.param ); + return DRM_ERR( EINVAL ); + } + return 0; } diff -Nru a/drivers/char/drm/tdfx.h b/drivers/char/drm/tdfx.h --- a/drivers/char/drm/tdfx.h Tue May 18 23:38:07 2004 +++ b/drivers/char/drm/tdfx.h Tue May 18 23:38:07 2004 @@ -39,4 +39,14 @@ #define __HAVE_MTRR 1 #define __HAVE_CTX_BITMAP 1 +#define DRIVER_AUTHOR "VA Linux Systems Inc." + +#define DRIVER_NAME "tdfx" +#define DRIVER_DESC "3dfx Banshee/Voodoo3+" +#define DRIVER_DATE "20010216" + +#define DRIVER_MAJOR 1 +#define DRIVER_MINOR 0 +#define DRIVER_PATCHLEVEL 0 + #endif diff -Nru a/drivers/char/drm/tdfx_drv.c b/drivers/char/drm/tdfx_drv.c --- a/drivers/char/drm/tdfx_drv.c Tue May 18 23:38:07 2004 +++ b/drivers/char/drm/tdfx_drv.c Tue May 18 23:38:07 2004 @@ -34,47 +34,6 @@ #include "tdfx.h" #include "drmP.h" -#define DRIVER_AUTHOR "VA Linux Systems Inc." - -#define DRIVER_NAME "tdfx" -#define DRIVER_DESC "3dfx Banshee/Voodoo3+" -#define DRIVER_DATE "20010216" - -#define DRIVER_MAJOR 1 -#define DRIVER_MINOR 0 -#define DRIVER_PATCHLEVEL 0 - -#ifndef PCI_VENDOR_ID_3DFX -#define PCI_VENDOR_ID_3DFX 0x121A -#endif -#ifndef PCI_DEVICE_ID_3DFX_VOODOO5 -#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009 -#endif -#ifndef PCI_DEVICE_ID_3DFX_VOODOO4 -#define PCI_DEVICE_ID_3DFX_VOODOO4 0x0007 -#endif -#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_3000 /* Voodoo3 3000 */ -#define PCI_DEVICE_ID_3DFX_VOODOO3_3000 0x0005 -#endif -#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_2000 /* Voodoo3 3000 */ -#define PCI_DEVICE_ID_3DFX_VOODOO3_2000 0x0004 -#endif -#ifndef PCI_DEVICE_ID_3DFX_BANSHEE -#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003 -#endif - -static drm_pci_list_t DRM(idlist)[] = { - { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE }, - { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_2000 }, - { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_3000 }, - { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO4 }, - { PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO5 }, - { 0, 0 } -}; - -#define DRIVER_CARD_LIST DRM(idlist) - - #include "drm_auth.h" #include "drm_bufs.h" #include "drm_context.h" diff -Nru a/drivers/char/dz.c b/drivers/char/dz.c --- a/drivers/char/dz.c Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1540 +0,0 @@ -/* - * dz.c: Serial port driver for DECStations equiped - * with the DZ chipset. - * - * Copyright (C) 1998 Olivier A. D. Lebaillif - * - * Email: olivier.lebaillif@ifrsys.com - * - * [31-AUG-98] triemer - * Changed IRQ to use Harald's dec internals interrupts.h - * removed base_addr code - moving address assignment to setup.c - * Changed name of dz_init to rs_init to be consistent with tc code - * [13-NOV-98] triemer fixed code to receive characters - * after patches by harald to irq code. - * [09-JAN-99] triemer minor fix for schedule - due to removal of timeout - * field from "current" - somewhere between 2.1.121 and 2.1.131 -Qua Jun 27 15:02:26 BRT 2001 - * [27-JUN-2001] Arnaldo Carvalho de Melo - cleanups - * - * Parts (C) 1999 David Airlie, airlied@linux.ie - * [07-SEP-99] Bugfixes - */ - -/* #define DEBUG_DZ 1 */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include /* for definition of SERIAL */ - -/* for definition of struct console */ -#ifdef CONFIG_SERIAL_CONSOLE -#define CONSOLE_LINE (3) -#endif /* ifdef CONFIG_SERIAL_CONSOLE */ -#if defined(CONFIG_SERIAL_CONSOLE) || defined(DEBUG_DZ) -#include -#endif /* if defined(CONFIG_SERIAL_CONSOLE) || defined(DEBUG_DZ) */ - -#include -#include - -#include -#include -#include -#include -#include - -#ifdef DEBUG_DZ -#include -#include -#include - -extern int (*prom_printf) (char *,...); -#endif - - - -#include "dz.h" - -#define DZ_INTR_DEBUG 1 - -DECLARE_TASK_QUEUE(tq_serial); - -static struct dz_serial *lines[4]; -static unsigned char tmp_buffer[256]; - - - -#ifdef DEBUG_DZ -/* - * debugging code to send out chars via prom - */ -static void debug_console( const char *s,int count) -{ - unsigned i; - - for (i = 0; i < count; i++) { - if (*s == 10) - prom_printf("%c", 13); - prom_printf("%c", *s++); - } -} -#endif - -/* - * ------------------------------------------------------------ - * dz_in () and dz_out () - * - * These routines are used to access the registers of the DZ - * chip, hiding relocation differences between implementation. - * ------------------------------------------------------------ - */ - -static inline unsigned short dz_in (struct dz_serial *info, unsigned offset) -{ - volatile u16 *addr = (volatile u16 *)(info->port + offset); - - return *addr; -} - -static inline void dz_out (struct dz_serial *info, unsigned offset, - unsigned short value) -{ - volatile u16 *addr = (volatile u16 *)(info->port + offset); - *addr = value; -} - -/* - * ------------------------------------------------------------ - * rs_stop () and rs_start () - * - * These routines are called before setting or resetting - * tty->stopped. They enable or disable transmitter interrupts, - * as necessary. - * ------------------------------------------------------------ - */ - -static void dz_stop (struct tty_struct *tty) -{ - struct dz_serial *info; - unsigned short mask, tmp; - - if (!tty) - return; - - info = (struct dz_serial *)tty->driver_data; - - mask = 1 << info->line; - tmp = dz_in (info, DZ_TCR); /* read the TX flag */ - - tmp &= ~mask; /* clear the TX flag */ - dz_out (info, DZ_TCR, tmp); -} - -static void dz_start (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - unsigned short mask, tmp; - - mask = 1 << info->line; - tmp = dz_in (info, DZ_TCR); /* read the TX flag */ - - tmp |= mask; /* set the TX flag */ - dz_out (info, DZ_TCR, tmp); -} - -/* - * ------------------------------------------------------------ - * Here starts the interrupt handling routines. All of the - * following subroutines are declared as inline and are folded - * into dz_interrupt. They were separated out for readability's - * sake. - * - * Note: rs_interrupt() is a "fast" interrupt, which means that it - * runs with interrupts turned off. People who may want to modify - * rs_interrupt() should try to keep the interrupt handler as fast as - * possible. After you are done making modifications, it is not a bad - * idea to do: - * - * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer dz.c - * - * and look at the resulting assemble code in serial.s. - * - * ------------------------------------------------------------ - */ - -/* - * ------------------------------------------------------------ - * dz_sched_event () - * - * This routine is used by the interrupt handler to schedule - * processing in the software interrupt portion of the driver. - * ------------------------------------------------------------ - */ -static inline void dz_sched_event (struct dz_serial *info, int event) -{ - info->event |= 1 << event; - queue_task(&info->tqueue, &tq_serial); - mark_bh(SERIAL_BH); -} - -/* - * ------------------------------------------------------------ - * receive_char () - * - * This routine deals with inputs from any lines. - * ------------------------------------------------------------ - */ -static inline void receive_chars (struct dz_serial *info_in) -{ - struct dz_serial *info; - struct tty_struct *tty = 0; - struct async_icount *icount; - int ignore = 0; - unsigned short status, tmp; - unsigned char ch; - - /* - * This code is going to be a problem... the call to tty_flip_buffer - * is going to need to be rethought... - */ - do { - status = dz_in (info_in, DZ_RBUF); - info = lines[LINE(status)]; - - /* punt so we don't get duplicate characters */ - if (!(status & DZ_DVAL)) - goto ignore_char; - - ch = UCHAR(status); /* grab the char */ - -#if 0 - if (info->is_console) { - if (ch == 0) - return; /* it's a break ... */ - } -#endif - - tty = info->tty; /* now tty points to the proper dev */ - icount = &info->icount; - - if (!tty) - break; - if (tty->flip.count >= TTY_FLIPBUF_SIZE) break; - - *tty->flip.char_buf_ptr = ch; - *tty->flip.flag_buf_ptr = 0; - icount->rx++; - - /* keep track of the statistics */ - if (status & (DZ_OERR | DZ_FERR | DZ_PERR)) { - if (status & DZ_PERR) /* parity error */ - icount->parity++; - else if (status & DZ_FERR) /* frame error */ - icount->frame++; - if (status & DZ_OERR) /* overrun error */ - icount->overrun++; - - /* - * Check to see if we should ignore the character and - * mask off conditions that should be ignored - */ - - if (status & info->ignore_status_mask) { - if (++ignore > 100) - break; - goto ignore_char; - } - - /* mask off the error conditions we want to ignore */ - tmp = status & info->read_status_mask; - - if (tmp & DZ_PERR) { - *tty->flip.flag_buf_ptr = TTY_PARITY; -#ifdef DEBUG_DZ - debug_console("PERR\n",5); -#endif /* DEBUG_DZ */ - } else if (tmp & DZ_FERR) { - *tty->flip.flag_buf_ptr = TTY_FRAME; -#ifdef DEBUG_DZ - debug_console("FERR\n",5); -#endif /* DEBUG_DZ */ - } if (tmp & DZ_OERR) { -#ifdef DEBUG_DZ - debug_console("OERR\n",5); -#endif /* DEBUG_DZ */ - if (tty->flip.count < TTY_FLIPBUF_SIZE) { - tty->flip.count++; - tty->flip.flag_buf_ptr++; - tty->flip.char_buf_ptr++; - *tty->flip.flag_buf_ptr = TTY_OVERRUN; - } - } - } - tty->flip.flag_buf_ptr++; - tty->flip.char_buf_ptr++; - tty->flip.count++; -ignore_char: - ; - } while (status & DZ_DVAL); - - if (tty) - tty_flip_buffer_push(tty); -} - -/* - * ------------------------------------------------------------ - * transmit_char () - * - * This routine deals with outputs to any lines. - * ------------------------------------------------------------ - */ -static inline void transmit_chars (struct dz_serial *info) -{ - unsigned char tmp; - - if (info->x_char) { /* XON/XOFF chars */ - dz_out(info, DZ_TDR, info->x_char); - info->icount.tx++; - info->x_char = 0; - return; - } - - /* if nothing to do or stopped or hardware stopped */ - if ((info->xmit_cnt <= 0) || info->tty->stopped || - info->tty->hw_stopped) { - dz_stop(info->tty); - return; - } - - /* - * If something to do ... (rember the dz has no output fifo so we go - * one char at a time :-< - */ - tmp = (unsigned short) info->xmit_buf[info->xmit_tail++]; - dz_out(info, DZ_TDR, tmp); - info->xmit_tail = info->xmit_tail & (DZ_XMIT_SIZE - 1); - info->icount.tx++; - - if (--info->xmit_cnt < WAKEUP_CHARS) - dz_sched_event(info, DZ_EVENT_WRITE_WAKEUP); - - /* Are we done */ - if (info->xmit_cnt <= 0) - dz_stop(info->tty); -} - -/* - * ------------------------------------------------------------ - * check_modem_status () - * - * Only valid for the MODEM line duh ! - * ------------------------------------------------------------ - */ -static inline void check_modem_status (struct dz_serial *info) -{ - unsigned short status; - - /* if not ne modem line just return */ - if (info->line != DZ_MODEM) - return; - - status = dz_in(info, DZ_MSR); - - /* it's easy, since DSR2 is the only bit in the register */ - if (status) - info->icount.dsr++; -} - -/* - * ------------------------------------------------------------ - * dz_interrupt () - * - * this is the main interrupt routine for the DZ chip. - * It deals with the multiple ports. - * ------------------------------------------------------------ - */ -static void dz_interrupt (int irq, void *dev, struct pt_regs *regs) -{ - struct dz_serial *info; - unsigned short status; - - /* get the reason why we just got an irq */ - status = dz_in((struct dz_serial *)dev, DZ_CSR); - info = lines[LINE(status)]; /* re-arrange info the proper port */ - - if (status & DZ_RDONE) - receive_chars(info); /* the receive function */ - - if (status & DZ_TRDY) - transmit_chars (info); -} - -/* - * ------------------------------------------------------------------- - * Here ends the DZ interrupt routines. - * ------------------------------------------------------------------- - */ - -/* - * This routine is used to handle the "bottom half" processing for the - * serial driver, known also the "software interrupt" processing. - * This processing is done at the kernel interrupt level, after the - * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON. This - * is where time-consuming activities which can not be done in the - * interrupt driver proper are done; the interrupt driver schedules - * them using rs_sched_event(), and they get done here. - */ -static void do_serial_bh (void) -{ - run_task_queue (&tq_serial); -} - -static void do_softint (void *private_data) -{ - struct dz_serial *info = (struct dz_serial *) private_data; - struct tty_struct *tty = info->tty; - - if (!tty) - return; - - if (test_and_clear_bit(DZ_EVENT_WRITE_WAKEUP, &info->event)) { - if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - tty->ldisc.write_wakeup) - (tty->ldisc.write_wakeup) (tty); - wake_up_interruptible (&tty->write_wait); - } -} - -/* - * ------------------------------------------------------------------- - * This routine is called from the scheduler tqueue when the interrupt - * routine has signalled that a hangup has occurred. The path of - * hangup processing is: - * - * serial interrupt routine -> (scheduler tqueue) -> - * do_serial_hangup() -> tty->hangup() -> rs_hangup() - * ------------------------------------------------------------------- - */ -static void do_serial_hangup (void *private_data) -{ - struct dz_serial *info = (struct dz_serial *) private_data; - struct tty_struct *tty = info->tty; - - if (!tty) - return; - - tty_hangup(tty); -} - -/* - * ------------------------------------------------------------------- - * startup () - * - * various initialization tasks - * ------------------------------------------------------------------- - */ -static int startup (struct dz_serial *info) -{ - unsigned long page, flags; - unsigned short tmp; - - if (info->is_initialized) - return 0; - - save_and_cli(flags); - - if (!info->port) { - if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); - restore_flags(flags); - return -ENODEV; - } - - if (!info->xmit_buf) { - page = get_zeroed_page(GFP_KERNEL); - if (!page) { - restore_flags (flags); - return -ENOMEM; - } - info->xmit_buf = (unsigned char *)page; - } - - if (info->tty) - clear_bit(TTY_IO_ERROR, &info->tty->flags); - - /* enable the interrupt and the scanning */ - tmp = dz_in(info, DZ_CSR); - tmp |= (DZ_RIE | DZ_TIE | DZ_MSE); - dz_out(info, DZ_CSR, tmp); - - info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; - - change_speed(info); /* set up the speed */ - - /* - * Clear the line transmitter buffer I can't figure out why I need to - * do this - but its necessary - in order for the console portion and - * the interrupt portion to live happily side by side. - */ - - info->is_initialized = 1; - - restore_flags(flags); - - return 0; -} - -/* - * ------------------------------------------------------------------- - * shutdown () - * - * This routine will shutdown a serial port; interrupts are disabled, and - * DTR is dropped if the hangup on close termio flag is on. - * ------------------------------------------------------------------- - */ -static void shutdown (struct dz_serial *info) -{ - unsigned long flags; - unsigned short tmp; - - if (!info->is_initialized) - return; - - save_and_cli(flags); - - dz_stop (info->tty); - - info->cflags &= ~DZ_CREAD; /* turn off receive enable flag */ - dz_out(info, DZ_LPR, info->cflags); - - if (info->xmit_buf) { /* free Tx buffer */ - free_page((unsigned long)info->xmit_buf); - info->xmit_buf = 0; - } - - if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) { - tmp = dz_in(info, DZ_TCR); - if (tmp & DZ_MODEM_DTR) { - tmp &= ~DZ_MODEM_DTR; - dz_out(info, DZ_TCR, tmp); - } - } - - if (info->tty) - set_bit (TTY_IO_ERROR, &info->tty->flags); - - info->is_initialized = 0; - - restore_flags (flags); -} - -/* - * ------------------------------------------------------------------- - * change_speed () - * - * set the baud rate. - * ------------------------------------------------------------------- - */ -static void change_speed (struct dz_serial *info) -{ - unsigned long flags; - unsigned cflag; - int baud; - - if (!info->tty || !info->tty->termios) - return; - - save_and_cli(flags); - - info->cflags = info->line; - - cflag = info->tty->termios->c_cflag; - - switch (cflag & CSIZE) { - case CS5: - info->cflags |= DZ_CS5; - break; - case CS6: - info->cflags |= DZ_CS6; - break; - case CS7: - info->cflags |= DZ_CS7; - break; - case CS8: - default: - info->cflags |= DZ_CS8; - } - - if (cflag & CSTOPB) - info->cflags |= DZ_CSTOPB; - if (cflag & PARENB) - info->cflags |= DZ_PARENB; - if (cflag & PARODD) - info->cflags |= DZ_PARODD; - - baud = tty_get_baud_rate(info->tty); - switch (baud) { - case 50: - info->cflags |= DZ_B50; - break; - case 75: - info->cflags |= DZ_B75; - break; - case 110: - info->cflags |= DZ_B110; - break; - case 134: - info->cflags |= DZ_B134; - break; - case 150: - info->cflags |= DZ_B150; - break; - case 300: - info->cflags |= DZ_B300; - break; - case 600: - info->cflags |= DZ_B600; - break; - case 1200: - info->cflags |= DZ_B1200; - break; - case 1800: - info->cflags |= DZ_B1800; - break; - case 2000: - info->cflags |= DZ_B2000; - break; - case 2400: - info->cflags |= DZ_B2400; - break; - case 3600: - info->cflags |= DZ_B3600; - break; - case 4800: - info->cflags |= DZ_B4800; - break; - case 7200: - info->cflags |= DZ_B7200; - break; - case 9600: - default: - info->cflags |= DZ_B9600; - } - - info->cflags |= DZ_RXENAB; - dz_out(info, DZ_LPR, info->cflags); - - /* setup accept flag */ - info->read_status_mask = DZ_OERR; - if (I_INPCK(info->tty)) - info->read_status_mask |= (DZ_FERR | DZ_PERR); - - /* characters to ignore */ - info->ignore_status_mask = 0; - if (I_IGNPAR(info->tty)) - info->ignore_status_mask |= (DZ_FERR | DZ_PERR); - - restore_flags(flags); -} - -/* - * ------------------------------------------------------------------- - * dz_flush_char () - * - * Flush the buffer. - * ------------------------------------------------------------------- - */ -static void dz_flush_chars (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - unsigned long flags; - - if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped || - !info->xmit_buf) - return; - - save_and_cli(flags); - dz_start (info->tty); - restore_flags(flags); -} - - -/* - * ------------------------------------------------------------------- - * dz_write () - * - * main output routine. - * ------------------------------------------------------------------- - */ -static int dz_write (struct tty_struct *tty, int from_user, - const unsigned char *buf, int count) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - unsigned long flags; - int c, ret = 0; - - if (!tty ) - return ret; - if (!info->xmit_buf) - return ret; - if (!tmp_buf) - tmp_buf = tmp_buffer; - - if (from_user) { - down (&tmp_buf_sem); - while (1) { - c = MIN(count, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1, - DZ_XMIT_SIZE - info->xmit_head)); - if (c <= 0) - break; - - c -= copy_from_user (tmp_buf, buf, c); - if (!c) { - if (!ret) - ret = -EFAULT; - break; - } - - save_and_cli(flags); - - c = MIN(c, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1, - DZ_XMIT_SIZE - info->xmit_head)); - memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c); - info->xmit_head = ((info->xmit_head + c) & - (DZ_XMIT_SIZE - 1)); - info->xmit_cnt += c; - restore_flags(flags); - - buf += c; - count -= c; - ret += c; - } - up(&tmp_buf_sem); - } else { - while (1) { - save_and_cli(flags); - - c = MIN(count, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1, - DZ_XMIT_SIZE - info->xmit_head)); - if (c <= 0) { - restore_flags (flags); - break; - } - memcpy(info->xmit_buf + info->xmit_head, buf, c); - info->xmit_head = ((info->xmit_head + c) & - (DZ_XMIT_SIZE-1)); - info->xmit_cnt += c; - restore_flags(flags); - - buf += c; - count -= c; - ret += c; - } - } - - if (info->xmit_cnt) { - if (!tty->stopped) { - if (!tty->hw_stopped) { - dz_start (info->tty); - } - } - } - - return ret; -} - -/* - * ------------------------------------------------------------------- - * dz_write_room () - * - * compute the amount of space available for writing. - * ------------------------------------------------------------------- - */ -static int dz_write_room (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - int ret; - - ret = DZ_XMIT_SIZE - info->xmit_cnt - 1; - if (ret < 0) - ret = 0; - - return ret; -} - -/* - * ------------------------------------------------------------------- - * dz_chars_in_buffer () - * - * compute the amount of char left to be transmitted - * ------------------------------------------------------------------- - */ -static int dz_chars_in_buffer (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - return info->xmit_cnt; -} - -/* - * ------------------------------------------------------------------- - * dz_flush_buffer () - * - * Empty the output buffer - * ------------------------------------------------------------------- - */ -static void dz_flush_buffer (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - cli(); - info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; - sti(); - - wake_up_interruptible (&tty->write_wait); - - if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - tty->ldisc.write_wakeup) - tty->ldisc.write_wakeup(tty); -} - -/* - * ------------------------------------------------------------ - * dz_throttle () and dz_unthrottle () - * - * This routine is called by the upper-layer tty layer to signal that - * incoming characters should be throttled (or not). - * ------------------------------------------------------------ - */ -static void dz_throttle (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - if (I_IXOFF(tty)) - info->x_char = STOP_CHAR(tty); -} - -static void dz_unthrottle (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - if (I_IXOFF(tty)) { - if (info->x_char) - info->x_char = 0; - else - info->x_char = START_CHAR(tty); - } -} - -static void dz_send_xchar (struct tty_struct *tty, char ch) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - info->x_char = ch; - - if (ch) - dz_start(info->tty); -} - -/* - * ------------------------------------------------------------ - * rs_ioctl () and friends - * ------------------------------------------------------------ - */ -static int get_serial_info(struct dz_serial *info, - struct serial_struct *retinfo) -{ - struct serial_struct tmp; - - if (!retinfo) - return -EFAULT; - - memset (&tmp, 0, sizeof(tmp)); - - tmp.type = info->type; - tmp.line = info->line; - tmp.port = info->port; - tmp.irq = SERIAL; - tmp.flags = info->flags; - tmp.baud_base = info->baud_base; - tmp.close_delay = info->close_delay; - tmp.closing_wait = info->closing_wait; - - return copy_to_user(retinfo, &tmp, sizeof(*retinfo)) ? -EFAULT : 0; -} - -static int set_serial_info (struct dz_serial *info, - struct serial_struct *new_info) -{ - struct serial_struct new_serial; - struct dz_serial old_info; - int retval = 0; - - if (!new_info) - return -EFAULT; - - if (copy_from_user(&new_serial, new_info, sizeof(new_serial))) - return -EFAULT; - - old_info = *info; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (info->count > 1) - return -EBUSY; - - /* - * OK, past this point, all the error checking has been done. - * At this point, we start making changes..... - */ - - info->baud_base = new_serial.baud_base; - info->type = new_serial.type; - info->close_delay = new_serial.close_delay; - info->closing_wait = new_serial.closing_wait; - - retval = startup(info); - - return retval; -} - -/* - * get_lsr_info - get line status register info - * - * Purpose: Let user call ioctl() to get info when the UART physically - * is emptied. On bus types like RS485, the transmitter must - * release the bus after transmitting. This must be done when - * the transmit shift register is empty, not be done when the - * transmit holding register is empty. This functionality - * allows an RS485 driver to be written in user space. - */ -static int get_lsr_info (struct dz_serial *info, unsigned int *value) -{ - unsigned short status = dz_in (info, DZ_LPR); - - return put_user (status, value); -} - -/* - * This routine sends a break character out the serial port. - */ -static void send_break (struct dz_serial *info, int duration) -{ - unsigned long flags; - unsigned short tmp, mask; - - if (!info->port) - return; - - mask = 1 << info->line; - tmp = dz_in (info, DZ_TCR); - tmp |= mask; - - current->state = TASK_INTERRUPTIBLE; - - save_and_cli(flags); - dz_out(info, DZ_TCR, tmp); - schedule_timeout(duration); - tmp &= ~mask; - dz_out(info, DZ_TCR, tmp); - restore_flags(flags); -} - -static int dz_ioctl(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg) -{ - int error; - struct dz_serial * info = (struct dz_serial *)tty->driver_data; - int retval; - - if (cmd != TIOCGSERIAL && cmd != TIOCSSERIAL && - cmd != TIOCSERCONFIG && cmd != TIOCSERGWILD && - cmd != TIOCSERSWILD && cmd != TIOCSERGSTRUCT) { - if (tty->flags & (1 << TTY_IO_ERROR)) - return -EIO; - } - - switch (cmd) { - case TCSBRK: /* SVID version: non-zero arg --> no break */ - retval = tty_check_change(tty); - if (retval) - return retval; - tty_wait_until_sent(tty, 0); - if (!arg) - send_break(info, HZ/4); /* 1/4 second */ - return 0; - - case TCSBRKP: /* support for POSIX tcsendbreak() */ - retval = tty_check_change(tty); - if (retval) - return retval; - tty_wait_until_sent(tty, 0); - send_break(info, arg ? arg*(HZ/10) : HZ/4); - return 0; - - case TIOCGSOFTCAR: - return put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg); - - case TIOCSSOFTCAR: - if (get_user (arg, (unsigned long *)arg)) - return -EFAULT; - - tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | - (arg ? CLOCAL : 0); - return 0; - - case TIOCGSERIAL: - return get_serial_info(info, (struct serial_struct *)arg); - - case TIOCSSERIAL: - return set_serial_info(info, (struct serial_struct *) arg); - - case TIOCSERGETLSR: /* Get line status register */ - return get_lsr_info (info, (unsigned int *)arg); - - case TIOCSERGSTRUCT: - return copy_to_user((struct dz_serial *)arg, info, - sizeof(struct dz_serial)) ? -EFAULT : 0; - - default: - return -ENOIOCTLCMD; - } - - return 0; -} - -static void dz_set_termios (struct tty_struct *tty, - struct termios *old_termios) -{ - struct dz_serial *info = (struct dz_serial *)tty->driver_data; - - if (tty->termios->c_cflag == old_termios->c_cflag) - return; - - change_speed (info); - - if ((old_termios->c_cflag & CRTSCTS) && - !(tty->termios->c_cflag & CRTSCTS)) { - tty->hw_stopped = 0; - dz_start(tty); - } -} - -/* - * ------------------------------------------------------------ - * dz_close() - * - * This routine is called when the serial port gets closed. First, we - * wait for the last remaining data to be sent. Then, we turn off - * the transmit enable and receive enable flags. - * ------------------------------------------------------------ - */ -static void dz_close(struct tty_struct *tty, struct file *filp) -{ - struct dz_serial * info = (struct dz_serial *)tty->driver_data; - unsigned long flags; - - if (!info) - return; - - save_and_cli(flags); - - if (tty_hung_up_p(filp)) { - restore_flags(flags); - return; - } - - if ((tty->count == 1) && (info->count != 1)) { - /* - * Uh, oh. tty->count is 1, which means that the tty structure - * will be freed. Info->count should always be one in these - * conditions. If it's greater than one, we've got real - * problems, since it means the serial port won't be shutdown. - */ - printk("dz_close: bad serial port count; tty->count is 1, " - "info->count is %d\n", info->count); - info->count = 1; - } - - if (--info->count < 0) { - printk("ds_close: bad serial port count for ttyS%02d: %d\n", - info->line, info->count); - info->count = 0; - } - - if (info->count) { - restore_flags(flags); - return; - } - info->flags |= DZ_CLOSING; - /* - * Now we wait for the transmit buffer to clear; and we notify the line - * discipline to only process XON/XOFF characters. - */ - tty->closing = 1; - - if (info->closing_wait != DZ_CLOSING_WAIT_NONE) - tty_wait_until_sent(tty, info->closing_wait); - - /* - * At this point we stop accepting input. To do this, we disable the - * receive line status interrupts. - */ - shutdown(info); - - if (tty->driver->flush_buffer) - tty->driver->flush_buffer (tty); - if (tty->ldisc.flush_buffer) - tty->ldisc.flush_buffer (tty); - tty->closing = 0; - info->event = 0; - info->tty = 0; - - if (tty->ldisc.num != ldiscs[N_TTY].num) { - if (tty->ldisc.close) - tty->ldisc.close(tty); - tty->ldisc = ldiscs[N_TTY]; - tty->termios->c_line = N_TTY; - if (tty->ldisc.open) - tty->ldisc.open(tty); - } - if (info->blocked_open) { - if (info->close_delay) { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(info->close_delay); - } - wake_up_interruptible(&info->open_wait); - } - - info->flags &= ~(DZ_NORMAL_ACTIVE | DZ_CLOSING); - wake_up_interruptible(&info->close_wait); - - restore_flags(flags); -} - -/* - * dz_hangup () --- called by tty_hangup() when a hangup is signaled. - */ -static void dz_hangup (struct tty_struct *tty) -{ - struct dz_serial *info = (struct dz_serial *) tty->driver_data; - - dz_flush_buffer(tty); - shutdown(info); - info->event = 0; - info->count = 0; - info->flags &= ~DZ_NORMAL_ACTIVE; - info->tty = 0; - wake_up_interruptible(&info->open_wait); -} - -/* - * ------------------------------------------------------------ - * rs_open() and friends - * ------------------------------------------------------------ - */ -static int block_til_ready(struct tty_struct *tty, struct file *filp, - struct dz_serial *info) -{ - DECLARE_WAITQUEUE(wait, current); - int retval; - int do_clocal = 0; - - /* - * If the device is in the middle of being closed, then block - * until it's done, and then try again. - */ - if (info->flags & DZ_CLOSING) { - interruptible_sleep_on(&info->close_wait); - return -EAGAIN; - } - - /* - * If non-blocking mode is set, or the port is not enabled, then make - * the check up front and then exit. - */ - if ((filp->f_flags & O_NONBLOCK) || - (tty->flags & (1 << TTY_IO_ERROR))) { - info->flags |= DZ_NORMAL_ACTIVE; - - return 0; - } - - if (tty->termios->c_cflag & CLOCAL) - do_clocal = 1; - - /* - * Block waiting for the carrier detect and the line to become free - * (i.e., not in use by the callout). While we are in this loop, - * info->count is dropped by one, so that dz_close() knows when to free - * things. We restore it upon exit, either normal or abnormal. - */ - retval = 0; - add_wait_queue(&info->open_wait, &wait); - - info->count--; - info->blocked_open++; - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - if (tty_hung_up_p (filp) || !(info->is_initialized)) { - retval = -EAGAIN; - break; - } - if (!(info->flags & DZ_CLOSING) && do_clocal) - break; - if (signal_pending(current)) { - retval = -ERESTARTSYS; - break; - } - schedule(); - } - - current->state = TASK_RUNNING; - remove_wait_queue (&info->open_wait, &wait); - if (!tty_hung_up_p(filp)) - info->count++; - info->blocked_open--; - - if (retval) - return retval; - info->flags |= DZ_NORMAL_ACTIVE; - return 0; -} - -/* - * This routine is called whenever a serial port is opened. It - * enables interrupts for a serial port. It also performs the - * serial-specific initialization for the tty structure. - */ -static int dz_open (struct tty_struct *tty, struct file *filp) -{ - struct dz_serial *info; - int retval, line; - - line = tty->index; - - /* - * The dz lines for the mouse/keyboard must be opened using their - * respective drivers. - */ - if ((line < 0) || (line >= DZ_NB_PORT)) - return -ENODEV; - - if ((line == DZ_KEYBOARD) || (line == DZ_MOUSE)) - return -ENODEV; - - info = lines[line]; - info->count++; - - tty->driver_data = info; - info->tty = tty; - - /* - * Start up serial port - */ - retval = startup (info); - if (retval) - return retval; - - retval = block_til_ready (tty, filp, info); - if (retval) - return retval; - - return 0; -} - -static void show_serial_version (void) -{ - printk("%s%s\n", dz_name, dz_version); -} - -static struct tty_driver *serial_driver; - -static struct tty_operations serial_ops = { - .open = dz_open, - .close = dz_close, - .write = dz_write, - .flush_chars = dz_flush_chars, - .write_room = dz_write_room, - .chars_in_buffer = dz_chars_in_buffer, - .flush_buffer = dz_flush_buffer, - .ioctl = dz_ioctl, - .throttle = dz_throttle, - .unthrottle = dz_unthrottle, - .send_xchar = dz_send_xchar, - .set_termios = dz_set_termios, - .stop = dz_stop, - .start = dz_start, - .hangup = dz_hangup, -}; - -int __init dz_init(void) -{ - int i, flags; - struct dz_serial *info; - - serial_driver = alloc_tty_driver(DZ_NB_PORT); - if (!serial_driver) - return -ENOMEM; - - /* Setup base handler, and timer table. */ - init_bh(SERIAL_BH, do_serial_bh); - - show_serial_version(); - - serial_driver->owner = THIS_MODULE; - serial_driver->devfs_name = "tts/"; - serial_driver->name = "ttyS"; - serial_driver->major = TTY_MAJOR; - serial_driver->minor_start = 64; - serial_driver->type = TTY_DRIVER_TYPE_SERIAL; - serial_driver->subtype = SERIAL_TYPE_NORMAL; - serial_driver->init_termios = tty_std_termios; - serial_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | - CLOCAL; - serial_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; - tty_set_operations(serial_driver, &serial_ops); - - if (tty_register_driver(serial_driver)) - panic("Couldn't register serial driver\n"); - - save_flags(flags); cli(); - for (i=0; i < DZ_NB_PORT; i++) { - info = &multi[i]; - lines[i] = info; - info->magic = SERIAL_MAGIC; - - if ((mips_machtype == MACH_DS23100) || - (mips_machtype == MACH_DS5100)) - info->port = (unsigned long) KN01_DZ11_BASE; - else - info->port = (unsigned long) KN02_DZ11_BASE; - - info->line = i; - info->tty = 0; - info->close_delay = 50; - info->closing_wait = 3000; - info->x_char = 0; - info->event = 0; - info->count = 0; - info->blocked_open = 0; - info->tqueue.routine = do_softint; - info->tqueue.data = info; - info->tqueue_hangup.routine = do_serial_hangup; - info->tqueue_hangup.data = info; - init_waitqueue_head(&info->open_wait); - init_waitqueue_head(&info->close_wait); - - /* - * If we are pointing to address zero then punt - not correctly - * set up in setup.c to handle this. - */ - if (! info->port) - return 0; - - printk("ttyS%02d at 0x%08x (irq = %d)\n", info->line, - info->port, SERIAL); - - tty_register_device(serial_driver, info->line, NULL); - } - - /* Reset the chip */ -#ifndef CONFIG_SERIAL_CONSOLE - { - int tmp; - dz_out(info, DZ_CSR, DZ_CLR); - while ((tmp = dz_in(info,DZ_CSR)) & DZ_CLR); - wbflush(); - - /* Enable scanning */ - dz_out(info, DZ_CSR, DZ_MSE); - } -#endif - - /* - * Order matters here... the trick is that flags is updated... in - * request_irq - to immediatedly obliterate it is unwise. - */ - restore_flags(flags); - - if (request_irq(SERIAL, dz_interrupt, SA_INTERRUPT, "DZ", lines[0])) - panic("Unable to register DZ interrupt\n"); - - return 0; -} - -#ifdef CONFIG_SERIAL_CONSOLE -static void dz_console_put_char (unsigned char ch) -{ - unsigned long flags; - int loops = 2500; - unsigned short tmp = ch; - /* - * this code sends stuff out to serial device - spinning its wheels and - * waiting. - */ - - /* force the issue - point it at lines[3]*/ - dz_console = &multi[CONSOLE_LINE]; - - save_and_cli(flags); - - /* spin our wheels */ - while (((dz_in(dz_console, DZ_CSR) & DZ_TRDY) != DZ_TRDY) && loops--) - ; - - /* Actually transmit the character. */ - dz_out(dz_console, DZ_TDR, tmp); - - restore_flags(flags); -} - -/* - * ------------------------------------------------------------------- - * dz_console_print () - * - * dz_console_print is registered for printk. - * The console must be locked when we get here. - * ------------------------------------------------------------------- - */ -static void dz_console_print (struct console *cons, - const char *str, - unsigned int count) -{ -#ifdef DEBUG_DZ - prom_printf((char *)str); -#endif - while (count--) { - if (*str == '\n') - dz_console_put_char('\r'); - dz_console_put_char(*str++); - } -} - -static struct tty_driver *dz_console_device(struct console *c, int *index) -{ - *index = c->index; - return serial_driver; -} - -static int __init dz_console_setup(struct console *co, char *options) -{ - int baud = 9600; - int bits = 8; - int parity = 'n'; - int cflag = CREAD | HUPCL | CLOCAL; - char *s; - unsigned short mask,tmp; - - if (options) { - baud = simple_strtoul(options, NULL, 10); - s = options; - while (*s >= '0' && *s <= '9') - s++; - if (*s) - parity = *s++; - if (*s) - bits = *s - '0'; - } - - /* - * Now construct a cflag setting. - */ - switch (baud) { - case 1200: - cflag |= DZ_B1200; - break; - case 2400: - cflag |= DZ_B2400; - break; - case 4800: - cflag |= DZ_B4800; - break; - case 9600: - default: - cflag |= DZ_B9600; - break; - } - switch (bits) { - case 7: - cflag |= DZ_CS7; - break; - default: - case 8: - cflag |= DZ_CS8; - break; - } - switch (parity) { - case 'o': - case 'O': - cflag |= DZ_PARODD; - break; - case 'e': - case 'E': - cflag |= DZ_PARENB; - break; - } - co->cflag = cflag; - - /* TOFIX: force to console line */ - dz_console = &multi[CONSOLE_LINE]; - if ((mips_machtype == MACH_DS23100) || (mips_machtype == MACH_DS5100)) - dz_console->port = KN01_DZ11_BASE; - else - dz_console->port = KN02_DZ11_BASE; - dz_console->line = CONSOLE_LINE; - - dz_out(dz_console, DZ_CSR, DZ_CLR); - while ((tmp = dz_in(dz_console,DZ_CSR)) & DZ_CLR) - ; - - /* enable scanning */ - dz_out(dz_console, DZ_CSR, DZ_MSE); - - /* Set up flags... */ - dz_console->cflags = 0; - dz_console->cflags |= DZ_B9600; - dz_console->cflags |= DZ_CS8; - dz_console->cflags |= DZ_PARENB; - dz_out(dz_console, DZ_LPR, dz_console->cflags); - - mask = 1 << dz_console->line; - tmp = dz_in (dz_console, DZ_TCR); /* read the TX flag */ - if (!(tmp & mask)) { - tmp |= mask; /* set the TX flag */ - dz_out (dz_console, DZ_TCR, tmp); - } - - return 0; -} - -static struct console dz_sercons = { - .name = "ttyS", - .write = dz_console_print, - .device = dz_console_device, - .setup = dz_console_setup, - .flags = CON_CONSDEV | CON_PRINTBUFFER, - .index = CONSOLE_LINE, -}; - -void __init dz_serial_console_init(void) -{ - register_console(&dz_sercons); -} - -#endif /* ifdef CONFIG_SERIAL_CONSOLE */ - -MODULE_LICENSE("GPL"); diff -Nru a/drivers/char/dz.h b/drivers/char/dz.h --- a/drivers/char/dz.h Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,230 +0,0 @@ -/* - * dz.h: Serial port driver for DECStations equiped - * with the DZ chipset. - * - * Copyright (C) 1998 Olivier A. D. Lebaillif - * - * Email: olivier.lebaillif@ifrsys.com - * - */ -#ifndef DZ_SERIAL_H -#define DZ_SERIAL_H - -/* - * Definitions for the Control and Status Received. - */ -#define DZ_TRDY 0x8000 /* Transmitter empty */ -#define DZ_TIE 0x4000 /* Transmitter Interrupt Enable */ -#define DZ_RDONE 0x0080 /* Receiver data ready */ -#define DZ_RIE 0x0040 /* Receive Interrupt Enable */ -#define DZ_MSE 0x0020 /* Master Scan Enable */ -#define DZ_CLR 0x0010 /* Master reset */ -#define DZ_MAINT 0x0008 /* Loop Back Mode */ - -/* - * Definitions for the Received buffer. - */ -#define DZ_RBUF_MASK 0x00FF /* Data Mask in the Receive Buffer */ -#define DZ_LINE_MASK 0x0300 /* Line Mask in the Receive Buffer */ -#define DZ_DVAL 0x8000 /* Valid Data indicator */ -#define DZ_OERR 0x4000 /* Overrun error indicator */ -#define DZ_FERR 0x2000 /* Frame error indicator */ -#define DZ_PERR 0x1000 /* Parity error indicator */ - -#define LINE(x) (x & DZ_LINE_MASK) >> 8 /* Get the line number from the input buffer */ -#define UCHAR(x) (unsigned char)(x & DZ_RBUF_MASK) - -/* - * Definitions for the Transmit Register. - */ -#define DZ_LINE_KEYBOARD 0x0001 -#define DZ_LINE_MOUSE 0x0002 -#define DZ_LINE_MODEM 0x0004 -#define DZ_LINE_PRINTER 0x0008 - -#define DZ_MODEM_DTR 0x0400 /* DTR for the modem line (2) */ - -/* - * Definitions for the Modem Status Register. - */ -#define DZ_MODEM_DSR 0x0200 /* DSR for the modem line (2) */ - -/* - * Definitions for the Transmit Data Register. - */ -#define DZ_BRK0 0x0100 /* Break assertion for line 0 */ -#define DZ_BRK1 0x0200 /* Break assertion for line 1 */ -#define DZ_BRK2 0x0400 /* Break assertion for line 2 */ -#define DZ_BRK3 0x0800 /* Break assertion for line 3 */ - -/* - * Definitions for the Line Parameter Register. - */ -#define DZ_KEYBOARD 0x0000 /* line 0 = keyboard */ -#define DZ_MOUSE 0x0001 /* line 1 = mouse */ -#define DZ_MODEM 0x0002 /* line 2 = modem */ -#define DZ_PRINTER 0x0003 /* line 3 = printer */ - -#define DZ_CSIZE 0x0018 /* Number of bits per byte (mask) */ -#define DZ_CS5 0x0000 /* 5 bits per byte */ -#define DZ_CS6 0x0008 /* 6 bits per byte */ -#define DZ_CS7 0x0010 /* 7 bits per byte */ -#define DZ_CS8 0x0018 /* 8 bits per byte */ - -#define DZ_CSTOPB 0x0020 /* 2 stop bits instead of one */ - -#define DZ_PARENB 0x0040 /* Parity enable */ -#define DZ_PARODD 0x0080 /* Odd parity instead of even */ - -#define DZ_CBAUD 0x0E00 /* Baud Rate (mask) */ -#define DZ_B50 0x0000 -#define DZ_B75 0x0100 -#define DZ_B110 0x0200 -#define DZ_B134 0x0300 -#define DZ_B150 0x0400 -#define DZ_B300 0x0500 -#define DZ_B600 0x0600 -#define DZ_B1200 0x0700 -#define DZ_B1800 0x0800 -#define DZ_B2000 0x0900 -#define DZ_B2400 0x0A00 -#define DZ_B3600 0x0B00 -#define DZ_B4800 0x0C00 -#define DZ_B7200 0x0D00 -#define DZ_B9600 0x0E00 - -#define DZ_CREAD 0x1000 /* Enable receiver */ -#define DZ_RXENAB 0x1000 /* enable receive char */ -/* - * Addresses for the DZ registers - */ -#define DZ_CSR 0x00 /* Control and Status Register */ -#define DZ_RBUF 0x08 /* Receive Buffer */ -#define DZ_LPR 0x08 /* Line Parameters Register */ -#define DZ_TCR 0x10 /* Transmitter Control Register */ -#define DZ_MSR 0x18 /* Modem Status Register */ -#define DZ_TDR 0x18 /* Transmit Data Register */ - - -#define DZ_NB_PORT 4 - -#define DZ_XMIT_SIZE 4096 /* buffer size */ -#define WAKEUP_CHARS DZ_XMIT_SIZE/4 - -#define DZ_EVENT_WRITE_WAKEUP 0 - -#ifndef MIN -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - -#define DZ_INITIALIZED 0x80000000 /* Serial port was initialized */ -#define DZ_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */ -#define DZ_NORMAL_ACTIVE 0x20000000 /* Normal device is active */ -#define DZ_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */ -#define DZ_CLOSING 0x08000000 /* Serial port is closing */ -#define DZ_CTS_FLOW 0x04000000 /* Do CTS flow control */ -#define DZ_CHECK_CD 0x02000000 /* i.e., CLOCAL */ - -#define DZ_CLOSING_WAIT_INF 0 -#define DZ_CLOSING_WAIT_NONE 65535 - -#define DZ_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */ -#define DZ_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */ -#define DZ_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */ - -struct dz_serial { - unsigned port; /* base address for the port */ - int type; - int flags; - int baud_base; - int blocked_open; - unsigned short close_delay; - unsigned short closing_wait; - unsigned short line; /* port/line number */ - unsigned short cflags; /* line configuration flag */ - unsigned short x_char; /* xon/xoff character */ - unsigned short read_status_mask; /* mask for read condition */ - unsigned short ignore_status_mask; /* mask for ignore condition */ - unsigned long event; /* mask used in BH */ - unsigned char *xmit_buf; /* Transmit buffer */ - int xmit_head; /* Position of the head */ - int xmit_tail; /* Position of the tail */ - int xmit_cnt; /* Count of the chars in the buffer */ - int count; /* indicates how many times it has been opened */ - int magic; - - struct async_icount icount; /* keep track of things ... */ - struct tty_struct *tty; /* tty associated */ - struct tq_struct tqueue; /* Queue for BH */ - struct tq_struct tqueue_hangup; - wait_queue_head_t open_wait; - wait_queue_head_t close_wait; - - unsigned char is_console; /* flag indicating a serial console */ - unsigned char is_initialized; -}; - -static struct dz_serial multi[DZ_NB_PORT]; /* Four serial lines in the DZ chip */ -static struct dz_serial *dz_console; - -/* - * tmp_buf is used as a temporary buffer by serial_write. We need to - * lock it in case the copy_from_user blocks while swapping in a page, - * and some other program tries to do a serial write at the same time. - * Since the lock will only come under contention when the system is - * swapping and available memory is low, it makes sense to share one - * buffer across all the serial ports, since it significantly saves - * memory if large numbers of serial ports are open. - */ -static unsigned char *tmp_buf; -static DECLARE_MUTEX(tmp_buf_sem); - -static char *dz_name = "DECstation DZ serial driver version "; -static char *dz_version = "1.02"; - -static inline unsigned short dz_in (struct dz_serial *, unsigned); -static inline void dz_out (struct dz_serial *, unsigned, unsigned short); - -static inline void dz_sched_event (struct dz_serial *, int); -static inline void receive_chars (struct dz_serial *); -static inline void transmit_chars (struct dz_serial *); -static inline void check_modem_status (struct dz_serial *); - -static void dz_stop (struct tty_struct *); -static void dz_start (struct tty_struct *); -static void dz_interrupt (int, void *, struct pt_regs *); -static void do_serial_bh (void); -static void do_softint (void *); -static void do_serial_hangup (void *); -static void change_speed (struct dz_serial *); -static void dz_flush_chars (struct tty_struct *); -static void dz_console_print (struct console *, const char *, unsigned int); -static void dz_flush_buffer (struct tty_struct *); -static void dz_throttle (struct tty_struct *); -static void dz_unthrottle (struct tty_struct *); -static void dz_send_xchar (struct tty_struct *, char); -static void shutdown (struct dz_serial *); -static void send_break (struct dz_serial *, int); -static void dz_set_termios (struct tty_struct *, struct termios *); -static void dz_close (struct tty_struct *, struct file *); -static void dz_hangup (struct tty_struct *); -static void show_serial_version (void); - -static int dz_write (struct tty_struct *, int, const unsigned char *, int); -static int dz_write_room (struct tty_struct *); -static int dz_chars_in_buffer (struct tty_struct *); -static int startup (struct dz_serial *); -static int get_serial_info (struct dz_serial *, struct serial_struct *); -static int set_serial_info (struct dz_serial *, struct serial_struct *); -static int get_lsr_info (struct dz_serial *, unsigned int *); -static int dz_ioctl (struct tty_struct *, struct file *, unsigned int, unsigned long); -static int block_til_ready (struct tty_struct *, struct file *, struct dz_serial *); -static int dz_open (struct tty_struct *, struct file *); - -#ifdef MODULE -int init_module (void) -void cleanup_module (void) -#endif - -#endif - -#endif /* DZ_SERIAL_H */ diff -Nru a/drivers/char/ip2main.c b/drivers/char/ip2main.c --- a/drivers/char/ip2main.c Tue May 18 23:38:09 2004 +++ b/drivers/char/ip2main.c Tue May 18 23:38:09 2004 @@ -99,6 +99,7 @@ #include #include #include +#include #include #include @@ -301,6 +302,9 @@ static char rirqs[IP2_MAX_BOARDS]; static int Valid_Irqs[] = { 3, 4, 5, 7, 10, 11, 12, 15, 0}; +/* for sysfs class support */ +static struct class_simple *ip2_class; + // Some functions to keep track of what irq's we have static int __init @@ -411,7 +415,9 @@ iiResetDelay( i2BoardPtrTable[i] ); /* free io addresses and Tibet */ release_region( ip2config.addr[i], 8 ); + class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 4 * i)); devfs_remove("ip2/ipl%d", i); + class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 4 * i + 1)); devfs_remove("ip2/stat%d", i); } /* Disable and remove interrupt handler. */ @@ -420,6 +426,7 @@ clear_requested_irq( ip2config.irq[i]); } } + class_simple_destroy(ip2_class); devfs_remove("ip2"); if ( ( err = tty_unregister_driver ( ip2_tty_driver ) ) ) { printk(KERN_ERR "IP2: failed to unregister tty driver (%d)\n", err); @@ -494,7 +501,7 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) { int i, j, box; - int err; + int err = 0; int status = 0; static int loaded; i2eBordStrPtr pB = NULL; @@ -683,7 +690,14 @@ /* Register the IPL driver. */ if ( ( err = register_chrdev ( IP2_IPL_MAJOR, pcIpl, &ip2_ipl ) ) ) { printk(KERN_ERR "IP2: failed to register IPL device (%d)\n", err ); - } else + } else { + /* create the sysfs class */ + ip2_class = class_simple_create(THIS_MODULE, "ip2"); + if (IS_ERR(ip2_class)) { + err = PTR_ERR(ip2_class); + goto out_chrdev; + } + } /* Register the read_procmem thing */ if (!create_proc_info_entry("ip2mem",0,&proc_root,ip2_read_procmem)) { printk(KERN_ERR "IP2: failed to register read_procmem\n"); @@ -700,13 +714,27 @@ } if ( NULL != ( pB = i2BoardPtrTable[i] ) ) { - devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i), + class_simple_device_add(ip2_class, MKDEV(IP2_IPL_MAJOR, + 4 * i), NULL, "ipl%d", i); + err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i), S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, "ip2/ipl%d", i); + if (err) { + class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, + 4 * i)); + goto out_class; + } - devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i + 1), + class_simple_device_add(ip2_class, MKDEV(IP2_IPL_MAJOR, + 4 * i + 1), NULL, "stat%d", i); + err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i + 1), S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, "ip2/stat%d", i); + if (err) { + class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, + 4 * i + 1)); + goto out_class; + } for ( box = 0; box < ABS_MAX_BOXES; ++box ) { @@ -759,8 +787,14 @@ } } ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_RETURN, 0 ); + goto out; - return 0; +out_class: + class_simple_destroy(ip2_class); +out_chrdev: + unregister_chrdev(IP2_IPL_MAJOR, "ip2"); +out: + return err; } EXPORT_SYMBOL(ip2_loadmain); diff -Nru a/drivers/char/mem.c b/drivers/char/mem.c --- a/drivers/char/mem.c Tue May 18 23:38:07 2004 +++ b/drivers/char/mem.c Tue May 18 23:38:07 2004 @@ -62,6 +62,19 @@ test_bit(X86_FEATURE_CYRIX_ARR, boot_cpu_data.x86_capability) || test_bit(X86_FEATURE_CENTAUR_MCR, boot_cpu_data.x86_capability) ) && addr >= __pa(high_memory); +#elif defined(__x86_64__) + /* + * This is broken because it can generate memory type aliases, + * which can cause cache corruptions + * But it is only available for root and we have to be bug-to-bug + * compatible with i386. + */ + if (file->f_flags & O_SYNC) + return 1; + /* same behaviour as i386. PAT always set to cached and MTRRs control the + caching behaviour. + Hopefully a full PAT implementation will fix that soon. */ + return 0; #elif defined(CONFIG_IA64) /* * On ia64, we ignore O_SYNC because we cannot tolerate memory attribute aliases. diff -Nru a/drivers/char/mwave/mwavedd.c b/drivers/char/mwave/mwavedd.c --- a/drivers/char/mwave/mwavedd.c Tue May 18 23:38:06 2004 +++ b/drivers/char/mwave/mwavedd.c Tue May 18 23:38:06 2004 @@ -466,6 +466,7 @@ static struct miscdevice mwave_misc_dev = { MWAVE_MINOR, "mwave", &mwave_fops }; +#if 0 /* totally b0rked */ /* * sysfs support */ @@ -499,6 +500,7 @@ &dev_attr_uart_irq, &dev_attr_uart_io, }; +#endif /* * mwave_init is called on module load @@ -508,11 +510,11 @@ */ static void mwave_exit(void) { - int i; pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd; PRINTK_1(TRACE_MWAVE, "mwavedd::mwave_exit entry\n"); +#if 0 for (i = 0; i < pDrvData->nr_registered_attrs; i++) device_remove_file(&mwave_device, mwave_dev_attrs[i]); pDrvData->nr_registered_attrs = 0; @@ -521,6 +523,7 @@ device_unregister(&mwave_device); pDrvData->device_registered = FALSE; } +#endif if ( pDrvData->sLine >= 0 ) { unregister_serial(pDrvData->sLine); @@ -638,6 +641,7 @@ } /* uart is registered */ +#if 0 /* sysfs */ memset(&mwave_device, 0, sizeof (struct device)); snprintf(mwave_device.bus_id, BUS_ID_SIZE, "mwave"); @@ -655,6 +659,7 @@ } pDrvData->nr_registered_attrs++; } +#endif /* SUCCESS! */ return 0; diff -Nru a/drivers/char/ppdev.c b/drivers/char/ppdev.c --- a/drivers/char/ppdev.c Tue May 18 23:38:09 2004 +++ b/drivers/char/ppdev.c Tue May 18 23:38:09 2004 @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -739,6 +740,8 @@ return mask; } +static struct class_simple *ppdev_class; + static struct file_operations pp_fops = { .owner = THIS_MODULE, .llseek = no_llseek, @@ -750,23 +753,59 @@ .release = pp_release, }; +static void pp_attach(struct parport *port) +{ + class_simple_device_add(ppdev_class, MKDEV(PP_MAJOR, port->number), + NULL, "parport%d", port->number); +} + +static void pp_detach(struct parport *port) +{ + class_simple_device_remove(MKDEV(PP_MAJOR, port->number)); +} + +static struct parport_driver pp_driver = { + .name = CHRDEV, + .attach = pp_attach, + .detach = pp_detach, +}; + static int __init ppdev_init (void) { - int i; + int i, err = 0; if (register_chrdev (PP_MAJOR, CHRDEV, &pp_fops)) { printk (KERN_WARNING CHRDEV ": unable to get major %d\n", PP_MAJOR); return -EIO; } + ppdev_class = class_simple_create(THIS_MODULE, CHRDEV); + if (IS_ERR(ppdev_class)) { + err = PTR_ERR(ppdev_class); + goto out_chrdev; + } devfs_mk_dir("parports"); for (i = 0; i < PARPORT_MAX; i++) { devfs_mk_cdev(MKDEV(PP_MAJOR, i), S_IFCHR | S_IRUGO | S_IWUGO, "parports/%d", i); } + if (parport_register_driver(&pp_driver)) { + printk (KERN_WARNING CHRDEV ": unable to register with parport\n"); + goto out_class; + } printk (KERN_INFO PP_VERSION "\n"); - return 0; + goto out; + +out_class: + for (i = 0; i < PARPORT_MAX; i++) + devfs_remove("parports/%d", i); + devfs_remove("parports"); + class_simple_destroy(ppdev_class); +out_chrdev: + unregister_chrdev(PP_MAJOR, CHRDEV); +out: + return err; } static void __exit ppdev_cleanup (void) @@ -775,7 +814,9 @@ /* Clean up all parport stuff */ for (i = 0; i < PARPORT_MAX; i++) devfs_remove("parports/%d", i); + parport_unregister_driver(&pp_driver); devfs_remove("parports"); + class_simple_destroy(ppdev_class); unregister_chrdev (PP_MAJOR, CHRDEV); } diff -Nru a/drivers/char/sh-sci.c b/drivers/char/sh-sci.c --- a/drivers/char/sh-sci.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1646 +0,0 @@ -/* $Id: sh-sci.c,v 1.16 2004/02/10 17:04:17 lethal Exp $ - * - * linux/drivers/char/sh-sci.c - * - * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO) - * Copyright (C) 1999, 2000 Niibe Yutaka - * Copyright (C) 2000 Sugioka Toshinobu - * Modified to support multiple serial ports. Stuart Menefy (May 2000). - * Modified to support SH7760 SCIF. Paul Mundt (Oct 2003). - * Modified to support H8/300 Series. Yoshinori Sato (Feb 2004). - * - * TTY code is based on sx.c (Specialix SX driver) by: - * - * (C) 1998 R.E.Wolff@BitWizard.nl - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(CONFIG_SERIAL_CONSOLE) || defined(CONFIG_SH_KGDB_CONSOLE) -#include -#endif -#ifdef CONFIG_CPU_FREQ -#include -#include -#endif - -#include -#include -#include -#include -#include - -#include - -#ifdef CONFIG_SH_STANDARD_BIOS -#include -#endif - -#include "sh-sci.h" - -#ifdef CONFIG_SH_KGDB -#include - -int kgdb_sci_setup(void); -static int kgdb_get_char(struct sci_port *port); -static void kgdb_put_char(struct sci_port *port, char c); -static void kgdb_handle_error(struct sci_port *port); -static struct sci_port *kgdb_sci_port; - -#ifdef CONFIG_SH_KGDB_CONSOLE -static struct console kgdbcons; -void __init kgdb_console_init(void); -#endif /* CONFIG_SH_KGDB_CONSOLE */ - -#endif /* CONFIG_SH_KGDB */ - -#ifdef CONFIG_SERIAL_CONSOLE -static struct console sercons; -static struct sci_port* sercons_port=0; -static int sercons_baud; -#ifdef CONFIG_MAGIC_SYSRQ -#include -static int break_pressed; -#endif /* CONFIG_MAGIC_SYSRQ */ -#endif /* CONFIG_SERIAL_CONSOLE */ - -/* Function prototypes */ -static void sci_init_pins_sci(struct sci_port* port, unsigned int cflag); -#ifndef SCI_ONLY -static void sci_init_pins_scif(struct sci_port* port, unsigned int cflag); -#if defined(CONFIG_CPU_SH3) -static void sci_init_pins_irda(struct sci_port* port, unsigned int cflag); -#endif -#endif -static void sci_disable_tx_interrupts(void *ptr); -static void sci_enable_tx_interrupts(void *ptr); -static void sci_disable_rx_interrupts(void *ptr); -static void sci_enable_rx_interrupts(void *ptr); -static int sci_get_CD(void *ptr); -static void sci_shutdown_port(void *ptr); -static int sci_set_real_termios(void *ptr); -static void sci_hungup(void *ptr); -static void sci_close(void *ptr); -static int sci_chars_in_buffer(void *ptr); -static int sci_request_irq(struct sci_port *port); -static void sci_free_irq(struct sci_port *port); -static int sci_init_drivers(void); - -static struct tty_driver *sci_driver; - -static struct sci_port sci_ports[SCI_NPORTS] = SCI_INIT; - -static int sci_debug = 0; - -#ifdef MODULE -MODULE_PARM(sci_debug, "i"); -#endif - -#define dprintk(x...) do { if (sci_debug) printk(x); } while(0) - -#ifdef CONFIG_SERIAL_CONSOLE -static void put_char(struct sci_port *port, char c) -{ - unsigned long flags; - unsigned short status; - - local_irq_save(flags); - - do - status = sci_in(port, SCxSR); - while (!(status & SCxSR_TDxE(port))); - - sci_out(port, SCxTDR, c); - sci_in(port, SCxSR); /* Dummy read */ - sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); - - local_irq_restore(flags); -} -#endif - -#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB) - -static void handle_error(struct sci_port *port) -{ /* Clear error flags */ - sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); -} - -static int get_char(struct sci_port *port) -{ - unsigned long flags; - unsigned short status; - int c; - - local_irq_save(flags); - do { - status = sci_in(port, SCxSR); - if (status & SCxSR_ERRORS(port)) { - handle_error(port); - continue; - } - } while (!(status & SCxSR_RDxF(port))); - c = sci_in(port, SCxRDR); - sci_in(port, SCxSR); /* Dummy read */ - sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); - local_irq_restore(flags); - - return c; -} - -/* Taken from sh-stub.c of GDB 4.18 */ -static const char hexchars[] = "0123456789abcdef"; - -static __inline__ char highhex(int x) -{ - return hexchars[(x >> 4) & 0xf]; -} - -static __inline__ char lowhex(int x) -{ - return hexchars[x & 0xf]; -} - -#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ - -/* - * Send the packet in buffer. The host gets one chance to read it. - * This routine does not wait for a positive acknowledge. - */ - -#ifdef CONFIG_SERIAL_CONSOLE -static void put_string(struct sci_port *port, const char *buffer, int count) -{ - int i; - const unsigned char *p = buffer; - -#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB) - int checksum; - int usegdb=0; - -#ifdef CONFIG_SH_STANDARD_BIOS - /* This call only does a trap the first time it is - * called, and so is safe to do here unconditionally - */ - usegdb |= sh_bios_in_gdb_mode(); -#endif -#ifdef CONFIG_SH_KGDB - usegdb |= (kgdb_in_gdb_mode && (port == kgdb_sci_port)); -#endif - - if (usegdb) { - /* $#. */ - do { - unsigned char c; - put_char(port, '$'); - put_char(port, 'O'); /* 'O'utput to console */ - checksum = 'O'; - - for (i=0; ibase - SMR0) >> 3; - /* set DDR regs */ - H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].rx,H8300_GPIO_INPUT); - H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].tx,H8300_GPIO_OUTPUT); - /* tx mark output*/ - H8300_SCI_DR(ch) |= h8300_sci_pins[ch].tx; -} - -#if defined(__H8300S__) -enum {sci_disable,sci_enable}; - -static void h8300_sci_enable(struct sci_port* port, unsigned int ctrl) -{ - volatile unsigned char *mstpcrl=(volatile unsigned char *)MSTPCRL; - int ch = (port->base - SMR0) >> 3; - unsigned char mask = 1 << (ch+1); - if (ctrl == sci_disable) - *mstpcrl |= mask; - else - *mstpcrl &= ~mask; -} -#endif -#endif - -static void sci_setsignals(struct sci_port *port, int dtr, int rts) -{ - /* This routine is used for seting signals of: DTR, DCD, CTS/RTS */ - /* We use SCIF's hardware for CTS/RTS, so don't need any for that. */ - /* If you have signals for DTR and DCD, please implement here. */ - ; -} - -static int sci_getsignals(struct sci_port *port) -{ - /* This routine is used for geting signals of: DTR, DCD, DSR, RI, - and CTS/RTS */ - - return TIOCM_DTR|TIOCM_RTS|TIOCM_DSR; -/* - (((o_stat & OP_DTR)?TIOCM_DTR:0) | - ((o_stat & OP_RTS)?TIOCM_RTS:0) | - ((i_stat & IP_CTS)?TIOCM_CTS:0) | - ((i_stat & IP_DCD)?TIOCM_CAR:0) | - ((i_stat & IP_DSR)?TIOCM_DSR:0) | - ((i_stat & IP_RI) ?TIOCM_RNG:0) -*/ -} - -static void sci_set_baud(struct sci_port *port, int baud) -{ - int t; - - switch (baud) { - case 0: - t = -1; - break; - case 2400: - t = BPS_2400; - break; - case 4800: - t = BPS_4800; - break; - case 9600: - t = BPS_9600; - break; - case 19200: - t = BPS_19200; - break; - case 38400: - t = BPS_38400; - break; - case 57600: - t = BPS_57600; - break; - default: - printk(KERN_INFO "sci: unsupported baud rate: %d, using 115200 instead.\n", baud); - case 115200: - t = BPS_115200; - break; - } - - if (t > 0) { - sci_setsignals (port, 1, -1); - if(t >= 256) { - sci_out(port, SCSMR, (sci_in(port, SCSMR) & ~3) | 1); - t >>= 2; - } else { - sci_out(port, SCSMR, sci_in(port, SCSMR) & ~3); - } - sci_out(port, SCBRR, t); - udelay((1000000+(baud-1)) / baud); /* Wait one bit interval */ - } else { - sci_setsignals (port, 0, -1); - } -} - -static void sci_set_termios_cflag(struct sci_port *port, int cflag, int baud) -{ - unsigned int status; - unsigned int smr_val; - - do - status = sci_in(port, SCxSR); - while (!(status & SCxSR_TEND(port))); - - sci_out(port, SCSCR, 0x00); /* TE=0, RE=0, CKE1=0 */ - -#if !defined(SCI_ONLY) - if (port->type == PORT_SCIF) { - sci_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST); - } -#endif - - smr_val = sci_in(port, SCSMR) & 3; - if ((cflag & CSIZE) == CS7) - smr_val |= 0x40; - if (cflag & PARENB) - smr_val |= 0x20; - if (cflag & PARODD) - smr_val |= 0x30; - if (cflag & CSTOPB) - smr_val |= 0x08; - sci_out(port, SCSMR, smr_val); - sci_set_baud(port, baud); - - port->init_pins(port, cflag); - sci_out(port, SCSCR, SCSCR_INIT(port)); -} - -static int sci_set_real_termios(void *ptr) -{ - struct sci_port *port = ptr; - - if (port->old_cflag != port->gs.tty->termios->c_cflag) { - port->old_cflag = port->gs.tty->termios->c_cflag; - sci_set_termios_cflag(port, port->old_cflag, port->gs.baud); - sci_enable_rx_interrupts(port); - } - - return 0; -} - -/* ********************************************************************** * - * the interrupt related routines * - * ********************************************************************** */ - -/* - * This routine is used by the interrupt handler to schedule - * processing in the software interrupt portion of the driver. - */ -static inline void sci_sched_event(struct sci_port *port, int event) -{ - port->event |= 1 << event; - schedule_work(&port->tqueue); -} - -static void sci_transmit_chars(struct sci_port *port) -{ - int count, i; - int txroom; - unsigned long flags; - unsigned short status; - unsigned short ctrl; - unsigned char c; - - status = sci_in(port, SCxSR); - if (!(status & SCxSR_TDxE(port))) { - local_irq_save(flags); - ctrl = sci_in(port, SCSCR); - if (port->gs.xmit_cnt == 0) { - ctrl &= ~SCI_CTRL_FLAGS_TIE; - port->gs.flags &= ~GS_TX_INTEN; - } else - ctrl |= SCI_CTRL_FLAGS_TIE; - sci_out(port, SCSCR, ctrl); - local_irq_restore(flags); - return; - } - - while (1) { - count = port->gs.xmit_cnt; -#if !defined(SCI_ONLY) - if (port->type == PORT_SCIF) { - txroom = 16 - (sci_in(port, SCFDR)>>8); - } else { - txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0; - } -#else - txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0; -#endif - if (count > txroom) - count = txroom; - - /* Don't copy past the end of the source buffer */ - if (count > SERIAL_XMIT_SIZE - port->gs.xmit_tail) - count = SERIAL_XMIT_SIZE - port->gs.xmit_tail; - - /* If for one reason or another, we can't copy more data, we're done! */ - if (count == 0) - break; - - for (i=0; igs.xmit_buf[port->gs.xmit_tail + i]; - sci_out(port, SCxTDR, c); - } - sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); - - port->icount.tx += count; - - /* Update the kernel buffer end */ - port->gs.xmit_tail = (port->gs.xmit_tail + count) & (SERIAL_XMIT_SIZE-1); - - /* This one last. (this is essential) - It would allow others to start putting more data into the buffer! */ - port->gs.xmit_cnt -= count; - } - - if (port->gs.xmit_cnt <= port->gs.wakeup_chars) - sci_sched_event(port, SCI_EVENT_WRITE_WAKEUP); - - local_irq_save(flags); - ctrl = sci_in(port, SCSCR); - if (port->gs.xmit_cnt == 0) { - ctrl &= ~SCI_CTRL_FLAGS_TIE; - port->gs.flags &= ~GS_TX_INTEN; - } else { -#if !defined(SCI_ONLY) - if (port->type == PORT_SCIF) { - sci_in(port, SCxSR); /* Dummy read */ - sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); - } -#endif - ctrl |= SCI_CTRL_FLAGS_TIE; - } - sci_out(port, SCSCR, ctrl); - local_irq_restore(flags); -} - -/* On SH3, SCIF may read end-of-break as a space->mark char */ -#define STEPFN(c) ({int __c=(c); (((__c-1)|(__c)) == -1); }) - -static inline void sci_receive_chars(struct sci_port *port, - struct pt_regs *regs) -{ - int i, count; - struct tty_struct *tty; - int copied=0; - unsigned short status; - - status = sci_in(port, SCxSR); - if (!(status & SCxSR_RDxF(port))) - return; - - tty = port->gs.tty; - while (1) { -#if !defined(SCI_ONLY) - if (port->type == PORT_SCIF) { - count = sci_in(port, SCFDR)&0x001f; - } else { - count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0; - } -#else - count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0; -#endif - - /* Don't copy more bytes than there is room for in the buffer */ - if (tty->flip.count + count > TTY_FLIPBUF_SIZE) - count = TTY_FLIPBUF_SIZE - tty->flip.count; - - /* If for any reason we can't copy more data, we're done! */ - if (count == 0) - break; - - if (port->type == PORT_SCI) { - tty->flip.char_buf_ptr[0] = sci_in(port, SCxRDR); - tty->flip.flag_buf_ptr[0] = TTY_NORMAL; - } else { - for (i=0; ibreak_flag) { - if ((c == 0) && - (status & SCxSR_FER(port))) { - count--; i--; - continue; - } - /* Nonzero => end-of-break */ - dprintk("scif: debounce<%02x>\n", c); - port->break_flag = 0; - if (STEPFN(c)) { - count--; i--; - continue; - } - } -#endif /* __SH3__ */ -#if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) - if (break_pressed && (port == sercons_port)) { - if (c != 0 && - time_before(jiffies, - break_pressed + HZ*5)) { - handle_sysrq(c, regs, NULL); - break_pressed = 0; - count--; i--; - continue; - } else if (c != 0) { - break_pressed = 0; - } - } -#endif /* CONFIG_SERIAL_CONSOLE && CONFIG_MAGIC_SYSRQ */ - - /* Store data and status */ - tty->flip.char_buf_ptr[i] = c; - if (status&SCxSR_FER(port)) { - tty->flip.flag_buf_ptr[i] = TTY_FRAME; - dprintk("sci: frame error\n"); - } else if (status&SCxSR_PER(port)) { - tty->flip.flag_buf_ptr[i] = TTY_PARITY; - dprintk("sci: parity error\n"); - } else { - tty->flip.flag_buf_ptr[i] = TTY_NORMAL; - } - } - } - - sci_in(port, SCxSR); /* dummy read */ - sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); - - /* Update the kernel buffer end */ - tty->flip.count += count; - tty->flip.char_buf_ptr += count; - tty->flip.flag_buf_ptr += count; - - copied += count; - port->icount.rx += count; - } - - if (copied) - /* Tell the rest of the system the news. New characters! */ - tty_flip_buffer_push(tty); - else { - sci_in(port, SCxSR); /* dummy read */ - sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); - } -} - -static inline int sci_handle_errors(struct sci_port *port) -{ - int copied = 0; - unsigned short status = sci_in(port, SCxSR); - struct tty_struct *tty = port->gs.tty; - - if (status&SCxSR_ORER(port) && tty->flip.countflip.flag_buf_ptr++ = TTY_OVERRUN; - dprintk("sci: overrun error\n"); - } - - if (status&SCxSR_FER(port) && tty->flip.countflip.flag_buf_ptr++ = TTY_BREAK; - dprintk("sci: BREAK detected\n"); - } - else { - /* frame error */ - copied++; - *tty->flip.flag_buf_ptr++ = TTY_FRAME; - dprintk("sci: frame error\n"); - } - } - - if (status&SCxSR_PER(port) && tty->flip.countflip.flag_buf_ptr++ = TTY_PARITY; - dprintk("sci: parity error\n"); - } - - if (copied) { - tty->flip.count += copied; - tty_flip_buffer_push(tty); - } - - return copied; -} - -static inline int sci_handle_breaks(struct sci_port *port) -{ - int copied = 0; - unsigned short status = sci_in(port, SCxSR); - struct tty_struct *tty = port->gs.tty; - - if (status&SCxSR_BRK(port) && tty->flip.countbreak_flag) - goto break_continue; - port->break_flag = 1; -#endif -#if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) - if (port == sercons_port) { - if (break_pressed == 0) { - break_pressed = jiffies; - dprintk("sci: implied sysrq\n"); - goto break_continue; - } - /* Double break implies a real break */ - break_pressed = 0; - } -#endif - /* Notify of BREAK */ - copied++; - *tty->flip.flag_buf_ptr++ = TTY_BREAK; - dprintk("sci: BREAK detected\n"); - } - break_continue: - -#if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_ST40STB1) || \ - defined(CONFIG_CPU_SUBTYPE_SH7760) - /* XXX: Handle SCIF overrun error */ - if (port->type == PORT_SCIF && (sci_in(port, SCLSR) & SCIF_ORER) != 0) { - sci_out(port, SCLSR, 0); - if(tty->flip.countflip.flag_buf_ptr++ = TTY_OVERRUN; - dprintk("sci: overrun error\n"); - } - } -#endif - - if (copied) { - tty->flip.count += copied; - tty_flip_buffer_push(tty); - } - - return copied; -} - -static irqreturn_t sci_rx_interrupt(int irq, void *ptr, struct pt_regs *regs) -{ - struct sci_port *port = ptr; - - if (port->gs.flags & GS_ACTIVE) - if (!(port->gs.flags & SCI_RX_THROTTLE)) { - sci_receive_chars(port, regs); - return IRQ_HANDLED; - - } - sci_disable_rx_interrupts(port); - - return IRQ_HANDLED; -} - -static irqreturn_t sci_tx_interrupt(int irq, void *ptr, struct pt_regs *regs) -{ - struct sci_port *port = ptr; - - if (port->gs.flags & GS_ACTIVE) - sci_transmit_chars(port); - else { - sci_disable_tx_interrupts(port); - } - - return IRQ_HANDLED; -} - -static irqreturn_t sci_er_interrupt(int irq, void *ptr, struct pt_regs *regs) -{ - struct sci_port *port = ptr; - - /* Handle errors */ - if (port->type == PORT_SCI) { - if(sci_handle_errors(port)) { - /* discard character in rx buffer */ - sci_in(port, SCxSR); - sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); - } - } - else - sci_rx_interrupt(irq, ptr, regs); - - sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); - - /* Kick the transmission */ - sci_tx_interrupt(irq, ptr, regs); - - return IRQ_HANDLED; -} - -#if !defined(SCI_ONLY) -static irqreturn_t sci_br_interrupt(int irq, void *ptr, struct pt_regs *regs) -{ - struct sci_port *port = ptr; - - /* Handle BREAKs */ - sci_handle_breaks(port); - sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port)); - - return IRQ_HANDLED; -} -#endif - -static void do_softint(void *private_) -{ - struct sci_port *port = (struct sci_port *) private_; - struct tty_struct *tty; - - tty = port->gs.tty; - if (!tty) - return; - - if (test_and_clear_bit(SCI_EVENT_WRITE_WAKEUP, &port->event)) { - if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - tty->ldisc.write_wakeup) - (tty->ldisc.write_wakeup)(tty); - wake_up_interruptible(&tty->write_wait); - } -} - -/* ********************************************************************** * - * Here are the routines that actually * - * interface with the generic_serial driver * - * ********************************************************************** */ - -static void sci_disable_tx_interrupts(void *ptr) -{ - struct sci_port *port = ptr; - unsigned long flags; - unsigned short ctrl; - - /* Clear TIE (Transmit Interrupt Enable) bit in SCSCR */ - local_irq_save(flags); - ctrl = sci_in(port, SCSCR); - ctrl &= ~SCI_CTRL_FLAGS_TIE; - sci_out(port, SCSCR, ctrl); - local_irq_restore(flags); -} - -static void sci_enable_tx_interrupts(void *ptr) -{ - struct sci_port *port = ptr; - - disable_irq(port->irqs[SCIx_TXI_IRQ]); - sci_transmit_chars(port); - enable_irq(port->irqs[SCIx_TXI_IRQ]); -} - -static void sci_disable_rx_interrupts(void * ptr) -{ - struct sci_port *port = ptr; - unsigned long flags; - unsigned short ctrl; - - /* Clear RIE (Receive Interrupt Enable) bit in SCSCR */ - local_irq_save(flags); - ctrl = sci_in(port, SCSCR); - ctrl &= ~SCI_CTRL_FLAGS_RIE; - sci_out(port, SCSCR, ctrl); - local_irq_restore(flags); -} - -static void sci_enable_rx_interrupts(void * ptr) -{ - struct sci_port *port = ptr; - unsigned long flags; - unsigned short ctrl; - - /* Set RIE (Receive Interrupt Enable) bit in SCSCR */ - local_irq_save(flags); - ctrl = sci_in(port, SCSCR); - ctrl |= SCI_CTRL_FLAGS_RIE; - sci_out(port, SCSCR, ctrl); - local_irq_restore(flags); -} - -static int sci_get_CD(void * ptr) -{ - /* If you have signal for CD (Carrier Detect), please change here. */ - return 1; -} - -static int sci_chars_in_buffer(void * ptr) -{ - struct sci_port *port = ptr; - -#if !defined(SCI_ONLY) - if (port->type == PORT_SCIF) { - return (sci_in(port, SCFDR) >> 8) + ((sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1); - } else { - return (sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1; - } -#else - return (sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1; -#endif -} - -static void sci_shutdown_port(void * ptr) -{ - struct sci_port *port = ptr; - - port->gs.flags &= ~ GS_ACTIVE; - if (port->gs.tty && port->gs.tty->termios->c_cflag & HUPCL) - sci_setsignals(port, 0, 0); - sci_free_irq(port); -#if defined(__H8300S__) - h8300_sci_enable(port,sci_disable); -#endif -} - -/* ********************************************************************** * - * Here are the routines that actually * - * interface with the rest of the system * - * ********************************************************************** */ - -static int sci_open(struct tty_struct * tty, struct file * filp) -{ - struct sci_port *port; - int retval, line; - - line = tty->index; - - if ((line < 0) || (line >= SCI_NPORTS)) - return -ENODEV; - - port = &sci_ports[line]; - - tty->driver_data = port; - port->gs.tty = tty; - port->gs.count++; - - port->event = 0; - INIT_WORK(&port->tqueue, do_softint, port); - -#if defined(__H8300S__) - h8300_sci_enable(port,sci_enable); -#endif - - /* - * Start up serial port - */ - retval = gs_init_port(&port->gs); - if (retval) { - goto failed_1; - } - - port->gs.flags |= GS_ACTIVE; - sci_setsignals(port, 1,1); - - if (port->gs.count == 1) { - retval = sci_request_irq(port); - } - - retval = gs_block_til_ready(port, filp); - - if (retval) { - goto failed_3; - } - -#ifdef CONFIG_SERIAL_CONSOLE - if (sercons.cflag && sercons.index == line) { - tty->termios->c_cflag = sercons.cflag; - port->gs.baud = sercons_baud; - sercons.cflag = 0; - sci_set_real_termios(port); - } -#endif - -#ifdef CONFIG_SH_KGDB_CONSOLE - if (kgdbcons.cflag && kgdbcons.index == line) { - tty->termios->c_cflag = kgdbcons.cflag; - port->gs.baud = kgdb_baud; - sercons.cflag = 0; - sci_set_real_termios(port); - } -#endif - - sci_enable_rx_interrupts(port); - - return 0; - -failed_3: - sci_free_irq(port); -failed_1: - port->gs.count--; - return retval; -} - -static void sci_hungup(void *ptr) -{ - return; -} - -static void sci_close(void *ptr) -{ - return; -} - -static int sci_tiocmget(struct tty_struct *tty, struct file *file) -{ - struct sci_port *port = tty->driver_data; - return sci_getsignals(port); -} - -static int sci_tiocmset(struct tty_struct *tty, struct file *file, - unsigned int set, unsigned int clear) -{ - struct sci_port *port = tty->driver_data; - int rts = -1, dtr = -1; - - if (set & TIOCM_RTS) - rts = 1; - if (set & TIOCM_DTR) - dtr = 1; - if (clear & TIOCM_RTS) - rts = 0; - if (clear & TIOCM_DTR) - dtr = 0; - - sci_setsignals(port, dtr, rts); - return 0; -} - -static int sci_ioctl(struct tty_struct * tty, struct file * filp, - unsigned int cmd, unsigned long arg) -{ - int rc; - struct sci_port *port = tty->driver_data; - int ival; - - rc = 0; - switch (cmd) { - case TIOCGSOFTCAR: - rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), - (unsigned int __user *) arg); - break; - case TIOCSSOFTCAR: - if ((rc = get_user(ival, (unsigned int __user *) arg)) == 0) - tty->termios->c_cflag = - (tty->termios->c_cflag & ~CLOCAL) | - (ival ? CLOCAL : 0); - break; - case TIOCGSERIAL: - if ((rc = verify_area(VERIFY_WRITE, (void __user *) arg, - sizeof(struct serial_struct))) == 0) - rc = gs_getserial(&port->gs, (struct serial_struct *) arg); - break; - case TIOCSSERIAL: - if ((rc = verify_area(VERIFY_READ, (void __user *) arg, - sizeof(struct serial_struct))) == 0) - rc = gs_setserial(&port->gs, - (struct serial_struct *) arg); - break; - default: - rc = -ENOIOCTLCMD; - break; - } - - return rc; -} - -static void sci_throttle(struct tty_struct * tty) -{ - struct sci_port *port = (struct sci_port *)tty->driver_data; - - /* If the port is using any type of input flow - * control then throttle the port. - */ - if ((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty)) ) - port->gs.flags |= SCI_RX_THROTTLE; -} - -static void sci_unthrottle(struct tty_struct * tty) -{ - struct sci_port *port = (struct sci_port *)tty->driver_data; - - /* Always unthrottle even if flow control is not enabled on - * this port in case we disabled flow control while the port - * was throttled - */ - port->gs.flags &= ~SCI_RX_THROTTLE; - sci_enable_rx_interrupts(port); - return; -} - -#ifdef CONFIG_PROC_FS -static int sci_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - int i; - struct sci_port *port; - int len = 0; - - len += sprintf(page, "sciinfo:0.1\n"); - for (i = 0; i < SCI_NPORTS && len < 4000; i++) { - port = &sci_ports[i]; - len += sprintf(page+len, "%d: uart:%s address: %08x", i, - (port->type == PORT_SCI) ? "SCI" : "SCIF", - port->base); - len += sprintf(page+len, " baud:%d", port->gs.baud); - len += sprintf(page+len, " tx:%d rx:%d", - port->icount.tx, port->icount.rx); - - if (port->icount.frame) - len += sprintf(page+len, " fe:%d", port->icount.frame); - if (port->icount.parity) - len += sprintf(page+len, " pe:%d", port->icount.parity); - if (port->icount.brk) - len += sprintf(page+len, " brk:%d", port->icount.brk); - if (port->icount.overrun) - len += sprintf(page+len, " oe:%d", port->icount.overrun); - len += sprintf(page+len, "\n"); - } - return len; -} -#endif - -#ifdef CONFIG_CPU_FREQ -/* - * Here we define a transistion notifier so that we can update all of our - * ports' baud rate when the peripheral clock changes. - */ - -static int sci_notifier(struct notifier_block *self, unsigned long phase, void *p) -{ - struct cpufreq_freqs *freqs = p; - int i; - - if (phase == CPUFREQ_POSTCHANGE) { - for (i = 0; i < SCI_NPORTS; i++) { - /* - * This will force a baud rate change in hardware. - */ - if (sci_ports[i].gs.tty != NULL) { - sci_set_baud(&sci_ports[i], sci_ports[i].gs.baud); - } - } - printk("%s: got a postchange notification for cpu %d (old %d, new %d)\n", - __FUNCTION__, freqs->cpu, freqs->old, freqs->new); - } - - return NOTIFY_OK; -} - -static struct notifier_block sci_nb = { &sci_notifier, NULL, 0 }; -#endif /* CONFIG_CPU_FREQ */ - -static struct tty_operations sci_ops = { - .open = sci_open, - .close = gs_close, - .write = gs_write, - .put_char = gs_put_char, - .flush_chars = gs_flush_chars, - .write_room = gs_write_room, - .chars_in_buffer = gs_chars_in_buffer, - .flush_buffer = gs_flush_buffer, - .ioctl = sci_ioctl, - .throttle = sci_throttle, - .unthrottle = sci_unthrottle, - .set_termios = gs_set_termios, - .stop = gs_stop, - .start = gs_start, - .hangup = gs_hangup, -#ifdef CONFIG_PROC_FS - .read_proc = sci_read_proc, -#endif - .tiocmget = sci_tiocmget, - .tiocmset = sci_tiocmset, -}; - -/* ********************************************************************** * - * Here are the initialization routines. * - * ********************************************************************** */ - -static int sci_init_drivers(void) -{ - int error; - struct sci_port *port; - sci_driver = alloc_tty_driver(SCI_NPORTS); - if (!sci_driver) - return -ENOMEM; - - sci_driver->owner = THIS_MODULE; - sci_driver->driver_name = "sci"; - sci_driver->name = "ttySC"; - sci_driver->devfs_name = "ttsc/"; - sci_driver->major = SCI_MAJOR; - sci_driver->minor_start = SCI_MINOR_START; - sci_driver->type = TTY_DRIVER_TYPE_SERIAL; - sci_driver->subtype = SERIAL_TYPE_NORMAL; - sci_driver->init_termios = tty_std_termios; - sci_driver->init_termios.c_cflag = - B9600 | CS8 | CREAD | HUPCL | CLOCAL | CRTSCTS; - sci_driver->flags = TTY_DRIVER_REAL_RAW; - tty_set_operations(sci_driver, &sci_ops); - if ((error = tty_register_driver(sci_driver))) { - printk(KERN_ERR "sci: Couldn't register SCI driver, error = %d\n", - error); - put_tty_driver(sci_driver); - return 1; - } - - for (port = &sci_ports[0]; port < &sci_ports[SCI_NPORTS]; port++) { - port->gs.magic = SCI_MAGIC; - port->gs.close_delay = HZ/2; - port->gs.closing_wait = 30 * HZ; - port->gs.rd = &sci_real_driver; - init_waitqueue_head(&port->gs.open_wait); - init_waitqueue_head(&port->gs.close_wait); - port->old_cflag = 0; - port->icount.cts = port->icount.dsr = - port->icount.rng = port->icount.dcd = 0; - port->icount.rx = port->icount.tx = 0; - port->icount.frame = port->icount.parity = 0; - port->icount.overrun = port->icount.brk = 0; - } - -#ifdef CONFIG_CPU_FREQ - /* Setup transition notifier */ - if (cpufreq_register_notifier(&sci_nb, CPUFREQ_TRANSITION_NOTIFIER) < 0) { - printk(KERN_ERR "sci: Unable to register CPU frequency notifier\n"); - return 1; - } - printk("sci: CPU frequency notifier registered\n"); -#endif - return 0; -} - -static int sci_request_irq(struct sci_port *port) -{ - int i; -#if !defined(SCI_ONLY) - irqreturn_t (*handlers[4])(int irq, void *p, struct pt_regs *regs) = { - sci_er_interrupt, sci_rx_interrupt, sci_tx_interrupt, - sci_br_interrupt, - }; -#else - void (*handlers[3])(int irq, void *ptr, struct pt_regs *regs) = { - sci_er_interrupt, sci_rx_interrupt, sci_tx_interrupt, - }; -#endif - for (i=0; i<(sizeof(handlers)/sizeof(handlers[0])); i++) { - if (!port->irqs[i]) continue; - if (request_irq(port->irqs[i], handlers[i], SA_INTERRUPT, - "sci", port)) { - printk(KERN_ERR "sci: Cannot allocate irq.\n"); - return -ENODEV; - } - } - return 0; -} - -static void sci_free_irq(struct sci_port *port) -{ - int i; - - for (i=0; i<4; i++) { - if (!port->irqs[i]) continue; - free_irq(port->irqs[i], port); - } -} - -static char banner[] __initdata = - KERN_INFO "SuperH SCI(F) driver initialized\n"; - -int __init sci_init(void) -{ - struct sci_port *port; - int j; - - printk("%s", banner); - - for (j=0; jbase, - (port->type == PORT_SCI) ? "SCI" : "SCIF"); - } - - sci_init_drivers(); - -#ifdef CONFIG_SH_STANDARD_BIOS - sh_bios_gdb_detach(); -#endif - return 0; /* Return -EIO when not detected */ -} - -module_init(sci_init); - -#ifdef MODULE -#undef func_enter -#undef func_exit - -void cleanup_module(void) -{ - tty_unregister_driver(sci_driver); - put_tty_driver(sci_driver); -} - -#include "generic_serial.c" -#endif - -#ifdef CONFIG_SERIAL_CONSOLE -/* - * Print a string to the serial port trying not to disturb - * any possible real use of the port... - */ -static void serial_console_write(struct console *co, const char *s, - unsigned count) -{ - put_string(sercons_port, s, count); -} - -static struct tty_driver *serial_console_device(struct console *c, int *index) -{ - *index = c->index; - return sci_driver; -} - -/* - * Setup initial baud/bits/parity. We do two things here: - * - construct a cflag setting for the first rs_open() - * - initialize the serial port - * Return non-zero if we didn't find a serial port. - */ -static int __init serial_console_setup(struct console *co, char *options) -{ - int baud = 9600; - int bits = 8; - int parity = 'n'; - int cflag = CREAD | HUPCL | CLOCAL; - char *s; - - sercons_port = &sci_ports[co->index]; - - if (options) { - baud = simple_strtoul(options, NULL, 10); - s = options; - while(*s >= '0' && *s <= '9') - s++; - if (*s) parity = *s++; - if (*s) bits = *s - '0'; - } - - /* - * Now construct a cflag setting. - */ - switch (baud) { - case 19200: - cflag |= B19200; - break; - case 38400: - cflag |= B38400; - break; - case 57600: - cflag |= B57600; - break; - case 115200: - cflag |= B115200; - break; - case 9600: - default: - cflag |= B9600; - baud = 9600; - break; - } - switch (bits) { - case 7: - cflag |= CS7; - break; - default: - case 8: - cflag |= CS8; - break; - } - switch (parity) { - case 'o': case 'O': - cflag |= PARODD; - break; - case 'e': case 'E': - cflag |= PARENB; - break; - } - - co->cflag = cflag; - sercons_baud = baud; - -#if defined(__H8300S__) - h8300_sci_enable(sercons_port,sci_enable); -#endif - sci_set_termios_cflag(sercons_port, cflag, baud); - sercons_port->old_cflag = cflag; - - return 0; -} - -static struct console sercons = { - .name = "ttySC", - .write = serial_console_write, - .device = serial_console_device, - .setup = serial_console_setup, - .flags = CON_PRINTBUFFER, - .index = -1, -}; - -/* - * Register console. - */ - -#ifdef CONFIG_SH_EARLY_PRINTK -extern void sh_console_unregister (void); -#endif - -static int __init sci_console_init(void) -{ - register_console(&sercons); -#ifdef CONFIG_SH_EARLY_PRINTK - /* Now that the real console is available, unregister the one we - * used while first booting. - */ - sh_console_unregister(); -#endif - return 0; -} -console_initcall(sci_console_init); - -#endif /* CONFIG_SERIAL_CONSOLE */ - - -#ifdef CONFIG_SH_KGDB - -/* Initialise the KGDB serial port */ -int kgdb_sci_setup(void) -{ - int cflag = CREAD | HUPCL | CLOCAL; - - if ((kgdb_portnum < 0) || (kgdb_portnum >= SCI_NPORTS)) - return -1; - - kgdb_sci_port = &sci_ports[kgdb_portnum]; - - switch (kgdb_baud) { - case 115200: - cflag |= B115200; - break; - case 57600: - cflag |= B57600; - break; - case 38400: - cflag |= B38400; - break; - case 19200: - cflag |= B19200; - break; - case 9600: - default: - cflag |= B9600; - kgdb_baud = 9600; - break; - } - - switch (kgdb_bits) { - case '7': - cflag |= CS7; - break; - default: - case '8': - cflag |= CS8; - break; - } - - switch (kgdb_parity) { - case 'O': - cflag |= PARODD; - break; - case 'E': - cflag |= PARENB; - break; - } - - kgdb_cflag = cflag; - sci_set_termios_cflag(kgdb_sci_port, kgdb_cflag, kgdb_baud); - - /* Set up the interrupt for BREAK from GDB */ - /* Commented out for now since it may not be possible yet... - request_irq(kgdb_sci_port->irqs[0], kgdb_break_interrupt, - SA_INTERRUPT, "sci", kgdb_sci_port); - sci_enable_rx_interrupts(kgdb_sci_port); - */ - - /* Setup complete: initialize function pointers */ - kgdb_getchar = kgdb_sci_getchar; - kgdb_putchar = kgdb_sci_putchar; - - return 0; -} - -#ifdef CONFIG_SH_KGDB_CONSOLE - -/* Create a console device */ -static kdev_t kgdb_console_device(struct console *c) -{ - return MKDEV(SCI_MAJOR, SCI_MINOR_START + c->index); -} - -/* Set up the KGDB console */ -static int __init kgdb_console_setup(struct console *co, char *options) -{ - /* NB we ignore 'options' because we've already done the setup */ - co->cflag = kgdb_cflag; - - return 0; -} - -/* Register the KGDB console so we get messages (d'oh!) */ -void __init kgdb_console_init(void) -{ - register_console(&kgdbcons); -} - -/* The console structure for KGDB */ -static struct console kgdbcons = { - name:"ttySC", - write:kgdb_console_write, - device:kgdb_console_device, - wait_key:serial_console_wait_key, - setup:kgdb_console_setup, - flags:CON_PRINTBUFFER | CON_ENABLED, - index:-1, -}; - -#endif /* CONFIG_SH_KGDB_CONSOLE */ - -#endif /* CONFIG_SH_KGDB */ diff -Nru a/drivers/char/sh-sci.h b/drivers/char/sh-sci.h --- a/drivers/char/sh-sci.h Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,478 +0,0 @@ -/* $Id: sh-sci.h,v 1.7 2004/02/10 17:04:17 lethal Exp $ - * - * linux/drivers/char/sh-sci.h - * - * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO) - * Copyright (C) 1999, 2000 Niibe Yutaka - * Copyright (C) 2000 Greg Banks - * Modified to support multiple serial ports. Stuart Menefy (May 2000). - * Modified to support SH7760 SCIF. Paul Mundt (Oct 2003). - * Modified to support H8/300 Serise Yoshinori Sato (Feb 2004). - * - */ -#include - -#if defined(__H8300H__) || defined(__H8300S__) -#include -#if defined(CONFIG_H83007) || defined(CONFIG_H83068) -#include -#endif -#if defined(CONFIG_H8S2678) -#include -#endif -#endif - -/* Values for sci_port->type */ -#define PORT_SCI 0 -#define PORT_SCIF 1 -#define PORT_IRDA 1 /* XXX: temporary assignment */ - -/* Offsets into the sci_port->irqs array */ -#define SCIx_ERI_IRQ 0 -#define SCIx_RXI_IRQ 1 -#define SCIx_TXI_IRQ 2 - -/* ERI, RXI, TXI, BRI */ -#define SCI_IRQS { 23, 24, 25, 0 } -#define SH3_SCIF_IRQS { 56, 57, 59, 58 } -#define SH3_IRDA_IRQS { 52, 53, 55, 54 } -#define SH4_SCIF_IRQS { 40, 41, 43, 42 } -#define STB1_SCIF1_IRQS {23, 24, 26, 25 } -#define SH7760_SCIF0_IRQS { 52, 53, 55, 54 } -#define SH7760_SCIF1_IRQS { 72, 73, 75, 74 } -#define SH7760_SCIF2_IRQS { 76, 77, 79, 78 } -#define H8300H_SCI_IRQS0 {52, 53, 54, 0 } -#define H8300H_SCI_IRQS1 {56, 57, 58, 0 } -#define H8300H_SCI_IRQS2 {60, 61, 62, 0 } -#define H8S_SCI_IRQS0 {88, 89, 90, 0 } -#define H8S_SCI_IRQS1 {92, 93, 94, 0 } -#define H8S_SCI_IRQS2 {96, 97, 98, 0 } - -#if defined(CONFIG_CPU_SUBTYPE_SH7708) -# define SCI_NPORTS 1 -# define SCI_INIT { \ - { {}, PORT_SCI, 0xfffffe80, SCI_IRQS, sci_init_pins_sci } \ -} -# define SCSPTR 0xffffff7c /* 8 bit */ -# define SCSCR_INIT(port) 0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ -# define SCI_ONLY -#elif defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) -# define SCI_NPORTS 3 -# define SCI_INIT { \ - { {}, PORT_SCI, 0xfffffe80, SCI_IRQS, sci_init_pins_sci }, \ - { {}, PORT_SCIF, 0xA4000150, SH3_SCIF_IRQS, sci_init_pins_scif }, \ - { {}, PORT_SCIF, 0xA4000140, SH3_IRDA_IRQS, sci_init_pins_irda } \ -} -# define SCPCR 0xA4000116 /* 16 bit SCI and SCIF */ -# define SCPDR 0xA4000136 /* 8 bit SCI and SCIF */ -# define SCSCR_INIT(port) 0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ -# define SCI_AND_SCIF -#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) -# define SCI_NPORTS 2 -# define SCI_INIT { \ - { {}, PORT_SCI, 0xffe00000, SCI_IRQS, sci_init_pins_sci }, \ - { {}, PORT_SCIF, 0xFFE80000, SH4_SCIF_IRQS, sci_init_pins_scif } \ -} -# define SCSPTR1 0xffe0001c /* 8 bit SCI */ -# define SCSPTR2 0xFFE80020 /* 16 bit SCIF */ -# define SCIF_ORER 0x0001 /* overrun error bit */ -# define SCSCR_INIT(port) (((port)->type == PORT_SCI) ? \ - 0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ : \ - 0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ ) -# define SCI_AND_SCIF -#elif defined(CONFIG_CPU_SUBTYPE_SH7760) -# define SCI_NPORTS 3 -# define SCI_INIT { \ - { {}, PORT_SCIF, 0xfe600000, SH7760_SCIF0_IRQS, sci_init_pins_scif }, \ - { {}, PORT_SCIF, 0xfe610000, SH7760_SCIF1_IRQS, sci_init_pins_scif }, \ - { {}, PORT_SCIF, 0xfe620000, SH7760_SCIF2_IRQS, sci_init_pins_scif } \ -} -# define SCSPTR0 0xfe600024 /* 16 bit SCIF */ -# define SCSPTR1 0xfe610024 /* 16 bit SCIF */ -# define SCSPTR2 0xfe620024 /* 16 bit SCIF */ -# define SCIF_ORDER 0x0001 /* overrun error bit */ -# define SCSCR_INIT(port) 0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ -# define SCIF_ONLY -#elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) -# define SCI_NPORTS 2 -# define SCI_INIT { \ - { {}, PORT_SCIF, 0xffe00000, STB1_SCIF1_IRQS, sci_init_pins_scif }, \ - { {}, PORT_SCIF, 0xffe80000, SH4_SCIF_IRQS, sci_init_pins_scif } \ -} -# define SCSPTR1 0xffe00020 /* 16 bit SCIF */ -# define SCSPTR2 0xffe80020 /* 16 bit SCIF */ -# define SCIF_ORER 0x0001 /* overrun error bit */ -# define SCSCR_INIT(port) 0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ -# define SCIF_ONLY -#elif defined(CONFIG_H83007) || defined(CONFIG_H83068) -# define SCI_NPORTS 3 -# define SCI_INIT { \ - { {}, PORT_SCI, 0x00ffffb0, H8300H_SCI_IRQS0, sci_init_pins_sci }, \ - { {}, PORT_SCI, 0x00ffffb8, H8300H_SCI_IRQS1, sci_init_pins_sci }, \ - { {}, PORT_SCI, 0x00ffffc0, H8300H_SCI_IRQS2, sci_init_pins_sci } \ -} -# define SCSCR_INIT(port) 0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ -# define SCI_ONLY -# define H8300_SCI_DR(ch) *(volatile char *)(P1DR + h8300_sci_pins[ch].port) -#elif defined(CONFIG_H8S2678) -# define SCI_NPORTS 3 -# define SCI_INIT { \ - { {}, PORT_SCI, 0x00ffff78, H8S_SCI_IRQS0, sci_init_pins_sci }, \ - { {}, PORT_SCI, 0x00ffff80, H8S_SCI_IRQS1, sci_init_pins_sci }, \ - { {}, PORT_SCI, 0x00ffff88, H8S_SCI_IRQS2, sci_init_pins_sci } \ -} -# define SCSCR_INIT(port) 0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ -# define SCI_ONLY -# define H8300_SCI_DR(ch) *(volatile char *)(P1DR + h8300_sci_pins[ch].port) -#else -# error CPU subtype not defined -#endif - -/* SCSCR */ -#define SCI_CTRL_FLAGS_TIE 0x80 /* all */ -#define SCI_CTRL_FLAGS_RIE 0x40 /* all */ -#define SCI_CTRL_FLAGS_TE 0x20 /* all */ -#define SCI_CTRL_FLAGS_RE 0x10 /* all */ -/* SCI_CTRL_FLAGS_REIE 0x08 * 7750 SCIF */ -/* SCI_CTRL_FLAGS_MPIE 0x08 * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -/* SCI_CTRL_FLAGS_TEIE 0x04 * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -/* SCI_CTRL_FLAGS_CKE1 0x02 * all */ -/* SCI_CTRL_FLAGS_CKE0 0x01 * 7707 SCI/SCIF, 7708 SCI, 7709 SCI/SCIF, 7750 SCI */ - -/* SCxSR SCI */ -#define SCI_TDRE 0x80 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -#define SCI_RDRF 0x40 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -#define SCI_ORER 0x20 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -#define SCI_FER 0x10 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -#define SCI_PER 0x08 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -#define SCI_TEND 0x04 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -/* SCI_MPB 0x02 * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ -/* SCI_MPBT 0x01 * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */ - -#define SCI_ERRORS ( SCI_PER | SCI_FER | SCI_ORER) - -/* SCxSR SCIF */ -#define SCIF_ER 0x0080 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_TEND 0x0040 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_TDFE 0x0020 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_BRK 0x0010 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_FER 0x0008 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_PER 0x0004 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_RDF 0x0002 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ -#define SCIF_DR 0x0001 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */ - -#define SCIF_ERRORS ( SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK) - -#if defined(SCI_ONLY) -# define SCxSR_TEND(port) SCI_TEND -# define SCxSR_ERRORS(port) SCI_ERRORS -# define SCxSR_RDxF(port) SCI_RDRF -# define SCxSR_TDxE(port) SCI_TDRE -# define SCxSR_ORER(port) SCI_ORER -# define SCxSR_FER(port) SCI_FER -# define SCxSR_PER(port) SCI_PER -# define SCxSR_BRK(port) 0x00 -# define SCxSR_RDxF_CLEAR(port) 0xbc -# define SCxSR_ERROR_CLEAR(port) 0xc4 -# define SCxSR_TDxE_CLEAR(port) 0x78 -# define SCxSR_BREAK_CLEAR(port) 0xc4 -#elif defined(SCIF_ONLY) -# define SCxSR_TEND(port) SCIF_TEND -# define SCxSR_ERRORS(port) SCIF_ERRORS -# define SCxSR_RDxF(port) SCIF_RDF -# define SCxSR_TDxE(port) SCIF_TDFE -# define SCxSR_ORER(port) 0x0000 -# define SCxSR_FER(port) SCIF_FER -# define SCxSR_PER(port) SCIF_PER -# define SCxSR_BRK(port) SCIF_BRK -# define SCxSR_RDxF_CLEAR(port) 0x00fc -# define SCxSR_ERROR_CLEAR(port) 0x0073 -# define SCxSR_TDxE_CLEAR(port) 0x00df -# define SCxSR_BREAK_CLEAR(port) 0x00e3 -#else -# define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND) -# define SCxSR_ERRORS(port) (((port)->type == PORT_SCI) ? SCI_ERRORS : SCIF_ERRORS) -# define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_RDF) -# define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE) -# define SCxSR_ORER(port) (((port)->type == PORT_SCI) ? SCI_ORER : 0x0000) -# define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER) -# define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER) -# define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK) -# define SCxSR_RDxF_CLEAR(port) (((port)->type == PORT_SCI) ? 0xbc : 0x00fc) -# define SCxSR_ERROR_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x0073) -# define SCxSR_TDxE_CLEAR(port) (((port)->type == PORT_SCI) ? 0x78 : 0x00df) -# define SCxSR_BREAK_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x00e3) -#endif - -/* SCFCR */ -#define SCFCR_RFRST 0x0002 -#define SCFCR_TFRST 0x0004 -#define SCFCR_MCE 0x0008 - -#define SCI_MAJOR 204 -#define SCI_MINOR_START 8 - -/* Generic serial flags */ -#define SCI_RX_THROTTLE 0x0000001 - -#define SCI_MAGIC 0xbabeface - -/* - * Events are used to schedule things to happen at timer-interrupt - * time, instead of at rs interrupt time. - */ -#define SCI_EVENT_WRITE_WAKEUP 0 - -struct sci_port { - struct gs_port gs; - int type; - unsigned int base; - unsigned char irqs[4]; /* ERI, RXI, TXI, BRI */ - void (*init_pins)(struct sci_port* port, unsigned int cflag); - unsigned int old_cflag; - struct async_icount icount; - struct work_struct tqueue; - unsigned long event; - int break_flag; -}; - -#define SCI_IN(size, offset) \ - unsigned int addr = port->base + (offset); \ - if ((size) == 8) { \ - return ctrl_inb(addr); \ - } else { \ - return ctrl_inw(addr); \ - } -#define SCI_OUT(size, offset, value) \ - unsigned int addr = port->base + (offset); \ - if ((size) == 8) { \ - ctrl_outb(value, addr); \ - } else { \ - ctrl_outw(value, addr); \ - } - -#define CPU_SCIx_FNS(name, sci_offset, sci_size, scif_offset, scif_size)\ - static inline unsigned int sci_##name##_in(struct sci_port* port) \ - { \ - if (port->type == PORT_SCI) { \ - SCI_IN(sci_size, sci_offset) \ - } else { \ - SCI_IN(scif_size, scif_offset); \ - } \ - } \ - static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \ - { \ - if (port->type == PORT_SCI) { \ - SCI_OUT(sci_size, sci_offset, value) \ - } else { \ - SCI_OUT(scif_size, scif_offset, value); \ - } \ - } - -#define CPU_SCIF_FNS(name, scif_offset, scif_size) \ - static inline unsigned int sci_##name##_in(struct sci_port* port) \ - { \ - SCI_IN(scif_size, scif_offset); \ - } \ - static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \ - { \ - SCI_OUT(scif_size, scif_offset, value); \ - } - -#define CPU_SCI_FNS(name, sci_offset, sci_size) \ - static inline unsigned int sci_##name##_in(struct sci_port* port) \ - { \ - SCI_IN(sci_size, sci_offset); \ - } \ - static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \ - { \ - SCI_OUT(sci_size, sci_offset, value); \ - } - -#ifdef CONFIG_CPU_SH3 -#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \ - sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \ - h8_sci_offset, h8_sci_size) \ - CPU_SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh3_scif_offset, sh3_scif_size) -#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \ - CPU_SCIF_FNS(name, sh3_scif_offset, sh3_scif_size) -#elif defined(__H8300H__) || defined(__H8300S__) -#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \ - sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \ - h8_sci_offset, h8_sci_size) \ - CPU_SCI_FNS(name, h8_sci_offset, h8_sci_size) -#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) -#else -#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \ - sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \ - h8_sci_offset, h8_sci_size) \ - CPU_SCIx_FNS(name, sh4_sci_offset, sh4_sci_size, sh4_scif_offset, sh4_scif_size) -#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \ - CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size) -#endif - -/* reg SCI/SH3 SCI/SH4 SCIF/SH3 SCIF/SH4 SCI/H8*/ -/* name off sz off sz off sz off sz off sz*/ -SCIx_FNS(SCSMR, 0x00, 8, 0x00, 8, 0x00, 8, 0x00, 16, 0x00, 8) -SCIx_FNS(SCBRR, 0x02, 8, 0x04, 8, 0x02, 8, 0x04, 8, 0x01, 8) -SCIx_FNS(SCSCR, 0x04, 8, 0x08, 8, 0x04, 8, 0x08, 16, 0x02, 8) -SCIx_FNS(SCxTDR, 0x06, 8, 0x0c, 8, 0x06, 8, 0x0C, 8, 0x03, 8) -SCIx_FNS(SCxSR, 0x08, 8, 0x10, 8, 0x08, 16, 0x10, 16, 0x04, 8) -SCIx_FNS(SCxRDR, 0x0a, 8, 0x14, 8, 0x0A, 8, 0x14, 8, 0x05, 8) -SCIF_FNS(SCFCR, 0x0c, 8, 0x18, 16) -SCIF_FNS(SCFDR, 0x0e, 16, 0x1C, 16) -SCIF_FNS(SCLSR, 0, 0, 0x24, 16) - -#define sci_in(port, reg) sci_##reg##_in(port) -#define sci_out(port, reg, value) sci_##reg##_out(port, value) - -/* H8/300 series SCI pins assignment */ -#if defined(__H8300H__) || defined(__H8300S__) -static const struct __attribute__((packed)) -{ - int port; /* GPIO port no */ - unsigned short rx,tx; /* GPIO bit no */ -} h8300_sci_pins[] = -{ -#if defined(CONFIG_H83007) || defined(CONFIG_H83068) - { /* SCI0 */ - .port = H8300_GPIO_P9, - .rx = H8300_GPIO_B2, - .tx = H8300_GPIO_B0, - }, - { /* SCI1 */ - .port = H8300_GPIO_P9, - .rx = H8300_GPIO_B3, - .tx = H8300_GPIO_B1, - }, - { /* SCI2 */ - .port = H8300_GPIO_PB, - .rx = H8300_GPIO_B7, - .tx = H8300_GPIO_B6, - } -#elif defined(CONFIG_H8S2678) - { /* SCI0 */ - .port = H8300_GPIO_P3, - .rx = H8300_GPIO_B2, - .tx = H8300_GPIO_B0, - }, - { /* SCI1 */ - .port = H8300_GPIO_P3, - .rx = H8300_GPIO_B3, - .tx = H8300_GPIO_B1, - }, - { /* SCI2 */ - .port = H8300_GPIO_P5, - .rx = H8300_GPIO_B1, - .tx = H8300_GPIO_B0, - } -#endif -}; -#endif - -#if defined(CONFIG_CPU_SUBTYPE_SH7708) -static inline int sci_rxd_in(struct sci_port *port) -{ - if (port->base == 0xfffffe80) - return ctrl_inb(SCSPTR)&0x01 ? 1 : 0; /* SCI */ - return 1; -} -#elif defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) -static inline int sci_rxd_in(struct sci_port *port) -{ - if (port->base == 0xfffffe80) - return ctrl_inb(SCPDR)&0x01 ? 1 : 0; /* SCI */ - if (port->base == 0xa4000150) - return ctrl_inb(SCPDR)&0x10 ? 1 : 0; /* SCIF */ - if (port->base == 0xa4000140) - return ctrl_inb(SCPDR)&0x04 ? 1 : 0; /* IRDA */ - return 1; -} -#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751) -static inline int sci_rxd_in(struct sci_port *port) -{ -#ifndef SCIF_ONLY - if (port->base == 0xffe00000) - return ctrl_inb(SCSPTR1)&0x01 ? 1 : 0; /* SCI */ -#endif -#ifndef SCI_ONLY - if (port->base == 0xffe80000) - return ctrl_inw(SCSPTR2)&0x0001 ? 1 : 0; /* SCIF */ -#endif - return 1; -} -#elif defined(CONFIG_CPU_SUBTYPE_SH7760) -static inline int sci_rxd_in(struct sci_port *port) -{ - if (port->base == 0xfe600000) - return ctrl_inw(SCSPTR0) & 0x0001 ? 1 : 0; /* SCIF */ - if (port->base == 0xfe610000) - return ctrl_inw(SCSPTR1) & 0x0001 ? 1 : 0; /* SCIF */ - if (port->base == 0xfe620000) - return ctrl_inw(SCSPTR2) & 0x0001 ? 1 : 0; /* SCIF */ -} -#elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) -static inline int sci_rxd_in(struct sci_port *port) -{ - if (port->base == 0xffe00000) - return ctrl_inw(SCSPTR1)&0x0001 ? 1 : 0; /* SCIF */ - else - return ctrl_inw(SCSPTR2)&0x0001 ? 1 : 0; /* SCIF */ - -} -#elif defined(__H8300H__) || defined(__H8300S__) -static inline int sci_rxd_in(struct sci_port *port) -{ - int ch = (port->base - SMR0) >> 3; - return (H8300_SCI_DR(ch) & h8300_sci_pins[ch].rx) ? 1 : 0; -} -#endif - -/* - * Values for the BitRate Register (SCBRR) - * - * The values are actually divisors for a frequency which can - * be internal to the SH3 (14.7456MHz) or derived from an external - * clock source. This driver assumes the internal clock is used; - * to support using an external clock source, config options or - * possibly command-line options would need to be added. - * - * Also, to support speeds below 2400 (why?) the lower 2 bits of - * the SCSMR register would also need to be set to non-zero values. - * - * -- Greg Banks 27Feb2000 - * - * Answer: The SCBRR register is only eight bits, and the value in - * it gets larger with lower baud rates. At around 2400 (depending on - * the peripherial module clock) you run out of bits. However the - * lower two bits of SCSMR allow the module clock to be divided down, - * scaling the value which is needed in SCBRR. - * - * -- Stuart Menefy - 23 May 2000 - * - * I meant, why would anyone bother with bitrates below 2400. - * - * -- Greg Banks - 7Jul2000 - * - * You "speedist"! How will I use my 110bps ASR-33 teletype with paper - * tape reader as a console! - * - * -- Mitch Davis - 15 Jul 2000 - */ - -#define PCLK (current_cpu_data.module_clock) - -#if !defined(__H8300H__) && !defined(__H8300S__) -#define SCBRR_VALUE(bps) ((PCLK+16*bps)/(32*bps)-1) -#else -#define SCBRR_VALUE(bps) (((CONFIG_CPU_CLOCK*1000/32)/bps)-1) -#endif -#define BPS_2400 SCBRR_VALUE(2400) -#define BPS_4800 SCBRR_VALUE(4800) -#define BPS_9600 SCBRR_VALUE(9600) -#define BPS_19200 SCBRR_VALUE(19200) -#define BPS_38400 SCBRR_VALUE(38400) -#define BPS_57600 SCBRR_VALUE(57600) -#define BPS_115200 SCBRR_VALUE(115200) -#define BPS_230400 SCBRR_VALUE(230400) - diff -Nru a/drivers/char/sysrq.c b/drivers/char/sysrq.c --- a/drivers/char/sysrq.c Tue May 18 23:38:08 2004 +++ b/drivers/char/sysrq.c Tue May 18 23:38:08 2004 @@ -313,36 +313,18 @@ } /* - * This function is called by the keyboard handler when SysRq is pressed - * and any other keycode arrives. - */ - -void handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty) -{ - if (!sysrq_enabled) - return; - - __sysrq_lock_table(); - __handle_sysrq_nolock(key, pt_regs, tty); - __sysrq_unlock_table(); -} - -/* * This is the non-locking version of handle_sysrq * It must/can only be called by sysrq key handlers, * as they are inside of the lock */ -void __handle_sysrq_nolock(int key, struct pt_regs *pt_regs, - struct tty_struct *tty) +void __handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty) { struct sysrq_key_op *op_p; int orig_log_level; int i, j; - - if (!sysrq_enabled) - return; + __sysrq_lock_table(); orig_log_level = console_loglevel; console_loglevel = 7; printk(KERN_INFO "SysRq : "); @@ -364,10 +346,22 @@ printk ("\n"); console_loglevel = orig_log_level; } + __sysrq_unlock_table(); +} + +/* + * This function is called by the keyboard handler when SysRq is pressed + * and any other keycode arrives. + */ + +void handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty) +{ + if (!sysrq_enabled) + return; + __handle_sysrq(key, pt_regs, tty); } EXPORT_SYMBOL(handle_sysrq); -EXPORT_SYMBOL(__handle_sysrq_nolock); EXPORT_SYMBOL(__sysrq_lock_table); EXPORT_SYMBOL(__sysrq_unlock_table); EXPORT_SYMBOL(__sysrq_get_key_op); diff -Nru a/drivers/char/tipar.c b/drivers/char/tipar.c --- a/drivers/char/tipar.c Tue May 18 23:38:08 2004 +++ b/drivers/char/tipar.c Tue May 18 23:38:08 2004 @@ -58,6 +58,7 @@ #include #include /* DevFs support */ #include /* Our code depend on parport */ +#include /* * TI definitions @@ -92,6 +93,8 @@ static unsigned int tp_count; /* tipar count */ static unsigned long opened; /* opened devices */ +static struct class_simple *tipar_class; + /* --- macros for parport access -------------------------------------- */ #define r_dtr(x) (parport_read_data(table[(x)].dev->port)) @@ -424,18 +427,26 @@ static int tipar_register(int nr, struct parport *port) { + int err = 0; + /* Register our module into parport */ table[nr].dev = parport_register_device(port, "tipar", NULL, NULL, NULL, 0, (void *) &table[nr]); - if (table[nr].dev == NULL) - return 1; + if (table[nr].dev == NULL) { + err = 1; + goto out; + } + class_simple_device_add(tipar_class, MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr), + NULL, "par%d", nr); /* Use devfs, tree: /dev/ticables/par/[0..2] */ - devfs_mk_cdev(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr), + err = devfs_mk_cdev(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr), S_IFCHR | S_IRUGO | S_IWUGO, "ticables/par/%d", nr); + if (err) + goto out_class; /* Display informations */ printk(KERN_INFO "tipar%d: using %s (%s).\n", nr, port->name, @@ -447,7 +458,14 @@ else printk("tipar%d: link cable not found.\n", nr); - return 0; + err = 0; + goto out; + +out_class: + class_simple_device_remove(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr)); + class_simple_destroy(tipar_class); +out: + return err; } static void @@ -477,23 +495,38 @@ int __init tipar_init_module(void) { + int err = 0; + printk("tipar: parallel link cable driver, version %s\n", DRIVER_VERSION); if (register_chrdev(TIPAR_MAJOR, "tipar", &tipar_fops)) { printk("tipar: unable to get major %d\n", TIPAR_MAJOR); - return -EIO; + err = -EIO; + goto out; } /* Use devfs with tree: /dev/ticables/par/[0..2] */ devfs_mk_dir("ticables/par"); + tipar_class = class_simple_create(THIS_MODULE, "ticables"); + if (IS_ERR(tipar_class)) { + err = PTR_ERR(tipar_class); + goto out_chrdev; + } if (parport_register_driver(&tipar_driver)) { printk("tipar: unable to register with parport\n"); - return -EIO; + err = -EIO; + goto out; } - return 0; + err = 0; + goto out; + +out_chrdev: + unregister_chrdev(TIPAR_MAJOR, "tipar"); +out: + return err; } void __exit @@ -510,8 +543,10 @@ if (table[i].dev == NULL) continue; parport_unregister_device(table[i].dev); + class_simple_device_remove(MKDEV(TIPAR_MAJOR, i)); devfs_remove("ticables/par/%d", i); } + class_simple_destroy(tipar_class); devfs_remove("ticables/par"); printk("tipar: module unloaded !\n"); diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c Tue May 18 23:38:08 2004 +++ b/drivers/char/tty_io.c Tue May 18 23:38:08 2004 @@ -1267,6 +1267,18 @@ #endif /* + * Prevent flush_to_ldisc() from rescheduling the work for later. Then + * kill any delayed work. + */ + clear_bit(TTY_DONT_FLIP, &tty->flags); + cancel_delayed_work(&tty->flip.work); + + /* + * Wait for ->hangup_work and ->flip.work handlers to terminate + */ + flush_scheduled_work(); + + /* * Shutdown the current line discipline, and reset it to N_TTY. * N.B. why reset ldisc when we're releasing the memory?? */ @@ -1282,18 +1294,6 @@ module_put(o_tty->ldisc.owner); o_tty->ldisc = ldiscs[N_TTY]; } - - /* - * Prevent flush_to_ldisc() from rescheduling the work for later. Then - * kill any delayed work. - */ - clear_bit(TTY_DONT_FLIP, &tty->flags); - cancel_delayed_work(&tty->flip.work); - - /* - * Wait for ->hangup_work and ->flip.work handlers to terminate - */ - flush_scheduled_work(); /* * The release_mem function takes care of the details of clearing diff -Nru a/drivers/char/vt.c b/drivers/char/vt.c --- a/drivers/char/vt.c Tue May 18 23:38:08 2004 +++ b/drivers/char/vt.c Tue May 18 23:38:08 2004 @@ -661,11 +661,14 @@ static void visual_init(int currcons, int init) { /* ++Geert: sw->con_init determines console size */ + if (sw) + module_put(sw->owner); sw = conswitchp; #ifndef VT_SINGLE_DRIVER if (con_driver_map[currcons]) sw = con_driver_map[currcons]; #endif + __module_get(sw->owner); cons_num = currcons; display_fg = &master_display_fg; vc_cons[currcons].d->vc_uni_pagedir_loc = &vc_cons[currcons].d->vc_uni_pagedir; @@ -2668,25 +2671,38 @@ * and become default driver for newly opened ones. */ -void take_over_console(const struct consw *csw, int first, int last, int deflt) +int take_over_console(const struct consw *csw, int first, int last, int deflt) { int i, j = -1; const char *desc; + struct module *owner; + + owner = csw->owner; + if (!try_module_get(owner)) + return -ENODEV; acquire_console_sem(); desc = csw->con_startup(); if (!desc) { release_console_sem(); - return; + module_put(owner); + return -ENODEV; } - if (deflt) + if (deflt) { + if (conswitchp) + module_put(conswitchp->owner); + __module_get(owner); conswitchp = csw; + } for (i = first; i <= last; i++) { int old_was_color; int currcons = i; + if (con_driver_map[i]) + module_put(con_driver_map[i]->owner); + __module_get(owner); con_driver_map[i] = csw; if (!vc_cons[i].d || !vc_cons[i].d->vc_sw) @@ -2721,6 +2737,9 @@ printk("to %s\n", desc); release_console_sem(); + + module_put(owner); + return 0; } void give_up_console(const struct consw *csw) @@ -2728,8 +2747,10 @@ int i; for(i = 0; i < MAX_NR_CONSOLES; i++) - if (con_driver_map[i] == csw) + if (con_driver_map[i] == csw) { + module_put(csw->owner); con_driver_map[i] = NULL; + } } #endif diff -Nru a/drivers/char/watchdog/Kconfig b/drivers/char/watchdog/Kconfig --- a/drivers/char/watchdog/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/char/watchdog/Kconfig Tue May 18 23:38:08 2004 @@ -84,6 +84,17 @@ Not sure? It's safe to say N. +config IXP4XX_WATCHDOG + tristate "IXP4xx Watchdog" + depends on WATCHDOG && ARCH_IXP4XX + help + Say Y here if to include support for the watchdog timer + in the Intel IXP4xx network processors. This driver can + be built as a module by choosing M. The module will + be called ixp4xx_wdt. + + Say N if you are unsure. + config SA1100_WATCHDOG tristate "SA1100 watchdog" depends on WATCHDOG && ARCH_SA1100 diff -Nru a/drivers/char/watchdog/Makefile b/drivers/char/watchdog/Makefile --- a/drivers/char/watchdog/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/char/watchdog/Makefile Tue May 18 23:38:08 2004 @@ -35,3 +35,4 @@ obj-$(CONFIG_INDYDOG) += indydog.o obj-$(CONFIG_PCIPCWATCHDOG) += pcwd_pci.o obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o +obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o diff -Nru a/drivers/char/watchdog/ib700wdt.c b/drivers/char/watchdog/ib700wdt.c --- a/drivers/char/watchdog/ib700wdt.c Tue May 18 23:38:09 2004 +++ b/drivers/char/watchdog/ib700wdt.c Tue May 18 23:38:09 2004 @@ -135,7 +135,7 @@ ibwdt_ping(void) { /* Write a watchdog value */ - outb_p(wd_times[wd_margin], WDT_START); + outb_p(wd_margin, WDT_START); } static ssize_t @@ -234,7 +234,7 @@ { spin_lock(&ibwdt_lock); if (expect_close == 42) - outb_p(wd_times[wd_margin], WDT_STOP); + outb_p(0, WDT_STOP); else printk(KERN_CRIT PFX "WDT device closed unexpectedly. WDT will not stop!\n"); @@ -254,7 +254,7 @@ { if (code == SYS_DOWN || code == SYS_HALT) { /* Turn the WDT off */ - outb_p(wd_times[wd_margin], WDT_STOP); + outb_p(0, WDT_STOP); } return NOTIFY_DONE; } diff -Nru a/drivers/char/watchdog/ixp4xx_wdt.c b/drivers/char/watchdog/ixp4xx_wdt.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/char/watchdog/ixp4xx_wdt.c Tue May 18 23:38:09 2004 @@ -0,0 +1,233 @@ +/* + * drivers/watchdog/ixp4xx_wdt.c + * + * Watchdog driver for Intel IXP4xx network processors + * + * Author: Deepak Saxena + * + * Copyright 2004 (c) MontaVista, Software, Inc. + * Based on sa1100 driver, Copyright (C) 2000 Oleg Drokin + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef CONFIG_WATCHDOG_NOWAYOUT +static int nowayout = 1; +#else +static int nowayout = 0; +#endif +static int heartbeat = 60; /* (secs) Default is 1 minute */ +static unsigned long wdt_status; +static unsigned long boot_status; + +#define WDT_TICK_RATE (IXP4XX_PERIPHERAL_BUS_CLOCK * 1000000UL) + +#define WDT_IN_USE 0 +#define WDT_OK_TO_CLOSE 1 + +static void +wdt_enable(void) +{ + *IXP4XX_OSWK = IXP4XX_WDT_KEY; + *IXP4XX_OSWE = 0; + *IXP4XX_OSWT = WDT_TICK_RATE * heartbeat; + *IXP4XX_OSWE = IXP4XX_WDT_COUNT_ENABLE | IXP4XX_WDT_RESET_ENABLE; + *IXP4XX_OSWK = 0; +} + +static void +wdt_disable(void) +{ + *IXP4XX_OSWK = IXP4XX_WDT_KEY; + *IXP4XX_OSWE = 0; + *IXP4XX_OSWK = 0; +} + +static int +ixp4xx_wdt_open(struct inode *inode, struct file *file) +{ + if (test_and_set_bit(WDT_IN_USE, &wdt_status)) + return -EBUSY; + + clear_bit(WDT_OK_TO_CLOSE, &wdt_status); + + wdt_enable(); + + return 0; +} + +static ssize_t +ixp4xx_wdt_write(struct file *file, const char *data, size_t len, loff_t *ppos) +{ + /* Can't seek (pwrite) on this device */ + if (ppos != &file->f_pos) + return -ESPIPE; + + if (len) { + if (!nowayout) { + size_t i; + + clear_bit(WDT_OK_TO_CLOSE, &wdt_status); + + for (i = 0; i != len; i++) { + char c; + + if (get_user(c, data + i)) + return -EFAULT; + if (c == 'V') + set_bit(WDT_OK_TO_CLOSE, &wdt_status); + } + } + wdt_enable(); + } + + return len; +} + +static struct watchdog_info ident = { + .options = WDIOF_CARDRESET | WDIOF_MAGICCLOSE | + WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, + .identity = "IXP4xx Watchdog", +}; + + +static int +ixp4xx_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, + unsigned long arg) +{ + int ret = -ENOIOCTLCMD; + int time; + + switch (cmd) { + case WDIOC_GETSUPPORT: + ret = copy_to_user((struct watchdog_info *)arg, &ident, + sizeof(ident)) ? -EFAULT : 0; + break; + + case WDIOC_GETSTATUS: + ret = put_user(0, (int *)arg); + break; + + case WDIOC_GETBOOTSTATUS: + ret = put_user(boot_status, (int *)arg); + break; + + case WDIOC_SETTIMEOUT: + ret = get_user(time, (int *)arg); + if (ret) + break; + + if (time <= 0 || time > 60) { + ret = -EINVAL; + break; + } + + heartbeat = time; + wdt_enable(); + /* Fall through */ + + case WDIOC_GETTIMEOUT: + ret = put_user(heartbeat, (int *)arg); + break; + + case WDIOC_KEEPALIVE: + wdt_enable(); + ret = 0; + break; + } + return ret; +} + +static int +ixp4xx_wdt_release(struct inode *inode, struct file *file) +{ + if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) { + wdt_disable(); + } else { + printk(KERN_CRIT "WATCHDOG: Device closed unexpectdly - " + "timer will not stop\n"); + } + + clear_bit(WDT_IN_USE, &wdt_status); + clear_bit(WDT_OK_TO_CLOSE, &wdt_status); + + return 0; +} + + +static struct file_operations ixp4xx_wdt_fops = +{ + .owner = THIS_MODULE, + .write = ixp4xx_wdt_write, + .ioctl = ixp4xx_wdt_ioctl, + .open = ixp4xx_wdt_open, + .release = ixp4xx_wdt_release, +}; + +static struct miscdevice ixp4xx_wdt_miscdev = +{ + .minor = WATCHDOG_MINOR, + .name = "IXP4xx Watchdog", + .fops = &ixp4xx_wdt_fops, +}; + +static int __init ixp4xx_wdt_init(void) +{ + int ret; + unsigned long processor_id; + + asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); + if (!(processor_id & 0xf)) { + printk("IXP4XXX Watchdog: Rev. A0 CPU detected - " + "watchdog disabled\n"); + + return -ENODEV; + } + + ret = misc_register(&ixp4xx_wdt_miscdev); + if (ret == 0) + printk("IXP4xx Watchdog Timer: heartbeat %d sec\n", heartbeat); + + boot_status = (*IXP4XX_OSST & IXP4XX_OSST_TIMER_WARM_RESET) ? + WDIOF_CARDRESET : 0; + + return ret; +} + +static void __exit ixp4xx_wdt_exit(void) +{ + misc_deregister(&ixp4xx_wdt_miscdev); +} + + +module_init(ixp4xx_wdt_init); +module_exit(ixp4xx_wdt_exit); + +MODULE_AUTHOR("Deepak Saxena ); +MODULE_DESCRIPTION("IXP4xx Network Processor Watchdog"); + +module_param(heartbeat, int, 0); +MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds (default 60s)"); + +module_param(nowayout, int, 0); +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started"); + +MODULE_LICENSE("GPL"); +MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); + diff -Nru a/drivers/char/watchdog/shwdt.c b/drivers/char/watchdog/shwdt.c --- a/drivers/char/watchdog/shwdt.c Tue May 18 23:38:06 2004 +++ b/drivers/char/watchdog/shwdt.c Tue May 18 23:38:06 2004 @@ -64,7 +64,6 @@ */ static int clock_division_ratio = WTCSR_CKS_4096; -#define msecs_to_jiffies(msecs) (jiffies + (HZ * msecs + 9999) / 10000) #define next_ping_period(cks) msecs_to_jiffies(cks - 4) static unsigned long shwdt_is_open; diff -Nru a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig --- a/drivers/firmware/Kconfig Tue May 18 23:38:05 2004 +++ b/drivers/firmware/Kconfig Tue May 18 23:38:05 2004 @@ -12,7 +12,7 @@ help Say Y or M here if you want to enable BIOS Enhanced Disk Drive Services real mode BIOS calls to determine which disk - BIOS tries boot from. This information is then exported via driverfs. + BIOS tries boot from. This information is then exported via sysfs. This option is experimental, but believed to be safe, and most disk controller BIOS vendors do not yet implement this feature. @@ -33,5 +33,13 @@ Subsequent efibootmgr releases may be found at: http://linux.dell.com/efibootmgr + +config SMBIOS + tristate "BIOS SMBIOS table access driver." + help + Say Y or M here if you want to enable access to the SMBIOS table + via driverfs. It exposes /sys/firmware/smbios/ subdirectory tree + containing a binary dump of the SMBIOS table header as well as the SMBIOS + table. endmenu diff -Nru a/drivers/firmware/Makefile b/drivers/firmware/Makefile --- a/drivers/firmware/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/firmware/Makefile Tue May 18 23:38:08 2004 @@ -3,3 +3,4 @@ # obj-$(CONFIG_EDD) += edd.o obj-$(CONFIG_EFI_VARS) += efivars.o +obj-$(CONFIG_SMBIOS) += smbios.o diff -Nru a/drivers/firmware/edd.c b/drivers/firmware/edd.c --- a/drivers/firmware/edd.c Tue May 18 23:38:06 2004 +++ b/drivers/firmware/edd.c Tue May 18 23:38:06 2004 @@ -15,9 +15,8 @@ * made in setup.S, copied to safe structures in setup.c, * and presents it in sysfs. * - * Please see http://domsch.com/linux/edd30/results.html for + * Please see http://linux.dell.com/edd30/results.html for * the list of BIOSs which have been reported to implement EDD. - * If you don't see yours listed, please send a report as described there. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License v2.0 as published by @@ -30,15 +29,6 @@ * */ -/* - * Known issues: - * - refcounting of struct device objects could be improved. - * - * TODO: - * - Add IDE and USB disk device support - * - move edd.[ch] to better locations if/when one is decided - */ - #include #include #include @@ -57,13 +47,13 @@ #include <../drivers/scsi/scsi.h> #include <../drivers/scsi/hosts.h> +#define EDD_VERSION "0.14" +#define EDD_DATE "2004-Apr-28" + MODULE_AUTHOR("Matt Domsch "); MODULE_DESCRIPTION("sysfs interface to BIOS EDD information"); MODULE_LICENSE("GPL"); - -#define EDD_VERSION "0.13 2004-Mar-09" -#define EDD_DEVICE_NAME_SIZE 16 -#define REPORT_URL "http://linux.dell.com/edd/results.html" +MODULE_VERSION(EDD_VERSION); #define left (PAGE_SIZE - (p - buf) - 1) @@ -690,103 +680,6 @@ return sysfs_create_link(&edev->kobj,&pci_dev->dev.kobj,"pci_dev"); } -/* - * FIXME - as of 15-Jan-2003, there are some non-"scsi_device"s on the - * scsi_bus list. The following functions could possibly mis-access - * memory in that case. This is actually a problem with the SCSI - * layer, which is being addressed there. Until then, don't use the - * SCSI functions. - */ - -#undef CONFIG_SCSI -#undef CONFIG_SCSI_MODULE -#if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE) - -struct edd_match_data { - struct edd_device * edev; - struct scsi_device * sd; -}; - -/** - * edd_match_scsidev() - * @edev - EDD device is a known SCSI device - * @sd - scsi_device with host who's parent is a PCI controller - * - * returns 1 if a match is found, 0 if not. - */ -static int edd_match_scsidev(struct device * dev, void * d) -{ - struct edd_match_data * data = (struct edd_match_data *)d; - struct edd_info *info = edd_dev_get_info(data->edev); - struct scsi_device * sd = to_scsi_device(dev); - - if (info) { - if ((sd->channel == info->params.interface_path.pci.channel) && - (sd->id == info->params.device_path.scsi.id) && - (sd->lun == info->params.device_path.scsi.lun)) { - data->sd = sd; - return 1; - } - } - return 0; -} - -/** - * edd_find_matching_device() - * @edev - edd_device to match - * - * Search the SCSI devices for a drive that matches the EDD - * device descriptor we have. If we find a match, return it, - * otherwise, return NULL. - */ - -static struct scsi_device * -edd_find_matching_scsi_device(struct edd_device *edev) -{ - struct edd_match_data data; - struct bus_type * scsi_bus = find_bus("scsi"); - - if (!scsi_bus) { - return NULL; - } - - data.edev = edev; - - if (edd_dev_is_type(edev, "SCSI")) { - if (bus_for_each_dev(scsi_bus,NULL,&data,edd_match_scsidev)) - return data.sd; - } - return NULL; -} - -static int -edd_create_symlink_to_scsidev(struct edd_device *edev) -{ - struct pci_dev *pci_dev; - int rc = -EINVAL; - - pci_dev = edd_get_pci_dev(edev); - if (pci_dev) { - struct scsi_device * sdev = edd_find_matching_scsi_device(edev); - if (sdev && get_device(&sdev->sdev_driverfs_dev)) { - rc = sysfs_create_link(&edev->kobj, - &sdev->sdev_driverfs_dev.kobj, - "disc"); - put_device(&sdev->sdev_driverfs_dev); - } - } - return rc; -} - -#else -static int -edd_create_symlink_to_scsidev(struct edd_device *edev) -{ - return -ENOSYS; -} -#endif - - static inline void edd_device_unregister(struct edd_device *edev) { @@ -807,7 +700,6 @@ if (!error) { edd_create_symlink_to_pcidev(edev); - edd_create_symlink_to_scsidev(edev); } } @@ -820,8 +712,8 @@ return 1; memset(edev, 0, sizeof (*edev)); edd_dev_set_info(edev, &edd[i]); - snprintf(edev->kobj.name, EDD_DEVICE_NAME_SIZE, "int13_dev%02x", - edd[i].device); + kobject_set_name(&edev->kobj, "int13_dev%02x", + edd[i].device); kobj_set_kset_s(edev,edd_subsys); error = kobject_register(&edev->kobj); if (!error) @@ -842,9 +734,8 @@ int rc=0; struct edd_device *edev; - printk(KERN_INFO "BIOS EDD facility v%s, %d devices found\n", - EDD_VERSION, eddnr); - printk(KERN_INFO "Please report your BIOS at %s\n", REPORT_URL); + printk(KERN_INFO "BIOS EDD facility v%s %s, %d devices found\n", + EDD_VERSION, EDD_DATE, eddnr); if (!eddnr) { printk(KERN_INFO "EDD information not available.\n"); diff -Nru a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c --- a/drivers/firmware/efivars.c Tue May 18 23:38:09 2004 +++ b/drivers/firmware/efivars.c Tue May 18 23:38:09 2004 @@ -664,6 +664,9 @@ unsigned long variable_name_size = 1024; int i, rc = 0, error = 0; + if (!efi_enabled) + return -ENODEV; + printk(KERN_INFO "EFI Variables Facility v%s\n", EFIVARS_VERSION); /* @@ -732,6 +735,9 @@ efivars_exit(void) { struct list_head *pos, *n; + + if (!efi_enabled) + return; list_for_each_safe(pos, n, &efivar_list) efivar_unregister(get_efivar_entry(pos)); diff -Nru a/drivers/firmware/smbios.c b/drivers/firmware/smbios.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/firmware/smbios.c Tue May 18 23:38:09 2004 @@ -0,0 +1,248 @@ +/* + * linux/drivers/firmware/smbios.c + * Copyright (C) 2004 Dell Inc. + * by Michael Brown + * vim:noet:ts=8:sw=8:filetype=c:textwidth=80: + * + * BIOS SMBIOS Table access + * conformant to DMTF SMBIOS definition + * at http://www.dmtf.org/standards/smbios + * + * This code takes information provided by SMBIOS tables + * and presents it in sysfs as: + * /sys/firmware/smbios + * |--> /table_entry_point + * |--> /table + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License v2.0 as published by + * the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +#include +#include +#include +#include +#include "smbios.h" + +MODULE_AUTHOR("Michael Brown "); +MODULE_DESCRIPTION("sysfs interface to SMBIOS information"); +MODULE_LICENSE("GPL"); + +#define SMBIOS_VERSION "1.0 2004-04-19" + +struct smbios_device { + struct smbios_table_entry_point table_eps; + unsigned int smbios_table_real_length; +}; + +/* there shall be only one */ +static struct smbios_device the_smbios_device; + +#define to_smbios_device(obj) container_of(obj,struct smbios_device,kobj) + +/* don't currently have any "normal" attributes, so we don't need a way to + * show them. */ +static struct sysfs_ops smbios_attr_ops = { }; + +static __init int +checksum_eps(struct smbios_table_entry_point *table_eps) +{ + u8 *p = (u8 *)table_eps; + u8 checksum = 0; + int i=0; + for (i=0; i < table_eps->eps_length && i < sizeof(*table_eps); ++i) { + checksum += p[i]; + } + return( checksum == 0 ); +} + +static __init int +find_table_entry_point(struct smbios_device *sdev) +{ + struct smbios_table_entry_point *table_eps = &(sdev->table_eps); + u32 fp = 0xF0000; + while (fp < 0xFFFFF) { + isa_memcpy_fromio(table_eps, fp, sizeof(*table_eps)); + if (memcmp(table_eps->anchor, "_SM_", 4)==0 && + checksum_eps(table_eps)) { + return 0; + } + fp += 16; + } + + printk(KERN_INFO "SMBIOS table entry point not found in " + "0xF0000 - 0xFFFFF\n"); + return -ENODEV; +} + +static __init int +find_table_max_address(struct smbios_device *sdev) +{ + /* break out on one of three conditions: + * -- hit table_eps.table_length + * -- hit number of items that table claims we have + * -- hit structure type 127 + */ + + u8 *buf = ioremap(sdev->table_eps.table_address, + sdev->table_eps.table_length); + u8 *ptr = buf; + int count = 0, keep_going = 1; + int max_count = sdev->table_eps.table_num_structs; + int max_length = sdev->table_eps.table_length; + while(keep_going && ((ptr - buf) <= max_length) && count < max_count){ + if( ptr[0] == 0x7F ) /* ptr[0] is type */ + keep_going = 0; + + ptr += ptr[1]; /* ptr[1] is length, skip structure */ + /* skip strings at end of structure */ + while((ptr-buf) < max_length && (ptr[0] || ptr[1])) + ++ptr; + + /* string area ends in double-null. skip it. */ + ptr += 2; + ++count; + } + sdev->smbios_table_real_length = (ptr - buf); + iounmap(buf); + + if( count != max_count ) + printk(KERN_INFO "Warning: SMBIOS table structure count" + " does not match count specified in the" + " table entry point.\n" + " Table entry point count: %d\n" + " Actual count: %d\n", + max_count, count ); + + if(keep_going != 0) + printk(KERN_INFO "Warning: SMBIOS table does not end with a" + " structure type 127. This may indicate a" + " truncated table."); + + if(sdev->smbios_table_real_length != max_length) + printk(KERN_INFO "Warning: BIOS specified SMBIOS table length" + " does not match calculated length.\n" + " BIOS specified: %d\n" + " calculated length: %d\n", + max_length, sdev->smbios_table_real_length); + + return sdev->smbios_table_real_length; +} + +static ssize_t +smbios_read_table_entry_point(struct kobject *kobj, char *buffer, + loff_t pos, size_t size) +{ + struct smbios_device *sdev = &the_smbios_device; + const char *p = (const char *)&(sdev->table_eps); + unsigned int count = + size > sizeof(sdev->table_eps) ? + sizeof(sdev->table_eps) : size; + memcpy( buffer, p, count ); + return count; +} + +static ssize_t +smbios_read_table(struct kobject *kobj, char *buffer, + loff_t pos, size_t size) +{ + struct smbios_device *sdev = &the_smbios_device; + u8 *buf; + unsigned int count = sdev->smbios_table_real_length - pos; + int i = 0; + count = count < size ? count : size; + + if (pos > sdev->smbios_table_real_length) + return 0; + + buf = ioremap(sdev->table_eps.table_address, sdev->smbios_table_real_length); + if (buf == NULL) + return -ENXIO; + + /* memcpy( buffer, buf+pos, count ); */ + for (i = 0; i < count; ++i) { + buffer[i] = readb( buf+pos+i ); + } + + iounmap(buf); + + return count; +} + +static struct bin_attribute tep_attr = { + .attr = {.name = "table_entry_point", .owner = THIS_MODULE, .mode = 0444}, + .size = sizeof(struct smbios_table_entry_point), + .read = smbios_read_table_entry_point, + /* not writeable */ +}; + +static struct bin_attribute table_attr = { + .attr = { .name = "table", .owner = THIS_MODULE, .mode = 0444 }, + /* size set later, we don't know it here. */ + .read = smbios_read_table, + /* not writeable */ +}; + +/* no default attributes yet. */ +static struct attribute * def_attrs[] = { NULL, }; + +static struct kobj_type ktype_smbios = { + .sysfs_ops = &smbios_attr_ops, + .default_attrs = def_attrs, + /* statically allocated, no release method necessary */ +}; + +static decl_subsys(smbios,&ktype_smbios,NULL); + +static void smbios_device_unregister(void) +{ + sysfs_remove_bin_file(&smbios_subsys.kset.kobj, &tep_attr ); + sysfs_remove_bin_file(&smbios_subsys.kset.kobj, &table_attr ); +} + +static void __init smbios_device_register(void) +{ + sysfs_create_bin_file(&smbios_subsys.kset.kobj, &tep_attr ); + sysfs_create_bin_file(&smbios_subsys.kset.kobj, &table_attr ); +} + +static int __init +smbios_init(void) +{ + int rc=0; + + printk(KERN_INFO "SMBIOS facility v%s\n", SMBIOS_VERSION ); + + rc = find_table_entry_point(&the_smbios_device); + if (rc) + return rc; + + table_attr.size = find_table_max_address(&the_smbios_device); + + rc = firmware_register(&smbios_subsys); + if (rc) + return rc; + + smbios_device_register(); + + return rc; +} + +static void __exit +smbios_exit(void) +{ + smbios_device_unregister(); + firmware_unregister(&smbios_subsys); +} + +late_initcall(smbios_init); +module_exit(smbios_exit); diff -Nru a/drivers/firmware/smbios.h b/drivers/firmware/smbios.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/firmware/smbios.h Tue May 18 23:38:09 2004 @@ -0,0 +1,53 @@ +/* + * linux/drivers/firmware/smbios.c + * Copyright (C) 2002, 2003, 2004 Dell Inc. + * by Michael Brown + * vim:noet:ts=8:sw=8:filetype=c:textwidth=80: + * + * BIOS SMBIOS Table access + * conformant to DMTF SMBIOS definition + * at http://www.dmtf.org/standards/smbios + * + * This code takes information provided by SMBIOS tables + * and presents it in sysfs. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License v2.0 as published by + * the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef _LINUX_SMBIOS_H +#define _LINUX_SMBIOS_H + +#include + +struct smbios_table_entry_point { + u8 anchor[4]; + u8 checksum; + u8 eps_length; + u8 major_ver; + u8 minor_ver; + u16 max_struct_size; + u8 revision; + u8 formatted_area[5]; + u8 dmi_anchor[5]; + u8 intermediate_checksum; + u16 table_length; + u32 table_address; + u16 table_num_structs; + u8 smbios_bcd_revision; +} __attribute__ ((packed)); + +struct smbios_structure_header { + u8 type; + u8 length; + u16 handle; +} __attribute__ ((packed)); + +#endif /* _LINUX_SMBIOS_H */ diff -Nru a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c --- a/drivers/i2c/algos/i2c-algo-bit.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/algos/i2c-algo-bit.c Tue May 18 23:38:07 2004 @@ -381,7 +381,13 @@ break; } - if ( count > 1 ) { /* send ack */ + temp++; + count--; + + if (msg->flags & I2C_M_NO_RD_ACK) + continue; + + if ( count > 0 ) { /* send ack */ sdalo(adap); DEBPROTO(printk(" Am ")); } else { @@ -395,8 +401,6 @@ }; scllo(adap); sdahi(adap); - temp++; - count--; } return rdcount; } diff -Nru a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig --- a/drivers/i2c/busses/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/Kconfig Tue May 18 23:38:08 2004 @@ -95,6 +95,8 @@ 82801CA/CAM 82801DB 82801EB + 6300ESB + ICH6 This driver can also be built as a module. If so, the module will be called i2c-i801. @@ -145,16 +147,16 @@ This support is also available as a module. If so, the module will be called i2c-ite. -config I2C_IXP42X - tristate "IXP42x GPIO-Based I2C Interface" - depends on I2C && ARCH_IXP425 +config I2C_IXP4XX + tristate "IXP4xx GPIO-Based I2C Interface" + depends on I2C && ARCH_IXP4XX select I2C_ALGOBIT help - Say Y here if you have an Intel IXP42x(420,421,422,425) based + Say Y here if you have an Intel IXP4xx(420,421,422,425) based system and are using GPIO lines for an I2C bus. This support is also available as a module. If so, the module - will be called i2c-ixp42x. + will be called i2c-ixp4xx. config I2C_KEYWEST tristate "Powermac Keywest I2C interface" diff -Nru a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile --- a/drivers/i2c/busses/Makefile Tue May 18 23:38:05 2004 +++ b/drivers/i2c/busses/Makefile Tue May 18 23:38:05 2004 @@ -15,7 +15,7 @@ obj-$(CONFIG_I2C_IOP3XX) += i2c-iop3xx.o obj-$(CONFIG_I2C_ISA) += i2c-isa.o obj-$(CONFIG_I2C_ITE) += i2c-ite.o -obj-$(CONFIG_I2C_IXP42X) += i2c-ixp42x.o +obj-$(CONFIG_I2C_IXP4XX) += i2c-ixp4xx.o obj-$(CONFIG_I2C_KEYWEST) += i2c-keywest.o obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o diff -Nru a/drivers/i2c/busses/i2c-ali1535.c b/drivers/i2c/busses/i2c-ali1535.c --- a/drivers/i2c/busses/i2c-ali1535.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-ali1535.c Tue May 18 23:38:08 2004 @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -276,7 +277,7 @@ /* We will always wait for a fraction of a second! */ timeout = 0; do { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } while (((temp & ALI1535_STS_BUSY) && !(temp & ALI1535_STS_IDLE)) && (timeout++ < MAX_TIMEOUT)); @@ -350,7 +351,7 @@ for (timeout = 0; (timeout < MAX_TIMEOUT) && !(temp & ALI1535_STS_IDLE); timeout++) { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } if (timeout >= MAX_TIMEOUT) @@ -480,7 +481,7 @@ static struct i2c_adapter ali1535_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-ali1563.c b/drivers/i2c/busses/i2c-ali1563.c --- a/drivers/i2c/busses/i2c-ali1563.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-ali1563.c Tue May 18 23:38:08 2004 @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -82,7 +83,7 @@ timeout = ALI1563_MAX_TIMEOUT; do - i2c_delay(1); + msleep(1); while (((data = inb_p(SMB_HST_STS)) & HST_STS_BUSY) && --timeout); dev_dbg(&a->dev, "Transaction (post): STS=%02x, CNTL1=%02x, " @@ -137,7 +138,7 @@ timeout = ALI1563_MAX_TIMEOUT; do - i2c_delay(1); + msleep(1); while (!((data = inb_p(SMB_HST_STS)) & HST_STS_DONE) && --timeout); dev_dbg(&a->dev, "Block (post): STS=%02x, CNTL1=%02x, " @@ -357,7 +358,7 @@ static struct i2c_adapter ali1563_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &ali1563_algorithm, }; diff -Nru a/drivers/i2c/busses/i2c-ali15x3.c b/drivers/i2c/busses/i2c-ali15x3.c --- a/drivers/i2c/busses/i2c-ali15x3.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-ali15x3.c Tue May 18 23:38:07 2004 @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -296,7 +297,7 @@ /* We will always wait for a fraction of a second! */ timeout = 0; do { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } while ((!(temp & (ALI15X3_STS_ERR | ALI15X3_STS_DONE))) && (timeout++ < MAX_TIMEOUT)); @@ -353,7 +354,7 @@ for (timeout = 0; (timeout < MAX_TIMEOUT) && !(temp & ALI15X3_STS_IDLE); timeout++) { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } if (timeout >= MAX_TIMEOUT) { @@ -470,7 +471,7 @@ static struct i2c_adapter ali15x3_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-amd756.c b/drivers/i2c/busses/i2c-amd756.c --- a/drivers/i2c/busses/i2c-amd756.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-amd756.c Tue May 18 23:38:08 2004 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -124,7 +125,7 @@ if ((temp = inw_p(SMB_GLOBAL_STATUS)) & (GS_HST_STS | GS_SMB_STS)) { dev_dbg(&adap->dev, ": SMBus busy (%04x). Waiting... \n", temp); do { - i2c_delay(1); + msleep(1); temp = inw_p(SMB_GLOBAL_STATUS); } while ((temp & (GS_HST_STS | GS_SMB_STS)) && (timeout++ < MAX_TIMEOUT)); @@ -141,7 +142,7 @@ /* We will always wait for a fraction of a second! */ do { - i2c_delay(1); + msleep(1); temp = inw_p(SMB_GLOBAL_STATUS); } while ((temp & GS_HST_STS) && (timeout++ < MAX_TIMEOUT)); @@ -188,7 +189,7 @@ abort: dev_warn(&adap->dev, ": Sending abort.\n"); outw_p(inw(SMB_GLOBAL_ENABLE) | GE_ABORT, SMB_GLOBAL_ENABLE); - i2c_delay(100); + msleep(100); outw_p(GS_CLEAR_STS, SMB_GLOBAL_STATUS); return -1; } @@ -303,7 +304,7 @@ static struct i2c_adapter amd756_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-amd8111.c b/drivers/i2c/busses/i2c-amd8111.c --- a/drivers/i2c/busses/i2c-amd8111.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-amd8111.c Tue May 18 23:38:08 2004 @@ -276,7 +276,7 @@ } if (~temp[0] & AMD_SMB_STS_DONE) { - i2c_delay(HZ/100); + msleep(1); amd_ec_read(smbus, AMD_SMB_STS, temp + 0); } @@ -359,7 +359,7 @@ smbus->adapter.owner = THIS_MODULE; snprintf(smbus->adapter.name, I2C_NAME_SIZE, "SMBus2 AMD8111 adapter at %04x", smbus->base); - smbus->adapter.class = I2C_ADAP_CLASS_SMBUS; + smbus->adapter.class = I2C_CLASS_HWMON; smbus->adapter.algo = &smbus_algorithm; smbus->adapter.algo_data = smbus; diff -Nru a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c --- a/drivers/i2c/busses/i2c-i801.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-i801.c Tue May 18 23:38:07 2004 @@ -28,7 +28,8 @@ 82801CA/CAM 2483 82801DB 24C3 (HW PEC supported, 32 byte buffer not supported) 82801EB 24D3 (HW PEC supported, 32 byte buffer not supported) - + 6300ESB 25A4 + ICH6 266A This driver supports several versions of Intel's I/O Controller Hubs (ICH). For SMBus support, they are similar to the PIIX4 and are part of Intel's '810' and other chipsets. @@ -43,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -121,7 +123,8 @@ I801_dev = dev; if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) || - (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3)) + (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) || + (dev->device == PCI_DEVICE_ID_INTEL_ESB_4)) isich4 = 1; else isich4 = 0; @@ -205,7 +208,7 @@ /* We will always wait for a fraction of a second! */ do { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT)); @@ -333,7 +336,7 @@ timeout = 0; do { temp = inb_p(SMBHSTSTS); - i2c_delay(1); + msleep(1); } while ((!(temp & 0x80)) && (timeout++ < MAX_TIMEOUT)); @@ -393,7 +396,7 @@ timeout = 0; do { temp = inb_p(SMBHSTSTS); - i2c_delay(1); + msleep(1); } while ((!(temp & 0x02)) && (timeout++ < MAX_TIMEOUT)); @@ -539,7 +542,7 @@ static struct i2c_adapter i801_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; @@ -576,10 +579,22 @@ .subdevice = PCI_ANY_ID, }, { - .vendor = PCI_VENDOR_ID_INTEL, - .device = PCI_DEVICE_ID_INTEL_82801EB_3, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_82801EB_3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + }, + { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_ESB_4, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + }, + { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_ICH6_16, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, }, { 0, } }; diff -Nru a/drivers/i2c/busses/i2c-isa.c b/drivers/i2c/busses/i2c-isa.c --- a/drivers/i2c/busses/i2c-isa.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-isa.c Tue May 18 23:38:07 2004 @@ -43,7 +43,7 @@ /* There can only be one... */ static struct i2c_adapter isa_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &isa_algorithm, .name = "ISA main adapter", }; diff -Nru a/drivers/i2c/busses/i2c-ixp42x.c b/drivers/i2c/busses/i2c-ixp42x.c --- a/drivers/i2c/busses/i2c-ixp42x.c Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,176 +0,0 @@ -/* - * drivers/i2c/i2c-adap-ixp42x.c - * - * Intel's IXP42x XScale NPU chipsets (IXP420, 421, 422, 425) do not have - * an on board I2C controller but provide 16 GPIO pins that are often - * used to create an I2C bus. This driver provides an i2c_adapter - * interface that plugs in under algo_bit and drives the GPIO pins - * as instructed by the alogorithm driver. - * - * Author: Deepak Saxena - * - * Copyright (c) 2003-2004 MontaVista Software Inc. - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - * - * NOTE: Since different platforms will use different GPIO pins for - * I2C, this driver uses an IXP42x-specific platform_data - * pointer to pass the GPIO numbers to the driver. This - * allows us to support all the different IXP42x platforms - * w/o having to put #ifdefs in this driver. - * - * See arch/arm/mach-ixp42x/ixdp425.c for an example of building a - * device list and filling in the ixp42x_i2c_pins data structure - * that is passed as the platform_data to this driver. - */ - -#include -#include -#include -#include -#include -#include - -#include /* Pick up IXP42x-specific bits */ - -static inline int ixp42x_scl_pin(void *data) -{ - return ((struct ixp42x_i2c_pins*)data)->scl_pin; -} - -static inline int ixp42x_sda_pin(void *data) -{ - return ((struct ixp42x_i2c_pins*)data)->sda_pin; -} - -static void ixp42x_bit_setscl(void *data, int val) -{ - gpio_line_set(ixp42x_scl_pin(data), 0); - gpio_line_config(ixp42x_scl_pin(data), - val ? IXP425_GPIO_IN : IXP425_GPIO_OUT ); -} - -static void ixp42x_bit_setsda(void *data, int val) -{ - gpio_line_set(ixp42x_sda_pin(data), 0); - gpio_line_config(ixp42x_sda_pin(data), - val ? IXP425_GPIO_IN : IXP425_GPIO_OUT ); -} - -static int ixp42x_bit_getscl(void *data) -{ - int scl; - - gpio_line_config(ixp42x_scl_pin(data), IXP425_GPIO_IN ); - gpio_line_get(ixp42x_scl_pin(data), &scl); - - return scl; -} - -static int ixp42x_bit_getsda(void *data) -{ - int sda; - - gpio_line_config(ixp42x_sda_pin(data), IXP425_GPIO_IN ); - gpio_line_get(ixp42x_sda_pin(data), &sda); - - return sda; -} - -struct ixp42x_i2c_data { - struct ixp42x_i2c_pins *gpio_pins; - struct i2c_adapter adapter; - struct i2c_algo_bit_data algo_data; -}; - -static int ixp42x_i2c_remove(struct device *dev) -{ - struct platform_device *plat_dev = to_platform_device(dev); - struct ixp42x_i2c_data *drv_data = dev_get_drvdata(&plat_dev->dev); - - dev_set_drvdata(&plat_dev->dev, NULL); - - i2c_bit_del_bus(&drv_data->adapter); - - kfree(drv_data); - - return 0; -} - -static int ixp42x_i2c_probe(struct device *dev) -{ - int err; - struct platform_device *plat_dev = to_platform_device(dev); - struct ixp42x_i2c_pins *gpio = plat_dev->dev.platform_data; - struct ixp42x_i2c_data *drv_data = - kmalloc(sizeof(struct ixp42x_i2c_data), GFP_KERNEL); - - if(!drv_data) - return -ENOMEM; - - memzero(drv_data, sizeof(struct ixp42x_i2c_data)); - drv_data->gpio_pins = gpio; - - /* - * We could make a lot of these structures static, but - * certain platforms may have multiple GPIO-based I2C - * buses for various device domains, so we need per-device - * algo_data->data. - */ - drv_data->algo_data.data = gpio; - drv_data->algo_data.setsda = ixp42x_bit_setsda; - drv_data->algo_data.setscl = ixp42x_bit_setscl; - drv_data->algo_data.getsda = ixp42x_bit_getsda; - drv_data->algo_data.getscl = ixp42x_bit_getscl; - drv_data->algo_data.udelay = 10; - drv_data->algo_data.mdelay = 10; - drv_data->algo_data.timeout = 100; - - drv_data->adapter.id = I2C_HW_B_IXP425, - drv_data->adapter.algo_data = &drv_data->algo_data, - - drv_data->adapter.dev.parent = &plat_dev->dev; - - gpio_line_config(gpio->scl_pin, IXP425_GPIO_IN); - gpio_line_config(gpio->sda_pin, IXP425_GPIO_IN); - gpio_line_set(gpio->scl_pin, 0); - gpio_line_set(gpio->sda_pin, 0); - - if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) { - printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id); - - kfree(drv_data); - return err; - } - - dev_set_drvdata(&plat_dev->dev, drv_data); - - return 0; -} - -static struct device_driver ixp42x_i2c_driver = { - .name = "IXP42X-I2C", - .bus = &platform_bus_type, - .probe = ixp42x_i2c_probe, - .remove = ixp42x_i2c_remove, -}; - -static int __init ixp42x_i2c_init(void) -{ - return driver_register(&ixp42x_i2c_driver); -} - -static void __exit ixp42x_i2c_exit(void) -{ - driver_unregister(&ixp42x_i2c_driver); -} - -module_init(ixp42x_i2c_init); -module_exit(ixp42x_i2c_exit); - -MODULE_DESCRIPTION("GPIO-based I2C driver for IXP42x systems"); -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Deepak Saxena "); - diff -Nru a/drivers/i2c/busses/i2c-ixp4xx.c b/drivers/i2c/busses/i2c-ixp4xx.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/busses/i2c-ixp4xx.c Tue May 18 23:38:07 2004 @@ -0,0 +1,181 @@ +/* + * drivers/i2c/i2c-adap-ixp4xx.c + * + * Intel's IXP4xx XScale NPU chipsets (IXP420, 421, 422, 425) do not have + * an on board I2C controller but provide 16 GPIO pins that are often + * used to create an I2C bus. This driver provides an i2c_adapter + * interface that plugs in under algo_bit and drives the GPIO pins + * as instructed by the alogorithm driver. + * + * Author: Deepak Saxena + * + * Copyright (c) 2003-2004 MontaVista Software Inc. + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + * + * NOTE: Since different platforms will use different GPIO pins for + * I2C, this driver uses an IXP4xx-specific platform_data + * pointer to pass the GPIO numbers to the driver. This + * allows us to support all the different IXP4xx platforms + * w/o having to put #ifdefs in this driver. + * + * See arch/arm/mach-ixp4xx/ixdp425.c for an example of building a + * device list and filling in the ixp4xx_i2c_pins data structure + * that is passed as the platform_data to this driver. + */ + +#include +#ifdef CONFIG_I2C_DEBUG_BUS +#define DEBUG 1 +#endif + +#include +#include +#include +#include +#include +#include + +#include /* Pick up IXP4xx-specific bits */ + +static inline int ixp4xx_scl_pin(void *data) +{ + return ((struct ixp4xx_i2c_pins*)data)->scl_pin; +} + +static inline int ixp4xx_sda_pin(void *data) +{ + return ((struct ixp4xx_i2c_pins*)data)->sda_pin; +} + +static void ixp4xx_bit_setscl(void *data, int val) +{ + gpio_line_set(ixp4xx_scl_pin(data), 0); + gpio_line_config(ixp4xx_scl_pin(data), + val ? IXP4XX_GPIO_IN : IXP4XX_GPIO_OUT ); +} + +static void ixp4xx_bit_setsda(void *data, int val) +{ + gpio_line_set(ixp4xx_sda_pin(data), 0); + gpio_line_config(ixp4xx_sda_pin(data), + val ? IXP4XX_GPIO_IN : IXP4XX_GPIO_OUT ); +} + +static int ixp4xx_bit_getscl(void *data) +{ + int scl; + + gpio_line_config(ixp4xx_scl_pin(data), IXP4XX_GPIO_IN ); + gpio_line_get(ixp4xx_scl_pin(data), &scl); + + return scl; +} + +static int ixp4xx_bit_getsda(void *data) +{ + int sda; + + gpio_line_config(ixp4xx_sda_pin(data), IXP4XX_GPIO_IN ); + gpio_line_get(ixp4xx_sda_pin(data), &sda); + + return sda; +} + +struct ixp4xx_i2c_data { + struct ixp4xx_i2c_pins *gpio_pins; + struct i2c_adapter adapter; + struct i2c_algo_bit_data algo_data; +}; + +static int ixp4xx_i2c_remove(struct device *dev) +{ + struct platform_device *plat_dev = to_platform_device(dev); + struct ixp4xx_i2c_data *drv_data = dev_get_drvdata(&plat_dev->dev); + + dev_set_drvdata(&plat_dev->dev, NULL); + + i2c_bit_del_bus(&drv_data->adapter); + + kfree(drv_data); + + return 0; +} + +static int ixp4xx_i2c_probe(struct device *dev) +{ + int err; + struct platform_device *plat_dev = to_platform_device(dev); + struct ixp4xx_i2c_pins *gpio = plat_dev->dev.platform_data; + struct ixp4xx_i2c_data *drv_data = + kmalloc(sizeof(struct ixp4xx_i2c_data), GFP_KERNEL); + + if(!drv_data) + return -ENOMEM; + + memzero(drv_data, sizeof(struct ixp4xx_i2c_data)); + drv_data->gpio_pins = gpio; + + /* + * We could make a lot of these structures static, but + * certain platforms may have multiple GPIO-based I2C + * buses for various device domains, so we need per-device + * algo_data->data. + */ + drv_data->algo_data.data = gpio; + drv_data->algo_data.setsda = ixp4xx_bit_setsda; + drv_data->algo_data.setscl = ixp4xx_bit_setscl; + drv_data->algo_data.getsda = ixp4xx_bit_getsda; + drv_data->algo_data.getscl = ixp4xx_bit_getscl; + drv_data->algo_data.udelay = 10; + drv_data->algo_data.mdelay = 10; + drv_data->algo_data.timeout = 100; + + drv_data->adapter.id = I2C_HW_B_IXP4XX, + drv_data->adapter.algo_data = &drv_data->algo_data, + + drv_data->adapter.dev.parent = &plat_dev->dev; + + gpio_line_config(gpio->scl_pin, IXP4XX_GPIO_IN); + gpio_line_config(gpio->sda_pin, IXP4XX_GPIO_IN); + gpio_line_set(gpio->scl_pin, 0); + gpio_line_set(gpio->sda_pin, 0); + + if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) { + printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id); + + kfree(drv_data); + return err; + } + + dev_set_drvdata(&plat_dev->dev, drv_data); + + return 0; +} + +static struct device_driver ixp4xx_i2c_driver = { + .name = "IXP4XX-I2C", + .bus = &platform_bus_type, + .probe = ixp4xx_i2c_probe, + .remove = ixp4xx_i2c_remove, +}; + +static int __init ixp4xx_i2c_init(void) +{ + return driver_register(&ixp4xx_i2c_driver); +} + +static void __exit ixp4xx_i2c_exit(void) +{ + driver_unregister(&ixp4xx_i2c_driver); +} + +module_init(ixp4xx_i2c_init); +module_exit(ixp4xx_i2c_exit); + +MODULE_DESCRIPTION("GPIO-based I2C adapter for IXP4xx systems"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Deepak Saxena "); + diff -Nru a/drivers/i2c/busses/i2c-keywest.c b/drivers/i2c/busses/i2c-keywest.c --- a/drivers/i2c/busses/i2c-keywest.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-keywest.c Tue May 18 23:38:08 2004 @@ -48,7 +48,6 @@ #include #include -#include #include #include #include diff -Nru a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c --- a/drivers/i2c/busses/i2c-nforce2.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/busses/i2c-nforce2.c Tue May 18 23:38:05 2004 @@ -119,7 +119,7 @@ static struct i2c_adapter nforce2_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-parport-light.c b/drivers/i2c/busses/i2c-parport-light.c --- a/drivers/i2c/busses/i2c-parport-light.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-parport-light.c Tue May 18 23:38:08 2004 @@ -112,7 +112,7 @@ static struct i2c_adapter parport_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .id = I2C_HW_B_LP, .algo_data = &parport_algo_data, .name = "Parallel port adapter (light)", diff -Nru a/drivers/i2c/busses/i2c-parport.c b/drivers/i2c/busses/i2c-parport.c --- a/drivers/i2c/busses/i2c-parport.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-parport.c Tue May 18 23:38:07 2004 @@ -147,7 +147,7 @@ static struct i2c_adapter parport_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .id = I2C_HW_B_LP, .name = "Parallel port adapter", }; diff -Nru a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c --- a/drivers/i2c/busses/i2c-piix4.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/busses/i2c-piix4.c Tue May 18 23:38:06 2004 @@ -31,9 +31,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -261,7 +261,7 @@ /* We will always wait for a fraction of a second! (See PIIX4 docs errata) */ do { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT)); @@ -410,7 +410,7 @@ static struct i2c_adapter piix4_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-sis5595.c b/drivers/i2c/busses/i2c-sis5595.c --- a/drivers/i2c/busses/i2c-sis5595.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/busses/i2c-sis5595.c Tue May 18 23:38:06 2004 @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -239,7 +240,7 @@ /* We will always wait for a fraction of a second! */ do { - i2c_delay(1); + msleep(1); temp = sis5595_read(SMB_STS_LO); } while (!(temp & 0x40) && (timeout++ < MAX_TIMEOUT)); @@ -360,7 +361,7 @@ static struct i2c_adapter sis5595_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .name = "unset", .algo = &smbus_algorithm, }; diff -Nru a/drivers/i2c/busses/i2c-sis630.c b/drivers/i2c/busses/i2c-sis630.c --- a/drivers/i2c/busses/i2c-sis630.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/busses/i2c-sis630.c Tue May 18 23:38:06 2004 @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -165,7 +166,7 @@ /* We will always wait for a fraction of a second! */ do { - i2c_delay(1); + msleep(1); temp = sis630_read(SMB_STS); /* check if block transmitted */ if (size == SIS630_BLOCK_DATA && (temp & 0x10)) @@ -456,7 +457,7 @@ static struct i2c_adapter sis630_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .name = "unset", .algo = &smbus_algorithm, }; diff -Nru a/drivers/i2c/busses/i2c-sis96x.c b/drivers/i2c/busses/i2c-sis96x.c --- a/drivers/i2c/busses/i2c-sis96x.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/busses/i2c-sis96x.c Tue May 18 23:38:06 2004 @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -139,7 +140,7 @@ /* We will always wait for a fraction of a second! */ do { - i2c_delay(1); + msleep(1); temp = sis96x_read(SMB_STS); } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT)); @@ -260,7 +261,7 @@ static struct i2c_adapter sis96x_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-via.c b/drivers/i2c/busses/i2c-via.c --- a/drivers/i2c/busses/i2c-via.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-via.c Tue May 18 23:38:07 2004 @@ -88,7 +88,7 @@ static struct i2c_adapter vt586b_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .name = "VIA i2c", .algo_data = &bit_data, }; diff -Nru a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c --- a/drivers/i2c/busses/i2c-viapro.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/busses/i2c-viapro.c Tue May 18 23:38:08 2004 @@ -35,6 +35,7 @@ #include #include +#include #include #include #include @@ -138,7 +139,7 @@ /* We will always wait for a fraction of a second! I don't know if VIA needs this, Intel did */ do { - i2c_delay(1); + msleep(1); temp = inb_p(SMBHSTSTS); } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT)); @@ -289,7 +290,7 @@ static struct i2c_adapter vt596_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_SMBUS, + .class = I2C_CLASS_HWMON, .algo = &smbus_algorithm, .name = "unset", }; diff -Nru a/drivers/i2c/busses/i2c-voodoo3.c b/drivers/i2c/busses/i2c-voodoo3.c --- a/drivers/i2c/busses/i2c-voodoo3.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/i2c-voodoo3.c Tue May 18 23:38:07 2004 @@ -167,7 +167,7 @@ static struct i2c_adapter voodoo3_i2c_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_TV_ANALOG, + .class = I2C_CLASS_TV_ANALOG, .name = "I2C Voodoo3/Banshee adapter", .algo_data = &voo_i2c_bit_data, }; @@ -184,7 +184,7 @@ static struct i2c_adapter voodoo3_ddc_adapter = { .owner = THIS_MODULE, - .class = I2C_ADAP_CLASS_DDC, + .class = I2C_CLASS_DDC, .name = "DDC Voodoo3/Banshee adapter", .algo_data = &voo_ddc_bit_data, }; diff -Nru a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c --- a/drivers/i2c/busses/scx200_acb.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/scx200_acb.c Tue May 18 23:38:07 2004 @@ -25,7 +25,6 @@ */ #include -#include #include #include #include diff -Nru a/drivers/i2c/busses/scx200_i2c.c b/drivers/i2c/busses/scx200_i2c.c --- a/drivers/i2c/busses/scx200_i2c.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/busses/scx200_i2c.c Tue May 18 23:38:07 2004 @@ -22,7 +22,6 @@ */ #include -#include #include #include #include diff -Nru a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig --- a/drivers/i2c/chips/Kconfig Tue May 18 23:38:07 2004 +++ b/drivers/i2c/chips/Kconfig Tue May 18 23:38:07 2004 @@ -136,11 +136,11 @@ config SENSORS_LM90 tristate "National Semiconductor LM90 and compatibles" - depends on I2C && EXPERIMENTAL + depends on I2C select I2C_SENSOR help - If you say yes here you get support for National Semiconductor LM90 - and Analog Devices ADM1032 sensor chips. + If you say yes here you get support for National Semiconductor LM90, + LM89 and LM99, and Analog Devices ADM1032 sensor chips. This driver can also be built as a module. If so, the module will be called lm90. @@ -163,7 +163,7 @@ select I2C_SENSOR help If you say yes here you get support for the Winbond W8378x series - of sensor chips: the W83781D, W83782D, W83783S and W83682HF, + of sensor chips: the W83781D, W83782D, W83783S and W83627HF, and the similar Asus AS99127F. This driver can also be built as a module. If so, the module @@ -229,5 +229,15 @@ This driver can also be built as a module. If so, the module will be called pcf8591. + +config SENSORS_RTC8564 + tristate "Epson 8564 RTC chip" + depends on I2C && EXPERIMENTAL + select I2C_SENSOR + help + If you say yes here you get support for the Epson 8564 RTC chip. + + This driver can also be built as a module. If so, the module + will be called i2c-rtc8564. endmenu diff -Nru a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile --- a/drivers/i2c/chips/Makefile Tue May 18 23:38:09 2004 +++ b/drivers/i2c/chips/Makefile Tue May 18 23:38:09 2004 @@ -21,6 +21,7 @@ obj-$(CONFIG_SENSORS_LM90) += lm90.o obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o +obj-$(CONFIG_SENSORS_RTC8564) += rtc8564.o obj-$(CONFIG_SENSORS_VIA686A) += via686a.o obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o diff -Nru a/drivers/i2c/chips/adm1021.c b/drivers/i2c/chips/adm1021.c --- a/drivers/i2c/chips/adm1021.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/adm1021.c Tue May 18 23:38:05 2004 @@ -200,7 +200,7 @@ static int adm1021_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, adm1021_detect); } diff -Nru a/drivers/i2c/chips/asb100.c b/drivers/i2c/chips/asb100.c --- a/drivers/i2c/chips/asb100.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/chips/asb100.c Tue May 18 23:38:07 2004 @@ -609,7 +609,7 @@ */ static int asb100_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, asb100_detect); } @@ -855,7 +855,13 @@ return err; } - kfree(i2c_get_clientdata(client)); + if (i2c_get_clientdata(client)==NULL) { + /* subclients */ + kfree(client); + } else { + /* main client */ + kfree(i2c_get_clientdata(client)); + } return 0; } diff -Nru a/drivers/i2c/chips/fscher.c b/drivers/i2c/chips/fscher.c --- a/drivers/i2c/chips/fscher.c Tue May 18 23:38:07 2004 +++ b/drivers/i2c/chips/fscher.c Tue May 18 23:38:07 2004 @@ -293,7 +293,7 @@ static int fscher_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, fscher_detect); } diff -Nru a/drivers/i2c/chips/gl518sm.c b/drivers/i2c/chips/gl518sm.c --- a/drivers/i2c/chips/gl518sm.c Tue May 18 23:38:09 2004 +++ b/drivers/i2c/chips/gl518sm.c Tue May 18 23:38:09 2004 @@ -335,7 +335,7 @@ static int gl518_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, gl518_detect); } diff -Nru a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c --- a/drivers/i2c/chips/it87.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/chips/it87.c Tue May 18 23:38:08 2004 @@ -49,6 +49,54 @@ /* Insmod parameters */ SENSORS_INSMOD_1(it87); +#define REG 0x2e /* The register to read/write */ +#define DEV 0x07 /* Register: Logical device select */ +#define VAL 0x2f /* The value to read/write */ +#define PME 0x04 /* The device with the fan registers in it */ +#define DEVID 0x20 /* Register: Device ID */ + +static inline void +superio_outb(int reg, int val) +{ + outb(reg, REG); + outb(val, VAL); +} + +static inline int +superio_inb(int reg) +{ + outb(reg, REG); + return inb(VAL); +} + +static inline void +superio_select(void) +{ + outb(DEV, REG); + outb(PME, VAL); +} + +static inline void +superio_enter(void) +{ + outb(0x87, REG); + outb(0x01, REG); + outb(0x55, REG); + outb(0x55, REG); +} + +static inline void +superio_exit(void) +{ + outb(0x02, REG); + outb(0x02, VAL); +} + +/* just IT8712F for now - this should be extended to support the other + chips as well */ +#define IT8712F_DEVID 0x8712 +#define IT87_ACT_REG 0x30 +#define IT87_BASE_REG 0x60 /* Update battery voltage after every reading if true */ static int update_vbat; @@ -158,6 +206,7 @@ static int it87_attach_adapter(struct i2c_adapter *adapter); +static int it87_find(int *address); static int it87_detect(struct i2c_adapter *adapter, int address, int kind); static int it87_detach_client(struct i2c_client *client); @@ -500,11 +549,35 @@ * when a new adapter is inserted (and it87_driver is still present) */ static int it87_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, it87_detect); } +/* SuperIO detection - will change normal_isa[0] if a chip is found */ +static int it87_find(int *address) +{ + u16 val; + + superio_enter(); + val = (superio_inb(DEVID) << 8) | + superio_inb(DEVID + 1); + if (val != IT8712F_DEVID) { + superio_exit(); + return -ENODEV; + } + + superio_select(); + val = (superio_inb(IT87_BASE_REG) << 8) | + superio_inb(IT87_BASE_REG + 1); + superio_exit(); + *address = val & ~(IT87_EXTENT - 1); + if (*address == 0) { + return -ENODEV; + } + return 0; +} + /* This function is called by i2c_detect */ int it87_detect(struct i2c_adapter *adapter, int address, int kind) { @@ -853,6 +926,11 @@ static int __init sm_it87_init(void) { + int addr; + + if (!it87_find(&addr)) { + normal_isa[0] = addr; + } return i2c_add_driver(&it87_driver); } diff -Nru a/drivers/i2c/chips/lm75.c b/drivers/i2c/chips/lm75.c --- a/drivers/i2c/chips/lm75.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/lm75.c Tue May 18 23:38:05 2004 @@ -105,7 +105,7 @@ static int lm75_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, lm75_detect); } diff -Nru a/drivers/i2c/chips/lm78.c b/drivers/i2c/chips/lm78.c --- a/drivers/i2c/chips/lm78.c Tue May 18 23:38:08 2004 +++ b/drivers/i2c/chips/lm78.c Tue May 18 23:38:08 2004 @@ -488,7 +488,7 @@ * when a new adapter is inserted (and lm78_driver is still present) */ static int lm78_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, lm78_detect); } diff -Nru a/drivers/i2c/chips/lm80.c b/drivers/i2c/chips/lm80.c --- a/drivers/i2c/chips/lm80.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/lm80.c Tue May 18 23:38:05 2004 @@ -376,7 +376,7 @@ static int lm80_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, lm80_detect); } diff -Nru a/drivers/i2c/chips/lm83.c b/drivers/i2c/chips/lm83.c --- a/drivers/i2c/chips/lm83.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/chips/lm83.c Tue May 18 23:38:06 2004 @@ -216,7 +216,7 @@ static int lm83_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, lm83_detect); } diff -Nru a/drivers/i2c/chips/lm90.c b/drivers/i2c/chips/lm90.c --- a/drivers/i2c/chips/lm90.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/lm90.c Tue May 18 23:38:05 2004 @@ -1,7 +1,7 @@ /* * lm90.c - Part of lm_sensors, Linux kernel modules for hardware * monitoring - * Copyright (C) 2003 Jean Delvare + * Copyright (C) 2003-2004 Jean Delvare * * Based on the lm83 driver. The LM90 is a sensor chip made by National * Semiconductor. It reports up to two temperatures (its own plus up to @@ -10,6 +10,17 @@ * obtained from National's website at: * http://www.national.com/pf/LM/LM90.html * + * This driver also supports the LM89 and LM99, two other sensor chips + * made by National Semiconductor. Both have an increased remote + * temperature measurement accuracy (1 degree), and the LM99 + * additionally shifts remote temperatures (measured and limits) by 16 + * degrees, which allows for higher temperatures measurement. The + * driver doesn't handle it since it can be done easily in user-space. + * Complete datasheets can be obtained from National's website at: + * http://www.national.com/pf/LM/LM89.html + * http://www.national.com/pf/LM/LM99.html + * Note that there is no way to differenciate between both chips. + * * This driver also supports the ADM1032, a sensor chip made by Analog * Devices. That chip is similar to the LM90, with a few differences * that are not handled by this driver. Complete datasheet can be @@ -45,9 +56,11 @@ /* * Addresses to scan * Address is fully defined internally and cannot be changed. + * LM89, LM90, LM99 and ADM1032 have address 0x4c. + * LM89-1, and LM99-1 have address 0x4d. */ -static unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END }; +static unsigned short normal_i2c[] = { 0x4c, 0x4d, I2C_CLIENT_END }; static unsigned short normal_i2c_range[] = { I2C_CLIENT_END }; static unsigned int normal_isa[] = { I2C_CLIENT_ISA_END }; static unsigned int normal_isa_range[] = { I2C_CLIENT_ISA_END }; @@ -56,7 +69,7 @@ * Insmod parameters */ -SENSORS_INSMOD_2(lm90, adm1032); +SENSORS_INSMOD_3(lm90, adm1032, lm99); /* * The LM90 registers @@ -261,7 +274,7 @@ static int lm90_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, lm90_detect); } @@ -330,16 +343,26 @@ LM90_REG_R_CHIP_ID); if (man_id == 0x01) { /* National Semiconductor */ - if (chip_id >= 0x21 && chip_id < 0x30 /* LM90 */ - && (kind == 0 /* skip detection */ - || ((i2c_smbus_read_byte_data(new_client, - LM90_REG_R_CONFIG2) & 0xF8) == 0x00 - && reg_convrate <= 0x09))) { - kind = lm90; + u8 reg_config2; + + reg_config2 = i2c_smbus_read_byte_data(new_client, + LM90_REG_R_CONFIG2); + + if (kind == 0 /* skip detection */ + || ((reg_config2 & 0xF8) == 0x00 + && reg_convrate <= 0x09)) { + if (address == 0x4C + && (chip_id & 0xF0) == 0x20) { /* LM90 */ + kind = lm90; + } else + if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */ + kind = lm99; + } } - } - else if (man_id == 0x41) { /* Analog Devices */ - if ((chip_id & 0xF0) == 0x40 /* ADM1032 */ + } else + if (man_id == 0x41) { /* Analog Devices */ + if (address == 0x4C + && (chip_id & 0xF0) == 0x40 /* ADM1032 */ && (kind == 0 /* skip detection */ || (reg_config1 & 0x3F) == 0x00)) { kind = adm1032; @@ -358,6 +381,8 @@ name = "lm90"; } else if (kind == adm1032) { name = "adm1032"; + } else if (kind == lm99) { + name = "lm99"; } /* We can fill in the remaining client fields */ diff -Nru a/drivers/i2c/chips/rtc8564.c b/drivers/i2c/chips/rtc8564.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/chips/rtc8564.c Tue May 18 23:38:09 2004 @@ -0,0 +1,396 @@ +/* + * linux/drivers/i2c/chips/rtc8564.c + * + * Copyright (C) 2002-2004 Stefan Eletzhofer + * + * based on linux/drivers/acron/char/pcf8583.c + * Copyright (C) 2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Driver for system3's EPSON RTC 8564 chip + */ +#include +#include +#include +#include +#include +#include /* get the user-level API */ +#include +#include + +#include "rtc8564.h" + +#ifdef DEBUG +# define _DBG(x, fmt, args...) do{ if (debug>=x) printk(KERN_DEBUG"%s: " fmt "\n", __FUNCTION__, ##args); } while(0); +#else +# define _DBG(x, fmt, args...) do { } while(0); +#endif + +#define _DBGRTCTM(x, rtctm) if (debug>=x) printk("%s: secs=%d, mins=%d, hours=%d, mday=%d, " \ + "mon=%d, year=%d, wday=%d VL=%d\n", __FUNCTION__, \ + (rtctm).secs, (rtctm).mins, (rtctm).hours, (rtctm).mday, \ + (rtctm).mon, (rtctm).year, (rtctm).wday, (rtctm).vl); + +struct rtc8564_data { + struct i2c_client client; + u16 ctrl; +}; + +static inline u8 _rtc8564_ctrl1(struct i2c_client *client) +{ + struct rtc8564_data *data = i2c_get_clientdata(client); + return data->ctrl & 0xff; +} +static inline u8 _rtc8564_ctrl2(struct i2c_client *client) +{ + struct rtc8564_data *data = i2c_get_clientdata(client); + return (data->ctrl & 0xff00) >> 8; +} + +#define CTRL1(c) _rtc8564_ctrl1(c) +#define CTRL2(c) _rtc8564_ctrl2(c) + +#define BCD_TO_BIN(val) (((val)&15) + ((val)>>4)*10) +#define BIN_TO_BCD(val) ((((val)/10)<<4) + (val)%10) + +static int debug = 0; +MODULE_PARM(debug, "i"); + +static struct i2c_driver rtc8564_driver; + +static unsigned short ignore[] = { I2C_CLIENT_END }; +static unsigned short normal_addr[] = { 0x51, I2C_CLIENT_END }; + +static struct i2c_client_address_data addr_data = { + .normal_i2c = normal_addr, + .normal_i2c_range = ignore, + .probe = ignore, + .probe_range = ignore, + .ignore = ignore, + .ignore_range = ignore, + .force = ignore, +}; + +static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem); +static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem); + +static int rtc8564_read(struct i2c_client *client, unsigned char adr, + unsigned char *buf, unsigned char len) +{ + int ret = -EIO; + unsigned char addr[1] = { adr }; + struct i2c_msg msgs[2] = { + {client->addr, 0, 1, addr}, + {client->addr, I2C_M_RD, len, buf} + }; + + _DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, buf, len); + + if (!buf || !client) { + ret = -EINVAL; + goto done; + } + + ret = i2c_transfer(client->adapter, msgs, 2); + if (ret == 2) { + ret = 0; + } + +done: + return ret; +} + +static int rtc8564_write(struct i2c_client *client, unsigned char adr, + unsigned char *data, unsigned char len) +{ + int ret = 0; + unsigned char _data[16]; + struct i2c_msg wr; + int i; + + if (!client || !data || len > 15) { + ret = -EINVAL; + goto done; + } + + _DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, data, len); + + _data[0] = adr; + for (i = 0; i < len; i++) { + _data[i + 1] = data[i]; + _DBG(5, "data[%d] = 0x%02x (%d)", i, data[i], data[i]); + } + + wr.addr = client->addr; + wr.flags = 0; + wr.len = len + 1; + wr.buf = _data; + + ret = i2c_transfer(client->adapter, &wr, 1); + if (ret == 1) { + ret = 0; + } + +done: + return ret; +} + +static int rtc8564_attach(struct i2c_adapter *adap, int addr, int kind) +{ + int ret; + struct i2c_client *new_client; + struct rtc8564_data *d; + unsigned char data[10]; + unsigned char ad[1] = { 0 }; + struct i2c_msg ctrl_wr[1] = { + {addr, 0, 2, data} + }; + struct i2c_msg ctrl_rd[2] = { + {addr, 0, 1, ad}, + {addr, I2C_M_RD, 2, data} + }; + + d = kmalloc(sizeof(struct rtc8564_data), GFP_KERNEL); + if (!d) { + ret = -ENOMEM; + goto done; + } + memset(d, 0, sizeof(struct rtc8564_data)); + new_client = &d->client; + + strlcpy(new_client->name, "RTC8564", I2C_NAME_SIZE); + i2c_set_clientdata(new_client, d); + new_client->id = rtc8564_driver.id; + new_client->flags = I2C_CLIENT_ALLOW_USE | I2C_DF_NOTIFY; + new_client->addr = addr; + new_client->adapter = adap; + new_client->driver = &rtc8564_driver; + + _DBG(1, "client=%p", new_client); + _DBG(1, "client.id=%d", new_client->id); + + /* init ctrl1 reg */ + data[0] = 0; + data[1] = 0; + ret = i2c_transfer(new_client->adapter, ctrl_wr, 1); + if (ret != 1) { + printk(KERN_INFO "rtc8564: cant init ctrl1\n"); + ret = -ENODEV; + goto done; + } + + /* read back ctrl1 and ctrl2 */ + ret = i2c_transfer(new_client->adapter, ctrl_rd, 2); + if (ret != 2) { + printk(KERN_INFO "rtc8564: cant read ctrl\n"); + ret = -ENODEV; + goto done; + } + + d->ctrl = data[0] | (data[1] << 8); + + _DBG(1, "RTC8564_REG_CTRL1=%02x, RTC8564_REG_CTRL2=%02x", + data[0], data[1]); + + ret = i2c_attach_client(new_client); +done: + if (ret) { + kfree(d); + } + return ret; +} + +static int rtc8564_probe(struct i2c_adapter *adap) +{ + return i2c_probe(adap, &addr_data, rtc8564_attach); +} + +static int rtc8564_detach(struct i2c_client *client) +{ + i2c_detach_client(client); + kfree(i2c_get_clientdata(client)); + return 0; +} + +static int rtc8564_get_datetime(struct i2c_client *client, struct rtc_tm *dt) +{ + int ret = -EIO; + unsigned char buf[15]; + + _DBG(1, "client=%p, dt=%p", client, dt); + + if (!dt || !client) + return -EINVAL; + + memset(buf, 0, sizeof(buf)); + + ret = rtc8564_read(client, 0, buf, 15); + if (ret) + return ret; + + /* century stored in minute alarm reg */ + dt->year = BCD_TO_BIN(buf[RTC8564_REG_YEAR]); + dt->year += 100 * BCD_TO_BIN(buf[RTC8564_REG_AL_MIN] & 0x3f); + dt->mday = BCD_TO_BIN(buf[RTC8564_REG_DAY] & 0x3f); + dt->wday = BCD_TO_BIN(buf[RTC8564_REG_WDAY] & 7); + dt->mon = BCD_TO_BIN(buf[RTC8564_REG_MON_CENT] & 0x1f); + + dt->secs = BCD_TO_BIN(buf[RTC8564_REG_SEC] & 0x7f); + dt->vl = (buf[RTC8564_REG_SEC] & 0x80) == 0x80; + dt->mins = BCD_TO_BIN(buf[RTC8564_REG_MIN] & 0x7f); + dt->hours = BCD_TO_BIN(buf[RTC8564_REG_HR] & 0x3f); + + _DBGRTCTM(2, *dt); + + return 0; +} + +static int +rtc8564_set_datetime(struct i2c_client *client, struct rtc_tm *dt, int datetoo) +{ + int ret, len = 5; + unsigned char buf[15]; + + _DBG(1, "client=%p, dt=%p", client, dt); + + if (!dt || !client) + return -EINVAL; + + _DBGRTCTM(2, *dt); + + buf[RTC8564_REG_CTRL1] = CTRL1(client) | RTC8564_CTRL1_STOP; + buf[RTC8564_REG_CTRL2] = CTRL2(client); + buf[RTC8564_REG_SEC] = BIN_TO_BCD(dt->secs); + buf[RTC8564_REG_MIN] = BIN_TO_BCD(dt->mins); + buf[RTC8564_REG_HR] = BIN_TO_BCD(dt->hours); + + if (datetoo) { + len += 5; + buf[RTC8564_REG_DAY] = BIN_TO_BCD(dt->mday); + buf[RTC8564_REG_WDAY] = BIN_TO_BCD(dt->wday); + buf[RTC8564_REG_MON_CENT] = BIN_TO_BCD(dt->mon) & 0x1f; + /* century stored in minute alarm reg */ + buf[RTC8564_REG_YEAR] = BIN_TO_BCD(dt->year % 100); + buf[RTC8564_REG_AL_MIN] = BIN_TO_BCD(dt->year / 100); + } + + ret = rtc8564_write(client, 0, buf, len); + if (ret) { + _DBG(1, "error writing data! %d", ret); + } + + buf[RTC8564_REG_CTRL1] = CTRL1(client); + ret = rtc8564_write(client, 0, buf, 1); + if (ret) { + _DBG(1, "error writing data! %d", ret); + } + + return ret; +} + +static int rtc8564_get_ctrl(struct i2c_client *client, unsigned int *ctrl) +{ + struct rtc8564_data *data = i2c_get_clientdata(client); + + if (!ctrl || !client) + return -1; + + *ctrl = data->ctrl; + return 0; +} + +static int rtc8564_set_ctrl(struct i2c_client *client, unsigned int *ctrl) +{ + struct rtc8564_data *data = i2c_get_clientdata(client); + unsigned char buf[2]; + + if (!ctrl || !client) + return -1; + + buf[0] = *ctrl & 0xff; + buf[1] = (*ctrl & 0xff00) >> 8; + data->ctrl = *ctrl; + + return rtc8564_write(client, 0, buf, 2); +} + +static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem) +{ + + if (!mem || !client) + return -EINVAL; + + return rtc8564_read(client, mem->loc, mem->data, mem->nr); +} + +static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem) +{ + + if (!mem || !client) + return -EINVAL; + + return rtc8564_write(client, mem->loc, mem->data, mem->nr); +} + +static int +rtc8564_command(struct i2c_client *client, unsigned int cmd, void *arg) +{ + + _DBG(1, "cmd=%d", cmd); + + switch (cmd) { + case RTC_GETDATETIME: + return rtc8564_get_datetime(client, arg); + + case RTC_SETTIME: + return rtc8564_set_datetime(client, arg, 0); + + case RTC_SETDATETIME: + return rtc8564_set_datetime(client, arg, 1); + + case RTC_GETCTRL: + return rtc8564_get_ctrl(client, arg); + + case RTC_SETCTRL: + return rtc8564_set_ctrl(client, arg); + + case MEM_READ: + return rtc8564_read_mem(client, arg); + + case MEM_WRITE: + return rtc8564_write_mem(client, arg); + + default: + return -EINVAL; + } +} + +static struct i2c_driver rtc8564_driver = { + .owner = THIS_MODULE, + .name = "RTC8564", + .id = I2C_DRIVERID_RTC8564, + .flags = I2C_DF_NOTIFY, + .attach_adapter = rtc8564_probe, + .detach_client = rtc8564_detach, + .command = rtc8564_command +}; + +static __init int rtc8564_init(void) +{ + return i2c_add_driver(&rtc8564_driver); +} + +static __exit void rtc8564_exit(void) +{ + i2c_del_driver(&rtc8564_driver); +} + +MODULE_AUTHOR("Stefan Eletzhofer "); +MODULE_DESCRIPTION("EPSON RTC8564 Driver"); +MODULE_LICENSE("GPL"); + +module_init(rtc8564_init); +module_exit(rtc8564_exit); diff -Nru a/drivers/i2c/chips/rtc8564.h b/drivers/i2c/chips/rtc8564.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/chips/rtc8564.h Tue May 18 23:38:09 2004 @@ -0,0 +1,78 @@ +/* + * linux/drivers/i2c/chips/rtc8564.h + * + * Copyright (C) 2002-2004 Stefan Eletzhofer + * + * based on linux/drivers/acron/char/pcf8583.h + * Copyright (C) 2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +struct rtc_tm { + unsigned char secs; + unsigned char mins; + unsigned char hours; + unsigned char mday; + unsigned char mon; + unsigned short year; /* xxxx 4 digits :) */ + unsigned char wday; + unsigned char vl; +}; + +struct mem { + unsigned int loc; + unsigned int nr; + unsigned char *data; +}; + +#define RTC_GETDATETIME 0 +#define RTC_SETTIME 1 +#define RTC_SETDATETIME 2 +#define RTC_GETCTRL 3 +#define RTC_SETCTRL 4 +#define MEM_READ 5 +#define MEM_WRITE 6 + +#define RTC8564_REG_CTRL1 0x0 /* T 0 S 0 | T 0 0 0 */ +#define RTC8564_REG_CTRL2 0x1 /* 0 0 0 TI/TP | AF TF AIE TIE */ +#define RTC8564_REG_SEC 0x2 /* VL 4 2 1 | 8 4 2 1 */ +#define RTC8564_REG_MIN 0x3 /* x 4 2 1 | 8 4 2 1 */ +#define RTC8564_REG_HR 0x4 /* x x 2 1 | 8 4 2 1 */ +#define RTC8564_REG_DAY 0x5 /* x x 2 1 | 8 4 2 1 */ +#define RTC8564_REG_WDAY 0x6 /* x x x x | x 4 2 1 */ +#define RTC8564_REG_MON_CENT 0x7 /* C x x 1 | 8 4 2 1 */ +#define RTC8564_REG_YEAR 0x8 /* 8 4 2 1 | 8 4 2 1 */ +#define RTC8564_REG_AL_MIN 0x9 /* AE 4 2 1 | 8 4 2 1 */ +#define RTC8564_REG_AL_HR 0xa /* AE 4 2 1 | 8 4 2 1 */ +#define RTC8564_REG_AL_DAY 0xb /* AE x 2 1 | 8 4 2 1 */ +#define RTC8564_REG_AL_WDAY 0xc /* AE x x x | x 4 2 1 */ +#define RTC8564_REG_CLKOUT 0xd /* FE x x x | x x FD1 FD0 */ +#define RTC8564_REG_TCTL 0xe /* TE x x x | x x FD1 FD0 */ +#define RTC8564_REG_TIMER 0xf /* 8 bit binary */ + +/* Control reg */ +#define RTC8564_CTRL1_TEST1 (1<<3) +#define RTC8564_CTRL1_STOP (1<<5) +#define RTC8564_CTRL1_TEST2 (1<<7) + +#define RTC8564_CTRL2_TIE (1<<0) +#define RTC8564_CTRL2_AIE (1<<1) +#define RTC8564_CTRL2_TF (1<<2) +#define RTC8564_CTRL2_AF (1<<3) +#define RTC8564_CTRL2_TI_TP (1<<4) + +/* CLKOUT frequencies */ +#define RTC8564_FD_32768HZ (0x0) +#define RTC8564_FD_1024HZ (0x1) +#define RTC8564_FD_32 (0x2) +#define RTC8564_FD_1HZ (0x3) + +/* Timer CTRL */ +#define RTC8564_TD_4096HZ (0x0) +#define RTC8564_TD_64HZ (0x1) +#define RTC8564_TD_1HZ (0x2) +#define RTC8564_TD_1_60HZ (0x3) + +#define I2C_DRIVERID_RTC8564 0xf000 diff -Nru a/drivers/i2c/chips/via686a.c b/drivers/i2c/chips/via686a.c --- a/drivers/i2c/chips/via686a.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/via686a.c Tue May 18 23:38:05 2004 @@ -108,7 +108,7 @@ #define VIA686A_TEMP_MODE_MASK 0x3F #define VIA686A_TEMP_MODE_CONTINUOUS (0x00) -/* Conversions. Rounding and limit checking is only done on the TO_REG +/* Conversions. Limit checking is only done on the TO_REG variants. ********* VOLTAGE CONVERSIONS (Bob Dougherty) ******** @@ -123,49 +123,41 @@ volts = (25*regVal+133)*factor regVal = (volts/factor-133)/25 (These conversions were contributed by Jonathan Teh Soon Yew - ) - - These get us close, but they don't completely agree with what my BIOS - says- they are all a bit low. But, it all we have to go on... */ + ) */ static inline u8 IN_TO_REG(long val, int inNum) { - /* to avoid floating point, we multiply everything by 100. - val is guaranteed to be positive, so we can achieve the effect of - rounding by (...*10+5)/10. Note that the *10 is hidden in the - /250 (which should really be /2500). - At the end, we need to /100 because we *100 everything and we need - to /10 because of the rounding thing, so we /1000. */ + /* To avoid floating point, we multiply constants by 10 (100 for +12V). + Rounding is done (120500 is actually 133000 - 12500). + Remember that val is expressed in 0.001V/bit, which is why we divide + by an additional 10000 (100000 for +12V): 1000 for val and 10 (100) + for the constants. */ if (inNum <= 1) return (u8) - SENSORS_LIMIT(((val * 210240 - 13300) / 250 + 5) / 1000, - 0, 255); + SENSORS_LIMIT((val * 21024 - 1205000) / 250000, 0, 255); else if (inNum == 2) return (u8) - SENSORS_LIMIT(((val * 157370 - 13300) / 250 + 5) / 1000, - 0, 255); + SENSORS_LIMIT((val * 15737 - 1205000) / 250000, 0, 255); else if (inNum == 3) return (u8) - SENSORS_LIMIT(((val * 101080 - 13300) / 250 + 5) / 1000, - 0, 255); + SENSORS_LIMIT((val * 10108 - 1205000) / 250000, 0, 255); else - return (u8) SENSORS_LIMIT(((val * 41714 - 13300) / 250 + 5) - / 1000, 0, 255); + return (u8) + SENSORS_LIMIT((val * 41714 - 12050000) / 2500000, 0, 255); } static inline long IN_FROM_REG(u8 val, int inNum) { - /* to avoid floating point, we multiply everything by 100. - val is guaranteed to be positive, so we can achieve the effect of - rounding by adding 0.5. Or, to avoid fp math, we do (...*10+5)/10. - We need to scale with *100 anyway, so no need to /100 at the end. */ + /* To avoid floating point, we multiply constants by 10 (100 for +12V). + We also multiply them by 1000 because we want 0.001V/bit for the + output value. Rounding is done. */ if (inNum <= 1) - return (long) (((250000 * val + 13300) / 210240 * 10 + 5) /10); + return (long) ((250000 * val + 1330000 + 21024 / 2) / 21024); else if (inNum == 2) - return (long) (((250000 * val + 13300) / 157370 * 10 + 5) /10); + return (long) ((250000 * val + 1330000 + 15737 / 2) / 15737); else if (inNum == 3) - return (long) (((250000 * val + 13300) / 101080 * 10 + 5) /10); + return (long) ((250000 * val + 1330000 + 10108 / 2) / 10108); else - return (long) (((250000 * val + 13300) / 41714 * 10 + 5) /10); + return (long) ((2500000 * val + 13300000 + 41714 / 2) / 41714); } /********* FAN RPM CONVERSIONS ********/ @@ -276,52 +268,31 @@ 239, 240 }; -/* Converting temps to (8-bit) hyst and over registers - No interpolation here. Just check the limits and go. - The +5 effectively rounds off properly and the +50 is because - the temps start at -50 */ +/* Converting temps to (8-bit) hyst and over registers + No interpolation here. + The +50 is because the temps start at -50 */ static inline u8 TEMP_TO_REG(long val) { - return (u8) - SENSORS_LIMIT(viaLUT[((val <= -500) ? 0 : (val >= 1100) ? 160 : - ((val + 5) / 10 + 50))], 0, 255); + return viaLUT[val <= -50000 ? 0 : val >= 110000 ? 160 : + (val < 0 ? val - 500 : val + 500) / 1000 + 50]; } -/* for 8-bit temperature hyst and over registers - The temp values are already *10, so we don't need to do that. - But we _will_ round these off to the nearest degree with (...*10+5)/10 */ -#define TEMP_FROM_REG(val) ((tempLUT[(val)]*10+5)/10) - -/* for 10-bit temperature readings - You might _think_ this is too long to inline, but's it's really only - called once... */ +/* for 8-bit temperature hyst and over registers */ +#define TEMP_FROM_REG(val) (tempLUT[(val)] * 100) + +/* for 10-bit temperature readings */ static inline long TEMP_FROM_REG10(u16 val) { - /* the temp values are already *10, so we don't need to do that. */ - long temp; u16 eightBits = val >> 2; u16 twoBits = val & 3; - /* handle the extremes first (they won't interpolate well! ;-) */ - if (val == 0) - return (long) tempLUT[0]; - if (val == 1023) - return (long) tempLUT[255]; - - if (twoBits == 0) - return (long) tempLUT[eightBits]; - else { - /* do some interpolation by multipying the lower and upper - bounds by 25, 50 or 75, then /100. */ - temp = ((25 * (4 - twoBits)) * tempLUT[eightBits] - + (25 * twoBits) * tempLUT[eightBits + 1]); - /* increase the magnitude by 50 to achieve rounding. */ - if (temp > 0) - temp += 50; - else - temp -= 50; - return (temp / 100); - } + /* no interpolation for these */ + if (twoBits == 0 || eightBits == 255) + return TEMP_FROM_REG(eightBits); + + /* do some linear interpolation */ + return (tempLUT[eightBits] * (4 - twoBits) + + tempLUT[eightBits + 1] * twoBits) * 25; } #define ALARMS_FROM_REG(val) (val) @@ -375,24 +346,24 @@ /* 7 voltage sensors */ static ssize_t show_in(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr)*10 ); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr)); } static ssize_t show_in_min(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr)*10 ); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr)); } static ssize_t show_in_max(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr)*10 ); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr)); } static ssize_t set_in_min(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct via686a_data *data = i2c_get_clientdata(client); - unsigned long val = simple_strtoul(buf, NULL, 10)/10; + unsigned long val = simple_strtoul(buf, NULL, 10); data->in_min[nr] = IN_TO_REG(val,nr); via686a_write_value(client, VIA686A_REG_IN_MIN(nr), data->in_min[nr]); @@ -402,7 +373,7 @@ size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct via686a_data *data = i2c_get_clientdata(client); - unsigned long val = simple_strtoul(buf, NULL, 10)/10; + unsigned long val = simple_strtoul(buf, NULL, 10); data->in_max[nr] = IN_TO_REG(val,nr); via686a_write_value(client, VIA686A_REG_IN_MAX(nr), data->in_max[nr]); @@ -449,21 +420,21 @@ /* 3 temperatures */ static ssize_t show_temp(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr])*100 ); + return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr])); } static ssize_t show_temp_over(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr])*100); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr])); } static ssize_t show_temp_hyst(struct device *dev, char *buf, int nr) { struct via686a_data *data = via686a_update_device(dev); - return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr])*100); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr])); } static ssize_t set_temp_over(struct device *dev, const char *buf, size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct via686a_data *data = i2c_get_clientdata(client); - int val = simple_strtol(buf, NULL, 10)/100; + int val = simple_strtol(buf, NULL, 10); data->temp_over[nr] = TEMP_TO_REG(val); via686a_write_value(client, VIA686A_REG_TEMP_OVER(nr), data->temp_over[nr]); return count; @@ -472,7 +443,7 @@ size_t count, int nr) { struct i2c_client *client = to_i2c_client(dev); struct via686a_data *data = i2c_get_clientdata(client); - int val = simple_strtol(buf, NULL, 10)/100; + int val = simple_strtol(buf, NULL, 10); data->temp_hyst[nr] = TEMP_TO_REG(val); via686a_write_value(client, VIA686A_REG_TEMP_HYST(nr), data->temp_hyst[nr]); return count; @@ -602,7 +573,7 @@ /* This is called when the module is loaded */ static int via686a_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, via686a_detect); } diff -Nru a/drivers/i2c/chips/w83781d.c b/drivers/i2c/chips/w83781d.c --- a/drivers/i2c/chips/w83781d.c Tue May 18 23:38:05 2004 +++ b/drivers/i2c/chips/w83781d.c Tue May 18 23:38:05 2004 @@ -183,8 +183,10 @@ #define ALARMS_FROM_REG(val) (val) #define PWM_FROM_REG(val) (val) #define PWM_TO_REG(val) (SENSORS_LIMIT((val),0,255)) -#define BEEP_MASK_FROM_REG(val) (val) -#define BEEP_MASK_TO_REG(val) ((val) & 0xffffff) +#define BEEP_MASK_FROM_REG(val,type) ((type) == as99127f ? \ + (val) ^ 0x7fff : (val)) +#define BEEP_MASK_TO_REG(val,type) ((type) == as99127f ? \ + (~(val)) & 0x7fff : (val) & 0xffffff) #define BEEP_ENABLE_TO_REG(val) ((val) ? 1 : 0) #define BEEP_ENABLE_FROM_REG(val) ((val) ? 1 : 0) @@ -539,14 +541,18 @@ DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL) #define device_create_file_alarms(client) \ device_create_file(&client->dev, &dev_attr_alarms); -#define show_beep_reg(REG, reg) \ -static ssize_t show_beep_##reg (struct device *dev, char *buf) \ -{ \ - struct w83781d_data *data = w83781d_update_device(dev); \ - return sprintf(buf,"%ld\n", (long)BEEP_##REG##_FROM_REG(data->beep_##reg)); \ +static ssize_t show_beep_mask (struct device *dev, char *buf) +{ + struct w83781d_data *data = w83781d_update_device(dev); + return sprintf(buf, "%ld\n", + (long)BEEP_MASK_FROM_REG(data->beep_mask, data->type)); +} +static ssize_t show_beep_enable (struct device *dev, char *buf) +{ + struct w83781d_data *data = w83781d_update_device(dev); + return sprintf(buf, "%ld\n", + (long)BEEP_ENABLE_FROM_REG(data->beep_enable)); } -show_beep_reg(ENABLE, enable); -show_beep_reg(MASK, mask); #define BEEP_ENABLE 0 /* Store beep_enable */ #define BEEP_MASK 1 /* Store beep_mask */ @@ -562,7 +568,7 @@ val = simple_strtoul(buf, NULL, 10); if (update_mask == BEEP_MASK) { /* We are storing beep_mask */ - data->beep_mask = BEEP_MASK_TO_REG(val); + data->beep_mask = BEEP_MASK_TO_REG(val, data->type); w83781d_write_value(client, W83781D_REG_BEEP_INTS1, data->beep_mask & 0xff); @@ -905,7 +911,7 @@ static int w83781d_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, w83781d_detect); } @@ -1330,7 +1336,13 @@ return err; } - kfree(i2c_get_clientdata(client)); + if (i2c_get_clientdata(client)==NULL) { + /* subclients */ + kfree(client); + } else { + /* main client */ + kfree(i2c_get_clientdata(client)); + } return 0; } diff -Nru a/drivers/i2c/chips/w83l785ts.c b/drivers/i2c/chips/w83l785ts.c --- a/drivers/i2c/chips/w83l785ts.c Tue May 18 23:38:06 2004 +++ b/drivers/i2c/chips/w83l785ts.c Tue May 18 23:38:06 2004 @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -145,7 +146,7 @@ static int w83l785ts_attach_adapter(struct i2c_adapter *adapter) { - if (!(adapter->class & I2C_ADAP_CLASS_SMBUS)) + if (!(adapter->class & I2C_CLASS_HWMON)) return 0; return i2c_detect(adapter, &addr_data, w83l785ts_detect); } @@ -284,7 +285,7 @@ if (value >= 0) return value; dev_dbg(&client->dev, "Read failed, will retry in %d.\n", i); - i2c_delay(i); + msleep(i); } dev_err(&client->dev, "Couldn't read value from register. " diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c --- a/drivers/ide/ide-disk.c Tue May 18 23:38:06 2004 +++ b/drivers/ide/ide-disk.c Tue May 18 23:38:06 2004 @@ -740,8 +740,6 @@ return __ide_do_rw_disk(drive, rq, block); } -static int do_idedisk_flushcache(ide_drive_t *drive); - static u8 idedisk_dump_status (ide_drive_t *drive, const char *msg, u8 stat) { ide_hwif_t *hwif = HWIF(drive); @@ -1359,11 +1357,18 @@ return 0; } +/* check if CACHE FLUSH (EXT) command is supported (bits defined in ATA-6) */ +#define ide_id_has_flush_cache(id) ((id)->cfs_enable_2 & 0x3000) + +/* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */ +#define ide_id_has_flush_cache_ext(id) \ + (((id)->cfs_enable_2 & 0x2400) == 0x2400) + static int write_cache (ide_drive_t *drive, int arg) { ide_task_t args; - if (!(drive->id->cfs_enable_2 & 0x3000)) + if (!ide_id_has_flush_cache(drive->id)) return 1; memset(&args, 0, sizeof(ide_task_t)); @@ -1383,7 +1388,7 @@ ide_task_t args; memset(&args, 0, sizeof(ide_task_t)); - if (drive->id->cfs_enable_2 & 0x2400) + if (ide_id_has_flush_cache_ext(drive->id)) args.tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE_EXT; else args.tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE; @@ -1513,11 +1518,11 @@ switch (rq->pm->pm_step) { case idedisk_pm_flush_cache: /* Suspend step 1 (flush cache) */ /* Not supported? Switch to next step now. */ - if (!drive->wcache) { + if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) { idedisk_complete_power_step(drive, rq, 0, 0); return ide_stopped; } - if (drive->id->cfs_enable_2 & 0x2400) + if (ide_id_has_flush_cache_ext(drive->id)) args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE_EXT; else args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE; @@ -1678,8 +1683,12 @@ #endif /* CONFIG_IDEDISK_MULTI_MODE */ } drive->no_io_32bit = id->dword_io ? 1 : 0; - if (drive->id->cfs_enable_2 & 0x3000) - write_cache(drive, (id->cfs_enable_2 & 0x3000)); + + /* write cache enabled? */ + if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5))) + drive->wcache = 1; + + write_cache(drive, 1); #ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT if (drive->using_dma) @@ -1687,9 +1696,17 @@ #endif } +static void ide_cacheflush_p(ide_drive_t *drive) +{ + if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) + return; + + if (do_idedisk_flushcache(drive)) + printk(KERN_INFO "%s: wcache flush failed!\n", drive->name); +} + static int idedisk_cleanup (ide_drive_t *drive) { - static int ide_cacheflush_p(ide_drive_t *drive); struct gendisk *g = drive->disk; ide_cacheflush_p(drive); if (ide_unregister_subdriver(drive)) @@ -1740,7 +1757,6 @@ static int idedisk_open(struct inode *inode, struct file *filp) { - u8 cf; ide_drive_t *drive = inode->i_bdev->bd_disk->private_data; drive->usage++; if (drive->removable && drive->usage == 1) { @@ -1758,35 +1774,6 @@ if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL)) drive->doorlocking = 0; } - drive->wcache = 0; - /* Cache enabled? */ - if (drive->id->csfo & 1) - drive->wcache = 1; - /* Cache command set available? */ - if (drive->id->cfs_enable_1 & (1 << 5)) - drive->wcache = 1; - /* ATA6 cache extended commands */ - cf = drive->id->command_set_2 >> 24; - if ((cf & 0xC0) == 0x40 && (cf & 0x30) != 0) - drive->wcache = 1; - return 0; -} - -static int ide_cacheflush_p(ide_drive_t *drive) -{ - if (!(drive->id->cfs_enable_2 & 0x3000)) - return 0; - - if(drive->wcache) - { - if (do_idedisk_flushcache(drive)) - { - printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n", - drive->name); - return -EIO; - } - return 1; - } return 0; } @@ -1867,10 +1854,7 @@ if ((!drive->head || drive->head > 16) && !drive->select.b.lba) { printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head); - if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache) - if (do_idedisk_flushcache(drive)) - printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n", - drive->name); + ide_cacheflush_p(drive); ide_unregister_subdriver(drive); DRIVER(drive)->busy--; goto failed; diff -Nru a/drivers/ide/pci/cmd640.h b/drivers/ide/pci/cmd640.h --- a/drivers/ide/pci/cmd640.h Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,32 +0,0 @@ -#ifndef CMD640_H -#define CMD640_H - -#include -#include -#include - -#define IDE_IGNORE ((void *)-1) - -static ide_pci_device_t cmd640_chipsets[] __initdata = { - { - .vendor = PCI_VENDOR_ID_CMD, - .device = PCI_DEVICE_ID_CMD_640, - .name = "CMD640", - .init_setup = NULL, - .init_chipset = NULL, - .init_iops = NULL, - .init_hwif = IDE_IGNORE, - .init_dma = NULL, - .channels = 2, - .autodma = NODMA, - .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, - .bootable = ON_BOARD, - .extra = 0 - },{ - .vendor = 0, - .device = 0, - .bootable = EOL, - } -} - -#endif /* CMD640_H */ diff -Nru a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c --- a/drivers/ide/pci/piix.c Tue May 18 23:38:05 2004 +++ b/drivers/ide/pci/piix.c Tue May 18 23:38:05 2004 @@ -153,7 +153,7 @@ case PCI_DEVICE_ID_INTEL_82801EB_11: case PCI_DEVICE_ID_INTEL_82801E_11: case PCI_DEVICE_ID_INTEL_ESB_2: - case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_19: p += sprintf(p, "PIIX4 Ultra 100 "); break; case PCI_DEVICE_ID_INTEL_82372FB_1: @@ -292,7 +292,7 @@ case PCI_DEVICE_ID_INTEL_82801DB_11: case PCI_DEVICE_ID_INTEL_82801EB_11: case PCI_DEVICE_ID_INTEL_ESB_2: - case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_19: mode = 3; break; /* UDMA 66 capable */ @@ -627,7 +627,7 @@ case PCI_DEVICE_ID_INTEL_82801EB_11: case PCI_DEVICE_ID_INTEL_82801E_11: case PCI_DEVICE_ID_INTEL_ESB_2: - case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_19: { unsigned int extra = 0; pci_read_config_dword(dev, 0x54, &extra); @@ -804,7 +804,7 @@ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18}, #endif /* !CONFIG_SCSI_SATA */ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19}, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20}, + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_19, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20}, { 0, }, }; MODULE_DEVICE_TABLE(pci, piix_pci_tbl); diff -Nru a/drivers/ide/pci/piix.h b/drivers/ide/pci/piix.h --- a/drivers/ide/pci/piix.h Tue May 18 23:38:06 2004 +++ b/drivers/ide/pci/piix.h Tue May 18 23:38:06 2004 @@ -70,7 +70,7 @@ /* 17 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801DB_10, "ICH4"), /* 18 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801EB_1, "ICH5-SATA"), /* 19 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ESB_2, "ICH5"), - /* 20 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ICH6_2, "ICH6"), + /* 20 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ICH6_19, "ICH6"), { .vendor = 0, .device = 0, diff -Nru a/drivers/input/gameport/ns558.c b/drivers/input/gameport/ns558.c --- a/drivers/input/gameport/ns558.c Tue May 18 23:38:08 2004 +++ b/drivers/input/gameport/ns558.c Tue May 18 23:38:08 2004 @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -103,7 +104,7 @@ i = 0; goto out; } - wait_ms(3); + msleep(3); /* * After some time (4ms) the axes shouldn't change anymore. */ @@ -129,7 +130,7 @@ outb(0xff, io & (-1 << i)); for (j = b = 0; j < 1000; j++) if (inb(io & (-1 << i)) != inb((io & (-1 << i)) + (1 << i) - 1)) b++; - wait_ms(3); + msleep(3); if (b > 300) { /* We allow 30% difference */ release_region(io & (-1 << i), (1 << i)); diff -Nru a/drivers/input/gameport/vortex.c b/drivers/input/gameport/vortex.c --- a/drivers/input/gameport/vortex.c Tue May 18 23:38:08 2004 +++ b/drivers/input/gameport/vortex.c Tue May 18 23:38:08 2004 @@ -40,6 +40,7 @@ #include #include #include +#include #include MODULE_AUTHOR("Vojtech Pavlik "); @@ -93,7 +94,7 @@ switch (mode) { case GAMEPORT_MODE_COOKED: writeb(0x40, vortex->io + VORTEX_GCR); - wait_ms(VORTEX_DATA_WAIT); + msleep(VORTEX_DATA_WAIT); return 0; case GAMEPORT_MODE_RAW: writeb(0x00, vortex->io + VORTEX_GCR); diff -Nru a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c --- a/drivers/input/joystick/adi.c Tue May 18 23:38:06 2004 +++ b/drivers/input/joystick/adi.c Tue May 18 23:38:06 2004 @@ -321,7 +321,7 @@ for (i = 0; seq[i]; i++) { gameport_trigger(gameport); - if (seq[i] > 0) wait_ms(seq[i]); + if (seq[i] > 0) msleep(seq[i]); if (seq[i] < 0) mdelay(-seq[i]); } } @@ -513,9 +513,9 @@ return; } - wait_ms(ADI_INIT_DELAY); + msleep(ADI_INIT_DELAY); if (adi_read(port)) { - wait_ms(ADI_DATA_DELAY); + msleep(ADI_DATA_DELAY); adi_read(port); } diff -Nru a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c --- a/drivers/input/joystick/analog.c Tue May 18 23:38:09 2004 +++ b/drivers/input/joystick/analog.c Tue May 18 23:38:09 2004 @@ -142,7 +142,7 @@ #ifdef __i386__ #define GET_TIME(x) do { if (cpu_has_tsc) rdtscl(x); else x = get_time_pit(); } while (0) -#define DELTA(x,y) (cpu_has_tsc?((y)-(x)):((x)-(y)+((x)<(y)?1193182L/HZ:0))) +#define DELTA(x,y) (cpu_has_tsc ? ((y) - (x)) : ((x) - (y) + ((x) < (y) ? CLOCK_TICK_RATE / HZ : 0))) #define TIME_NAME (cpu_has_tsc?"TSC":"PIT") static unsigned int get_time_pit(void) { @@ -603,18 +603,18 @@ gameport_trigger(gameport); t = gameport_read(gameport); - wait_ms(ANALOG_MAX_TIME); + msleep(ANALOG_MAX_TIME); port->mask = (gameport_read(gameport) ^ t) & t & 0xf; port->fuzz = (port->speed * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS; for (i = 0; i < ANALOG_INIT_RETRIES; i++) { if (!analog_cooked_read(port)) break; - wait_ms(ANALOG_MAX_TIME); + msleep(ANALOG_MAX_TIME); } u = v = 0; - wait_ms(ANALOG_MAX_TIME); + msleep(ANALOG_MAX_TIME); t = gameport_time(gameport, ANALOG_MAX_TIME * 1000); gameport_trigger(gameport); while ((gameport_read(port->gameport) & port->mask) && (u < t)) u++; diff -Nru a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c --- a/drivers/input/joystick/gf2k.c Tue May 18 23:38:08 2004 +++ b/drivers/input/joystick/gf2k.c Tue May 18 23:38:08 2004 @@ -260,11 +260,11 @@ gf2k_trigger_seq(gameport, gf2k_seq_reset); - wait_ms(GF2K_TIMEOUT); + msleep(GF2K_TIMEOUT); gf2k_trigger_seq(gameport, gf2k_seq_digital); - wait_ms(GF2K_TIMEOUT); + msleep(GF2K_TIMEOUT); if (gf2k_read_packet(gameport, GF2K_LENGTH, data) < 12) goto fail2; diff -Nru a/drivers/input/misc/98spkr.c b/drivers/input/misc/98spkr.c --- a/drivers/input/misc/98spkr.c Tue May 18 23:38:06 2004 +++ b/drivers/input/misc/98spkr.c Tue May 18 23:38:06 2004 @@ -17,6 +17,7 @@ #include #include #include +#include #include MODULE_AUTHOR("Osamu Tomita "); @@ -44,7 +45,7 @@ } if (value > 20 && value < 32767) - count = CLOCK_TICK_RATE / value; + count = PIT_TICK_RATE / value; spin_lock_irqsave(&i8253_beep_lock, flags); diff -Nru a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig --- a/drivers/input/misc/Kconfig Tue May 18 23:38:06 2004 +++ b/drivers/input/misc/Kconfig Tue May 18 23:38:06 2004 @@ -14,7 +14,7 @@ config INPUT_PCSPKR tristate "PC Speaker support" - depends on INPUT && INPUT_MISC + depends on (ALPHA || X86 || X86_64 || MIPS) && INPUT && INPUT_MISC help Say Y here if you want the standard PC Speaker to be used for bells and whistles. diff -Nru a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c --- a/drivers/input/misc/pcspkr.c Tue May 18 23:38:08 2004 +++ b/drivers/input/misc/pcspkr.c Tue May 18 23:38:08 2004 @@ -16,6 +16,7 @@ #include #include #include +#include #include MODULE_AUTHOR("Vojtech Pavlik "); @@ -43,7 +44,7 @@ } if (value > 20 && value < 32767) - count = CLOCK_TICK_RATE / value; + count = PIT_TICK_RATE / value; spin_lock_irqsave(&i8253_beep_lock, flags); diff -Nru a/drivers/isdn/hardware/avm/avm_cs.c b/drivers/isdn/hardware/avm/avm_cs.c --- a/drivers/isdn/hardware/avm/avm_cs.c Tue May 18 23:38:05 2004 +++ b/drivers/isdn/hardware/avm/avm_cs.c Tue May 18 23:38:05 2004 @@ -505,12 +505,12 @@ } /* avmcs_event */ static struct pcmcia_driver avmcs_driver = { - .owner = THIS_MODULE, - .drv = { - .name = "avmcs_cs", + .owner = THIS_MODULE, + .drv = { + .name = "avm_cs", }, - .attach = avmcs_attach, - .detach = avmcs_detach, + .attach = avmcs_attach, + .detach = avmcs_detach, }; static int __init avmcs_init(void) diff -Nru a/drivers/isdn/hisax/st5481_b.c b/drivers/isdn/hisax/st5481_b.c --- a/drivers/isdn/hisax/st5481_b.c Tue May 18 23:38:06 2004 +++ b/drivers/isdn/hisax/st5481_b.c Tue May 18 23:38:06 2004 @@ -257,13 +257,18 @@ static int st5481_setup_b_out(struct st5481_bcs *bcs) { struct usb_device *dev = bcs->adapter->usb_dev; - struct usb_host_interface *altsetting; + struct usb_interface *intf; + struct usb_host_interface *altsetting = NULL; struct usb_host_endpoint *endpoint; struct st5481_b_out *b_out = &bcs->b_out; DBG(4,""); - altsetting = &(dev->config->interface[0]->altsetting[3]); + intf = usb_ifnum_to_if(dev, 0); + if (intf) + altsetting = usb_altnum_to_altsetting(intf, 3); + if (!altsetting) + return -ENXIO; // Allocate URBs and buffers for the B channel out endpoint = &altsetting->endpoint[EP_B1_OUT - 1 + bcs->channel * 2]; diff -Nru a/drivers/isdn/hisax/st5481_d.c b/drivers/isdn/hisax/st5481_d.c --- a/drivers/isdn/hisax/st5481_d.c Tue May 18 23:38:07 2004 +++ b/drivers/isdn/hisax/st5481_d.c Tue May 18 23:38:07 2004 @@ -652,13 +652,18 @@ static int st5481_setup_d_out(struct st5481_adapter *adapter) { struct usb_device *dev = adapter->usb_dev; - struct usb_host_interface *altsetting; + struct usb_interface *intf; + struct usb_host_interface *altsetting = NULL; struct usb_host_endpoint *endpoint; struct st5481_d_out *d_out = &adapter->d_out; DBG(2,""); - altsetting = &(dev->config->interface[0]->altsetting[3]); + intf = usb_ifnum_to_if(dev, 0); + if (intf) + altsetting = usb_altnum_to_altsetting(intf, 3); + if (!altsetting) + return -ENXIO; // Allocate URBs and buffers for the D channel out endpoint = &altsetting->endpoint[EP_D_OUT-1]; diff -Nru a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c --- a/drivers/isdn/hisax/st5481_usb.c Tue May 18 23:38:08 2004 +++ b/drivers/isdn/hisax/st5481_usb.c Tue May 18 23:38:08 2004 @@ -244,7 +244,8 @@ struct usb_device *dev = adapter->usb_dev; struct st5481_ctrl *ctrl = &adapter->ctrl; struct st5481_intr *intr = &adapter->intr; - struct usb_host_interface *altsetting; + struct usb_interface *intf; + struct usb_host_interface *altsetting = NULL; struct usb_host_endpoint *endpoint; int status; struct urb *urb; @@ -257,8 +258,11 @@ return status; } - - altsetting = &(dev->config->interface[0]->altsetting[3]); + intf = usb_ifnum_to_if(dev, 0); + if (intf) + altsetting = usb_altnum_to_altsetting(intf, 3); + if (!altsetting) + return -ENXIO; // Check if the config is sane if ( altsetting->desc.bNumEndpoints != 7 ) { diff -Nru a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c --- a/drivers/macintosh/adb.c Tue May 18 23:38:09 2004 +++ b/drivers/macintosh/adb.c Tue May 18 23:38:09 2004 @@ -10,7 +10,7 @@ * * To do: * - * - /proc/adb to list the devices and infos + * - /sys/bus/adb to list the devices and infos * - more /dev/adb to allow userland to receive the * flow of auto-polling datas from a given device. * - move bus probe to a kernel thread @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -36,6 +35,7 @@ #include #include #include +#include #include #include #ifdef CONFIG_PPC @@ -75,6 +75,8 @@ NULL }; +static struct class_simple *adb_dev_class; + struct adb_driver *adb_controller; struct notifier_block *adb_client_list = NULL; static int adb_got_sleep; @@ -883,6 +885,7 @@ } static struct file_operations adb_fops = { + .owner = THIS_MODULE, .llseek = no_llseek, .read = adb_read, .write = adb_write, @@ -893,9 +896,13 @@ static void adbdev_init(void) { - if (register_chrdev(ADB_MAJOR, "adb", &adb_fops)) + if (register_chrdev(ADB_MAJOR, "adb", &adb_fops)) { printk(KERN_ERR "adb: unable to get major %d\n", ADB_MAJOR); - else - devfs_mk_cdev(MKDEV(ADB_MAJOR, 0), - S_IFCHR | S_IRUSR | S_IWUSR, "adb"); + return; + } + adb_dev_class = class_simple_create(THIS_MODULE, "adb"); + if (IS_ERR(adb_dev_class)) { + return; + } + class_simple_device_add(adb_dev_class, MKDEV(ADB_MAJOR, 0), NULL, "adb"); } diff -Nru a/drivers/macintosh/therm_pm72.c b/drivers/macintosh/therm_pm72.c --- a/drivers/macintosh/therm_pm72.c Tue May 18 23:38:08 2004 +++ b/drivers/macintosh/therm_pm72.c Tue May 18 23:38:08 2004 @@ -146,13 +146,6 @@ .detach_adapter = therm_pm72_detach, }; - -static inline void wait_ms(unsigned int ms) -{ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1 + (ms * HZ + 999) / 1000); -} - /* * Utility function to create an i2c_client structure and * attach it to one of u3 adapters @@ -251,7 +244,7 @@ if (rc <= 0) goto error; /* Wait for convertion */ - wait_ms(1); + msleep(1); /* Switch to data register */ buf[0] = 4; rc = i2c_master_send(state->monitor, buf, 1); @@ -269,7 +262,7 @@ printk(KERN_ERR "therm_pm72: Error reading ADC !\n"); return -1; } - wait_ms(10); + msleep(10); } } @@ -283,7 +276,7 @@ nw = i2c_master_send(fcu, buf, 1); if (nw > 0 || (nw < 0 && nw != -EIO) || tries >= 100) break; - wait_ms(10); + msleep(10); ++tries; } if (nw <= 0) { @@ -295,7 +288,7 @@ nr = i2c_master_recv(fcu, buf, nb); if (nr > 0 || (nr < 0 && nr != ENODEV) || tries >= 100) break; - wait_ms(10); + msleep(10); ++tries; } if (nr <= 0) @@ -316,7 +309,7 @@ nw = i2c_master_send(fcu, buf, nb); if (nw > 0 || (nw < 0 && nw != EIO) || tries >= 100) break; - wait_ms(10); + msleep(10); ++tries; } if (nw < 0) diff -Nru a/drivers/md/multipath.c b/drivers/md/multipath.c --- a/drivers/md/multipath.c Tue May 18 23:38:07 2004 +++ b/drivers/md/multipath.c Tue May 18 23:38:07 2004 @@ -522,6 +522,7 @@ multipath_conf_t *conf = mddev_to_conf(mddev); md_unregister_thread(mddev->thread); + mddev->thread = NULL; mempool_destroy(conf->pool); kfree(conf->multipaths); kfree(conf); diff -Nru a/drivers/media/radio/radio-typhoon.c b/drivers/media/radio/radio-typhoon.c --- a/drivers/media/radio/radio-typhoon.c Tue May 18 23:38:06 2004 +++ b/drivers/media/radio/radio-typhoon.c Tue May 18 23:38:06 2004 @@ -326,7 +326,6 @@ return -EINVAL; } typhoon_unit.iobase = io; - init_MUTEX(&typhoon_unit.lock); if (mutefreq < 87000 || mutefreq > 108500) { printk(KERN_ERR "radio-typhoon: You must set a frequency (in kHz) used when muting the card,\n"); @@ -337,6 +336,7 @@ #endif /* MODULE */ printk(KERN_INFO BANNER); + init_MUTEX(&typhoon_unit.lock); io = typhoon_unit.iobase; if (!request_region(io, 8, "typhoon")) { printk(KERN_ERR "radio-typhoon: port 0x%x already in use\n", diff -Nru a/drivers/media/video/bt832.c b/drivers/media/video/bt832.c --- a/drivers/media/video/bt832.c Tue May 18 23:38:08 2004 +++ b/drivers/media/video/bt832.c Tue May 18 23:38:08 2004 @@ -197,7 +197,7 @@ static int bt832_probe(struct i2c_adapter *adap) { - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, bt832_attach); return 0; } diff -Nru a/drivers/media/video/bttv-i2c.c b/drivers/media/video/bttv-i2c.c --- a/drivers/media/video/bttv-i2c.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/bttv-i2c.c Tue May 18 23:38:05 2004 @@ -108,8 +108,8 @@ .inc_use = bttv_inc_use, .dec_use = bttv_dec_use, #endif -#ifdef I2C_ADAP_CLASS_TV_ANALOG - .class = I2C_ADAP_CLASS_TV_ANALOG, +#ifdef I2C_CLASS_TV_ANALOG + .class = I2C_CLASS_TV_ANALOG, #endif I2C_DEVNAME("bt848"), .id = I2C_HW_B_BT848, @@ -291,8 +291,8 @@ .inc_use = bttv_inc_use, .dec_use = bttv_dec_use, #endif -#ifdef I2C_ADAP_CLASS_TV_ANALOG - .class = I2C_ADAP_CLASS_TV_ANALOG, +#ifdef I2C_CLASS_TV_ANALOG + .class = I2C_CLASS_TV_ANALOG, #endif I2C_DEVNAME("bt878"), .id = I2C_ALGO_BIT | I2C_HW_B_BT848 /* FIXME */, diff -Nru a/drivers/media/video/cpia_usb.c b/drivers/media/video/cpia_usb.c --- a/drivers/media/video/cpia_usb.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/cpia_usb.c Tue May 18 23:38:05 2004 @@ -499,7 +499,7 @@ if (udev->descriptor.bNumConfigurations != 1) return -ENODEV; - interface = &intf->altsetting[0]; + interface = intf->cur_altsetting; printk(KERN_INFO "USB CPiA camera found\n"); @@ -620,8 +620,6 @@ wake_up_interruptible(&ucpia->wq_stream); udev = interface_to_usbdev(intf); - usb_driver_release_interface(&cpia_driver, - udev->actconfig->interface[0]); ucpia->curbuff = ucpia->workbuff = NULL; diff -Nru a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c --- a/drivers/media/video/cx88/cx88-i2c.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/cx88/cx88-i2c.c Tue May 18 23:38:06 2004 @@ -128,8 +128,8 @@ .inc_use = cx8800_inc_use, .dec_use = cx8800_dec_use, #endif -#ifdef I2C_ADAP_CLASS_TV_ANALOG - .class = I2C_ADAP_CLASS_TV_ANALOG, +#ifdef I2C_CLASS_TV_ANALOG + .class = I2C_CLASS_TV_ANALOG, #endif I2C_DEVNAME("cx2388x"), .id = I2C_HW_B_BT848, diff -Nru a/drivers/media/video/dpc7146.c b/drivers/media/video/dpc7146.c --- a/drivers/media/video/dpc7146.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/dpc7146.c Tue May 18 23:38:06 2004 @@ -106,7 +106,7 @@ video port pins should be enabled here ?! */ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); - saa7146_i2c_adapter_prepare(dev, &dpc->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); + saa7146_i2c_adapter_prepare(dev, &dpc->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); if(i2c_add_adapter(&dpc->i2c_adapter) < 0) { DEB_S(("cannot register i2c-device. skipping.\n")); kfree(dpc); diff -Nru a/drivers/media/video/hexium_gemini.c b/drivers/media/video/hexium_gemini.c --- a/drivers/media/video/hexium_gemini.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/hexium_gemini.c Tue May 18 23:38:06 2004 @@ -250,7 +250,7 @@ /* enable i2c-port pins */ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); - saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); + saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); if (i2c_add_adapter(&hexium->i2c_adapter) < 0) { DEB_S(("cannot register i2c-device. skipping.\n")); kfree(hexium); diff -Nru a/drivers/media/video/hexium_orion.c b/drivers/media/video/hexium_orion.c --- a/drivers/media/video/hexium_orion.c Tue May 18 23:38:09 2004 +++ b/drivers/media/video/hexium_orion.c Tue May 18 23:38:09 2004 @@ -237,7 +237,7 @@ saa7146_write(dev, DD1_STREAM_B, 0x00000000); saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); + saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); if (i2c_add_adapter(&hexium->i2c_adapter) < 0) { DEB_S(("cannot register i2c-device. skipping.\n")); kfree(hexium); diff -Nru a/drivers/media/video/msp3400.c b/drivers/media/video/msp3400.c --- a/drivers/media/video/msp3400.c Tue May 18 23:38:08 2004 +++ b/drivers/media/video/msp3400.c Tue May 18 23:38:08 2004 @@ -1353,8 +1353,8 @@ static int msp_probe(struct i2c_adapter *adap) { -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, msp_attach); #else switch (adap->id) { diff -Nru a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c --- a/drivers/media/video/mxb.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/mxb.c Tue May 18 23:38:05 2004 @@ -223,7 +223,7 @@ video port pins should be enabled here ?! */ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); - saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); + saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480); if(i2c_add_adapter(&mxb->i2c_adapter) < 0) { DEB_S(("cannot register i2c-device. skipping.\n")); kfree(mxb); diff -Nru a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c --- a/drivers/media/video/saa5246a.c Tue May 18 23:38:07 2004 +++ b/drivers/media/video/saa5246a.c Tue May 18 23:38:07 2004 @@ -143,7 +143,7 @@ */ static int saa5246a_probe(struct i2c_adapter *adap) { - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, saa5246a_attach); return 0; } diff -Nru a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c --- a/drivers/media/video/saa5249.c Tue May 18 23:38:08 2004 +++ b/drivers/media/video/saa5249.c Tue May 18 23:38:08 2004 @@ -219,7 +219,7 @@ static int saa5249_probe(struct i2c_adapter *adap) { - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, saa5249_attach); return 0; } diff -Nru a/drivers/media/video/saa7111.c b/drivers/media/video/saa7111.c --- a/drivers/media/video/saa7111.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/saa7111.c Tue May 18 23:38:06 2004 @@ -9,6 +9,9 @@ * Changes by Ronald Bultje * - moved over to linux>=2.4.x i2c protocol (1/1/2003) * + * Changes by Michael Hunold + * - implemented DECODER_SET_GPIO, DECODER_INIT, DECODER_SET_VBI_BYPASS + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -112,7 +115,7 @@ u8 block_data[32]; msg.addr = client->addr; - msg.flags = client->flags; + msg.flags = 0; while (len >= 2) { msg.buf = (char *) block_data; msg.len = 0; @@ -142,6 +145,13 @@ return ret; } +static int +saa7111_init_decoder (struct i2c_client *client, + struct video_decoder_init *init) +{ + return saa7111_write_block(client, init->data, init->len); +} + static inline int saa7111_read (struct i2c_client *client, u8 reg) @@ -151,7 +161,7 @@ /* ----------------------------------------------------------------------- */ -static const unsigned char init[] = { +static const unsigned char saa7111_i2c_init[] = { 0x00, 0x00, /* 00 - ID byte */ 0x01, 0x00, /* 01 - reserved */ @@ -201,8 +211,18 @@ switch (cmd) { case 0: - //saa7111_write_block(client, init, sizeof(init)); - break; + case DECODER_INIT: + { + struct video_decoder_init *init = arg; + if (NULL != init) + return saa7111_init_decoder(client, init); + else { + struct video_decoder_init vdi; + vdi.data = saa7111_i2c_init; + vdi.len = sizeof(saa7111_i2c_init); + return saa7111_init_decoder(client, &vdi); + } + } case DECODER_DUMP: { @@ -274,6 +294,32 @@ } break; + case DECODER_SET_GPIO: + { + int *iarg = arg; + if (0 != *iarg) { + saa7111_write(client, 0x11, + (decoder->reg[0x11] | 0x80)); + } else { + saa7111_write(client, 0x11, + (decoder->reg[0x11] & 0x7f)); + } + break; + } + + case DECODER_SET_VBI_BYPASS: + { + int *iarg = arg; + if (0 != *iarg) { + saa7111_write(client, 0x13, + (decoder->reg[0x13] & 0xf0) | 0x0a); + } else { + saa7111_write(client, 0x13, + (decoder->reg[0x13] & 0xf0)); + } + break; + } + case DECODER_SET_NORM: { int *iarg = arg; @@ -465,6 +511,7 @@ int i; struct i2c_client *client; struct saa7111 *decoder; + struct video_decoder_init vdi; dprintk(1, KERN_INFO @@ -509,7 +556,9 @@ return i; } - i = saa7111_write_block(client, init, sizeof(init)); + vdi.data = saa7111_i2c_init; + vdi.len = sizeof(saa7111_i2c_init); + i = saa7111_init_decoder(client, &vdi); if (i < 0) { dprintk(1, KERN_ERR "%s_attach error: init status %d\n", I2C_NAME(client), i); diff -Nru a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c --- a/drivers/media/video/saa7134/saa6752hs.c Tue May 18 23:38:09 2004 +++ b/drivers/media/video/saa7134/saa6752hs.c Tue May 18 23:38:09 2004 @@ -335,7 +335,7 @@ static int saa6752hs_probe(struct i2c_adapter *adap) { - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, saa6752hs_attach); return 0; diff -Nru a/drivers/media/video/saa7134/saa7134-i2c.c b/drivers/media/video/saa7134/saa7134-i2c.c --- a/drivers/media/video/saa7134/saa7134-i2c.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/saa7134/saa7134-i2c.c Tue May 18 23:38:05 2004 @@ -347,8 +347,8 @@ .inc_use = inc_use, .dec_use = dec_use, #endif -#ifdef I2C_ADAP_CLASS_TV_ANALOG - .class = I2C_ADAP_CLASS_TV_ANALOG, +#ifdef I2C_CLASS_TV_ANALOG + .class = I2C_CLASS_TV_ANALOG, #endif I2C_DEVNAME("saa7134"), .id = I2C_ALGO_SAA7134, diff -Nru a/drivers/media/video/tda7432.c b/drivers/media/video/tda7432.c --- a/drivers/media/video/tda7432.c Tue May 18 23:38:08 2004 +++ b/drivers/media/video/tda7432.c Tue May 18 23:38:08 2004 @@ -338,8 +338,8 @@ static int tda7432_probe(struct i2c_adapter *adap) { -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, tda7432_attach); #else if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848)) diff -Nru a/drivers/media/video/tda9875.c b/drivers/media/video/tda9875.c --- a/drivers/media/video/tda9875.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/tda9875.c Tue May 18 23:38:06 2004 @@ -272,8 +272,8 @@ static int tda9875_probe(struct i2c_adapter *adap) { -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, tda9875_attach); #else if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848)) diff -Nru a/drivers/media/video/tda9887.c b/drivers/media/video/tda9887.c --- a/drivers/media/video/tda9887.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/tda9887.c Tue May 18 23:38:05 2004 @@ -370,8 +370,8 @@ static int tda9887_probe(struct i2c_adapter *adap) { -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, tda9887_attach); #else switch (adap->id) { diff -Nru a/drivers/media/video/tuner.c b/drivers/media/video/tuner.c --- a/drivers/media/video/tuner.c Tue May 18 23:38:08 2004 +++ b/drivers/media/video/tuner.c Tue May 18 23:38:08 2004 @@ -1067,8 +1067,8 @@ } this_adap = 0; -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, tuner_attach); #else switch (adap->id) { diff -Nru a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c --- a/drivers/media/video/tvaudio.c Tue May 18 23:38:06 2004 +++ b/drivers/media/video/tvaudio.c Tue May 18 23:38:06 2004 @@ -1497,8 +1497,8 @@ static int chip_probe(struct i2c_adapter *adap) { -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (adap->class & I2C_ADAP_CLASS_TV_ANALOG) +#ifdef I2C_CLASS_TV_ANALOG + if (adap->class & I2C_CLASS_TV_ANALOG) return i2c_probe(adap, &addr_data, chip_attach); #else switch (adap->id) { diff -Nru a/drivers/media/video/tvmixer.c b/drivers/media/video/tvmixer.c --- a/drivers/media/video/tvmixer.c Tue May 18 23:38:09 2004 +++ b/drivers/media/video/tvmixer.c Tue May 18 23:38:09 2004 @@ -263,8 +263,8 @@ struct video_audio va; int i,minor; -#ifdef I2C_ADAP_CLASS_TV_ANALOG - if (!(client->adapter->class & I2C_ADAP_CLASS_TV_ANALOG)) +#ifdef I2C_CLASS_TV_ANALOG + if (!(client->adapter->class & I2C_CLASS_TV_ANALOG)) return -1; #else /* TV card ??? */ diff -Nru a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c --- a/drivers/media/video/videodev.c Tue May 18 23:38:05 2004 +++ b/drivers/media/video/videodev.c Tue May 18 23:38:05 2004 @@ -397,12 +397,21 @@ static int __init videodev_init(void) { + int ret; + printk(KERN_INFO "Linux video capture interface: v1.00\n"); - if (register_chrdev(VIDEO_MAJOR,VIDEO_NAME, &video_fops)) { - printk("video_dev: unable to get major %d\n", VIDEO_MAJOR); + if (register_chrdev(VIDEO_MAJOR, VIDEO_NAME, &video_fops)) { + printk(KERN_WARNING "video_dev: unable to get major %d\n", VIDEO_MAJOR); return -EIO; } - class_register(&video_class); + + ret = class_register(&video_class); + if (ret < 0) { + unregister_chrdev(VIDEO_MAJOR, VIDEO_NAME); + printk(KERN_WARNING "video_dev: class_register failed\n"); + return -EIO; + } + return 0; } diff -Nru a/drivers/message/fusion/Kconfig b/drivers/message/fusion/Kconfig --- a/drivers/message/fusion/Kconfig Tue May 18 23:38:09 2004 +++ b/drivers/message/fusion/Kconfig Tue May 18 23:38:09 2004 @@ -3,7 +3,7 @@ config FUSION tristate "Fusion MPT (base + ScsiHost) drivers" - depends on PCI + depends on PCI && SCSI ---help--- LSI Logic Fusion(TM) Message Passing Technology (MPT) device support provides high performance SCSI host initiator, and LAN [1] interface diff -Nru a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c --- a/drivers/message/fusion/mptbase.c Tue May 18 23:38:06 2004 +++ b/drivers/message/fusion/mptbase.c Tue May 18 23:38:06 2004 @@ -223,6 +223,7 @@ //int mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag); static int ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHandlers); +static void mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf); static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info); static void mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info); @@ -263,6 +264,8 @@ */ static struct pci_device_id mptbase_pci_table[] = { + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC909, + PCI_ANY_ID, PCI_ANY_ID }, { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC929, PCI_ANY_ID, PCI_ANY_ID }, { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC919, @@ -389,6 +392,12 @@ else mpt_sp_log_info(ioc, log_info); } + if (ioc_stat & MPI_IOCSTATUS_MASK) { + if ((int)ioc->chip_type <= (int)FC929) + ; + else + mpt_sp_ioc_info(ioc, (u32)ioc_stat, mf); + } } else { /* * Process turbo (context) reply... @@ -1350,6 +1359,10 @@ } ioc->chip_type = FCUNK; + if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC909) { + ioc->chip_type = FC909; + ioc->prod_name = "LSIFC909"; + } if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) { ioc->chip_type = FC929; ioc->prod_name = "LSIFC929"; @@ -6086,9 +6099,153 @@ case 0x00080000: desc = "Outbound DMA Overrun"; break; + + case 0x00090000: + desc = "Task Management"; + break; + + case 0x000A0000: + desc = "Device Problem"; + break; + + case 0x000B0000: + desc = "Invalid Phase Change"; + break; + + case 0x000C0000: + desc = "Untagged Table Size"; + break; + } printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc); +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mpt_sp_ioc_info - IOC information returned from SCSI Parallel IOC. + * @ioc: Pointer to MPT_ADAPTER structure + * @ioc_status: U32 IOCStatus word from IOC + * @mf: Pointer to MPT request frame + * + * Refer to lsi/mpi.h. + */ +static void +mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf) +{ + u32 status = ioc_status & MPI_IOCSTATUS_MASK; + char *desc = ""; + + switch (status) { + case MPI_IOCSTATUS_INVALID_FUNCTION: /* 0x0001 */ + desc = "Invalid Function"; + break; + + case MPI_IOCSTATUS_BUSY: /* 0x0002 */ + desc = "Busy"; + break; + + case MPI_IOCSTATUS_INVALID_SGL: /* 0x0003 */ + desc = "Invalid SGL"; + break; + + case MPI_IOCSTATUS_INTERNAL_ERROR: /* 0x0004 */ + desc = "Internal Error"; + break; + + case MPI_IOCSTATUS_RESERVED: /* 0x0005 */ + desc = "Reserved"; + break; + + case MPI_IOCSTATUS_INSUFFICIENT_RESOURCES: /* 0x0006 */ + desc = "Insufficient Resources"; + break; + + case MPI_IOCSTATUS_INVALID_FIELD: /* 0x0007 */ + desc = "Invalid Field"; + break; + + case MPI_IOCSTATUS_INVALID_STATE: /* 0x0008 */ + desc = "Invalid State"; + break; + + case MPI_IOCSTATUS_CONFIG_INVALID_ACTION: /* 0x0020 */ + case MPI_IOCSTATUS_CONFIG_INVALID_TYPE: /* 0x0021 */ + case MPI_IOCSTATUS_CONFIG_INVALID_PAGE: /* 0x0022 */ + case MPI_IOCSTATUS_CONFIG_INVALID_DATA: /* 0x0023 */ + case MPI_IOCSTATUS_CONFIG_NO_DEFAULTS: /* 0x0024 */ + case MPI_IOCSTATUS_CONFIG_CANT_COMMIT: /* 0x0025 */ + /* No message for Config IOCStatus values */ + break; + + case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */ + /* No message for recovered error + desc = "SCSI Recovered Error"; + */ + break; + + case MPI_IOCSTATUS_SCSI_INVALID_BUS: /* 0x0041 */ + desc = "SCSI Invalid Bus"; + break; + + case MPI_IOCSTATUS_SCSI_INVALID_TARGETID: /* 0x0042 */ + desc = "SCSI Invalid TargetID"; + break; + + case MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE: /* 0x0043 */ + { + SCSIIORequest_t *pScsiReq = (SCSIIORequest_t *) mf; + U8 cdb = pScsiReq->CDB[0]; + if (cdb != 0x12) { /* Inquiry is issued for device scanning */ + desc = "SCSI Device Not There"; + } + break; + } + + case MPI_IOCSTATUS_SCSI_DATA_OVERRUN: /* 0x0044 */ + desc = "SCSI Data Overrun"; + break; + + case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */ + /* This error is checked in scsi_io_done(). Skip. + desc = "SCSI Data Underrun"; + */ + break; + + case MPI_IOCSTATUS_SCSI_IO_DATA_ERROR: /* 0x0046 */ + desc = "SCSI I/O Data Error"; + break; + + case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR: /* 0x0047 */ + desc = "SCSI Protocol Error"; + break; + + case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */ + desc = "SCSI Task Terminated"; + break; + + case MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH: /* 0x0049 */ + desc = "SCSI Residual Mismatch"; + break; + + case MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED: /* 0x004A */ + desc = "SCSI Task Management Failed"; + break; + + case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */ + desc = "SCSI IOC Terminated"; + break; + + case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */ + desc = "SCSI Ext Terminated"; + break; + + default: + desc = "Others"; + break; + } + if (desc != "") + printk(MYIOC_s_INFO_FMT "IOCStatus(0x%04x): %s\n", ioc->name, status, desc); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ diff -Nru a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h --- a/drivers/message/fusion/mptbase.h Tue May 18 23:38:05 2004 +++ b/drivers/message/fusion/mptbase.h Tue May 18 23:38:05 2004 @@ -81,8 +81,8 @@ #define COPYRIGHT "Copyright (c) 1999-2004 " MODULEAUTHOR #endif -#define MPT_LINUX_VERSION_COMMON "3.01.03" -#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.01.03" +#define MPT_LINUX_VERSION_COMMON "3.01.06" +#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.01.06" #define WHAT_MAGIC_STRING "@" "(" "#" ")" #define show_mptmod_ver(s,ver) \ diff -Nru a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c --- a/drivers/message/fusion/mptctl.c Tue May 18 23:38:05 2004 +++ b/drivers/message/fusion/mptctl.c Tue May 18 23:38:05 2004 @@ -1199,7 +1199,7 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size) { struct mpt_ioctl_iocinfo *uarg = (struct mpt_ioctl_iocinfo *) arg; - struct mpt_ioctl_iocinfo karg; + struct mpt_ioctl_iocinfo *karg; MPT_ADAPTER *ioc; struct pci_dev *pdev; struct Scsi_Host *sh; @@ -1219,34 +1219,46 @@ */ if (data_size == sizeof(struct mpt_ioctl_iocinfo_rev0)) cim_rev = 0; - else if (data_size == sizeof(struct mpt_ioctl_iocinfo)) + else if (data_size == sizeof(struct mpt_ioctl_iocinfo_rev1)) cim_rev = 1; + else if (data_size == sizeof(struct mpt_ioctl_iocinfo)) + cim_rev = 2; else if (data_size == (sizeof(struct mpt_ioctl_iocinfo_rev0)+12)) cim_rev = 0; /* obsolete */ else return -EFAULT; - - if (copy_from_user(&karg, uarg, data_size)) { + + karg = kmalloc(data_size, GFP_KERNEL); + if (karg == NULL) { + printk(KERN_ERR "%s::mpt_ioctl_iocinfo() @%d - no memory available!\n", + __FILE__, __LINE__); + return -ENOMEM; + } + + if (copy_from_user(karg, uarg, data_size)) { printk(KERN_ERR "%s@%d::mptctl_getiocinfo - " "Unable to read in mpt_ioctl_iocinfo struct @ %p\n", __FILE__, __LINE__, (void*)uarg); + kfree(karg); return -EFAULT; } - if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || + if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || (ioc == NULL)) { dctlprintk((KERN_ERR "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n", __FILE__, __LINE__, iocnum)); + kfree(karg); return -ENODEV; } /* Verify the data transfer size is correct. * Ignore the port setting. */ - if (karg.hdr.maxDataSize != data_size) { + if (karg->hdr.maxDataSize != data_size) { printk(KERN_ERR "%s@%d::mptctl_getiocinfo - " "Structure size mismatch. Command not completed.\n", __FILE__, __LINE__); + kfree(karg); return -EFAULT; } @@ -1254,29 +1266,37 @@ * program */ if ((int)ioc->chip_type <= (int) FC929) - karg.adapterType = MPT_IOCTL_INTERFACE_FC; + karg->adapterType = MPT_IOCTL_INTERFACE_FC; else - karg.adapterType = MPT_IOCTL_INTERFACE_SCSI; + karg->adapterType = MPT_IOCTL_INTERFACE_SCSI; - port = karg.hdr.port; + port = karg->hdr.port; - karg.port = port; + karg->port = port; pdev = (struct pci_dev *) ioc->pcidev; - karg.pciId = pdev->device; + karg->pciId = pdev->device; pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision); - karg.hwRev = revision; + karg->hwRev = revision; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - karg.subSystemDevice = pdev->subsystem_device; - karg.subSystemVendor = pdev->subsystem_vendor; + karg->subSystemDevice = pdev->subsystem_device; + karg->subSystemVendor = pdev->subsystem_vendor; #endif if (cim_rev == 1) { /* Get the PCI bus, device, and function numbers for the IOC */ - karg.pciInfo.u.bits.busNumber = pdev->bus->number; - karg.pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn ); - karg.pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn ); + karg->pciInfo.u.bits.busNumber = pdev->bus->number; + karg->pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn ); + karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn ); + } else if (cim_rev == 2) { + /* Get the PCI bus, device, function and segment ID numbers + for the IOC */ + karg->pciInfo.u.bits.busNumber = pdev->bus->number; + karg->pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn ); + karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn ); + karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn ); + karg->pciInfo.segmentID = pci_domain_nr(pdev->bus); } /* Get number of devices @@ -1297,31 +1317,33 @@ } } } - karg.numDevices = numDevices; + karg->numDevices = numDevices; /* Set the BIOS and FW Version */ - karg.FWVersion = ioc->facts.FWVersion.Word; - karg.BIOSVersion = ioc->biosVersion; + karg->FWVersion = ioc->facts.FWVersion.Word; + karg->BIOSVersion = ioc->biosVersion; /* Set the Version Strings. */ - strncpy (karg.driverVersion, MPT_LINUX_PACKAGE_NAME, MPT_IOCTL_VERSION_LENGTH); - karg.driverVersion[MPT_IOCTL_VERSION_LENGTH-1]='\0'; + strncpy (karg->driverVersion, MPT_LINUX_PACKAGE_NAME, MPT_IOCTL_VERSION_LENGTH); + karg->driverVersion[MPT_IOCTL_VERSION_LENGTH-1]='\0'; - karg.busChangeEvent = 0; - karg.hostId = ioc->pfacts[port].PortSCSIID; - karg.rsvd[0] = karg.rsvd[1] = 0; + karg->busChangeEvent = 0; + karg->hostId = ioc->pfacts[port].PortSCSIID; + karg->rsvd[0] = karg->rsvd[1] = 0; /* Copy the data from kernel memory to user memory */ - if (copy_to_user((char *)arg, &karg, data_size)) { + if (copy_to_user((char *)arg, karg, data_size)) { printk(KERN_ERR "%s@%d::mptctl_getiocinfo - " "Unable to write out mpt_ioctl_iocinfo struct @ %p\n", __FILE__, __LINE__, (void*)uarg); + kfree(karg); return -EFAULT; } + kfree(karg); return 0; } @@ -2909,6 +2931,8 @@ if (++where && err) goto out_fail; err = register_ioctl32_conversion(MPTIOCINFO1, compat_mptctl_ioctl); if (++where && err) goto out_fail; + err = register_ioctl32_conversion(MPTIOCINFO2, compat_mptctl_ioctl); + if (++where && err) goto out_fail; err = register_ioctl32_conversion(MPTTARGETINFO, compat_mptctl_ioctl); if (++where && err) goto out_fail; err = register_ioctl32_conversion(MPTTEST, compat_mptctl_ioctl); @@ -2968,6 +2992,7 @@ " (%d:err=%d)\n", where, err); unregister_ioctl32_conversion(MPTIOCINFO); unregister_ioctl32_conversion(MPTIOCINFO1); + unregister_ioctl32_conversion(MPTIOCINFO2); unregister_ioctl32_conversion(MPTTARGETINFO); unregister_ioctl32_conversion(MPTTEST); unregister_ioctl32_conversion(MPTEVENTQUERY); @@ -3018,6 +3043,7 @@ #ifdef CONFIG_COMPAT unregister_ioctl32_conversion(MPTIOCINFO); unregister_ioctl32_conversion(MPTIOCINFO1); + unregister_ioctl32_conversion(MPTIOCINFO2); unregister_ioctl32_conversion(MPTTARGETINFO); unregister_ioctl32_conversion(MPTTEST); unregister_ioctl32_conversion(MPTEVENTQUERY); diff -Nru a/drivers/message/fusion/mptctl.h b/drivers/message/fusion/mptctl.h --- a/drivers/message/fusion/mptctl.h Tue May 18 23:38:07 2004 +++ b/drivers/message/fusion/mptctl.h Tue May 18 23:38:07 2004 @@ -91,6 +91,7 @@ #define MPTIOCINFO _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo) #define MPTIOCINFO1 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev0) +#define MPTIOCINFO2 _IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev1) #define MPTTARGETINFO _IOWR(MPT_MAGIC_NUMBER,18,struct mpt_ioctl_targetinfo) #define MPTTEST _IOWR(MPT_MAGIC_NUMBER,19,struct mpt_ioctl_test) #define MPTEVENTQUERY _IOWR(MPT_MAGIC_NUMBER,21,struct mpt_ioctl_eventquery) @@ -165,6 +166,18 @@ } u; }; +struct mpt_ioctl_pci_info2 { + union { + struct { + unsigned int deviceNumber : 5; + unsigned int functionNumber : 3; + unsigned int busNumber : 24; + } bits; + unsigned int asUlong; + } u; + int segmentID; +}; + /* * Adapter Information Page * Read only. @@ -175,6 +188,24 @@ #define MPT_IOCTL_VERSION_LENGTH (32) struct mpt_ioctl_iocinfo { + mpt_ioctl_header hdr; + int adapterType; /* SCSI or FCP */ + int port; /* port number */ + int pciId; /* PCI Id. */ + int hwRev; /* hardware revision */ + int subSystemDevice; /* PCI subsystem Device ID */ + int subSystemVendor; /* PCI subsystem Vendor ID */ + int numDevices; /* number of devices */ + int FWVersion; /* FW Version (integer) */ + int BIOSVersion; /* BIOS Version (integer) */ + char driverVersion[MPT_IOCTL_VERSION_LENGTH]; /* Driver Version (string) */ + char busChangeEvent; + char hostId; + char rsvd[2]; + struct mpt_ioctl_pci_info2 pciInfo; /* Added Rev 2 */ +}; + +struct mpt_ioctl_iocinfo_rev1 { mpt_ioctl_header hdr; int adapterType; /* SCSI or FCP */ int port; /* port number */ diff -Nru a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c --- a/drivers/message/fusion/mptscsih.c Tue May 18 23:38:09 2004 +++ b/drivers/message/fusion/mptscsih.c Tue May 18 23:38:09 2004 @@ -805,6 +805,14 @@ if (scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID) copy_sense_data(sc, hd, mf, pScsiReply); + + /* + * Look for + dump FCP ResponseInfo[]! + */ + if (scsi_state & MPI_SCSI_STATE_RESPONSE_INFO_VALID) { + printk(KERN_NOTICE " FCP_ResponseInfo=%08xh\n", + le32_to_cpu(pScsiReply->ResponseInfo)); + } switch(status) { case MPI_IOCSTATUS_BUSY: /* 0x0002 */ @@ -932,10 +940,6 @@ break; case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR: /* 0x0047 */ - if (pScsiReply->SCSIState & MPI_SCSI_STATE_TERMINATED) { - /* Not real sure here either... */ - sc->result = DID_RESET << 16; - } else sc->result = DID_SOFT_ERROR << 16; break; @@ -1106,16 +1110,21 @@ * Do OS callback * Free driver resources (chain, msg buffers) */ - if (SCpnt->use_sg) { - pci_unmap_sg(hd->ioc->pcidev, (struct scatterlist *) SCpnt->request_buffer, - SCpnt->use_sg, scsi_to_pci_dma_dir(SCpnt->sc_data_direction)); - } else if (SCpnt->request_bufflen) { - scPrivate *my_priv; - - my_priv = (scPrivate *) &SCpnt->SCp; - pci_unmap_single(hd->ioc->pcidev, (dma_addr_t)(ulong)my_priv->p1, - SCpnt->request_bufflen, - scsi_to_pci_dma_dir(SCpnt->sc_data_direction)); + if (scsi_device_online(SCpnt->device)) { + if (SCpnt->use_sg) { + pci_unmap_sg(hd->ioc->pcidev, + (struct scatterlist *) SCpnt->request_buffer, + SCpnt->use_sg, + scsi_to_pci_dma_dir(SCpnt->sc_data_direction)); + } else if (SCpnt->request_bufflen) { + scPrivate *my_priv; + + my_priv = (scPrivate *) &SCpnt->SCp; + pci_unmap_single(hd->ioc->pcidev, + (dma_addr_t)(ulong)my_priv->p1, + SCpnt->request_bufflen, + scsi_to_pci_dma_dir(SCpnt->sc_data_direction)); + } } SCpnt->result = DID_RESET << 16; SCpnt->host_scribble = NULL; diff -Nru a/drivers/message/i2o/Kconfig b/drivers/message/i2o/Kconfig --- a/drivers/message/i2o/Kconfig Tue May 18 23:38:05 2004 +++ b/drivers/message/i2o/Kconfig Tue May 18 23:38:05 2004 @@ -3,7 +3,7 @@ config I2O tristate "I2O support" - depends on PCI && !64BIT + depends on PCI ---help--- The Intelligent Input/Output (I2O) architecture allows hardware drivers to be split into two parts: an operating system specific @@ -20,19 +20,20 @@ drivers and OSM's with the following questions. To compile this support as a module, choose M here: the - modules will be called i2o_core and i2o_config. + modules will be called i2o_core. If unsure, say N. -config I2O_PCI - tristate "I2O PCI support" +config I2O_CONFIG + tristate "I2O Configuration support" depends on PCI && I2O help - Say Y for support of PCI bus I2O interface adapters. Currently this - is the only variety supported, so you should say Y. + Say Y for support of the configuration interface for the I2O adapters. + If you have a RAID controller from Adaptec and you want to use the + raidutils to manage your RAID array, you have to say Y here. To compile this support as a module, choose M here: the - module will be called i2o_pci. + module will be called i2o_config. config I2O_BLOCK tristate "I2O Block OSM" diff -Nru a/drivers/message/i2o/Makefile b/drivers/message/i2o/Makefile --- a/drivers/message/i2o/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/message/i2o/Makefile Tue May 18 23:38:08 2004 @@ -5,7 +5,8 @@ # In the future, some of these should be built conditionally. # -obj-$(CONFIG_I2O) += i2o_core.o i2o_config.o +obj-$(CONFIG_I2O) += i2o_core.o +obj-$(CONFIG_I2O_CONFIG)+= i2o_config.o obj-$(CONFIG_I2O_BLOCK) += i2o_block.o obj-$(CONFIG_I2O_SCSI) += i2o_scsi.o obj-$(CONFIG_I2O_PROC) += i2o_proc.o diff -Nru a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c --- a/drivers/message/i2o/i2o_block.c Tue May 18 23:38:08 2004 +++ b/drivers/message/i2o/i2o_block.c Tue May 18 23:38:08 2004 @@ -83,7 +83,6 @@ #include #include #include -#include #include #include @@ -111,16 +110,12 @@ I2O_EVT_IND_BSA_SCSI_SMART ) -#define I2O_LOCK(unit) (i2ob_dev[(unit)].req_queue->queue_lock) - /* * Some of these can be made smaller later */ -static int i2ob_media_change_flag[MAX_I2OB]; -static u32 i2ob_max_sectors[MAX_I2OB<<4]; - static int i2ob_context; +static struct block_device_operations i2ob_fops; /* * I2O Block device descriptor @@ -143,6 +138,9 @@ int wcache; int power; int index; + int media_change_flag; + u32 max_sectors; + struct gendisk *gd; }; /* @@ -162,16 +160,16 @@ }; /* - * Per IOP requst queue information + * Per IOP request queue information * - * We have a separate requeust_queue_t per IOP so that a heavilly + * We have a separate request_queue_t per IOP so that a heavilly * loaded I2O block device on an IOP does not starve block devices * across all I2O controllers. * */ struct i2ob_iop_queue { - atomic_t queue_depth; + unsigned int queue_depth; struct i2ob_request request_queue[MAX_I2OB_DEPTH]; struct i2ob_request *i2ob_qhead; request_queue_t *req_queue; @@ -183,9 +181,8 @@ * Each I2O disk is one of these. */ -static struct i2ob_device i2ob_dev[MAX_I2OB<<4]; +static struct i2ob_device i2ob_dev[MAX_I2OB]; static int i2ob_dev_count = 0; -static struct gendisk *i2ob_disk[MAX_I2OB]; /* * Mutex and spin lock for event handling synchronization @@ -312,7 +309,6 @@ /* * Mask out partitions from now on */ - unit &= 0xF0; /* This can be optimised later - just want to be sure its right for starters */ @@ -402,7 +398,7 @@ } i2o_post_message(c,m); - atomic_inc(&i2ob_queues[c->unit]->queue_depth); + i2ob_queues[c->unit]->queue_depth ++; return 0; } @@ -453,8 +449,8 @@ struct i2ob_request *ireq = NULL; u8 st; u32 *m = (u32 *)msg; - u8 unit = (m[2]>>8)&0xF0; /* low 4 bits are partition */ - struct i2ob_device *dev = &i2ob_dev[(unit&0xF0)]; + u8 unit = m[2]>>8; + struct i2ob_device *dev = &i2ob_dev[unit]; /* * FAILed message @@ -475,10 +471,10 @@ ireq=&i2ob_queues[c->unit]->request_queue[m[3]]; ireq->req->errors++; - spin_lock_irqsave(I2O_LOCK(c->unit), flags); + spin_lock_irqsave(dev->req_queue->queue_lock, flags); i2ob_unhook_request(ireq, c->unit); i2ob_end_request(ireq->req); - spin_unlock_irqrestore(I2O_LOCK(c->unit), flags); + spin_unlock_irqrestore(dev->req_queue->queue_lock, flags); /* Now flush the message by making it a NOP */ m[0]&=0x00FFFFFF; @@ -509,10 +505,10 @@ ireq=&i2ob_queues[c->unit]->request_queue[m[3]]; ireq->req->errors++; printk(KERN_WARNING "I2O Block: Data transfer to deleted device!\n"); - spin_lock_irqsave(I2O_LOCK(c->unit), flags); + spin_lock_irqsave(dev->req_queue->queue_lock, flags); i2ob_unhook_request(ireq, c->unit); i2ob_end_request(ireq->req); - spin_unlock_irqrestore(I2O_LOCK(c->unit), flags); + spin_unlock_irqrestore(dev->req_queue->queue_lock, flags); return; } @@ -576,17 +572,17 @@ */ i2ob_free_sglist(dev, ireq); - spin_lock_irqsave(I2O_LOCK(c->unit), flags); + spin_lock_irqsave(dev->req_queue->queue_lock, flags); i2ob_unhook_request(ireq, c->unit); i2ob_end_request(ireq->req); - atomic_dec(&i2ob_queues[c->unit]->queue_depth); + i2ob_queues[c->unit]->queue_depth --; /* * We may be able to do more I/O */ - i2ob_request(dev->req_queue); - spin_unlock_irqrestore(I2O_LOCK(c->unit), flags); + i2ob_request(dev->gd->queue); + spin_unlock_irqrestore(dev->req_queue->queue_lock, flags); } /* @@ -598,8 +594,8 @@ { unsigned int evt; unsigned long flags; + struct i2ob_device *dev; int unit; - int i; //The only event that has data is the SCSI_SMART event. struct i2o_reply { u32 header[4]; @@ -638,6 +634,7 @@ unit = le32_to_cpu(evt_local->header[3]); evt = le32_to_cpu(evt_local->evt_indicator); + dev = &i2ob_dev[unit]; switch(evt) { /* @@ -648,10 +645,9 @@ */ case I2O_EVT_IND_BSA_VOLUME_LOAD: { - struct gendisk *p = i2ob_disk[unit>>4]; - i2ob_install_device(i2ob_dev[unit].i2odev->controller, - i2ob_dev[unit].i2odev, unit); - add_disk(p); + i2ob_install_device(dev->i2odev->controller, + dev->i2odev, unit); + add_disk(dev->gd); break; } @@ -663,17 +659,18 @@ */ case I2O_EVT_IND_BSA_VOLUME_UNLOAD: { - struct gendisk *p = i2ob_disk[unit>>4]; + struct gendisk *p = dev->gd; + blk_queue_max_sectors(dev->gd->queue, 0); del_gendisk(p); - for(i = unit; i <= unit+15; i++) - blk_queue_max_sectors(i2ob_dev[i].req_queue, 0); - i2ob_media_change_flag[unit] = 1; + put_disk(p); + dev->gd = NULL; + dev->media_change_flag = 1; break; } case I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ: printk(KERN_WARNING "%s: Attempt to eject locked media\n", - i2ob_dev[unit].i2odev->dev_name); + dev->i2odev->dev_name); break; /* @@ -691,12 +688,12 @@ { u64 size; - if(i2ob_query_device(&i2ob_dev[unit], 0x0004, 0, &size, 8) !=0 ) - i2ob_query_device(&i2ob_dev[unit], 0x0000, 4, &size, 8); + if(i2ob_query_device(dev, 0x0004, 0, &size, 8) !=0 ) + i2ob_query_device(dev, 0x0000, 4, &size, 8); - spin_lock_irqsave(I2O_LOCK(unit), flags); - set_capacity(i2ob_disk[unit>>4], size>>9); - spin_unlock_irqrestore(I2O_LOCK(unit), flags); + spin_lock_irqsave(dev->req_queue->queue_lock, flags); + set_capacity(dev->gd, size>>9); + spin_unlock_irqrestore(dev->req_queue->queue_lock, flags); break; } @@ -708,7 +705,7 @@ case I2O_EVT_IND_BSA_SCSI_SMART: { char buf[16]; - printk(KERN_INFO "I2O Block: %s received a SCSI SMART Event\n",i2ob_dev[unit].i2odev->dev_name); + printk(KERN_INFO "I2O Block: %s received a SCSI SMART Event\n",dev->i2odev->dev_name); evt_local->data[16]='\0'; sprintf(buf,"%s",&evt_local->data[0]); printk(KERN_INFO " Disk Serial#:%s\n",buf); @@ -735,12 +732,12 @@ * hit the fan big time. The card seems to recover but loses * the pending writes. Deeply ungood except for testing fsck */ - if(i2ob_dev[unit].i2odev->controller->promise) + if(dev->i2odev->controller->promise) panic("I2O controller firmware failed. Reboot and force a filesystem check.\n"); default: printk(KERN_INFO "%s: Received event 0x%X we didn't register for\n" KERN_INFO " Blame the I2O card manufacturer 8)\n", - i2ob_dev[unit].i2odev->dev_name, evt); + dev->i2odev->dev_name, evt); break; } }; @@ -765,14 +762,6 @@ u32 m; while ((req = elv_next_request(q)) != NULL) { - /* - * On an IRQ completion if there is an inactive - * request on the queue head it means it isnt yet - * ready to dispatch. - */ - if(req->rq_status == RQ_INACTIVE) - return; - dev = req->rq_disk->private_data; /* @@ -780,7 +769,7 @@ * generic IOP commit control. Certainly it's not right * its global! */ - if(atomic_read(&i2ob_queues[dev->unit]->queue_depth) >= dev->depth) + if(i2ob_queues[dev->unit]->queue_depth >= dev->depth) break; /* Get a message */ @@ -788,7 +777,7 @@ if(m==0xFFFFFFFF) { - if(atomic_read(&i2ob_queues[dev->unit]->queue_depth) == 0) + if(i2ob_queues[dev->unit]->queue_depth == 0) printk(KERN_ERR "i2o_block: message queue and request queue empty!!\n"); break; } @@ -797,13 +786,12 @@ */ req->errors = 0; blkdev_dequeue_request(req); - req->waiting = NULL; ireq = i2ob_queues[dev->unit]->i2ob_qhead; i2ob_queues[dev->unit]->i2ob_qhead = ireq->next; ireq->req = req; - i2ob_send(m, dev, ireq, (dev->unit&0xF0)); + i2ob_send(m, dev, ireq, dev->index); } } @@ -1065,7 +1053,10 @@ u16 power; u32 flags, status; struct i2ob_device *dev=&i2ob_dev[unit]; - int i; + struct gendisk *disk; + request_queue_t *q; + int segments; + /* * For logging purposes... @@ -1079,21 +1070,35 @@ * before any I/O can be performed. If it fails, this * device is useless. */ - if(!i2ob_queues[unit]) { - if(i2ob_init_iop(unit)) + if(!i2ob_queues[c->unit]) { + if(i2ob_init_iop(c->unit)) return 1; } + q = i2ob_queues[c->unit]->req_queue; + /* * This will save one level of lookup/indirection in critical * code so that we can directly get the queue ptr from the * device instead of having to go the IOP data structure. */ - dev->req_queue = i2ob_queues[unit]->req_queue; + dev->req_queue = q; + /* + * Allocate a gendisk structure and initialize it + */ + disk = alloc_disk(16); + if (!disk) + return 1; + + dev->gd = disk; /* initialize gendik structure */ - i2ob_disk[unit>>4]->private_data = dev; - i2ob_disk[unit>>4]->queue = dev->req_queue; + disk->major = MAJOR_NR; + disk->first_minor = unit<<4; + disk->queue = q; + disk->fops = &i2ob_fops; + sprintf(disk->disk_name, "i2o/hd%c", 'a' + unit); + disk->private_data = dev; /* * Ask for the current media data. If that isn't supported @@ -1110,53 +1115,49 @@ power = 0; i2ob_query_device(dev, 0x0000, 5, &flags, 4); i2ob_query_device(dev, 0x0000, 6, &status, 4); - set_capacity(i2ob_disk[unit>>4], size>>9); + set_capacity(disk, size>>9); /* * Max number of Scatter-Gather Elements */ - i2ob_dev[unit].power = power; /* Save power state in device proper */ - i2ob_dev[unit].flags = flags; + dev->power = power; /* Save power state in device proper */ + dev->flags = flags; - for(i=unit;i<=unit+15;i++) - { - request_queue_t *q = i2ob_dev[unit].req_queue; - int segments = (d->controller->status_block->inbound_frame_size - 7) / 2; + segments = (d->controller->status_block->inbound_frame_size - 7) / 2; + + if(segments > 16) + segments = 16; - if(segments > 16) - segments = 16; - - i2ob_dev[i].power = power; /* Save power state */ - i2ob_dev[unit].flags = flags; /* Keep the type info */ + dev->power = power; /* Save power state */ + dev->flags = flags; /* Keep the type info */ - blk_queue_max_sectors(q, 96); /* 256 might be nicer but many controllers + blk_queue_max_sectors(q, 96); /* 256 might be nicer but many controllers explode on 65536 or higher */ - blk_queue_max_phys_segments(q, segments); - blk_queue_max_hw_segments(q, segments); + blk_queue_max_phys_segments(q, segments); + blk_queue_max_hw_segments(q, segments); - i2ob_dev[i].rcache = CACHE_SMARTFETCH; - i2ob_dev[i].wcache = CACHE_WRITETHROUGH; + dev->rcache = CACHE_SMARTFETCH; + dev->wcache = CACHE_WRITETHROUGH; - if(d->controller->battery == 0) - i2ob_dev[i].wcache = CACHE_WRITETHROUGH; + if(d->controller->battery == 0) + dev->wcache = CACHE_WRITETHROUGH; - if(d->controller->promise) - i2ob_dev[i].wcache = CACHE_WRITETHROUGH; + if(d->controller->promise) + dev->wcache = CACHE_WRITETHROUGH; - if(d->controller->short_req) - { - blk_queue_max_sectors(q, 8); - blk_queue_max_phys_segments(q, 8); - blk_queue_max_hw_segments(q, 8); - } + if(d->controller->short_req) + { + blk_queue_max_sectors(q, 8); + blk_queue_max_phys_segments(q, 8); + blk_queue_max_hw_segments(q, 8); } - strcpy(d->dev_name, i2ob_disk[unit>>4]->disk_name); - strcpy(i2ob_disk[unit>>4]->devfs_name, i2ob_disk[unit>>4]->disk_name); + strcpy(d->dev_name, disk->disk_name); + strcpy(disk->devfs_name, disk->disk_name); printk(KERN_INFO "%s: Max segments %d, queue depth %d, byte limit %d.\n", - d->dev_name, i2ob_dev[unit].max_segments, i2ob_dev[unit].depth, i2ob_max_sectors[unit]<<9); + d->dev_name, dev->max_segments, dev->depth, dev->max_sectors<<9); i2ob_query_device(dev, 0x0000, 0, &type, 1); @@ -1197,7 +1198,7 @@ } printk(".\n"); printk(KERN_INFO "%s: Maximum sectors/read set to %d.\n", - d->dev_name, i2ob_max_sectors[unit]); + d->dev_name, dev->max_sectors); /* * Register for the events we're interested in and that the @@ -1233,7 +1234,7 @@ /* Queue is MAX_I2OB + 1... */ i2ob_queues[unit]->request_queue[i].next = NULL; i2ob_queues[unit]->i2ob_qhead = &i2ob_queues[unit]->request_queue[0]; - atomic_set(&i2ob_queues[unit]->queue_depth, 0); + i2ob_queues[unit]->queue_depth = 0; i2ob_queues[unit]->lock = SPIN_LOCK_UNLOCKED; i2ob_queues[unit]->req_queue = blk_init_queue(i2ob_request, &i2ob_queues[unit]->lock); @@ -1257,7 +1258,6 @@ struct i2o_device *d, *b=NULL; struct i2o_controller *c; - struct i2ob_device *dev; for(i=0; i< MAX_I2O_CONTROLLERS; i++) { @@ -1313,44 +1313,12 @@ continue; /*Already claimed on pass 1 */ } - if(i2o_claim_device(d, &i2o_block_handler)) - { - printk(KERN_WARNING "i2o_block: Controller %d, TID %d\n", c->unit, - d->lct_data.tid); - printk(KERN_WARNING "\t%sevice refused claim! Skipping installation\n", bios?"Boot d":"D"); - continue; - } - - i2o_release_device(d, &i2o_block_handler); - - if(scan_uniti2odev = d; - dev->controller = c; - dev->unit = c->unit; - dev->tid = d->lct_data.tid; - - if(i2ob_install_device(c,d,scan_unit)) - printk(KERN_WARNING "Could not install I2O block device\n"); - else - { - add_disk(i2ob_disk[scan_unit>>4]); - scan_unit+=16; - i2ob_dev_count++; - - /* We want to know when device goes away */ - i2o_device_notify_on(d, &i2o_block_handler); - } - } + if(scan_unit>4); + printk(KERN_WARNING "i2o_block: too many device, registering only %d.\n", scan_unit); } } i2o_unlock_controller(c); @@ -1399,12 +1367,12 @@ printk(KERN_INFO " Controller %d Tid %d\n",c->unit, d->lct_data.tid); /* Check for available space */ - if(i2ob_dev_count>=MAX_I2OB<<4) + if(i2ob_dev_count>=MAX_I2OB) { printk(KERN_ERR "i2o_block: No more devices allowed!\n"); return; } - for(unit = 0; unit < (MAX_I2OB<<4); unit += 16) + for(unit = 0; unit < MAX_I2OB; unit ++) { if(!i2ob_dev[unit].i2odev) break; @@ -1420,18 +1388,20 @@ dev->i2odev = d; dev->controller = c; dev->tid = d->lct_data.tid; + dev->unit = c->unit; - if(i2ob_install_device(c,d,unit)) + if(i2ob_install_device(c,d,unit)) { + i2o_release_device(d, &i2o_block_handler); printk(KERN_ERR "i2o_block: Could not install new device\n"); + } else { - add_disk(i2ob_disk[unit>>4]); + i2o_release_device(d, &i2o_block_handler); + add_disk(dev->gd); i2ob_dev_count++; i2o_device_notify_on(d, &i2o_block_handler); } - i2o_release_device(d, &i2o_block_handler); - return; } @@ -1443,64 +1413,58 @@ void i2ob_del_device(struct i2o_controller *c, struct i2o_device *d) { int unit = 0; - int i = 0; unsigned long flags; + struct i2ob_device *dev; - spin_lock_irqsave(I2O_LOCK(c->unit), flags); - - /* - * Need to do this...we somtimes get two events from the IRTOS - * in a row and that causes lots of problems. - */ - i2o_device_notify_off(d, &i2o_block_handler); - - printk(KERN_INFO "I2O Block Device Deleted\n"); - - for(unit = 0; unit < MAX_I2OB<<4; unit += 16) + for(unit = 0; unit < MAX_I2OB; unit ++) { - if(i2ob_dev[unit].i2odev == d) + dev = &i2ob_dev[unit]; + if(dev->i2odev == d) { printk(KERN_INFO " /dev/%s: Controller %d Tid %d\n", d->dev_name, c->unit, d->lct_data.tid); break; } } - if(unit >= MAX_I2OB<<4) + + printk(KERN_INFO "I2O Block Device Deleted\n"); + + if(unit >= MAX_I2OB) { printk(KERN_ERR "i2ob_del_device called, but not in dev table!\n"); - spin_unlock_irqrestore(I2O_LOCK(c->unit), flags); return; } + spin_lock_irqsave(dev->req_queue->queue_lock, flags); + + /* + * Need to do this...we somtimes get two events from the IRTOS + * in a row and that causes lots of problems. + */ + i2o_device_notify_off(d, &i2o_block_handler); + /* * This will force errors when i2ob_get_queue() is called * by the kenrel. */ - del_gendisk(i2ob_disk[unit>>4]); - i2ob_dev[unit].req_queue = NULL; - for(i = unit; i <= unit+15; i++) - { - i2ob_dev[i].i2odev = NULL; - blk_queue_max_sectors(i2ob_dev[i].req_queue, 0); - } - spin_unlock_irqrestore(I2O_LOCK(c->unit), flags); - - /* - * Decrease usage count for module - */ - - while(i2ob_dev[unit].refcnt--) - MOD_DEC_USE_COUNT; - - i2ob_dev[unit].refcnt = 0; - - i2ob_dev[i].tid = 0; + if(dev->gd) { + struct gendisk *gd = dev->gd; + gd->queue = NULL; + del_gendisk(gd); + put_disk(gd); + dev->gd = NULL; + } + spin_unlock_irqrestore(dev->req_queue->queue_lock, flags); + dev->req_queue = NULL; + dev->i2odev = NULL; + dev->refcnt = 0; + dev->tid = 0; /* * Do we need this? * The media didn't really change...the device is just gone */ - i2ob_media_change_flag[unit] = 1; + dev->media_change_flag = 1; i2ob_dev_count--; } @@ -1511,10 +1475,9 @@ static int i2ob_media_change(struct gendisk *disk) { struct i2ob_device *p = disk->private_data; - int i = p->index; - if(i2ob_media_change_flag[i]) + if(p->media_change_flag) { - i2ob_media_change_flag[i]=0; + p->media_change_flag=0; return 1; } return 0; @@ -1523,7 +1486,7 @@ static int i2ob_revalidate(struct gendisk *disk) { struct i2ob_device *p = disk->private_data; - return i2ob_install_device(p->controller, p->i2odev, p->index<<4); + return i2ob_install_device(p->controller, p->i2odev, p->index); } /* @@ -1536,7 +1499,7 @@ for(i=0;irefcnt!=0) { @@ -1598,51 +1561,36 @@ if (register_blkdev(MAJOR_NR, "i2o_block")) return -EIO; - for (i = 0; i < MAX_I2OB; i++) { - struct gendisk *disk = alloc_disk(16); - if (!disk) - goto oom; - i2ob_dev[i<<4].index = i; - disk->queue = i2ob_dev[i<<4].req_queue; - i2ob_disk[i] = disk; - } #ifdef MODULE printk(KERN_INFO "i2o_block: registered device at major %d\n", MAJOR_NR); #endif /* + * Set up the queue + */ + for(i = 0; i < MAX_I2O_CONTROLLERS; i++) + i2ob_queues[i] = NULL; + + /* * Now fill in the boiler plate */ - for (i = 0; i < MAX_I2OB << 4; i++) { - i2ob_dev[i].refcnt = 0; - i2ob_dev[i].flags = 0; - i2ob_dev[i].controller = NULL; - i2ob_dev[i].i2odev = NULL; - i2ob_dev[i].tid = 0; - i2ob_dev[i].head = NULL; - i2ob_dev[i].tail = NULL; - i2ob_dev[i].depth = MAX_I2OB_DEPTH; - i2ob_max_sectors[i] = 2; - } - for (i = 0; i < MAX_I2OB; i++) { - struct gendisk *disk = i2ob_disk[i]; - disk->major = MAJOR_NR; - disk->first_minor = i<<4; - disk->fops = &i2ob_fops; - sprintf(disk->disk_name, "i2o/hd%c", 'a' + i); + struct i2ob_device *dev = &i2ob_dev[i]; + dev->index = i; + dev->refcnt = 0; + dev->flags = 0; + dev->controller = NULL; + dev->i2odev = NULL; + dev->tid = 0; + dev->head = NULL; + dev->tail = NULL; + dev->depth = MAX_I2OB_DEPTH; + dev->max_sectors = 2; + dev->gd = NULL; } /* - * Set up the queue - */ - for(i = 0; i < MAX_I2O_CONTROLLERS; i++) - { - i2ob_queues[i] = NULL; - } - - /* * Register the OSM handler as we will need this to probe for * drives, geometry and other goodies. */ @@ -1671,9 +1619,6 @@ return 0; -oom: - while (i--) - put_disk(i2ob_disk[i]); unregister_blkdev(MAJOR_NR, "i2o_block"); return -ENOMEM; } @@ -1701,11 +1646,8 @@ if(i2ob_dev_count) { struct i2o_device *d; for(i = 0; i < MAX_I2OB; i++) - if((d=i2ob_dev[i<<4].i2odev)) { - i2o_device_notify_off(d, &i2o_block_handler); - i2o_event_register(d->controller, d->lct_data.tid, - i2ob_context, i<<4, 0); - } + if((d = i2ob_dev[i].i2odev)) + i2ob_del_device(d->controller, d); } /* @@ -1725,15 +1667,21 @@ */ i2o_remove_handler(&i2o_block_handler); - - for (i = 0; i < MAX_I2OB; i++) - put_disk(i2ob_disk[i]); /* * Return the block device */ if (unregister_blkdev(MAJOR_NR, "i2o_block") != 0) printk("i2o_block: cleanup_module failed\n"); + + /* + * release request queue + */ + for (i = 0; i < MAX_I2O_CONTROLLERS; i ++) + if(i2ob_queues[i]) { + blk_cleanup_queue(i2ob_queues[i]->req_queue); + kfree(i2ob_queues[i]); + } } MODULE_AUTHOR("Red Hat"); diff -Nru a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c --- a/drivers/message/i2o/i2o_config.c Tue May 18 23:38:09 2004 +++ b/drivers/message/i2o/i2o_config.c Tue May 18 23:38:09 2004 @@ -5,21 +5,24 @@ * * Written by Alan Cox, Building Number Three Ltd * - * Modified 04/20/1999 by Deepak Saxena - * - Added basic ioctl() support - * Modified 06/07/1999 by Deepak Saxena - * - Added software download ioctl (still testing) - * Modified 09/10/1999 by Auvo Häkkinen - * - Changes to i2o_cfg_reply(), ioctl_parms() - * - Added ioct_validate() - * Modified 09/30/1999 by Taneli Vähäkangas - * - Fixed ioctl_swdl() - * Modified 10/04/1999 by Taneli Vähäkangas - * - Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() - * Modified 11/18/1999 by Deepak Saxena - * - Added event managmenet support - * - * 2.4 rewrite ported to 2.5 - Alan Cox + * Fixes/additions: + * Deepak Saxena (04/20/1999): + * Added basic ioctl() support + * Deepak Saxena (06/07/1999): + * Added software download ioctl (still testing) + * Auvo Häkkinen (09/10/1999): + * Changes to i2o_cfg_reply(), ioctl_parms() + * Added ioct_validate() + * Taneli Vähäkangas (09/30/1999): + * Fixed ioctl_swdl() + * Taneli Vähäkangas (10/04/1999): + * Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() + * Deepak Saxena (11/18/1999): + * Added event managmenet support + * Alan Cox : + * 2.4 rewrite ported to 2.5 + * Markus Lidel : + * Added pass-thru support for Adaptec's raidutils * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -49,6 +52,11 @@ #define MODINC(x,y) ((x) = ((x) + 1) % (y)) +struct sg_simple_element { + u32 flag_count; + u32 addr_bus; +}; + struct i2o_cfg_info { struct file* fp; @@ -75,6 +83,7 @@ static int ioctl_validate(unsigned long); static int ioctl_evt_reg(unsigned long, struct file *); static int ioctl_evt_get(unsigned long, struct file *); +static int ioctl_passthru(unsigned long); static int cfg_fasync(int, struct file*, int); /* @@ -256,6 +265,10 @@ ret = ioctl_evt_get(arg, fp); break; + case I2OPASSTHRU: + ret = ioctl_passthru(arg); + break; + default: ret = -EINVAL; } @@ -825,6 +838,165 @@ if(copy_to_user(uget, &kget, sizeof(struct i2o_evt_get))) return -EFAULT; return 0; +} + +static int ioctl_passthru(unsigned long arg) +{ + struct i2o_cmd_passthru *cmd = (struct i2o_cmd_passthru *) arg; + struct i2o_controller *c; + u32 msg[MSG_FRAME_SIZE]; + u32 *user_msg = (u32*)cmd->msg; + u32 *reply = NULL; + u32 *user_reply = NULL; + u32 size = 0; + u32 reply_size = 0; + u32 rcode = 0; + ulong sg_list[SG_TABLESIZE]; + u32 sg_offset = 0; + u32 sg_count = 0; + int sg_index = 0; + u32 i = 0; + ulong p = 0; + + c = i2o_find_controller(cmd->iop); + if(!c) + return -ENXIO; + + memset(&msg, 0, MSG_FRAME_SIZE*4); + if(get_user(size, &user_msg[0])) + return -EFAULT; + size = size>>16; + + user_reply = &user_msg[size]; + if(size > MSG_FRAME_SIZE) + return -EFAULT; + size *= 4; // Convert to bytes + + /* Copy in the user's I2O command */ + if(copy_from_user((void*)msg, (void*)user_msg, size)) + return -EFAULT; + if(get_user(reply_size, &user_reply[0]) < 0) + return -EFAULT; + + reply_size = reply_size>>16; + reply = kmalloc(REPLY_FRAME_SIZE*4, GFP_KERNEL); + if(!reply) { + printk(KERN_WARNING"%s: Could not allocate reply buffer\n",c->name); + return -ENOMEM; + } + memset(reply, 0, REPLY_FRAME_SIZE*4); + sg_offset = (msg[0]>>4)&0x0f; + msg[2] = (u32)i2o_cfg_context; + msg[3] = (u32)reply; + + memset(sg_list,0, sizeof(sg_list[0])*SG_TABLESIZE); + if(sg_offset) { + struct sg_simple_element *sg; + + if(sg_offset * 4 >= size) { + rcode = -EFAULT; + goto cleanup; + } + // TODO 64bit fix + sg = (struct sg_simple_element*) (msg+sg_offset); + sg_count = (size - sg_offset*4) / sizeof(struct sg_simple_element); + if (sg_count > SG_TABLESIZE) { + printk(KERN_DEBUG"%s:IOCTL SG List too large (%u)\n", c->name,sg_count); + kfree (reply); + return -EINVAL; + } + + for(i = 0; i < sg_count; i++) { + int sg_size; + + if (!(sg[i].flag_count & 0x10000000 /*I2O_SGL_FLAGS_SIMPLE_ADDRESS_ELEMENT*/)) { + printk(KERN_DEBUG"%s:Bad SG element %d - not simple (%x)\n",c->name,i, sg[i].flag_count); + rcode = -EINVAL; + goto cleanup; + } + sg_size = sg[i].flag_count & 0xffffff; + /* Allocate memory for the transfer */ + p = (ulong)kmalloc(sg_size, GFP_KERNEL); + if (!p) { + printk(KERN_DEBUG"%s: Could not allocate SG buffer - size = %d buffer number %d of %d\n", c->name,sg_size,i,sg_count); + rcode = -ENOMEM; + goto cleanup; + } + sg_list[sg_index++] = p; // sglist indexed with input frame, not our internal frame. + /* Copy in the user's SG buffer if necessary */ + if(sg[i].flag_count & 0x04000000 /*I2O_SGL_FLAGS_DIR*/) { + // TODO 64bit fix + if (copy_from_user((void*)p,(void*)sg[i].addr_bus, sg_size)) { + printk(KERN_DEBUG"%s: Could not copy SG buf %d FROM user\n",c->name,i); + rcode = -EFAULT; + goto cleanup; + } + } + //TODO 64bit fix + sg[i].addr_bus = (u32)virt_to_bus((void*)p); + } + } + + rcode = i2o_post_wait(c, msg, size, 60); + if(rcode) + goto cleanup; + + if(sg_offset) { + /* Copy back the Scatter Gather buffers back to user space */ + u32 j; + // TODO 64bit fix + struct sg_simple_element* sg; + int sg_size; + + // re-acquire the original message to handle correctly the sg copy operation + memset(&msg, 0, MSG_FRAME_SIZE*4); + // get user msg size in u32s + if (get_user(size, &user_msg[0])) { + rcode = -EFAULT; + goto cleanup; + } + size = size>>16; + size *= 4; + /* Copy in the user's I2O command */ + if (copy_from_user ((void*)msg, (void*)user_msg, size)) { + rcode = -EFAULT; + goto cleanup; + } + sg_count = (size - sg_offset*4) / sizeof(struct sg_simple_element); + + // TODO 64bit fix + sg = (struct sg_simple_element*)(msg + sg_offset); + for (j = 0; j < sg_count; j++) { + /* Copy out the SG list to user's buffer if necessary */ + if (!(sg[j].flag_count & 0x4000000 /*I2O_SGL_FLAGS_DIR*/)) { + sg_size = sg[j].flag_count & 0xffffff; + // TODO 64bit fix + if (copy_to_user((void*)sg[j].addr_bus,(void*)sg_list[j], sg_size)) { + printk(KERN_WARNING"%s: Could not copy %lx TO user %x\n",c->name, sg_list[j], sg[j].addr_bus); + rcode = -EFAULT; + goto cleanup; + } + } + } + } + + /* Copy back the reply to user space */ + if (reply_size) { + // we wrote our own values for context - now restore the user supplied ones + if(copy_from_user(reply+2, user_msg+2, sizeof(u32)*2)) { + printk(KERN_WARNING"%s: Could not copy message context FROM user\n",c->name); + rcode = -EFAULT; + } + if(copy_to_user(user_reply, reply, reply_size)) { + printk(KERN_WARNING"%s: Could not copy reply TO user\n",c->name); + rcode = -EFAULT; + } + } + +cleanup: + kfree(reply); + i2o_unlock_controller(c); + return rcode; } static int cfg_open(struct inode *inode, struct file *file) diff -Nru a/drivers/message/i2o/i2o_core.c b/drivers/message/i2o/i2o_core.c --- a/drivers/message/i2o/i2o_core.c Tue May 18 23:38:08 2004 +++ b/drivers/message/i2o/i2o_core.c Tue May 18 23:38:08 2004 @@ -213,6 +213,135 @@ static int verbose; +#if BITS_PER_LONG == 64 +/** + * i2o_context_list_add - append an ptr to the context list and return a + * matching context id. + * @ptr: pointer to add to the context list + * @c: controller to which the context list belong + * returns context id, which could be used in the transaction context + * field. + * + * Because the context field in I2O is only 32-bit large, on 64-bit the + * pointer is to large to fit in the context field. The i2o_context_list + * functiones map pointers to context fields. + */ +u32 i2o_context_list_add(void *ptr, struct i2o_controller *c) { + u32 context = 1; + struct i2o_context_list_element **entry = &c->context_list; + struct i2o_context_list_element *element; + unsigned long flags; + + spin_lock_irqsave(&c->context_list_lock, flags); + while(*entry && ((*entry)->flags & I2O_CONTEXT_LIST_USED)) { + if((*entry)->context >= context) + context = (*entry)->context + 1; + entry = &((*entry)->next); + } + + if(!*entry) { + if(unlikely(!context)) { + spin_unlock_irqrestore(&c->context_list_lock, flags); + printk(KERN_EMERG "i2o_core: context list overflow\n"); + return 0; + } + + element = kmalloc(sizeof(struct i2o_context_list_element), GFP_KERNEL); + if(!element) { + printk(KERN_EMERG "i2o_core: could not allocate memory for context list element\n"); + return 0; + } + element->context = context; + element->next = NULL; + *entry = element; + } else + element = *entry; + + element->ptr = ptr; + element->flags = I2O_CONTEXT_LIST_USED; + + spin_unlock_irqrestore(&c->context_list_lock, flags); + dprintk(KERN_DEBUG "i2o_core: add context to list %p -> %d\n", ptr, context); + return context; +} + +/** + * i2o_context_list_remove - remove a ptr from the context list and return + * the matching context id. + * @ptr: pointer to be removed from the context list + * @c: controller to which the context list belong + * returns context id, which could be used in the transaction context + * field. + */ +u32 i2o_context_list_remove(void *ptr, struct i2o_controller *c) { + struct i2o_context_list_element **entry = &c->context_list; + struct i2o_context_list_element *element; + u32 context; + unsigned long flags; + + spin_lock_irqsave(&c->context_list_lock, flags); + while(*entry && ((*entry)->ptr != ptr)) + entry = &((*entry)->next); + + if(unlikely(!*entry)) { + spin_unlock_irqrestore(&c->context_list_lock, flags); + printk(KERN_WARNING "i2o_core: could not remove nonexistent ptr %p\n", ptr); + return 0; + } + + element = *entry; + + context = element->context; + element->ptr = NULL; + element->flags |= I2O_CONTEXT_LIST_DELETED; + + spin_unlock_irqrestore(&c->context_list_lock, flags); + dprintk(KERN_DEBUG "i2o_core: markt as deleted in context list %p -> %d\n", ptr, context); + return context; +} + +/** + * i2o_context_list_get - get a ptr from the context list and remove it + * from the list. + * @context: context id to which the pointer belong + * @c: controller to which the context list belong + * returns pointer to the matching context id + */ +void *i2o_context_list_get(u32 context, struct i2o_controller *c) { + struct i2o_context_list_element **entry = &c->context_list; + struct i2o_context_list_element *element; + void *ptr; + int count = 0; + unsigned long flags; + + spin_lock_irqsave(&c->context_list_lock, flags); + while(*entry && ((*entry)->context != context)) { + entry = &((*entry)->next); + count ++; + } + + if(unlikely(!*entry)) { + spin_unlock_irqrestore(&c->context_list_lock, flags); + printk(KERN_WARNING "i2o_core: context id %d not found\n", context); + return NULL; + } + + element = *entry; + ptr = element->ptr; + if(count >= I2O_CONTEXT_LIST_MIN_LENGTH) { + *entry = (*entry)->next; + kfree(element); + } else { + element->ptr = NULL; + element->flags &= !I2O_CONTEXT_LIST_USED; + } + + spin_unlock_irqrestore(&c->context_list_lock, flags); + dprintk(KERN_DEBUG "i2o_core: get ptr from context list %d -> %p\n", context, ptr); + return ptr; +} +#endif + /* * I2O Core reply handler */ @@ -3551,6 +3680,10 @@ c->short_req = 0; c->pdev = dev; +#if BITS_PER_LONG == 64 + c->context_list_lock = SPIN_LOCK_UNLOCKED; +#endif + c->irq_mask = mem+0x34; c->post_port = mem+0x40; c->reply_port = mem+0x44; @@ -3788,3 +3921,6 @@ EXPORT_SYMBOL(i2o_report_status); EXPORT_SYMBOL(i2o_dump_message); EXPORT_SYMBOL(i2o_get_class_name); +EXPORT_SYMBOL(i2o_context_list_add); +EXPORT_SYMBOL(i2o_context_list_get); +EXPORT_SYMBOL(i2o_context_list_remove); diff -Nru a/drivers/message/i2o/i2o_proc.c b/drivers/message/i2o/i2o_proc.c --- a/drivers/message/i2o/i2o_proc.c Tue May 18 23:38:08 2004 +++ b/drivers/message/i2o/i2o_proc.c Tue May 18 23:38:08 2004 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -64,13 +65,14 @@ mode_t mode; /* mode */ read_proc_t *read_proc; /* read func */ write_proc_t *write_proc; /* write func */ + struct file_operations *fops_proc; /* file operations func */ } i2o_proc_entry; // #define DRIVERDEBUG -static int i2o_proc_read_lct(char *, char **, off_t, int, int *, void *); -static int i2o_proc_read_hrt(char *, char **, off_t, int, int *, void *); -static int i2o_proc_read_status(char *, char **, off_t, int, int *, void *); +static int i2o_seq_show_lct(struct seq_file *, void *); +static int i2o_seq_show_hrt(struct seq_file *, void *); +static int i2o_seq_show_status(struct seq_file *, void *); static int i2o_proc_read_hw(char *, char **, off_t, int, int *, void *); static int i2o_proc_read_ddm_table(char *, char **, off_t, int, int *, void *); @@ -151,20 +153,56 @@ 0xffffffff // All classes }; +static int i2o_seq_open_hrt(struct inode *inode, struct file *file) +{ + return single_open(file, i2o_seq_show_hrt, PDE(inode)->data); +}; + +struct file_operations i2o_seq_fops_hrt = { + .open = i2o_seq_open_hrt, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; + +static int i2o_seq_open_lct(struct inode *inode, struct file *file) +{ + return single_open(file, i2o_seq_show_lct, PDE(inode)->data); +}; + +struct file_operations i2o_seq_fops_lct = { + .open = i2o_seq_open_lct, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; + +static int i2o_seq_open_status(struct inode *inode, struct file *file) +{ + return single_open(file, i2o_seq_show_status, PDE(inode)->data); +}; + +struct file_operations i2o_seq_fops_status = { + .open = i2o_seq_open_status, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; + /* * IOP specific entries...write field just in case someone * ever wants one. */ static i2o_proc_entry generic_iop_entries[] = { - {"hrt", S_IFREG|S_IRUGO, i2o_proc_read_hrt, NULL}, - {"lct", S_IFREG|S_IRUGO, i2o_proc_read_lct, NULL}, - {"status", S_IFREG|S_IRUGO, i2o_proc_read_status, NULL}, - {"hw", S_IFREG|S_IRUGO, i2o_proc_read_hw, NULL}, - {"ddm_table", S_IFREG|S_IRUGO, i2o_proc_read_ddm_table, NULL}, - {"driver_store", S_IFREG|S_IRUGO, i2o_proc_read_driver_store, NULL}, - {"drivers_stored", S_IFREG|S_IRUGO, i2o_proc_read_drivers_stored, NULL}, - {NULL, 0, NULL, NULL} + {"hrt", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_hrt}, + {"lct", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_lct}, + {"status", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_status}, + {"hw", S_IFREG|S_IRUGO, i2o_proc_read_hw, NULL, NULL}, + {"ddm_table", S_IFREG|S_IRUGO, i2o_proc_read_ddm_table, NULL, NULL}, + {"driver_store", S_IFREG|S_IRUGO, i2o_proc_read_driver_store, NULL, NULL}, + {"drivers_stored", S_IFREG|S_IRUGO, i2o_proc_read_drivers_stored, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; /* @@ -172,18 +210,18 @@ */ static i2o_proc_entry generic_dev_entries[] = { - {"groups", S_IFREG|S_IRUGO, i2o_proc_read_groups, NULL}, - {"phys_dev", S_IFREG|S_IRUGO, i2o_proc_read_phys_device, NULL}, - {"claimed", S_IFREG|S_IRUGO, i2o_proc_read_claimed, NULL}, - {"users", S_IFREG|S_IRUGO, i2o_proc_read_users, NULL}, - {"priv_msgs", S_IFREG|S_IRUGO, i2o_proc_read_priv_msgs, NULL}, - {"authorized_users", S_IFREG|S_IRUGO, i2o_proc_read_authorized_users, NULL}, - {"dev_identity", S_IFREG|S_IRUGO, i2o_proc_read_dev_identity, NULL}, - {"ddm_identity", S_IFREG|S_IRUGO, i2o_proc_read_ddm_identity, NULL}, - {"user_info", S_IFREG|S_IRUGO, i2o_proc_read_uinfo, NULL}, - {"sgl_limits", S_IFREG|S_IRUGO, i2o_proc_read_sgl_limits, NULL}, - {"sensors", S_IFREG|S_IRUGO, i2o_proc_read_sensors, NULL}, - {NULL, 0, NULL, NULL} + {"groups", S_IFREG|S_IRUGO, i2o_proc_read_groups, NULL, NULL}, + {"phys_dev", S_IFREG|S_IRUGO, i2o_proc_read_phys_device, NULL, NULL}, + {"claimed", S_IFREG|S_IRUGO, i2o_proc_read_claimed, NULL, NULL}, + {"users", S_IFREG|S_IRUGO, i2o_proc_read_users, NULL, NULL}, + {"priv_msgs", S_IFREG|S_IRUGO, i2o_proc_read_priv_msgs, NULL, NULL}, + {"authorized_users", S_IFREG|S_IRUGO, i2o_proc_read_authorized_users, NULL, NULL}, + {"dev_identity", S_IFREG|S_IRUGO, i2o_proc_read_dev_identity, NULL, NULL}, + {"ddm_identity", S_IFREG|S_IRUGO, i2o_proc_read_ddm_identity, NULL, NULL}, + {"user_info", S_IFREG|S_IRUGO, i2o_proc_read_uinfo, NULL, NULL}, + {"sgl_limits", S_IFREG|S_IRUGO, i2o_proc_read_sgl_limits, NULL, NULL}, + {"sensors", S_IFREG|S_IRUGO, i2o_proc_read_sensors, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; /* @@ -191,7 +229,7 @@ */ static i2o_proc_entry rbs_dev_entries[] = { - {"dev_name", S_IFREG|S_IRUGO, i2o_proc_read_dev_name, NULL}, + {"dev_name", S_IFREG|S_IRUGO, i2o_proc_read_dev_name, NULL, NULL}, {NULL, 0, NULL, NULL} }; @@ -223,21 +261,21 @@ */ static i2o_proc_entry lan_entries[] = { - {"lan_dev_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_dev_info, NULL}, - {"lan_mac_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_mac_addr, NULL}, + {"lan_dev_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_dev_info, NULL, NULL}, + {"lan_mac_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_mac_addr, NULL, NULL}, {"lan_mcast_addr", S_IFREG|S_IRUGO|S_IWUSR, - i2o_proc_read_lan_mcast_addr, NULL}, + i2o_proc_read_lan_mcast_addr, NULL, NULL}, {"lan_batch_ctrl", S_IFREG|S_IRUGO|S_IWUSR, - i2o_proc_read_lan_batch_control, NULL}, - {"lan_operation", S_IFREG|S_IRUGO, i2o_proc_read_lan_operation, NULL}, + i2o_proc_read_lan_batch_control, NULL, NULL}, + {"lan_operation", S_IFREG|S_IRUGO, i2o_proc_read_lan_operation, NULL, NULL}, {"lan_media_operation", S_IFREG|S_IRUGO, - i2o_proc_read_lan_media_operation, NULL}, - {"lan_alt_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_alt_addr, NULL}, - {"lan_tx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_tx_info, NULL}, - {"lan_rx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_rx_info, NULL}, + i2o_proc_read_lan_media_operation, NULL, NULL}, + {"lan_alt_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_alt_addr, NULL, NULL}, + {"lan_tx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_tx_info, NULL, NULL}, + {"lan_rx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_rx_info, NULL, NULL}, - {"lan_hist_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_hist_stats, NULL}, - {NULL, 0, NULL, NULL} + {"lan_hist_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_hist_stats, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; /* @@ -246,20 +284,20 @@ */ static i2o_proc_entry lan_eth_entries[] = { - {"lan_eth_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_eth_stats, NULL}, - {NULL, 0, NULL, NULL} + {"lan_eth_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_eth_stats, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; static i2o_proc_entry lan_tr_entries[] = { - {"lan_tr_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_tr_stats, NULL}, - {NULL, 0, NULL, NULL} + {"lan_tr_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_tr_stats, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; static i2o_proc_entry lan_fddi_entries[] = { - {"lan_fddi_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_fddi_stats, NULL}, - {NULL, 0, NULL, NULL} + {"lan_fddi_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_fddi_stats, NULL, NULL}, + {NULL, 0, NULL, NULL, NULL} }; @@ -300,116 +338,98 @@ static spinlock_t i2o_proc_lock = SPIN_LOCK_UNLOCKED; -int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int count, - int *eof, void *data) +int i2o_seq_show_hrt(struct seq_file *seq, void *v) { - struct i2o_controller *c = (struct i2o_controller *)data; + struct i2o_controller *c = (struct i2o_controller *)seq->private; i2o_hrt *hrt = (i2o_hrt *)c->hrt; u32 bus; - int len, i; - - spin_lock(&i2o_proc_lock); - - len = 0; + int i; if(hrt->hrt_version) { - len += sprintf(buf+len, - "HRT table for controller is too new a version.\n"); - spin_unlock(&i2o_proc_lock); - return len; + seq_printf(seq, "HRT table for controller is too new a version.\n"); + return 0; } - if((hrt->num_entries * hrt->entry_len + 8) > 2048) { - printk(KERN_WARNING "i2o_proc: HRT does not fit into buffer\n"); - len += sprintf(buf+len, - "HRT table too big to fit in buffer.\n"); - spin_unlock(&i2o_proc_lock); - return len; - } - - len += sprintf(buf+len, "HRT has %d entries of %d bytes each.\n", + seq_printf(seq, "HRT has %d entries of %d bytes each.\n", hrt->num_entries, hrt->entry_len << 2); - for(i = 0; i < hrt->num_entries && len < count; i++) + for(i = 0; i < hrt->num_entries; i++) { - len += sprintf(buf+len, "Entry %d:\n", i); - len += sprintf(buf+len, " Adapter ID: %0#10x\n", + seq_printf(seq, "Entry %d:\n", i); + seq_printf(seq, " Adapter ID: %0#10x\n", hrt->hrt_entry[i].adapter_id); - len += sprintf(buf+len, " Controlling tid: %0#6x\n", + seq_printf(seq, " Controlling tid: %0#6x\n", hrt->hrt_entry[i].parent_tid); if(hrt->hrt_entry[i].bus_type != 0x80) { bus = hrt->hrt_entry[i].bus_type; - len += sprintf(buf+len, " %s Information\n", bus_strings[bus]); + seq_printf(seq, " %s Information\n", bus_strings[bus]); switch(bus) { case I2O_BUS_LOCAL: - len += sprintf(buf+len, " IOBase: %0#6x,", + seq_printf(seq, " IOBase: %0#6x,", hrt->hrt_entry[i].bus.local_bus.LbBaseIOPort); - len += sprintf(buf+len, " MemoryBase: %0#10x\n", + seq_printf(seq, " MemoryBase: %0#10x\n", hrt->hrt_entry[i].bus.local_bus.LbBaseMemoryAddress); break; case I2O_BUS_ISA: - len += sprintf(buf+len, " IOBase: %0#6x,", + seq_printf(seq, " IOBase: %0#6x,", hrt->hrt_entry[i].bus.isa_bus.IsaBaseIOPort); - len += sprintf(buf+len, " MemoryBase: %0#10x,", + seq_printf(seq, " MemoryBase: %0#10x,", hrt->hrt_entry[i].bus.isa_bus.IsaBaseMemoryAddress); - len += sprintf(buf+len, " CSN: %0#4x,", + seq_printf(seq, " CSN: %0#4x,", hrt->hrt_entry[i].bus.isa_bus.CSN); break; case I2O_BUS_EISA: - len += sprintf(buf+len, " IOBase: %0#6x,", + seq_printf(seq, " IOBase: %0#6x,", hrt->hrt_entry[i].bus.eisa_bus.EisaBaseIOPort); - len += sprintf(buf+len, " MemoryBase: %0#10x,", + seq_printf(seq, " MemoryBase: %0#10x,", hrt->hrt_entry[i].bus.eisa_bus.EisaBaseMemoryAddress); - len += sprintf(buf+len, " Slot: %0#4x,", + seq_printf(seq, " Slot: %0#4x,", hrt->hrt_entry[i].bus.eisa_bus.EisaSlotNumber); break; case I2O_BUS_MCA: - len += sprintf(buf+len, " IOBase: %0#6x,", + seq_printf(seq, " IOBase: %0#6x,", hrt->hrt_entry[i].bus.mca_bus.McaBaseIOPort); - len += sprintf(buf+len, " MemoryBase: %0#10x,", + seq_printf(seq, " MemoryBase: %0#10x,", hrt->hrt_entry[i].bus.mca_bus.McaBaseMemoryAddress); - len += sprintf(buf+len, " Slot: %0#4x,", + seq_printf(seq, " Slot: %0#4x,", hrt->hrt_entry[i].bus.mca_bus.McaSlotNumber); break; case I2O_BUS_PCI: - len += sprintf(buf+len, " Bus: %0#4x", + seq_printf(seq, " Bus: %0#4x", hrt->hrt_entry[i].bus.pci_bus.PciBusNumber); - len += sprintf(buf+len, " Dev: %0#4x", + seq_printf(seq, " Dev: %0#4x", hrt->hrt_entry[i].bus.pci_bus.PciDeviceNumber); - len += sprintf(buf+len, " Func: %0#4x", + seq_printf(seq, " Func: %0#4x", hrt->hrt_entry[i].bus.pci_bus.PciFunctionNumber); - len += sprintf(buf+len, " Vendor: %0#6x", + seq_printf(seq, " Vendor: %0#6x", hrt->hrt_entry[i].bus.pci_bus.PciVendorID); - len += sprintf(buf+len, " Device: %0#6x\n", + seq_printf(seq, " Device: %0#6x\n", hrt->hrt_entry[i].bus.pci_bus.PciDeviceID); break; default: - len += sprintf(buf+len, " Unsupported Bus Type\n"); + seq_printf(seq, " Unsupported Bus Type\n"); } } else - len += sprintf(buf+len, " Unknown Bus Type\n"); + seq_printf(seq, " Unknown Bus Type\n"); } - - spin_unlock(&i2o_proc_lock); - return len; + return 0; } -int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len, - int *eof, void *data) +int i2o_seq_show_lct(struct seq_file *seq, void *v) { - struct i2o_controller *c = (struct i2o_controller*)data; + struct i2o_controller *c = (struct i2o_controller*)seq->private; i2o_lct *lct = (i2o_lct *)c->lct; int entries; int i; @@ -422,23 +442,19 @@ "Fibre Channel Bus" }; - spin_lock(&i2o_proc_lock); - len = 0; - entries = (lct->table_size - 3)/9; - len += sprintf(buf, "LCT contains %d %s\n", entries, + seq_printf(seq, "LCT contains %d %s\n", entries, entries == 1 ? "entry" : "entries"); if(lct->boot_tid) - len += sprintf(buf+len, "Boot Device @ ID %d\n", lct->boot_tid); + seq_printf(seq, "Boot Device @ ID %d\n", lct->boot_tid); - len += - sprintf(buf+len, "Current Change Indicator: %#10x\n", lct->change_ind); + seq_printf(seq, "Current Change Indicator: %#10x\n", lct->change_ind); for(i = 0; i < entries; i++) { - len += sprintf(buf+len, "Entry %d\n", i); - len += sprintf(buf+len, " Class, SubClass : %s", i2o_get_class_name(lct->lct_entry[i].class_id)); + seq_printf(seq, "Entry %d\n", i); + seq_printf(seq, " Class, SubClass : %s", i2o_get_class_name(lct->lct_entry[i].class_id)); /* * Classes which we'll print subclass info for @@ -449,23 +465,23 @@ switch(lct->lct_entry[i].sub_class) { case 0x00: - len += sprintf(buf+len, ", Direct-Access Read/Write"); + seq_printf(seq, ", Direct-Access Read/Write"); break; case 0x04: - len += sprintf(buf+len, ", WORM Drive"); + seq_printf(seq, ", WORM Drive"); break; case 0x05: - len += sprintf(buf+len, ", CD-ROM Drive"); + seq_printf(seq, ", CD-ROM Drive"); break; case 0x07: - len += sprintf(buf+len, ", Optical Memory Device"); + seq_printf(seq, ", Optical Memory Device"); break; default: - len += sprintf(buf+len, ", Unknown (0x%02x)", + seq_printf(seq, ", Unknown (0x%02x)", lct->lct_entry[i].sub_class); break; } @@ -475,27 +491,27 @@ switch(lct->lct_entry[i].sub_class & 0xFF) { case 0x30: - len += sprintf(buf+len, ", Ethernet"); + seq_printf(seq, ", Ethernet"); break; case 0x40: - len += sprintf(buf+len, ", 100base VG"); + seq_printf(seq, ", 100base VG"); break; case 0x50: - len += sprintf(buf+len, ", IEEE 802.5/Token-Ring"); + seq_printf(seq, ", IEEE 802.5/Token-Ring"); break; case 0x60: - len += sprintf(buf+len, ", ANSI X3T9.5 FDDI"); + seq_printf(seq, ", ANSI X3T9.5 FDDI"); break; case 0x70: - len += sprintf(buf+len, ", Fibre Channel"); + seq_printf(seq, ", Fibre Channel"); break; default: - len += sprintf(buf+len, ", Unknown Sub-Class (0x%02x)", + seq_printf(seq, ", Unknown Sub-Class (0x%02x)", lct->lct_entry[i].sub_class & 0xFF); break; } @@ -503,27 +519,27 @@ case I2O_CLASS_SCSI_PERIPHERAL: if(lct->lct_entry[i].sub_class < SCSI_TABLE_SIZE) - len += sprintf(buf+len, ", %s", + seq_printf(seq, ", %s", scsi_devices[lct->lct_entry[i].sub_class]); else - len += sprintf(buf+len, ", Unknown Device Type"); + seq_printf(seq, ", Unknown Device Type"); break; case I2O_CLASS_BUS_ADAPTER_PORT: if(lct->lct_entry[i].sub_class < BUS_TABLE_SIZE) - len += sprintf(buf+len, ", %s", + seq_printf(seq, ", %s", bus_ports[lct->lct_entry[i].sub_class]); else - len += sprintf(buf+len, ", Unknown Bus Type"); + seq_printf(seq, ", Unknown Bus Type"); break; } - len += sprintf(buf+len, "\n"); + seq_printf(seq, "\n"); - len += sprintf(buf+len, " Local TID : 0x%03x\n", lct->lct_entry[i].tid); - len += sprintf(buf+len, " User TID : 0x%03x\n", lct->lct_entry[i].user_tid); - len += sprintf(buf+len, " Parent TID : 0x%03x\n", + seq_printf(seq, " Local TID : 0x%03x\n", lct->lct_entry[i].tid); + seq_printf(seq, " User TID : 0x%03x\n", lct->lct_entry[i].user_tid); + seq_printf(seq, " Parent TID : 0x%03x\n", lct->lct_entry[i].parent_tid); - len += sprintf(buf+len, " Identity Tag : 0x%x%x%x%x%x%x%x%x\n", + seq_printf(seq, " Identity Tag : 0x%x%x%x%x%x%x%x%x\n", lct->lct_entry[i].identity_tag[0], lct->lct_entry[i].identity_tag[1], lct->lct_entry[i].identity_tag[2], @@ -532,214 +548,207 @@ lct->lct_entry[i].identity_tag[5], lct->lct_entry[i].identity_tag[6], lct->lct_entry[i].identity_tag[7]); - len += sprintf(buf+len, " Change Indicator : %0#10x\n", + seq_printf(seq, " Change Indicator : %0#10x\n", lct->lct_entry[i].change_ind); - len += sprintf(buf+len, " Event Capab Mask : %0#10x\n", + seq_printf(seq, " Event Capab Mask : %0#10x\n", lct->lct_entry[i].device_flags); } - spin_unlock(&i2o_proc_lock); - return len; + return 0; } -int i2o_proc_read_status(char *buf, char **start, off_t offset, int len, - int *eof, void *data) +int i2o_seq_show_status(struct seq_file *seq, void *v) { - struct i2o_controller *c = (struct i2o_controller*)data; + struct i2o_controller *c = (struct i2o_controller*)seq->private; char prodstr[25]; int version; - spin_lock(&i2o_proc_lock); - len = 0; - i2o_status_get(c); // reread the status block - len += sprintf(buf+len,"Organization ID : %0#6x\n", + seq_printf(seq, "Organization ID : %0#6x\n", c->status_block->org_id); version = c->status_block->i2o_version; /* FIXME for Spec 2.0 if (version == 0x02) { - len += sprintf(buf+len,"Lowest I2O version supported: "); + seq_printf(seq, "Lowest I2O version supported: "); switch(workspace[2]) { case 0x00: - len += sprintf(buf+len,"1.0\n"); + seq_printf(seq, "1.0\n"); break; case 0x01: - len += sprintf(buf+len,"1.5\n"); + seq_printf(seq, "1.5\n"); break; case 0x02: - len += sprintf(buf+len,"2.0\n"); + seq_printf(seq, "2.0\n"); break; } - len += sprintf(buf+len, "Highest I2O version supported: "); + seq_printf(seq, "Highest I2O version supported: "); switch(workspace[3]) { case 0x00: - len += sprintf(buf+len,"1.0\n"); + seq_printf(seq, "1.0\n"); break; case 0x01: - len += sprintf(buf+len,"1.5\n"); + seq_printf(seq, "1.5\n"); break; case 0x02: - len += sprintf(buf+len,"2.0\n"); + seq_printf(seq, "2.0\n"); break; } } */ - len += sprintf(buf+len,"IOP ID : %0#5x\n", + seq_printf(seq, "IOP ID : %0#5x\n", c->status_block->iop_id); - len += sprintf(buf+len,"Host Unit ID : %0#6x\n", + seq_printf(seq, "Host Unit ID : %0#6x\n", c->status_block->host_unit_id); - len += sprintf(buf+len,"Segment Number : %0#5x\n", + seq_printf(seq, "Segment Number : %0#5x\n", c->status_block->segment_number); - len += sprintf(buf+len, "I2O version : "); + seq_printf(seq, "I2O version : "); switch (version) { case 0x00: - len += sprintf(buf+len,"1.0\n"); + seq_printf(seq, "1.0\n"); break; case 0x01: - len += sprintf(buf+len,"1.5\n"); + seq_printf(seq, "1.5\n"); break; case 0x02: - len += sprintf(buf+len,"2.0\n"); + seq_printf(seq, "2.0\n"); break; default: - len += sprintf(buf+len,"Unknown version\n"); + seq_printf(seq, "Unknown version\n"); } - len += sprintf(buf+len, "IOP State : "); + seq_printf(seq, "IOP State : "); switch (c->status_block->iop_state) { case 0x01: - len += sprintf(buf+len,"INIT\n"); + seq_printf(seq, "INIT\n"); break; case 0x02: - len += sprintf(buf+len,"RESET\n"); + seq_printf(seq, "RESET\n"); break; case 0x04: - len += sprintf(buf+len,"HOLD\n"); + seq_printf(seq, "HOLD\n"); break; case 0x05: - len += sprintf(buf+len,"READY\n"); + seq_printf(seq, "READY\n"); break; case 0x08: - len += sprintf(buf+len,"OPERATIONAL\n"); + seq_printf(seq, "OPERATIONAL\n"); break; case 0x10: - len += sprintf(buf+len,"FAILED\n"); + seq_printf(seq, "FAILED\n"); break; case 0x11: - len += sprintf(buf+len,"FAULTED\n"); + seq_printf(seq, "FAULTED\n"); break; default: - len += sprintf(buf+len,"Unknown\n"); + seq_printf(seq, "Unknown\n"); break; } - len += sprintf(buf+len,"Messenger Type : "); + seq_printf(seq, "Messenger Type : "); switch (c->status_block->msg_type) { case 0x00: - len += sprintf(buf+len,"Memory mapped\n"); + seq_printf(seq, "Memory mapped\n"); break; case 0x01: - len += sprintf(buf+len,"Memory mapped only\n"); + seq_printf(seq, "Memory mapped only\n"); break; case 0x02: - len += sprintf(buf+len,"Remote only\n"); + seq_printf(seq,"Remote only\n"); break; case 0x03: - len += sprintf(buf+len,"Memory mapped and remote\n"); + seq_printf(seq, "Memory mapped and remote\n"); break; default: - len += sprintf(buf+len,"Unknown\n"); + seq_printf(seq, "Unknown\n"); } - len += sprintf(buf+len,"Inbound Frame Size : %d bytes\n", + seq_printf(seq, "Inbound Frame Size : %d bytes\n", c->status_block->inbound_frame_size<<2); - len += sprintf(buf+len,"Max Inbound Frames : %d\n", + seq_printf(seq, "Max Inbound Frames : %d\n", c->status_block->max_inbound_frames); - len += sprintf(buf+len,"Current Inbound Frames : %d\n", + seq_printf(seq, "Current Inbound Frames : %d\n", c->status_block->cur_inbound_frames); - len += sprintf(buf+len,"Max Outbound Frames : %d\n", + seq_printf(seq, "Max Outbound Frames : %d\n", c->status_block->max_outbound_frames); /* Spec doesn't say if NULL terminated or not... */ memcpy(prodstr, c->status_block->product_id, 24); prodstr[24] = '\0'; - len += sprintf(buf+len,"Product ID : %s\n", prodstr); - len += sprintf(buf+len,"Expected LCT Size : %d bytes\n", + seq_printf(seq, "Product ID : %s\n", prodstr); + seq_printf(seq, "Expected LCT Size : %d bytes\n", c->status_block->expected_lct_size); - len += sprintf(buf+len,"IOP Capabilities\n"); - len += sprintf(buf+len," Context Field Size Support : "); + seq_printf(seq, "IOP Capabilities\n"); + seq_printf(seq, " Context Field Size Support : "); switch (c->status_block->iop_capabilities & 0x0000003) { case 0: - len += sprintf(buf+len,"Supports only 32-bit context fields\n"); + seq_printf(seq, "Supports only 32-bit context fields\n"); break; case 1: - len += sprintf(buf+len,"Supports only 64-bit context fields\n"); + seq_printf(seq, "Supports only 64-bit context fields\n"); break; case 2: - len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields, " + seq_printf(seq, "Supports 32-bit and 64-bit context fields, " "but not concurrently\n"); break; case 3: - len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields " + seq_printf(seq, "Supports 32-bit and 64-bit context fields " "concurrently\n"); break; default: - len += sprintf(buf+len,"0x%08x\n",c->status_block->iop_capabilities); + seq_printf(seq, "0x%08x\n",c->status_block->iop_capabilities); } - len += sprintf(buf+len," Current Context Field Size : "); + seq_printf(seq, " Current Context Field Size : "); switch (c->status_block->iop_capabilities & 0x0000000C) { case 0: - len += sprintf(buf+len,"not configured\n"); + seq_printf(seq, "not configured\n"); break; case 4: - len += sprintf(buf+len,"Supports only 32-bit context fields\n"); + seq_printf(seq, "Supports only 32-bit context fields\n"); break; case 8: - len += sprintf(buf+len,"Supports only 64-bit context fields\n"); + seq_printf(seq, "Supports only 64-bit context fields\n"); break; case 12: - len += sprintf(buf+len,"Supports both 32-bit or 64-bit context fields " + seq_printf(seq, "Supports both 32-bit or 64-bit context fields " "concurrently\n"); break; default: - len += sprintf(buf+len,"\n"); + seq_printf(seq, "\n"); } - len += sprintf(buf+len," Inbound Peer Support : %s\n", + seq_printf(seq, " Inbound Peer Support : %s\n", (c->status_block->iop_capabilities & 0x00000010) ? "Supported" : "Not supported"); - len += sprintf(buf+len," Outbound Peer Support : %s\n", + seq_printf(seq, " Outbound Peer Support : %s\n", (c->status_block->iop_capabilities & 0x00000020) ? "Supported" : "Not supported"); - len += sprintf(buf+len," Peer to Peer Support : %s\n", + seq_printf(seq, " Peer to Peer Support : %s\n", (c->status_block->iop_capabilities & 0x00000040) ? "Supported" : "Not supported"); - len += sprintf(buf+len, "Desired private memory size : %d kB\n", + seq_printf(seq, "Desired private memory size : %d kB\n", c->status_block->desired_mem_size>>10); - len += sprintf(buf+len, "Allocated private memory size : %d kB\n", + seq_printf(seq, "Allocated private memory size : %d kB\n", c->status_block->current_mem_size>>10); - len += sprintf(buf+len, "Private memory base address : %0#10x\n", + seq_printf(seq, "Private memory base address : %0#10x\n", c->status_block->current_mem_base); - len += sprintf(buf+len, "Desired private I/O size : %d kB\n", + seq_printf(seq, "Desired private I/O size : %d kB\n", c->status_block->desired_io_size>>10); - len += sprintf(buf+len, "Allocated private I/O size : %d kB\n", + seq_printf(seq, "Allocated private I/O size : %d kB\n", c->status_block->current_io_size>>10); - len += sprintf(buf+len, "Private I/O base address : %0#10x\n", + seq_printf(seq, "Private I/O base address : %0#10x\n", c->status_block->current_io_base); - spin_unlock(&i2o_proc_lock); - - return len; + return 0; } int i2o_proc_read_hw(char *buf, char **start, off_t offset, int len, @@ -3146,6 +3155,9 @@ ent->data = data; ent->read_proc = pentry->read_proc; ent->write_proc = pentry->write_proc; + if(pentry->fops_proc) + ent->proc_fops = pentry->fops_proc; + ent->nlink = 1; pentry++; @@ -3266,7 +3278,6 @@ sprintf(buff, "iop%d", pctrl->unit); i2o_proc_remove_entries(generic_iop_entries, pctrl->proc_entry); - remove_proc_entry(buff, parent); pctrl->proc_entry = NULL; } @@ -3306,8 +3317,8 @@ break; } } - remove_proc_entry(dev_id, dev->controller->proc_entry); } + remove_proc_entry(dev_id, dev->controller->proc_entry); } } @@ -3329,6 +3340,7 @@ i2o_proc_dir_root = proc_mkdir("i2o", 0); if(!i2o_proc_dir_root) return -1; + i2o_proc_dir_root->owner = THIS_MODULE; for(i = 0; i < MAX_I2O_CONTROLLERS; i++) { diff -Nru a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c --- a/drivers/message/i2o/i2o_scsi.c Tue May 18 23:38:08 2004 +++ b/drivers/message/i2o/i2o_scsi.c Tue May 18 23:38:08 2004 @@ -62,9 +62,6 @@ #include "../../scsi/scsi.h" #include "../../scsi/hosts.h" -#if BITS_PER_LONG == 64 -#error FIXME: driver does not support 64-bit platforms -#endif #define VERSION_STRING "Version 0.1.2" @@ -233,7 +230,10 @@ { spin_unlock_irqrestore(&retry_lock, flags); /* Create a scsi error for this */ - current_command = (Scsi_Cmnd *)m[3]; + current_command = (Scsi_Cmnd *)i2o_context_list_get(m[3], c); + if(!current_command) + return; + lock = current_command->device->host->host_lock; printk("Aborted %ld\n", current_command->serial_number); @@ -276,16 +276,15 @@ printk(KERN_INFO "i2o_scsi: bus reset completed.\n"); return; } - /* - * FIXME: 64bit breakage - */ - current_command = (Scsi_Cmnd *)m[3]; + current_command = (Scsi_Cmnd *)i2o_context_list_get(m[3], c); /* * Is this a control request coming back - eg an abort ? */ + atomic_dec(&queue_depth); + if(current_command==NULL) { if(st) @@ -296,8 +295,6 @@ dprintk(KERN_INFO "Completed %ld\n", current_command->serial_number); - atomic_dec(&queue_depth); - if(st == 0x06) { if(le32_to_cpu(m[5]) < current_command->underflow) @@ -647,9 +644,7 @@ if(tid == -1) { SCpnt->result = DID_NO_CONNECT << 16; - spin_lock_irqsave(host->host_lock, flags); done(SCpnt); - spin_unlock_irqrestore(host->host_lock, flags); return 0; } @@ -699,8 +694,7 @@ i2o_raw_writel(I2O_CMD_SCSI_EXEC<<24|HOST_TID<<12|tid, &msg[1]); i2o_raw_writel(scsi_context, &msg[2]); /* So the I2O layer passes to us */ - /* Sorry 64bit folks. FIXME */ - i2o_raw_writel((u32)SCpnt, &msg[3]); /* We want the SCSI control block back */ + i2o_raw_writel(i2o_context_list_add(SCpnt, c), &msg[3]); /* We want the SCSI control block back */ /* LSI_920_PCI_QUIRK * @@ -883,7 +877,7 @@ * @SCpnt: command to abort * * Ask the I2O controller to abort a command. This is an asynchrnous - * process and oru callback handler will see the command complete + * process and our callback handler will see the command complete * with an aborted message if it succeeds. * * Locks: no locks are held or needed @@ -894,10 +888,9 @@ struct i2o_controller *c; struct Scsi_Host *host; struct i2o_scsi_host *hostdata; - unsigned long msg; - u32 m; + u32 msg[5]; int tid; - unsigned long timeout; + int status = FAILED; printk(KERN_WARNING "i2o_scsi: Aborting command block.\n"); @@ -907,37 +900,22 @@ if(tid==-1) { printk(KERN_ERR "i2o_scsi: Impossible command to abort!\n"); - return FAILED; + return status; } c = hostdata->controller; spin_unlock_irq(host->host_lock); - timeout = jiffies+2*HZ; - do - { - m = le32_to_cpu(I2O_POST_READ32(c)); - if(m != 0xFFFFFFFF) - break; - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - mb(); - } - while(time_before(jiffies, timeout)); - - msg = c->mem_offset + m; - - i2o_raw_writel(FIVE_WORD_MSG_SIZE, msg); - i2o_raw_writel(I2O_CMD_SCSI_ABORT<<24|HOST_TID<<12|tid, msg+4); - i2o_raw_writel(scsi_context, msg+8); - i2o_raw_writel(0, msg+12); /* Not needed for an abort */ - i2o_raw_writel((u32)SCpnt, msg+16); - wmb(); - i2o_post_message(c,m); - wmb(); - + msg[0] = FIVE_WORD_MSG_SIZE; + msg[1] = I2O_CMD_SCSI_ABORT<<24|HOST_TID<<12|tid; + msg[2] = scsi_context; + msg[3] = 0; + msg[4] = i2o_context_list_remove(SCpnt, c); + if(i2o_post_wait(c, msg, sizeof(msg), 240)) + status = SUCCESS; + spin_lock_irq(host->host_lock); - return SUCCESS; + return status; } /** diff -Nru a/drivers/misc/Kconfig b/drivers/misc/Kconfig --- a/drivers/misc/Kconfig Tue May 18 23:38:06 2004 +++ b/drivers/misc/Kconfig Tue May 18 23:38:06 2004 @@ -6,7 +6,7 @@ config IBM_ASM tristate "Device driver for IBM RSA service processor" - depends on X86 + depends on X86 && EXPERIMENTAL default n ---help--- This option enables device driver support for in-band access to the @@ -20,6 +20,12 @@ this feature serial driver support (CONFIG_SERIAL_8250) must be enabled. + WARNING: This software may not be supported or function + correctly on your IBM server. Please consult the IBM ServerProven + website http://www.pc.ibm/ww/eserver/xseries/serverproven for + information on the specific driver level and support statement + for your IBM server. + If unsure, say N. diff -Nru a/drivers/misc/ibmasm/module.c b/drivers/misc/ibmasm/module.c --- a/drivers/misc/ibmasm/module.c Tue May 18 23:38:08 2004 +++ b/drivers/misc/ibmasm/module.c Tue May 18 23:38:08 2004 @@ -126,6 +126,13 @@ ibmasm_register_uart(sp); + dev_printk(KERN_DEBUG, &pdev->dev, "WARNING: This software may not be supported or function\n"); + dev_printk(KERN_DEBUG, &pdev->dev, "correctly on your IBM server. Please consult the IBM\n"); + dev_printk(KERN_DEBUG, &pdev->dev, "ServerProven website\n"); + dev_printk(KERN_DEBUG, &pdev->dev, "http://www.pc.ibm.com/ww/eserver/xseries/serverproven\n"); + dev_printk(KERN_DEBUG, &pdev->dev, "for information on the specific driver level and support\n"); + dev_printk(KERN_DEBUG, &pdev->dev, "statement for your IBM server.\n"); + return 0; error_send_message: diff -Nru a/drivers/mtd/chips/amd_flash.c b/drivers/mtd/chips/amd_flash.c --- a/drivers/mtd/chips/amd_flash.c Tue May 18 23:38:06 2004 +++ b/drivers/mtd/chips/amd_flash.c Tue May 18 23:38:06 2004 @@ -780,8 +780,8 @@ map->fldrv_priv = private; map->fldrv = &amd_flash_chipdrv; - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); return mtd; } diff -Nru a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c --- a/drivers/mtd/chips/cfi_cmdset_0001.c Tue May 18 23:38:06 2004 +++ b/drivers/mtd/chips/cfi_cmdset_0001.c Tue May 18 23:38:06 2004 @@ -431,6 +431,7 @@ break; case FL_READY: + case FL_STATUS: /* We should really make set_vpp() count, rather than doing this */ DISABLE_VPP(map); break; diff -Nru a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c --- a/drivers/mtd/chips/sharp.c Tue May 18 23:38:07 2004 +++ b/drivers/mtd/chips/sharp.c Tue May 18 23:38:07 2004 @@ -154,7 +154,7 @@ map->fldrv = &sharp_chipdrv; map->fldrv_priv = sharp; - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); return mtd; } diff -Nru a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig --- a/drivers/mtd/maps/Kconfig Tue May 18 23:38:09 2004 +++ b/drivers/mtd/maps/Kconfig Tue May 18 23:38:09 2004 @@ -404,6 +404,15 @@ IQ80310 evaluation board. If you have one of these boards and would like to use the flash chips on it, say 'Y'. +config MTD_IXP4XX + tristate "CFI Flash device mapped on Intel IXP4xx based systems" + depends on ARM && MTD_CFI && MTD_COMPLEX_MAPPINGS && ARCH_IXP4XX + help + This eables MTD access to flash devices on platforms based + on Intel's IXP4xx family of network processors such as the + IXDP425 and Coyote. If you have an IXP4xx based board and + would like to use the flash chips on it, say 'Y'. + config MTD_EPXA10DB tristate "CFI Flash device mapped on Epxa10db" depends on ARM && MTD_CFI && MTD_PARTITIONS && ARCH_CAMELOT diff -Nru a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile --- a/drivers/mtd/maps/Makefile Tue May 18 23:38:05 2004 +++ b/drivers/mtd/maps/Makefile Tue May 18 23:38:05 2004 @@ -55,3 +55,4 @@ obj-$(CONFIG_MTD_BEECH) += beech-mtd.o obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o obj-$(CONFIG_MTD_H720X) += h720x-flash.o +obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o diff -Nru a/drivers/mtd/maps/ixp4xx.c b/drivers/mtd/maps/ixp4xx.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/mtd/maps/ixp4xx.c Tue May 18 23:38:09 2004 @@ -0,0 +1,244 @@ +/* + * $Id: ixp4xx.c,v 1.1 2004/05/13 22:21:26 dsaxena Exp $ + * + * drivers/mtd/maps/ixp4xx.c + * + * MTD Map file for IXP4XX based systems. Please do not make per-board + * changes in here. If your board needs special setup, do it in your + * platform level code in arch/arm/mach-ixp4xx/board-setup.c + * + * Original Author: Intel Corporation + * Maintainer: Deepak Saxena + * + * Copyright (C) 2002 Intel Corporation + * Copyright (C) 2003-2004 MontaVista Software, Inc. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifndef __ARMEB__ +#define BYTE0(h) ((h) & 0xFF) +#define BYTE1(h) (((h) >> 8) & 0xFF) +#else +#define BYTE0(h) (((h) >> 8) & 0xFF) +#define BYTE1(h) ((h) & 0xFF) +#endif + +static __u16 +ixp4xx_read16(struct map_info *map, unsigned long ofs) +{ + return *(__u16 *) (map->map_priv_1 + ofs); +} + +/* + * The IXP4xx expansion bus only allows 16-bit wide acceses + * when attached to a 16-bit wide device (such as the 28F128J3A), + * so we can't just memcpy_fromio(). + */ +static void +ixp4xx_copy_from(struct map_info *map, void *to, + unsigned long from, ssize_t len) +{ + int i; + u8 *dest = (u8 *) to; + u16 *src = (u16 *) (map->map_priv_1 + from); + u16 data; + + for (i = 0; i < (len / 2); i++) { + data = src[i]; + dest[i * 2] = BYTE0(data); + dest[i * 2 + 1] = BYTE1(data); + } + + if (len & 1) + dest[len - 1] = BYTE0(src[i]); +} + +static void +ixp4xx_write16(struct map_info *map, __u16 d, unsigned long adr) +{ + *(__u16 *) (map->map_priv_1 + adr) = d; +} + +struct ixp4xx_flash_info { + struct mtd_info *mtd; + struct map_info map; + struct mtd_partition *partitions; + struct resource *res; +}; + +static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; + +static int +ixp4xx_flash_remove(struct device *_dev) +{ + struct platform_device *dev = to_platform_device(_dev); + struct flash_platform_data *plat = dev->dev.platform_data; + struct ixp4xx_flash_info *info = dev_get_drvdata(&dev->dev); + + dev_set_drvdata(&dev->dev, NULL); + + if(!info) + return 0; + + /* + * This is required for a soft reboot to work. + */ + ixp4xx_write16(&info->map, 0xff, 0x55 * 0x2); + + if (info->mtd) { + del_mtd_partitions(info->mtd); + map_destroy(info->mtd); + } + if (info->map.map_priv_1) + iounmap((void *) info->map.map_priv_1); + + if (info->partitions) + kfree(info->partitions); + + if (info->res) { + release_resource(info->res); + kfree(info->res); + } + + if (plat->exit) + plat->exit(); + + /* Disable flash write */ + *IXP4XX_EXP_CS0 &= ~IXP4XX_FLASH_WRITABLE; + + return 0; +} + +static int ixp4xx_flash_probe(struct device *_dev) +{ + struct platform_device *dev = to_platform_device(_dev); + struct flash_platform_data *plat = dev->dev.platform_data; + struct ixp4xx_flash_info *info; + int err = -1; + + if (!plat) + return -ENODEV; + + if (plat->init) { + err = plat->init(); + if (err) + return err; + } + + info = kmalloc(sizeof(struct ixp4xx_flash_info), GFP_KERNEL); + if(!info) { + err = -ENOMEM; + goto Error; + } + memzero(info, sizeof(struct ixp4xx_flash_info)); + + dev_set_drvdata(&dev->dev, info); + + /* + * Enable flash write + * TODO: Move this out to board specific code + */ + *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; + + /* + * Tell the MTD layer we're not 1:1 mapped so that it does + * not attempt to do a direct access on us. + */ + info->map.phys = NO_XIP; + info->map.size = dev->resource->end - dev->resource->start + 1; + + /* + * We only support 16-bit accesses for now. If and when + * any board use 8-bit access, we'll fixup the driver to + * handle that. + */ + info->map.buswidth = 2; + info->map.name = dev->dev.bus_id; + info->map.read16 = ixp4xx_read16, + info->map.write16 = ixp4xx_write16, + info->map.copy_from = ixp4xx_copy_from, + + info->res = request_mem_region(dev->resource->start, + dev->resource->end - dev->resource->start + 1, + "IXP4XXFlash"); + if (!info->res) { + printk(KERN_ERR "IXP4XXFlash: Could not reserve memory region\n"); + err = -ENOMEM; + goto Error; + } + + info->map.map_priv_1 = + (unsigned long) ioremap(dev->resource->start, + dev->resource->end - dev->resource->start + 1); + if (!info->map.map_priv_1) { + printk(KERN_ERR "IXP4XXFlash: Failed to ioremap region\n"); + err = -EIO; + goto Error; + } + + info->mtd = do_map_probe(plat->map_name, &info->map); + if (!info->mtd) { + printk(KERN_ERR "IXP4XXFlash: map_probe failed\n"); + err = -ENXIO; + goto Error; + } + info->mtd->owner = THIS_MODULE; + + err = parse_mtd_partitions(info->mtd, probes, &info->partitions, 0); + if (err > 0) { + err = add_mtd_partitions(info->mtd, info->partitions, err); + if(err) + printk(KERN_ERR "Could not parse partitions\n"); + } + + if (err) + goto Error; + + return 0; + +Error: + ixp4xx_flash_remove(_dev); + return err; +} + +static struct device_driver ixp4xx_flash_driver = { + .name = "IXP4XX-Flash", + .bus = &platform_bus_type, + .probe = ixp4xx_flash_probe, + .remove = ixp4xx_flash_remove, +}; + +static int __init ixp4xx_flash_init(void) +{ + return driver_register(&ixp4xx_flash_driver); +} + +static void __exit ixp4xx_flash_exit(void) +{ + driver_unregister(&ixp4xx_flash_driver); +} + + +module_init(ixp4xx_flash_init); +module_exit(ixp4xx_flash_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("MTD map driver for Intel IXP4xx systems") +MODULE_AUTHOR("Deepak Saxena"); + diff -Nru a/drivers/mtd/maps/tqm8xxl.c b/drivers/mtd/maps/tqm8xxl.c --- a/drivers/mtd/maps/tqm8xxl.c Tue May 18 23:38:06 2004 +++ b/drivers/mtd/maps/tqm8xxl.c Tue May 18 23:38:06 2004 @@ -105,7 +105,7 @@ .name = "jffs", .offset = 0x00200000, .size = 0x00200000, - .//size = MTDPART_SIZ_FULL, + //.size = MTDPART_SIZ_FULL, } }; #endif diff -Nru a/drivers/net/3c59x.c b/drivers/net/3c59x.c --- a/drivers/net/3c59x.c Tue May 18 23:38:05 2004 +++ b/drivers/net/3c59x.c Tue May 18 23:38:05 2004 @@ -520,7 +520,7 @@ {"3c905B-FX Cyclone 100baseFx", PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, {"3c905C Tornado", - PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, }, + PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, }, {"3c980 Cyclone", PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, {"3c980C Python-T", diff -Nru a/drivers/net/8139too.c b/drivers/net/8139too.c --- a/drivers/net/8139too.c Tue May 18 23:38:05 2004 +++ b/drivers/net/8139too.c Tue May 18 23:38:05 2004 @@ -1677,11 +1677,17 @@ u8 tmp8; unsigned long flags; - DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x " - "media %2.2x.\n", dev->name, - RTL_R8 (ChipCmd), - RTL_R16 (IntrStatus), - RTL_R8 (MediaStatus)); + printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x " + "media %2.2x.\n", dev->name, RTL_R8 (ChipCmd), + RTL_R16(IntrStatus), RTL_R16(IntrMask), RTL_R8(MediaStatus)); + /* Emit info to figure out what went wrong. */ + printk (KERN_DEBUG "%s: Tx queue start entry %ld dirty entry %ld.\n", + dev->name, tp->cur_tx, tp->dirty_tx); + for (i = 0; i < NUM_TX_DESC; i++) + printk (KERN_DEBUG "%s: Tx descriptor %d is %8.8lx.%s\n", + dev->name, i, RTL_R32 (TxStatus0 + (i * 4)), + i == tp->dirty_tx % NUM_TX_DESC ? + " (queue head)" : ""); tp->xstats.tx_timeouts++; @@ -1694,15 +1700,6 @@ /* Disable interrupts by clearing the interrupt mask. */ RTL_W16 (IntrMask, 0x0000); - /* Emit info to figure out what went wrong. */ - printk (KERN_DEBUG "%s: Tx queue start entry %ld dirty entry %ld.\n", - dev->name, tp->cur_tx, tp->dirty_tx); - for (i = 0; i < NUM_TX_DESC; i++) - printk (KERN_DEBUG "%s: Tx descriptor %d is %8.8lx.%s\n", - dev->name, i, RTL_R32 (TxStatus0 + (i * 4)), - i == tp->dirty_tx % NUM_TX_DESC ? - " (queue head)" : ""); - /* Stop a shared interrupt from scavenging while we are. */ spin_lock_irqsave (&tp->lock, flags); rtl8139_tx_clear (tp); @@ -1714,7 +1711,6 @@ netif_wake_queue (dev); } spin_unlock(&tp->rx_lock); - } @@ -2558,6 +2554,8 @@ void *ioaddr = tp->mmio_addr; unsigned long flags; + pci_save_state (pdev, tp->pci_state); + if (!netif_running (dev)) return 0; @@ -2576,7 +2574,6 @@ spin_unlock_irqrestore (&tp->lock, flags); pci_set_power_state (pdev, 3); - pci_save_state (pdev, tp->pci_state); return 0; } @@ -2587,9 +2584,9 @@ struct net_device *dev = pci_get_drvdata (pdev); struct rtl8139_private *tp = dev->priv; + pci_restore_state (pdev, tp->pci_state); if (!netif_running (dev)) return 0; - pci_restore_state (pdev, tp->pci_state); pci_set_power_state (pdev, 0); rtl8139_init_ring (dev); rtl8139_hw_start (dev); diff -Nru a/drivers/net/8390.h b/drivers/net/8390.h --- a/drivers/net/8390.h Tue May 18 23:38:08 2004 +++ b/drivers/net/8390.h Tue May 18 23:38:08 2004 @@ -143,7 +143,7 @@ #define inb_p(_p) inb(_p) #define outb_p(_v,_p) outb(_v,_p) -#elif defined(CONFIG_NET_CBUS) +#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300) #define EI_SHIFT(x) (ei_local->reg_offset[x]) #else #define EI_SHIFT(x) (x) diff -Nru a/drivers/net/Kconfig b/drivers/net/Kconfig --- a/drivers/net/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/net/Kconfig Tue May 18 23:38:08 2004 @@ -1828,6 +1828,13 @@ Say Y here if you want to use the built-in 10/100 Fast ethernet controller on the Motorola ColdFire 5272 processor. +config NE_H8300 + bool "NE2000 compatible support for H8/300" + depends on H8300 && NET_ETHERNET + help + Say Y here if you want to use the NE2000 compatible + controller on the Renesas H8/300 processor. + endmenu # @@ -2479,16 +2486,6 @@ To compile this driver as a module, choose M here: the module will be called iph5526. - -config RCPCI - tristate "Red Creek Hardware VPN (EXPERIMENTAL)" - depends on NETDEVICES && EXPERIMENTAL && PCI && !64BIT - help - This is a driver for hardware which provides a Virtual Private - Network (VPN). Say Y if you have it. - - To compile this driver as a module, choose M here: the module - will be called rcpci. config SHAPER tristate "Traffic Shaper (EXPERIMENTAL)" diff -Nru a/drivers/net/Makefile b/drivers/net/Makefile --- a/drivers/net/Makefile Tue May 18 23:38:06 2004 +++ b/drivers/net/Makefile Tue May 18 23:38:06 2004 @@ -2,8 +2,6 @@ # Makefile for the Linux network (ethercard) device drivers. # -rcpci-objs := rcpci45.o rclanmtl.o - ifeq ($(CONFIG_ISDN_PPP),y) obj-$(CONFIG_ISDN) += slhc.o endif @@ -32,7 +30,6 @@ obj-$(CONFIG_OAKNET) += oaknet.o 8390.o obj-$(CONFIG_DGRS) += dgrs.o -obj-$(CONFIG_RCPCI) += rcpci.o obj-$(CONFIG_VORTEX) += 3c59x.o obj-$(CONFIG_TYPHOON) += typhoon.o obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o @@ -95,6 +92,7 @@ obj-$(CONFIG_NET_SB1250_MAC) += sb1250-mac.o obj-$(CONFIG_B44) += b44.o obj-$(CONFIG_FORCEDETH) += forcedeth.o +obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o obj-$(CONFIG_PPP) += ppp_generic.o slhc.o obj-$(CONFIG_PPP_ASYNC) += ppp_async.o diff -Nru a/drivers/net/Space.c b/drivers/net/Space.c --- a/drivers/net/Space.c Tue May 18 23:38:05 2004 +++ b/drivers/net/Space.c Tue May 18 23:38:05 2004 @@ -191,7 +191,8 @@ #ifdef CONFIG_E2100 /* Cabletron E21xx series. */ {e2100_probe, 0}, #endif -#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS) /* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */ +#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS) || \ + defined(CONFIG_NE_H8300) /* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */ {ne_probe, 0}, #endif #ifdef CONFIG_LANCE /* ISA/VLB (use pcnet32 for PCI cards) */ diff -Nru a/drivers/net/arcnet/com90xx.c b/drivers/net/arcnet/com90xx.c --- a/drivers/net/arcnet/com90xx.c Tue May 18 23:38:08 2004 +++ b/drivers/net/arcnet/com90xx.c Tue May 18 23:38:08 2004 @@ -155,7 +155,7 @@ ioaddr = *port; if (!request_region(*port, ARCNET_TOTAL_SIZE, "arcnet (90xx)")) { - BUGMSG2(D_INIT_REASONS, "(check_region)\n"); + BUGMSG2(D_INIT_REASONS, "(request_region)\n"); BUGMSG2(D_INIT_REASONS, "S1: "); BUGLVL(D_INIT_REASONS) numprint = 0; *port-- = ports[--numports]; @@ -214,7 +214,7 @@ BUGMSG2(D_INIT, "%lXh ", *p); if (!request_mem_region(*p, BUFFER_SIZE, "arcnet (90xx)")) { - BUGMSG2(D_INIT_REASONS, "(check_mem_region)\n"); + BUGMSG2(D_INIT_REASONS, "(request_mem_region)\n"); BUGMSG2(D_INIT_REASONS, "Stage 3: "); BUGLVL(D_INIT_REASONS) numprint = 0; *p-- = shmems[--numshmems]; diff -Nru a/drivers/net/auto_irq.c b/drivers/net/auto_irq.c --- a/drivers/net/auto_irq.c Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,68 +0,0 @@ -/* auto_irq.c: Auto-configure IRQ lines for linux. */ -/* - Written 1994 by Donald Becker. - - The author may be reached as becker@scyld.com - - This code is a general-purpose IRQ line detector for devices with - jumpered IRQ lines. If you can make the device raise an IRQ (and - that IRQ line isn't already being used), these routines will tell - you what IRQ line it's using -- perfect for those oh-so-cool boot-time - device probes! - - To use this, first call autoirq_setup(timeout). TIMEOUT is how many - 'jiffies' (1/100 sec.) to detect other devices that have active IRQ lines, - and can usually be zero at boot. 'autoirq_setup()' returns the bit - vector of nominally-available IRQ lines (lines may be physically in-use, - but not yet registered to a device). - Next, set up your device to trigger an interrupt. - Finally call autoirq_report(TIMEOUT) to find out which IRQ line was - most recently active. The TIMEOUT should usually be zero, but may - be set to the number of jiffies to wait for a slow device to raise an IRQ. - - The idea of using the setup timeout to filter out bogus IRQs came from - the serial driver. -*/ - - -#ifdef version -static const char *version= -"auto_irq.c:v1.11 Donald Becker (becker@scyld.com)"; -#endif - -#include -#include -#include -#include -#include -#include -#include - -static unsigned long irqs; - -void autoirq_setup(int waittime) -{ - irqs = probe_irq_on(); -} - -#define BUSY_LOOP_UNTIL(j) while ((long)(jiffies-(j)) < 0) ; -int autoirq_report(int waittime) -{ - unsigned long delay = jiffies + waittime; - BUSY_LOOP_UNTIL(delay) - return probe_irq_off(irqs); -} - -EXPORT_SYMBOL(autoirq_setup); -EXPORT_SYMBOL(autoirq_report); - - -/* - * Local variables: - * compile-command: "gcc -DKERNEL -Wall -O6 -fomit-frame-pointer -I/usr/src/linux/net/tcp -c auto_irq.c" - * version-control: t - * kept-new-versions: 5 - * c-indent-level: 4 - * tab-width: 4 - * End: - */ diff -Nru a/drivers/net/b44.c b/drivers/net/b44.c --- a/drivers/net/b44.c Tue May 18 23:38:06 2004 +++ b/drivers/net/b44.c Tue May 18 23:38:06 2004 @@ -27,8 +27,8 @@ #define DRV_MODULE_NAME "b44" #define PFX DRV_MODULE_NAME ": " -#define DRV_MODULE_VERSION "0.93" -#define DRV_MODULE_RELDATE "Mar, 2004" +#define DRV_MODULE_VERSION "0.94" +#define DRV_MODULE_RELDATE "May 4, 2004" #define B44_DEF_MSG_ENABLE \ (NETIF_MSG_DRV | \ @@ -96,7 +96,7 @@ static void b44_halt(struct b44 *); static void b44_init_rings(struct b44 *); -static int b44_init_hw(struct b44 *); +static void b44_init_hw(struct b44 *); static int b44_wait_bit(struct b44 *bp, unsigned long reg, u32 bit, unsigned long timeout, const int clear) @@ -331,6 +331,29 @@ return b44_wait_bit(bp, B44_EMAC_ISTAT, EMAC_INT_MII, 100, 0); } +/* miilib interface */ +/* FIXME FIXME: phy_id is ignored, bp->phy_addr use is unconditional + * due to code existing before miilib use was added to this driver. + * Someone should remove this artificial driver limitation in + * b44_{read,write}phy. bp->phy_addr itself is fine (and needed). + */ +static int b44_mii_read(struct net_device *dev, int phy_id, int location) +{ + u32 val; + struct b44 *bp = netdev_priv(dev); + int rc = b44_readphy(bp, location, &val); + if (rc) + return 0xffffffff; + return val; +} + +static void b44_mii_write(struct net_device *dev, int phy_id, int location, + int val) +{ + struct b44 *bp = netdev_priv(dev); + b44_writephy(bp, location, val); +} + static int b44_phy_reset(struct b44 *bp) { u32 val; @@ -771,7 +794,7 @@ static int b44_poll(struct net_device *netdev, int *budget) { - struct b44 *bp = netdev->priv; + struct b44 *bp = netdev_priv(netdev); int done; spin_lock_irq(&bp->lock); @@ -821,7 +844,7 @@ static irqreturn_t b44_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); unsigned long flags; u32 istat, imask; int handled = 0; @@ -858,7 +881,7 @@ static void b44_tx_timeout(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); printk(KERN_ERR PFX "%s: transmit timed out, resetting\n", dev->name); @@ -878,7 +901,7 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); dma_addr_t mapping; u32 len, entry, ctrl; @@ -932,7 +955,7 @@ static int b44_change_mtu(struct net_device *dev, int new_mtu) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); if (new_mtu < B44_MIN_MTU || new_mtu > B44_MAX_MTU) return -EINVAL; @@ -1161,7 +1184,7 @@ static int b44_set_mac_addr(struct net_device *dev, void *p) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); struct sockaddr *addr = p; if (netif_running(dev)) @@ -1180,15 +1203,16 @@ * packet processing. Invoked with bp->lock held. */ static void __b44_set_rx_mode(struct net_device *); -static int b44_init_hw(struct b44 *bp) +static void b44_init_hw(struct b44 *bp) { u32 val; b44_chip_reset(bp); b44_phy_reset(bp); b44_setup_phy(bp); - val = br32(B44_MAC_CTRL); - bw32(B44_MAC_CTRL, val | MAC_CTRL_CRC32_ENAB); + + /* Enable CRC32, set proper LED modes and power on PHY */ + bw32(B44_MAC_CTRL, MAC_CTRL_CRC32_ENAB | MAC_CTRL_PHY_LEDCTRL); bw32(B44_RCV_LAZY, (1 << RCV_LAZY_FC_SHIFT)); /* This sets the MAC address too. */ @@ -1212,13 +1236,11 @@ val = br32(B44_ENET_CTRL); bw32(B44_ENET_CTRL, (val | ENET_CTRL_ENABLE)); - - return 0; } static int b44_open(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); int err; err = b44_alloc_consistent(bp); @@ -1232,9 +1254,7 @@ spin_lock_irq(&bp->lock); b44_init_rings(bp); - err = b44_init_hw(bp); - if (err) - goto err_out_noinit; + b44_init_hw(bp); bp->flags |= B44_FLAG_INIT_COMPLETE; spin_unlock_irq(&bp->lock); @@ -1249,11 +1269,6 @@ return 0; -err_out_noinit: - b44_halt(bp); - b44_free_rings(bp); - spin_unlock_irq(&bp->lock); - free_irq(dev->irq, dev); err_out_free: b44_free_consistent(bp); return err; @@ -1273,7 +1288,7 @@ static int b44_close(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); netif_stop_queue(dev); @@ -1300,7 +1315,7 @@ static struct net_device_stats *b44_get_stats(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); struct net_device_stats *nstat = &bp->stats; struct b44_hw_stats *hwstat = &bp->hw_stats; @@ -1337,7 +1352,7 @@ return nstat; } -static void __b44_load_mcast(struct b44 *bp, struct net_device *dev) +static int __b44_load_mcast(struct b44 *bp, struct net_device *dev) { struct dev_mc_list *mclist; int i, num_ents; @@ -1347,12 +1362,15 @@ for (i = 0; mclist && i < num_ents; i++, mclist = mclist->next) { __b44_cam_write(bp, mclist->dmi_addr, i + 1); } + return i+1; } static void __b44_set_rx_mode(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); u32 val; + int i=0; + unsigned char zero[6] = {0,0,0,0,0,0}; val = br32(B44_RXCONFIG); val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI); @@ -1365,8 +1383,11 @@ if (dev->flags & IFF_ALLMULTI) val |= RXCONFIG_ALLMULTI; else - __b44_load_mcast(bp, dev); - + i=__b44_load_mcast(bp, dev); + + for(;i<64;i++) { + __b44_cam_write(bp, zero, i); + } bw32(B44_RXCONFIG, val); val = br32(B44_CAM_CTRL); bw32(B44_CAM_CTRL, val | CAM_CTRL_ENABLE); @@ -1375,295 +1396,252 @@ static void b44_set_rx_mode(struct net_device *dev) { - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); spin_lock_irq(&bp->lock); __b44_set_rx_mode(dev); spin_unlock_irq(&bp->lock); } -static int b44_ethtool_ioctl (struct net_device *dev, void __user *useraddr) +static u32 b44_get_msglevel(struct net_device *dev) { - struct b44 *bp = dev->priv; - struct pci_dev *pci_dev = bp->pdev; - u32 ethcmd; + struct b44 *bp = netdev_priv(dev); + return bp->msg_enable; +} - if (copy_from_user (ðcmd, useraddr, sizeof (ethcmd))) - return -EFAULT; +static void b44_set_msglevel(struct net_device *dev, u32 value) +{ + struct b44 *bp = netdev_priv(dev); + bp->msg_enable = value; +} - switch (ethcmd) { - case ETHTOOL_GDRVINFO:{ - struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO }; - strcpy (info.driver, DRV_MODULE_NAME); - strcpy (info.version, DRV_MODULE_VERSION); - memset(&info.fw_version, 0, sizeof(info.fw_version)); - strcpy (info.bus_info, pci_name(pci_dev)); - info.eedump_len = 0; - info.regdump_len = 0; - if (copy_to_user (useraddr, &info, sizeof (info))) - return -EFAULT; - return 0; - } +static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info) +{ + struct b44 *bp = netdev_priv(dev); + struct pci_dev *pci_dev = bp->pdev; - case ETHTOOL_GSET: { - struct ethtool_cmd cmd = { ETHTOOL_GSET }; + strcpy (info->driver, DRV_MODULE_NAME); + strcpy (info->version, DRV_MODULE_VERSION); + strcpy (info->bus_info, pci_name(pci_dev)); +} - if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) - return -EAGAIN; - cmd.supported = (SUPPORTED_Autoneg); - cmd.supported |= (SUPPORTED_100baseT_Half | - SUPPORTED_100baseT_Full | - SUPPORTED_10baseT_Half | - SUPPORTED_10baseT_Full | - SUPPORTED_MII); +static int b44_nway_reset(struct net_device *dev) +{ + struct b44 *bp = netdev_priv(dev); + u32 bmcr; + int r; - cmd.advertising = 0; - if (bp->flags & B44_FLAG_ADV_10HALF) - cmd.advertising |= ADVERTISE_10HALF; - if (bp->flags & B44_FLAG_ADV_10FULL) - cmd.advertising |= ADVERTISE_10FULL; - if (bp->flags & B44_FLAG_ADV_100HALF) - cmd.advertising |= ADVERTISE_100HALF; - if (bp->flags & B44_FLAG_ADV_100FULL) - cmd.advertising |= ADVERTISE_100FULL; - cmd.advertising |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; - cmd.speed = (bp->flags & B44_FLAG_100_BASE_T) ? - SPEED_100 : SPEED_10; - cmd.duplex = (bp->flags & B44_FLAG_FULL_DUPLEX) ? - DUPLEX_FULL : DUPLEX_HALF; - cmd.port = 0; - cmd.phy_address = bp->phy_addr; - cmd.transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ? - XCVR_INTERNAL : XCVR_EXTERNAL; - cmd.autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ? - AUTONEG_DISABLE : AUTONEG_ENABLE; - cmd.maxtxpkt = 0; - cmd.maxrxpkt = 0; - if (copy_to_user(useraddr, &cmd, sizeof(cmd))) - return -EFAULT; - return 0; + spin_lock_irq(&bp->lock); + b44_readphy(bp, MII_BMCR, &bmcr); + b44_readphy(bp, MII_BMCR, &bmcr); + r = -EINVAL; + if (bmcr & BMCR_ANENABLE) { + b44_writephy(bp, MII_BMCR, + bmcr | BMCR_ANRESTART); + r = 0; } - case ETHTOOL_SSET: { - struct ethtool_cmd cmd; + spin_unlock_irq(&bp->lock); - if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) - return -EAGAIN; + return r; +} - if (copy_from_user(&cmd, useraddr, sizeof(cmd))) - return -EFAULT; +static int b44_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct b44 *bp = netdev_priv(dev); - /* We do not support gigabit. */ - if (cmd.autoneg == AUTONEG_ENABLE) { - if (cmd.advertising & - (ADVERTISED_1000baseT_Half | - ADVERTISED_1000baseT_Full)) - return -EINVAL; - } else if ((cmd.speed != SPEED_100 && - cmd.speed != SPEED_10) || - (cmd.duplex != DUPLEX_HALF && - cmd.duplex != DUPLEX_FULL)) { - return -EINVAL; - } + if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) + return -EAGAIN; + cmd->supported = (SUPPORTED_Autoneg); + cmd->supported |= (SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_MII); + + cmd->advertising = 0; + if (bp->flags & B44_FLAG_ADV_10HALF) + cmd->advertising |= ADVERTISE_10HALF; + if (bp->flags & B44_FLAG_ADV_10FULL) + cmd->advertising |= ADVERTISE_10FULL; + if (bp->flags & B44_FLAG_ADV_100HALF) + cmd->advertising |= ADVERTISE_100HALF; + if (bp->flags & B44_FLAG_ADV_100FULL) + cmd->advertising |= ADVERTISE_100FULL; + cmd->advertising |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; + cmd->speed = (bp->flags & B44_FLAG_100_BASE_T) ? + SPEED_100 : SPEED_10; + cmd->duplex = (bp->flags & B44_FLAG_FULL_DUPLEX) ? + DUPLEX_FULL : DUPLEX_HALF; + cmd->port = 0; + cmd->phy_address = bp->phy_addr; + cmd->transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ? + XCVR_INTERNAL : XCVR_EXTERNAL; + cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ? + AUTONEG_DISABLE : AUTONEG_ENABLE; + cmd->maxtxpkt = 0; + cmd->maxrxpkt = 0; + return 0; +} - spin_lock_irq(&bp->lock); +static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct b44 *bp = netdev_priv(dev); - if (cmd.autoneg == AUTONEG_ENABLE) { - bp->flags &= ~B44_FLAG_FORCE_LINK; - bp->flags &= ~(B44_FLAG_ADV_10HALF | - B44_FLAG_ADV_10FULL | - B44_FLAG_ADV_100HALF | - B44_FLAG_ADV_100FULL); - if (cmd.advertising & ADVERTISE_10HALF) - bp->flags |= B44_FLAG_ADV_10HALF; - if (cmd.advertising & ADVERTISE_10FULL) - bp->flags |= B44_FLAG_ADV_10FULL; - if (cmd.advertising & ADVERTISE_100HALF) - bp->flags |= B44_FLAG_ADV_100HALF; - if (cmd.advertising & ADVERTISE_100FULL) - bp->flags |= B44_FLAG_ADV_100FULL; - } else { - bp->flags |= B44_FLAG_FORCE_LINK; - if (cmd.speed == SPEED_100) - bp->flags |= B44_FLAG_100_BASE_T; - if (cmd.duplex == DUPLEX_FULL) - bp->flags |= B44_FLAG_FULL_DUPLEX; - } + if (!(bp->flags & B44_FLAG_INIT_COMPLETE)) + return -EAGAIN; - b44_setup_phy(bp); + /* We do not support gigabit. */ + if (cmd->autoneg == AUTONEG_ENABLE) { + if (cmd->advertising & + (ADVERTISED_1000baseT_Half | + ADVERTISED_1000baseT_Full)) + return -EINVAL; + } else if ((cmd->speed != SPEED_100 && + cmd->speed != SPEED_10) || + (cmd->duplex != DUPLEX_HALF && + cmd->duplex != DUPLEX_FULL)) { + return -EINVAL; + } - spin_unlock_irq(&bp->lock); + spin_lock_irq(&bp->lock); - return 0; + if (cmd->autoneg == AUTONEG_ENABLE) { + bp->flags &= ~B44_FLAG_FORCE_LINK; + bp->flags &= ~(B44_FLAG_ADV_10HALF | + B44_FLAG_ADV_10FULL | + B44_FLAG_ADV_100HALF | + B44_FLAG_ADV_100FULL); + if (cmd->advertising & ADVERTISE_10HALF) + bp->flags |= B44_FLAG_ADV_10HALF; + if (cmd->advertising & ADVERTISE_10FULL) + bp->flags |= B44_FLAG_ADV_10FULL; + if (cmd->advertising & ADVERTISE_100HALF) + bp->flags |= B44_FLAG_ADV_100HALF; + if (cmd->advertising & ADVERTISE_100FULL) + bp->flags |= B44_FLAG_ADV_100FULL; + } else { + bp->flags |= B44_FLAG_FORCE_LINK; + if (cmd->speed == SPEED_100) + bp->flags |= B44_FLAG_100_BASE_T; + if (cmd->duplex == DUPLEX_FULL) + bp->flags |= B44_FLAG_FULL_DUPLEX; } - case ETHTOOL_GMSGLVL: { - struct ethtool_value edata = { ETHTOOL_GMSGLVL }; - edata.data = bp->msg_enable; - if (copy_to_user(useraddr, &edata, sizeof(edata))) - return -EFAULT; - return 0; - } - case ETHTOOL_SMSGLVL: { - struct ethtool_value edata; - if (copy_from_user(&edata, useraddr, sizeof(edata))) - return -EFAULT; - bp->msg_enable = edata.data; - return 0; - } - case ETHTOOL_NWAY_RST: { - u32 bmcr; - int r; + b44_setup_phy(bp); - spin_lock_irq(&bp->lock); - b44_readphy(bp, MII_BMCR, &bmcr); - b44_readphy(bp, MII_BMCR, &bmcr); - r = -EINVAL; - if (bmcr & BMCR_ANENABLE) { - b44_writephy(bp, MII_BMCR, - bmcr | BMCR_ANRESTART); - r = 0; - } - spin_unlock_irq(&bp->lock); + spin_unlock_irq(&bp->lock); - return r; - } - case ETHTOOL_GLINK: { - struct ethtool_value edata = { ETHTOOL_GLINK }; - edata.data = netif_carrier_ok(bp->dev) ? 1 : 0; - if (copy_to_user(useraddr, &edata, sizeof(edata))) - return -EFAULT; - return 0; - } - case ETHTOOL_GRINGPARAM: { - struct ethtool_ringparam ering = { ETHTOOL_GRINGPARAM }; + return 0; +} - ering.rx_max_pending = B44_RX_RING_SIZE - 1; - ering.rx_pending = bp->rx_pending; +static void b44_get_ringparam(struct net_device *dev, + struct ethtool_ringparam *ering) +{ + struct b44 *bp = netdev_priv(dev); - /* XXX ethtool lacks a tx_max_pending, oops... */ + ering->rx_max_pending = B44_RX_RING_SIZE - 1; + ering->rx_pending = bp->rx_pending; - if (copy_to_user(useraddr, &ering, sizeof(ering))) - return -EFAULT; - return 0; - } - case ETHTOOL_SRINGPARAM: { - struct ethtool_ringparam ering; + /* XXX ethtool lacks a tx_max_pending, oops... */ +} - if (copy_from_user(&ering, useraddr, sizeof(ering))) - return -EFAULT; +static int b44_set_ringparam(struct net_device *dev, + struct ethtool_ringparam *ering) +{ + struct b44 *bp = netdev_priv(dev); - if ((ering.rx_pending > B44_RX_RING_SIZE - 1) || - (ering.rx_mini_pending != 0) || - (ering.rx_jumbo_pending != 0) || - (ering.tx_pending > B44_TX_RING_SIZE - 1)) - return -EINVAL; + if ((ering->rx_pending > B44_RX_RING_SIZE - 1) || + (ering->rx_mini_pending != 0) || + (ering->rx_jumbo_pending != 0) || + (ering->tx_pending > B44_TX_RING_SIZE - 1)) + return -EINVAL; - spin_lock_irq(&bp->lock); + spin_lock_irq(&bp->lock); - bp->rx_pending = ering.rx_pending; - bp->tx_pending = ering.tx_pending; + bp->rx_pending = ering->rx_pending; + bp->tx_pending = ering->tx_pending; - b44_halt(bp); - b44_init_rings(bp); - b44_init_hw(bp); - netif_wake_queue(bp->dev); - spin_unlock_irq(&bp->lock); + b44_halt(bp); + b44_init_rings(bp); + b44_init_hw(bp); + netif_wake_queue(bp->dev); + spin_unlock_irq(&bp->lock); - b44_enable_ints(bp); - - return 0; - } - case ETHTOOL_GPAUSEPARAM: { - struct ethtool_pauseparam epause = { ETHTOOL_GPAUSEPARAM }; + b44_enable_ints(bp); + + return 0; +} - epause.autoneg = - (bp->flags & B44_FLAG_PAUSE_AUTO) != 0; - epause.rx_pause = - (bp->flags & B44_FLAG_RX_PAUSE) != 0; - epause.tx_pause = - (bp->flags & B44_FLAG_TX_PAUSE) != 0; - if (copy_to_user(useraddr, &epause, sizeof(epause))) - return -EFAULT; - return 0; - } - case ETHTOOL_SPAUSEPARAM: { - struct ethtool_pauseparam epause; +static void b44_get_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct b44 *bp = netdev_priv(dev); - if (copy_from_user(&epause, useraddr, sizeof(epause))) - return -EFAULT; + epause->autoneg = + (bp->flags & B44_FLAG_PAUSE_AUTO) != 0; + epause->rx_pause = + (bp->flags & B44_FLAG_RX_PAUSE) != 0; + epause->tx_pause = + (bp->flags & B44_FLAG_TX_PAUSE) != 0; +} - spin_lock_irq(&bp->lock); - if (epause.autoneg) - bp->flags |= B44_FLAG_PAUSE_AUTO; - else - bp->flags &= ~B44_FLAG_PAUSE_AUTO; - if (epause.rx_pause) - bp->flags |= B44_FLAG_RX_PAUSE; - else - bp->flags &= ~B44_FLAG_RX_PAUSE; - if (epause.tx_pause) - bp->flags |= B44_FLAG_TX_PAUSE; - else - bp->flags &= ~B44_FLAG_TX_PAUSE; - if (bp->flags & B44_FLAG_PAUSE_AUTO) { - b44_halt(bp); - b44_init_rings(bp); - b44_init_hw(bp); - } else { - __b44_set_flow_ctrl(bp, bp->flags); - } - spin_unlock_irq(&bp->lock); +static int b44_set_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct b44 *bp = netdev_priv(dev); - b44_enable_ints(bp); - - return 0; + spin_lock_irq(&bp->lock); + if (epause->autoneg) + bp->flags |= B44_FLAG_PAUSE_AUTO; + else + bp->flags &= ~B44_FLAG_PAUSE_AUTO; + if (epause->rx_pause) + bp->flags |= B44_FLAG_RX_PAUSE; + else + bp->flags &= ~B44_FLAG_RX_PAUSE; + if (epause->tx_pause) + bp->flags |= B44_FLAG_TX_PAUSE; + else + bp->flags &= ~B44_FLAG_TX_PAUSE; + if (bp->flags & B44_FLAG_PAUSE_AUTO) { + b44_halt(bp); + b44_init_rings(bp); + b44_init_hw(bp); + } else { + __b44_set_flow_ctrl(bp, bp->flags); } - }; + spin_unlock_irq(&bp->lock); - return -EOPNOTSUPP; + b44_enable_ints(bp); + + return 0; } +static struct ethtool_ops b44_ethtool_ops = { + .get_drvinfo = b44_get_drvinfo, + .get_settings = b44_get_settings, + .set_settings = b44_set_settings, + .nway_reset = b44_nway_reset, + .get_link = ethtool_op_get_link, + .get_ringparam = b44_get_ringparam, + .set_ringparam = b44_set_ringparam, + .get_pauseparam = b44_get_pauseparam, + .set_pauseparam = b44_set_pauseparam, + .get_msglevel = b44_get_msglevel, + .set_msglevel = b44_set_msglevel, +}; + static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) { struct mii_ioctl_data __user *data = (struct mii_ioctl_data __user *)&ifr->ifr_data; - struct b44 *bp = dev->priv; + struct b44 *bp = netdev_priv(dev); int err; - switch (cmd) { - case SIOCETHTOOL: - return b44_ethtool_ioctl(dev, (void __user*) ifr->ifr_data); - - case SIOCGMIIPHY: - data->phy_id = bp->phy_addr; - - /* fallthru */ - case SIOCGMIIREG: { - u32 mii_regval; - - spin_lock_irq(&bp->lock); - err = b44_readphy(bp, data->reg_num & 0x1f, &mii_regval); - spin_unlock_irq(&bp->lock); - - data->val_out = mii_regval; - - return err; - } - - case SIOCSMIIREG: - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - - spin_lock_irq(&bp->lock); - err = b44_writephy(bp, data->reg_num & 0x1f, data->val_in); - spin_unlock_irq(&bp->lock); - - return err; + spin_lock_irq(&bp->lock); + err = generic_mii_ioctl(&bp->mii_if, data, cmd, NULL); + spin_unlock_irq(&bp->lock); - default: - /* do nothing */ - break; - }; - return -EOPNOTSUPP; + return err; } /* Read 128-bytes of EEPROM. */ @@ -1772,7 +1750,7 @@ /* No interesting netdevice features in this card... */ dev->features |= 0; - bp = dev->priv; + bp = netdev_priv(dev); bp->pdev = pdev; bp->dev = dev; if (b44_debug >= 0) @@ -1806,6 +1784,7 @@ dev->watchdog_timeo = B44_TX_TIMEOUT; dev->change_mtu = b44_change_mtu; dev->irq = pdev->irq; + SET_ETHTOOL_OPS(dev, &b44_ethtool_ops); err = b44_get_invariants(bp); if (err) { @@ -1814,6 +1793,13 @@ goto err_out_iounmap; } + bp->mii_if.dev = dev; + bp->mii_if.mdio_read = b44_mii_read; + bp->mii_if.mdio_write = b44_mii_write; + bp->mii_if.phy_id = bp->phy_addr; + bp->mii_if.phy_id_mask = 0x1f; + bp->mii_if.reg_num_mask = 0x1f; + /* By default, advertise all speed/duplex settings. */ bp->flags |= (B44_FLAG_ADV_10HALF | B44_FLAG_ADV_10FULL | B44_FLAG_ADV_100HALF | B44_FLAG_ADV_100FULL); @@ -1859,8 +1845,10 @@ struct net_device *dev = pci_get_drvdata(pdev); if (dev) { + struct b44 *bp = netdev_priv(dev); + unregister_netdev(dev); - iounmap((void *) ((struct b44 *)(dev->priv))->regs); + iounmap((void *) bp->regs); free_netdev(dev); pci_release_regions(pdev); pci_disable_device(pdev); diff -Nru a/drivers/net/b44.h b/drivers/net/b44.h --- a/drivers/net/b44.h Tue May 18 23:38:08 2004 +++ b/drivers/net/b44.h Tue May 18 23:38:08 2004 @@ -542,6 +542,8 @@ u8 phy_addr; u8 mdc_port; u8 core_unit; + + struct mii_if_info mii_if; }; #endif /* _B44_H */ diff -Nru a/drivers/net/fealnx.c b/drivers/net/fealnx.c --- a/drivers/net/fealnx.c Tue May 18 23:38:08 2004 +++ b/drivers/net/fealnx.c Tue May 18 23:38:08 2004 @@ -84,6 +84,7 @@ #include #include #include +#include #include /* Processor type for cache alignment. */ #include @@ -233,15 +234,29 @@ RxErr = 0x00000002, /* receive error */ }; -/* Bits in the NetworkConfig register. */ +/* Bits in the NetworkConfig register, W for writing, R for reading */ +/* FIXME: some names are invented by me. Marked with (name?) */ +/* If you have docs and know bit names, please fix 'em */ enum rx_mode_bits { - RxModeMask = 0xe0, - PROM = 0x80, /* promiscuous mode */ - AB = 0x40, /* accept broadcast */ - AM = 0x20, /* accept mutlicast */ - ARP = 0x08, /* receive runt pkt */ - ALP = 0x04, /* receive long pkt */ - SEP = 0x02, /* receive error pkt */ + CR_W_ENH = 0x02000000, /* enhanced mode (name?) */ + CR_W_FD = 0x00100000, /* full duplex */ + CR_W_PS10 = 0x00080000, /* 10 mbit */ + CR_W_TXEN = 0x00040000, /* tx enable (name?) */ + CR_W_PS1000 = 0x00010000, /* 1000 mbit */ + /* CR_W_RXBURSTMASK= 0x00000e00, Im unsure about this */ + CR_W_RXMODEMASK = 0x000000e0, + CR_W_PROM = 0x00000080, /* promiscuous mode */ + CR_W_AB = 0x00000040, /* accept broadcast */ + CR_W_AM = 0x00000020, /* accept mutlicast */ + CR_W_ARP = 0x00000008, /* receive runt pkt */ + CR_W_ALP = 0x00000004, /* receive long pkt */ + CR_W_SEP = 0x00000002, /* receive error pkt */ + CR_W_RXEN = 0x00000001, /* rx enable (unicast?) (name?) */ + + CR_R_TXSTOP = 0x04000000, /* tx stopped (name?) */ + CR_R_FD = 0x00100000, /* full duplex detected */ + CR_R_PS10 = 0x00080000, /* 10 mbit detected */ + CR_R_RXSTOP = 0x00008000, /* rx stopped (name?) */ }; /* The Tulip Rx and Tx buffer descriptors. */ @@ -375,10 +390,7 @@ #define LXT1000_Full 0x200 // 89/12/29 add, for phy specific status register, levelone phy, (end) -/* for 3-in-1 case */ -#define PS10 0x00080000 -#define FD 0x00100000 -#define PS1000 0x00010000 +/* for 3-in-1 case, BMCRSR register */ #define LinkIsUp2 0x00040000 /* for PHY */ @@ -400,6 +412,12 @@ /* Media monitoring timer. */ struct timer_list timer; + /* Reset timer */ + struct timer_list reset_timer; + int reset_timer_armed; + unsigned long crvalue_sv; + unsigned long imrvalue_sv; + /* Frequently used values: keep some adjacent for cache effect. */ int flags; struct pci_dev *pci_dev; @@ -435,49 +453,44 @@ static void getlinktype(struct net_device *dev); static void getlinkstatus(struct net_device *dev); static void netdev_timer(unsigned long data); +static void reset_timer(unsigned long data); static void tx_timeout(struct net_device *dev); static void init_ring(struct net_device *dev); static int start_tx(struct sk_buff *skb, struct net_device *dev); static irqreturn_t intr_handler(int irq, void *dev_instance, struct pt_regs *regs); static int netdev_rx(struct net_device *dev); static void set_rx_mode(struct net_device *dev); +static void __set_rx_mode(struct net_device *dev); static struct net_device_stats *get_stats(struct net_device *dev); static int mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); static struct ethtool_ops netdev_ethtool_ops; static int netdev_close(struct net_device *dev); static void reset_rx_descriptors(struct net_device *dev); +static void reset_tx_descriptors(struct net_device *dev); -void stop_nic_tx(long ioaddr, long crvalue) +static void stop_nic_rx(long ioaddr, long crvalue) { - writel(crvalue & (~0x40000), ioaddr + TCRRCR); - - /* wait for tx stop */ - { - int i = 0, delay = 0x1000; - - while ((!(readl(ioaddr + TCRRCR) & 0x04000000)) && (i < delay)) { - ++i; - } + int delay = 0x1000; + writel(crvalue & ~(CR_W_RXEN), ioaddr + TCRRCR); + while (--delay) { + if ( (readl(ioaddr + TCRRCR) & CR_R_RXSTOP) == CR_R_RXSTOP) + break; } } -void stop_nic_rx(long ioaddr, long crvalue) +static void stop_nic_rxtx(long ioaddr, long crvalue) { - writel(crvalue & (~0x1), ioaddr + TCRRCR); - - /* wait for rx stop */ - { - int i = 0, delay = 0x1000; - - while ((!(readl(ioaddr + TCRRCR) & 0x00008000)) && (i < delay)) { - ++i; - } + int delay = 0x1000; + writel(crvalue & ~(CR_W_RXEN+CR_W_TXEN), ioaddr + TCRRCR); + while (--delay) { + if ( (readl(ioaddr + TCRRCR) & (CR_R_RXSTOP+CR_R_TXSTOP)) + == (CR_R_RXSTOP+CR_R_TXSTOP) ) + break; } } - static int __devinit fealnx_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -495,7 +508,7 @@ #ifndef MODULE static int printed_version; if (!printed_version++) - printk (version); + printk(version); #endif card_idx++; @@ -622,7 +635,7 @@ np->phys[0] = 32; /* 89/6/23 add, (begin) */ /* get phy type */ - if (readl(dev->base_addr + PHYIDENTIFIER) == MysonPHYID) + if (readl(ioaddr + PHYIDENTIFIER) == MysonPHYID) np->PHYType = MysonPHY; else np->PHYType = OtherPHY; @@ -657,7 +670,7 @@ if (np->flags == HAS_MII_XCVR) mdio_write(dev, np->phys[0], MII_ADVERTISE, ADVERTISE_FULL); else - writel(ADVERTISE_FULL, dev->base_addr + ANARANLPAR); + writel(ADVERTISE_FULL, ioaddr + ANARANLPAR); np->mii.force_media = 1; } @@ -669,7 +682,7 @@ dev->set_multicast_list = &set_rx_mode; dev->do_ioctl = &mii_ioctl; dev->ethtool_ops = &netdev_ethtool_ops; - dev->tx_timeout = tx_timeout; + dev->tx_timeout = &tx_timeout; dev->watchdog_timeo = TX_TIMEOUT; err = register_netdev(dev); @@ -699,6 +712,7 @@ return err; } + static void __devexit fealnx_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -721,42 +735,6 @@ printk(KERN_ERR "fealnx: remove for unknown device\n"); } -unsigned int m80x_read_tick(void) -/* function: Reads the Timer tick count register which decrements by 2 from */ -/* 65536 to 0 every 1/36.414 of a second. Each 2 decrements of the *//* count represents 838 nsec's. */ -/* input : none. */ -/* output : none. */ -{ - unsigned char tmp; - int value; - - writeb((char) 0x06, 0x43); // Command 8254 to latch T0's count - - // now read the count. - tmp = (unsigned char) readb(0x40); - value = ((int) tmp) << 8; - tmp = (unsigned char) readb(0x40); - value |= (((int) tmp) & 0xff); - return (value); -} - - -void m80x_delay(unsigned int interval) -/* function: to wait for a specified time. */ -/* input : interval ... the specified time. */ -/* output : none. */ -{ - unsigned int interval1, interval2, i = 0; - - interval1 = m80x_read_tick(); // get initial value - do { - interval2 = m80x_read_tick(); - if (interval1 < interval2) - interval1 = interval2; - ++i; - } while (((interval1 - interval2) < (ushort) interval) && (i < 65535)); -} - static ulong m80x_send_cmd_to_phy(long miiport, int opcode, int phyad, int regad) { @@ -796,7 +774,7 @@ /* high MDC */ miir |= MASK_MIIR_MII_MDC; writel(miir, miiport); - m80x_delay(30); + udelay(30); /* next */ mask >>= 1; @@ -831,7 +809,7 @@ /* high MDC, and wait */ miir |= MASK_MIIR_MII_MDC; writel(miir, miiport); - m80x_delay((int) 30); + udelay(30); /* next */ mask >>= 1; @@ -873,8 +851,6 @@ /* low MDC */ miir &= ~MASK_MIIR_MII_MDC; writel(miir, miiport); - - return; } @@ -949,7 +925,7 @@ np->imrvalue = TUNF | CNTOVF | RBU | TI | RI; if (np->pci_dev->device == 0x891) { np->bcrvalue |= 0x200; /* set PROG bit */ - np->crvalue |= 0x02000000; /* set enhanced bit */ + np->crvalue |= CR_W_ENH; /* set enhanced bit */ np->imrvalue |= ETI; } writel(np->bcrvalue, ioaddr + BCR); @@ -957,7 +933,7 @@ if (dev->if_port == 0) dev->if_port = np->default_port; - writel(0, dev->base_addr + RXPDR); + writel(0, ioaddr + RXPDR); // 89/9/1 modify, // np->crvalue = 0x00e40001; /* tx store and forward, tx/rx enable */ np->crvalue |= 0x00e40001; /* tx store and forward, tx/rx enable */ @@ -965,7 +941,7 @@ getlinkstatus(dev); if (np->linkok) getlinktype(dev); - set_rx_mode(dev); + __set_rx_mode(dev); netif_start_queue(dev); @@ -985,6 +961,11 @@ /* timer handler */ add_timer(&np->timer); + init_timer(&np->reset_timer); + np->reset_timer.data = (unsigned long) dev; + np->reset_timer.function = &reset_timer; + np->reset_timer_armed = 0; + return 0; } @@ -1005,8 +986,7 @@ np->linkok = 1; return; } - // delay - m80x_delay(100); + udelay(100); } } else { for (i = 0; i < DelayTime; ++i) { @@ -1014,8 +994,7 @@ np->linkok = 1; return; } - // delay - m80x_delay(100); + udelay(100); } } } @@ -1026,11 +1005,11 @@ struct netdev_private *np = dev->priv; if (np->PHYType == MysonPHY) { /* 3-in-1 case */ - if (readl(dev->base_addr + TCRRCR) & FD) + if (readl(dev->base_addr + TCRRCR) & CR_R_FD) np->duplexmode = 2; /* full duplex */ else np->duplexmode = 1; /* half duplex */ - if (readl(dev->base_addr + TCRRCR) & PS10) + if (readl(dev->base_addr + TCRRCR) & CR_R_PS10) np->line_speed = 1; /* 10M */ else np->line_speed = 2; /* 100M */ @@ -1112,19 +1091,18 @@ else np->line_speed = 1; /* 10M */ } - // chage crvalue - // np->crvalue&=(~PS10)&(~FD); - np->crvalue &= (~PS10) & (~FD) & (~PS1000); + np->crvalue &= (~CR_W_PS10) & (~CR_W_FD) & (~CR_W_PS1000); if (np->line_speed == 1) - np->crvalue |= PS10; + np->crvalue |= CR_W_PS10; else if (np->line_speed == 3) - np->crvalue |= PS1000; + np->crvalue |= CR_W_PS1000; if (np->duplexmode == 2) - np->crvalue |= FD; + np->crvalue |= CR_W_FD; } } +/* Take lock before calling this */ static void allocate_rx_buffers(struct net_device *dev) { struct netdev_private *np = dev->priv; @@ -1134,15 +1112,17 @@ struct sk_buff *skb; skb = dev_alloc_skb(np->rx_buf_sz); - np->lack_rxbuf->skbuff = skb; - if (skb == NULL) break; /* Better luck next round. */ + while (np->lack_rxbuf->skbuff) + np->lack_rxbuf = np->lack_rxbuf->next_desc_logical; + skb->dev = dev; /* Mark as being used by this device. */ + np->lack_rxbuf->skbuff = skb; np->lack_rxbuf->buffer = pci_map_single(np->pci_dev, skb->tail, np->rx_buf_sz, PCI_DMA_FROMDEVICE); - np->lack_rxbuf = np->lack_rxbuf->next_desc_logical; + np->lack_rxbuf->status = RXOWN; ++np->really_rx_count; } } @@ -1153,22 +1133,23 @@ struct net_device *dev = (struct net_device *) data; struct netdev_private *np = dev->priv; long ioaddr = dev->base_addr; - int next_tick = 10 * HZ; int old_crvalue = np->crvalue; unsigned int old_linkok = np->linkok; + unsigned long flags; if (debug) printk(KERN_DEBUG "%s: Media selection timer tick, status %8.8x " "config %8.8x.\n", dev->name, readl(ioaddr + ISR), readl(ioaddr + TCRRCR)); + spin_lock_irqsave(&np->lock, flags); + if (np->flags == HAS_MII_XCVR) { getlinkstatus(dev); if ((old_linkok == 0) && (np->linkok == 1)) { /* we need to detect the media type again */ getlinktype(dev); if (np->crvalue != old_crvalue) { - stop_nic_tx(ioaddr, np->crvalue); - stop_nic_rx(ioaddr, np->crvalue & (~0x40000)); + stop_nic_rxtx(ioaddr, np->crvalue); writel(np->crvalue, ioaddr + TCRRCR); } } @@ -1176,69 +1157,120 @@ allocate_rx_buffers(dev); - np->timer.expires = RUN_AT(next_tick); + spin_unlock_irqrestore(&np->lock, flags); + + np->timer.expires = RUN_AT(10 * HZ); add_timer(&np->timer); } -static void tx_timeout(struct net_device *dev) +/* Take lock before calling */ +/* Reset chip and disable rx, tx and interrupts */ +static void reset_and_disable_rxtx(struct net_device *dev) { - struct netdev_private *np = dev->priv; long ioaddr = dev->base_addr; - int i; - - printk(KERN_WARNING "%s: Transmit timed out, status %8.8x," - " resetting...\n", dev->name, readl(ioaddr + ISR)); - - { - - printk(KERN_DEBUG " Rx ring %p: ", np->rx_ring); - for (i = 0; i < RX_RING_SIZE; i++) - printk(" %8.8x", (unsigned int) np->rx_ring[i].status); - printk("\n" KERN_DEBUG " Tx ring %p: ", np->tx_ring); - for (i = 0; i < TX_RING_SIZE; i++) - printk(" %4.4x", np->tx_ring[i].status); - printk("\n"); - } - - /* Reinit. Gross */ + int delay=51; /* Reset the chip's Tx and Rx processes. */ - stop_nic_tx(ioaddr, 0); - reset_rx_descriptors(dev); + stop_nic_rxtx(ioaddr, 0); /* Disable interrupts by clearing the interrupt mask. */ - writel(0x0000, ioaddr + IMR); + writel(0, ioaddr + IMR); /* Reset the chip to erase previous misconfiguration. */ writel(0x00000001, ioaddr + BCR); /* Ueimor: wait for 50 PCI cycles (and flush posted writes btw). - We surely wait too long (address+data phase). Who cares ? */ - for (i = 0; i < 50; i++) { + We surely wait too long (address+data phase). Who cares? */ + while (--delay) { readl(ioaddr + BCR); rmb(); } +} + + +/* Take lock before calling */ +/* Restore chip after reset */ +static void enable_rxtx(struct net_device *dev) +{ + struct netdev_private *np = dev->priv; + long ioaddr = dev->base_addr; - writel((np->cur_tx - np->tx_ring)*sizeof(struct fealnx_desc) + - np->tx_ring_dma, ioaddr + TXLBA); - writel((np->cur_rx - np->rx_ring)*sizeof(struct fealnx_desc) + - np->rx_ring_dma, ioaddr + RXLBA); + reset_rx_descriptors(dev); + + writel(np->tx_ring_dma + ((char*)np->cur_tx - (char*)np->tx_ring), + ioaddr + TXLBA); + writel(np->rx_ring_dma + ((char*)np->cur_rx - (char*)np->rx_ring), + ioaddr + RXLBA); writel(np->bcrvalue, ioaddr + BCR); - writel(0, dev->base_addr + RXPDR); - set_rx_mode(dev); + writel(0, ioaddr + RXPDR); + __set_rx_mode(dev); /* changes np->crvalue, writes it into TCRRCR */ + /* Clear and Enable interrupts by setting the interrupt mask. */ writel(FBE | TUNF | CNTOVF | RBU | TI | RI, ioaddr + ISR); writel(np->imrvalue, ioaddr + IMR); - writel(0, dev->base_addr + TXPDR); + writel(0, ioaddr + TXPDR); +} + + +static void reset_timer(unsigned long data) +{ + struct net_device *dev = (struct net_device *) data; + struct netdev_private *np = dev->priv; + unsigned long flags; + + printk(KERN_WARNING "%s: resetting tx and rx machinery\n", dev->name); + + spin_lock_irqsave(&np->lock, flags); + np->crvalue = np->crvalue_sv; + np->imrvalue = np->imrvalue_sv; + + reset_and_disable_rxtx(dev); + /* works for me without this: + reset_tx_descriptors(dev); */ + enable_rxtx(dev); + netif_start_queue(dev); /* FIXME: or netif_wake_queue(dev); ? */ + + np->reset_timer_armed = 0; + + spin_unlock_irqrestore(&np->lock, flags); +} + + +static void tx_timeout(struct net_device *dev) +{ + struct netdev_private *np = dev->priv; + long ioaddr = dev->base_addr; + unsigned long flags; + int i; + + printk(KERN_WARNING "%s: Transmit timed out, status %8.8x," + " resetting...\n", dev->name, readl(ioaddr + ISR)); + + { + printk(KERN_DEBUG " Rx ring %p: ", np->rx_ring); + for (i = 0; i < RX_RING_SIZE; i++) + printk(" %8.8x", (unsigned int) np->rx_ring[i].status); + printk("\n" KERN_DEBUG " Tx ring %p: ", np->tx_ring); + for (i = 0; i < TX_RING_SIZE; i++) + printk(" %4.4x", np->tx_ring[i].status); + printk("\n"); + } + + spin_lock_irqsave(&np->lock, flags); + + reset_and_disable_rxtx(dev); + reset_tx_descriptors(dev); + enable_rxtx(dev); + + spin_unlock_irqrestore(&np->lock, flags); dev->trans_start = jiffies; np->stats.tx_errors++; - - return; + netif_wake_queue(dev); /* or .._start_.. ?? */ } @@ -1251,7 +1283,7 @@ /* initialize rx variables */ np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32); np->cur_rx = &np->rx_ring[0]; - np->lack_rxbuf = NULL; + np->lack_rxbuf = np->rx_ring; np->really_rx_count = 0; /* initial rx descriptors. */ @@ -1294,6 +1326,7 @@ for (i = 0; i < TX_RING_SIZE; i++) { np->tx_ring[i].status = 0; + /* do we need np->tx_ring[i].control = XXX; ?? */ np->tx_ring[i].next_desc = np->tx_ring_dma + (i + 1)*sizeof(struct fealnx_desc); np->tx_ring[i].next_desc_logical = &np->tx_ring[i + 1]; @@ -1341,7 +1374,7 @@ np->cur_tx_copy->control |= (BPT << TBSShift); /* buffer size */ /* for the last descriptor */ - next = (struct fealnx *) np->cur_tx_copy.next_desc_logical; + next = np->cur_tx_copy->next_desc_logical; next->skbuff = skb; next->control = TXIC | TXLD | CRCEnable | PADEnable; next->control |= (skb->len << PKTSShift); /* pkt size */ @@ -1383,35 +1416,59 @@ } -void free_one_rx_descriptor(struct netdev_private *np) +/* Take lock before calling */ +/* Chip probably hosed tx ring. Clean up. */ +static void reset_tx_descriptors(struct net_device *dev) { - if (np->really_rx_count == RX_RING_SIZE) - np->cur_rx->status = RXOWN; - else { - np->lack_rxbuf->skbuff = np->cur_rx->skbuff; - np->lack_rxbuf->buffer = np->cur_rx->buffer; - np->lack_rxbuf->status = RXOWN; - ++np->really_rx_count; - np->lack_rxbuf = np->lack_rxbuf->next_desc_logical; + struct netdev_private *np = dev->priv; + struct fealnx_desc *cur; + int i; + + /* initialize tx variables */ + np->cur_tx = &np->tx_ring[0]; + np->cur_tx_copy = &np->tx_ring[0]; + np->really_tx_count = 0; + np->free_tx_count = TX_RING_SIZE; + + for (i = 0; i < TX_RING_SIZE; i++) { + cur = &np->tx_ring[i]; + if (cur->skbuff) { + pci_unmap_single(np->pci_dev, cur->buffer, + cur->skbuff->len, PCI_DMA_TODEVICE); + dev_kfree_skb(cur->skbuff); + /* or dev_kfree_skb_irq(cur->skbuff); ? */ + cur->skbuff = NULL; + } + cur->status = 0; + cur->control = 0; /* needed? */ + /* probably not needed. We do it for purely paranoid reasons */ + cur->next_desc = np->tx_ring_dma + + (i + 1)*sizeof(struct fealnx_desc); + cur->next_desc_logical = &np->tx_ring[i + 1]; } - np->cur_rx = np->cur_rx->next_desc_logical; + /* for the last tx descriptor */ + np->tx_ring[TX_RING_SIZE - 1].next_desc = np->tx_ring_dma; + np->tx_ring[TX_RING_SIZE - 1].next_desc_logical = &np->tx_ring[0]; } -void reset_rx_descriptors(struct net_device *dev) +/* Take lock and stop rx before calling this */ +static void reset_rx_descriptors(struct net_device *dev) { struct netdev_private *np = dev->priv; - - stop_nic_rx(dev->base_addr, np->crvalue); - - while (!(np->cur_rx->status & RXOWN)) - free_one_rx_descriptor(np); + struct fealnx_desc *cur = np->cur_rx; + int i; allocate_rx_buffers(dev); - writel(np->rx_ring_dma + (np->cur_rx - np->rx_ring), + for (i = 0; i < RX_RING_SIZE; i++) { + if (cur->skbuff) + cur->status = RXOWN; + cur = cur->next_desc_logical; + } + + writel(np->rx_ring_dma + ((char*)np->cur_rx - (char*)np->rx_ring), dev->base_addr + RXLBA); - writel(np->crvalue, dev->base_addr + TCRRCR); } @@ -1421,16 +1478,14 @@ { struct net_device *dev = (struct net_device *) dev_instance; struct netdev_private *np = dev->priv; - long ioaddr, boguscnt = max_interrupt_work; + long ioaddr = dev->base_addr; + long boguscnt = max_interrupt_work; unsigned int num_tx = 0; int handled = 0; spin_lock(&np->lock); - writel(0, dev->base_addr + IMR); - - ioaddr = dev->base_addr; - np = dev->priv; + writel(0, ioaddr + IMR); do { u32 intr_status = readl(ioaddr + ISR); @@ -1471,8 +1526,11 @@ if (intr_status & (RI | RBU)) { if (intr_status & RI) netdev_rx(dev); - else + else { + stop_nic_rx(ioaddr, np->crvalue); reset_rx_descriptors(dev); + writel(np->crvalue, ioaddr + TCRRCR); + } } while (np->really_tx_count) { @@ -1490,7 +1548,7 @@ if (tx_status & TXOWN) break; - if (!(np->crvalue & 0x02000000)) { + if (!(np->crvalue & CR_W_ENH)) { if (tx_status & (CSL | LC | EC | UDF | HF)) { np->stats.tx_errors++; if (tx_status & EC) @@ -1539,7 +1597,7 @@ netif_wake_queue(dev); /* read transmit status for enhanced mode only */ - if (np->crvalue & 0x02000000) { + if (np->crvalue & CR_W_ENH) { long data; data = readl(ioaddr + TSR); @@ -1552,6 +1610,20 @@ if (--boguscnt < 0) { printk(KERN_WARNING "%s: Too much work at interrupt, " "status=0x%4.4x.\n", dev->name, intr_status); + if (!np->reset_timer_armed) { + np->reset_timer_armed = 1; + np->reset_timer.expires = RUN_AT(HZ/2); + add_timer(&np->reset_timer); + stop_nic_rxtx(ioaddr, 0); + netif_stop_queue(dev); + /* or netif_tx_disable(dev); ?? */ + /* Prevent other paths from enabling tx,rx,intrs */ + np->crvalue_sv = np->crvalue; + np->imrvalue_sv = np->imrvalue; + np->crvalue &= ~(CR_W_TXEN | CR_W_RXEN); /* or simply = 0? */ + np->imrvalue = 0; + } + break; } } while (1); @@ -1580,9 +1652,10 @@ static int netdev_rx(struct net_device *dev) { struct netdev_private *np = dev->priv; + long ioaddr = dev->base_addr; /* If EOP is set on the next entry, it's a new packet. Send it up. */ - while (!(np->cur_rx->status & RXOWN)) { + while (!(np->cur_rx->status & RXOWN) && np->cur_rx->skbuff) { s32 rx_status = np->cur_rx->status; if (np->really_rx_count == 0) @@ -1634,11 +1707,20 @@ np->stats.rx_length_errors++; /* free all rx descriptors related this long pkt */ - for (i = 0; i < desno; ++i) - free_one_rx_descriptor(np); + for (i = 0; i < desno; ++i) { + if (!np->cur_rx->skbuff) { + printk(KERN_DEBUG + "%s: I'm scared\n", dev->name); + break; + } + np->cur_rx->status = RXOWN; + np->cur_rx = np->cur_rx->next_desc_logical; + } continue; - } else { /* something error, need to reset this chip */ + } else { /* rx error, need to reset this chip */ + stop_nic_rx(ioaddr, np->crvalue); reset_rx_descriptors(dev); + writel(np->crvalue, ioaddr + TCRRCR); } break; /* exit the while loop */ } @@ -1685,8 +1767,6 @@ PCI_DMA_FROMDEVICE); skb_put(skb = np->cur_rx->skbuff, pkt_len); np->cur_rx->skbuff = NULL; - if (np->really_rx_count == RX_RING_SIZE) - np->lack_rxbuf = np->cur_rx; --np->really_rx_count; } skb->protocol = eth_type_trans(skb, dev); @@ -1696,24 +1776,7 @@ np->stats.rx_bytes += pkt_len; } - if (np->cur_rx->skbuff == NULL) { - struct sk_buff *skb; - - skb = dev_alloc_skb(np->rx_buf_sz); - - if (skb != NULL) { - skb->dev = dev; /* Mark as being used by this device. */ - np->cur_rx->buffer = pci_map_single(np->pci_dev, - skb->tail, - np->rx_buf_sz, - PCI_DMA_FROMDEVICE); - np->cur_rx->skbuff = skb; - ++np->really_rx_count; - } - } - - if (np->cur_rx->skbuff != NULL) - free_one_rx_descriptor(np); + np->cur_rx = np->cur_rx->next_desc_logical; } /* end of while loop */ /* allocate skb for rx buffers */ @@ -1737,8 +1800,21 @@ return &np->stats; } + +/* for dev->set_multicast_list */ static void set_rx_mode(struct net_device *dev) { + spinlock_t *lp = &((struct netdev_private *)dev->priv)->lock; + unsigned long flags; + spin_lock_irqsave(lp, flags); + __set_rx_mode(dev); + spin_unlock_irqrestore(&lp, flags); +} + + +/* Take lock before calling */ +static void __set_rx_mode(struct net_device *dev) +{ struct netdev_private *np = dev->priv; long ioaddr = dev->base_addr; u32 mc_filter[2]; /* Multicast hash filter */ @@ -1748,12 +1824,12 @@ /* Unconditionally log net taps. */ printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); memset(mc_filter, 0xff, sizeof(mc_filter)); - rx_mode = PROM | AB | AM; + rx_mode = CR_W_PROM | CR_W_AB | CR_W_AM; } else if ((dev->mc_count > multicast_filter_limit) || (dev->flags & IFF_ALLMULTI)) { /* Too many to match, or accept all multicasts. */ memset(mc_filter, 0xff, sizeof(mc_filter)); - rx_mode = AB | AM; + rx_mode = CR_W_AB | CR_W_AM; } else { struct dev_mc_list *mclist; int i; @@ -1765,26 +1841,25 @@ bit = (ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26) ^ 0x3F; mc_filter[bit >> 5] |= (1 << bit); } - rx_mode = AB | AM; + rx_mode = CR_W_AB | CR_W_AM; } - stop_nic_tx(ioaddr, np->crvalue); - stop_nic_rx(ioaddr, np->crvalue & (~0x40000)); + stop_nic_rxtx(ioaddr, np->crvalue); writel(mc_filter[0], ioaddr + MAR0); writel(mc_filter[1], ioaddr + MAR1); - np->crvalue &= ~RxModeMask; + np->crvalue &= ~CR_W_RXMODEMASK; np->crvalue |= rx_mode; writel(np->crvalue, ioaddr + TCRRCR); } -static void netdev_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info) +static void netdev_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { struct netdev_private *np = dev->priv; - strcpy (info->driver, DRV_NAME); - strcpy (info->version, DRV_VERSION); - strcpy (info->bus_info, pci_name(np->pci_dev)); + strcpy(info->driver, DRV_NAME); + strcpy(info->version, DRV_VERSION); + strcpy(info->bus_info, pci_name(np->pci_dev)); } static int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) @@ -1874,10 +1949,10 @@ writel(0x0000, ioaddr + IMR); /* Stop the chip's Tx and Rx processes. */ - stop_nic_tx(ioaddr, 0); - stop_nic_rx(ioaddr, 0); + stop_nic_rxtx(ioaddr, 0); del_timer_sync(&np->timer); + del_timer_sync(&np->reset_timer); free_irq(dev->irq, dev); @@ -1928,7 +2003,7 @@ { /* when a module, this is printed whether or not devices are found in probe */ #ifdef MODULE - printk (version); + printk(version); #endif return pci_module_init(&fealnx_driver); diff -Nru a/drivers/net/gt96100eth.c b/drivers/net/gt96100eth.c --- a/drivers/net/gt96100eth.c Tue May 18 23:38:08 2004 +++ b/drivers/net/gt96100eth.c Tue May 18 23:38:08 2004 @@ -1070,22 +1070,18 @@ { int retval; - MOD_INC_USE_COUNT; - dbg(2, "%s: dev=%p\n", __FUNCTION__, dev); // Initialize and startup the GT-96100 ethernet port if ((retval = gt96100_init(dev))) { err("error in gt96100_init\n"); free_irq(dev->irq, dev); - MOD_DEC_USE_COUNT; return retval; } if ((retval = request_irq(dev->irq, >96100_interrupt, SA_SHIRQ, dev->name, dev))) { err("unable to get IRQ %d\n", dev->irq); - MOD_DEC_USE_COUNT; return retval; } @@ -1106,8 +1102,6 @@ } free_irq(dev->irq, dev); - - MOD_DEC_USE_COUNT; return 0; } diff -Nru a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c --- a/drivers/net/hamradio/dmascc.c Tue May 18 23:38:07 2004 +++ b/drivers/net/hamradio/dmascc.c Tue May 18 23:38:07 2004 @@ -48,21 +48,6 @@ #include "z8530.h" -/* Linux 2.2 and 2.3 compatibility */ - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,14) -#define net_device device -#endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,43) -#define netif_start_queue(dev) { dev->tbusy = 0; } -#define netif_stop_queue(dev) { dev->tbusy = 1; } -#define netif_wake_queue(dev) { dev->tbusy = 0; mark_bh(NET_BH); } -#endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,47) -#define netif_running(dev) (dev->flags & IFF_UP) -#endif - - /* Number of buffers per channel */ #define NUM_TX_BUF 2 /* NUM_TX_BUF >= 1 (min. 2 recommended) */ @@ -210,9 +195,6 @@ }; struct scc_priv { -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) - char name[IFNAMSIZ]; -#endif int type; int chip; struct net_device *dev; diff -Nru a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c --- a/drivers/net/ibmveth.c Tue May 18 23:38:05 2004 +++ b/drivers/net/ibmveth.c Tue May 18 23:38:05 2004 @@ -874,14 +874,14 @@ struct net_device *netdev; struct ibmveth_adapter *adapter; - unsigned int *mac_addr_p; + unsigned char *mac_addr_p; unsigned int *mcastFilterSize_p; ibmveth_debug_printk_no_adapter("entering ibmveth_probe for UA 0x%x\n", dev->unit_address); - mac_addr_p = (unsigned int *) vio_get_attribute(dev, VETH_MAC_ADDR, 0); + mac_addr_p = (unsigned char *) vio_get_attribute(dev, VETH_MAC_ADDR, 0); if(!mac_addr_p) { ibmveth_error_printk("Can't find VETH_MAC_ADDR attribute\n"); return 0; @@ -916,8 +916,8 @@ The RPA doc specifies that the first byte must be 10b, so we'll just look for it to solve this 8 vs. 6 byte field issue */ - while (*((char*)mac_addr_p) != (char)(0x02)) - ((char*)mac_addr_p)++; + if ((*mac_addr_p & 0x3) != 0x02) + mac_addr_p += 2; adapter->mac_addr = 0; memcpy(&adapter->mac_addr, mac_addr_p, 6); @@ -935,6 +935,7 @@ netdev->do_ioctl = ibmveth_ioctl; netdev->ethtool_ops = &netdev_ethtool_ops; netdev->change_mtu = ibmveth_change_mtu; + SET_NETDEV_DEV(netdev, &dev->dev); memcpy(&netdev->dev_addr, &adapter->mac_addr, netdev->addr_len); diff -Nru a/drivers/net/irda/act200l-sir.c b/drivers/net/irda/act200l-sir.c --- a/drivers/net/irda/act200l-sir.c Tue May 18 23:38:06 2004 +++ b/drivers/net/irda/act200l-sir.c Tue May 18 23:38:06 2004 @@ -178,7 +178,7 @@ /* Write control bytes */ sirdev_raw_write(dev, control, 3); set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(5)); + schedule_timeout(msecs_to_jiffies(5)); /* Go back to normal mode */ sirdev_set_dtr_rts(dev, TRUE, TRUE); diff -Nru a/drivers/net/irda/act200l.c b/drivers/net/irda/act200l.c --- a/drivers/net/irda/act200l.c Tue May 18 23:38:07 2004 +++ b/drivers/net/irda/act200l.c Tue May 18 23:38:07 2004 @@ -148,7 +148,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* Give reset 1 sec to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } break; case IRDA_TASK_CHILD_WAIT: @@ -187,7 +187,7 @@ /* Write control bytes */ self->write(self->dev, control, 3); irda_task_next_state(task, IRDA_TASK_WAIT); - ret = MSECS_TO_JIFFIES(5); + ret = msecs_to_jiffies(5); break; case IRDA_TASK_WAIT: /* Go back to normal mode */ @@ -237,14 +237,14 @@ self->set_dtr_rts(self->dev, TRUE, TRUE); irda_task_next_state(task, IRDA_TASK_WAIT1); - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); break; case IRDA_TASK_WAIT1: /* Reset the dongle : set RTS low for 25 ms */ self->set_dtr_rts(self->dev, TRUE, FALSE); irda_task_next_state(task, IRDA_TASK_WAIT2); - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); break; case IRDA_TASK_WAIT2: /* Clear DTR and set RTS to enter command mode */ @@ -253,7 +253,7 @@ /* Write control bytes */ self->write(self->dev, control, 9); irda_task_next_state(task, IRDA_TASK_WAIT3); - ret = MSECS_TO_JIFFIES(15); + ret = msecs_to_jiffies(15); break; case IRDA_TASK_WAIT3: /* Go back to normal mode */ diff -Nru a/drivers/net/irda/actisys.c b/drivers/net/irda/actisys.c --- a/drivers/net/irda/actisys.c Tue May 18 23:38:09 2004 +++ b/drivers/net/irda/actisys.c Tue May 18 23:38:09 2004 @@ -238,7 +238,7 @@ self->set_dtr_rts(self->dev, TRUE, TRUE); /* Sleep 50 ms to make sure capacitor is charged */ - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); irda_task_next_state(task, IRDA_TASK_WAIT); break; case IRDA_TASK_WAIT: diff -Nru a/drivers/net/irda/girbil.c b/drivers/net/irda/girbil.c --- a/drivers/net/irda/girbil.c Tue May 18 23:38:05 2004 +++ b/drivers/net/irda/girbil.c Tue May 18 23:38:05 2004 @@ -119,7 +119,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* Give reset 1 sec to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } break; case IRDA_TASK_CHILD_WAIT: @@ -153,7 +153,7 @@ /* Write control bytes */ self->write(self->dev, control, 2); irda_task_next_state(task, IRDA_TASK_WAIT); - ret = MSECS_TO_JIFFIES(100); + ret = msecs_to_jiffies(100); break; case IRDA_TASK_WAIT: /* Go back to normal mode */ @@ -194,19 +194,19 @@ self->set_dtr_rts(self->dev, TRUE, FALSE); irda_task_next_state(task, IRDA_TASK_WAIT1); /* Sleep at least 5 ms */ - ret = MSECS_TO_JIFFIES(20); + ret = msecs_to_jiffies(20); break; case IRDA_TASK_WAIT1: /* Set DTR and clear RTS to enter command mode */ self->set_dtr_rts(self->dev, FALSE, TRUE); irda_task_next_state(task, IRDA_TASK_WAIT2); - ret = MSECS_TO_JIFFIES(20); + ret = msecs_to_jiffies(20); break; case IRDA_TASK_WAIT2: /* Write control byte */ self->write(self->dev, &control, 1); irda_task_next_state(task, IRDA_TASK_WAIT3); - ret = MSECS_TO_JIFFIES(20); + ret = msecs_to_jiffies(20); break; case IRDA_TASK_WAIT3: /* Go back to normal mode */ diff -Nru a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c --- a/drivers/net/irda/irda-usb.c Tue May 18 23:38:07 2004 +++ b/drivers/net/irda/irda-usb.c Tue May 18 23:38:07 2004 @@ -268,7 +268,7 @@ speed_bulk_callback, self); urb->transfer_buffer_length = USB_IRDA_HEADER; urb->transfer_flags = URB_ASYNC_UNLINK; - urb->timeout = MSECS_TO_JIFFIES(100); + urb->timeout = msecs_to_jiffies(100); /* Irq disabled -> GFP_ATOMIC */ if ((ret = usb_submit_urb(urb, GFP_ATOMIC))) { @@ -412,7 +412,7 @@ * This is how the dongle will detect the end of packet - Jean II */ urb->transfer_flags |= URB_ZERO_PACKET; /* Timeout need to be shorter than NET watchdog timer */ - urb->timeout = MSECS_TO_JIFFIES(200); + urb->timeout = msecs_to_jiffies(200); /* Generate min turn time. FIXME: can we do better than this? */ /* Trying to a turnaround time at this level is trying to measure @@ -1311,7 +1311,7 @@ IU_REQ_GET_CLASS_DESC, USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 0, intf->altsetting->desc.bInterfaceNumber, desc, - sizeof(*desc), MSECS_TO_JIFFIES(500)); + sizeof(*desc), msecs_to_jiffies(500)); IRDA_DEBUG(1, "%s(), ret=%d\n", __FUNCTION__, ret); if (ret < sizeof(*desc)) { @@ -1421,7 +1421,7 @@ } /* Find our endpoints */ - interface = &intf->altsetting[0]; + interface = intf->cur_altsetting; if(!irda_usb_parse_endpoints(self, interface->endpoint, interface->desc.bNumEndpoints)) { ERROR("%s(), Bogus endpoints...\n", __FUNCTION__); diff -Nru a/drivers/net/irda/irport.c b/drivers/net/irda/irport.c --- a/drivers/net/irda/irport.c Tue May 18 23:38:08 2004 +++ b/drivers/net/irda/irport.c Tue May 18 23:38:08 2004 @@ -452,7 +452,7 @@ task->state = IRDA_TASK_WAIT; /* Try again later */ - ret = MSECS_TO_JIFFIES(20); + ret = msecs_to_jiffies(20); break; } @@ -474,7 +474,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* Give dongle 1 sec to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } else /* Child finished immediately */ irda_task_next_state(task, IRDA_TASK_CHILD_DONE); diff -Nru a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c --- a/drivers/net/irda/irtty-sir.c Tue May 18 23:38:05 2004 +++ b/drivers/net/irda/irtty-sir.c Tue May 18 23:38:05 2004 @@ -93,12 +93,12 @@ tty = priv->tty; if (tty->driver->wait_until_sent) { lock_kernel(); - tty->driver->wait_until_sent(tty, MSECS_TO_JIFFIES(100)); + tty->driver->wait_until_sent(tty, msecs_to_jiffies(100)); unlock_kernel(); } else { set_task_state(current, TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(USBSERIAL_TX_DONE_DELAY)); + schedule_timeout(msecs_to_jiffies(USBSERIAL_TX_DONE_DELAY)); } } diff -Nru a/drivers/net/irda/ma600-sir.c b/drivers/net/irda/ma600-sir.c --- a/drivers/net/irda/ma600-sir.c Tue May 18 23:38:08 2004 +++ b/drivers/net/irda/ma600-sir.c Tue May 18 23:38:08 2004 @@ -192,7 +192,7 @@ /* Wait at least 10ms: fake wait_until_sent - 10 bits at 9600 baud*/ set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(15)); /* old ma600 uses 15ms */ + schedule_timeout(msecs_to_jiffies(15)); /* old ma600 uses 15ms */ #if 1 /* read-back of the control byte. ma600 is the first dongle driver @@ -216,7 +216,7 @@ /* Wait at least 10ms */ set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(10)); + schedule_timeout(msecs_to_jiffies(10)); /* dongle is now switched to the new speed */ dev->speed = speed; @@ -246,12 +246,12 @@ /* Reset the dongle : set DTR low for 10 ms */ sirdev_set_dtr_rts(dev, FALSE, TRUE); set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(10)); + schedule_timeout(msecs_to_jiffies(10)); /* Go back to normal mode */ sirdev_set_dtr_rts(dev, TRUE, TRUE); set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(10)); + schedule_timeout(msecs_to_jiffies(10)); dev->speed = 9600; /* That's the dongle-default */ diff -Nru a/drivers/net/irda/ma600.c b/drivers/net/irda/ma600.c --- a/drivers/net/irda/ma600.c Tue May 18 23:38:07 2004 +++ b/drivers/net/irda/ma600.c Tue May 18 23:38:07 2004 @@ -184,7 +184,7 @@ if (self->speed_task && self->speed_task != task) { IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__); - return MSECS_TO_JIFFIES(10); + return msecs_to_jiffies(10); } else { self->speed_task = task; } @@ -202,7 +202,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* give 1 second to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } else { irda_task_next_state(task, IRDA_TASK_CHILD_DONE); } @@ -217,7 +217,7 @@ /* Set DTR, Clear RTS */ self->set_dtr_rts(self->dev, TRUE, FALSE); - ret = MSECS_TO_JIFFIES(1); /* Sleep 1 ms */ + ret = msecs_to_jiffies(1); /* Sleep 1 ms */ irda_task_next_state(task, IRDA_TASK_WAIT); break; @@ -231,7 +231,7 @@ irda_task_next_state(task, IRDA_TASK_WAIT1); /* Wait at least 10 ms */ - ret = MSECS_TO_JIFFIES(15); + ret = msecs_to_jiffies(15); break; case IRDA_TASK_WAIT1: @@ -258,7 +258,7 @@ irda_task_next_state(task, IRDA_TASK_WAIT2); /* Wait at least 10 ms */ - ret = MSECS_TO_JIFFIES(10); + ret = msecs_to_jiffies(10); break; case IRDA_TASK_WAIT2: @@ -298,7 +298,7 @@ if (self->reset_task && self->reset_task != task) { IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__); - return MSECS_TO_JIFFIES(10); + return msecs_to_jiffies(10); } else self->reset_task = task; @@ -307,13 +307,13 @@ /* Clear DTR and Set RTS */ self->set_dtr_rts(self->dev, FALSE, TRUE); irda_task_next_state(task, IRDA_TASK_WAIT1); - ret = MSECS_TO_JIFFIES(10); /* Sleep 10 ms */ + ret = msecs_to_jiffies(10); /* Sleep 10 ms */ break; case IRDA_TASK_WAIT1: /* Set DTR and RTS */ self->set_dtr_rts(self->dev, TRUE, TRUE); irda_task_next_state(task, IRDA_TASK_WAIT2); - ret = MSECS_TO_JIFFIES(10); /* Sleep 10 ms */ + ret = msecs_to_jiffies(10); /* Sleep 10 ms */ break; case IRDA_TASK_WAIT2: irda_task_next_state(task, IRDA_TASK_DONE); diff -Nru a/drivers/net/irda/mcp2120.c b/drivers/net/irda/mcp2120.c --- a/drivers/net/irda/mcp2120.c Tue May 18 23:38:09 2004 +++ b/drivers/net/irda/mcp2120.c Tue May 18 23:38:09 2004 @@ -99,7 +99,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* Give reset 1 sec to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } break; case IRDA_TASK_CHILD_WAIT: @@ -140,7 +140,7 @@ self->write(self->dev, control, 2); irda_task_next_state(task, IRDA_TASK_WAIT); - ret = MSECS_TO_JIFFIES(100); + ret = msecs_to_jiffies(100); //printk("mcp2120_change_speed irda_child_done\n"); break; case IRDA_TASK_WAIT: @@ -189,14 +189,14 @@ /* Reset dongle by setting RTS*/ self->set_dtr_rts(self->dev, TRUE, TRUE); irda_task_next_state(task, IRDA_TASK_WAIT1); - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); break; case IRDA_TASK_WAIT1: //printk("mcp2120_reset irda_task_wait1\n"); /* clear RTS and wait for at least 30 ms. */ self->set_dtr_rts(self->dev, FALSE, FALSE); irda_task_next_state(task, IRDA_TASK_WAIT2); - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); break; case IRDA_TASK_WAIT2: //printk("mcp2120_reset irda_task_wait2\n"); diff -Nru a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Tue May 18 23:38:08 2004 +++ b/drivers/net/irda/sir_dev.c Tue May 18 23:38:08 2004 @@ -74,7 +74,7 @@ while (dev->tx_buff.len > 0) { /* wait until tx idle */ spin_unlock_irqrestore(&dev->tx_lock, flags); set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(10)); + schedule_timeout(msecs_to_jiffies(10)); spin_lock_irqsave(&dev->tx_lock, flags); } diff -Nru a/drivers/net/irda/sir_kthread.c b/drivers/net/irda/sir_kthread.c --- a/drivers/net/irda/sir_kthread.c Tue May 18 23:38:08 2004 +++ b/drivers/net/irda/sir_kthread.c Tue May 18 23:38:08 2004 @@ -415,7 +415,7 @@ fsm->state = next_state; } while(!delay); - irda_queue_delayed_request(&fsm->rq, MSECS_TO_JIFFIES(delay)); + irda_queue_delayed_request(&fsm->rq, msecs_to_jiffies(delay)); } /* schedule some device configuration task for execution by kIrDAd diff -Nru a/drivers/net/irda/stir4200.c b/drivers/net/irda/stir4200.c --- a/drivers/net/irda/stir4200.c Tue May 18 23:38:06 2004 +++ b/drivers/net/irda/stir4200.c Tue May 18 23:38:06 2004 @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -208,7 +209,7 @@ REQ_WRITE_SINGLE, USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_DEVICE, value, reg, NULL, 0, - MSECS_TO_JIFFIES(CTRL_TIMEOUT)); + msecs_to_jiffies(CTRL_TIMEOUT)); } /* Send control message to read multiple registers */ @@ -221,7 +222,7 @@ REQ_READ_REG, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, reg, data, count, - MSECS_TO_JIFFIES(CTRL_TIMEOUT)); + msecs_to_jiffies(CTRL_TIMEOUT)); } static inline int isfir(u32 speed) @@ -652,7 +653,7 @@ return 0; /* estimate transfer time for remaining chars */ - wait_ms((count * 8000) / stir->speed); + msleep((count * 8000) / stir->speed); } err = write_reg(stir, REG_FIFOCTL, FIFOCTL_CLR); @@ -745,7 +746,7 @@ if (usb_bulk_msg(stir->usbdev, usb_sndbulkpipe(stir->usbdev, 1), stir->io_buf, wraplen, - NULL, MSECS_TO_JIFFIES(TRANSMIT_TIMEOUT))) + NULL, msecs_to_jiffies(TRANSMIT_TIMEOUT))) stir->stats.tx_errors++; } @@ -810,7 +811,7 @@ info("%s: receive usb submit failed", stir->netdev->name); stir->receiving = 0; - wait_ms(10); + msleep(10); continue; } } diff -Nru a/drivers/net/irda/tekram-sir.c b/drivers/net/irda/tekram-sir.c --- a/drivers/net/irda/tekram-sir.c Tue May 18 23:38:06 2004 +++ b/drivers/net/irda/tekram-sir.c Tue May 18 23:38:06 2004 @@ -211,7 +211,7 @@ /* Should sleep 1 ms */ set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(MSECS_TO_JIFFIES(1)); + schedule_timeout(msecs_to_jiffies(1)); /* Set DTR, Set RTS */ sirdev_set_dtr_rts(dev, TRUE, TRUE); diff -Nru a/drivers/net/irda/tekram.c b/drivers/net/irda/tekram.c --- a/drivers/net/irda/tekram.c Tue May 18 23:38:07 2004 +++ b/drivers/net/irda/tekram.c Tue May 18 23:38:07 2004 @@ -113,7 +113,7 @@ if (self->speed_task && self->speed_task != task) { IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__ ); - return MSECS_TO_JIFFIES(10); + return msecs_to_jiffies(10); } else self->speed_task = task; @@ -150,7 +150,7 @@ irda_task_next_state(task, IRDA_TASK_CHILD_WAIT); /* Give reset 1 sec to finish */ - ret = MSECS_TO_JIFFIES(1000); + ret = msecs_to_jiffies(1000); } else irda_task_next_state(task, IRDA_TASK_CHILD_DONE); break; @@ -171,7 +171,7 @@ irda_task_next_state(task, IRDA_TASK_WAIT); /* Wait at least 100 ms */ - ret = MSECS_TO_JIFFIES(150); + ret = msecs_to_jiffies(150); break; case IRDA_TASK_WAIT: /* Set DTR, Set RTS */ @@ -214,7 +214,7 @@ if (self->reset_task && self->reset_task != task) { IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__ ); - return MSECS_TO_JIFFIES(10); + return msecs_to_jiffies(10); } else self->reset_task = task; @@ -227,7 +227,7 @@ irda_task_next_state(task, IRDA_TASK_WAIT1); /* Sleep 50 ms */ - ret = MSECS_TO_JIFFIES(50); + ret = msecs_to_jiffies(50); break; case IRDA_TASK_WAIT1: /* Clear DTR, Set RTS */ @@ -236,7 +236,7 @@ irda_task_next_state(task, IRDA_TASK_WAIT2); /* Should sleep 1 ms */ - ret = MSECS_TO_JIFFIES(1); + ret = msecs_to_jiffies(1); break; case IRDA_TASK_WAIT2: /* Set DTR, Set RTS */ diff -Nru a/drivers/net/lance.c b/drivers/net/lance.c --- a/drivers/net/lance.c Tue May 18 23:38:05 2004 +++ b/drivers/net/lance.c Tue May 18 23:38:05 2004 @@ -37,6 +37,9 @@ Get rid of check_region, check kmalloc return in lance_probe1 Arnaldo Carvalho de Melo - 11/01/2001 + + Reworked detection, added support for Racal InterLan EtherBlaster cards + Vesselin Kostadinov - 22/4/2004 */ static const char version[] = "lance.c:v1.15ac 1999/11/13 dplatt@3do.com, becker@cesdis.gsfc.nasa.gov\n"; @@ -62,6 +65,26 @@ static int lance_probe1(struct net_device *dev, int ioaddr, int irq, int options); static int __init do_lance_probe(struct net_device *dev); + +static struct card { + char id_offset14; + char id_offset15; +} cards[] = { + { //"normal" + .id_offset14 = 0x57, + .id_offset15 = 0x57, + }, + { //NI6510EB + .id_offset14 = 0x52, + .id_offset15 = 0x44, + }, + { //Racal InterLan EtherBlaster + .id_offset14 = 0x52, + .id_offset15 = 0x49, + }, +}; +#define NUM_CARDS 3 + #ifdef LANCE_DEBUG static int lance_debug = LANCE_DEBUG; #else @@ -380,13 +403,20 @@ "lance-probe"); if (r) { - /* Detect "normal" 0x57 0x57 and the NI6510EB 0x52 0x44 - signatures w/ minimal I/O reads */ - char offset15, offset14 = inb(ioaddr + 14); - - if ((offset14 == 0x52 || offset14 == 0x57) && - ((offset15 = inb(ioaddr + 15)) == 0x57 || - offset15 == 0x44)) { + /* Detect the card with minimal I/O reads */ + char offset14 = inb(ioaddr + 14); + int card; + for (card = 0; card < NUM_CARDS; ++card) + if (cards[card].id_offset14 == offset14) + break; + if (card < NUM_CARDS) {/*yes, the first byte matches*/ + char offset15 = inb(ioaddr + 15); + for (card = 0; card < NUM_CARDS; ++card) + if ((cards[card].id_offset14 == offset14) && + (cards[card].id_offset15 == offset15)) + break; + } + if (card < NUM_CARDS) { /*Signature OK*/ result = lance_probe1(dev, ioaddr, 0, 0); if (!result) { struct lance_private *lp = dev->priv; diff -Nru a/drivers/net/ne-h8300.c b/drivers/net/ne-h8300.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/net/ne-h8300.c Tue May 18 23:38:09 2004 @@ -0,0 +1,657 @@ +/* ne-h8300.c: A NE2000 clone on H8/300 driver for linux. */ +/* + original ne.c + Written 1992-94 by Donald Becker. + + Copyright 1993 United States Government as represented by the + Director, National Security Agency. + + This software may be used and distributed according to the terms + of the GNU General Public License, incorporated herein by reference. + + The author may be reached as becker@scyld.com, or C/O + Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403 + + H8/300 modified + Yoshinori Sato +*/ + +static const char version1[] = +"ne-h8300.c:v1.00 2004/04/11 ysato\n"; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "8390.h" + +/* Some defines that people can play with if so inclined. */ + +/* Do we perform extra sanity checks on stuff ? */ +/* #define NE_SANITY_CHECK */ + +/* Do we implement the read before write bugfix ? */ +/* #define NE_RW_BUGFIX */ + +/* Do we have a non std. amount of memory? (in units of 256 byte pages) */ +/* #define PACKETBUF_MEMSIZE 0x40 */ + +/* A zero-terminated list of I/O addresses to be probed at boot. */ + +/* ---- No user-serviceable parts below ---- */ + +#define NE_BASE (dev->base_addr) +#define NE_CMD 0x00 +#define NE_DATAPORT (ei_status.word16?0x20:0x10) /* NatSemi-defined port window offset. */ +#define NE_RESET (ei_status.word16?0x3f:0x1f) /* Issue a read to reset, a write to clear. */ +#define NE_IO_EXTENT (ei_status.word16?0x40:0x20) + +#define NESM_START_PG 0x40 /* First page of TX buffer */ +#define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */ + +static int ne_probe1(struct net_device *dev, int ioaddr); + +static int ne_open(struct net_device *dev); +static int ne_close(struct net_device *dev); + +static void ne_reset_8390(struct net_device *dev); +static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, + int ring_page); +static void ne_block_input(struct net_device *dev, int count, + struct sk_buff *skb, int ring_offset); +static void ne_block_output(struct net_device *dev, const int count, + const unsigned char *buf, const int start_page); + + +static u32 reg_offset[16]; + +static int __init init_reg_offset(struct net_device *dev,unsigned long base_addr) +{ + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + int i; + unsigned char bus_width; + + bus_width = *(volatile unsigned char *)ABWCR; + bus_width &= 1 << ((base_addr >> 21) & 7); + + for (i = 0; i < sizeof(reg_offset) / sizeof(u32); i++) + if (bus_width == 0) + reg_offset[i] = i * 2 + 1; + else + reg_offset[i] = i; + + ei_local->reg_offset = reg_offset; + return 0; +} + +static int __initdata h8300_ne_count = 0; +#ifdef CONFIG_H8300H_H8MAX +static unsigned long __initdata h8300_ne_base[] = { 0x800600 }; +static int h8300_ne_irq[] = {EXT_IRQ4}; +#endif +#ifdef CONFIG_H8300H_AKI3068NET +static unsigned long __initdata h8300_ne_base[] = { 0x200000 }; +static int h8300_ne_irq[] = {EXT_IRQ5}; +#endif + +static inline int init_dev(struct net_device *dev) +{ + if (h8300_ne_count < (sizeof(h8300_ne_base) / sizeof(unsigned long))) { + dev->base_addr = h8300_ne_base[h8300_ne_count]; + dev->irq = h8300_ne_irq[h8300_ne_count]; + h8300_ne_count++; + return 0; + } else + return -ENODEV; +} + +/* Probe for various non-shared-memory ethercards. + + NEx000-clone boards have a Station Address PROM (SAPROM) in the packet + buffer memory space. NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of + the SAPROM, while other supposed NE2000 clones must be detected by their + SA prefix. + + Reading the SAPROM from a word-wide card with the 8390 set in byte-wide + mode results in doubled values, which can be detected and compensated for. + + The probe is also responsible for initializing the card and filling + in the 'dev' and 'ei_status' structures. + + We use the minimum memory size for some ethercard product lines, iff we can't + distinguish models. You can increase the packet buffer size by setting + PACKETBUF_MEMSIZE. Reported Cabletron packet buffer locations are: + E1010 starts at 0x100 and ends at 0x2000. + E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory") + E2010 starts at 0x100 and ends at 0x4000. + E2010-x starts at 0x100 and ends at 0xffff. */ + +static int __init do_ne_probe(struct net_device *dev) +{ + unsigned int base_addr = dev->base_addr; + + SET_MODULE_OWNER(dev); + + /* First check any supplied i/o locations. User knows best. */ + if (base_addr > 0x1ff) /* Check a single specified location. */ + return ne_probe1(dev, base_addr); + else if (base_addr != 0) /* Don't probe at all. */ + return -ENXIO; + + return -ENODEV; +} + +static void cleanup_card(struct net_device *dev) +{ + free_irq(dev->irq, dev); + release_region(dev->base_addr, NE_IO_EXTENT); +} + +struct net_device * __init ne_probe(int unit) +{ + struct net_device *dev = alloc_ei_netdev(); + int err; + + if (!dev) + return ERR_PTR(-ENOMEM); + + if (init_dev(dev)) + return ERR_PTR(-ENODEV); + + sprintf(dev->name, "eth%d", unit); + netdev_boot_setup_check(dev); + + err = init_reg_offset(dev, dev->base_addr); + if (err) + goto out; + + err = do_ne_probe(dev); + if (err) + goto out; + err = register_netdev(dev); + if (err) + goto out1; + return dev; +out1: + cleanup_card(dev); +out: + free_netdev(dev); + return ERR_PTR(err); +} + +static int __init ne_probe1(struct net_device *dev, int ioaddr) +{ + int i; + unsigned char SA_prom[16]; + int wordlength = 2; + const char *name = NULL; + int start_page, stop_page; + int reg0, ret; + static unsigned version_printed; + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + unsigned char bus_width; + + if (!request_region(ioaddr, NE_IO_EXTENT, dev->name)) + return -EBUSY; + + reg0 = inb_p(ioaddr); + if (reg0 == 0xFF) { + ret = -ENODEV; + goto err_out; + } + + /* Do a preliminary verification that we have a 8390. */ + { + int regd; + outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD); + regd = inb_p(ioaddr + EI_SHIFT(0x0d)); + outb_p(0xff, ioaddr + EI_SHIFT(0x0d)); + outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD); + inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */ + if (inb_p(ioaddr + EN0_COUNTER0) != 0) { + outb_p(reg0, ioaddr + EI_SHIFT(0)); + outb_p(regd, ioaddr + EI_SHIFT(0x0d)); /* Restore the old values. */ + ret = -ENODEV; + goto err_out; + } + } + + if (ei_debug && version_printed++ == 0) + printk(KERN_INFO "%s", version1); + + printk(KERN_INFO "NE*000 ethercard probe at %08x:", ioaddr); + + /* Read the 16 bytes of station address PROM. + We must first initialize registers, similar to NS8390_init(eifdev, 0). + We can't reliably read the SAPROM address without this. + (I learned the hard way!). */ + { + struct {unsigned char value, offset; } program_seq[] = + { + {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/ + {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */ + {0x00, EN0_RCNTLO}, /* Clear the count regs. */ + {0x00, EN0_RCNTHI}, + {0x00, EN0_IMR}, /* Mask completion irq. */ + {0xFF, EN0_ISR}, + {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */ + {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */ + {32, EN0_RCNTLO}, + {0x00, EN0_RCNTHI}, + {0x00, EN0_RSARLO}, /* DMA starting at 0x0000. */ + {0x00, EN0_RSARHI}, + {E8390_RREAD+E8390_START, E8390_CMD}, + }; + + for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++) + outb_p(program_seq[i].value, ioaddr + program_seq[i].offset); + + } + bus_width = *(volatile unsigned char *)ABWCR; + bus_width &= 1 << ((ioaddr >> 21) & 7); + ei_status.word16 = (bus_width == 0); /* temporary setting */ + for(i = 0; i < 16 /*sizeof(SA_prom)*/; i++) { + SA_prom[i] = inb(ioaddr + NE_DATAPORT); + inb(ioaddr + NE_DATAPORT); /* dummy read */ + } + + start_page = NESM_START_PG; + stop_page = NESM_STOP_PG; + + if (bus_width) + wordlength = 1; + else + outb_p(0x49, ioaddr + EN0_DCFG); + + /* Set up the rest of the parameters. */ + name = (wordlength == 2) ? "NE2000" : "NE1000"; + + if (! dev->irq) { + printk(" failed to detect IRQ line.\n"); + ret = -EAGAIN; + goto err_out; + } + + /* Snarf the interrupt now. There's no point in waiting since we cannot + share and the board will usually be enabled. */ + ret = request_irq(dev->irq, ei_interrupt, 0, name, dev); + if (ret) { + printk (" unable to get IRQ %d (errno=%d).\n", dev->irq, ret); + goto err_out; + } + + dev->base_addr = ioaddr; + + for(i = 0; i < ETHER_ADDR_LEN; i++) { + printk(" %2.2x", SA_prom[i]); + dev->dev_addr[i] = SA_prom[i]; + } + + printk("\n%s: %s found at %#x, using IRQ %d.\n", + dev->name, name, ioaddr, dev->irq); + + ei_status.name = name; + ei_status.tx_start_page = start_page; + ei_status.stop_page = stop_page; + ei_status.word16 = (wordlength == 2); + + ei_status.rx_start_page = start_page + TX_PAGES; +#ifdef PACKETBUF_MEMSIZE + /* Allow the packet buffer size to be overridden by know-it-alls. */ + ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE; +#endif + + ei_status.reset_8390 = &ne_reset_8390; + ei_status.block_input = &ne_block_input; + ei_status.block_output = &ne_block_output; + ei_status.get_8390_hdr = &ne_get_8390_hdr; + ei_status.priv = 0; + dev->open = &ne_open; + dev->stop = &ne_close; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = ei_poll; +#endif + NS8390_init(dev, 0); + return 0; + +err_out: + release_region(ioaddr, NE_IO_EXTENT); + return ret; +} + +static int ne_open(struct net_device *dev) +{ + ei_open(dev); + return 0; +} + +static int ne_close(struct net_device *dev) +{ + if (ei_debug > 1) + printk(KERN_DEBUG "%s: Shutting down ethercard.\n", dev->name); + ei_close(dev); + return 0; +} + +/* Hard reset the card. This used to pause for the same period that a + 8390 reset command required, but that shouldn't be necessary. */ + +static void ne_reset_8390(struct net_device *dev) +{ + unsigned long reset_start_time = jiffies; + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + + if (ei_debug > 1) + printk(KERN_DEBUG "resetting the 8390 t=%ld...", jiffies); + + /* DON'T change these to inb_p/outb_p or reset will fail on clones. */ + outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET); + + ei_status.txing = 0; + ei_status.dmaing = 0; + + /* This check _should_not_ be necessary, omit eventually. */ + while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0) + if (jiffies - reset_start_time > 2*HZ/100) { + printk(KERN_WARNING "%s: ne_reset_8390() did not complete.\n", dev->name); + break; + } + outb_p(ENISR_RESET, NE_BASE + EN0_ISR); /* Ack intr. */ +} + +/* Grab the 8390 specific header. Similar to the block_input routine, but + we don't need to be concerned with ring wrap as the header will be at + the start of a page, so we optimize accordingly. */ + +static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page) +{ + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + /* This *shouldn't* happen. If it does, it's the last thing you'll see */ + + if (ei_status.dmaing) + { + printk(KERN_EMERG "%s: DMAing conflict in ne_get_8390_hdr " + "[DMAstat:%d][irqlock:%d].\n", + dev->name, ei_status.dmaing, ei_status.irqlock); + return; + } + + ei_status.dmaing |= 0x01; + outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD); + outb_p(sizeof(struct e8390_pkt_hdr), NE_BASE + EN0_RCNTLO); + outb_p(0, NE_BASE + EN0_RCNTHI); + outb_p(0, NE_BASE + EN0_RSARLO); /* On page boundary */ + outb_p(ring_page, NE_BASE + EN0_RSARHI); + outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD); + + if (ei_status.word16) { + int len; + unsigned short *p = (unsigned short *)hdr; + for (len = sizeof(struct e8390_pkt_hdr)>>1; len > 0; len--) + *p++ = inw(NE_BASE + NE_DATAPORT); + } else + insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)); + + outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */ + ei_status.dmaing &= ~0x01; + + le16_to_cpus(&hdr->count); +} + +/* Block input and output, similar to the Crynwr packet driver. If you + are porting to a new ethercard, look at the packet driver source for hints. + The NEx000 doesn't share the on-board packet memory -- you have to put + the packet out through the "remote DMA" dataport using outb. */ + +static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset) +{ + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); +#ifdef NE_SANITY_CHECK + int xfer_count = count; +#endif + char *buf = skb->data; + + /* This *shouldn't* happen. If it does, it's the last thing you'll see */ + if (ei_status.dmaing) + { + printk(KERN_EMERG "%s: DMAing conflict in ne_block_input " + "[DMAstat:%d][irqlock:%d].\n", + dev->name, ei_status.dmaing, ei_status.irqlock); + return; + } + ei_status.dmaing |= 0x01; + outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD); + outb_p(count & 0xff, NE_BASE + EN0_RCNTLO); + outb_p(count >> 8, NE_BASE + EN0_RCNTHI); + outb_p(ring_offset & 0xff, NE_BASE + EN0_RSARLO); + outb_p(ring_offset >> 8, NE_BASE + EN0_RSARHI); + outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD); + if (ei_status.word16) + { + int len; + unsigned short *p = (unsigned short *)buf; + for (len = count>>1; len > 0; len--) + *p++ = inw(NE_BASE + NE_DATAPORT); + if (count & 0x01) + { + buf[count-1] = inb(NE_BASE + NE_DATAPORT); +#ifdef NE_SANITY_CHECK + xfer_count++; +#endif + } + } else { + insb(NE_BASE + NE_DATAPORT, buf, count); + } + +#ifdef NE_SANITY_CHECK + /* This was for the ALPHA version only, but enough people have + been encountering problems so it is still here. If you see + this message you either 1) have a slightly incompatible clone + or 2) have noise/speed problems with your bus. */ + + if (ei_debug > 1) + { + /* DMA termination address check... */ + int addr, tries = 20; + do { + /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here + -- it's broken for Rx on some cards! */ + int high = inb_p(NE_BASE + EN0_RSARHI); + int low = inb_p(NE_BASE + EN0_RSARLO); + addr = (high << 8) + low; + if (((ring_offset + xfer_count) & 0xff) == low) + break; + } while (--tries > 0); + if (tries <= 0) + printk(KERN_WARNING "%s: RX transfer address mismatch," + "%#4.4x (expected) vs. %#4.4x (actual).\n", + dev->name, ring_offset + xfer_count, addr); + } +#endif + outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */ + ei_status.dmaing &= ~0x01; +} + +static void ne_block_output(struct net_device *dev, int count, + const unsigned char *buf, const int start_page) +{ + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + unsigned long dma_start; +#ifdef NE_SANITY_CHECK + int retries = 0; +#endif + + /* Round the count up for word writes. Do we need to do this? + What effect will an odd byte count have on the 8390? + I should check someday. */ + + if (ei_status.word16 && (count & 0x01)) + count++; + + /* This *shouldn't* happen. If it does, it's the last thing you'll see */ + if (ei_status.dmaing) + { + printk(KERN_EMERG "%s: DMAing conflict in ne_block_output." + "[DMAstat:%d][irqlock:%d]\n", + dev->name, ei_status.dmaing, ei_status.irqlock); + return; + } + ei_status.dmaing |= 0x01; + /* We should already be in page 0, but to be safe... */ + outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, NE_BASE + NE_CMD); + +#ifdef NE_SANITY_CHECK +retry: +#endif + +#ifdef NE8390_RW_BUGFIX + /* Handle the read-before-write bug the same way as the + Crynwr packet driver -- the NatSemi method doesn't work. + Actually this doesn't always work either, but if you have + problems with your NEx000 this is better than nothing! */ + + outb_p(0x42, NE_BASE + EN0_RCNTLO); + outb_p(0x00, NE_BASE + EN0_RCNTHI); + outb_p(0x42, NE_BASE + EN0_RSARLO); + outb_p(0x00, NE_BASE + EN0_RSARHI); + outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD); + /* Make certain that the dummy read has occurred. */ + udelay(6); +#endif + + outb_p(ENISR_RDC, NE_BASE + EN0_ISR); + + /* Now the normal output. */ + outb_p(count & 0xff, NE_BASE + EN0_RCNTLO); + outb_p(count >> 8, NE_BASE + EN0_RCNTHI); + outb_p(0x00, NE_BASE + EN0_RSARLO); + outb_p(start_page, NE_BASE + EN0_RSARHI); + + outb_p(E8390_RWRITE+E8390_START, NE_BASE + NE_CMD); + if (ei_status.word16) { + int len; + unsigned short *p = (unsigned short *)buf; + for (len = count>>1; len > 0; len--) + outw(*p++, NE_BASE + NE_DATAPORT); + } else { + outsb(NE_BASE + NE_DATAPORT, buf, count); + } + + dma_start = jiffies; + +#ifdef NE_SANITY_CHECK + /* This was for the ALPHA version only, but enough people have + been encountering problems so it is still here. */ + + if (ei_debug > 1) + { + /* DMA termination address check... */ + int addr, tries = 20; + do { + int high = inb_p(NE_BASE + EN0_RSARHI); + int low = inb_p(NE_BASE + EN0_RSARLO); + addr = (high << 8) + low; + if ((start_page << 8) + count == addr) + break; + } while (--tries > 0); + + if (tries <= 0) + { + printk(KERN_WARNING "%s: Tx packet transfer address mismatch," + "%#4.4x (expected) vs. %#4.4x (actual).\n", + dev->name, (start_page << 8) + count, addr); + if (retries++ == 0) + goto retry; + } + } +#endif + + while ((inb_p(NE_BASE + EN0_ISR) & ENISR_RDC) == 0) + if (jiffies - dma_start > 2*HZ/100) { /* 20ms */ + printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name); + ne_reset_8390(dev); + NS8390_init(dev,1); + break; + } + + outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */ + ei_status.dmaing &= ~0x01; + return; +} + + +#ifdef MODULE +#define MAX_NE_CARDS 4 /* Max number of NE cards per module */ +static struct net_device *dev_ne[MAX_NE_CARDS]; +static int io[MAX_NE_CARDS]; +static int irq[MAX_NE_CARDS]; +static int bad[MAX_NE_CARDS]; /* 0xbad = bad sig or no reset ack */ + +MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); +MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); +MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); +MODULE_PARM_DESC(io, "I/O base address(es),required"); +MODULE_PARM_DESC(irq, "IRQ number(s)"); +MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver"); +MODULE_LICENSE("GPL"); + +/* This is set up so that no ISA autoprobe takes place. We can't guarantee +that the ne2k probe is the last 8390 based probe to take place (as it +is at boot) and so the probe will get confused by any other 8390 cards. +ISA device autoprobes on a running machine are not recommended anyway. */ + +int init_module(void) +{ + int this_dev, found = 0; + + for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { + struct net_device *dev = alloc_ei_netdev(); + if (!dev) + break; + dev->irq = irq[this_dev]; + dev->mem_end = bad[this_dev]; + dev->base_addr = io[this_dev]; + if (do_ne_probe(dev) == 0) { + if (register_netdev(dev) == 0) { + dev_ne[found++] = dev; + continue; + } + cleanup_card(dev); + } + free_netdev(dev); + if (found) + break; + if (io[this_dev] != 0) + printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]); + else + printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n"); + return -ENXIO; + } + if (found) + return 0; + return -ENODEV; +} + +void cleanup_module(void) +{ + int this_dev; + + for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { + struct net_device *dev = dev_ne[this_dev]; + if (dev) { + unregister_netdev(dev); + cleanup_card(dev); + free_netdev(dev); + } + } +} +#endif /* MODULE */ diff -Nru a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c --- a/drivers/net/pcnet32.c Tue May 18 23:38:06 2004 +++ b/drivers/net/pcnet32.c Tue May 18 23:38:06 2004 @@ -132,6 +132,8 @@ }; #define PCNET32_TEST_LEN (sizeof(pcnet32_gstrings_test) / ETH_GSTRING_LEN) +#define PCNET32_NUM_REGS 146 + #define MAX_UNITS 8 /* More are supported, limit only on options */ static int options[MAX_UNITS]; static int full_duplex[MAX_UNITS]; @@ -234,7 +236,9 @@ * Jim Lewis added ethernet loopback test. * Thomas Munck Steenholdt non-mii ioctl corrections. * v1.29 6 Apr 2004 Jim Lewis added physical - * identification code (blink led's). + * identification code (blink led's) and register dump. + * Don Fry added timer for 971/972 so skbufs don't remain on tx ring + * forever. */ @@ -372,6 +376,9 @@ static int pcnet32_loopback_test(struct net_device *dev, uint64_t *data1); static int pcnet32_phys_id(struct net_device *dev, u32 data); static void pcnet32_led_blink_callback(struct net_device *dev); +static int pcnet32_get_regs_len(struct net_device *dev); +static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, + void *ptr); enum pci_flags_bit { PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4, @@ -492,9 +499,9 @@ #ifdef CONFIG_NET_POLL_CONTROLLER static void pcnet32_poll_controller(struct net_device *dev) { - disable_irq(dev->irq); - pcnet32_interrupt(0, dev, NULL); - enable_irq(dev->irq); + disable_irq(dev->irq); + pcnet32_interrupt(0, dev, NULL); + enable_irq(dev->irq); } #endif @@ -681,7 +688,7 @@ for (i=0; i<6; i++) *packet++ = dev->dev_addr[i]; for (i=0; i<6; i++) - *packet++ = dev->dev_addr[i]; + *packet++ = dev->dev_addr[i]; /* type */ *packet++ = 0x08; *packet++ = 0x06; @@ -837,6 +844,72 @@ return 0; } +int pcnet32_get_regs_len(struct net_device *dev) +{ + return(PCNET32_NUM_REGS * sizeof(u16)); +} + +void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, + void *ptr) +{ + int i, csr0; + u16 *buff = ptr; + struct pcnet32_private *lp = dev->priv; + struct pcnet32_access *a = &lp->a; + ulong ioaddr = dev->base_addr; + int ticks; + unsigned long flags; + + spin_lock_irqsave(&lp->lock, flags); + + csr0 = a->read_csr(ioaddr, 0); + if (!(csr0 & 0x0004)) { /* If not stopped */ + /* set SUSPEND (SPND) - CSR5 bit 0 */ + a->write_csr(ioaddr, 5, 0x0001); + + /* poll waiting for bit to be set */ + ticks = 0; + while (!(a->read_csr(ioaddr, 5) & 0x0001)) { + spin_unlock_irqrestore(&lp->lock, flags); + mdelay(1); + spin_lock_irqsave(&lp->lock, flags); + ticks++; + if (ticks > 200) { + if (netif_msg_hw(lp)) + printk(KERN_DEBUG "%s: Error getting into suspend!\n", + dev->name); + break; + } + } + } + + /* read address PROM */ + for (i=0; i<16; i += 2) + *buff++ = inw(ioaddr + i); + + for (i = 0; i <= 89; i++) { + *buff++ = a->read_csr(ioaddr, i); + } + + *buff++ = a->read_csr(ioaddr, 112); + *buff++ = a->read_csr(ioaddr, 114); + + for (i = 0; i <= 35; i++) { + *buff++ = a->read_bcr(ioaddr, i); + } + + if (!(csr0 & 0x0004)) { /* If not stopped */ + /* clear SUSPEND (SPND) - CSR5 bit 0 */ + a->write_csr(ioaddr, 5, 0x0000); + } + + i = buff - (u16 *)ptr; + for (; i < PCNET32_NUM_REGS; i++) + *buff++ = 0; + + spin_unlock_irqrestore(&lp->lock, flags); +} + static struct ethtool_ops pcnet32_ethtool_ops = { .get_settings = pcnet32_get_settings, .set_settings = pcnet32_set_settings, @@ -853,6 +926,8 @@ .self_test_count = pcnet32_self_test_count, .self_test = pcnet32_ethtool_test, .phys_id = pcnet32_phys_id, + .get_regs_len = pcnet32_get_regs_len, + .get_regs = pcnet32_get_regs, }; /* only probes for non-PCI devices, the rest are handled by @@ -1032,6 +1107,13 @@ ltint = 1; } + if (ltint) { + /* Enable timer to prevent skbuffs from remaining on the tx ring + * forever if no other tx being done. Set timer period to about + * 122 ms */ + a->write_bcr(ioaddr, 31, 0x253b); + } + dev = alloc_etherdev(0); if (!dev) { if (pcnet32_debug & NETIF_MSG_PROBE) @@ -1371,13 +1453,18 @@ /* Re-initialize the PCNET32, and start it when done. */ lp->a.write_csr (ioaddr, 1, (lp->dma_addr + - offsetof(struct pcnet32_private, init_block)) & 0xffff); + offsetof(struct pcnet32_private, init_block)) & 0xffff); lp->a.write_csr (ioaddr, 2, (lp->dma_addr + offsetof(struct pcnet32_private, init_block)) >> 16); lp->a.write_csr (ioaddr, 4, 0x0915); lp->a.write_csr (ioaddr, 0, 0x0001); + if (lp->ltint) { + /* start the software timer */ + lp->a.write_csr(ioaddr, 7, 0x0400); /* set STINTE */ + } + netif_start_queue(dev); /* If we have mii, print the link status and start the watchdog */ @@ -1579,13 +1666,13 @@ int entry; unsigned long flags; + spin_lock_irqsave(&lp->lock, flags); + if (netif_msg_tx_queued(lp)) { printk(KERN_DEBUG "%s: pcnet32_start_xmit() called, csr0 %4.4x.\n", dev->name, lp->a.read_csr(ioaddr, 0)); } - spin_lock_irqsave(&lp->lock, flags); - /* Default status -- will not enable Successful-TxDone * interrupt when that option is available to us. */ @@ -1646,7 +1733,7 @@ struct net_device *dev = dev_id; struct pcnet32_private *lp; unsigned long ioaddr; - u16 csr0,rap; + u16 csr0, csr7, rap; int boguscnt = max_interrupt_work; int must_restart; @@ -1663,13 +1750,19 @@ spin_lock(&lp->lock); rap = lp->a.read_rap(ioaddr); - while ((csr0 = lp->a.read_csr (ioaddr, 0)) & 0x8600 && --boguscnt >= 0) { + csr0 = lp->a.read_csr (ioaddr, 0); + csr7 = lp->ltint ? lp->a.read_csr(ioaddr, 7) : 0; + + while ((csr0 & 0x8600 || csr7 & 0x0800) && --boguscnt >= 0) { if (csr0 == 0xffff) { break; /* PCMCIA remove happened */ } /* Acknowledge all of the current interrupt sources ASAP. */ lp->a.write_csr (ioaddr, 0, csr0 & ~0x004f); + if (csr7 & 0x0800) + lp->a.write_csr(ioaddr, 7, csr7); + must_restart = 0; if (netif_msg_intr(lp)) @@ -1679,7 +1772,7 @@ if (csr0 & 0x0400) /* Rx interrupt */ pcnet32_rx(dev); - if (csr0 & 0x0200) { /* Tx-done interrupt */ + if (csr0 & 0x0200 || csr7 & 0x0800) { /* Tx-done or Timer interrupt */ unsigned int dirty_tx = lp->dirty_tx; int delta; @@ -1786,6 +1879,9 @@ lp->a.write_csr (ioaddr, 0, 0x0004); pcnet32_restart(dev, 0x0002); } + + csr0 = lp->a.read_csr (ioaddr, 0); + csr7 = lp->ltint ? lp->a.read_csr(ioaddr, 7) : 0; } /* Clear any other interrupt, and set interrupt enable. */ @@ -1872,6 +1968,7 @@ if (i > RX_RING_SIZE -2) { lp->stats.rx_dropped++; lp->rx_ring[entry].status |= le16_to_cpu(0x8000); + wmb(); /* Make sure adapter sees owner change */ lp->cur_rx++; } break; @@ -1935,6 +2032,10 @@ /* We stop the PCNET32 here -- it occasionally polls memory if we don't. */ lp->a.write_csr (ioaddr, 0, 0x0004); + if (lp->ltint) { /* Disable timer interrupts */ + lp->a.write_csr(ioaddr, 7, 0x0000); + } + /* * Switch back to 16bit mode to avoid problems with dumb * DOS packet driver after a warm reboot @@ -1945,9 +2046,12 @@ free_irq(dev->irq, dev); + spin_lock_irqsave(&lp->lock, flags); + /* free all allocated skbuffs */ for (i = 0; i < RX_RING_SIZE; i++) { lp->rx_ring[i].status = 0; + wmb(); /* Make sure adapter sees owner change */ if (lp->rx_skbuff[i]) { pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], PKT_BUF_SZ-2, PCI_DMA_FROMDEVICE); @@ -1958,6 +2062,8 @@ } for (i = 0; i < TX_RING_SIZE; i++) { + lp->tx_ring[i].status = 0; /* CPU owns buffer */ + wmb(); /* Make sure adapter sees owner change */ if (lp->tx_skbuff[i]) { pci_unmap_single(lp->pci_dev, lp->tx_dma_addr[i], lp->tx_skbuff[i]->len, PCI_DMA_TODEVICE); @@ -1966,6 +2072,8 @@ lp->tx_skbuff[i] = NULL; lp->tx_dma_addr[i] = 0; } + + spin_unlock_irqrestore(&lp->lock, flags); return 0; } diff -Nru a/drivers/net/r8169.c b/drivers/net/r8169.c --- a/drivers/net/r8169.c Tue May 18 23:38:07 2004 +++ b/drivers/net/r8169.c Tue May 18 23:38:07 2004 @@ -1156,7 +1156,7 @@ static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc) { - desc->addr = 0x0badbadbadbadbad; + desc->addr = 0x0badbadbadbadbadull; desc->status &= ~cpu_to_le32(OWNbit | RsvdMask); } diff -Nru a/drivers/net/rcif.h b/drivers/net/rcif.h --- a/drivers/net/rcif.h Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,292 +0,0 @@ -/* -** ************************************************************************* -** -** -** R C I F . H -** -** -** RedCreek InterFace include file. -** -** --------------------------------------------------------------------- -** --- Copyright (c) 1998-1999, RedCreek Communications Inc. --- -** --- All rights reserved. --- -** --------------------------------------------------------------------- -** -** File Description: -** -** Header file private ioctl commands. -** -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. - -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. - -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -** ************************************************************************* -*/ - -#ifndef RCIF_H -#define RCIF_H - -/* The following protocol revision # should be incremented every time - a new protocol or new structures are used in this file. */ -int USER_PROTOCOL_REV = 2; /* used to track different protocol revisions */ - -/* define a single TCB & buffer */ -typedef struct { /* a single buffer */ - U32 context; /* context */ - U32 scount; /* segment count */ - U32 size; /* segment size */ - U32 addr; /* segment physical address */ -} __attribute__ ((packed)) - singleB, *psingleB; -typedef struct { /* a single TCB */ - /* - ** +-----------------------+ - ** | 1 | one buffer in the TCB - ** +-----------------------+ - ** | | user's buffer reference - ** +-----------------------+ - ** | 1 | one segment buffer - ** +-----------------------+ _ - ** | | size \ - ** +-----------------------+ \ segment descriptor - ** | | physical address of buffer / - ** +-----------------------+ _/ - */ - U32 bcount; /* buffer count */ - singleB b; /* buffer */ - -} __attribute__ ((packed)) - singleTCB, *psingleTCB; - -/* - When adding new entries, please add all 5 related changes, since - it helps keep everything consistent: - 1) User structure entry - 2) User data entry - 3) Structure short-cut entry - 4) Data short-cut entry - 5) Command identifier entry - - For Example ("GETSPEED"): - 1) struct RCgetspeed_tag { U32 LinkSpeedCode; } RCgetspeed; - 2) struct RCgetspeed_tag *getspeed; - 3) #define RCUS_GETSPEED data.RCgetspeed; - 4) #define RCUD_GETSPEED _RC_user_data.getspeed - 5) #define RCUC_GETSPEED 0x02 - - Notes for the "GETSPEED" entry, above: - 1) RCgetspeed - RC{name} - RCgetspeed_tag - RC{name}_tag - LinkSpeedCode - create any structure format desired (not too large, - since memory will be unioned with all other entries) - 2) RCgetspeed_tag - RC{name}_tag chosen in #1 - getspeed - arbitrary name (ptr to structure in #1) - 3) RCUS_GETSPEED - RCUS_{NAME} ("NAME" & "name" do not have to the same) - data.RCgetspeed - data.RC{name} ("RC{name}" from #1) - 4) RCUD_GETSPEED - _RC_user_data.getspeed ("getspeed" from #2) - 5) RCUC_GETSPEED - unique hex identifier entry. -*/ - -typedef struct RC_user_tag RCuser_struct; - -/* 1) User structure entry */ -struct RC_user_tag { - int cmd; - union { - /* GETINFO structure */ - struct RCgetinfo_tag { - unsigned long int mem_start; - unsigned long int mem_end; - unsigned long int base_addr; - unsigned char irq; - unsigned char dma; - unsigned char port; - } RCgetinfo; /* <---- RCgetinfo */ - - /* GETSPEED structure */ - struct RCgetspeed_tag { - U32 LinkSpeedCode; - } RCgetspeed; /* <---- RCgetspeed */ - - /* SETSPEED structure */ - struct RCsetspeed_tag { - U16 LinkSpeedCode; - } RCsetspeed; /* <---- RCsetspeed */ - - /* GETPROM structure */ - struct RCgetprom_tag { - U32 PromMode; - } RCgetprom; /* <---- RCgetprom */ - - /* SETPROM structure */ - struct RCsetprom_tag { - U16 PromMode; - } RCsetprom; /* <---- RCsetprom */ - - /* GETBROADCAST structure */ - struct RCgetbroadcast_tag { - U32 BroadcastMode; - } RCgetbroadcast; /* <---- RCgetbroadcast */ - - /* SETBROADCAST structure */ - struct RCsetbroadcast_tag { - U16 BroadcastMode; - } RCsetbroadcast; /* <---- RCsetbroadcast */ - - /* GETFIRMWAREVER structure */ -#define FirmStringLen 80 - struct RCgetfwver_tag { - U8 FirmString[FirmStringLen]; - } RCgetfwver; /* <---- RCgetfwver */ - - /* GETIPANDMASK structure */ - struct RCgetipnmask_tag { - U32 IpAddr; - U32 NetMask; - } RCgetipandmask; /* <---- RCgetipandmask */ - - /* SETIPANDMASK structure */ - struct RCsetipnmask_tag { - U32 IpAddr; - U32 NetMask; - } RCsetipandmask; /* <---- RCsetipandmask */ - - /* GETMAC structure */ -#define MAC_SIZE 10 - struct RCgetmac_tag { - U8 mac[MAC_SIZE]; - } RCgetmac; /* <---- RCgetmac */ - - /* SETMAC structure */ - struct RCsetmac_tag { - U8 mac[MAC_SIZE]; - } RCsetmac; /* <---- RCsetmac */ - - /* GETLINKSTATUS structure */ - struct RCgetlnkstatus_tag { - U32 ReturnStatus; - } RCgetlnkstatus; /* <---- RCgetlnkstatus */ - - /* GETLINKSTATISTICS structure */ - struct RCgetlinkstats_tag { - RCLINKSTATS StatsReturn; - } RCgetlinkstats; /* <---- RCgetlinkstats */ - - /* DEFAULT structure (when no command was recognized) */ - struct RCdefault_tag { - int rc; - } RCdefault; /* <---- RCdefault */ - - } data; - -}; /* struct RC_user_tag { ... } */ - -/* 2) User data entry */ -/* RCUD = RedCreek User Data */ -union RC_user_data_tag { /* structure tags used are taken from RC_user_tag structure above */ - struct RCgetinfo_tag *getinfo; - struct RCgetspeed_tag *getspeed; - struct RCgetprom_tag *getprom; - struct RCgetbroadcast_tag *getbroadcast; - struct RCgetfwver_tag *getfwver; - struct RCgetipnmask_tag *getipandmask; - struct RCgetmac_tag *getmac; - struct RCgetlnkstatus_tag *getlinkstatus; - struct RCgetlinkstats_tag *getlinkstatistics; - struct RCdefault_tag *rcdefault; - struct RCsetspeed_tag *setspeed; - struct RCsetprom_tag *setprom; - struct RCsetbroadcast_tag *setbroadcast; - struct RCsetipnmask_tag *setipandmask; - struct RCsetmac_tag *setmac; -} _RC_user_data; /* declare as a global, so the defines below will work */ - -/* 3) Structure short-cut entry */ -/* define structure short-cuts *//* structure names are taken from RC_user_tag structure above */ -#define RCUS_GETINFO data.RCgetinfo; -#define RCUS_GETSPEED data.RCgetspeed; -#define RCUS_GETPROM data.RCgetprom; -#define RCUS_GETBROADCAST data.RCgetbroadcast; -#define RCUS_GETFWVER data.RCgetfwver; -#define RCUS_GETIPANDMASK data.RCgetipandmask; -#define RCUS_GETMAC data.RCgetmac; -#define RCUS_GETLINKSTATUS data.RCgetlnkstatus; -#define RCUS_GETLINKSTATISTICS data.RCgetlinkstats; -#define RCUS_DEFAULT data.RCdefault; -#define RCUS_SETSPEED data.RCsetspeed; -#define RCUS_SETPROM data.RCsetprom; -#define RCUS_SETBROADCAST data.RCsetbroadcast; -#define RCUS_SETIPANDMASK data.RCsetipandmask; -#define RCUS_SETMAC data.RCsetmac; - -/* 4) Data short-cut entry */ -/* define data short-cuts *//* pointer names are from RC_user_data_tag union (just below RC_user_tag) */ -#define RCUD_GETINFO _RC_user_data.getinfo -#define RCUD_GETSPEED _RC_user_data.getspeed -#define RCUD_GETPROM _RC_user_data.getprom -#define RCUD_GETBROADCAST _RC_user_data.getbroadcast -#define RCUD_GETFWVER _RC_user_data.getfwver -#define RCUD_GETIPANDMASK _RC_user_data.getipandmask -#define RCUD_GETMAC _RC_user_data.getmac -#define RCUD_GETLINKSTATUS _RC_user_data.getlinkstatus -#define RCUD_GETLINKSTATISTICS _RC_user_data.getlinkstatistics -#define RCUD_DEFAULT _RC_user_data.rcdefault -#define RCUD_SETSPEED _RC_user_data.setspeed -#define RCUD_SETPROM _RC_user_data.setprom -#define RCUD_SETBROADCAST _RC_user_data.setbroadcast -#define RCUD_SETIPANDMASK _RC_user_data.setipandmask -#define RCUD_SETMAC _RC_user_data.setmac - -/* 5) Command identifier entry */ -/* define command identifiers */ -#define RCUC_GETINFO 0x01 -#define RCUC_GETSPEED 0x02 -#define RCUC_GETFWVER 0x03 -#define RCUC_GETIPANDMASK 0x04 -#define RCUC_GETMAC 0x05 -#define RCUC_GETLINKSTATUS 0x06 -#define RCUC_GETLINKSTATISTICS 0x07 -#define RCUC_GETPROM 0x14 -#define RCUC_GETBROADCAST 0x15 -#define RCUC_DEFAULT 0xff -#define RCUC_SETSPEED 0x08 -#define RCUC_SETIPANDMASK 0x09 -#define RCUC_SETMAC 0x0a -#define RCUC_SETPROM 0x16 -#define RCUC_SETBROADCAST 0x17 - -/* define ioctl commands to use, when talking to RC 45/PCI driver */ -#define RCU_PROTOCOL_REV SIOCDEVPRIVATE -#define RCU_COMMAND SIOCDEVPRIVATE+1 - -/* - Intended use for the above defines is shown below (GETINFO, as this example): - - RCuser_struct RCuser; // declare RCuser structure - struct ifreq ifr; // declare an interface request structure - - RCuser.cmd = RCUC_GETINFO; // set user command to GETINFO - ifr->ifr_data = (caddr_t) &RCuser; // set point to user structure - - sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); // get a socket - ioctl(sock, RCU_COMMAND, &ifr); // do ioctl on socket - - RCUD_GETINFO = &RCuser.RCUS_GETINFO; // set data pointer for GETINFO - - // print results - printf("memory 0x%lx-0x%lx, base address 0x%x, irq 0x%x\n", - RCUD_GETINFO->mem_start, RCUD_GETINFO->mem_end, - RCUD_GETINFO->base_addr, RCUD_GETINFO->irq); -*/ - -#endif /* RCIF_H */ diff -Nru a/drivers/net/rclanmtl.c b/drivers/net/rclanmtl.c --- a/drivers/net/rclanmtl.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,2029 +0,0 @@ -/* -** ************************************************************************* -** -** -** R C L A N M T L . C $Revision: 6 $ -** -** -** RedCreek I2O LAN Message Transport Layer program module. -** -** --------------------------------------------------------------------- -** --- Copyright (c) 1997-1999, RedCreek Communications Inc. --- -** --- All rights reserved. --- -** --------------------------------------------------------------------- -** -** File Description: -** -** Host side I2O (Intelligent I/O) LAN message transport layer. -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. - -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. - -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -** -** 1998-1999, LAN API was modified and enhanced by Alice Hennessy. -** -** Sometime in 1997, LAN API was written from scratch by Wendell Nichols. -** ************************************************************************* -*/ - -#define DEBUG 1 - -#define RC_LINUX_MODULE -#include "rclanmtl.h" - - /* RedCreek LAN device Target ID */ -#define RC_LAN_TARGET_ID 0x10 - /* RedCreek's OSM default LAN receive Initiator */ -#define DEFAULT_RECV_INIT_CONTEXT 0xA17 - -/* -** I2O message structures -*/ - -#define I2O_TID_SZ 12 -#define I2O_FUNCTION_SZ 8 - -/* Transaction Reply Lists (TRL) Control Word structure */ - -#define I2O_TRL_FLAGS_SINGLE_FIXED_LENGTH 0x00 -#define I2O_TRL_FLAGS_SINGLE_VARIABLE_LENGTH 0x40 -#define I2O_TRL_FLAGS_MULTIPLE_FIXED_LENGTH 0x80 - -/* LAN Class specific functions */ - -#define I2O_LAN_PACKET_SEND 0x3B -#define I2O_LAN_SDU_SEND 0x3D -#define I2O_LAN_RECEIVE_POST 0x3E -#define I2O_LAN_RESET 0x35 -#define I2O_LAN_SHUTDOWN 0x37 - -/* Private Class specfic function */ -#define I2O_PRIVATE 0xFF - -/* I2O Executive Function Codes. */ - -#define I2O_EXEC_ADAPTER_ASSIGN 0xB3 -#define I2O_EXEC_ADAPTER_READ 0xB2 -#define I2O_EXEC_ADAPTER_RELEASE 0xB5 -#define I2O_EXEC_BIOS_INFO_SET 0xA5 -#define I2O_EXEC_BOOT_DEVICE_SET 0xA7 -#define I2O_EXEC_CONFIG_VALIDATE 0xBB -#define I2O_EXEC_CONN_SETUP 0xCA -#define I2O_EXEC_DEVICE_ASSIGN 0xB7 -#define I2O_EXEC_DEVICE_RELEASE 0xB9 -#define I2O_EXEC_HRT_GET 0xA8 -#define I2O_EXEC_IOP_CLEAR 0xBE -#define I2O_EXEC_IOP_CONNECT 0xC9 -#define I2O_EXEC_IOP_RESET 0xBD -#define I2O_EXEC_LCT_NOTIFY 0xA2 -#define I2O_EXEC_OUTBOUND_INIT 0xA1 -#define I2O_EXEC_PATH_ENABLE 0xD3 -#define I2O_EXEC_PATH_QUIESCE 0xC5 -#define I2O_EXEC_PATH_RESET 0xD7 -#define I2O_EXEC_STATIC_MF_CREATE 0xDD -#define I2O_EXEC_STATIC_MF_RELEASE 0xDF -#define I2O_EXEC_STATUS_GET 0xA0 -#define I2O_EXEC_SW_DOWNLOAD 0xA9 -#define I2O_EXEC_SW_UPLOAD 0xAB -#define I2O_EXEC_SW_REMOVE 0xAD -#define I2O_EXEC_SYS_ENABLE 0xD1 -#define I2O_EXEC_SYS_MODIFY 0xC1 -#define I2O_EXEC_SYS_QUIESCE 0xC3 -#define I2O_EXEC_SYS_TAB_SET 0xA3 - - /* Init Outbound Q status */ -#define I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS 0x01 -#define I2O_EXEC_OUTBOUND_INIT_REJECTED 0x02 -#define I2O_EXEC_OUTBOUND_INIT_FAILED 0x03 -#define I2O_EXEC_OUTBOUND_INIT_COMPLETE 0x04 - -#define I2O_UTIL_NOP 0x00 - -/* I2O Get Status State values */ - -#define I2O_IOP_STATE_INITIALIZING 0x01 -#define I2O_IOP_STATE_RESET 0x02 -#define I2O_IOP_STATE_HOLD 0x04 -#define I2O_IOP_STATE_READY 0x05 -#define I2O_IOP_STATE_OPERATIONAL 0x08 -#define I2O_IOP_STATE_FAILED 0x10 -#define I2O_IOP_STATE_FAULTED 0x11 - -/* Defines for Request Status Codes: Table 3-1 Reply Status Codes. */ - -#define I2O_REPLY_STATUS_SUCCESS 0x00 -#define I2O_REPLY_STATUS_ABORT_DIRTY 0x01 -#define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02 -#define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03 -#define I2O_REPLY_STATUS_ERROR_DIRTY 0x04 -#define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05 -#define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06 -#define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x07 -#define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x08 -#define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x09 -#define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0A -#define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80 - -/* DetailedStatusCode defines for ALL messages: Table 3-2 Detailed Status Codes.*/ - -#define I2O_DETAIL_STATUS_SUCCESS 0x0000 -#define I2O_DETAIL_STATUS_BAD_KEY 0x0001 -#define I2O_DETAIL_STATUS_CHAIN_BUFFER_TOO_LARGE 0x0002 -#define I2O_DETAIL_STATUS_DEVICE_BUSY 0x0003 -#define I2O_DETAIL_STATUS_DEVICE_LOCKED 0x0004 -#define I2O_DETAIL_STATUS_DEVICE_NOT_AVAILABLE 0x0005 -#define I2O_DETAIL_STATUS_DEVICE_RESET 0x0006 -#define I2O_DETAIL_STATUS_INAPPROPRIATE_FUNCTION 0x0007 -#define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_HARD 0x0008 -#define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_SOFT 0x0009 -#define I2O_DETAIL_STATUS_INVALID_INITIATOR_ADDRESS 0x000A -#define I2O_DETAIL_STATUS_INVALID_MESSAGE_FLAGS 0x000B -#define I2O_DETAIL_STATUS_INVALID_OFFSET 0x000C -#define I2O_DETAIL_STATUS_INVALID_PARAMETER 0x000D -#define I2O_DETAIL_STATUS_INVALID_REQUEST 0x000E -#define I2O_DETAIL_STATUS_INVALID_TARGET_ADDRESS 0x000F -#define I2O_DETAIL_STATUS_MESSAGE_TOO_LARGE 0x0010 -#define I2O_DETAIL_STATUS_MESSAGE_TOO_SMALL 0x0011 -#define I2O_DETAIL_STATUS_MISSING_PARAMETER 0x0012 -#define I2O_DETAIL_STATUS_NO_SUCH_PAGE 0x0013 -#define I2O_DETAIL_STATUS_REPLY_BUFFER_FULL 0x0014 -#define I2O_DETAIL_STATUS_TCL_ERROR 0x0015 -#define I2O_DETAIL_STATUS_TIMEOUT 0x0016 -#define I2O_DETAIL_STATUS_UNKNOWN_ERROR 0x0017 -#define I2O_DETAIL_STATUS_UNKNOWN_FUNCTION 0x0018 -#define I2O_DETAIL_STATUS_UNSUPPORTED_FUNCTION 0x0019 -#define I2O_DETAIL_STATUS_UNSUPPORTED_VERSION 0x001A - - /* I2O msg header defines for VersionOffset */ -#define I2OMSGVER_1_5 0x0001 -#define SGL_OFFSET_0 I2OMSGVER_1_5 -#define SGL_OFFSET_4 (0x0040 | I2OMSGVER_1_5) -#define TRL_OFFSET_5 (0x0050 | I2OMSGVER_1_5) -#define TRL_OFFSET_6 (0x0060 | I2OMSGVER_1_5) - - /* I2O msg header defines for MsgFlags */ -#define MSG_STATIC 0x0100 -#define MSG_64BIT_CNTXT 0x0200 -#define MSG_MULTI_TRANS 0x1000 -#define MSG_FAIL 0x2000 -#define MSG_LAST 0x4000 -#define MSG_REPLY 0x8000 - - /* normal LAN request message MsgFlags and VersionOffset (0x1041) */ -#define LAN_MSG_REQST (MSG_MULTI_TRANS | SGL_OFFSET_4) - - /* minimum size msg */ -#define THREE_WORD_MSG_SIZE 0x00030000 -#define FOUR_WORD_MSG_SIZE 0x00040000 -#define FIVE_WORD_MSG_SIZE 0x00050000 -#define SIX_WORD_MSG_SIZE 0x00060000 -#define SEVEN_WORD_MSG_SIZE 0x00070000 -#define EIGHT_WORD_MSG_SIZE 0x00080000 -#define NINE_WORD_MSG_SIZE 0x00090000 - -/* Special TID Assignments */ - -#define I2O_IOP_TID 0 -#define I2O_HOST_TID 0xB91 - - /* RedCreek I2O private message codes */ -#define RC_PRIVATE_GET_MAC_ADDR 0x0001/**/ /* OBSOLETE */ -#define RC_PRIVATE_SET_MAC_ADDR 0x0002 -#define RC_PRIVATE_GET_NIC_STATS 0x0003 -#define RC_PRIVATE_GET_LINK_STATUS 0x0004 -#define RC_PRIVATE_SET_LINK_SPEED 0x0005 -#define RC_PRIVATE_SET_IP_AND_MASK 0x0006 -/* #define RC_PRIVATE_GET_IP_AND_MASK 0x0007 *//* OBSOLETE */ -#define RC_PRIVATE_GET_LINK_SPEED 0x0008 -#define RC_PRIVATE_GET_FIRMWARE_REV 0x0009 -/* #define RC_PRIVATE_GET_MAC_ADDR 0x000A */ -#define RC_PRIVATE_GET_IP_AND_MASK 0x000B -#define RC_PRIVATE_DEBUG_MSG 0x000C -#define RC_PRIVATE_REPORT_DRIVER_CAPABILITY 0x000D -#define RC_PRIVATE_SET_PROMISCUOUS_MODE 0x000e -#define RC_PRIVATE_GET_PROMISCUOUS_MODE 0x000f -#define RC_PRIVATE_SET_BROADCAST_MODE 0x0010 -#define RC_PRIVATE_GET_BROADCAST_MODE 0x0011 - -#define RC_PRIVATE_REBOOT 0x00FF - -/* I2O message header */ -typedef struct _I2O_MESSAGE_FRAME { - U8 VersionOffset; - U8 MsgFlags; - U16 MessageSize; - BF TargetAddress:I2O_TID_SZ; - BF InitiatorAddress:I2O_TID_SZ; - BF Function:I2O_FUNCTION_SZ; - U32 InitiatorContext; - /* SGL[] */ -} I2O_MESSAGE_FRAME, *PI2O_MESSAGE_FRAME; - - /* assumed a 16K minus 256 byte space for outbound queue message frames */ -#define MSG_FRAME_SIZE 512 -#define NMBR_MSG_FRAMES 30 - - /* - ** in reserved space right after PAB in host memory is area for returning - ** values from card - */ - -/* -** typedef NICSTAT -** -** Data structure for NIC statistics retruned from PCI card. Data copied from -** here to user allocated RCLINKSTATS (see rclanmtl.h) structure. -*/ -typedef struct tag_NicStat { - unsigned long TX_good; - unsigned long TX_maxcol; - unsigned long TX_latecol; - unsigned long TX_urun; - unsigned long TX_crs; /* lost carrier sense */ - unsigned long TX_def; /* transmit deferred */ - unsigned long TX_singlecol; /* single collisions */ - unsigned long TX_multcol; - unsigned long TX_totcol; - unsigned long Rcv_good; - unsigned long Rcv_CRCerr; - unsigned long Rcv_alignerr; - unsigned long Rcv_reserr; /* rnr'd pkts */ - unsigned long Rcv_orun; - unsigned long Rcv_cdt; - unsigned long Rcv_runt; - unsigned long dump_status; /* last field directly from the chip */ -} NICSTAT, *P_NICSTAT; - -#define DUMP_DONE 0x0000A005 /* completed statistical dump */ -#define DUMP_CLEAR 0x0000A007 /* completed stat dump and clear counters */ - -static volatile int msgFlag; - -/* local function prototypes */ -static void ProcessOutboundI2OMsg (PPAB pPab, U32 phyMsgAddr); -static int FillI2OMsgSGLFromTCB (PU32 pMsg, PRCTCB pXmitCntrlBlock); -static int GetI2OStatus (PPAB pPab); -static int SendI2OOutboundQInitMsg (PPAB pPab); -static int SendEnableSysMsg (PPAB pPab); - -/* -** ========================================================================= -** RCInitI2OMsgLayer() -** -** Initialize the RedCreek I2O Module and adapter. -** -** Inputs: dev - the devices net_device struct -** TransmitCallbackFunction - address of transmit callback function -** ReceiveCallbackFunction - address of receive callback function -** -** private message block is allocated by user. It must be in locked pages. -** p_msgbuf and p_phymsgbuf point to the same location. Must be contigous -** memory block of a minimum of 16K byte and long word aligned. -** ========================================================================= -*/ -RC_RETURN -RCInitI2OMsgLayer (struct net_device *dev, - PFNTXCALLBACK TransmitCallbackFunction, - PFNRXCALLBACK ReceiveCallbackFunction, - PFNCALLBACK RebootCallbackFunction) -{ - int result; - PPAB pPab; - U32 pciBaseAddr = dev->base_addr; - PDPA pDpa = dev->priv; - PU8 p_msgbuf = pDpa->msgbuf; - PU8 p_phymsgbuf = (PU8) pDpa->msgbuf_dma; - - dprintk - ("InitI2O: Adapter:0x%04ux ATU:0x%08ulx msgbuf:%p phymsgbuf:0x%08ulx\n" - "TransmitCallbackFunction:0x%08ulx ReceiveCallbackFunction:0x%08ulx\n", - pDpa->id, pciBaseAddr, p_msgbuf, (u32) p_phymsgbuf, - (u32) TransmitCallbackFunction, (u32) ReceiveCallbackFunction); - - /* Check if this interface already initialized - if so, shut it down */ - if (pDpa->pPab != NULL) { - printk (KERN_WARNING - "(rcpci45 driver:) pDpa->pPab [%d] != NULL\n", - pDpa->id); -/* RCResetLANCard(pDpa->id, 0, (PU32)NULL, (PFNCALLBACK)NULL); */ - pDpa->pPab = NULL; - } - - /* store adapter instance values in adapter block. - * Adapter block is at beginning of message buffer */ - - pPab = kmalloc (sizeof (*pPab), GFP_KERNEL); - if (!pPab) { - printk (KERN_ERR - "(rcpci45 driver:) RCInitI2OMsgLayer: Could not allocate memory for PAB struct!\n"); - result = RC_RTN_MALLOC_ERROR; - goto err_out; - } - - memset (pPab, 0, sizeof (*pPab)); - pDpa->pPab = pPab; - pPab->p_atu = (PATU) pciBaseAddr; - pPab->pPci45LinBaseAddr = (PU8) pciBaseAddr; - - /* Set outbound message frame addr */ - pPab->outMsgBlockPhyAddr = (U32) p_phymsgbuf; - pPab->pLinOutMsgBlock = (PU8) p_msgbuf; - - /* store callback function addresses */ - pPab->pTransCallbackFunc = TransmitCallbackFunction; - pPab->pRecvCallbackFunc = ReceiveCallbackFunction; - pPab->pRebootCallbackFunc = RebootCallbackFunction; - pPab->pCallbackFunc = (PFNCALLBACK) NULL; - - /* - ** Initialize I2O IOP - */ - result = GetI2OStatus (pPab); - - if (result != RC_RTN_NO_ERROR) - goto err_out_dealloc; - - if (pPab->IOPState == I2O_IOP_STATE_OPERATIONAL) { - printk (KERN_INFO - "(rcpci45 driver:) pPab->IOPState == op: resetting adapter\n"); - RCResetLANCard (dev, 0, (PU32) NULL, (PFNCALLBACK) NULL); - } - - result = SendI2OOutboundQInitMsg (pPab); - - if (result != RC_RTN_NO_ERROR) - goto err_out_dealloc; - - result = SendEnableSysMsg (pPab); - - if (result != RC_RTN_NO_ERROR) - goto err_out_dealloc; - - return RC_RTN_NO_ERROR; - - err_out_dealloc: - kfree (pPab); - err_out: - return result; -} - -/* -** ========================================================================= -** Disable and Enable I2O interrupts. I2O interrupts are enabled at Init time -** but can be disabled and re-enabled through these two function calls. -** Packets will still be put into any posted received buffers and packets will -** be sent through RCI2OSendPacket() functions. Disabling I2O interrupts -** will prevent hardware interrupt to host even though the outbound I2O msg -** queue is not emtpy. -** ========================================================================= -*/ -#define i960_OUT_POST_Q_INT_BIT 0x0008 /* bit set masks interrupts */ - -RC_RETURN -RCDisableI2OInterrupts (struct net_device * dev) -{ - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - pPab->p_atu->OutIntMask |= i960_OUT_POST_Q_INT_BIT; - - return RC_RTN_NO_ERROR; -} - -RC_RETURN -RCEnableI2OInterrupts (struct net_device * dev) -{ - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - pPab->p_atu->OutIntMask &= ~i960_OUT_POST_Q_INT_BIT; - - return RC_RTN_NO_ERROR; - -} - -/* -** ========================================================================= -** RCI2OSendPacket() -** ========================================================================= -*/ -RC_RETURN -RCI2OSendPacket (struct net_device * dev, U32 InitiatorContext, - PRCTCB pTransCtrlBlock) -{ - U32 msgOffset; - PU32 pMsg; - int size; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - dprintk ("RCI2OSendPacket()...\n"); - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - /* get Inbound free Q entry - reading from In Q gets free Q entry */ - /* offset to Msg Frame in PCI msg block */ - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("RCI2OSendPacket(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - size = FillI2OMsgSGLFromTCB (pMsg + 4, pTransCtrlBlock); - - if (size == -1) { /* error processing TCB - send NOP msg */ - dprintk ("RCI2OSendPacket(): Error Rrocess TCB!\n"); - pMsg[0] = THREE_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = - I2O_UTIL_NOP << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - return RC_RTN_TCB_ERROR; - } else { /* send over msg header */ - - pMsg[0] = (size + 4) << 16 | LAN_MSG_REQST; /* send over message size and flags */ - pMsg[1] = - I2O_LAN_PACKET_SEND << 24 | I2O_HOST_TID << 12 | - RC_LAN_TARGET_ID; - pMsg[2] = InitiatorContext; - pMsg[3] = 0; /* batch reply */ - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - return RC_RTN_NO_ERROR; - } -} - -/* -** ========================================================================= -** RCI2OPostRecvBuffer() -** -** inputs: pBufrCntrlBlock - pointer to buffer control block -** -** returns TRUE if successful in sending message, else FALSE. -** ========================================================================= -*/ -RC_RETURN -RCPostRecvBuffers (struct net_device * dev, PRCTCB pTransCtrlBlock) -{ - U32 msgOffset; - PU32 pMsg; - int size; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - dprintk ("RCPostRecvBuffers()...\n"); - - /* search for DeviceHandle */ - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - /* get Inbound free Q entry - reading from In Q gets free Q entry */ - /* offset to Msg Frame in PCI msg block */ - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("RCPostRecvBuffers(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - size = FillI2OMsgSGLFromTCB (pMsg + 4, pTransCtrlBlock); - - if (size == -1) { /* error prcessing TCB - send 3 DWORD private msg == NOP */ - dprintk - ("RCPostRecvBuffers(): Error Processing TCB! size = %d\n", - size); - pMsg[0] = THREE_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = - I2O_UTIL_NOP << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - /* post to Post Q */ - pPab->p_atu->InQueue = msgOffset; - return RC_RTN_TCB_ERROR; - } else { /* send over size msg header */ - - pMsg[0] = (size + 4) << 16 | LAN_MSG_REQST; /* send over message size and flags */ - pMsg[1] = - I2O_LAN_RECEIVE_POST << 24 | I2O_HOST_TID << 12 | - RC_LAN_TARGET_ID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = *(PU32) pTransCtrlBlock; /* number of packet buffers */ - /* post to Post Q */ - pPab->p_atu->InQueue = msgOffset; - return RC_RTN_NO_ERROR; - } -} - -/* -** ========================================================================= -** RCProcI2OMsgQ() -** -** Process I2O outbound message queue until empty. -** ========================================================================= -*/ -irqreturn_t -RCProcI2OMsgQ (struct net_device *dev) -{ - U32 phyAddrMsg; - PU8 p8Msg; - PU32 p32; - U16 count; - PPAB pPab = ((PDPA) dev->priv)->pPab; - unsigned char debug_msg[20]; - - if (pPab == NULL) - return IRQ_NONE; - - phyAddrMsg = pPab->p_atu->OutQueue; - - while (phyAddrMsg != 0xFFFFFFFF) { - p8Msg = - pPab->pLinOutMsgBlock + (phyAddrMsg - - pPab->outMsgBlockPhyAddr); - p32 = (PU32) p8Msg; - - dprintk ("msg: 0x%x 0x%x \n", p8Msg[7], p32[5]); - - /* Send Packet Reply Msg */ - if (I2O_LAN_PACKET_SEND == p8Msg[7]) { /* function code byte */ - count = *(PU16) (p8Msg + 2); - count -= p8Msg[0] >> 4; - /* status, count, context[], adapter */ - (*pPab->pTransCallbackFunc) (p8Msg[19], count, p32 + 5, - dev); - } else if (I2O_LAN_RECEIVE_POST == p8Msg[7]) { /* Receive Packet Reply Msg */ - dprintk - ("I2O_RECV_REPLY pPab:0x%08ulx p8Msg:0x%08ulx p32:0x%08ulx\n", - (u32) pPab, (u32) p8Msg, (u32) p32); - dprintk ("msg: 0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - p32[0], p32[1], p32[2], p32[3]); - dprintk (" 0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - p32[4], p32[5], p32[6], p32[7]); - dprintk (" 0x%08ulx:0X%08ulx:0x%08ulx:0x%08ulx\n", - p32[8], p32[9], p32[10], p32[11]); - /* status, count, buckets remaining, packetParmBlock, adapter */ - (*pPab->pRecvCallbackFunc) (p8Msg[19], p8Msg[12], - p32[5], p32 + 6, dev); - } else if (I2O_LAN_RESET == p8Msg[7] - || I2O_LAN_SHUTDOWN == p8Msg[7]) - if (pPab->pCallbackFunc) - (*pPab->pCallbackFunc) (p8Msg[19], 0, 0, dev); - else - pPab->pCallbackFunc = (PFNCALLBACK) 1; - else if (I2O_PRIVATE == p8Msg[7]) { - dprintk ("i2o private 0x%x, 0x%x \n", p8Msg[7], p32[5]); - switch (p32[5]) { - case RC_PRIVATE_DEBUG_MSG: - msgFlag = 1; - dprintk ("Received I2O_PRIVATE msg\n"); - debug_msg[15] = (p32[6] & 0xff000000) >> 24; - debug_msg[14] = (p32[6] & 0x00ff0000) >> 16; - debug_msg[13] = (p32[6] & 0x0000ff00) >> 8; - debug_msg[12] = (p32[6] & 0x000000ff); - - debug_msg[11] = (p32[7] & 0xff000000) >> 24; - debug_msg[10] = (p32[7] & 0x00ff0000) >> 16; - debug_msg[9] = (p32[7] & 0x0000ff00) >> 8; - debug_msg[8] = (p32[7] & 0x000000ff); - - debug_msg[7] = (p32[8] & 0xff000000) >> 24; - debug_msg[6] = (p32[8] & 0x00ff0000) >> 16; - debug_msg[5] = (p32[8] & 0x0000ff00) >> 8; - debug_msg[4] = (p32[8] & 0x000000ff); - - debug_msg[3] = (p32[9] & 0xff000000) >> 24; - debug_msg[2] = (p32[9] & 0x00ff0000) >> 16; - debug_msg[1] = (p32[9] & 0x0000ff00) >> 8; - debug_msg[0] = (p32[9] & 0x000000ff); - - debug_msg[16] = '\0'; - dprintk ("%s", debug_msg); - break; - case RC_PRIVATE_REBOOT: - dprintk ("Adapter reboot initiated...\n"); - if (pPab->pRebootCallbackFunc) - (*pPab->pRebootCallbackFunc) (0, 0, 0, - dev); - break; - default: - printk (KERN_WARNING - "(rcpci45 driver:) Unknown private I2O msg received: 0x%x\n", - p32[5]); - break; - } - } - - /* - ** Process other Msg's - */ - else - ProcessOutboundI2OMsg (pPab, phyAddrMsg); - - /* return MFA to outbound free Q */ - pPab->p_atu->OutQueue = phyAddrMsg; - - /* any more msgs? */ - phyAddrMsg = pPab->p_atu->OutQueue; - } - - return IRQ_HANDLED; -} - -/* -** ========================================================================= -** Returns LAN interface statistical counters to space provided by caller at -** StatsReturnAddr. Returns 0 if success, else RC_RETURN code. -** This function will call the WaitCallback function provided by -** user while waiting for card to respond. -** ========================================================================= -*/ -RC_RETURN -RCGetLinkStatistics (struct net_device *dev, - P_RCLINKSTATS StatsReturnAddr, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset; - volatile U32 timeout; - volatile PU32 pMsg; - volatile PU32 p32, pReturnAddr; - P_NICSTAT pStats; - int i; - PPAB pPab = ((PDPA) dev->priv)->pPab; - -/*dprintk("Get82558Stats() StatsReturnAddr:0x%08ulx\n", StatsReturnAddr); */ - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("Get8255XStats(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - -/*dprintk("Get82558Stats - pMsg = 0x%08ulx, InQ msgOffset = 0x%08ulx\n", pMsg, msgOffset);*/ -/*dprintk("Get82558Stats - pMsg = 0x%08X, InQ msgOffset = 0x%08X\n", pMsg, msgOffset);*/ - - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = 0x112; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_NIC_STATS; - pMsg[5] = pPab->outMsgBlockPhyAddr; - - p32 = (PU32) pPab->outMsgBlockPhyAddr; - pStats = (P_NICSTAT) pPab->pLinOutMsgBlock; - pStats->dump_status = 0xFFFFFFFF; - - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - - timeout = 100000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); - - if (pStats->dump_status != 0xFFFFFFFF) - break; - - if (!timeout--) { - dprintk - ("RCGet82558Stats() Timeout waiting for NIC statistics\n"); - return RC_RTN_MSG_REPLY_TIMEOUT; - } - } - - pReturnAddr = (PU32) StatsReturnAddr; - - /* copy Nic stats to user's structure */ - for (i = 0; i < (int) sizeof (RCLINKSTATS) / 4; i++) - pReturnAddr[i] = p32[i]; - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** Get82558LinkStatus() -** ========================================================================= -*/ -RC_RETURN -RCGetLinkStatus (struct net_device * dev, PU32 ReturnAddr, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset; - volatile U32 timeout; - volatile PU32 pMsg; - volatile PU32 p32; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - dprintk ("Get82558LinkStatus() ReturnPhysAddr:0x%08ulx\n", - (u32) ReturnAddr); - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("Get82558LinkStatus(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); -/*dprintk("Get82558LinkStatus - pMsg = 0x%08ulx, InQ msgOffset = 0x%08ulx\n", pMsg, msgOffset);*/ -/*dprintk("Get82558LinkStatus - pMsg = 0x%08X, InQ msgOffset = 0x%08X\n", pMsg, msgOffset);*/ - - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = 0x112; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_LINK_STATUS; - pMsg[5] = pPab->outMsgBlockPhyAddr; - - p32 = (PU32) pPab->pLinOutMsgBlock; - *p32 = 0xFFFFFFFF; - - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - - timeout = 100000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); - - if (*p32 != 0xFFFFFFFF) - break; - - if (!timeout--) { - dprintk ("Timeout waiting for link status\n"); - return RC_RTN_MSG_REPLY_TIMEOUT; - } - } - - *ReturnAddr = *p32; /* 1 = up 0 = down */ - - return RC_RTN_NO_ERROR; - -} - -/* -** ========================================================================= -** RCGetMAC() -** -** get the MAC address the adapter is listening for in non-promiscous mode. -** MAC address is in media format. -** ========================================================================= -*/ -RC_RETURN -RCGetMAC (struct net_device * dev, PFNWAITCALLBACK WaitCallback) -{ - unsigned timeout; - U32 off; - PU8 mac = dev->dev_addr; - PU32 p; - U32 temp[2]; - PPAB pPab = ((PDPA) dev->priv)->pPab; - PATU p_atu; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - p_atu = pPab->p_atu; - - p_atu->EtherMacLow = 0; /* first zero return data */ - p_atu->EtherMacHi = 0; - - off = p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - p = (PU32) (pPab->pPci45LinBaseAddr + off); - - dprintk ("RCGetMAC: p_atu 0x%08x, off 0x%08x, p 0x%08x\n", - (uint) p_atu, (uint) off, (uint) p); - /* setup private message */ - p[0] = FIVE_WORD_MSG_SIZE | SGL_OFFSET_0; - p[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - p[2] = 0; /* initiator context */ - p[3] = 0x218; /* transaction context */ - p[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_MAC_ADDR; - - p_atu->InQueue = off; /* send it to the I2O device */ - dprintk ("RCGetMAC: p_atu 0x%08x, off 0x%08x, p 0x%08x\n", - (uint) p_atu, (uint) off, (uint) p); - - /* wait for the rcpci45 board to update the info */ - timeout = 1000000; - while (0 == p_atu->EtherMacLow) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); - - if (!timeout--) { - printk ("rc_getmac: Timeout\n"); - return RC_RTN_MSG_REPLY_TIMEOUT; - } - } - - /* read the mac address */ - temp[0] = p_atu->EtherMacLow; - temp[1] = p_atu->EtherMacHi; - memcpy ((char *) mac, (char *) temp, 6); - - dprintk ("rc_getmac: 0x%x\n", (u32) mac); - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCSetMAC() -** -** set MAC address the adapter is listening for in non-promiscous mode. -** MAC address is in media format. -** ========================================================================= -*/ -RC_RETURN -RCSetMAC (struct net_device * dev, PU8 mac) -{ - U32 off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SEVEN_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_SET_MAC_ADDR; - pMsg[5] = *(unsigned *) mac; /* first four bytes */ - pMsg[6] = *(unsigned *) (mac + 4); /* last two bytes */ - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCSetLinkSpeed() -** -** set ethernet link speed. -** input: speedControl - determines action to take as follows -** 0 = reset and auto-negotiate (NWay) -** 1 = Full Duplex 100BaseT -** 2 = Half duplex 100BaseT -** 3 = Full Duplex 10BaseT -** 4 = Half duplex 10BaseT -** all other values are ignore (do nothing) -** ========================================================================= -*/ -RC_RETURN -RCSetLinkSpeed (struct net_device * dev, U16 LinkSpeedCode) -{ - U32 off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_SET_LINK_SPEED; - pMsg[5] = LinkSpeedCode; /* link speed code */ - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCSetPromiscuousMode() -** -** Defined values for Mode: -** 0 - turn off promiscuous mode -** 1 - turn on promiscuous mode -** -** ========================================================================= -*/ -RC_RETURN -RCSetPromiscuousMode (struct net_device * dev, U16 Mode) -{ - U32 off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_SET_PROMISCUOUS_MODE; - pMsg[5] = Mode; /* promiscuous mode setting */ - - pPab->p_atu->InQueue = off; /* send it to the device */ - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCGetPromiscuousMode() -** -** get promiscuous mode setting -** -** Possible return values placed in pMode: -** 0 = promisuous mode not set -** 1 = promisuous mode is set -** -** ========================================================================= -*/ -RC_RETURN -RCGetPromiscuousMode (struct net_device * dev, PU32 pMode, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset, timeout; - PU32 pMsg; - volatile PU32 p32; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - printk (KERN_WARNING - "(rcpci45 driver:) RCGetLinkSpeed(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0xff; - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_PROMISCUOUS_MODE; - /* phys address to return status - area right after PAB */ - pMsg[5] = pPab->outMsgBlockPhyAddr; - - /* post to Inbound Post Q */ - - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 1000000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] != 0xff) - break; - - if (!timeout--) { - dprintk - ("Timeout waiting for promiscuous mode from adapter\n"); - dprintk ("0x%8x\n", p32[0]); - return RC_RTN_NO_LINK_SPEED; - } - } - - /* get mode */ - *pMode = (U8) ((volatile PU8) p32)[0] & 0x0f; - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCSetBroadcastMode() -** -** Defined values for Mode: -** 0 - turn off promiscuous mode -** 1 - turn on promiscuous mode -** -** ========================================================================= -*/ -RC_RETURN -RCSetBroadcastMode (struct net_device * dev, U16 Mode) -{ - U32 off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_SET_BROADCAST_MODE; - pMsg[5] = Mode; /* promiscuous mode setting */ - - pPab->p_atu->InQueue = off; /* send it to the device */ - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCGetBroadcastMode() -** -** get promiscuous mode setting -** -** Possible return values placed in pMode: -** 0 = promisuous mode not set -** 1 = promisuous mode is set -** -** ========================================================================= -*/ -RC_RETURN -RCGetBroadcastMode (struct net_device * dev, PU32 pMode, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset, timeout; - PU32 pMsg; - volatile PU32 p32; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - printk (KERN_WARNING - "(rcpci45 driver:) RCGetLinkSpeed(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0xff; - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_BROADCAST_MODE; - /* phys address to return status - area right after PAB */ - pMsg[5] = pPab->outMsgBlockPhyAddr; - - /* post to Inbound Post Q */ - - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 1000000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] != 0xff) - break; - - if (!timeout--) { - printk (KERN_WARNING - "(rcpci45 driver:) Timeout waiting for promiscuous mode from adapter\n"); - printk (KERN_WARNING "(rcpci45 driver:) 0x%8x\n", - p32[0]); - return RC_RTN_NO_LINK_SPEED; - } - } - - /* get mode */ - *pMode = (U8) ((volatile PU8) p32)[0] & 0x0f; - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCGetLinkSpeed() -** -** get ethernet link speed. -** -** 0 = Unknown -** 1 = Full Duplex 100BaseT -** 2 = Half duplex 100BaseT -** 3 = Full Duplex 10BaseT -** 4 = Half duplex 10BaseT -** -** ========================================================================= -*/ -RC_RETURN -RCGetLinkSpeed (struct net_device * dev, PU32 pLinkSpeedCode, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset, timeout; - PU32 pMsg; - volatile PU32 p32; - U8 IOPLinkSpeed; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - printk (KERN_WARNING - "(rcpci45 driver:) RCGetLinkSpeed(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0xff; - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_LINK_SPEED; - /* phys address to return status - area right after PAB */ - pMsg[5] = pPab->outMsgBlockPhyAddr; - - /* post to Inbound Post Q */ - - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 1000000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] != 0xff) - break; - - if (!timeout--) { - dprintk ("Timeout waiting for link speed from IOP\n"); - dprintk ("0x%8x\n", p32[0]); - return RC_RTN_NO_LINK_SPEED; - } - } - - /* get Link speed */ - IOPLinkSpeed = (U8) ((volatile PU8) p32)[0] & 0x0f; - - *pLinkSpeedCode = IOPLinkSpeed; - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCReportDriverCapability(struct net_device *dev, U32 capability) -** -** Currently defined bits: -** WARM_REBOOT_CAPABLE 0x01 -** -** ========================================================================= -*/ -RC_RETURN -RCReportDriverCapability (struct net_device * dev, U32 capability) -{ - U32 off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = - RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_REPORT_DRIVER_CAPABILITY; - pMsg[5] = capability; - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCGetFirmwareVer() -** -** Return firmware version in the form "SoftwareVersion : Bt BootVersion" -** -** ========================================================================= -*/ -RC_RETURN -RCGetFirmwareVer (struct net_device * dev, PU8 pFirmString, - PFNWAITCALLBACK WaitCallback) -{ - U32 msgOffset, timeout; - PU32 pMsg; - volatile PU32 p32; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - msgOffset = pPab->p_atu->InQueue; - if (msgOffset == 0xFFFFFFFF) { - dprintk ("RCGetFirmwareVer(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0xff; - - /* setup private message */ - pMsg[0] = SIX_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_FIRMWARE_REV; - /* phys address to return status - area right after PAB */ - pMsg[5] = pPab->outMsgBlockPhyAddr; - - /* post to Inbound Post Q */ - - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 1000000; - while (1) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] != 0xff) - break; - - if (!timeout--) { - dprintk ("Timeout waiting for link speed from IOP\n"); - return RC_RTN_NO_FIRM_VER; - } - } - - strcpy (pFirmString, (PU8) p32); - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCResetLANCard() -** -** ResourceFlags indicates whether to return buffer resource explicitly -** to host or keep and reuse. -** CallbackFunction (if not NULL) is the function to be called when -** reset is complete. -** If CallbackFunction is NULL, ReturnAddr will have a 1 placed in it when -** reset is done (if not NULL). -** -** ========================================================================= -*/ -RC_RETURN -RCResetLANCard (struct net_device * dev, U16 ResourceFlags, PU32 ReturnAddr, - PFNCALLBACK CallbackFunction) -{ - unsigned long off; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - long timeout = 0; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pPab->pCallbackFunc = CallbackFunction; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup message */ - pMsg[0] = FOUR_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_LAN_RESET << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = ResourceFlags << 16; /* resource flags */ - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - - if (CallbackFunction == (PFNCALLBACK) NULL) { - /* call RCProcI2OMsgQ() until something in pPab->pCallbackFunc - or until timer goes off */ - while (pPab->pCallbackFunc == (PFNCALLBACK) NULL) { - RCProcI2OMsgQ (dev); - udelay (1000); /* please don't hog the bus!!! */ - timeout++; - if (timeout > 10000) { - break; - } - } - if (ReturnAddr != (PU32) NULL) - *ReturnAddr = (U32) pPab->pCallbackFunc; - } - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCResetIOP() -** -** Send StatusGet Msg, wait for results return directly to buffer. -** -** ========================================================================= -*/ -RC_RETURN -RCResetIOP (struct net_device * dev) -{ - U32 msgOffset, timeout; - PU32 pMsg; - PPAB pPab = ((PDPA) dev->priv)->pPab; - volatile PU32 p32; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - pMsg[0] = NINE_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_EXEC_IOP_RESET << 24 | I2O_HOST_TID << 12 | I2O_IOP_TID; - pMsg[2] = 0; /* universal context */ - pMsg[3] = 0; /* universal context */ - pMsg[4] = 0; /* universal context */ - pMsg[5] = 0; /* universal context */ - /* phys address to return status - area right after PAB */ - pMsg[6] = pPab->outMsgBlockPhyAddr; - pMsg[7] = 0; - pMsg[8] = 1; /* return 1 byte */ - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0; - p32[1] = 0; - - /* post to Inbound Post Q */ - - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 1000000; - while (1) { - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] || p32[1]) - break; - - if (!timeout--) { - dprintk ("RCResetIOP timeout\n"); - return RC_RTN_MSG_REPLY_TIMEOUT; - } - } - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCShutdownLANCard() -** -** ResourceFlags indicates whether to return buffer resource explicitly -** to host or keep and reuse. -** CallbackFunction (if not NULL) is the function to be called when -** shutdown is complete. -** If CallbackFunction is NULL, ReturnAddr will have a 1 placed in it when -** shutdown is done (if not NULL). -** -** ========================================================================= -*/ -RC_RETURN -RCShutdownLANCard (struct net_device * dev, U16 ResourceFlags, - PU32 ReturnAddr, PFNCALLBACK CallbackFunction) -{ - volatile PU32 pMsg; - U32 off; - PPAB pPab = ((PDPA) dev->priv)->pPab; - long timeout = 0; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pPab->pCallbackFunc = CallbackFunction; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup message */ - pMsg[0] = FOUR_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = - I2O_LAN_SHUTDOWN << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = ResourceFlags << 16; /* resource flags */ - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - - if (CallbackFunction == (PFNCALLBACK) NULL) { - /* call RCProcI2OMsgQ() until something in pPab->pCallbackFunc - or until timer goes off */ - while (pPab->pCallbackFunc == (PFNCALLBACK) NULL) { - RCProcI2OMsgQ (dev); - udelay (1000); /* please don't hog the bus!!! */ - timeout++; - if (timeout > 10000) { - printk (KERN_WARNING - "(rcpci45 driver:) RCShutdownLANCard(): timeout\n"); - break; - } - } - if (ReturnAddr != (PU32) NULL) - *ReturnAddr = (U32) pPab->pCallbackFunc; - } - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** RCSetRavlinIPandMask() -** -** Set the Ravlin 45/PCI cards IP address and network mask. -** -** IP address and mask must be in network byte order. -** For example, IP address 1.2.3.4 and mask 255.255.255.0 would be -** 0x04030201 and 0x00FFFFFF on a little endian machine. -** -** ========================================================================= -*/ -RC_RETURN -RCSetRavlinIPandMask (struct net_device * dev, U32 ipAddr, U32 netMask) -{ - volatile PU32 pMsg; - U32 off; - PPAB pPab = ((PDPA) dev->priv)->pPab; - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - off = pPab->p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - /* setup private message */ - pMsg[0] = SEVEN_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x219; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_SET_IP_AND_MASK; - pMsg[5] = ipAddr; - pMsg[6] = netMask; - - pPab->p_atu->InQueue = off; /* send it to the I2O device */ - return RC_RTN_NO_ERROR; - -} - -/* -** ========================================================================= -** RCGetRavlinIPandMask() -** -** get the IP address and MASK from the card -** -** ========================================================================= -*/ -RC_RETURN -RCGetRavlinIPandMask (struct net_device * dev, PU32 pIpAddr, PU32 pNetMask, - PFNWAITCALLBACK WaitCallback) -{ - unsigned timeout; - U32 off; - PU32 pMsg, p32; - PPAB pPab = ((PDPA) dev->priv)->pPab; - PATU p_atu; - - dprintk - ("RCGetRavlinIPandMask: pIpAddr is 0x%08ulx, *IpAddr is 0x%08ulx\n", - (u32) pIpAddr, *pIpAddr); - - if (pPab == NULL) - return RC_RTN_ADPTR_NOT_REGISTERED; - - p_atu = pPab->p_atu; - off = p_atu->InQueue; /* get addresss of message */ - - if (0xFFFFFFFF == off) - return RC_RTN_FREE_Q_EMPTY; - - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - *p32 = 0xFFFFFFFF; - - pMsg = (PU32) (pPab->pPci45LinBaseAddr + off); - - dprintk - ("RCGetRavlinIPandMask: p_atu 0x%08ulx, off 0x%08ulx, p32 0x%08ulx\n", - (u32) p_atu, off, (u32) p32); - /* setup private message */ - pMsg[0] = FIVE_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_PRIVATE << 24 | I2O_HOST_TID << 12 | RC_LAN_TARGET_ID; - pMsg[2] = 0; /* initiator context */ - pMsg[3] = 0x218; /* transaction context */ - pMsg[4] = RC_PCI45_VENDOR_ID << 16 | RC_PRIVATE_GET_IP_AND_MASK; - pMsg[5] = pPab->outMsgBlockPhyAddr; - - p_atu->InQueue = off; /* send it to the I2O device */ - dprintk - ("RCGetRavlinIPandMask: p_atu 0x%08ulx, off 0x%08ulx, p32 0x%08ulx\n", - (u32) p_atu, off, (u32) p32); - - /* wait for the rcpci45 board to update the info */ - timeout = 100000; - while (0xffffffff == *p32) { - if (WaitCallback) - (*WaitCallback) (); - - udelay (10); - - if (!timeout--) { - dprintk ("RCGetRavlinIPandMask: Timeout\n"); - return RC_RTN_MSG_REPLY_TIMEOUT; - } - } - - dprintk - ("RCGetRavlinIPandMask: after time out\np32[0] (IpAddr) 0x%08ulx, p32[1] (IPmask) 0x%08ulx\n", - p32[0], p32[1]); - - /* send IP and mask to user's space */ - *pIpAddr = p32[0]; - *pNetMask = p32[1]; - - dprintk - ("RCGetRavlinIPandMask: pIpAddr is 0x%08ulx, *IpAddr is 0x%08ulx\n", - (u32) pIpAddr, *pIpAddr); - - return RC_RTN_NO_ERROR; -} - -/* -** ///////////////////////////////////////////////////////////////////////// -** ///////////////////////////////////////////////////////////////////////// -** -** local functions -** -** ///////////////////////////////////////////////////////////////////////// -** ///////////////////////////////////////////////////////////////////////// -*/ - -/* -** ========================================================================= -** SendI2OOutboundQInitMsg() -** -** ========================================================================= -*/ -static int -SendI2OOutboundQInitMsg (PPAB pPab) -{ - U32 msgOffset, timeout, phyOutQFrames, i; - volatile PU32 pMsg; - volatile PU32 p32; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("SendI2OOutboundQInitMsg(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - dprintk - ("SendI2OOutboundQInitMsg - pMsg = 0x%08ulx, InQ msgOffset = 0x%08ulx\n", - (u32) pMsg, msgOffset); - - pMsg[0] = EIGHT_WORD_MSG_SIZE | TRL_OFFSET_6; - pMsg[1] = - I2O_EXEC_OUTBOUND_INIT << 24 | I2O_HOST_TID << 12 | I2O_IOP_TID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = 0x106; /* transaction context */ - pMsg[4] = 4096; /* Host page frame size */ - pMsg[5] = MSG_FRAME_SIZE << 16 | 0x80; /* outbound msg frame size and Initcode */ - pMsg[6] = 0xD0000004; /* simple sgl element LE, EOB */ - /* phys address to return status - area right after PAB */ - pMsg[7] = pPab->outMsgBlockPhyAddr; - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (PU32) pPab->pLinOutMsgBlock; - p32[0] = 0; - - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - - /* wait for response */ - timeout = 100000; - while (1) { - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0]) - break; - - if (!timeout--) { - dprintk - ("Timeout wait for InitOutQ InPrgress status from IOP\n"); - return RC_RTN_NO_I2O_STATUS; - } - } - - timeout = 100000; - while (1) { - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] == I2O_EXEC_OUTBOUND_INIT_COMPLETE) - break; - - if (!timeout--) { - dprintk - ("Timeout wait for InitOutQ Complete status from IOP\n"); - return RC_RTN_NO_I2O_STATUS; - } - } - - /* load PCI outbound free Q with MF physical addresses */ - phyOutQFrames = pPab->outMsgBlockPhyAddr; - - for (i = 0; i < NMBR_MSG_FRAMES; i++) { - pPab->p_atu->OutQueue = phyOutQFrames; - phyOutQFrames += MSG_FRAME_SIZE; - } - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** GetI2OStatus() -** -** Send StatusGet Msg, wait for results return directly to buffer. -** -** ========================================================================= -*/ -static int -GetI2OStatus (PPAB pPab) -{ - U32 msgOffset, timeout; - PU32 pMsg; - volatile PU32 p32; - - msgOffset = pPab->p_atu->InQueue; - dprintk ("GetI2OStatus: msg offset = 0x%x\n", msgOffset); - if (msgOffset == 0xFFFFFFFF) { - dprintk ("GetI2OStatus(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - pMsg[0] = NINE_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_EXEC_STATUS_GET << 24 | I2O_HOST_TID << 12 | I2O_IOP_TID; - pMsg[2] = 0; /* universal context */ - pMsg[3] = 0; /* universal context */ - pMsg[4] = 0; /* universal context */ - pMsg[5] = 0; /* universal context */ - /* phys address to return status - area right after PAB */ - pMsg[6] = pPab->outMsgBlockPhyAddr; - pMsg[7] = 0; - pMsg[8] = 88; /* return 88 bytes */ - - /* virtual pointer to return buffer - clear first two dwords */ - p32 = (volatile PU32) pPab->pLinOutMsgBlock; - p32[0] = 0; - p32[1] = 0; - - dprintk - ("GetI2OStatus - pMsg:0x%08ulx, msgOffset:0x%08ulx, [1]:0x%08ulx, [6]:0x%08ulx\n", - (u32) pMsg, msgOffset, pMsg[1], pMsg[6]); - - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - - dprintk ("Return status to p32 = 0x%08ulx\n", (u32) p32); - - /* wait for response */ - timeout = 1000000; - while (1) { - udelay (10); /* please don't hog the bus!!! */ - - if (p32[0] && p32[1]) - break; - - if (!timeout--) { - dprintk ("Timeout waiting for status from IOP\n"); - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - p32[0], p32[1], p32[2], p32[3]); - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - p32[4], p32[5], p32[6], p32[7]); - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - p32[8], p32[9], p32[10], p32[11]); - return RC_RTN_NO_I2O_STATUS; - } - } - - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", p32[0], p32[1], - p32[2], p32[3]); - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", p32[4], p32[5], - p32[6], p32[7]); - dprintk ("0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", p32[8], p32[9], - p32[10], p32[11]); - /* get IOP state */ - pPab->IOPState = ((volatile PU8) p32)[10]; - pPab->InboundMFrameSize = ((volatile PU16) p32)[6]; - - dprintk ("IOP state 0x%02x InFrameSize = 0x%04x\n", - pPab->IOPState, pPab->InboundMFrameSize); - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** SendEnableSysMsg() -** -** -** ========================================================================= -*/ -static int -SendEnableSysMsg (PPAB pPab) -{ - U32 msgOffset; - volatile PU32 pMsg; - - msgOffset = pPab->p_atu->InQueue; - - if (msgOffset == 0xFFFFFFFF) { - dprintk ("SendEnableSysMsg(): Inbound Free Q empty!\n"); - return RC_RTN_FREE_Q_EMPTY; - } - - /* calc virtual address of msg - virtual already mapped to physical */ - pMsg = (PU32) (pPab->pPci45LinBaseAddr + msgOffset); - - dprintk - ("SendEnableSysMsg - pMsg = 0x%08ulx, InQ msgOffset = 0x%08ulx\n", - (u32) pMsg, msgOffset); - - pMsg[0] = FOUR_WORD_MSG_SIZE | SGL_OFFSET_0; - pMsg[1] = I2O_EXEC_SYS_ENABLE << 24 | I2O_HOST_TID << 12 | I2O_IOP_TID; - pMsg[2] = DEFAULT_RECV_INIT_CONTEXT; - pMsg[3] = 0x110; /* transaction context */ - pMsg[4] = 0x50657465; /* RedCreek Private */ - - /* post to Inbound Post Q */ - pPab->p_atu->InQueue = msgOffset; - - return RC_RTN_NO_ERROR; -} - -/* -** ========================================================================= -** FillI2OMsgFromTCB() -** -** inputs pMsgU32 - virtual pointer (mapped to physical) of message frame -** pXmitCntrlBlock - pointer to caller buffer control block. -** -** fills in LAN SGL after Transaction Control Word or Bucket Count. -** ========================================================================= -*/ -static int -FillI2OMsgSGLFromTCB (PU32 pMsgFrame, PRCTCB pTransCtrlBlock) -{ - unsigned int nmbrBuffers, nmbrSeg, nmbrDwords, context, flags; - PU32 pTCB, pMsg; - - /* SGL element flags */ -#define EOB 0x40000000 -#define LE 0x80000000 -#define SIMPLE_SGL 0x10000000 -#define BC_PRESENT 0x01000000 - - pTCB = (PU32) pTransCtrlBlock; - pMsg = pMsgFrame; - nmbrDwords = 0; - - dprintk ("FillI2OMsgSGLFromTCBX\n"); - dprintk ("TCB 0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", - pTCB[0], pTCB[1], pTCB[2], pTCB[3], pTCB[4]); - dprintk ("pTCB 0x%08ulx, pMsg 0x%08ulx\n", (u32) pTCB, (u32) pMsg); - - nmbrBuffers = *pTCB++; - - if (!nmbrBuffers) { - return -1; - } - - do { - context = *pTCB++; /* buffer tag (context) */ - nmbrSeg = *pTCB++; /* number of segments */ - - if (!nmbrSeg) { - return -1; - } - - flags = SIMPLE_SGL | BC_PRESENT; - - if (1 == nmbrSeg) { - flags |= EOB; - - if (1 == nmbrBuffers) - flags |= LE; - } - - /* 1st SGL buffer element has context */ - pMsg[0] = pTCB[0] | flags; /* send over count (segment size) */ - pMsg[1] = context; - pMsg[2] = pTCB[1]; /* send buffer segment physical address */ - nmbrDwords += 3; - pMsg += 3; - pTCB += 2; - - if (--nmbrSeg) { - do { - flags = SIMPLE_SGL; - - if (1 == nmbrSeg) { - flags |= EOB; - - if (1 == nmbrBuffers) - flags |= LE; - } - - pMsg[0] = pTCB[0] | flags; /* send over count */ - pMsg[1] = pTCB[1]; /* send buffer segment physical address */ - nmbrDwords += 2; - pTCB += 2; - pMsg += 2; - - } while (--nmbrSeg); - } - - } while (--nmbrBuffers); - - return nmbrDwords; -} - -/* -** ========================================================================= -** ProcessOutboundI2OMsg() -** -** process I2O reply message -** * change to msg structure * -** ========================================================================= -*/ -static void -ProcessOutboundI2OMsg (PPAB pPab, U32 phyAddrMsg) -{ - PU8 p8Msg; - PU32 p32; -/* U16 count; */ - - p8Msg = pPab->pLinOutMsgBlock + (phyAddrMsg - pPab->outMsgBlockPhyAddr); - p32 = (PU32) p8Msg; - - dprintk - ("VXD: ProcessOutboundI2OMsg - pPab 0x%08ulx, phyAdr 0x%08ulx, linAdr 0x%08ulx\n", - (u32) pPab, phyAddrMsg, (u32) p8Msg); - dprintk ("msg :0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", p32[0], p32[1], - p32[2], p32[3]); - dprintk ("msg :0x%08ulx:0x%08ulx:0x%08ulx:0x%08ulx\n", p32[4], p32[5], - p32[6], p32[7]); - - if (p32[4] >> 24 != I2O_REPLY_STATUS_SUCCESS) { - dprintk ("Message reply status not success\n"); - return; - } - - switch (p8Msg[7]) { /* function code byte */ - case I2O_EXEC_SYS_TAB_SET: - msgFlag = 1; - dprintk ("Received I2O_EXEC_SYS_TAB_SET reply\n"); - break; - - case I2O_EXEC_HRT_GET: - msgFlag = 1; - dprintk ("Received I2O_EXEC_HRT_GET reply\n"); - break; - - case I2O_EXEC_LCT_NOTIFY: - msgFlag = 1; - dprintk ("Received I2O_EXEC_LCT_NOTIFY reply\n"); - break; - - case I2O_EXEC_SYS_ENABLE: - msgFlag = 1; - dprintk ("Received I2O_EXEC_SYS_ENABLE reply\n"); - break; - - default: - dprintk ("Received UNKNOWN reply\n"); - break; - } -} diff -Nru a/drivers/net/rclanmtl.h b/drivers/net/rclanmtl.h --- a/drivers/net/rclanmtl.h Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,701 +0,0 @@ -/* -** ************************************************************************* -** -** -** R C L A N M T L . H $Revision: 6 $ -** -** -** RedCreek I2O LAN Message Transport Layer header file. -** -** --------------------------------------------------------------------- -** --- Copyright (c) 1997-1999, RedCreek Communications Inc. --- -** --- All rights reserved. --- -** --------------------------------------------------------------------- -** -** File Description: -** -** Header file for host I2O (Intelligent I/O) LAN message transport layer -** API and data types. -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. - -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. - -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -** -** ************************************************************************* -*/ - -#ifndef RCLANMTL_H -#define RCLANMTL_H - -/* Linux specific includes */ -#include -#ifdef RC_LINUX_MODULE /* linux modules need non-library version of string functions */ -#include -#else -#include -#endif -#include /* for udelay() */ - -#include -#include -#include -#include - -#include - -/* Debug stuff. Define for debug output */ -#undef RCDEBUG - -#ifdef RCDEBUG -#define dprintk(args...) printk(KERN_DEBUG "rc: " args) -#else -#define dprintk(args...) { } -#endif - -/* Typedefs */ - - /* scalar data types */ -typedef __u8 U8; -typedef __u16 U16; -typedef __u32 U32; -typedef __u8 *PU8; -typedef __u16 *PU16; -typedef __u32 *PU32; -typedef unsigned long BF; -typedef int RC_RETURN; - - /* - ** type PFNWAITCALLBACK - ** - ** pointer to void function - type used for WaitCallback in some functions - */ -typedef void (*PFNWAITCALLBACK) (void); /* void argument avoids compiler complaint */ - - /* - ** type PFNTXCALLBACK - ** - ** Pointer to user's transmit callback function. This user function is - ** called from RCProcI2OMsgQ() when packet have been transmitted from buffers - ** given in the RCI2OSendPacket() function. BufferContext is a pointer to - ** an array of 32 bit context values. These are the values the user assigned - ** and passed in the TCB to the RCI2OSendPacket() function. PcktCount - ** indicates the number of buffer context values in the BufferContext[] array. - ** The User's TransmitCallbackFunction should recover (put back in free queue) - ** the packet buffers associated with the buffer context values. - */ -typedef void (*PFNTXCALLBACK) (U32 Status, - U16 PcktCount, - PU32 BufferContext, struct net_device *); - - /* - ** type PFNRXCALLBACK - ** - ** Pointer to user's receive callback function. This user function - ** is called from RCProcI2OMsgQ() when packets have been received into - ** previously posted packet buffers throught the RCPostRecvBuffers() function. - ** The received callback function should process the Packet Descriptor Block - ** pointed to by PacketDescBlock. See Packet Decription Block below. - */ -typedef void (*PFNRXCALLBACK) (U32 Status, - U8 PktCount, - U32 BucketsRemain, - PU32 PacketDescBlock, struct net_device *); - - /* - ** type PFNCALLBACK - ** - ** Pointer to user's generic callback function. This user function - ** can be passed to LANReset or LANShutdown and is called when the - ** the reset or shutdown is complete. - ** Param1 and Param2 are invalid for LANReset and LANShutdown. - */ -typedef void (*PFNCALLBACK) (U32 Status, - U32 Param1, U32 Param2, struct net_device * dev); - -/* -** Message Unit CSR definitions for RedCreek PCI45 board -*/ -typedef struct tag_rcatu { - volatile unsigned long APICRegSel; /* APIC Register Select */ - volatile unsigned long reserved0; - volatile unsigned long APICWinReg; /* APIC Window Register */ - volatile unsigned long reserved1; - volatile unsigned long InMsgReg0; /* inbound message register 0 */ - volatile unsigned long InMsgReg1; /* inbound message register 1 */ - volatile unsigned long OutMsgReg0; /* outbound message register 0 */ - volatile unsigned long OutMsgReg1; /* outbound message register 1 */ - volatile unsigned long InDoorReg; /* inbound doorbell register */ - volatile unsigned long InIntStat; /* inbound interrupt status register */ - volatile unsigned long InIntMask; /* inbound interrupt mask register */ - volatile unsigned long OutDoorReg; /* outbound doorbell register */ - volatile unsigned long OutIntStat; /* outbound interrupt status register */ - volatile unsigned long OutIntMask; /* outbound interrupt mask register */ - volatile unsigned long reserved2; - volatile unsigned long reserved3; - volatile unsigned long InQueue; /* inbound queue port */ - volatile unsigned long OutQueue; /* outbound queue port */ - volatile unsigned long reserved4; - volatile unsigned long reserver5; - /* RedCreek extension */ - volatile unsigned long EtherMacLow; - volatile unsigned long EtherMacHi; - volatile unsigned long IPaddr; - volatile unsigned long IPmask; -} *PATU; - - /* - ** typedef PAB - ** - ** PCI Adapter Block - holds instance specific information. - */ -typedef struct { - PATU p_atu; /* ptr to ATU register block */ - PU8 pPci45LinBaseAddr; - PU8 pLinOutMsgBlock; - U32 outMsgBlockPhyAddr; - PFNTXCALLBACK pTransCallbackFunc; - PFNRXCALLBACK pRecvCallbackFunc; - PFNCALLBACK pRebootCallbackFunc; - PFNCALLBACK pCallbackFunc; - U16 IOPState; - U16 InboundMFrameSize; -} *PPAB; - -/* - * Driver Private Area, DPA. - */ -typedef struct { - U8 id; /* the AdapterID */ - - /* These two field are basically for the RCioctl function. - * I could not determine if they could be avoided. (RAA)*/ - U32 pci_addr; /* the pci address of the adapter */ - U32 pci_addr_len; - - struct pci_dev *pci_dev; - struct timer_list timer; /* timer */ - struct net_device_stats stats; /* the statistics structure */ - unsigned long numOutRcvBuffers; /* number of outstanding receive buffers */ - unsigned char shutdown; - unsigned char reboot; - unsigned char nexus; - PU8 msgbuf; /* Pointer to Lan Api Private Area */ - dma_addr_t msgbuf_dma; - PPAB pPab; /* Pointer to the PCI Adapter Block */ -} *PDPA; - -/* PCI/45 Configuration space values */ -#define RC_PCI45_VENDOR_ID 0x4916 -#define RC_PCI45_DEVICE_ID 0x1960 - - /* RedCreek API function return values */ -#define RC_RTN_NO_ERROR 0 -#define RC_RTN_I2O_NOT_INIT 1 -#define RC_RTN_FREE_Q_EMPTY 2 -#define RC_RTN_TCB_ERROR 3 -#define RC_RTN_TRANSACTION_ERROR 4 -#define RC_RTN_ADAPTER_ALREADY_INIT 5 -#define RC_RTN_MALLOC_ERROR 6 -#define RC_RTN_ADPTR_NOT_REGISTERED 7 -#define RC_RTN_MSG_REPLY_TIMEOUT 8 -#define RC_RTN_NO_I2O_STATUS 9 -#define RC_RTN_NO_FIRM_VER 10 -#define RC_RTN_NO_LINK_SPEED 11 - -/* Driver capability flags */ -#define WARM_REBOOT_CAPABLE 0x01 - -/* -** Status - Transmit and Receive callback status word -** -** A 32 bit Status is returned to the TX and RX callback functions. This value -** contains both the reply status and the detailed status as follows: -** -** 32 24 16 0 -** +------+------+------------+ -** | Reply| | Detailed | -** |Status| 0 | Status | -** +------+------+------------+ -** -** Reply Status and Detailed Status of zero indicates No Errors. -*/ - /* reply message status defines */ -#define I2O_REPLY_STATUS_SUCCESS 0x00 -#define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02 -#define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0A - -/* DetailedStatusCode defines */ -#define I2O_LAN_DSC_SUCCESS 0x0000 -#define I2O_LAN_DSC_DEVICE_FAILURE 0x0001 -#define I2O_LAN_DSC_DESTINATION_NOT_FOUND 0x0002 -#define I2O_LAN_DSC_TRANSMIT_ERROR 0x0003 -#define I2O_LAN_DSC_TRANSMIT_ABORTED 0x0004 -#define I2O_LAN_DSC_RECEIVE_ERROR 0x0005 -#define I2O_LAN_DSC_RECEIVE_ABORTED 0x0006 -#define I2O_LAN_DSC_DMA_ERROR 0x0007 -#define I2O_LAN_DSC_BAD_PACKET_DETECTED 0x0008 -#define I2O_LAN_DSC_OUT_OF_MEMORY 0x0009 -#define I2O_LAN_DSC_BUCKET_OVERRUN 0x000A -#define I2O_LAN_DSC_IOP_INTERNAL_ERROR 0x000B -#define I2O_LAN_DSC_CANCELED 0x000C -#define I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT 0x000D -#define I2O_LAN_DSC_DESTINATION_ADDRESS_DETECTED 0x000E -#define I2O_LAN_DSC_DESTINATION_ADDRESS_OMITTED 0x000F -#define I2O_LAN_DSC_PARTIAL_PACKET_RETURNED 0x0010 - -/* -** Packet Description Block (Received packets) -** -** A pointer to this block structure is returned to the ReceiveCallback -** function. It contains the list of packet buffers which have either been -** filled with a packet or returned to host due to a LANReset function. -** Currently there will only be one packet per receive bucket (buffer) posted. -** -** 32 24 0 -** +-----------------------+ -\ -** | Buffer 1 Context | \ -** +-----------------------+ \ -** | 0xC0000000 | / First Bucket Descriptor -** +-----+-----------------+ / -** | 0 | packet 1 length | / -** +-----------------------+ -\ -** | Buffer 2 Context | \ -** +-----------------------+ \ -** | 0xC0000000 | / Second Bucket Descriptor -** +-----+-----------------+ / -** | 0 | packet 2 length | / -** +-----+-----------------+ - -** | ... | ----- more bucket descriptors -** +-----------------------+ -\ -** | Buffer n Context | \ -** +-----------------------+ \ -** | 0xC0000000 | / Last Bucket Descriptor -** +-----+-----------------+ / -** | 0 | packet n length | / -** +-----+-----------------+ - -** -** Buffer Context values are those given to adapter in the TCB on calls to -** RCPostRecvBuffers(). -** -*/ - -/* -** Transaction Control Block (TCB) structure -** -** A structure like this is filled in by the user and passed by reference to -** RCI2OSendPacket() and RCPostRecvBuffers() functions. Minimum size is five -** 32-bit words for one buffer with one segment descriptor. -** MAX_NMBR_POST_BUFFERS_PER_MSG defines the maximum single segment buffers -** that can be described in a given TCB. -** -** 32 0 -** +-----------------------+ -** | Buffer Count | Number of buffers in the TCB -** +-----------------------+ -** | Buffer 1 Context | first buffer reference -** +-----------------------+ -** | Buffer 1 Seg Count | number of segments in buffer -** +-----------------------+ -** | Buffer 1 Seg Desc 1 | first segment descriptor (size, physical address) -** +-----------------------+ -** | ... | more segment descriptors (size, physical address) -** +-----------------------+ -** | Buffer 1 Seg Desc n | last segment descriptor (size, physical address) -** +-----------------------+ -** | Buffer 2 Context | second buffer reference -** +-----------------------+ -** | Buffer 2 Seg Count | number of segments in buffer -** +-----------------------+ -** | Buffer 2 Seg Desc 1 | segment descriptor (size, physical address) -** +-----------------------+ -** | ... | more segment descriptors (size, physical address) -** +-----------------------+ -** | Buffer 2 Seg Desc n | -** +-----------------------+ -** | ... | more buffer descriptor blocks ... -** +-----------------------+ -** | Buffer n Context | -** +-----------------------+ -** | Buffer n Seg Count | -** +-----------------------+ -** | Buffer n Seg Desc 1 | -** +-----------------------+ -** | ... | -** +-----------------------+ -** | Buffer n Seg Desc n | -** +-----------------------+ -** -** -** A TCB for one contigous packet buffer would look like the following: -** -** 32 0 -** +-----------------------+ -** | 1 | one buffer in the TCB -** +-----------------------+ -** | | user's buffer reference -** +-----------------------+ -** | 1 | one segment buffer -** +-----------------------+ _ -** | | size \ -** +-----------------------+ \ segment descriptor -** | | physical address of buffer / -** +-----------------------+ _/ -** -*/ - - /* Buffer Segment Descriptor */ -typedef struct { - U32 size; - U32 phyAddress; -} BSD, *PBSD; - -typedef PU32 PRCTCB; -/* -** ------------------------------------------------------------------------- -** Exported functions comprising the API to the LAN I2O message transport layer -** ------------------------------------------------------------------------- -*/ - - /* - ** InitRCI2OMsgLayer() - ** - ** Called once prior to using the I2O LAN message transport layer. User - ** provides both the physical and virual address of a locked page buffer - ** that is used as a private buffer for the RedCreek I2O message - ** transport layer. This buffer must be a contigous memory block of a - ** minimum of 16K bytes and long word aligned. The user also must provide - ** the base address of the RedCreek PCI adapter assigned by BIOS or operating - ** system. - ** - ** Inputs: dev - the net_device struct for the device. - ** TransmitCallbackFunction - address of user's TX callback function - ** ReceiveCallbackFunction - address of user's RX callback function - ** RebootCallbackFunction - address of user's reboot callback function - ** - */ -RC_RETURN RCInitI2OMsgLayer (struct net_device *dev, - PFNTXCALLBACK TransmitCallbackFunction, - PFNRXCALLBACK ReceiveCallbackFunction, - PFNCALLBACK RebootCallbackFunction); - - /* - ** RCSetRavlinIPandMask() - ** - ** Set the Ravlin 45/PCI cards IP address and network mask. - ** - ** IP address and mask must be in network byte order. - ** For example, IP address 1.2.3.4 and mask 255.255.255.0 would be - ** 0x04030201 and 0x00FFFFFF on a little endian machine. - ** - */ -RC_RETURN RCSetRavlinIPandMask (struct net_device *dev, U32 ipAddr, - U32 netMask); - -/* -** ========================================================================= -** RCGetRavlinIPandMask() -** -** get the IP address and MASK from the card -** -** ========================================================================= -*/ -RC_RETURN -RCGetRavlinIPandMask (struct net_device *dev, PU32 pIpAddr, PU32 pNetMask, - PFNWAITCALLBACK WaitCallback); - - /* - ** RCProcI2OMsgQ() - ** - ** Called from user's polling loop or Interrupt Service Routine for a PCI - ** interrupt from the RedCreek PCI adapter. User responsible for determining - ** and hooking the PCI interrupt. This function will call the registered - ** callback functions, TransmitCallbackFunction or ReceiveCallbackFunction, - ** if a TX or RX transaction has completed. - */ -irqreturn_t RCProcI2OMsgQ (struct net_device *dev); - - /* - ** Disable and Enable I2O interrupts. I2O interrupts are enabled at Init time - ** but can be disabled and re-enabled through these two function calls. - ** Packets will still be put into any posted received buffers and packets will - ** be sent through RCI2OSendPacket() functions. Disabling I2O interrupts - ** will prevent hardware interrupt to host even though the outbound I2O msg - ** queue is not emtpy. - */ -RC_RETURN RCEnableI2OInterrupts (struct net_device *dev); -RC_RETURN RCDisableI2OInterrupts (struct net_device *dev); - - /* - ** RCPostRecvBuffers() - ** - ** Post user's page locked buffers for use by the PCI adapter to - ** return ethernet packets received from the LAN. Transaction Control Block, - ** provided by user, contains buffer descriptor(s) which includes a buffer - ** context number along with buffer size and physical address. See TCB above. - ** The buffer context and actual packet length are returned to the - ** ReceiveCallbackFunction when packets have been received. Buffers posted - ** to the RedCreek adapter are considered owned by the adapter until the - ** context is return to user through the ReceiveCallbackFunction. - */ -RC_RETURN RCPostRecvBuffers (struct net_device *dev, - PRCTCB pTransactionCtrlBlock); -#define MAX_NMBR_POST_BUFFERS_PER_MSG 32 - - /* - ** RCI2OSendPacket() - ** - ** Send user's ethernet packet from a locked page buffer. - ** Packet must have full MAC header, however without a CRC. - ** Initiator context is a user provided value that is returned - ** to the TransmitCallbackFunction when packet buffer is free. - ** Transmit buffer are considered owned by the adapter until context's - ** returned to user through the TransmitCallbackFunction. - */ -RC_RETURN RCI2OSendPacket (struct net_device *dev, - U32 context, PRCTCB pTransactionCtrlBlock); - - /* Ethernet Link Statistics structure */ -typedef struct tag_RC_link_stats { - U32 TX_good; /* good transmit frames */ - U32 TX_maxcol; /* frames not TX due to MAX collisions */ - U32 TX_latecol; /* frames not TX due to late collisions */ - U32 TX_urun; /* frames not TX due to DMA underrun */ - U32 TX_crs; /* frames TX with lost carrier sense */ - U32 TX_def; /* frames deferred due to activity on link */ - U32 TX_singlecol; /* frames TX with one and only on collision */ - U32 TX_multcol; /* frames TX with more than one collision */ - U32 TX_totcol; /* total collisions detected during TX */ - U32 Rcv_good; /* good frames received */ - U32 Rcv_CRCerr; /* frames RX and discarded with CRC errors */ - U32 Rcv_alignerr; /* frames RX with alignment and CRC errors */ - U32 Rcv_reserr; /* good frames discarded due to no RX buffer */ - U32 Rcv_orun; /* RX frames lost due to FIFO overrun */ - U32 Rcv_cdt; /* RX frames with collision during RX */ - U32 Rcv_runt; /* RX frames shorter than 64 bytes */ -} RCLINKSTATS, *P_RCLINKSTATS; - - /* - ** RCGetLinkStatistics() - ** - ** Returns link statistics in user's structure at address StatsReturnAddr - ** If given, not NULL, the function WaitCallback is called during the wait - ** loop while waiting for the adapter to respond. - */ -RC_RETURN RCGetLinkStatistics (struct net_device *dev, - P_RCLINKSTATS StatsReturnAddr, - PFNWAITCALLBACK WaitCallback); - - /* - ** RCGetLinkStatus() - ** - ** Return link status, up or down, to user's location addressed by ReturnAddr. - ** If given, not NULL, the function WaitCallback is called during the wait - ** loop while waiting for the adapter to respond. - */ -RC_RETURN RCGetLinkStatus (struct net_device *dev, - PU32 pReturnStatus, PFNWAITCALLBACK WaitCallback); - - /* Link Status defines - value returned in pReturnStatus */ -#define RC_LAN_LINK_STATUS_DOWN 0 -#define RC_LAN_LINK_STATUS_UP 1 - - /* - ** RCGetMAC() - ** - ** Get the current MAC address assigned to user. RedCreek Ravlin 45/PCI - ** has two MAC addresses. One which is private to the PCI Card, and - ** another MAC which is given to the user as its link layer MAC address. The - ** adapter runs in promiscous mode because of the dual address requirement. - ** The MAC address is returned to the unsigned char array pointer to by mac. - */ -RC_RETURN RCGetMAC (struct net_device *dev, PFNWAITCALLBACK WaitCallback); - - /* - ** RCSetMAC() - ** - ** Set a new user port MAC address. This address will be returned on - ** subsequent RCGetMAC() calls. - */ -RC_RETURN RCSetMAC (struct net_device *dev, PU8 mac); - - /* - ** RCSetLinkSpeed() - ** - ** set adapter's link speed based on given input code. - */ -RC_RETURN RCSetLinkSpeed (struct net_device *dev, U16 LinkSpeedCode); - /* Set link speed codes */ -#define LNK_SPD_AUTO_NEG_NWAY 0 -#define LNK_SPD_100MB_FULL 1 -#define LNK_SPD_100MB_HALF 2 -#define LNK_SPD_10MB_FULL 3 -#define LNK_SPD_10MB_HALF 4 - - /* - ** RCGetLinkSpeed() - ** - ** Return link speed code. - */ - /* Return link speed codes */ -#define LNK_SPD_UNKNOWN 0 -#define LNK_SPD_100MB_FULL 1 -#define LNK_SPD_100MB_HALF 2 -#define LNK_SPD_10MB_FULL 3 -#define LNK_SPD_10MB_HALF 4 - -RC_RETURN -RCGetLinkSpeed (struct net_device *dev, PU32 pLinkSpeedCode, - PFNWAITCALLBACK WaitCallback); -/* -** ========================================================================= -** RCSetPromiscuousMode(struct net_device *dev, U16 Mode) -** -** Defined values for Mode: -** 0 - turn off promiscuous mode -** 1 - turn on promiscuous mode -** -** ========================================================================= -*/ -#define PROMISCUOUS_MODE_OFF 0 -#define PROMISCUOUS_MODE_ON 1 -RC_RETURN RCSetPromiscuousMode (struct net_device *dev, U16 Mode); -/* -** ========================================================================= -** RCGetPromiscuousMode(struct net_device *dev, PU32 pMode, PFNWAITCALLBACK WaitCallback) -** -** get promiscuous mode setting -** -** Possible return values placed in pMode: -** 0 = promisuous mode not set -** 1 = promisuous mode is set -** -** ========================================================================= -*/ -RC_RETURN -RCGetPromiscuousMode (struct net_device *dev, PU32 pMode, - PFNWAITCALLBACK WaitCallback); - -/* -** ========================================================================= -** RCSetBroadcastMode(struct net_device *dev, U16 Mode) -** -** Defined values for Mode: -** 0 - turn off promiscuous mode -** 1 - turn on promiscuous mode -** -** ========================================================================= -*/ -#define BROADCAST_MODE_OFF 0 -#define BROADCAST_MODE_ON 1 -RC_RETURN RCSetBroadcastMode (struct net_device *dev, U16 Mode); -/* -** ========================================================================= -** RCGetBroadcastMode(struct net_device *dev, PU32 pMode, PFNWAITCALLBACK WaitCallback) -** -** get broadcast mode setting -** -** Possible return values placed in pMode: -** 0 = broadcast mode not set -** 1 = broadcast mode is set -** -** ========================================================================= -*/ -RC_RETURN -RCGetBroadcastMode (struct net_device *dev, PU32 pMode, - PFNWAITCALLBACK WaitCallback); -/* -** ========================================================================= -** RCReportDriverCapability(struct net_device *dev, U32 capability) -** -** Currently defined bits: -** WARM_REBOOT_CAPABLE 0x01 -** -** ========================================================================= -*/ -RC_RETURN RCReportDriverCapability (struct net_device *dev, U32 capability); - -/* -** RCGetFirmwareVer() -** -** Return firmware version in the form "SoftwareVersion : Bt BootVersion" -** -** WARNING: user's space pointed to by pFirmString should be at least 60 bytes. -*/ -RC_RETURN -RCGetFirmwareVer (struct net_device *dev, PU8 pFirmString, - PFNWAITCALLBACK WaitCallback); - -/* -** ---------------------------------------------- -** LAN adapter Reset and Shutdown functions -** ---------------------------------------------- -*/ - /* resource flag bit assignments for RCResetLANCard() & RCShutdownLANCard() */ -#define RC_RESOURCE_RETURN_POSTED_RX_BUCKETS 0x0001 -#define RC_RESOURCE_RETURN_PEND_TX_BUFFERS 0x0002 - - /* - ** RCResetLANCard() - ** - ** Reset LAN card operation. Causes a software reset of the ethernet - ** controller and restarts the command and receive units. Depending on - ** the ResourceFlags given, the buffers are either returned to the - ** host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER and - ** detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be - ** posted after issuing this) OR the buffers are kept and reused by - ** the ethernet controller. If CallbackFunction is not NULL, the function - ** will be called when the reset is complete. If the CallbackFunction is - ** NULL,a 1 will be put into the ReturnAddr after waiting for the reset - ** to complete (please disable I2O interrupts during this method). - ** Any outstanding transmit or receive buffers that are complete will be - ** returned via the normal reply messages before the requested resource - ** buffers are returned. - ** A call to RCPostRecvBuffers() is needed to return the ethernet to full - ** operation if the receive buffers were returned during LANReset. - ** Note: The IOP status is not affected by a LAN reset. - */ -RC_RETURN RCResetLANCard (struct net_device *dev, U16 ResourceFlags, - PU32 ReturnAddr, PFNCALLBACK CallbackFunction); - - /* - ** RCShutdownLANCard() - ** - ** Shutdown LAN card operation and put into an idle (suspended) state. - ** The LAN card is restarted with RCResetLANCard() function. - ** Depending on the ResourceFlags given, the buffers are either returned - ** to the host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER - ** and detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be - ** posted after issuing this) OR the buffers are kept and reused by - ** the ethernet controller. If CallbackFunction is not NULL, the function - ** will be called when the reset is complete. If the CallbackFunction is - ** NULL,a 1 will be put into the ReturnAddr after waiting for the reset - ** to complete (please disable I2O interrupts during this method). - ** Any outstanding transmit or receive buffers that are complete will be - ** returned via the normal reply messages before the requested resource - ** buffers are returned. - ** Note: The IOP status is not affected by a LAN shutdown. - */ -RC_RETURN -RCShutdownLANCard (struct net_device *dev, U16 ResourceFlags, PU32 ReturnAddr, - PFNCALLBACK CallbackFunction); - - /* - ** RCResetIOP(); - ** Initializes IOPState to I2O_IOP_STATE_RESET. - ** Stops access to outbound message Q. - ** Discards any outstanding transmit or posted receive buffers. - ** Clears outbound message Q. - */ -RC_RETURN RCResetIOP (struct net_device *dev); - -#endif /* RCLANMTL_H */ diff -Nru a/drivers/net/rcpci45.c b/drivers/net/rcpci45.c --- a/drivers/net/rcpci45.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1049 +0,0 @@ -/* -** -** RCpci45.c -** -** -** -** --------------------------------------------------------------------- -** --- Copyright (c) 1998, 1999, RedCreek Communications Inc. --- -** --- All rights reserved. --- -** --------------------------------------------------------------------- -** -** Written by Pete Popov and Brian Moyle. -** -** Known Problems -** -** None known at this time. -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. - -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. - -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -** -** Francois Romieu, Apr 2003: Converted to pci DMA mapping API. -** -** Pete Popov, Oct 2001: Fixed a few bugs to make the driver functional -** again. Note that this card is not supported or manufactured by -** RedCreek anymore. -** -** Rasmus Andersen, December 2000: Converted to new PCI API and general -** cleanup. -** -** Pete Popov, January 11,99: Fixed a couple of 2.1.x problems -** (virt_to_bus() not called), tested it under 2.2pre5 (as a module), and -** added a #define(s) to enable the use of the same file for both, the 2.0.x -** kernels as well as the 2.1.x. -** -** Ported to 2.1.x by Alan Cox 1998/12/9. -** -** Sometime in mid 1998, written by Pete Popov and Brian Moyle. -** -***************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include /* For NR_IRQS only. */ -#include -#include - -static char version[] __initdata = - "RedCreek Communications PCI linux driver version 2.21\n"; - -#define RC_LINUX_MODULE -#include "rclanmtl.h" -#include "rcif.h" - -#define RUN_AT(x) (jiffies + (x)) - -#define NEW_MULTICAST - -#define MAX_ETHER_SIZE 1520 -#define MAX_NMBR_RCV_BUFFERS 96 -#define RC_POSTED_BUFFERS_LOW_MARK MAX_NMBR_RCV_BUFFERS-16 -#define BD_SIZE 3 /* Bucket Descriptor size */ -#define BD_LEN_OFFSET 2 /* Bucket Descriptor offset to length field */ - -/* RedCreek LAN device Target ID */ -#define RC_LAN_TARGET_ID 0x10 -/* RedCreek's OSM default LAN receive Initiator */ -#define DEFAULT_RECV_INIT_CONTEXT 0xA17 - -/* minimum msg buffer size needed by the card - * Note that the size of this buffer is hard code in the - * ipsec card's firmware. Thus, the size MUST be a minimum - * of 16K. Otherwise the card will end up using memory - * that does not belong to it. - */ -#define MSG_BUF_SIZE 16384 - -/* 2003/04/20: I don't know about the hardware ability but the driver won't - * play safe with 64 bit addressing and DAC without NETIF_F_HIGHDMA doesn't - * really make sense anyway. Let's play safe - romieu. - */ -#define RCPCI45_DMA_MASK ((u64) 0xffffffff) - -static U32 DriverControlWord; - -static void rc_timer (unsigned long); - -static int RCopen (struct net_device *); -static int RC_xmit_packet (struct sk_buff *, struct net_device *); -static irqreturn_t RCinterrupt (int, void *, struct pt_regs *); -static int RCclose (struct net_device *dev); -static struct net_device_stats *RCget_stats (struct net_device *); -static int RCioctl (struct net_device *, struct ifreq *, int); -static int RCconfig (struct net_device *, struct ifmap *); -static void RCxmit_callback (U32, U16, PU32, struct net_device *); -static void RCrecv_callback (U32, U8, U32, PU32, struct net_device *); -static void RCreset_callback (U32, U32, U32, struct net_device *); -static void RCreboot_callback (U32, U32, U32, struct net_device *); -static int RC_allocate_and_post_buffers (struct net_device *, int); - -static struct pci_device_id rcpci45_pci_table[] = { - { PCI_VENDOR_ID_REDCREEK, PCI_DEVICE_ID_RC45, PCI_ANY_ID, PCI_ANY_ID,}, - {} -}; -MODULE_DEVICE_TABLE (pci, rcpci45_pci_table); -MODULE_LICENSE("GPL"); - -static void __devexit -rcpci45_remove_one (struct pci_dev *pdev) -{ - struct net_device *dev = pci_get_drvdata (pdev); - PDPA pDpa = dev->priv; - - RCResetIOP (dev); - unregister_netdev (dev); - free_irq (dev->irq, dev); - iounmap ((void *) dev->base_addr); - pci_release_regions (pdev); - pci_free_consistent (pdev, MSG_BUF_SIZE, pDpa->msgbuf, - pDpa->msgbuf_dma); - if (pDpa->pPab) - kfree (pDpa->pPab); - free_netdev (dev); - pci_set_drvdata (pdev, NULL); -} - -static int -rcpci45_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) -{ - unsigned long *vaddr; - PDPA pDpa; - int error; - static int card_idx = -1; - struct net_device *dev; - unsigned long pci_start, pci_len; - - card_idx++; - - /* - * Allocate and fill new device structure. - * We need enough for struct net_device plus DPA plus the LAN - * API private area, which requires a minimum of 16KB. The top - * of the allocated area will be assigned to struct net_device; - * the next chunk will be assigned to DPA; and finally, the rest - * will be assigned to the LAN API layer. - */ - - dev = alloc_etherdev(sizeof(*pDpa)); - if (!dev) { - printk (KERN_ERR - "(rcpci45 driver:) alloc_etherdev alloc failed\n"); - error = -ENOMEM; - goto err_out; - } - - SET_MODULE_OWNER(dev); - SET_NETDEV_DEV(dev, &pdev->dev); - - error = pci_enable_device (pdev); - if (error) { - printk (KERN_ERR - "(rcpci45 driver:) %d: pci enable device error\n", - card_idx); - goto err_out; - } - pci_start = pci_resource_start (pdev, 0); - pci_len = pci_resource_len (pdev, 0); - printk("pci_start %lx pci_len %lx\n", pci_start, pci_len); - - pci_set_drvdata (pdev, dev); - - pDpa = dev->priv; - pDpa->id = card_idx; - pDpa->pci_dev = pdev; - pDpa->pci_addr = pci_start; - - if (!pci_start || !(pci_resource_flags (pdev, 0) & IORESOURCE_MEM)) { - printk (KERN_ERR - "(rcpci45 driver:) No PCI mem resources! Aborting\n"); - error = -EBUSY; - goto err_out_free_dev; - } - - /* - * pDpa->msgbuf is where the card will dma the I2O - * messages. Thus, we need contiguous physical pages of memory. - * 2003/04/20: pci_alloc_consistent() provides well over the needed - * alignment on a 256 bytes boundary for the LAN API private area. - * Thus it isn't needed anymore to align it by hand. - */ - pDpa->msgbuf = pci_alloc_consistent (pdev, MSG_BUF_SIZE, - &pDpa->msgbuf_dma); - if (!pDpa->msgbuf) { - printk (KERN_ERR "(rcpci45 driver:) \ - Could not allocate %d byte memory for the \ - private msgbuf!\n", MSG_BUF_SIZE); - error = -ENOMEM; - goto err_out_free_dev; - } - - /* The adapter is accessible through memory-access read/write, not - * I/O read/write. Thus, we need to map it to some virtual address - * area in order to access the registers as normal memory. - */ - error = pci_request_regions (pdev, dev->name); - if (error) - goto err_out_free_msgbuf; - - error = pci_set_dma_mask (pdev, RCPCI45_DMA_MASK); - if (error) { - printk (KERN_ERR - "(rcpci45 driver:) pci_set_dma_mask failed!\n"); - goto err_out_free_region; - } - - vaddr = (ulong *) ioremap (pci_start, pci_len); - if (!vaddr) { - printk (KERN_ERR - "(rcpci45 driver:) \ - Unable to remap address range from %lu to %lu\n", - pci_start, pci_start + pci_len); - error = -EIO; - goto err_out_free_region; - } - - dev->base_addr = (unsigned long) vaddr; - dev->irq = pdev->irq; - dev->open = &RCopen; - dev->hard_start_xmit = &RC_xmit_packet; - dev->stop = &RCclose; - dev->get_stats = &RCget_stats; - dev->do_ioctl = &RCioctl; - dev->set_config = &RCconfig; - - if ((error = register_netdev(dev))) - goto err_out_iounmap; - - return 0; /* success */ - -err_out_iounmap: - iounmap((void *) dev->base_addr); -err_out_free_region: - pci_release_regions (pdev); -err_out_free_msgbuf: - pci_free_consistent (pdev, MSG_BUF_SIZE, pDpa->msgbuf, - pDpa->msgbuf_dma); -err_out_free_dev: - free_netdev (dev); -err_out: - card_idx--; - return error; -} - -static struct pci_driver rcpci45_driver = { - .name = "rcpci45", - .id_table = rcpci45_pci_table, - .probe = rcpci45_init_one, - .remove = __devexit_p(rcpci45_remove_one), -}; - -static int __init -rcpci_init_module (void) -{ - int rc = pci_module_init (&rcpci45_driver); - if (!rc) - printk (KERN_ERR "%s", version); - return rc; -} - -static int -RCopen (struct net_device *dev) -{ - int post_buffers = MAX_NMBR_RCV_BUFFERS; - PDPA pDpa = dev->priv; - int count = 0; - int requested = 0; - int error; - - if (pDpa->nexus) { - /* This is not the first time RCopen is called. Thus, - * the interface was previously opened and later closed - * by RCclose(). RCclose() does a Shutdown; to wake up - * the adapter, a reset is mandatory before we can post - * receive buffers. However, if the adapter initiated - * a reboot while the interface was closed -- and interrupts - * were turned off -- we need will need to reinitialize - * the adapter, rather than simply waking it up. - */ - printk (KERN_INFO "Waking up adapter...\n"); - RCResetLANCard (dev, 0, 0, 0); - } else { - pDpa->nexus = 1; - /* - * RCInitI2OMsgLayer is done only once, unless the - * adapter was sent a warm reboot - */ - error = RCInitI2OMsgLayer (dev, (PFNTXCALLBACK) RCxmit_callback, - (PFNRXCALLBACK) RCrecv_callback, - (PFNCALLBACK) RCreboot_callback); - if (error) { - printk (KERN_ERR "%s: Unable to init msg layer (%x)\n", - dev->name, error); - goto err_out; - } - if ((error = RCGetMAC (dev, NULL))) { - printk (KERN_ERR "%s: Unable to get adapter MAC\n", - dev->name); - goto err_out; - } - } - - /* Request a shared interrupt line. */ - error = request_irq (dev->irq, RCinterrupt, SA_SHIRQ, dev->name, dev); - if (error) { - printk (KERN_ERR "%s: unable to get IRQ %d\n", - dev->name, dev->irq); - goto err_out; - } - - DriverControlWord |= WARM_REBOOT_CAPABLE; - RCReportDriverCapability (dev, DriverControlWord); - - printk (KERN_INFO "%s: RedCreek Communications IPSEC VPN adapter\n", - dev->name); - - RCEnableI2OInterrupts (dev); - - while (post_buffers) { - if (post_buffers > MAX_NMBR_POST_BUFFERS_PER_MSG) - requested = MAX_NMBR_POST_BUFFERS_PER_MSG; - else - requested = post_buffers; - count = RC_allocate_and_post_buffers (dev, requested); - - if (count < requested) { - /* - * Check to see if we were able to post - * any buffers at all. - */ - if (post_buffers == MAX_NMBR_RCV_BUFFERS) { - printk (KERN_ERR "%s: \ - unable to allocate any buffers\n", - dev->name); - goto err_out_free_irq; - } - printk (KERN_WARNING "%s: \ - unable to allocate all requested buffers\n", dev->name); - break; /* we'll try to post more buffers later */ - } else - post_buffers -= count; - } - pDpa->numOutRcvBuffers = MAX_NMBR_RCV_BUFFERS - post_buffers; - pDpa->shutdown = 0; /* just in case */ - netif_start_queue (dev); - return 0; - -err_out_free_irq: - free_irq (dev->irq, dev); -err_out: - return error; -} - -static int -RC_xmit_packet (struct sk_buff *skb, struct net_device *dev) -{ - - PDPA pDpa = dev->priv; - singleTCB tcb; - psingleTCB ptcb = &tcb; - RC_RETURN status = 0; - - netif_stop_queue (dev); - - if (pDpa->shutdown || pDpa->reboot) { - printk ("RC_xmit_packet: tbusy!\n"); - return 1; - } - - /* - * The user is free to reuse the TCB after RCI2OSendPacket() - * returns, since the function copies the necessary info into its - * own private space. Thus, our TCB can be a local structure. - * The skb, on the other hand, will be freed up in our interrupt - * handler. - */ - - ptcb->bcount = 1; - - /* - * we'll get the context when the adapter interrupts us to tell us that - * the transmission is done. At that time, we can free skb. - */ - ptcb->b.context = (U32) skb; - ptcb->b.scount = 1; - ptcb->b.size = skb->len; - ptcb->b.addr = pci_map_single(pDpa->pci_dev, skb->data, skb->len, - PCI_DMA_TODEVICE); - - if ((status = RCI2OSendPacket (dev, (U32) NULL, (PRCTCB) ptcb)) - != RC_RTN_NO_ERROR) { - printk ("%s: send error 0x%x\n", dev->name, (uint) status); - return 1; - } else { - dev->trans_start = jiffies; - netif_wake_queue (dev); - } - /* - * That's it! - */ - return 0; -} - -/* - * RCxmit_callback() - * - * The transmit callback routine. It's called by RCProcI2OMsgQ() - * because the adapter is done with one or more transmit buffers and - * it's returning them to us, or we asked the adapter to return the - * outstanding transmit buffers by calling RCResetLANCard() with - * RC_RESOURCE_RETURN_PEND_TX_BUFFERS flag. - * All we need to do is free the buffers. - */ -static void -RCxmit_callback (U32 Status, - U16 PcktCount, PU32 BufferContext, struct net_device *dev) -{ - struct sk_buff *skb; - PDPA pDpa = dev->priv; - - if (!pDpa) { - printk (KERN_ERR "%s: Fatal Error in xmit callback, !pDpa\n", - dev->name); - return; - } - - if (Status != I2O_REPLY_STATUS_SUCCESS) - printk (KERN_INFO "%s: xmit_callback: Status = 0x%x\n", - dev->name, (uint) Status); - if (pDpa->shutdown || pDpa->reboot) - printk (KERN_INFO "%s: xmit callback: shutdown||reboot\n", - dev->name); - - while (PcktCount--) { - skb = (struct sk_buff *) (BufferContext[0]); - BufferContext++; - pci_unmap_single(pDpa->pci_dev, BufferContext[1], skb->len, - PCI_DMA_TODEVICE); - dev_kfree_skb_irq (skb); - } - netif_wake_queue (dev); -} - -static void -RCreset_callback (U32 Status, U32 p1, U32 p2, struct net_device *dev) -{ - PDPA pDpa = dev->priv; - - printk ("RCreset_callback Status 0x%x\n", (uint) Status); - /* - * Check to see why we were called. - */ - if (pDpa->shutdown) { - printk (KERN_INFO "%s: shutting down interface\n", - dev->name); - pDpa->shutdown = 0; - pDpa->reboot = 0; - } else if (pDpa->reboot) { - printk (KERN_INFO "%s: reboot, shutdown adapter\n", - dev->name); - /* - * We don't set any of the flags in RCShutdownLANCard() - * and we don't pass a callback routine to it. - * The adapter will have already initiated the reboot by - * the time the function returns. - */ - RCDisableI2OInterrupts (dev); - RCShutdownLANCard (dev, 0, 0, 0); - printk (KERN_INFO "%s: scheduling timer...\n", dev->name); - init_timer (&pDpa->timer); - pDpa->timer.expires = RUN_AT ((40 * HZ) / 10); /* 4 sec. */ - pDpa->timer.data = (unsigned long) dev; - pDpa->timer.function = &rc_timer; /* timer handler */ - add_timer (&pDpa->timer); - } -} - -static void -RCreboot_callback (U32 Status, U32 p1, U32 p2, struct net_device *dev) -{ - PDPA pDpa = dev->priv; - - printk (KERN_INFO "%s: reboot: rcv buffers outstanding = %d\n", - dev->name, (uint) pDpa->numOutRcvBuffers); - - if (pDpa->shutdown) { - printk (KERN_INFO "%s: skip reboot, shutdown initiated\n", - dev->name); - return; - } - pDpa->reboot = 1; - /* - * OK, we reset the adapter and ask it to return all - * outstanding transmit buffers as well as the posted - * receive buffers. When the adapter is done returning - * those buffers, it will call our RCreset_callback() - * routine. In that routine, we'll call RCShutdownLANCard() - * to tell the adapter that it's OK to start the reboot and - * schedule a timer callback routine to execute 3 seconds - * later; this routine will reinitialize the adapter at that time. - */ - RCResetLANCard (dev, RC_RESOURCE_RETURN_POSTED_RX_BUCKETS | - RC_RESOURCE_RETURN_PEND_TX_BUFFERS, 0, - (PFNCALLBACK) RCreset_callback); -} - -/* - * RCrecv_callback() - * - * The receive packet callback routine. This is called by - * RCProcI2OMsgQ() after the adapter posts buffers which have been - * filled (one ethernet packet per buffer). - */ -static void -RCrecv_callback (U32 Status, - U8 PktCount, - U32 BucketsRemain, - PU32 PacketDescBlock, struct net_device *dev) -{ - - U32 len, count; - PDPA pDpa = dev->priv; - struct sk_buff *skb; - singleTCB tcb; - psingleTCB ptcb = &tcb; - - ptcb->bcount = 1; - - if ((pDpa->shutdown || pDpa->reboot) && !Status) - printk (KERN_INFO "%s: shutdown||reboot && !Status (%d)\n", - dev->name, PktCount); - - if ((Status != I2O_REPLY_STATUS_SUCCESS) || pDpa->shutdown) { - /* - * Free whatever buffers the adapter returned, but don't - * pass them to the kernel. - */ - - if (!pDpa->shutdown && !pDpa->reboot) - printk (KERN_INFO "%s: recv error status = 0x%x\n", - dev->name, (uint) Status); - else - printk (KERN_DEBUG "%s: Returning %d buffs stat 0x%x\n", - dev->name, PktCount, (uint) Status); - /* - * TO DO: check the nature of the failure and put the - * adapter in failed mode if it's a hard failure. - * Send a reset to the adapter and free all outstanding memory. - */ - if (PacketDescBlock) { - while (PktCount--) { - skb = (struct sk_buff *) PacketDescBlock[0]; - dev_kfree_skb (skb); - pDpa->numOutRcvBuffers--; - /* point to next context field */ - PacketDescBlock += BD_SIZE; - } - } - return; - } else { - while (PktCount--) { - skb = (struct sk_buff *) PacketDescBlock[0]; - len = PacketDescBlock[2]; - skb->dev = dev; - skb_put (skb, len); /* adjust length and tail */ - skb->protocol = eth_type_trans (skb, dev); - netif_rx (skb); /* send the packet to the kernel */ - dev->last_rx = jiffies; - pDpa->numOutRcvBuffers--; - /* point to next context field */ - PacketDescBlock += BD_SIZE; - } - } - - /* - * Replenish the posted receive buffers. - * DO NOT replenish buffers if the driver has already - * initiated a reboot or shutdown! - */ - - if (!pDpa->shutdown && !pDpa->reboot) { - count = RC_allocate_and_post_buffers (dev, - MAX_NMBR_RCV_BUFFERS - - pDpa->numOutRcvBuffers); - pDpa->numOutRcvBuffers += count; - } - -} - -/* - * RCinterrupt() - * - * Interrupt handler. - * This routine sets up a couple of pointers and calls - * RCProcI2OMsgQ(), which in turn process the message and - * calls one of our callback functions. - */ -static irqreturn_t -RCinterrupt (int irq, void *dev_id, struct pt_regs *regs) -{ - - PDPA pDpa; - struct net_device *dev = dev_id; - - pDpa = dev->priv; - - if (pDpa->shutdown) - printk (KERN_DEBUG "%s: shutdown, service irq\n", - dev->name); - - return RCProcI2OMsgQ (dev); -} - -#define REBOOT_REINIT_RETRY_LIMIT 4 -static void -rc_timer (unsigned long data) -{ - struct net_device *dev = (struct net_device *) data; - PDPA pDpa = dev->priv; - int init_status; - static int retry; - int post_buffers = MAX_NMBR_RCV_BUFFERS; - int count = 0; - int requested = 0; - - if (pDpa->reboot) { - init_status = - RCInitI2OMsgLayer (dev, (PFNTXCALLBACK) RCxmit_callback, - (PFNRXCALLBACK) RCrecv_callback, - (PFNCALLBACK) RCreboot_callback); - - switch (init_status) { - case RC_RTN_NO_ERROR: - - pDpa->reboot = 0; - pDpa->shutdown = 0; /* just in case */ - RCReportDriverCapability (dev, DriverControlWord); - RCEnableI2OInterrupts (dev); - - - if (!(dev->flags & IFF_UP)) { - retry = 0; - return; - } - while (post_buffers) { - if (post_buffers > - MAX_NMBR_POST_BUFFERS_PER_MSG) - requested = - MAX_NMBR_POST_BUFFERS_PER_MSG; - else - requested = post_buffers; - count = - RC_allocate_and_post_buffers (dev, - requested); - post_buffers -= count; - if (count < requested) - break; - } - pDpa->numOutRcvBuffers = - MAX_NMBR_RCV_BUFFERS - post_buffers; - printk ("Initialization done.\n"); - netif_wake_queue (dev); - retry = 0; - return; - case RC_RTN_FREE_Q_EMPTY: - retry++; - printk (KERN_WARNING "%s inbound free q empty\n", - dev->name); - break; - default: - retry++; - printk (KERN_WARNING "%s bad stat after reboot: %d\n", - dev->name, init_status); - break; - } - - if (retry > REBOOT_REINIT_RETRY_LIMIT) { - printk (KERN_WARNING "%s unable to reinitialize adapter after reboot\n", dev->name); - printk (KERN_WARNING "%s shutting down interface\n", dev->name); - RCDisableI2OInterrupts (dev); - dev->flags &= ~IFF_UP; - } else { - printk (KERN_INFO "%s: rescheduling timer...\n", - dev->name); - init_timer (&pDpa->timer); - pDpa->timer.expires = RUN_AT ((40 * HZ) / 10); - pDpa->timer.data = (unsigned long) dev; - pDpa->timer.function = &rc_timer; - add_timer (&pDpa->timer); - } - } else - printk (KERN_WARNING "%s: unexpected timer irq\n", dev->name); -} - -static int -RCclose (struct net_device *dev) -{ - PDPA pDpa = dev->priv; - - printk("RCclose\n"); - netif_stop_queue (dev); - - if (pDpa->reboot) { - printk (KERN_INFO "%s skipping reset -- adapter already in reboot mode\n", dev->name); - dev->flags &= ~IFF_UP; - pDpa->shutdown = 1; - return 0; - } - - pDpa->shutdown = 1; - - /* - * We can't allow the driver to be unloaded until the adapter returns - * all posted receive buffers. It doesn't hurt to tell the adapter - * to return all posted receive buffers and outstanding xmit buffers, - * even if there are none. - */ - - RCShutdownLANCard (dev, RC_RESOURCE_RETURN_POSTED_RX_BUCKETS | - RC_RESOURCE_RETURN_PEND_TX_BUFFERS, 0, - (PFNCALLBACK) RCreset_callback); - - dev->flags &= ~IFF_UP; - return 0; -} - -static struct net_device_stats * -RCget_stats (struct net_device *dev) -{ - RCLINKSTATS RCstats; - - PDPA pDpa = dev->priv; - - if (!pDpa) { - return 0; - } else if (!(dev->flags & IFF_UP)) { - return 0; - } - - memset (&RCstats, 0, sizeof (RCLINKSTATS)); - if ((RCGetLinkStatistics (dev, &RCstats, (void *) 0)) == - RC_RTN_NO_ERROR) { - - /* total packets received */ - pDpa->stats.rx_packets = RCstats.Rcv_good - /* total packets transmitted */; - pDpa->stats.tx_packets = RCstats.TX_good; - - pDpa->stats.rx_errors = RCstats.Rcv_CRCerr + - RCstats.Rcv_alignerr + RCstats.Rcv_reserr + - RCstats.Rcv_orun + RCstats.Rcv_cdt + RCstats.Rcv_runt; - - pDpa->stats.tx_errors = RCstats.TX_urun + RCstats.TX_crs + - RCstats.TX_def + RCstats.TX_totcol; - - /* - * This needs improvement. - */ - pDpa->stats.rx_dropped = 0; /* no space in linux buffers */ - pDpa->stats.tx_dropped = 0; /* no space available in linux */ - pDpa->stats.multicast = 0; /* multicast packets received */ - pDpa->stats.collisions = RCstats.TX_totcol; - - /* detailed rx_errors: */ - pDpa->stats.rx_length_errors = 0; - pDpa->stats.rx_over_errors = RCstats.Rcv_orun; - pDpa->stats.rx_crc_errors = RCstats.Rcv_CRCerr; - pDpa->stats.rx_frame_errors = 0; - pDpa->stats.rx_fifo_errors = 0; - pDpa->stats.rx_missed_errors = 0; - - /* detailed tx_errors */ - pDpa->stats.tx_aborted_errors = 0; - pDpa->stats.tx_carrier_errors = 0; - pDpa->stats.tx_fifo_errors = 0; - pDpa->stats.tx_heartbeat_errors = 0; - pDpa->stats.tx_window_errors = 0; - - return ((struct net_device_stats *) &(pDpa->stats)); - } - return 0; -} - -static int -RCioctl (struct net_device *dev, struct ifreq *rq, int cmd) -{ - RCuser_struct RCuser; - PDPA pDpa = dev->priv; - - if (!capable (CAP_NET_ADMIN)) - return -EPERM; - - switch (cmd) { - - case RCU_PROTOCOL_REV: - /* - * Assign user protocol revision, to tell user-level - * controller program whether or not it's in sync. - */ - rq->ifr_ifru.ifru_data = (caddr_t) USER_PROTOCOL_REV; - break; - - case RCU_COMMAND: - { - if (copy_from_user - (&RCuser, rq->ifr_data, sizeof (RCuser))) - return -EFAULT; - - dprintk ("RCioctl: RCuser_cmd = 0x%x\n", RCuser.cmd); - - switch (RCuser.cmd) { - case RCUC_GETFWVER: - RCUD_GETFWVER = &RCuser.RCUS_GETFWVER; - RCGetFirmwareVer (dev, - (PU8) & RCUD_GETFWVER-> - FirmString, NULL); - break; - case RCUC_GETINFO: - RCUD_GETINFO = &RCuser.RCUS_GETINFO; - RCUD_GETINFO->mem_start = dev->base_addr; - RCUD_GETINFO->mem_end = - dev->base_addr + pDpa->pci_addr_len; - RCUD_GETINFO->base_addr = pDpa->pci_addr; - RCUD_GETINFO->irq = dev->irq; - break; - case RCUC_GETIPANDMASK: - RCUD_GETIPANDMASK = &RCuser.RCUS_GETIPANDMASK; - RCGetRavlinIPandMask (dev, - (PU32) & - RCUD_GETIPANDMASK->IpAddr, - (PU32) & - RCUD_GETIPANDMASK-> - NetMask, NULL); - break; - case RCUC_GETLINKSTATISTICS: - RCUD_GETLINKSTATISTICS = - &RCuser.RCUS_GETLINKSTATISTICS; - RCGetLinkStatistics (dev, - (P_RCLINKSTATS) & - RCUD_GETLINKSTATISTICS-> - StatsReturn, NULL); - break; - case RCUC_GETLINKSTATUS: - RCUD_GETLINKSTATUS = &RCuser.RCUS_GETLINKSTATUS; - RCGetLinkStatus (dev, - (PU32) & RCUD_GETLINKSTATUS-> - ReturnStatus, NULL); - break; - case RCUC_GETMAC: - RCUD_GETMAC = &RCuser.RCUS_GETMAC; - RCGetMAC (dev, NULL); - memcpy(RCUD_GETMAC, dev->dev_addr, 8); - break; - case RCUC_GETPROM: - RCUD_GETPROM = &RCuser.RCUS_GETPROM; - RCGetPromiscuousMode (dev, - (PU32) & RCUD_GETPROM-> - PromMode, NULL); - break; - case RCUC_GETBROADCAST: - RCUD_GETBROADCAST = &RCuser.RCUS_GETBROADCAST; - RCGetBroadcastMode (dev, - (PU32) & RCUD_GETBROADCAST-> - BroadcastMode, NULL); - break; - case RCUC_GETSPEED: - if (!(dev->flags & IFF_UP)) { - return -ENODATA; - } - RCUD_GETSPEED = &RCuser.RCUS_GETSPEED; - RCGetLinkSpeed (dev, - (PU32) & RCUD_GETSPEED-> - LinkSpeedCode, NULL); - break; - case RCUC_SETIPANDMASK: - RCUD_SETIPANDMASK = &RCuser.RCUS_SETIPANDMASK; - RCSetRavlinIPandMask (dev, - (U32) RCUD_SETIPANDMASK-> - IpAddr, - (U32) RCUD_SETIPANDMASK-> - NetMask); - break; - case RCUC_SETMAC: - RCSetMAC (dev, (PU8) & RCUD_SETMAC->mac); - break; - case RCUC_SETSPEED: - RCUD_SETSPEED = &RCuser.RCUS_SETSPEED; - RCSetLinkSpeed (dev, - (U16) RCUD_SETSPEED-> - LinkSpeedCode); - break; - case RCUC_SETPROM: - RCUD_SETPROM = &RCuser.RCUS_SETPROM; - RCSetPromiscuousMode (dev, - (U16) RCUD_SETPROM-> - PromMode); - break; - case RCUC_SETBROADCAST: - RCUD_SETBROADCAST = &RCuser.RCUS_SETBROADCAST; - RCSetBroadcastMode (dev, - (U16) RCUD_SETBROADCAST-> - BroadcastMode); - break; - default: - RCUD_DEFAULT = &RCuser.RCUS_DEFAULT; - RCUD_DEFAULT->rc = 0x11223344; - break; - } - if (copy_to_user (rq->ifr_data, &RCuser, - sizeof (RCuser))) - return -EFAULT; - break; - } /* RCU_COMMAND */ - - default: - rq->ifr_ifru.ifru_data = (caddr_t) 0x12345678; - return -EINVAL; - } - return 0; -} - -static int -RCconfig (struct net_device *dev, struct ifmap *map) -{ - /* - * To be completed ... - */ - return 0; - if (dev->flags & IFF_UP) /* can't act on a running interface */ - return -EBUSY; - - /* Don't allow changing the I/O address */ - if (map->base_addr != dev->base_addr) { - printk (KERN_WARNING "%s Change I/O address not implemented\n", - dev->name); - return -EOPNOTSUPP; - } - return 0; -} - -static void __exit -rcpci_cleanup_module (void) -{ - pci_unregister_driver (&rcpci45_driver); -} - -module_init (rcpci_init_module); -module_exit (rcpci_cleanup_module); - -static int -RC_allocate_and_post_buffers (struct net_device *dev, int numBuffers) -{ - - int i; - PU32 p; - psingleB pB; - struct sk_buff *skb; - PDPA pDpa = dev->priv; - RC_RETURN status; - U32 res = 0; - - if (!numBuffers) - return 0; - else if (numBuffers > MAX_NMBR_POST_BUFFERS_PER_MSG) { - printk (KERN_ERR "%s: Too many buffers requested!\n", - dev->name); - numBuffers = 32; - } - - p = (PU32) kmalloc (sizeof (U32) + numBuffers * sizeof (singleB), - GFP_DMA | GFP_ATOMIC); - - if (!p) { - printk (KERN_WARNING "%s unable to allocate TCB\n", - dev->name); - goto out; - } - - p[0] = 0; /* Buffer Count */ - pB = (psingleB) ((U32) p + sizeof (U32));/* point to the first buffer */ - - for (i = 0; i < numBuffers; i++) { - skb = dev_alloc_skb (MAX_ETHER_SIZE + 2); - if (!skb) { - printk (KERN_WARNING - "%s: unable to allocate enough skbs!\n", - dev->name); - goto err_out_unmap; - } - skb_reserve (skb, 2); /* Align IP on 16 byte boundaries */ - pB->context = (U32) skb; - pB->scount = 1; /* segment count */ - pB->size = MAX_ETHER_SIZE; - pB->addr = pci_map_single(pDpa->pci_dev, skb->data, - MAX_ETHER_SIZE, PCI_DMA_FROMDEVICE); - p[0]++; - pB++; - } - - if ((status = RCPostRecvBuffers (dev, (PRCTCB) p)) != RC_RTN_NO_ERROR) { - printk (KERN_WARNING "%s: Post buffer failed, error 0x%x\n", - dev->name, status); - goto err_out_unmap; - } -out_free: - res = p[0]; - kfree (p); -out: - return (res); /* return the number of posted buffers */ - -err_out_unmap: - for (; p[0] > 0; p[0]--) { - --pB; - skb = (struct sk_buff *) pB->context; - pci_unmap_single(pDpa->pci_dev, pB->addr, MAX_ETHER_SIZE, - PCI_DMA_FROMDEVICE); - dev_kfree_skb (skb); - } - goto out_free; -} diff -Nru a/drivers/net/s2io.c b/drivers/net/s2io.c --- a/drivers/net/s2io.c Tue May 18 23:38:08 2004 +++ b/drivers/net/s2io.c Tue May 18 23:38:08 2004 @@ -2339,9 +2339,6 @@ struct net_device *dev = (struct net_device *) dev_id; nic_t *sp = dev->priv; XENA_dev_config_t *bar0 = (XENA_dev_config_t *) sp->bar0; -#ifndef CONFIG_S2IO_NAPI - int i, ret; -#endif u64 reason = 0, general_mask = 0; mac_info_t *mac_control; struct config_param *config; diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c --- a/drivers/net/tg3.c Tue May 18 23:38:07 2004 +++ b/drivers/net/tg3.c Tue May 18 23:38:07 2004 @@ -56,8 +56,8 @@ #define DRV_MODULE_NAME "tg3" #define PFX DRV_MODULE_NAME ": " -#define DRV_MODULE_VERSION "3.3" -#define DRV_MODULE_RELDATE "April 27, 2004" +#define DRV_MODULE_VERSION "3.4" +#define DRV_MODULE_RELDATE "May 14, 2004" #define TG3_DEF_MAC_MODE 0 #define TG3_DEF_RX_MODE 0 @@ -80,7 +80,8 @@ /* hardware minimum and maximum for a single frame's data payload */ #define TG3_MIN_MTU 60 #define TG3_MAX_MTU(tp) \ - (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 ? 9000 : 1500) + ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && \ + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) ? 9000 : 1500) /* These numbers seem to be hard coded in the NIC firmware somehow. * You can't change the ring sizes, but you can change where you place @@ -98,7 +99,8 @@ * replace things like '% foo' with '& (foo - 1)'. */ #define TG3_RX_RCB_RING_SIZE(tp) \ - (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ? \ + ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || \ + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ? \ 512 : 1024) #define TG3_TX_RING_SIZE 512 @@ -182,6 +184,16 @@ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5720, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750M, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL }, { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX, @@ -373,6 +385,7 @@ tp->pci_clock_ctrl = clock_ctrl; if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 && (orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { tw32_f(TG3PCI_CLOCK_CTRL, clock_ctrl | @@ -396,7 +409,7 @@ if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { tw32_f(MAC_MI_MODE, (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); - udelay(40); + udelay(80); } *val = 0xffffffff; @@ -429,7 +442,7 @@ if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); } return ret; @@ -443,7 +456,7 @@ if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { tw32_f(MAC_MI_MODE, (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); - udelay(40); + udelay(80); } frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) & @@ -472,7 +485,7 @@ if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); } return ret; @@ -748,8 +761,8 @@ if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) { /* Cannot do read-modify-write on 5401 */ tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20); - } - else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { u32 phy_reg; /* Set bit 14 with read-modify-write to preserve other bits */ @@ -842,6 +855,12 @@ static int tg3_setup_phy(struct tg3 *, int); +#define RESET_KIND_SHUTDOWN 0 +#define RESET_KIND_INIT 1 +#define RESET_KIND_SUSPEND 2 + +static void tg3_write_sig_post_reset(struct tg3 *, int); + static int tg3_set_power_state(struct tg3 *tp, int state) { u32 misc_host_ctrl; @@ -928,6 +947,8 @@ mac_mode = MAC_MODE_PORT_MODE_TBI; } + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) + tw32(MAC_LED_CTRL, tp->led_ctrl); if (((power_caps & PCI_PM_CAP_PME_D3cold) && (tp->tg3_flags & TG3_FLAG_WOL_ENABLE))) @@ -953,7 +974,8 @@ CLOCK_CTRL_ALTCLK | CLOCK_CTRL_PWRDOWN_PLL133); udelay(40); - } else { + } else if (!((GET_ASIC_REV(tp->pci_chip_rev_id) == 5750) && + (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) { u32 newbits1, newbits2; if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || @@ -962,7 +984,8 @@ CLOCK_CTRL_TXCLK_DISABLE | CLOCK_CTRL_ALTCLK); newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; - } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { + } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { newbits1 = CLOCK_CTRL_625_CORE; newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; } else { @@ -976,7 +999,8 @@ tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2); udelay(40); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { u32 newbits3; if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || @@ -999,6 +1023,8 @@ /* Finally, set the new power state. */ pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control); + tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); + return 0; } @@ -1311,7 +1337,7 @@ tp->mi_mode = MAC_MI_MODE_BASE; tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02); @@ -1380,11 +1406,14 @@ else tg3_writephy(tp, MII_TG3_IMASK, ~0); - if (tp->led_mode == led_mode_three_link) - tg3_writephy(tp, MII_TG3_EXT_CTRL, - MII_TG3_EXT_CTRL_LNK3_LED_MODE); - else - tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { + if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) + tg3_writephy(tp, MII_TG3_EXT_CTRL, + MII_TG3_EXT_CTRL_LNK3_LED_MODE); + else + tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); + } current_link_up = 0; current_speed = SPEED_INVALID; @@ -1497,14 +1526,13 @@ tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { - if ((tp->led_mode == led_mode_link10) || + if ((tp->led_ctrl == LED_CTRL_MODE_PHY_2) || (current_link_up == 1 && tp->link_config.active_speed == SPEED_10)) tp->mac_mode |= MAC_MODE_LINK_POLARITY; } else { if (current_link_up == 1) tp->mac_mode |= MAC_MODE_LINK_POLARITY; - tw32(MAC_LED_CTRL, LED_CTRL_PHY_MODE_1); } /* ??? Without this setting Netgear GA302T PHY does not @@ -1514,7 +1542,7 @@ tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) { tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); } tw32_f(MAC_MODE, tp->mac_mode); @@ -2038,9 +2066,15 @@ if (current_link_up == 1) { tp->link_config.active_speed = SPEED_1000; tp->link_config.active_duplex = DUPLEX_FULL; + tw32(MAC_LED_CTRL, (tp->led_ctrl | + LED_CTRL_LNKLED_OVERRIDE | + LED_CTRL_1000MBPS_ON)); } else { tp->link_config.active_speed = SPEED_INVALID; tp->link_config.active_duplex = DUPLEX_INVALID; + tw32(MAC_LED_CTRL, (tp->led_ctrl | + LED_CTRL_LNKLED_OVERRIDE | + LED_CTRL_TRAFFIC_OVERRIDE)); } if (current_link_up != netif_carrier_ok(tp->dev)) { @@ -2093,11 +2127,14 @@ (6 << TX_LENGTHS_IPG_SHIFT) | (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); - if (netif_carrier_ok(tp->dev)) { - tw32(HOSTCC_STAT_COAL_TICKS, - DEFAULT_STAT_COAL_TICKS); - } else { - tw32(HOSTCC_STAT_COAL_TICKS, 0); + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { + if (netif_carrier_ok(tp->dev)) { + tw32(HOSTCC_STAT_COAL_TICKS, + DEFAULT_STAT_COAL_TICKS); + } else { + tw32(HOSTCC_STAT_COAL_TICKS, 0); + } } return err; @@ -2841,8 +2878,12 @@ would_hit_hwbug = entry + 1; } - tg3_set_txd(tp, entry, mapping, len, - base_flags, (i == last)); + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tg3_set_txd(tp, entry, mapping, len, + base_flags, (i == last)|(mss << 1)); + else + tg3_set_txd(tp, entry, mapping, len, + base_flags, (i == last)); entry = NEXT_TX(entry); } @@ -3028,8 +3069,12 @@ tp->tx_buffers[entry].skb = NULL; pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping); - tg3_set_txd(tp, entry, mapping, len, - base_flags, (i == last)); + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tg3_set_txd(tp, entry, mapping, len, + base_flags, (i == last)|(mss << 1)); + else + tg3_set_txd(tp, entry, mapping, len, + base_flags, (i == last)); entry = NEXT_TX(entry); } @@ -3387,7 +3432,8 @@ unsigned int i; u32 val; - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { switch (ofs) { case RCVLSC_MODE: case DMAC_MODE: @@ -3395,7 +3441,7 @@ case BUFMGR_MODE: case MEMARB_MODE: /* We can't enable/disable these bits of the - * 5705, just say success. + * 5705/5750, just say success. */ return 0; @@ -3494,28 +3540,115 @@ } /* tp->lock is held. */ +static int tg3_nvram_lock(struct tg3 *tp) +{ + if (tp->tg3_flags & TG3_FLAG_NVRAM) { + int i; + + tw32(NVRAM_SWARB, SWARB_REQ_SET1); + for (i = 0; i < 8000; i++) { + if (tr32(NVRAM_SWARB) & SWARB_GNT1) + break; + udelay(20); + } + if (i == 8000) + return -ENODEV; + } + return 0; +} + +/* tp->lock is held. */ +static void tg3_nvram_unlock(struct tg3 *tp) +{ + if (tp->tg3_flags & TG3_FLAG_NVRAM) + tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); +} + +/* tp->lock is held. */ +static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) +{ + tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, + NIC_SRAM_FIRMWARE_MBOX_MAGIC1); + + if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) { + switch (kind) { + case RESET_KIND_INIT: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_START); + break; + + case RESET_KIND_SHUTDOWN: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_UNLOAD); + break; + + case RESET_KIND_SUSPEND: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_SUSPEND); + break; + + default: + break; + }; + } +} + +/* tp->lock is held. */ +static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) +{ + if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) { + switch (kind) { + case RESET_KIND_INIT: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_START_DONE); + break; + + case RESET_KIND_SHUTDOWN: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_UNLOAD_DONE); + break; + + default: + break; + }; + } +} + +/* tp->lock is held. */ +static void tg3_write_sig_legacy(struct tg3 *tp, int kind) +{ + if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) { + switch (kind) { + case RESET_KIND_INIT: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_START); + break; + + case RESET_KIND_SHUTDOWN: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_UNLOAD); + break; + + case RESET_KIND_SUSPEND: + tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, + DRV_STATE_SUSPEND); + break; + + default: + break; + }; + } +} + +/* tp->lock is held. */ static int tg3_chip_reset(struct tg3 *tp) { u32 val; u32 flags_save; int i; - if (!(tp->tg3_flags2 & TG3_FLG2_SUN_5704)) { - /* Force NVRAM to settle. - * This deals with a chip bug which can result in EEPROM - * corruption. - */ - if (tp->tg3_flags & TG3_FLAG_NVRAM) { - int i; - - tw32(NVRAM_SWARB, SWARB_REQ_SET1); - for (i = 0; i < 100000; i++) { - if (tr32(NVRAM_SWARB) & SWARB_GNT1) - break; - udelay(10); - } - } - } + if (!(tp->tg3_flags2 & TG3_FLG2_SUN_5704)) + tg3_nvram_lock(tp); /* * We must avoid the readl() that normally takes place. @@ -3528,7 +3661,19 @@ /* do the reset */ val = GRC_MISC_CFG_CORECLK_RESET; - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) + + if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) { + if (tr32(0x7e2c) == 0x60) { + tw32(0x7e2c, 0x20); + } + if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { + tw32(GRC_MISC_CFG, (1 << 29)); + val |= (1 << 29); + } + } + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) val |= GRC_MISC_CFG_KEEP_GPHY_POWER; tw32(GRC_MISC_CFG, val); @@ -3542,9 +3687,24 @@ */ pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); - udelay(40); - udelay(40); - udelay(40); + udelay(120); + + if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) { + if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) { + int i; + u32 cfg_val; + + /* Wait for link training to complete. */ + for (i = 0; i < 5000; i++) + udelay(100); + + pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); + pci_write_config_dword(tp->pdev, 0xc4, + cfg_val | (1 << 15)); + } + /* Set PCIE max payload size and clear error status. */ + pci_write_config_dword(tp->pdev, 0xd8, 0xf5000); + } /* Re-enable indirect register accesses. */ pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, @@ -3568,18 +3728,20 @@ tw32(GRC_MODE, tp->grc_mode); + if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { + u32 val = tr32(0xc4); + + tw32(0xc4, val | (1 << 15)); + } + if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { - tp->pci_clock_ctrl |= - (CLOCK_CTRL_FORCE_CLKRUN | CLOCK_CTRL_CLKRUN_OENABLE); + tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; + if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) + tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); } - /* Prevent PXE from restarting. */ - tg3_write_mem(tp, - NIC_SRAM_FIRMWARE_MBOX, - NIC_SRAM_FIRMWARE_MBOX_MAGIC1); - if (tp->phy_id == PHY_ID_SERDES) { tp->mac_mode = MAC_MODE_PORT_MODE_TBI; tw32_f(MAC_MODE, tp->mac_mode); @@ -3602,15 +3764,26 @@ return -ENODEV; } + if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && + tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { + u32 val = tr32(0x7c00); + + tw32(0x7c00, val | (1 << 25)); + } + /* Reprobe ASF enable state. */ tp->tg3_flags &= ~TG3_FLAG_ENABLE_ASF; + tp->tg3_flags2 &= ~TG3_FLG2_ASF_NEW_HANDSHAKE; tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); if (val == NIC_SRAM_DATA_SIG_MAGIC) { u32 nic_cfg; tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); - if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) + if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE; + } } return 0; @@ -3643,15 +3816,18 @@ int err; tg3_stop_fw(tp); + + tg3_write_sig_pre_reset(tp, RESET_KIND_SHUTDOWN); + tg3_abort_hw(tp); err = tg3_chip_reset(tp); + + tg3_write_sig_legacy(tp, RESET_KIND_SHUTDOWN); + tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); + if (err) return err; - if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) - tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, - DRV_STATE_UNLOAD); - return 0; } @@ -3951,305 +4127,305 @@ #if TG3_TSO_SUPPORT != 0 #define TG3_TSO_FW_RELEASE_MAJOR 0x1 -#define TG3_TSO_FW_RELASE_MINOR 0x4 +#define TG3_TSO_FW_RELASE_MINOR 0x6 #define TG3_TSO_FW_RELEASE_FIX 0x0 #define TG3_TSO_FW_START_ADDR 0x08000000 #define TG3_TSO_FW_TEXT_ADDR 0x08000000 -#define TG3_TSO_FW_TEXT_LEN 0x1a90 -#define TG3_TSO_FW_RODATA_ADDR 0x08001a90 +#define TG3_TSO_FW_TEXT_LEN 0x1aa0 +#define TG3_TSO_FW_RODATA_ADDR 0x08001aa0 #define TG3_TSO_FW_RODATA_LEN 0x60 #define TG3_TSO_FW_DATA_ADDR 0x08001b20 -#define TG3_TSO_FW_DATA_LEN 0x20 -#define TG3_TSO_FW_SBSS_ADDR 0x08001b40 +#define TG3_TSO_FW_DATA_LEN 0x30 +#define TG3_TSO_FW_SBSS_ADDR 0x08001b50 #define TG3_TSO_FW_SBSS_LEN 0x2c -#define TG3_TSO_FW_BSS_ADDR 0x08001b70 +#define TG3_TSO_FW_BSS_ADDR 0x08001b80 #define TG3_TSO_FW_BSS_LEN 0x894 -static u32 tg3TsoFwText[] = { - 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800, - 0x37bd4000, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000010, 0x00000000, - 0x0000000d, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0x3c04fefe, - 0xafbf0018, 0x0e0005d4, 0x34840002, 0x0e000664, 0x00000000, 0x3c030800, - 0x90631b58, 0x24020002, 0x3c040800, 0x24841a9c, 0x14620003, 0x24050001, - 0x3c040800, 0x24841a90, 0x24060003, 0x00003821, 0xafa00010, 0x0e000678, +static u32 tg3TsoFwText[(TG3_TSO_FW_TEXT_LEN / 4) + 1] = { + 0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000, + 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800, + 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe, + 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800, + 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001, + 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001, 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001, 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000, - 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001ef, 0x24040001, + 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001, 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800, - 0x90421b88, 0x14520003, 0x00000000, 0x0e0004bf, 0x00000000, 0x0a00003c, + 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c, 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, - 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ab0, 0x00002821, 0x00003021, - 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000678, 0xafa00014, 0x3c040800, - 0x248423c8, 0xa4800000, 0x3c010800, 0xa0201b88, 0x3c010800, 0xac201b8c, - 0x3c010800, 0xac201b90, 0x3c010800, 0xac201b94, 0x3c010800, 0xac201b9c, - 0x3c010800, 0xac201ba8, 0x3c010800, 0xac201bac, 0x8f624434, 0x3c010800, - 0xac221b78, 0x8f624438, 0x3c010800, 0xac221b7c, 0x8f624410, 0xac80f7a8, - 0x3c010800, 0xac201b74, 0x3c010800, 0xac2023d0, 0x3c010800, 0xac2023b8, - 0x3c010800, 0xac2023bc, 0x3c010800, 0xac2023f0, 0x3c010800, 0xac221b80, + 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021, + 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800, + 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c, + 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac, + 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800, + 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8, + 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8, + 0x3c010800, 0xac2023cc, 0x3c010800, 0xac202400, 0x3c010800, 0xac221b90, 0x8f620068, 0x24030007, 0x00021702, 0x10430005, 0x00000000, 0x8f620068, - 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac2023fc, - 0xac820034, 0x3c040800, 0x24841abc, 0x3c050800, 0x8ca523fc, 0x00003021, - 0x00003821, 0xafa00010, 0x0e000678, 0xafa00014, 0x8fbf0018, 0x03e00008, - 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac8, 0x00002821, 0x00003021, - 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000678, 0xafa00014, 0x0e00005b, + 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac20240c, + 0xac820034, 0x3c040800, 0x24841acc, 0x3c050800, 0x8ca5240c, 0x00003021, + 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8fbf0018, 0x03e00008, + 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ad8, 0x00002821, 0x00003021, + 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x0e00005b, 0x00000000, 0x0e0000b4, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x24020001, 0x8f636820, 0x00821004, 0x00021027, 0x00621824, 0x03e00008, 0xaf636820, 0x27bdffd0, 0xafbf002c, 0xafb60028, 0xafb50024, 0xafb40020, 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, 0x8f675c5c, 0x3c030800, - 0x24631bac, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b88, - 0x14400118, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902, + 0x24631bbc, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b98, + 0x14400119, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902, 0x306300ff, 0x30e20003, 0x000211c0, 0x00622825, 0x00a04021, 0x00071602, - 0x3c030800, 0x90631b88, 0x3044000f, 0x14600036, 0x00804821, 0x24020001, - 0x3c010800, 0xa0221b88, 0x00051100, 0x00821025, 0x3c010800, 0xac201b8c, - 0x3c010800, 0xac201b90, 0x3c010800, 0xac201b94, 0x3c010800, 0xac201b9c, - 0x3c010800, 0xac201ba8, 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, - 0x3c010800, 0xa42223c8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222400, - 0x30428000, 0x3c010800, 0xa4231bb6, 0x10400005, 0x24020001, 0x3c010800, - 0xac2223e4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023e4, - 0x9622000a, 0x3c030800, 0x94631bb6, 0x3c010800, 0xac2023e0, 0x3c010800, - 0xac2023e8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800, - 0xa42223c0, 0x3c010800, 0x0a000115, 0xa4231b86, 0x9622000c, 0x3c010800, - 0xa42223dc, 0x3c040800, 0x24841b8c, 0x8c820000, 0x00021100, 0x3c010800, - 0x00220821, 0xac311bb8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821, - 0xac271bbc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800, - 0x00220821, 0xac261bc0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821, - 0xac291bc4, 0x96230008, 0x3c020800, 0x8c421b9c, 0x00432821, 0x3c010800, - 0xac251b9c, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14, + 0x3c030800, 0x90631b98, 0x3044000f, 0x14600036, 0x00804821, 0x24020001, + 0x3c010800, 0xa0221b98, 0x00051100, 0x00821025, 0x3c010800, 0xac201b9c, + 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac, + 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bb0, 0x3c010800, 0xac201bb4, + 0x3c010800, 0xa42223d8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222410, + 0x30428000, 0x3c010800, 0xa4231bc6, 0x10400005, 0x24020001, 0x3c010800, + 0xac2223f4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023f4, + 0x9622000a, 0x3c030800, 0x94631bc6, 0x3c010800, 0xac2023f0, 0x3c010800, + 0xac2023f8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800, + 0xa42223d0, 0x3c010800, 0x0a000115, 0xa4231b96, 0x9622000c, 0x3c010800, + 0xa42223ec, 0x3c040800, 0x24841b9c, 0x8c820000, 0x00021100, 0x3c010800, + 0x00220821, 0xac311bc8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821, + 0xac271bcc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800, + 0x00220821, 0xac261bd0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821, + 0xac291bd4, 0x96230008, 0x3c020800, 0x8c421bac, 0x00432821, 0x3c010800, + 0xac251bac, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14, 0x3063000f, 0x2c620002, 0x1440000b, 0x3c02c000, 0x8f630c14, 0x3c020800, - 0x8c421b30, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b30, 0x2c620002, + 0x8c421b40, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x3c02c000, 0x00e21825, 0xaf635c5c, 0x8f625c50, 0x30420002, - 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b70, - 0x3c040800, 0x94841b84, 0x01221025, 0x3c010800, 0xa42223ca, 0x24020001, - 0x3c010800, 0xac221ba8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003, - 0xac231b70, 0x3c010800, 0xa4251b84, 0x3c060800, 0x24c61b8c, 0x8cc20000, - 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000652, - 0x24040002, 0x0a0001e5, 0x00000000, 0x3c020800, 0x8c421ba8, 0x10400077, - 0x24020001, 0x3c050800, 0x90a51b88, 0x14a20071, 0x00000000, 0x3c150800, - 0x96b51b86, 0x3c040800, 0x8c841b9c, 0x32a3ffff, 0x0083102a, 0x1440006b, - 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523e0, 0x1060005b, + 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b80, + 0x3c040800, 0x94841b94, 0x01221025, 0x3c010800, 0xa42223da, 0x24020001, + 0x3c010800, 0xac221bb8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003, + 0xac231b80, 0x3c010800, 0xa4251b94, 0x3c060800, 0x24c61b9c, 0x8cc20000, + 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000656, + 0x24040002, 0x0a0001e6, 0x00000000, 0x3c020800, 0x8c421bb8, 0x10400078, + 0x24020001, 0x3c050800, 0x90a51b98, 0x14a20072, 0x00000000, 0x3c150800, + 0x96b51b96, 0x3c040800, 0x8c841bac, 0x32a3ffff, 0x0083102a, 0x1440006c, + 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523f0, 0x1060005c, 0x00009021, 0x24d60004, 0x0060a021, 0x24d30014, 0x8ec20000, 0x00028100, - 0x3c110800, 0x02308821, 0x0e000621, 0x8e311bb8, 0x00402821, 0x10a00053, - 0x00000000, 0x9628000a, 0x31020040, 0x10400004, 0x2407180c, 0x8e22000c, - 0x2407188c, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bc0, 0x3c020800, - 0x00501021, 0x8c421bc4, 0x00031d00, 0x00021400, 0x00621825, 0xaca30014, - 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff, 0x00431021, - 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000, 0x30c4ffff, - 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004, 0x8e63fff4, - 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021, 0xae62fff4, - 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0, 0xae60fff4, - 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008, 0x24020305, - 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c, 0x0a0001ca, - 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223e0, 0x10400003, 0x3c024b65, - 0x0a0001d2, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c, 0x30e2ffff, - 0xaca20010, 0x0e00059f, 0x00a02021, 0x3242ffff, 0x0054102b, 0x1440ffaa, - 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e5, 0xa0221b88, 0x8ec2083c, - 0x24420001, 0x0a0001e5, 0xaec2083c, 0x0e0004bf, 0x00000000, 0x8fbf002c, - 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, - 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028, 0xafb30024, - 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff, 0x3442fff8, - 0x3c060800, 0x24c61ba4, 0x02428824, 0x9623000e, 0x8cc20000, 0x00431021, - 0xacc20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821, 0x0e000637, - 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, - 0x10400121, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x1040011c, - 0x00000000, 0x0a00020c, 0x00000000, 0x8e240008, 0x8e230014, 0x00041402, - 0x000241c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f, 0x00031942, - 0x30637800, 0x00021100, 0x24424000, 0x00625021, 0x9542000a, 0x3084ffff, - 0x30420008, 0x104000b3, 0x000429c0, 0x3c020800, 0x8c4223f0, 0x1440002d, - 0x25050008, 0x95020014, 0x3c010800, 0xa42223c0, 0x8d070010, 0x00071402, - 0x3c010800, 0xa42223c2, 0x3c010800, 0xa42723c4, 0x9502000e, 0x30e3ffff, - 0x00431023, 0x3c010800, 0xac2223f8, 0x8f626800, 0x3c030010, 0x00431024, - 0x10400005, 0x00000000, 0x9503001a, 0x9502001c, 0x0a000241, 0x00431021, - 0x9502001a, 0x3c010800, 0xac2223ec, 0x3c02c000, 0x02421825, 0x3c010800, - 0xac2823f0, 0x3c010800, 0xac3223f4, 0xaf635c9c, 0x8f625c90, 0x30420002, - 0x104000df, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000da, - 0x00000000, 0x0a00024e, 0x00000000, 0x9502000e, 0x3c030800, 0x946323c4, - 0x00434823, 0x3123ffff, 0x2c620008, 0x1040001c, 0x00000000, 0x95020014, - 0x24420028, 0x00a22821, 0x00031042, 0x1840000b, 0x00002021, 0x24c60848, - 0x00403821, 0x94a30000, 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, - 0x0087102a, 0x1440fff9, 0x24a50002, 0x31220001, 0x1040001f, 0x3c024000, - 0x3c040800, 0x248423ec, 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, - 0x0a00028d, 0xac820000, 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, - 0x00000000, 0x9502001a, 0x3c030800, 0x8c6323ec, 0x00431021, 0x3c010800, - 0xac2223ec, 0x0a00028e, 0x3c024000, 0x9502001a, 0x9504001c, 0x3c030800, - 0x8c6323ec, 0x00441023, 0x00621821, 0x3c010800, 0xac2323ec, 0x3c024000, - 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, - 0x9542000a, 0x30420010, 0x10400095, 0x00000000, 0x3c060800, 0x24c623f0, - 0x3c020800, 0x944223c4, 0x8cc50000, 0x3c040800, 0x8c8423f8, 0x24420030, - 0x00a22821, 0x94a20004, 0x3c030800, 0x8c6323ec, 0x00441023, 0x00621821, - 0x00603821, 0x00032402, 0x30e2ffff, 0x00823821, 0x00071402, 0x00e23821, - 0x00071027, 0x3c010800, 0xac2323ec, 0xa4a20006, 0x3c030800, 0x8c6323f4, - 0x3c0200ff, 0x3442fff8, 0x00628824, 0x96220008, 0x24040001, 0x24034000, - 0x000241c0, 0x00e01021, 0xa502001a, 0xa500001c, 0xacc00000, 0x3c010800, - 0xac241b50, 0xaf635cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, - 0x3c010800, 0xac201b50, 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, - 0x10400003, 0x00000000, 0x3c010800, 0xac201b50, 0x3c020800, 0x8c421b50, - 0x1040ffec, 0x00000000, 0x3c040800, 0x0e000637, 0x8c8423f4, 0x0a00032c, - 0x00000000, 0x3c030800, 0x90631b88, 0x24020002, 0x14620003, 0x3c034b65, - 0x0a0002e3, 0x00008021, 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, - 0x24100001, 0x01002021, 0x0e000352, 0x02003021, 0x24020003, 0x3c010800, - 0xa0221b88, 0x24020002, 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323e0, - 0x10620006, 0x00000000, 0x3c020800, 0x944223c8, 0x00021400, 0x0a000321, - 0xae220014, 0x3c040800, 0x248423ca, 0x94820000, 0x00021400, 0xae220014, - 0x3c020800, 0x8c421bac, 0x3c03c000, 0x3c010800, 0xa0201b88, 0x00431025, - 0xaf625c5c, 0x8f625c50, 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, - 0x8c820000, 0x00431025, 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, - 0x00000000, 0x3c020800, 0x24421b74, 0x8c430000, 0x24630001, 0xac430000, - 0x8f630c14, 0x3063000f, 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, - 0x3c020800, 0x8c421b30, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b30, - 0x2c620002, 0x1040fff7, 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, - 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, - 0x0e0004bf, 0x00000000, 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, - 0x8fb00018, 0x03e00008, 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b78, - 0x8c820000, 0x00031c02, 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, - 0x8f624450, 0x00021c02, 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, - 0x8f624444, 0x00431024, 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, - 0x3042ffff, 0x3c024000, 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, - 0x1440fffc, 0x00000000, 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, - 0x14c00011, 0x256e0008, 0x3c020800, 0x8c4223e4, 0x10400007, 0x24020016, - 0x3c010800, 0xa42223c2, 0x2402002a, 0x3c010800, 0x0a000366, 0xa42223c4, - 0x8d670010, 0x00071402, 0x3c010800, 0xa42223c2, 0x3c010800, 0xa42723c4, - 0x3c040800, 0x948423c4, 0x3c030800, 0x946323c2, 0x95cf0006, 0x3c020800, - 0x944223c0, 0x00832023, 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, - 0x3082ffff, 0x14c0001a, 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, - 0xa42223c6, 0x95820004, 0x95830006, 0x3c010800, 0xac2023d4, 0x3c010800, - 0xac2023d8, 0x00021400, 0x00431025, 0x3c010800, 0xac221bb0, 0x95220004, - 0x3c010800, 0xa4221bb4, 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, - 0x24020001, 0x3c010800, 0x0a00039a, 0xac2223e8, 0x3c030800, 0x8c6323d8, - 0x3c020800, 0x94421bb4, 0x00431021, 0xa5220004, 0x3c020800, 0x94421bb0, - 0xa5820004, 0x3c020800, 0x8c421bb0, 0xa5820006, 0x3c020800, 0x8c4223e0, - 0x3c0d0800, 0x8dad23d4, 0x3c0a0800, 0x144000e5, 0x8d4a23d8, 0x3c020800, - 0x94421bb4, 0x004a1821, 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, - 0x01435023, 0x3c020800, 0x944223c6, 0x30420009, 0x10400008, 0x00000000, - 0x9582000c, 0x3042fff6, 0xa582000c, 0x3c020800, 0x944223c6, 0x30420009, - 0x01a26823, 0x3c020800, 0x8c4223e8, 0x1040004a, 0x01203821, 0x3c020800, - 0x944223c2, 0x00004021, 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, - 0x00021042, 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, - 0x00c23021, 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, - 0x00623021, 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, - 0x00003021, 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, - 0x2d020004, 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, - 0x00442023, 0x01803821, 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, - 0x18400010, 0x00c33021, 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, + 0x3c110800, 0x02308821, 0x0e000625, 0x8e311bc8, 0x00402821, 0x10a00054, + 0x00000000, 0x9628000a, 0x31020040, 0x10400005, 0x2407180c, 0x8e22000c, + 0x2407188c, 0x00021400, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bd0, + 0x3c020800, 0x00501021, 0x8c421bd4, 0x00031d00, 0x00021400, 0x00621825, + 0xaca30014, 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff, + 0x00431021, 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000, + 0x30c4ffff, 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004, + 0x8e63fff4, 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021, + 0xae62fff4, 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0, + 0xae60fff4, 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008, + 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c, + 0x0a0001cb, 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223f0, 0x10400003, + 0x3c024b65, 0x0a0001d3, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c, + 0x30e2ffff, 0xaca20010, 0x0e0005a2, 0x00a02021, 0x3242ffff, 0x0054102b, + 0x1440ffa9, 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e6, 0xa0221b98, + 0x8ec2083c, 0x24420001, 0x0a0001e6, 0xaec2083c, 0x0e0004c0, 0x00000000, + 0x8fbf002c, 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018, + 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028, + 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff, + 0x3442fff8, 0x3c070800, 0x24e71bb4, 0x02428824, 0x9623000e, 0x8ce20000, + 0x00431021, 0xace20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821, + 0x0e00063b, 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90, + 0x30420002, 0x1040011e, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002, + 0x10400119, 0x00000000, 0x0a00020d, 0x00000000, 0x8e240008, 0x8e230014, + 0x00041402, 0x000231c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f, + 0x00031942, 0x30637800, 0x00021100, 0x24424000, 0x00624821, 0x9522000a, + 0x3084ffff, 0x30420008, 0x104000b0, 0x000429c0, 0x3c020800, 0x8c422400, + 0x14400024, 0x24c50008, 0x94c20014, 0x3c010800, 0xa42223d0, 0x8cc40010, + 0x00041402, 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42423d4, 0x94c2000e, + 0x3083ffff, 0x00431023, 0x3c010800, 0xac222408, 0x94c2001a, 0x3c010800, + 0xac262400, 0x3c010800, 0xac322404, 0x3c010800, 0xac2223fc, 0x3c02c000, + 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e5, 0x00000000, + 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e0, 0x00000000, 0x0a000246, + 0x00000000, 0x94c2000e, 0x3c030800, 0x946323d4, 0x00434023, 0x3103ffff, + 0x2c620008, 0x1040001c, 0x00000000, 0x94c20014, 0x24420028, 0x00a22821, + 0x00031042, 0x1840000b, 0x00002021, 0x24e60848, 0x00403821, 0x94a30000, + 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, 0x0087102a, 0x1440fff9, + 0x24a50002, 0x31020001, 0x1040001f, 0x3c024000, 0x3c040800, 0x248423fc, + 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, 0x0a000285, 0xac820000, + 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, 0x00000000, 0x94c2001a, + 0x3c030800, 0x8c6323fc, 0x00431021, 0x3c010800, 0xac2223fc, 0x0a000286, + 0x3c024000, 0x94c2001a, 0x94c4001c, 0x3c030800, 0x8c6323fc, 0x00441023, + 0x00621821, 0x3c010800, 0xac2323fc, 0x3c024000, 0x02421825, 0xaf635c9c, + 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x9522000a, 0x30420010, + 0x1040009b, 0x00000000, 0x3c030800, 0x946323d4, 0x3c070800, 0x24e72400, + 0x8ce40000, 0x8f626800, 0x24630030, 0x00832821, 0x3c030010, 0x00431024, + 0x1440000a, 0x00000000, 0x94a20004, 0x3c040800, 0x8c842408, 0x3c030800, + 0x8c6323fc, 0x00441023, 0x00621821, 0x3c010800, 0xac2323fc, 0x3c040800, + 0x8c8423fc, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021, + 0x00041027, 0xa4a20006, 0x3c030800, 0x8c632404, 0x3c0200ff, 0x3442fff8, + 0x00628824, 0x96220008, 0x24050001, 0x24034000, 0x000231c0, 0x00801021, + 0xa4c2001a, 0xa4c0001c, 0xace00000, 0x3c010800, 0xac251b60, 0xaf635cb8, + 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, 0x3c010800, 0xac201b60, + 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, + 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x1040ffec, 0x00000000, + 0x3c040800, 0x0e00063b, 0x8c842404, 0x0a00032a, 0x00000000, 0x3c030800, + 0x90631b98, 0x24020002, 0x14620003, 0x3c034b65, 0x0a0002e1, 0x00008021, + 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, 0x24100001, 0x00c02021, + 0x0e000350, 0x02003021, 0x24020003, 0x3c010800, 0xa0221b98, 0x24020002, + 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323f0, 0x10620006, 0x00000000, + 0x3c020800, 0x944223d8, 0x00021400, 0x0a00031f, 0xae220014, 0x3c040800, + 0x248423da, 0x94820000, 0x00021400, 0xae220014, 0x3c020800, 0x8c421bbc, + 0x3c03c000, 0x3c010800, 0xa0201b98, 0x00431025, 0xaf625c5c, 0x8f625c50, + 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, 0x8c820000, 0x00431025, + 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, 0x00000000, 0x3c020800, + 0x24421b84, 0x8c430000, 0x24630001, 0xac430000, 0x8f630c14, 0x3063000f, + 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, 0x3c020800, 0x8c421b40, + 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, + 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, + 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, 0x0e0004c0, 0x00000000, + 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x03e00008, + 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b88, 0x8c820000, 0x00031c02, + 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, 0x8f624450, 0x00021c02, + 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, + 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3c024000, + 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00000000, + 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, 0x14c00011, 0x256e0008, + 0x3c020800, 0x8c4223f4, 0x10400007, 0x24020016, 0x3c010800, 0xa42223d2, + 0x2402002a, 0x3c010800, 0x0a000364, 0xa42223d4, 0x8d670010, 0x00071402, + 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42723d4, 0x3c040800, 0x948423d4, + 0x3c030800, 0x946323d2, 0x95cf0006, 0x3c020800, 0x944223d0, 0x00832023, + 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, 0x3082ffff, 0x14c0001a, + 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, 0xa42223d6, 0x95820004, + 0x95830006, 0x3c010800, 0xac2023e4, 0x3c010800, 0xac2023e8, 0x00021400, + 0x00431025, 0x3c010800, 0xac221bc0, 0x95220004, 0x3c010800, 0xa4221bc4, + 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, 0x24020001, 0x3c010800, + 0x0a000398, 0xac2223f8, 0x3c030800, 0x8c6323e8, 0x3c020800, 0x94421bc4, + 0x00431021, 0xa5220004, 0x3c020800, 0x94421bc0, 0xa5820004, 0x3c020800, + 0x8c421bc0, 0xa5820006, 0x3c020800, 0x8c4223f0, 0x3c0d0800, 0x8dad23e4, + 0x3c0a0800, 0x144000e5, 0x8d4a23e8, 0x3c020800, 0x94421bc4, 0x004a1821, + 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, 0x01435023, 0x3c020800, + 0x944223d6, 0x30420009, 0x10400008, 0x00000000, 0x9582000c, 0x3042fff6, + 0xa582000c, 0x3c020800, 0x944223d6, 0x30420009, 0x01a26823, 0x3c020800, + 0x8c4223f8, 0x1040004a, 0x01203821, 0x3c020800, 0x944223d2, 0x00004021, + 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, 0x00021042, 0x18400008, + 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, 0x0103102a, + 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402, + 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, 0x2527000c, + 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, 0x1440fffb, + 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, 0x01803821, + 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, 0x18400010, 0x00c33021, + 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006, + 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008, + 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, 0x10400005, 0x00061c02, + 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, 0x30c2ffff, 0x00623021, + 0x00061402, 0x00c23021, 0x0a00047d, 0x30c6ffff, 0x24020002, 0x14c20081, + 0x00000000, 0x3c020800, 0x8c42240c, 0x14400007, 0x00000000, 0x3c020800, + 0x944223d2, 0x95230002, 0x01e21023, 0x10620077, 0x00000000, 0x3c020800, + 0x944223d2, 0x01e21023, 0xa5220002, 0x3c020800, 0x8c42240c, 0x1040001a, + 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b96, 0x00e04021, 0x00072c02, + 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, 0x30e2ffff, 0x00823821, + 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, 0x948423d4, 0x00453023, + 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, 0x00061c02, 0x30c2ffff, + 0x0a00047d, 0x00623021, 0x01203821, 0x00004021, 0x3082ffff, 0x00021042, + 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, + 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, + 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, + 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, + 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, + 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, 0x948423d4, 0x00621821, + 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061c02, 0x3c020800, + 0x944223d0, 0x00c34821, 0x00441023, 0x00021fc2, 0x00431021, 0x00021043, + 0x18400010, 0x00003021, 0x00402021, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, - 0x00625824, 0x25670008, 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, - 0x10400005, 0x00061c02, 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, - 0x30c2ffff, 0x00623021, 0x00061402, 0x00c23021, 0x0a00047f, 0x30c6ffff, - 0x24020002, 0x14c20081, 0x00000000, 0x3c020800, 0x8c4223fc, 0x14400007, - 0x00000000, 0x3c020800, 0x944223c2, 0x95230002, 0x01e21023, 0x10620077, - 0x00000000, 0x3c020800, 0x944223c2, 0x01e21023, 0xa5220002, 0x3c020800, - 0x8c4223fc, 0x1040001a, 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b86, - 0x00e04021, 0x00072c02, 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, - 0x30e2ffff, 0x00823821, 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, - 0x948423c4, 0x00453023, 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, - 0x00061c02, 0x30c2ffff, 0x0a00047f, 0x00623021, 0x01203821, 0x00004021, - 0x3082ffff, 0x00021042, 0x18400008, 0x00003021, 0x00401821, 0x94e20000, - 0x25080001, 0x00c23021, 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, - 0x30c2ffff, 0x00623021, 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, - 0xa522000a, 0x00003021, 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, - 0x00c23021, 0x2d020004, 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, - 0x91230009, 0x00442023, 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, - 0x948423c4, 0x00621821, 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, - 0x00061c02, 0x3c020800, 0x944223c0, 0x00c34821, 0x00441023, 0x00021fc2, - 0x00431021, 0x00021043, 0x18400010, 0x00003021, 0x00402021, 0x94e20000, - 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, - 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, - 0x00000000, 0x3c020800, 0x944223dc, 0x00c23021, 0x3122ffff, 0x00c23021, - 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, - 0x00061027, 0xa5820010, 0xadc00014, 0x0a00049f, 0xadc00000, 0x8dc70010, - 0x00e04021, 0x11400007, 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, - 0x00433021, 0x00061402, 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, - 0x946323c4, 0x3102ffff, 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, - 0x30c2ffff, 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, - 0xa5820010, 0x3102ffff, 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, - 0x8c4223e4, 0x10400002, 0x25e2fff2, 0xa5c20034, 0x3c020800, 0x8c4223d8, - 0x3c040800, 0x8c8423d4, 0x24420001, 0x3c010800, 0xac2223d8, 0x3c020800, - 0x8c421bb0, 0x3303ffff, 0x00832021, 0x3c010800, 0xac2423d4, 0x00431821, - 0x0062102b, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223d4, 0x3c010800, - 0xac231bb0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800, 0x24a51b86, - 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034, 0xafb40030, - 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000, 0x3c020800, - 0x944223c0, 0x3c030800, 0x8c631ba0, 0x3c040800, 0x8c841b9c, 0x01221023, - 0x0064182a, 0xa7a9001e, 0x106000bc, 0xa7a20016, 0x24be0022, 0x97b6001e, - 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000, 0x8fc2fff8, - 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000ae, 0x00000000, - 0x97d50818, 0x32a2ffff, 0x104000a1, 0x00009021, 0x0040a021, 0x00008821, - 0x0e000621, 0x00000000, 0x00403021, 0x14c00007, 0x00000000, 0x3c020800, - 0x8c4223cc, 0x24420001, 0x3c010800, 0x0a000593, 0xac2223cc, 0x3c100800, - 0x02118021, 0x8e101bb8, 0x9608000a, 0x31020040, 0x10400004, 0x2407180c, - 0x8e02000c, 0x2407188c, 0xacc20018, 0x31020080, 0x54400001, 0x34e70010, - 0x3c020800, 0x00511021, 0x8c421bc0, 0x3c030800, 0x00711821, 0x8c631bc4, - 0x00021500, 0x00031c00, 0x00431025, 0xacc20014, 0x96040008, 0x3242ffff, - 0x00821021, 0x0282102a, 0x14400002, 0x02b22823, 0x00802821, 0x8e020000, - 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021, 0x26310010, 0xac820004, - 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010, 0x24020305, 0x0e00059f, - 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc6, 0x3242ffff, 0x0a00058b, - 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a, 0x10400066, 0x00000000, - 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021, 0x0e000621, 0x8e101bb8, - 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c, 0x24420001, 0x0a000593, - 0xae62082c, 0x9608000a, 0x31020040, 0x10400004, 0x2407180c, 0x8e02000c, - 0x2407188c, 0xacc20018, 0x3c020800, 0x00511021, 0x8c421bc0, 0x3c030800, - 0x00711821, 0x8c631bc4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014, - 0x8e63fff4, 0x96020008, 0x00432023, 0x3242ffff, 0x3083ffff, 0x00431021, - 0x02c2102a, 0x10400003, 0x00802821, 0x97a9001e, 0x01322823, 0x8e620000, - 0x30a4ffff, 0x00441021, 0xae620000, 0xa4c5000e, 0x8e020000, 0xacc20000, - 0x8e020004, 0x8e63fff4, 0x00431021, 0xacc20004, 0x8e63fff4, 0x96020008, - 0x00641821, 0x0062102a, 0x14400006, 0x02459021, 0x8e62fff0, 0xae60fff4, - 0x24420001, 0x0a00056e, 0xae62fff0, 0xae63fff4, 0xacc00008, 0x3242ffff, - 0x10560003, 0x31020004, 0x10400006, 0x24020305, 0x31020080, 0x54400001, - 0x34e70010, 0x34e70020, 0x24020905, 0xa4c2000c, 0x8ee30000, 0x8ee20004, - 0x14620007, 0x3c02b49a, 0x8ee20860, 0x54400001, 0x34e70400, 0x3c024b65, - 0x0a000585, 0x34427654, 0x344289ab, 0xacc2001c, 0x30e2ffff, 0xacc20010, - 0x0e00059f, 0x00c02021, 0x3242ffff, 0x0056102b, 0x1440ff9c, 0x00000000, - 0x8e620000, 0x8e63fffc, 0x0043102a, 0x1440ff4a, 0x00000000, 0x8fbf0044, - 0x8fbe0040, 0x8fb7003c, 0x8fb60038, 0x8fb50034, 0x8fb40030, 0x8fb3002c, - 0x8fb20028, 0x8fb10024, 0x8fb00020, 0x03e00008, 0x27bd0048, 0x27bdffe8, - 0xafbf0014, 0xafb00010, 0x8f624450, 0x8f634410, 0x0a0005ae, 0x00808021, - 0x8f626820, 0x30422000, 0x10400003, 0x00000000, 0x0e0001ef, 0x00002021, - 0x8f624450, 0x8f634410, 0x3042ffff, 0x0043102b, 0x1440fff5, 0x00000000, - 0x8f630c14, 0x3063000f, 0x2c620002, 0x1440000b, 0x00000000, 0x8f630c14, - 0x3c020800, 0x8c421b30, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b30, - 0x2c620002, 0x1040fff7, 0x00000000, 0xaf705c18, 0x8f625c10, 0x30420002, - 0x10400009, 0x00000000, 0x8f626820, 0x30422000, 0x1040fff8, 0x00000000, - 0x0e0001ef, 0x00002021, 0x0a0005c1, 0x00000000, 0x8fbf0014, 0x8fb00010, - 0x03e00008, 0x27bd0018, 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, - 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, - 0x8f634000, 0x24020b50, 0x3c010800, 0xac221b44, 0x24020b78, 0x3c010800, - 0xac221b54, 0x34630002, 0xaf634000, 0x0e000601, 0x00808021, 0x3c010800, - 0xa0221b58, 0x304200ff, 0x24030002, 0x14430005, 0x00000000, 0x3c020800, - 0x8c421b44, 0x0a0005f4, 0xac5000c0, 0x3c020800, 0x8c421b44, 0xac5000bc, - 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010800, 0xac221b4c, 0x3c010800, - 0xac231b5c, 0x3c010800, 0xac241b48, 0x8fbf0014, 0x8fb00010, 0x03e00008, - 0x27bd0018, 0x3c040800, 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, - 0xac830000, 0x8cc20000, 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, - 0xac830000, 0x8cc20000, 0x50430001, 0x24050001, 0x3c020800, 0xac470000, - 0x03e00008, 0x00a01021, 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, - 0x8f62680c, 0x1043fffe, 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, - 0x00000000, 0x03e00008, 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b4c, - 0x00031c02, 0x0043102b, 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b5c, - 0x8f624450, 0x00021c02, 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, - 0x8f624444, 0x00431024, 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, - 0x3042ffff, 0x3082ffff, 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, - 0x0a000644, 0x2402ffff, 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, - 0x1440fffc, 0x00001021, 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, - 0x8c631b48, 0x0a00064d, 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, - 0x1440fffc, 0x00000000, 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, - 0x3c040800, 0x24841ae0, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, - 0x0e000678, 0xafa00014, 0x0a00065c, 0x00000000, 0x8fbf0018, 0x03e00008, - 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x3c020800, 0x34423000, - 0x3c030800, 0x34633000, 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b64, - 0x24020040, 0x3c010800, 0xac221b68, 0x3c010800, 0xac201b60, 0xac600000, - 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, - 0x00804821, 0x8faa0010, 0x3c020800, 0x8c421b60, 0x3c040800, 0x8c841b68, - 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010800, 0xac231b60, 0x14400003, - 0x00004021, 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x3c030800, - 0x8c631b64, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001, - 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b60, - 0x3c030800, 0x8c631b64, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, - 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, - 0x00000000, 0x00000000, + 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, 0x00000000, 0x3c020800, + 0x944223ec, 0x00c23021, 0x3122ffff, 0x00c23021, 0x00061c02, 0x30c2ffff, + 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, + 0xadc00014, 0x0a00049d, 0xadc00000, 0x8dc70010, 0x00e04021, 0x11400007, + 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, 0x00433021, 0x00061402, + 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, 0x946323d4, 0x3102ffff, + 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, 0x30c2ffff, 0x00623021, + 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, 0x3102ffff, + 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, 0x8c4223f4, 0x10400005, + 0x2de205eb, 0x14400002, 0x25e2fff2, 0x34028870, 0xa5c20034, 0x3c030800, + 0x246323e8, 0x8c620000, 0x24420001, 0xac620000, 0x3c040800, 0x8c8423e4, + 0x3c020800, 0x8c421bc0, 0x3303ffff, 0x00832021, 0x00431821, 0x0062102b, + 0x3c010800, 0xac2423e4, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223e4, + 0x3c010800, 0xac231bc0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800, + 0x24a51b96, 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034, + 0xafb40030, 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000, + 0x3c020800, 0x944223d0, 0x3c030800, 0x8c631bb0, 0x3c040800, 0x8c841bac, + 0x01221023, 0x0064182a, 0xa7a9001e, 0x106000be, 0xa7a20016, 0x24be0022, + 0x97b6001e, 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000, + 0x8fc2fff8, 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000b0, + 0x00000000, 0x97d50818, 0x32a2ffff, 0x104000a3, 0x00009021, 0x0040a021, + 0x00008821, 0x0e000625, 0x00000000, 0x00403021, 0x14c00007, 0x00000000, + 0x3c020800, 0x8c4223dc, 0x24420001, 0x3c010800, 0x0a000596, 0xac2223dc, + 0x3c100800, 0x02118021, 0x8e101bc8, 0x9608000a, 0x31020040, 0x10400005, + 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x31020080, + 0x54400001, 0x34e70010, 0x3c020800, 0x00511021, 0x8c421bd0, 0x3c030800, + 0x00711821, 0x8c631bd4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014, + 0x96040008, 0x3242ffff, 0x00821021, 0x0282102a, 0x14400002, 0x02b22823, + 0x00802821, 0x8e020000, 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021, + 0x26310010, 0xac820004, 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010, + 0x24020305, 0x0e0005a2, 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc5, + 0x3242ffff, 0x0a00058e, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a, + 0x10400067, 0x00000000, 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021, + 0x0e000625, 0x8e101bc8, 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c, + 0x24420001, 0x0a000596, 0xae62082c, 0x9608000a, 0x31020040, 0x10400005, + 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x3c020800, + 0x00511021, 0x8c421bd0, 0x3c030800, 0x00711821, 0x8c631bd4, 0x00021500, + 0x00031c00, 0x00431025, 0xacc20014, 0x8e63fff4, 0x96020008, 0x00432023, + 0x3242ffff, 0x3083ffff, 0x00431021, 0x02c2102a, 0x10400003, 0x00802821, + 0x97a9001e, 0x01322823, 0x8e620000, 0x30a4ffff, 0x00441021, 0xae620000, + 0xa4c5000e, 0x8e020000, 0xacc20000, 0x8e020004, 0x8e63fff4, 0x00431021, + 0xacc20004, 0x8e63fff4, 0x96020008, 0x00641821, 0x0062102a, 0x14400006, + 0x02459021, 0x8e62fff0, 0xae60fff4, 0x24420001, 0x0a000571, 0xae62fff0, + 0xae63fff4, 0xacc00008, 0x3242ffff, 0x10560003, 0x31020004, 0x10400006, + 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x34e70020, 0x24020905, + 0xa4c2000c, 0x8ee30000, 0x8ee20004, 0x14620007, 0x3c02b49a, 0x8ee20860, + 0x54400001, 0x34e70400, 0x3c024b65, 0x0a000588, 0x34427654, 0x344289ab, + 0xacc2001c, 0x30e2ffff, 0xacc20010, 0x0e0005a2, 0x00c02021, 0x3242ffff, + 0x0056102b, 0x1440ff9b, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a, + 0x1440ff48, 0x00000000, 0x8fbf0044, 0x8fbe0040, 0x8fb7003c, 0x8fb60038, + 0x8fb50034, 0x8fb40030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020, + 0x03e00008, 0x27bd0048, 0x27bdffe8, 0xafbf0014, 0xafb00010, 0x8f624450, + 0x8f634410, 0x0a0005b1, 0x00808021, 0x8f626820, 0x30422000, 0x10400003, + 0x00000000, 0x0e0001f0, 0x00002021, 0x8f624450, 0x8f634410, 0x3042ffff, + 0x0043102b, 0x1440fff5, 0x00000000, 0x8f630c14, 0x3063000f, 0x2c620002, + 0x1440000b, 0x00000000, 0x8f630c14, 0x3c020800, 0x8c421b40, 0x3063000f, + 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x00000000, + 0xaf705c18, 0x8f625c10, 0x30420002, 0x10400009, 0x00000000, 0x8f626820, + 0x30422000, 0x1040fff8, 0x00000000, 0x0e0001f0, 0x00002021, 0x0a0005c4, + 0x00000000, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, + 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, + 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, + 0x3c010800, 0xac221b54, 0x24020b78, 0x3c010800, 0xac221b64, 0x34630002, + 0xaf634000, 0x0e000605, 0x00808021, 0x3c010800, 0xa0221b68, 0x304200ff, + 0x24030002, 0x14430005, 0x00000000, 0x3c020800, 0x8c421b54, 0x0a0005f8, + 0xac5000c0, 0x3c020800, 0x8c421b54, 0xac5000bc, 0x8f624434, 0x8f634438, + 0x8f644410, 0x3c010800, 0xac221b5c, 0x3c010800, 0xac231b6c, 0x3c010800, + 0xac241b58, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x3c040800, + 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, 0xac830000, 0x8cc20000, + 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, 0xac830000, 0x8cc20000, + 0x50430001, 0x24050001, 0x3c020800, 0xac470000, 0x03e00008, 0x00a01021, + 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, + 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, + 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b5c, 0x00031c02, 0x0043102b, + 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b6c, 0x8f624450, 0x00021c02, + 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, + 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, + 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0a000648, 0x2402ffff, + 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, + 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, 0x8c631b58, 0x0a000651, + 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, + 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040800, 0x24841af0, + 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, + 0x0a000660, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, + 0x00000000, 0x00000000, 0x3c020800, 0x34423000, 0x3c030800, 0x34633000, + 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b74, 0x24020040, 0x3c010800, + 0xac221b78, 0x3c010800, 0xac201b70, 0xac600000, 0x24630004, 0x0083102b, + 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010, + 0x3c020800, 0x8c421b70, 0x3c040800, 0x8c841b78, 0x8fab0014, 0x24430001, + 0x0044102b, 0x3c010800, 0xac231b70, 0x14400003, 0x00004021, 0x3c010800, + 0xac201b70, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, 0x91240000, + 0x00021140, 0x00431021, 0x00481021, 0x25080001, 0xa0440000, 0x29020008, + 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, + 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, 0xac45000c, 0xac460010, + 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000, }; u32 tg3TsoFwRodata[] = { @@ -4257,201 +4433,200 @@ 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x496e0000, 0x73746b6f, 0x66662a2a, 0x00000000, 0x53774576, 0x656e7430, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66617461, 0x6c457272, 0x00000000, 0x00000000, + 0x00000000, }; -#if 0 /* All zeros, don't eat up space with it. */ u32 tg3TsoFwData[] = { + 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000 + 0x00000000, }; -#endif /* 5705 needs a special version of the TSO firmware. */ #define TG3_TSO5_FW_RELEASE_MAJOR 0x1 -#define TG3_TSO5_FW_RELASE_MINOR 0x1 +#define TG3_TSO5_FW_RELASE_MINOR 0x2 #define TG3_TSO5_FW_RELEASE_FIX 0x0 #define TG3_TSO5_FW_START_ADDR 0x00010000 #define TG3_TSO5_FW_TEXT_ADDR 0x00010000 -#define TG3_TSO5_FW_TEXT_LEN 0xeb0 -#define TG3_TSO5_FW_RODATA_ADDR 0x00010eb0 +#define TG3_TSO5_FW_TEXT_LEN 0xe90 +#define TG3_TSO5_FW_RODATA_ADDR 0x00010e90 #define TG3_TSO5_FW_RODATA_LEN 0x50 -#define TG3_TSO5_FW_DATA_ADDR 0x00010f20 +#define TG3_TSO5_FW_DATA_ADDR 0x00010f00 #define TG3_TSO5_FW_DATA_LEN 0x20 -#define TG3_TSO5_FW_SBSS_ADDR 0x00010f40 +#define TG3_TSO5_FW_SBSS_ADDR 0x00010f20 #define TG3_TSO5_FW_SBSS_LEN 0x28 -#define TG3_TSO5_FW_BSS_ADDR 0x00010f70 +#define TG3_TSO5_FW_BSS_ADDR 0x00010f50 #define TG3_TSO5_FW_BSS_LEN 0x88 -static u32 tg3Tso5FwText[] = { - 0x0c004003, 0x00000000, 0x00010f30, 0x00000000, 0x10000003, 0x00000000, +static u32 tg3Tso5FwText[(TG3_TSO5_FW_TEXT_LEN / 4) + 1] = { + 0x0c004003, 0x00000000, 0x00010f04, 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0001, 0x37bde000, 0x03a0f021, 0x3c100001, 0x26100000, 0x0c004010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe, - 0xafbf0018, 0x0c0042f0, 0x34840002, 0x0c00436c, 0x00000000, 0x3c030001, - 0x90630f54, 0x24020002, 0x3c040001, 0x24840ebc, 0x14620003, 0x24050001, - 0x3c040001, 0x24840eb0, 0x24060001, 0x00003821, 0xafa00010, 0x0c004380, + 0xafbf0018, 0x0c0042e8, 0x34840002, 0x0c004364, 0x00000000, 0x3c030001, + 0x90630f34, 0x24020002, 0x3c040001, 0x24840e9c, 0x14620003, 0x24050001, + 0x3c040001, 0x24840e90, 0x24060002, 0x00003821, 0xafa00010, 0x0c004378, 0xafa00014, 0x0c00402c, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014, - 0x0c0042d3, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400, + 0x0c0042d4, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400, 0x10400007, 0x00000000, 0x8f641008, 0x00921024, 0x14400003, 0x00000000, - 0x0c004064, 0x00000000, 0x3c020001, 0x90420f76, 0x10510003, 0x32020200, + 0x0c004064, 0x00000000, 0x3c020001, 0x90420f56, 0x10510003, 0x32020200, 0x1040fff1, 0x00000000, 0x0c0041b4, 0x00000000, 0x08004034, 0x00000000, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, - 0x27bdffe0, 0x3c040001, 0x24840ed0, 0x00002821, 0x00003021, 0x00003821, - 0xafbf0018, 0xafa00010, 0x0c004380, 0xafa00014, 0x0000d021, 0x24020130, - 0xaf625000, 0x3c010001, 0xa4200f70, 0x3c010001, 0xa0200f77, 0x8fbf0018, - 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f80, + 0x27bdffe0, 0x3c040001, 0x24840eb0, 0x00002821, 0x00003021, 0x00003821, + 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, + 0xaf625000, 0x3c010001, 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, + 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f60, 0x90620000, 0x27bdfff0, 0x14400003, 0x0080c021, 0x08004073, 0x00004821, 0x3c022000, 0x03021024, 0x10400003, 0x24090002, 0x08004073, 0xa0600000, 0x24090001, 0x00181040, 0x30431f80, 0x346f8008, 0x1520004b, 0x25eb0028, - 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f9a, 0x00041402, - 0xa0a20000, 0x3c010001, 0xa0240f9b, 0x3c020001, 0x00431021, 0x94428014, - 0x3c010001, 0xa0220f9c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff, - 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f80, 0x0124102b, + 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f7a, 0x00041402, + 0xa0a20000, 0x3c010001, 0xa0240f7b, 0x3c020001, 0x00431021, 0x94428014, + 0x3c010001, 0xa0220f7c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff, + 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f60, 0x0124102b, 0x1040000c, 0x00003821, 0x24a6000e, 0x01602821, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000, 0xacc30004, 0x00e4102b, 0x1440fff8, - 0x24c60008, 0x00003821, 0x3c080001, 0x25080f9b, 0x91060000, 0x3c020001, - 0x90420f9c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021, + 0x24c60008, 0x00003821, 0x3c080001, 0x25080f7b, 0x91060000, 0x3c020001, + 0x90420f7c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021, 0x00021043, 0x1840000c, 0x00002021, 0x91020001, 0x00461023, 0x00021fc2, 0x00431021, 0x00021843, 0x94a20000, 0x24e70001, 0x00822021, 0x00e3102a, 0x1440fffb, 0x24a50002, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021, 0x3c02ffff, 0x01821024, 0x3083ffff, 0x00431025, 0x3c010001, - 0x080040fa, 0xac220fa0, 0x3c050001, 0x24a50f9c, 0x90a20000, 0x3c0c0001, + 0x080040fa, 0xac220f80, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x000220c2, 0x1080000e, 0x00003821, 0x01603021, 0x24a5000c, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000, - 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f9c, + 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x30430007, 0x24020004, 0x10620011, 0x28620005, 0x10400005, 0x24020002, 0x10620008, 0x000710c0, 0x080040fa, 0x00000000, 0x24020006, 0x1062000e, 0x000710c0, 0x080040fa, 0x00000000, 0x00a21821, 0x9463000c, 0x004b1021, 0x080040fa, 0xa4430000, 0x000710c0, 0x00a21821, 0x8c63000c, 0x004b1021, 0x080040fa, 0xac430000, 0x00a21821, 0x8c63000c, 0x004b2021, 0x00a21021, 0xac830000, 0x94420010, 0xa4820004, 0x95e70006, 0x3c020001, - 0x90420f9c, 0x3c030001, 0x90630f9a, 0x00e2c823, 0x3c020001, 0x90420f9b, + 0x90420f7c, 0x3c030001, 0x90630f7a, 0x00e2c823, 0x3c020001, 0x90420f7b, 0x24630028, 0x01e34021, 0x24420028, 0x15200012, 0x01e23021, 0x94c2000c, - 0x3c010001, 0xa4220f98, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f96, - 0x3c010001, 0xa4200f92, 0x00021400, 0x00431025, 0x3c010001, 0xac220f8c, - 0x95020004, 0x3c010001, 0x08004124, 0xa4220f90, 0x3c020001, 0x94420f90, - 0x3c030001, 0x94630f92, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f8c, - 0xa4c20004, 0x3c020001, 0x8c420f8c, 0xa4c20006, 0x3c040001, 0x94840f92, - 0x3c020001, 0x94420f90, 0x3c0a0001, 0x954a0f96, 0x00441821, 0x3063ffff, - 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f98, - 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f98, + 0x3c010001, 0xa4220f78, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f76, + 0x3c010001, 0xa4200f72, 0x00021400, 0x00431025, 0x3c010001, 0xac220f6c, + 0x95020004, 0x3c010001, 0x08004124, 0xa4220f70, 0x3c020001, 0x94420f70, + 0x3c030001, 0x94630f72, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f6c, + 0xa4c20004, 0x3c020001, 0x8c420f6c, 0xa4c20006, 0x3c040001, 0x94840f72, + 0x3c020001, 0x94420f70, 0x3c0a0001, 0x954a0f76, 0x00441821, 0x3063ffff, + 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f78, + 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f78, 0x30420009, 0x01425023, 0x24020001, 0x1122001b, 0x29220002, 0x50400005, 0x24020002, 0x11200007, 0x31a2ffff, 0x08004197, 0x00000000, 0x1122001d, - 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0fa0, 0x10800005, + 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0f80, 0x10800005, 0x01806821, 0x01c42021, 0x00041c02, 0x3082ffff, 0x00627021, 0x000e1027, - 0xa502000a, 0x3c030001, 0x90630f9b, 0x31a2ffff, 0x00e21021, 0x0800418d, - 0x00432023, 0x3c020001, 0x94420fa0, 0x00442021, 0x00041c02, 0x3082ffff, + 0xa502000a, 0x3c030001, 0x90630f7b, 0x31a2ffff, 0x00e21021, 0x0800418d, + 0x00432023, 0x3c020001, 0x94420f80, 0x00442021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00807021, 0x00041027, 0x08004185, 0xa502000a, 0x3c050001, - 0x24a50f9a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000, - 0x00e21023, 0xa5020002, 0x3c030001, 0x94630fa0, 0x3c020001, 0x94420f7a, + 0x24a50f7a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000, + 0x00e21023, 0xa5020002, 0x3c030001, 0x94630f80, 0x3c020001, 0x94420f5a, 0x30e5ffff, 0x00641821, 0x00451023, 0x00622023, 0x00041c02, 0x3082ffff, - 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f9c, 0x24620001, + 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f7c, 0x24620001, 0x14a20005, 0x00807021, 0x01631021, 0x90420000, 0x08004185, 0x00026200, 0x24620002, 0x14a20003, 0x306200fe, 0x004b1021, 0x944c0000, 0x3c020001, - 0x94420fa2, 0x3183ffff, 0x3c040001, 0x90840f9b, 0x00431021, 0x00e21021, + 0x94420f82, 0x3183ffff, 0x3c040001, 0x90840f7b, 0x00431021, 0x00e21021, 0x00442023, 0x008a2021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021, 0x00806821, 0x00041027, 0xa4c20010, 0x31a2ffff, 0x000e1c00, - 0x00431025, 0x3c040001, 0x24840f92, 0xade20010, 0x94820000, 0x3c050001, - 0x94a50f96, 0x3c030001, 0x8c630f8c, 0x24420001, 0x00b92821, 0xa4820000, - 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f96, 0x10600003, - 0x24a2ffff, 0x3c010001, 0xa4220f96, 0x3c024000, 0x03021025, 0x3c010001, - 0xac240f8c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f76, + 0x00431025, 0x3c040001, 0x24840f72, 0xade20010, 0x94820000, 0x3c050001, + 0x94a50f76, 0x3c030001, 0x8c630f6c, 0x24420001, 0x00b92821, 0xa4820000, + 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f76, 0x10600003, + 0x24a2ffff, 0x3c010001, 0xa4220f76, 0x3c024000, 0x03021025, 0x3c010001, + 0xac240f6c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f56, 0x27bdffe8, 0x24020001, 0xafbf0014, 0x10620026, 0xafb00010, 0x8f620cf4, - 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f84, + 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f64, 0x8c434008, 0x24444000, 0x8c5c4004, 0x30620040, 0x14400002, 0x24020088, - 0x24020008, 0x3c010001, 0xa4220f88, 0x30620004, 0x10400005, 0x24020001, - 0x3c010001, 0xa0220f77, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f77, - 0x00031402, 0x3c010001, 0xa4220f74, 0x9483000c, 0x24020001, 0x3c010001, - 0xa4200f70, 0x3c010001, 0xa0220f76, 0x3c010001, 0xa4230f82, 0x24020001, + 0x24020008, 0x3c010001, 0xa4220f68, 0x30620004, 0x10400005, 0x24020001, + 0x3c010001, 0xa0220f57, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f57, + 0x00031402, 0x3c010001, 0xa4220f54, 0x9483000c, 0x24020001, 0x3c010001, + 0xa4200f50, 0x3c010001, 0xa0220f56, 0x3c010001, 0xa4230f62, 0x24020001, 0x1342001e, 0x00000000, 0x13400005, 0x24020003, 0x13420067, 0x00000000, - 0x080042cf, 0x00000000, 0x3c020001, 0x94420f82, 0x241a0001, 0x3c010001, - 0xa4200f7e, 0x3c010001, 0xa4200f72, 0x304407ff, 0x00021bc2, 0x00031823, + 0x080042cf, 0x00000000, 0x3c020001, 0x94420f62, 0x241a0001, 0x3c010001, + 0xa4200f5e, 0x3c010001, 0xa4200f52, 0x304407ff, 0x00021bc2, 0x00031823, 0x3063003e, 0x34630036, 0x00021242, 0x3042003c, 0x00621821, 0x3c010001, - 0xa4240f78, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f7a, 0x3c010001, - 0xa4230f7c, 0x3c060001, 0x24c60f72, 0x94c50000, 0x94c30002, 0x3c040001, - 0x94840f7a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021, - 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f76, 0x8f641008, + 0xa4240f58, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f5a, 0x3c010001, + 0xa4230f5c, 0x3c060001, 0x24c60f52, 0x94c50000, 0x94c30002, 0x3c040001, + 0x94840f5a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021, + 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x104000b7, 0x00000000, 0x0800420f, 0x00000000, 0x3c030001, - 0x94630f70, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001, - 0xa4230f70, 0xaf620ce8, 0x3c020001, 0x94420f88, 0x34420024, 0xaf620cec, - 0x94c30002, 0x3c020001, 0x94420f70, 0x14620012, 0x3c028000, 0x3c108000, - 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f76, 0x8f641008, 0x00901024, + 0x94630f50, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001, + 0xa4230f50, 0xaf620ce8, 0x3c020001, 0x94420f68, 0x34420024, 0xaf620cec, + 0x94c30002, 0x3c020001, 0x94420f50, 0x14620012, 0x3c028000, 0x3c108000, + 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, 0xaf620cf4, 0x3c108000, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, - 0x3c070001, 0x24e70f70, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001, - 0x8c420f84, 0xaf620ce4, 0x3c050001, 0x94a50f74, 0x94e30000, 0x3c040001, - 0x94840f78, 0x3c020001, 0x94420f7e, 0x00a32823, 0x00822023, 0x30a6ffff, - 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f7c, - 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f74, + 0x3c070001, 0x24e70f50, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001, + 0x8c420f64, 0xaf620ce4, 0x3c050001, 0x94a50f54, 0x94e30000, 0x3c040001, + 0x94840f58, 0x3c020001, 0x94420f5e, 0x00a32823, 0x00822023, 0x30a6ffff, + 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f5c, + 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f54, 0x00441021, 0xa4e20000, 0x3042ffff, 0x14430021, 0x3c020008, 0x3c020001, - 0x90420f77, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f88, 0x34630624, - 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f88, 0x3c030008, 0x34630624, + 0x90420f57, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, + 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f68, 0x3c030008, 0x34630624, 0x00431025, 0xaf620cec, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001, - 0xa0200f76, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, + 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x10400015, 0x00000000, 0x08004283, - 0x00000000, 0x3c030001, 0x94630f88, 0x34420624, 0x3c108000, 0x00621825, + 0x00000000, 0x3c030001, 0x94630f68, 0x34420624, 0x3c108000, 0x00621825, 0x3c028000, 0xaf630cec, 0xaf620cf4, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, - 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f7e, 0x3c020001, 0x94420f7c, - 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f77, 0x10400009, - 0x3c03000c, 0x3c020001, 0x94420f88, 0x34630624, 0x0000d021, 0x00431025, - 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f88, 0x3c030008, - 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f7e, 0x00451021, - 0x3c010001, 0xa4220f7e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001, - 0xa0200f76, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, + 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f5e, 0x3c020001, 0x94420f5c, + 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f57, 0x10400009, + 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, 0x0000d021, 0x00431025, + 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f68, 0x3c030008, + 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f5e, 0x00451021, + 0x3c010001, 0xa4220f5e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001, + 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x8fbf0014, - 0x8fb00010, 0x03e00008, 0x27bd0018, 0x27bdffe0, 0x3c040001, 0x24840ee0, - 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004380, - 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001, 0xa4200f70, - 0x3c010001, 0xa0200f77, 0x8f636804, 0x3c020001, 0x3442e000, 0x00621824, - 0x3c020001, 0x14620003, 0x00000000, 0x080042eb, 0x00000000, 0x8fbf0018, - 0x03e00008, 0x27bd0020, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, - 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, - 0x3c010001, 0xac220f40, 0x24020b78, 0x3c010001, 0xac220f50, 0x34630002, - 0xaf634000, 0x0c00431d, 0x00808021, 0x3c010001, 0xa0220f54, 0x304200ff, - 0x24030002, 0x14430005, 0x00000000, 0x3c020001, 0x8c420f40, 0x08004310, - 0xac5000c0, 0x3c020001, 0x8c420f40, 0xac5000bc, 0x8f624434, 0x8f634438, - 0x8f644410, 0x3c010001, 0xac220f48, 0x3c010001, 0xac230f58, 0x3c010001, - 0xac240f44, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, - 0x24020001, 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, - 0x1043fffe, 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, - 0x03e00008, 0x27bd0008, 0x8f634450, 0x3c020001, 0x8c420f48, 0x00031c02, - 0x0043102b, 0x14400008, 0x3c038000, 0x3c040001, 0x8c840f58, 0x8f624450, - 0x00021c02, 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, - 0x00431024, 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, - 0x3082ffff, 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0800434f, - 0x2402ffff, 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, - 0x00001021, 0x03e00008, 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f44, - 0x08004358, 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, - 0x00000000, 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, - 0x24840ef0, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004380, - 0xafa00014, 0x08004367, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, - 0x3c020001, 0x3442d600, 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, - 0x3c010001, 0xac220f60, 0x24020040, 0x3c010001, 0xac220f64, 0x3c010001, - 0xac200f5c, 0xac600000, 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, - 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f5c, - 0x3c040001, 0x8c840f64, 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, - 0xac230f5c, 0x14400003, 0x00004021, 0x3c010001, 0xac200f5c, 0x3c020001, - 0x8c420f5c, 0x3c030001, 0x8c630f60, 0x91240000, 0x00021140, 0x00431021, - 0x00481021, 0x25080001, 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, - 0x3c020001, 0x8c420f5c, 0x3c030001, 0x8c630f60, 0x8f64680c, 0x00021140, - 0x00431021, 0xac440008, 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, - 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000, + 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, 0x27bdffe0, 0x3c040001, + 0x24840ec0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, + 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001, + 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, 0x03e00008, 0x27bd0020, + 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804, + 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, 0x3c010001, 0xac220f20, + 0x24020b78, 0x3c010001, 0xac220f30, 0x34630002, 0xaf634000, 0x0c004315, + 0x00808021, 0x3c010001, 0xa0220f34, 0x304200ff, 0x24030002, 0x14430005, + 0x00000000, 0x3c020001, 0x8c420f20, 0x08004308, 0xac5000c0, 0x3c020001, + 0x8c420f20, 0xac5000bc, 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010001, + 0xac220f28, 0x3c010001, 0xac230f38, 0x3c010001, 0xac240f24, 0x8fbf0014, + 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, 0x24020001, 0x27bdfff8, + 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, 0x00000000, + 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, 0x27bd0008, + 0x8f634450, 0x3c020001, 0x8c420f28, 0x00031c02, 0x0043102b, 0x14400008, + 0x3c038000, 0x3c040001, 0x8c840f38, 0x8f624450, 0x00021c02, 0x0083102b, + 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, 0x1440fffd, + 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, 0x2442e000, + 0x2c422001, 0x14400003, 0x3c024000, 0x08004347, 0x2402ffff, 0x00822025, + 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, 0x03e00008, + 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f24, 0x08004350, 0x3042ffff, + 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, 0x03e00008, + 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, 0x24840ed0, 0x00003021, + 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0800435f, + 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x3c020001, 0x3442d600, + 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, 0x3c010001, 0xac220f40, + 0x24020040, 0x3c010001, 0xac220f44, 0x3c010001, 0xac200f3c, 0xac600000, + 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, + 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f3c, 0x3c040001, 0x8c840f44, + 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, 0xac230f3c, 0x14400003, + 0x00004021, 0x3c010001, 0xac200f3c, 0x3c020001, 0x8c420f3c, 0x3c030001, + 0x8c630f40, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001, + 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020001, 0x8c420f3c, + 0x3c030001, 0x8c630f40, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, + 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, + 0x00000000, 0x00000000, 0x00000000, }; -u32 tg3Tso5FwRodata[] = { +u32 tg3Tso5FwRodata[(TG3_TSO5_FW_RODATA_LEN / 4) + 1] = { 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000, 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x66617461, 0x6c457272, - 0x00000000, 0x00000000, 0x00000000 + 0x00000000, 0x00000000, 0x00000000, }; -u32 tg3Tso5FwData[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x73746b6f, - 0x66666c64, 0x5f76312e, 0x312e3000, 0x00000000 +u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = { + 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, }; /* tp->lock is held. */ @@ -4461,6 +4636,9 @@ unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; int err, i; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + return 0; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { info.text_base = TG3_TSO5_FW_TEXT_ADDR; info.text_len = TG3_TSO5_FW_TEXT_LEN; @@ -4487,7 +4665,7 @@ info.rodata_data = &tg3TsoFwRodata[0]; info.data_base = TG3_TSO_FW_DATA_ADDR; info.data_len = TG3_TSO_FW_DATA_LEN; - info.data_data = NULL; + info.data_data = &tg3TsoFwData[0]; cpu_base = TX_CPU_BASE; cpu_scratch_base = TX_CPU_SCRATCH_BASE; cpu_scratch_size = TX_CPU_SCRATCH_SIZE; @@ -4608,6 +4786,8 @@ tg3_stop_fw(tp); + tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); + if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) { err = tg3_abort_hw(tp); if (err) @@ -4618,18 +4798,15 @@ if (err) return err; - if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) - tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, - DRV_STATE_START); - else - tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, - DRV_STATE_SUSPEND); + tg3_write_sig_legacy(tp, RESET_KIND_INIT); /* This works around an issue with Athlon chipsets on * B3 tigon3 silicon. This bit has no effect on any - * other revision. + * other revision. But do not set this on PCI Express + * chips. */ - tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; + if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) + tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && @@ -4682,7 +4859,9 @@ tw32(GRC_MISC_CFG, val); /* Initialize MBUF/DESC pool. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + /* Do nothing. */ + } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); @@ -4740,17 +4919,6 @@ return -ENODEV; } - /* Clear statistics/status block in chip, and status block in ram. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { - for (i = NIC_SRAM_STATS_BLK; - i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; - i += sizeof(u32)) { - tg3_write_mem(tp, i, 0); - udelay(40); - } - } - memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE); - /* Setup replenish threshold. */ tw32(RCVBDI_STD_THRESH, tp->rx_pending / 8); @@ -4781,7 +4949,8 @@ /* Don't even try to program the JUMBO/MINI buffer descriptor * configs on 5705. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT); } else { @@ -4810,10 +4979,11 @@ } - /* There is only one send ring on 5705, no need to explicitly + /* There is only one send ring on 5705/5750, no need to explicitly * disable the others. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { /* Clear out send RCB ring in SRAM. */ for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE) tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS, @@ -4838,10 +5008,11 @@ NIC_SRAM_TX_BUFFER_DESC); } - /* There is only one receive return ring on 5705, no need to explicitly - * disable the others. + /* There is only one receive return ring on 5705/5750, no need + * to explicitly disable the others. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK; i += TG3_BDINFO_SIZE) { tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS, @@ -4895,17 +5066,24 @@ RDMAC_MODE_LNGREAD_ENAB); if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE) rdmac_mode |= RDMAC_MODE_SPLIT_ENABLE; - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { - if (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { - if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) { - rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; - } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && - !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) { - rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; - } + if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && + tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) || + (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) { + if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE && + (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || + tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { + rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; + } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && + !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) { + rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; } } +#if TG3_TSO_SUPPORT != 0 + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + rdmac_mode |= (1 << 27); +#endif + /* Receive/send statistics. */ if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) { @@ -4933,10 +5111,11 @@ tw32(HOSTCC_TXCOL_TICKS, LOW_TXCOL_TICKS); tw32(HOSTCC_RXMAX_FRAMES, 1); tw32(HOSTCC_TXMAX_FRAMES, LOW_RXMAX_FRAMES); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { tw32(HOSTCC_RXCOAL_TICK_INT, 0); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) tw32(HOSTCC_TXCOAL_TICK_INT, 0); + } tw32(HOSTCC_RXCOAL_MAXF_INT, 1); tw32(HOSTCC_TXCOAL_MAXF_INT, 0); @@ -4946,10 +5125,11 @@ tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, ((u64) tp->status_mapping & 0xffffffff)); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { /* Status/statistics block address. See tg3_timer, * the tg3_periodic_fetch_stats call there, and - * tg3_get_stats to see how this works for 5705 chips. + * tg3_get_stats to see how this works for 5705/5750 chips. */ tw32(HOSTCC_STAT_COAL_TICKS, DEFAULT_STAT_COAL_TICKS); @@ -4965,9 +5145,19 @@ tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); + /* Clear statistics/status block in chip, and status block in ram. */ + for (i = NIC_SRAM_STATS_BLK; + i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; + i += sizeof(u32)) { + tg3_write_mem(tp, i, 0); + udelay(40); + } + memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE); + tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE; tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); @@ -4983,7 +5173,8 @@ tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0); tr32(MAILBOX_INTERRUPT_0); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) { tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); udelay(40); } @@ -4993,10 +5184,21 @@ WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | WDMAC_MODE_LNGREAD_ENAB); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && - (tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) != 0 && - !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) - val |= WDMAC_MODE_RX_ACCEL; + + if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && + tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + if ((tp->tg3_flags & TG3_FLG2_TSO_CAPABLE) && + (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || + tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { + /* nothing */ + } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && + !(tp->tg3_flags2 & TG3_FLG2_IS_5788) && + !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) { + val |= WDMAC_MODE_RX_ACCEL; + } + } + tw32_f(WDMAC_MODE, val); udelay(40); @@ -5019,13 +5221,18 @@ udelay(40); tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750) tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); tw32(RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ); tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); +#if TG3_TSO_SUPPORT != 0 + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); +#endif tw32(SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE); tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); @@ -5060,9 +5267,10 @@ tp->mi_mode = MAC_MI_MODE_BASE; tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); + + tw32(MAC_LED_CTRL, tp->led_ctrl); - tw32(MAC_LED_CTRL, 0); tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); if (tp->phy_id == PHY_ID_SERDES) { tw32_f(MAC_RX_MODE, RX_MODE_RESET); @@ -5109,7 +5317,8 @@ tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) limit = 8; else limit = 16; @@ -5151,6 +5360,8 @@ break; }; + tg3_write_sig_post_reset(tp, RESET_KIND_INIT); + if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) tg3_enable_ints(tp); @@ -5251,7 +5462,8 @@ return; } - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) tg3_periodic_fetch_stats(tp); /* This part only runs once per second. */ @@ -5977,6 +6189,72 @@ spin_unlock_irq(&tp->lock); } +static int tg3_get_eeprom_len(struct net_device *dev) +{ + return EEPROM_CHIP_SIZE; +} + +static int __devinit tg3_nvram_read_using_eeprom(struct tg3 *tp, + u32 offset, u32 *val); +static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) +{ + struct tg3 *tp = dev->priv; + int ret; + u8 *pd; + u32 i, offset, len, val, b_offset, b_count; + + offset = eeprom->offset; + len = eeprom->len; + eeprom->len = 0; + + ret = tg3_nvram_read_using_eeprom(tp, 0, &eeprom->magic); + if (ret) + return ret; + eeprom->magic = swab32(eeprom->magic); + + if (offset & 3) { + /* adjustments to start on required 4 byte boundary */ + b_offset = offset & 3; + b_count = 4 - b_offset; + if (b_count > len) { + /* i.e. offset=1 len=2 */ + b_count = len; + } + ret = tg3_nvram_read_using_eeprom(tp, offset-b_offset, &val); + if (ret) + return ret; + memcpy(data, ((char*)&val) + b_offset, b_count); + len -= b_count; + offset += b_count; + eeprom->len += b_count; + } + + /* read bytes upto the last 4 byte boundary */ + pd = &data[eeprom->len]; + for (i = 0; i < (len - (len & 3)); i += 4) { + ret = tg3_nvram_read_using_eeprom(tp, offset + i, + (u32*)(pd + i)); + if (ret) { + eeprom->len += i; + return ret; + } + } + eeprom->len += i; + + if (len & 3) { + /* read last bytes not ending on 4 byte boundary */ + pd = &data[eeprom->len]; + b_count = len & 3; + b_offset = offset + len - b_count; + ret = tg3_nvram_read_using_eeprom(tp, b_offset, &val); + if (ret) + return ret; + memcpy(pd, ((char*)&val), b_count); + eeprom->len += b_count; + } + return 0; +} + static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) { struct tg3 *tp = dev->priv; @@ -6369,6 +6647,8 @@ .set_msglevel = tg3_set_msglevel, .nway_reset = tg3_nway_reset, .get_link = ethtool_op_get_link, + .get_eeprom_len = tg3_get_eeprom_len, + .get_eeprom = tg3_get_eeprom, .get_ringparam = tg3_get_ringparam, .set_ringparam = tg3_set_ringparam, .get_pauseparam = tg3_get_pauseparam, @@ -6412,7 +6692,15 @@ if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { - u32 nvcfg1 = tr32(NVRAM_CFG1); + u32 nvcfg1; + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + u32 nvaccess = tr32(NVRAM_ACCESS); + + tw32_f(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); + } + + nvcfg1 = tr32(NVRAM_CFG1); tp->tg3_flags |= TG3_FLAG_NVRAM; if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { @@ -6423,6 +6711,11 @@ tw32(NVRAM_CFG1, nvcfg1); } + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + u32 nvaccess = tr32(NVRAM_ACCESS); + + tw32_f(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); + } } else { tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED); } @@ -6465,7 +6758,7 @@ static int __devinit tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) { - int i, saw_done_clear; + int i; if (tp->tg3_flags2 & TG3_FLG2_SUN_5704) { printk(KERN_ERR PFX "Attempt to do nvram_read on Sun 5704\n"); @@ -6483,11 +6776,12 @@ if (offset > NVRAM_ADDR_MSK) return -EINVAL; - tw32(NVRAM_SWARB, SWARB_REQ_SET1); - for (i = 0; i < 1000; i++) { - if (tr32(NVRAM_SWARB) & SWARB_GNT1) - break; - udelay(20); + tg3_nvram_lock(tp); + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + u32 nvaccess = tr32(NVRAM_ACCESS); + + tw32_f(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); } tw32(NVRAM_ADDR, offset); @@ -6495,24 +6789,26 @@ NVRAM_CMD_RD | NVRAM_CMD_GO | NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); - /* Wait for done bit to clear then set again. */ - saw_done_clear = 0; + /* Wait for done bit to clear. */ for (i = 0; i < 1000; i++) { udelay(10); - if (!saw_done_clear && - !(tr32(NVRAM_CMD) & NVRAM_CMD_DONE)) - saw_done_clear = 1; - else if (saw_done_clear && - (tr32(NVRAM_CMD) & NVRAM_CMD_DONE)) + if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { + udelay(10); + *val = swab32(tr32(NVRAM_RDDATA)); break; + } } - if (i >= 1000) { - tw32(NVRAM_SWARB, SWARB_REQ_CLR1); - return -EBUSY; + + tg3_nvram_unlock(tp); + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + u32 nvaccess = tr32(NVRAM_ACCESS); + + tw32_f(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); } - *val = swab32(tr32(NVRAM_RDDATA)); - tw32(NVRAM_SWARB, 0x20); + if (i >= 1000) + return -EBUSY; return 0; } @@ -6564,7 +6860,6 @@ { u32 eeprom_phy_id, hw_phy_id_1, hw_phy_id_2; u32 hw_phy_id, hw_phy_id_masked; - enum phy_led_mode eeprom_led_mode; u32 val; int i, eeprom_signature_found, err; @@ -6580,11 +6875,10 @@ } eeprom_phy_id = PHY_ID_INVALID; - eeprom_led_mode = led_mode_auto; eeprom_signature_found = 0; tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); if (val == NIC_SRAM_DATA_SIG_MAGIC) { - u32 nic_cfg; + u32 nic_cfg, led_cfg; tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); tp->nic_sram_data_cfg = nic_cfg; @@ -6608,28 +6902,64 @@ } } - switch (nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK) { - case NIC_SRAM_DATA_CFG_LED_TRIPLE_SPD: - eeprom_led_mode = led_mode_three_link; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { + tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &led_cfg); + led_cfg &= (NIC_SRAM_DATA_CFG_LED_MODE_MASK | + SHASTA_EXT_LED_MODE_MASK); + } else + led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; + + switch (led_cfg) { + default: + case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: + tp->led_ctrl = LED_CTRL_MODE_PHY_1; break; - case NIC_SRAM_DATA_CFG_LED_LINK_SPD: - eeprom_led_mode = led_mode_link10; + case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: + tp->led_ctrl = LED_CTRL_MODE_PHY_2; break; - default: - eeprom_led_mode = led_mode_auto; + case NIC_SRAM_DATA_CFG_LED_MODE_MAC: + tp->led_ctrl = LED_CTRL_MODE_MAC; break; + + case SHASTA_EXT_LED_SHARED: + tp->led_ctrl = LED_CTRL_MODE_SHARED; + if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && + tp->pci_chip_rev_id != CHIPREV_ID_5750_A1) + tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | + LED_CTRL_MODE_PHY_2); + break; + + case SHASTA_EXT_LED_MAC: + tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; + break; + + case SHASTA_EXT_LED_COMBO: + tp->led_ctrl = LED_CTRL_MODE_COMBO; + if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) + tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | + LED_CTRL_MODE_PHY_2); + break; + }; + if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) && + tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) + tp->led_ctrl = LED_CTRL_MODE_PHY_2; + if (((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) && (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP)) tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; - if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) + if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE; + } if (nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL) tp->tg3_flags |= TG3_FLAG_SERDES_WOL_CAP; } @@ -6678,10 +7008,7 @@ tg3_readphy(tp, MII_BMSR, &bmsr); tg3_readphy(tp, MII_BMSR, &bmsr); - if ((bmsr & BMSR_LSTATUS) && - !(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) + if (bmsr & BMSR_LSTATUS) goto skip_phy_reset; err = tg3_phy_reset(tp); @@ -6728,15 +7055,8 @@ err = tg3_init_5401phy_dsp(tp); } - /* Determine the PHY led mode. */ - if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) { - tp->led_mode = led_mode_link10; - } else { - tp->led_mode = led_mode_three_link; - if (eeprom_signature_found && - eeprom_led_mode != led_mode_auto) - tp->led_mode = eeprom_led_mode; - } + if (!eeprom_signature_found) + tp->led_ctrl = LED_CTRL_MODE_PHY_1; if (tp->phy_id == PHY_ID_SERDES) tp->link_config.advertising = @@ -6918,6 +7238,9 @@ tp->pci_hdr_type = (cacheline_sz_reg >> 16) & 0xff; tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff; + if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0) + tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && tp->pci_lat_timer < 64) { tp->pci_lat_timer = 64; @@ -6970,8 +7293,12 @@ /* Back to back register writes can cause problems on this chip, * the workaround is to read back all reg writes except those to * mailbox regs. See tg3_write_indirect_reg32(). + * + * PCI Express 5750_A0 rev chips need this workaround too. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || + ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && + tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) tp->tg3_flags |= TG3_FLAG_5701_REG_WRITE_BUG; if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) @@ -7038,8 +7365,8 @@ if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG; - /* Note: 5750 also needs this flag set to improve bit error rate. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG; /* Only 5701 and later support tagged irq status mode. @@ -7057,7 +7384,7 @@ /* Initialize MAC MI mode, polling disabled. */ tw32_f(MAC_MI_MODE, tp->mi_mode); - udelay(40); + udelay(80); /* Initialize data/descriptor byte/word swapping. */ val = tr32(GRC_MODE); @@ -7102,7 +7429,8 @@ * main memory or in the chip SRAM. */ if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) != 0 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) tp->tg3_flags |= TG3_FLAG_HOST_TXDS; grc_misc_cfg = tr32(GRC_MISC_CFG); @@ -7140,11 +7468,6 @@ if (tp->phy_id == PHY_ID_SERDES) { tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT; - - /* And override led_mode in case Dell ever makes - * a fibre board. - */ - tp->led_mode = led_mode_three_link; } else { if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) tp->tg3_flags |= TG3_FLAG_USE_MI_INTERRUPT; @@ -7161,7 +7484,7 @@ else tp->tg3_flags &= ~TG3_FLAG_USE_LINKCHG_REG; - /* The led_mode is set during tg3_phy_probe, here we might + /* The led_ctrl is set during tg3_phy_probe, here we might * have to force the link status polling mechanism based * upon subsystem IDs. */ @@ -7244,10 +7567,16 @@ return 0; #endif - if (PCI_FUNC(tp->pdev->devfn) == 0) - mac_offset = 0x7c; - else - mac_offset = 0xcc; + mac_offset = 0x7c; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && + !(tp->tg3_flags & TG3_FLG2_SUN_5704)) { + if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) + mac_offset = 0xcc; + if (tg3_nvram_lock(tp)) + tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); + else + tg3_nvram_unlock(tp); + } /* First try to get it from MAC address mailbox. */ tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); @@ -7390,50 +7719,9 @@ goto out_nofree; } - if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) == 0) { - tp->dma_rwctrl = - (0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | - (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) | - (0x7 << DMA_RWCTRL_WRITE_WATER_SHIFT) | - (0x7 << DMA_RWCTRL_READ_WATER_SHIFT) | - (0x0f << DMA_RWCTRL_MIN_DMA_SHIFT); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) - tp->dma_rwctrl &= ~(DMA_RWCTRL_MIN_DMA - << DMA_RWCTRL_MIN_DMA_SHIFT); - } else { - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) - tp->dma_rwctrl = - (0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | - (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) | - (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | - (0x7 << DMA_RWCTRL_READ_WATER_SHIFT) | - (0x00 << DMA_RWCTRL_MIN_DMA_SHIFT); - else - tp->dma_rwctrl = - (0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | - (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) | - (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | - (0x3 << DMA_RWCTRL_READ_WATER_SHIFT) | - (0x0f << DMA_RWCTRL_MIN_DMA_SHIFT); - - /* Wheee, some more chip bugs... */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { - u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); - - if (ccval == 0x6 || ccval == 0x7) - tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; - } - } + tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | + (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) - tp->dma_rwctrl &= ~(DMA_RWCTRL_MIN_DMA - << DMA_RWCTRL_MIN_DMA_SHIFT); - - /* We don't do this on x86 because it seems to hurt performace. - * It does help things on other platforms though. - */ #ifndef CONFIG_X86 { u8 byte; @@ -7445,55 +7733,63 @@ else cacheline_size = (int) byte * 4; - tp->dma_rwctrl &= ~(DMA_RWCTRL_READ_BNDRY_MASK | - DMA_RWCTRL_WRITE_BNDRY_MASK); - switch (cacheline_size) { case 16: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_16 | - DMA_RWCTRL_WRITE_BNDRY_16); - break; - case 32: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_32 | - DMA_RWCTRL_WRITE_BNDRY_32); - break; - case 64: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_64 | - DMA_RWCTRL_WRITE_BNDRY_64); - break; - case 128: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_128 | - DMA_RWCTRL_WRITE_BNDRY_128); - break; - + if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) && + !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) { + tp->dma_rwctrl |= + DMA_RWCTRL_WRITE_BNDRY_384_PCIX; + break; + } else if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) { + tp->dma_rwctrl &= + ~(DMA_RWCTRL_PCI_WRITE_CMD); + tp->dma_rwctrl |= + DMA_RWCTRL_WRITE_BNDRY_128_PCIE; + break; + } + /* fallthrough */ case 256: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_256 | - DMA_RWCTRL_WRITE_BNDRY_256); - break; - - case 512: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_512 | - DMA_RWCTRL_WRITE_BNDRY_512); - break; - - case 1024: - tp->dma_rwctrl |= - (DMA_RWCTRL_READ_BNDRY_1024 | - DMA_RWCTRL_WRITE_BNDRY_1024); - break; + if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE) && + !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) + tp->dma_rwctrl |= + DMA_RWCTRL_WRITE_BNDRY_256; + else if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) + tp->dma_rwctrl |= + DMA_RWCTRL_WRITE_BNDRY_256_PCIX; }; } #endif + if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) { + tp->dma_rwctrl |= 0x001f0000; + } else if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE)) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) + tp->dma_rwctrl |= 0x003f0000; + else + tp->dma_rwctrl |= 0x003f000f; + } else { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { + u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); + + if (ccval == 0x6 || ccval == 0x7) + tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; + + /* Set bit 23 to renable PCIX hw bug fix */ + tp->dma_rwctrl |= 0x009f0000; + } else { + tp->dma_rwctrl |= 0x001b000f; + } + } + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) + tp->dma_rwctrl &= 0xfffffff0; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { /* Remove this if it causes problems for some boards. */ @@ -7636,6 +7932,7 @@ case PHY_ID_BCM5703: return "5703"; case PHY_ID_BCM5704: return "5704"; case PHY_ID_BCM5705: return "5705"; + case PHY_ID_BCM5750: return "5750"; case PHY_ID_BCM8002: return "8002"; case PHY_ID_SERDES: return "serdes"; default: return "unknown"; @@ -7829,7 +8126,8 @@ goto err_out_iounmap; } - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) { tp->bufmgr_config.mbuf_read_dma_low_water = DEFAULT_MB_RDMA_LOW_WATER_5705; tp->bufmgr_config.mbuf_mac_rx_low_water = @@ -7842,8 +8140,8 @@ if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || tp->pci_chip_rev_id == CHIPREV_ID_5705_A0 || - (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 || - (tp->tg3_flags2 & TG3_FLG2_IS_5788)) { + ((tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750)) { tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE; } else { tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE; diff -Nru a/drivers/net/tg3.h b/drivers/net/tg3.h --- a/drivers/net/tg3.h Tue May 18 23:38:06 2004 +++ b/drivers/net/tg3.h Tue May 18 23:38:06 2004 @@ -118,12 +118,17 @@ #define CHIPREV_ID_5704_A2 0x2002 #define CHIPREV_ID_5705_A0 0x3000 #define CHIPREV_ID_5705_A1 0x3001 +#define CHIPREV_ID_5705_A2 0x3002 +#define CHIPREV_ID_5705_A3 0x3003 +#define CHIPREV_ID_5750_A0 0x4000 +#define CHIPREV_ID_5750_A1 0x4001 #define GET_ASIC_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 12) #define ASIC_REV_5700 0x07 #define ASIC_REV_5701 0x00 #define ASIC_REV_5703 0x01 #define ASIC_REV_5704 0x02 #define ASIC_REV_5705 0x03 +#define ASIC_REV_5750 0x04 #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) #define CHIPREV_5700_AX 0x70 #define CHIPREV_5700_BX 0x71 @@ -144,8 +149,11 @@ #define DMA_RWCTRL_READ_BNDRY_MASK 0x00000700 #define DMA_RWCTRL_READ_BNDRY_DISAB 0x00000000 #define DMA_RWCTRL_READ_BNDRY_16 0x00000100 +#define DMA_RWCTRL_READ_BNDRY_128_PCIX 0x00000100 #define DMA_RWCTRL_READ_BNDRY_32 0x00000200 +#define DMA_RWCTRL_READ_BNDRY_256_PCIX 0x00000200 #define DMA_RWCTRL_READ_BNDRY_64 0x00000300 +#define DMA_RWCTRL_READ_BNDRY_384_PCIX 0x00000300 #define DMA_RWCTRL_READ_BNDRY_128 0x00000400 #define DMA_RWCTRL_READ_BNDRY_256 0x00000500 #define DMA_RWCTRL_READ_BNDRY_512 0x00000600 @@ -153,8 +161,11 @@ #define DMA_RWCTRL_WRITE_BNDRY_MASK 0x00003800 #define DMA_RWCTRL_WRITE_BNDRY_DISAB 0x00000000 #define DMA_RWCTRL_WRITE_BNDRY_16 0x00000800 +#define DMA_RWCTRL_WRITE_BNDRY_128_PCIX 0x00000800 #define DMA_RWCTRL_WRITE_BNDRY_32 0x00001000 +#define DMA_RWCTRL_WRITE_BNDRY_256_PCIX 0x00001000 #define DMA_RWCTRL_WRITE_BNDRY_64 0x00001800 +#define DMA_RWCTRL_WRITE_BNDRY_384_PCIX 0x00001800 #define DMA_RWCTRL_WRITE_BNDRY_128 0x00002000 #define DMA_RWCTRL_WRITE_BNDRY_256 0x00002800 #define DMA_RWCTRL_WRITE_BNDRY_512 0x00003000 @@ -170,6 +181,9 @@ #define DMA_RWCTRL_PCI_READ_CMD_SHIFT 24 #define DMA_RWCTRL_PCI_WRITE_CMD 0xf0000000 #define DMA_RWCTRL_PCI_WRITE_CMD_SHIFT 28 +#define DMA_RWCTRL_WRITE_BNDRY_64_PCIE 0x10000000 +#define DMA_RWCTRL_WRITE_BNDRY_128_PCIE 0x30000000 +#define DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE 0x70000000 #define TG3PCI_PCISTATE 0x00000070 #define PCISTATE_FORCE_RESET 0x00000001 #define PCISTATE_INT_NOT_ACTIVE 0x00000002 @@ -202,7 +216,11 @@ #define TG3PCI_STD_RING_PROD_IDX 0x00000098 /* 64-bit */ #define TG3PCI_RCV_RET_RING_CON_IDX 0x000000a0 /* 64-bit */ #define TG3PCI_SND_PROD_IDX 0x000000a8 /* 64-bit */ -/* 0xb0 --> 0x100 unused */ +/* 0xb0 --> 0xb8 unused */ +#define TG3PCI_DUAL_MAC_CTRL 0x000000b8 +#define DUAL_MAC_CTRL_CH_MASK 0x00000003 +#define DUAL_MAC_CTRL_ID 0x00000004 +/* 0xbc --> 0x100 unused */ /* 0x100 --> 0x200 unused */ @@ -334,9 +352,12 @@ #define LED_CTRL_100MBPS_STATUS 0x00000100 #define LED_CTRL_10MBPS_STATUS 0x00000200 #define LED_CTRL_TRAFFIC_STATUS 0x00000400 -#define LED_CTRL_MAC_MODE 0x00000000 -#define LED_CTRL_PHY_MODE_1 0x00000800 -#define LED_CTRL_PHY_MODE_2 0x00001000 +#define LED_CTRL_MODE_MAC 0x00000000 +#define LED_CTRL_MODE_PHY_1 0x00000800 +#define LED_CTRL_MODE_PHY_2 0x00001000 +#define LED_CTRL_MODE_SHASTA_MAC 0x00002000 +#define LED_CTRL_MODE_SHARED 0x00004000 +#define LED_CTRL_MODE_COMBO 0x00008000 #define LED_CTRL_BLINK_RATE_MASK 0x7ff80000 #define LED_CTRL_BLINK_RATE_SHIFT 19 #define LED_CTRL_BLINK_PER_OVERRIDE 0x00080000 @@ -1332,6 +1353,9 @@ #define SWARB_REQ3 0x00008000 #define NVRAM_BUFFERED_PAGE_SIZE 264 #define NVRAM_BUFFERED_PAGE_POS 9 +#define NVRAM_ACCESS 0x00007024 +#define ACCESS_ENABLE 0x00000001 +#define ACCESS_WR_ENABLE 0x00000002 /* 0x7024 --> 0x7400 unused */ /* 0x7400 --> 0x8000 unused */ @@ -1355,11 +1379,9 @@ #define NIC_SRAM_DATA_CFG 0x00000b58 #define NIC_SRAM_DATA_CFG_LED_MODE_MASK 0x0000000c -#define NIC_SRAM_DATA_CFG_LED_MODE_UNKNOWN 0x00000000 -#define NIC_SRAM_DATA_CFG_LED_TRIPLE_SPD 0x00000004 -#define NIC_SRAM_DATA_CFG_LED_OPEN_DRAIN 0x00000004 -#define NIC_SRAM_DATA_CFG_LED_LINK_SPD 0x00000008 -#define NIC_SRAM_DATA_CFG_LED_OUTPUT 0x00000008 +#define NIC_SRAM_DATA_CFG_LED_MODE_MAC 0x00000000 +#define NIC_SRAM_DATA_CFG_LED_MODE_PHY_1 0x00000004 +#define NIC_SRAM_DATA_CFG_LED_MODE_PHY_2 0x00000008 #define NIC_SRAM_DATA_CFG_PHY_TYPE_MASK 0x00000030 #define NIC_SRAM_DATA_CFG_PHY_TYPE_UNKNOWN 0x00000000 #define NIC_SRAM_DATA_CFG_PHY_TYPE_COPPER 0x00000010 @@ -1386,7 +1408,9 @@ #define NIC_SRAM_FW_ASF_STATUS_MBOX 0x00000c00 #define NIC_SRAM_FW_DRV_STATE_MBOX 0x00000c04 #define DRV_STATE_START 0x00000001 +#define DRV_STATE_START_DONE 0x80000001 #define DRV_STATE_UNLOAD 0x00000002 +#define DRV_STATE_UNLOAD_DONE 0x80000002 #define DRV_STATE_WOL 0x00000003 #define DRV_STATE_SUSPEND 0x00000004 @@ -1395,6 +1419,14 @@ #define NIC_SRAM_MAC_ADDR_HIGH_MBOX 0x00000c14 #define NIC_SRAM_MAC_ADDR_LOW_MBOX 0x00000c18 +#define NIC_SRAM_DATA_CFG_2 0x00000d38 + +#define SHASTA_EXT_LED_MODE_MASK 0x00018000 +#define SHASTA_EXT_LED_LEGACY 0x00000000 +#define SHASTA_EXT_LED_SHARED 0x00008000 +#define SHASTA_EXT_LED_MAC 0x00010000 +#define SHASTA_EXT_LED_COMBO 0x00018000 + #define NIC_SRAM_RX_MINI_BUFFER_DESC 0x00001000 #define NIC_SRAM_DMA_DESC_POOL_BASE 0x00002000 @@ -1756,12 +1788,6 @@ u8 __reserved4[0xb00-0x9c0]; }; -enum phy_led_mode { - led_mode_auto, - led_mode_three_link, - led_mode_link10 -}; - /* 'mapping' is superfluous as the chip does not write into * the tx/rx post rings so we could just fetch it from there. * But the cache behavior is better how we are doing it now. @@ -1964,6 +1990,8 @@ #define TG3_FLG2_PHY_ADC_BUG 0x00000040 #define TG3_FLG2_PHY_5704_A0_BUG 0x00000080 #define TG3_FLG2_PHY_BER_BUG 0x00000100 +#define TG3_FLG2_PCI_EXPRESS 0x00000200 +#define TG3_FLG2_ASF_NEW_HANDSHAKE 0x00000400 u32 split_mode_max_reqs; #define SPLIT_MODE_5704_MAX_REQ 3 @@ -2009,6 +2037,7 @@ #define PHY_ID_BCM5703 0x60008160 #define PHY_ID_BCM5704 0x60008190 #define PHY_ID_BCM5705 0x600081a0 +#define PHY_ID_BCM5750 0x60008180 #define PHY_ID_BCM8002 0x60010140 #define PHY_ID_SERDES 0xfeedbee0 #define PHY_ID_INVALID 0xffffffff @@ -2018,7 +2047,7 @@ #define PHY_REV_BCM5401_C0 0x6 #define PHY_REV_BCM5411_X0 0x1 /* Found on Netgear GA302T */ - enum phy_led_mode led_mode; + u32 led_ctrl; char board_part_number[24]; u32 nic_sram_data_cfg; @@ -2032,7 +2061,7 @@ ((X) == PHY_ID_BCM5400 || (X) == PHY_ID_BCM5401 || \ (X) == PHY_ID_BCM5411 || (X) == PHY_ID_BCM5701 || \ (X) == PHY_ID_BCM5703 || (X) == PHY_ID_BCM5704 || \ - (X) == PHY_ID_BCM5705 || \ + (X) == PHY_ID_BCM5705 || (X) == PHY_ID_BCM5750 || \ (X) == PHY_ID_BCM8002 || (X) == PHY_ID_SERDES) struct tg3_hw_stats *hw_stats; diff -Nru a/drivers/net/tlan.c b/drivers/net/tlan.c --- a/drivers/net/tlan.c Tue May 18 23:38:05 2004 +++ b/drivers/net/tlan.c Tue May 18 23:38:05 2004 @@ -446,7 +446,9 @@ pci_free_consistent(priv->pciDev, priv->dmaSize, priv->dmaStorage, priv->dmaStorageDMA ); } +#ifdef CONFIG_PCI pci_release_regions(pdev); +#endif free_netdev( dev ); @@ -673,8 +675,10 @@ err_out_free_dev: free_netdev(dev); err_out_regions: +#ifdef CONFIG_PCI if (pdev) pci_release_regions(pdev); +#endif err_out: if (pdev) pci_disable_device(pdev); diff -Nru a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c --- a/drivers/net/tulip/de2104x.c Tue May 18 23:38:08 2004 +++ b/drivers/net/tulip/de2104x.c Tue May 18 23:38:08 2004 @@ -357,13 +357,6 @@ static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, }; -static inline unsigned long -msec_to_jiffies(unsigned long ms) -{ - return (((ms)*HZ+999)/1000); -} - - #define dr32(reg) readl(de->regs + (reg)) #define dw32(reg,val) writel((val), de->regs + (reg)) @@ -1216,7 +1209,7 @@ /* de4x5.c delays, so we do too */ current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout(msec_to_jiffies(10)); + schedule_timeout(msecs_to_jiffies(10)); } } diff -Nru a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c --- a/drivers/net/tulip/dmfe.c Tue May 18 23:38:09 2004 +++ b/drivers/net/tulip/dmfe.c Tue May 18 23:38:09 2004 @@ -299,6 +299,9 @@ static struct ethtool_ops netdev_ethtool_ops; static u16 read_srom_word(long ,int); static irqreturn_t dmfe_interrupt(int , void *, struct pt_regs *); +#ifdef CONFIG_NET_POLL_CONTROLLER +static void poll_dmfe (struct net_device *dev); +#endif static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long); static void allocate_rx_buffer(struct dmfe_board_info *); static void update_cr6(u32, unsigned long); @@ -417,6 +420,9 @@ dev->stop = &dmfe_stop; dev->get_stats = &dmfe_get_stats; dev->set_multicast_list = &dmfe_set_filter_mode; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = &poll_dmfe; +#endif dev->ethtool_ops = &netdev_ethtool_ops; spin_lock_init(&db->lock); @@ -790,6 +796,23 @@ return IRQ_HANDLED; } + +#ifdef CONFIG_NET_POLL_CONTROLLER +/* + * Polling 'interrupt' - used by things like netconsole to send skbs + * without having to re-enable interrupts. It's not called while + * the interrupt routine is executing. + */ + +static void poll_dmfe (struct net_device *dev) +{ + /* disable_irq here is not very nice, but with the lockless + interrupt handler we have no other choice. */ + disable_irq(dev->irq); + dmfe_interrupt (dev->irq, dev, NULL); + enable_irq(dev->irq); +} +#endif /* * Free TX resource after TX complete diff -Nru a/drivers/net/wan/Kconfig b/drivers/net/wan/Kconfig --- a/drivers/net/wan/Kconfig Tue May 18 23:38:06 2004 +++ b/drivers/net/wan/Kconfig Tue May 18 23:38:06 2004 @@ -57,119 +57,6 @@ The driver will be compiled as a module: the module will be called cosa. -# -# COMX drivers -# -# Not updated to 2.6. -config COMX - tristate "MultiGate (COMX) synchronous serial boards support" - depends on WAN && (ISA || PCI) && BROKEN - ---help--- - Drivers for the PC synchronous serial adapters by - ITConsult-Pro Co, Hungary. - - Read for help on configuring - and using COMX interfaces. Further info on these cards can be found - at or . - - Say Y if you want to use any board from the MultiGate (COMX) - family, you must also say Y to "/proc file system support" - (CONFIG_PROC_FS) in order to use these drivers. - - To compile this driver as a module, choose M here: the - module will be called comx. - -config COMX_HW_COMX - tristate "Support for COMX/CMX/HiCOMX boards" - depends on COMX - help - Driver for the 'CMX', 'COMX' and 'HiCOMX' boards. - - You will need additional firmware to use these cards, which are - downloadable from . - - Say Y if you have a board like this. - - To compile this driver as a module, choose M here: the - module will be called comx-hw-comx. - -config COMX_HW_LOCOMX - tristate "Support for LoCOMX board" - depends on COMX - help - Driver for the 'LoCOMX' board. - - Say Y if you have a board like this. - - To compile this driver as a module, choose M here: the - module will be called comx-hw-locomx. - -config COMX_HW_MIXCOM - tristate "Support for MixCOM board" - depends on COMX - ---help--- - Driver for the 'MixCOM' board. - - If you want to use the watchdog device on this card, you should - select it in the Watchdog Cards section of the Character Devices - configuration. The ISDN interface of this card is Teles 16.3 - compatible, you should enable it in the ISDN configuration menu. The - driver for the flash ROM of this card is available separately on - . - - Say Y if you have a board like this. - - To compile this driver as a module, choose M here: the - module will be called comx-hw-mixcom. - -config COMX_HW_MUNICH - tristate "Support for MUNICH based boards: SliceCOM, PCICOM (WelCOM)" - depends on COMX - ---help--- - Driver for the 'SliceCOM' (channelized E1) and 'PciCOM' (X21) boards. - - Read for help on - configuring and using SliceCOM interfaces. Further info on these - cards can be found at or . - - Say Y if you have a board like this. - - To compile this driver as a module, choose M here: the - module will be called comx-hw-munich. - -config COMX_PROTO_PPP - tristate "Support for HDLC and syncPPP protocols on MultiGate boards" - depends on COMX - help - Cisco-HDLC and synchronous PPP protocol driver. - - Say Y if you want to use either protocol. - - To compile this as a module, choose M here: the - module will be called comx-proto-ppp. - -config COMX_PROTO_LAPB - tristate "Support for LAPB protocol on MultiGate boards" - depends on WAN && (COMX!=n && LAPB=m && LAPB || LAPB=y && COMX) - help - LAPB protocol driver. - - Say Y if you want to use this protocol. - - To compile this as a module, choose M here: the - module will be called comx-proto-lapb. - -config COMX_PROTO_FR - tristate "Support for Frame Relay on MultiGate boards" - depends on COMX - help - Frame Relay protocol driver. - - Say Y if you want to use this protocol. - - To compile this as a module, choose M here: the - module will be called comx-proto-fr. - config DSCC4 tristate "Etinc PCISYNC serial board support" depends on WAN && PCI && m diff -Nru a/drivers/net/wan/Makefile b/drivers/net/wan/Makefile --- a/drivers/net/wan/Makefile Tue May 18 23:38:07 2004 +++ b/drivers/net/wan/Makefile Tue May 18 23:38:07 2004 @@ -32,14 +32,6 @@ obj-$(CONFIG_HOSTESS_SV11) += z85230.o syncppp.o hostess_sv11.o obj-$(CONFIG_SEALEVEL_4021) += z85230.o syncppp.o sealevel.o -obj-$(CONFIG_COMX) += comx.o -obj-$(CONFIG_COMX_HW_COMX) += comx-hw-comx.o -obj-$(CONFIG_COMX_HW_LOCOMX) += z85230.o syncppp.o comx-hw-locomx.o -obj-$(CONFIG_COMX_HW_MIXCOM) += comx-hw-mixcom.o -obj-$(CONFIG_COMX_HW_MUNICH) += comx-hw-munich.o -obj-$(CONFIG_COMX_PROTO_PPP) += syncppp.o comx-proto-ppp.o -obj-$(CONFIG_COMX_PROTO_LAPB) += comx-proto-lapb.o -obj-$(CONFIG_COMX_PROTO_FR) += comx-proto-fr.o obj-$(CONFIG_COSA) += syncppp.o cosa.o obj-$(CONFIG_FARSYNC) += syncppp.o farsync.o obj-$(CONFIG_DSCC4) += dscc4.o diff -Nru a/drivers/net/wan/comx-hw-comx.c b/drivers/net/wan/comx-hw-comx.c --- a/drivers/net/wan/comx-hw-comx.c Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1450 +0,0 @@ -/* - * Hardware-level driver for the COMX and HICOMX cards - * for Linux kernel 2.2.X - * - * Original authors: Arpad Bakay , - * Peter Bajan , - * Rewritten by: Tivadar Szemethy - * Currently maintained by: Gergely Madarasz - * - * Copyright (C) 1995-2000 ITConsult-Pro Co. - * - * Contributors: - * Arnaldo Carvalho de Melo - 0.86 - * Daniele Bellucci - 0.87 - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.80 (99/06/11): - * - port back to kernel, add support builtin driver - * - cleaned up the source code a bit - * - * Version 0.81 (99/06/22): - * - cleaned up the board load functions, no more long reset - * timeouts - * - lower modem lines on close - * - some interrupt handling fixes - * - * Version 0.82 (99/08/24): - * - fix multiple board support - * - * Version 0.83 (99/11/30): - * - interrupt handling and locking fixes during initalization - * - really fix multiple board support - * - * Version 0.84 (99/12/02): - * - some workarounds for problematic hardware/firmware - * - * Version 0.85 (00/01/14): - * - some additional workarounds :/ - * - printk cleanups - * Version 0.86 (00/08/15): - * - resource release on failure at COMX_init - * - * Version 0.87 (03/07/09) - * - audit copy_from_user in comxhw_write_proc - */ - -#define VERSION "0.87" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "comx.h" -#include "comxhw.h" - -MODULE_AUTHOR("Gergely Madarasz , Tivadar Szemethy , Arpad Bakay"); -MODULE_DESCRIPTION("Hardware-level driver for the COMX and HICOMX adapters\n"); -MODULE_LICENSE("GPL"); - -#define COMX_readw(dev, offset) (readw(dev->mem_start + offset + \ - (unsigned int)(((struct comx_privdata *)\ - ((struct comx_channel *)dev->priv)->HW_privdata)->channel) \ - * COMX_CHANNEL_OFFSET)) - -#define COMX_WRITE(dev, offset, value) (writew(value, dev->mem_start + offset \ - + (unsigned int)(((struct comx_privdata *) \ - ((struct comx_channel *)dev->priv)->HW_privdata)->channel) \ - * COMX_CHANNEL_OFFSET)) - -#define COMX_CMD(dev, cmd) (COMX_WRITE(dev, OFF_A_L2_CMD, cmd)) - -struct comx_firmware { - int len; - unsigned char *data; -}; - -struct comx_privdata { - struct comx_firmware *firmware; - u16 clock; - char channel; // channel no. - int memory_size; - short io_extent; - u_long histogram[5]; -}; - -static struct net_device *memory_used[(COMX_MEM_MAX - COMX_MEM_MIN) / 0x10000]; -extern struct comx_hardware hicomx_hw; -extern struct comx_hardware comx_hw; -extern struct comx_hardware cmx_hw; - -static irqreturn_t COMX_interrupt(int irq, void *dev_id, struct pt_regs *regs); - -static void COMX_board_on(struct net_device *dev) -{ - outb_p( (byte) (((dev->mem_start & 0xf0000) >> 16) | - COMX_ENABLE_BOARD_IT | COMX_ENABLE_BOARD_MEM), dev->base_addr); -} - -static void COMX_board_off(struct net_device *dev) -{ - outb_p( (byte) (((dev->mem_start & 0xf0000) >> 16) | - COMX_ENABLE_BOARD_IT), dev->base_addr); -} - -static void HICOMX_board_on(struct net_device *dev) -{ - outb_p( (byte) (((dev->mem_start & 0xf0000) >> 12) | - HICOMX_ENABLE_BOARD_MEM), dev->base_addr); -} - -static void HICOMX_board_off(struct net_device *dev) -{ - outb_p( (byte) (((dev->mem_start & 0xf0000) >> 12) | - HICOMX_DISABLE_BOARD_MEM), dev->base_addr); -} - -static void COMX_set_clock(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - - COMX_WRITE(dev, OFF_A_L1_CLKINI, hw->clock); -} - -static struct net_device *COMX_access_board(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct net_device *ret; - int mempos = (dev->mem_start - COMX_MEM_MIN) >> 16; - unsigned long flags; - - - save_flags(flags); cli(); - - ret = memory_used[mempos]; - - if(ret == dev) { - goto out; - } - - memory_used[mempos] = dev; - - if (!ch->twin || ret != ch->twin) { - if (ret) ((struct comx_channel *)ret->priv)->HW_board_off(ret); - ch->HW_board_on(dev); - } -out: - restore_flags(flags); - return ret; -} - -static void COMX_release_board(struct net_device *dev, struct net_device *savep) -{ - unsigned long flags; - int mempos = (dev->mem_start - COMX_MEM_MIN) >> 16; - struct comx_channel *ch = dev->priv; - - save_flags(flags); cli(); - - if (memory_used[mempos] == savep) { - goto out; - } - - memory_used[mempos] = savep; - if (!ch->twin || ch->twin != savep) { - ch->HW_board_off(dev); - if (savep) ((struct comx_channel*)savep->priv)->HW_board_on(savep); - } -out: - restore_flags(flags); -} - -static int COMX_txe(struct net_device *dev) -{ - struct net_device *savep; - struct comx_channel *ch = dev->priv; - int rc = 0; - - savep = ch->HW_access_board(dev); - if (COMX_readw(dev,OFF_A_L2_LINKUP) == LINKUP_READY) { - rc = COMX_readw(dev,OFF_A_L2_TxEMPTY); - } - ch->HW_release_board(dev,savep); - if(rc==0xffff) { - printk(KERN_ERR "%s, OFF_A_L2_TxEMPTY is %d\n",dev->name, rc); - } - return rc; -} - -static int COMX_send_packet(struct net_device *dev, struct sk_buff *skb) -{ - struct net_device *savep; - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - int ret = FRAME_DROPPED; - word tmp; - - savep = ch->HW_access_board(dev); - - if (ch->debug_flags & DEBUG_HW_TX) { - comx_debug_bytes(dev, skb->data, skb->len,"COMX_send packet"); - } - - if (skb->len > COMX_MAX_TX_SIZE) { - ret=FRAME_DROPPED; - goto out; - } - - tmp=COMX_readw(dev, OFF_A_L2_TxEMPTY); - if ((ch->line_status & LINE_UP) && tmp==1) { - int lensave = skb->len; - int dest = COMX_readw(dev, OFF_A_L2_TxBUFP); - word *data = (word *)skb->data; - - if(dest==0xffff) { - printk(KERN_ERR "%s: OFF_A_L2_TxBUFP is %d\n", dev->name, dest); - ret=FRAME_DROPPED; - goto out; - } - - writew((unsigned short)skb->len, dev->mem_start + dest); - dest += 2; - while (skb->len > 1) { - writew(*data++, dev->mem_start + dest); - dest += 2; skb->len -= 2; - } - if (skb->len == 1) { - writew(*((byte *)data), dev->mem_start + dest); - } - writew(0, dev->mem_start + (int)hw->channel * - COMX_CHANNEL_OFFSET + OFF_A_L2_TxEMPTY); - ch->stats.tx_packets++; - ch->stats.tx_bytes += lensave; - ret = FRAME_ACCEPTED; - } else { - ch->stats.tx_dropped++; - printk(KERN_INFO "%s: frame dropped\n",dev->name); - if(tmp) { - printk(KERN_ERR "%s: OFF_A_L2_TxEMPTY is %d\n",dev->name,tmp); - } - } - -out: - ch->HW_release_board(dev, savep); - dev_kfree_skb(skb); - return ret; -} - -static inline int comx_read_buffer(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - word rbuf_offs; - struct sk_buff *skb; - word len; - int i=0; - word *writeptr; - - i = 0; - rbuf_offs = COMX_readw(dev, OFF_A_L2_RxBUFP); - if(rbuf_offs == 0xffff) { - printk(KERN_ERR "%s: OFF_A_L2_RxBUFP is %d\n",dev->name,rbuf_offs); - return 0; - } - len = readw(dev->mem_start + rbuf_offs); - if(len > COMX_MAX_RX_SIZE) { - printk(KERN_ERR "%s: packet length is %d\n",dev->name,len); - return 0; - } - if ((skb = dev_alloc_skb(len + 16)) == NULL) { - ch->stats.rx_dropped++; - COMX_WRITE(dev, OFF_A_L2_DAV, 0); - return 0; - } - rbuf_offs += 2; - skb_reserve(skb, 16); - skb_put(skb, len); - skb->dev = dev; - writeptr = (word *)skb->data; - while (i < len) { - *writeptr++ = readw(dev->mem_start + rbuf_offs); - rbuf_offs += 2; - i += 2; - } - COMX_WRITE(dev, OFF_A_L2_DAV, 0); - ch->stats.rx_packets++; - ch->stats.rx_bytes += len; - if (ch->debug_flags & DEBUG_HW_RX) { - comx_debug_skb(dev, skb, "COMX_interrupt receiving"); - } - ch->LINE_rx(dev, skb); - return 1; -} - -static inline char comx_line_change(struct net_device *dev, char linestat) -{ - struct comx_channel *ch=dev->priv; - char idle=1; - - - if (linestat & LINE_UP) { /* Vonal fol */ - if (ch->lineup_delay) { - if (!test_and_set_bit(0, &ch->lineup_pending)) { - ch->lineup_timer.function = comx_lineup_func; - ch->lineup_timer.data = (unsigned long)dev; - ch->lineup_timer.expires = jiffies + - HZ*ch->lineup_delay; - add_timer(&ch->lineup_timer); - idle=0; - } - } else { - idle=0; - ch->LINE_status(dev, ch->line_status |= LINE_UP); - } - } else { /* Vonal le */ - idle=0; - if (test_and_clear_bit(0, &ch->lineup_pending)) { - del_timer(&ch->lineup_timer); - } else { - ch->line_status &= ~LINE_UP; - if (ch->LINE_status) { - ch->LINE_status(dev, ch->line_status); - } - } - } - return idle; -} - - - -static irqreturn_t COMX_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - struct net_device *dev = dev_id; - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct net_device *interrupted; - unsigned long jiffs; - char idle = 0; - int count = 0; - word tmp; - - if (dev == NULL) { - printk(KERN_ERR "COMX_interrupt: irq %d for unknown device\n", irq); - return IRQ_NONE; - } - - jiffs = jiffies; - - interrupted = ch->HW_access_board(dev); - - while (!idle && count < 5000) { - char channel = 0; - idle = 1; - - while (channel < 2) { - char linestat = 0; - char buffers_emptied = 0; - - if (channel == 1) { - if (ch->twin) { - dev = ch->twin; - ch = dev->priv; - hw = ch->HW_privdata; - } else { - break; - } - } else { - COMX_WRITE(dev, OFF_A_L1_REPENA, - COMX_readw(dev, OFF_A_L1_REPENA) & 0xFF00); - } - channel++; - - if ((ch->init_status & (HW_OPEN | LINE_OPEN)) != - (HW_OPEN | LINE_OPEN)) { - continue; - } - - /* Collect stats */ - tmp = COMX_readw(dev, OFF_A_L1_ABOREC); - COMX_WRITE(dev, OFF_A_L1_ABOREC, 0); - if(tmp==0xffff) { - printk(KERN_ERR "%s: OFF_A_L1_ABOREC is %d\n",dev->name,tmp); - break; - } else { - ch->stats.rx_missed_errors += (tmp >> 8) & 0xff; - ch->stats.rx_over_errors += tmp & 0xff; - } - tmp = COMX_readw(dev, OFF_A_L1_CRCREC); - COMX_WRITE(dev, OFF_A_L1_CRCREC, 0); - if(tmp==0xffff) { - printk(KERN_ERR "%s: OFF_A_L1_CRCREC is %d\n",dev->name,tmp); - break; - } else { - ch->stats.rx_crc_errors += (tmp >> 8) & 0xff; - ch->stats.rx_missed_errors += tmp & 0xff; - } - - if ((ch->line_status & LINE_UP) && ch->LINE_rx) { - tmp=COMX_readw(dev, OFF_A_L2_DAV); - while (tmp==1) { - idle=0; - buffers_emptied+=comx_read_buffer(dev); - tmp=COMX_readw(dev, OFF_A_L2_DAV); - } - if(tmp) { - printk(KERN_ERR "%s: OFF_A_L2_DAV is %d\n", dev->name, tmp); - break; - } - } - - tmp=COMX_readw(dev, OFF_A_L2_TxEMPTY); - if (tmp==1 && ch->LINE_tx) { - ch->LINE_tx(dev); - } - if(tmp==0xffff) { - printk(KERN_ERR "%s: OFF_A_L2_TxEMPTY is %d\n", dev->name, tmp); - break; - } - - if (COMX_readw(dev, OFF_A_L1_PBUFOVR) >> 8) { - linestat &= ~LINE_UP; - } else { - linestat |= LINE_UP; - } - - if ((linestat & LINE_UP) != (ch->line_status & LINE_UP)) { - ch->stats.tx_carrier_errors++; - idle &= comx_line_change(dev,linestat); - } - - hw->histogram[(int)buffers_emptied]++; - } - count++; - } - - if(count==5000) { - printk(KERN_WARNING "%s: interrupt stuck\n",dev->name); - } - - ch->HW_release_board(dev, interrupted); - return IRQ_HANDLED; -} - -static int COMX_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - unsigned long jiffs; - int twin_open=0; - int retval; - struct net_device *savep; - - if (!dev->base_addr || !dev->irq || !dev->mem_start) { - return -ENODEV; - } - - if (ch->twin && (((struct comx_channel *)(ch->twin->priv))->init_status & HW_OPEN)) { - twin_open=1; - } - - if (!twin_open) { - if (!request_region(dev->base_addr, hw->io_extent, dev->name)) { - return -EAGAIN; - } - if (request_irq(dev->irq, COMX_interrupt, 0, dev->name, - (void *)dev)) { - printk(KERN_ERR "comx-hw-comx: unable to obtain irq %d\n", dev->irq); - release_region(dev->base_addr, hw->io_extent); - return -EAGAIN; - } - ch->init_status |= IRQ_ALLOCATED; - if (!ch->HW_load_board || ch->HW_load_board(dev)) { - ch->init_status &= ~IRQ_ALLOCATED; - retval=-ENODEV; - goto error; - } - } - - savep = ch->HW_access_board(dev); - COMX_WRITE(dev, OFF_A_L2_LINKUP, 0); - - if (ch->HW_set_clock) { - ch->HW_set_clock(dev); - } - - COMX_CMD(dev, COMX_CMD_INIT); - jiffs = jiffies; - while (COMX_readw(dev, OFF_A_L2_LINKUP) != 1 && time_before(jiffies, jiffs + HZ)) { - schedule_timeout(1); - } - - if (time_after_eq(jiffies, jiffs + HZ)) { - printk(KERN_ERR "%s: board timeout on INIT command\n", dev->name); - ch->HW_release_board(dev, savep); - retval=-EIO; - goto error; - } - udelay(1000); - - COMX_CMD(dev, COMX_CMD_OPEN); - - jiffs = jiffies; - while (COMX_readw(dev, OFF_A_L2_LINKUP) != 3 && time_before(jiffies, jiffs + HZ)) { - schedule_timeout(1); - } - - if (time_after_eq(jiffies, jiffs + HZ)) { - printk(KERN_ERR "%s: board timeout on OPEN command\n", dev->name); - ch->HW_release_board(dev, savep); - retval=-EIO; - goto error; - } - - ch->init_status |= HW_OPEN; - - /* Ez eleg ciki, de ilyen a rendszer */ - if (COMX_readw(dev, OFF_A_L1_PBUFOVR) >> 8) { - ch->line_status &= ~LINE_UP; - } else { - ch->line_status |= LINE_UP; - } - - if (ch->LINE_status) { - ch->LINE_status(dev, ch->line_status); - } - - ch->HW_release_board(dev, savep); - - for ( ; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IRQ) == 0 - || strcmp(procfile->name, FILENAME_IO) == 0 - || strcmp(procfile->name, FILENAME_MEMADDR) == 0 - || strcmp(procfile->name, FILENAME_CHANNEL) == 0 - || strcmp(procfile->name, FILENAME_FIRMWARE) == 0 - || strcmp(procfile->name, FILENAME_CLOCK) == 0) { - procfile->mode = S_IFREG | 0444; - - } - } - - return 0; - -error: - if(!twin_open) { - release_region(dev->base_addr, hw->io_extent); - free_irq(dev->irq, (void *)dev); - } - return retval; - -} - -static int COMX_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *procfile = ch->procdir->subdir; - struct comx_privdata *hw = ch->HW_privdata; - struct comx_channel *twin_ch; - struct net_device *savep; - - savep = ch->HW_access_board(dev); - - COMX_CMD(dev, COMX_CMD_CLOSE); - udelay(1000); - COMX_CMD(dev, COMX_CMD_EXIT); - - ch->HW_release_board(dev, savep); - - if (ch->init_status & IRQ_ALLOCATED) { - free_irq(dev->irq, (void *)dev); - ch->init_status &= ~IRQ_ALLOCATED; - } - release_region(dev->base_addr, hw->io_extent); - - if (ch->twin && (twin_ch = ch->twin->priv) && - (twin_ch->init_status & HW_OPEN)) { - /* Pass the irq to the twin */ - if (request_irq(dev->irq, COMX_interrupt, 0, ch->twin->name, - (void *)ch->twin) == 0) { - twin_ch->init_status |= IRQ_ALLOCATED; - } - } - - for ( ; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IRQ) == 0 - || strcmp(procfile->name, FILENAME_IO) == 0 - || strcmp(procfile->name, FILENAME_MEMADDR) == 0 - || strcmp(procfile->name, FILENAME_CHANNEL) == 0 - || strcmp(procfile->name, FILENAME_FIRMWARE) == 0 - || strcmp(procfile->name, FILENAME_CLOCK) == 0) { - procfile->mode = S_IFREG | 0644; - } - } - - ch->init_status &= ~HW_OPEN; - return 0; -} - -static int COMX_statistics(struct net_device *dev, char *page) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct net_device *savep; - int len = 0; - - savep = ch->HW_access_board(dev); - - len += sprintf(page + len, "Board data: %s %s %s %s\nPBUFOVR: %02x, " - "MODSTAT: %02x, LINKUP: %02x, DAV: %02x\nRxBUFP: %02x, " - "TxEMPTY: %02x, TxBUFP: %02x\n", - (ch->init_status & HW_OPEN) ? "HW_OPEN" : "", - (ch->init_status & LINE_OPEN) ? "LINE_OPEN" : "", - (ch->init_status & FW_LOADED) ? "FW_LOADED" : "", - (ch->init_status & IRQ_ALLOCATED) ? "IRQ_ALLOCATED" : "", - COMX_readw(dev, OFF_A_L1_PBUFOVR) & 0xff, - (COMX_readw(dev, OFF_A_L1_PBUFOVR) >> 8) & 0xff, - COMX_readw(dev, OFF_A_L2_LINKUP) & 0xff, - COMX_readw(dev, OFF_A_L2_DAV) & 0xff, - COMX_readw(dev, OFF_A_L2_RxBUFP) & 0xff, - COMX_readw(dev, OFF_A_L2_TxEMPTY) & 0xff, - COMX_readw(dev, OFF_A_L2_TxBUFP) & 0xff); - - len += sprintf(page + len, "hist[0]: %8lu hist[1]: %8lu hist[2]: %8lu\n" - "hist[3]: %8lu hist[4]: %8lu\n",hw->histogram[0],hw->histogram[1], - hw->histogram[2],hw->histogram[3],hw->histogram[4]); - - ch->HW_release_board(dev, savep); - - return len; -} - -static int COMX_load_board(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct comx_firmware *fw = hw->firmware; - word board_segment = dev->mem_start >> 16; - int mempos = (dev->mem_start - COMX_MEM_MIN) >> 16; - unsigned long flags; - unsigned char id1, id2; - struct net_device *saved; - int retval; - int loopcount; - int len; - byte *COMX_address; - - if (!fw || !fw->len) { - struct comx_channel *twin_ch = ch->twin ? ch->twin->priv : NULL; - struct comx_privdata *twin_hw; - - if (!twin_ch || !(twin_hw = twin_ch->HW_privdata)) { - return -EAGAIN; - } - - if (!(fw = twin_hw->firmware) || !fw->len) { - return -EAGAIN; - } - } - - id1 = fw->data[OFF_FW_L1_ID]; - id2 = fw->data[OFF_FW_L1_ID + 1]; - - if (id1 != FW_L1_ID_1 || id2 != FW_L1_ID_2_COMX) { - printk(KERN_ERR "%s: incorrect firmware, load aborted\n", - dev->name); - return -EAGAIN; - } - - printk(KERN_INFO "%s: Loading COMX Layer 1 firmware %s\n", dev->name, - (char *)(fw->data + OFF_FW_L1_ID + 2)); - - id1 = fw->data[OFF_FW_L2_ID]; - id2 = fw->data[OFF_FW_L2_ID + 1]; - if (id1 == FW_L2_ID_1 && (id2 == 0xc0 || id2 == 0xc1 || id2 == 0xc2)) { - printk(KERN_INFO "with Layer 2 code %s\n", - (char *)(fw->data + OFF_FW_L2_ID + 2)); - } - - outb_p(board_segment | COMX_BOARD_RESET, dev->base_addr); - /* 10 usec should be enough here */ - udelay(100); - - save_flags(flags); cli(); - saved=memory_used[mempos]; - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_off(saved); - } - memory_used[mempos]=dev; - - outb_p(board_segment | COMX_ENABLE_BOARD_MEM, dev->base_addr); - - writeb(0, dev->mem_start + COMX_JAIL_OFFSET); - - loopcount=0; - while(loopcount++ < 10000 && - readb(dev->mem_start + COMX_JAIL_OFFSET) != COMX_JAIL_VALUE) { - udelay(100); - } - - if (readb(dev->mem_start + COMX_JAIL_OFFSET) != COMX_JAIL_VALUE) { - printk(KERN_ERR "%s: Can't reset board, JAIL value is %02x\n", - dev->name, readb(dev->mem_start + COMX_JAIL_OFFSET)); - retval=-ENODEV; - goto out; - } - - writeb(0x55, dev->mem_start + 0x18ff); - - loopcount=0; - while(loopcount++ < 10000 && readb(dev->mem_start + 0x18ff) != 0) { - udelay(100); - } - - if(readb(dev->mem_start + 0x18ff) != 0) { - printk(KERN_ERR "%s: Can't reset board, reset timeout\n", - dev->name); - retval=-ENODEV; - goto out; - } - - len = 0; - COMX_address = (byte *)dev->mem_start; - while (fw->len > len) { - writeb(fw->data[len++], COMX_address++); - } - - len = 0; - COMX_address = (byte *)dev->mem_start; - while (len != fw->len && readb(COMX_address++) == fw->data[len]) { - len++; - } - - if (len != fw->len) { - printk(KERN_ERR "%s: error loading firmware: [%d] is 0x%02x " - "instead of 0x%02x\n", dev->name, len, - readb(COMX_address - 1), fw->data[len]); - retval=-EAGAIN; - goto out; - } - - writeb(0, dev->mem_start + COMX_JAIL_OFFSET); - - loopcount = 0; - while ( loopcount++ < 10000 && COMX_readw(dev, OFF_A_L2_LINKUP) != 1 ) { - udelay(100); - } - - if (COMX_readw(dev, OFF_A_L2_LINKUP) != 1) { - printk(KERN_ERR "%s: error starting firmware, linkup word is %04x\n", - dev->name, COMX_readw(dev, OFF_A_L2_LINKUP)); - retval=-EAGAIN; - goto out; - } - - - ch->init_status |= FW_LOADED; - retval=0; - -out: - outb_p(board_segment | COMX_DISABLE_ALL, dev->base_addr); - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_on(saved); - } - memory_used[mempos]=saved; - restore_flags(flags); - return retval; -} - -static int CMX_load_board(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct comx_firmware *fw = hw->firmware; - word board_segment = dev->mem_start >> 16; - int mempos = (dev->mem_start - COMX_MEM_MIN) >> 16; - #if 0 - unsigned char id1, id2; - #endif - struct net_device *saved; - unsigned long flags; - int retval; - int loopcount; - int len; - byte *COMX_address; - - if (!fw || !fw->len) { - struct comx_channel *twin_ch = ch->twin ? ch->twin->priv : NULL; - struct comx_privdata *twin_hw; - - if (!twin_ch || !(twin_hw = twin_ch->HW_privdata)) { - return -EAGAIN; - } - - if (!(fw = twin_hw->firmware) || !fw->len) { - return -EAGAIN; - } - } - - /* Ide kell olyat tenni, hogy ellenorizze az ID-t */ - - if (inb_p(dev->base_addr) != CMX_ID_BYTE) { - printk(KERN_ERR "%s: CMX id byte is invalid(%02x)\n", dev->name, - inb_p(dev->base_addr)); - return -ENODEV; - } - - printk(KERN_INFO "%s: Loading CMX Layer 1 firmware %s\n", dev->name, - (char *)(fw->data + OFF_FW_L1_ID + 2)); - - save_flags(flags); cli(); - saved=memory_used[mempos]; - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_off(saved); - } - memory_used[mempos]=dev; - - outb_p(board_segment | COMX_ENABLE_BOARD_MEM | COMX_BOARD_RESET, - dev->base_addr); - - len = 0; - COMX_address = (byte *)dev->mem_start; - while (fw->len > len) { - writeb(fw->data[len++], COMX_address++); - } - - len = 0; - COMX_address = (byte *)dev->mem_start; - while (len != fw->len && readb(COMX_address++) == fw->data[len]) { - len++; - } - - outb_p(board_segment | COMX_ENABLE_BOARD_MEM, dev->base_addr); - - if (len != fw->len) { - printk(KERN_ERR "%s: error loading firmware: [%d] is 0x%02x " - "instead of 0x%02x\n", dev->name, len, - readb(COMX_address - 1), fw->data[len]); - retval=-EAGAIN; - goto out; - } - - loopcount=0; - while( loopcount++ < 10000 && COMX_readw(dev, OFF_A_L2_LINKUP) != 1 ) { - udelay(100); - } - - if (COMX_readw(dev, OFF_A_L2_LINKUP) != 1) { - printk(KERN_ERR "%s: error starting firmware, linkup word is %04x\n", - dev->name, COMX_readw(dev, OFF_A_L2_LINKUP)); - retval=-EAGAIN; - goto out; - } - - ch->init_status |= FW_LOADED; - retval=0; - -out: - outb_p(board_segment | COMX_DISABLE_ALL, dev->base_addr); - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_on(saved); - } - memory_used[mempos]=saved; - restore_flags(flags); - return retval; -} - -static int HICOMX_load_board(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - struct comx_firmware *fw = hw->firmware; - word board_segment = dev->mem_start >> 12; - int mempos = (dev->mem_start - COMX_MEM_MIN) >> 16; - struct net_device *saved; - unsigned char id1, id2; - unsigned long flags; - int retval; - int loopcount; - int len; - word *HICOMX_address; - char id = 1; - - if (!fw || !fw->len) { - struct comx_channel *twin_ch = ch->twin ? ch->twin->priv : NULL; - struct comx_privdata *twin_hw; - - if (!twin_ch || !(twin_hw = twin_ch->HW_privdata)) { - return -EAGAIN; - } - - if (!(fw = twin_hw->firmware) || !fw->len) { - return -EAGAIN; - } - } - - while (id != 4) { - if (inb_p(dev->base_addr + id++) != HICOMX_ID_BYTE) { - break; - } - } - - if (id != 4) { - printk(KERN_ERR "%s: can't find HICOMX at 0x%04x, id[%d] = %02x\n", - dev->name, (unsigned int)dev->base_addr, id - 1, - inb_p(dev->base_addr + id - 1)); - return -1; - } - - id1 = fw->data[OFF_FW_L1_ID]; - id2 = fw->data[OFF_FW_L1_ID + 1]; - if (id1 != FW_L1_ID_1 || id2 != FW_L1_ID_2_HICOMX) { - printk(KERN_ERR "%s: incorrect firmware, load aborted\n", dev->name); - return -EAGAIN; - } - - printk(KERN_INFO "%s: Loading HICOMX Layer 1 firmware %s\n", dev->name, - (char *)(fw->data + OFF_FW_L1_ID + 2)); - - id1 = fw->data[OFF_FW_L2_ID]; - id2 = fw->data[OFF_FW_L2_ID + 1]; - if (id1 == FW_L2_ID_1 && (id2 == 0xc0 || id2 == 0xc1 || id2 == 0xc2)) { - printk(KERN_INFO "with Layer 2 code %s\n", - (char *)(fw->data + OFF_FW_L2_ID + 2)); - } - - outb_p(board_segment | HICOMX_BOARD_RESET, dev->base_addr); - udelay(10); - - save_flags(flags); cli(); - saved=memory_used[mempos]; - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_off(saved); - } - memory_used[mempos]=dev; - - outb_p(board_segment | HICOMX_ENABLE_BOARD_MEM, dev->base_addr); - outb_p(HICOMX_PRG_MEM, dev->base_addr + 1); - - len = 0; - HICOMX_address = (word *)dev->mem_start; - while (fw->len > len) { - writeb(fw->data[len++], HICOMX_address++); - } - - len = 0; - HICOMX_address = (word *)dev->mem_start; - while (len != fw->len && (readw(HICOMX_address++) & 0xff) == fw->data[len]) { - len++; - } - - if (len != fw->len) { - printk(KERN_ERR "%s: error loading firmware: [%d] is 0x%02x " - "instead of 0x%02x\n", dev->name, len, - readw(HICOMX_address - 1) & 0xff, fw->data[len]); - retval=-EAGAIN; - goto out; - } - - outb_p(board_segment | HICOMX_BOARD_RESET, dev->base_addr); - outb_p(HICOMX_DATA_MEM, dev->base_addr + 1); - - outb_p(board_segment | HICOMX_ENABLE_BOARD_MEM, dev->base_addr); - - loopcount=0; - while(loopcount++ < 10000 && COMX_readw(dev, OFF_A_L2_LINKUP) != 1) { - udelay(100); - } - - if ( COMX_readw(dev, OFF_A_L2_LINKUP) != 1 ) { - printk(KERN_ERR "%s: error starting firmware, linkup word is %04x\n", - dev->name, COMX_readw(dev, OFF_A_L2_LINKUP)); - retval=-EAGAIN; - goto out; - } - - ch->init_status |= FW_LOADED; - retval=0; - -out: - outb_p(board_segment | HICOMX_DISABLE_ALL, dev->base_addr); - outb_p(HICOMX_DATA_MEM, dev->base_addr + 1); - - if(saved) { - ((struct comx_channel *)saved->priv)->HW_board_on(saved); - } - memory_used[mempos]=saved; - restore_flags(flags); - return retval; -} - -static struct net_device *comx_twin_check(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *procfile = ch->procdir->parent->subdir; - struct comx_privdata *hw = ch->HW_privdata; - - struct net_device *twin; - struct comx_channel *ch_twin; - struct comx_privdata *hw_twin; - - - for ( ; procfile ; procfile = procfile->next) { - - if(!S_ISDIR(procfile->mode)) { - continue; - } - - twin=procfile->data; - ch_twin=twin->priv; - hw_twin=ch_twin->HW_privdata; - - - if (twin != dev && dev->irq && dev->base_addr && dev->mem_start && - dev->irq == twin->irq && dev->base_addr == twin->base_addr && - dev->mem_start == twin->mem_start && - hw->channel == (1 - hw_twin->channel) && - ch->hardware == ch_twin->hardware) { - return twin; - } - } - return NULL; -} - -static int comxhw_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = entry->parent->data; - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - char *page; - - - if(ch->init_status & HW_OPEN) { - return -EAGAIN; - } - - if (strcmp(FILENAME_FIRMWARE, entry->name) != 0) { - if (!(page = (char *)__get_free_page(GFP_KERNEL))) { - return -ENOMEM; - } - if(copy_from_user(page, buffer, count = (min_t(int, count, PAGE_SIZE)))) - { - count = -EFAULT; - goto out; - } - if (page[count-1] == '\n') - page[count-1] = '\0'; - else if (count < PAGE_SIZE) - page[count] = '\0'; - else if (page[count]) { - count = -EINVAL; - goto out; - } - page[count]=0; /* Null terminate */ - } else { - byte *tmp; - - if (!hw->firmware) { - if ((hw->firmware = kmalloc(sizeof(struct comx_firmware), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - hw->firmware->len = 0; - hw->firmware->data = NULL; - } - - if ((tmp = kmalloc(count + file->f_pos, GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - - /* Ha nem 0 a fpos, akkor meglevo file-t irunk. Gyenge trukk. */ - if (hw->firmware && hw->firmware->len && file->f_pos - && hw->firmware->len < count + file->f_pos) { - memcpy(tmp, hw->firmware->data, hw->firmware->len); - } - if (hw->firmware->data) { - kfree(hw->firmware->data); - } - if (copy_from_user(tmp + file->f_pos, buffer, count)) - return -EFAULT; - hw->firmware->len = entry->size = file->f_pos + count; - hw->firmware->data = tmp; - file->f_pos += count; - return count; - } - - if (strcmp(entry->name, FILENAME_CHANNEL) == 0) { - hw->channel = simple_strtoul(page, NULL, 0); - if (hw->channel >= MAX_CHANNELNO) { - printk(KERN_ERR "Invalid channel number\n"); - hw->channel = 0; - } - if ((ch->twin = comx_twin_check(dev)) != NULL) { - struct comx_channel *twin_ch = ch->twin->priv; - twin_ch->twin = dev; - } - } else if (strcmp(entry->name, FILENAME_IRQ) == 0) { - dev->irq = simple_strtoul(page, NULL, 0); - if (dev->irq == 2) { - dev->irq = 9; - } - if (dev->irq < 3 || dev->irq > 15) { - printk(KERN_ERR "comxhw: Invalid irq number\n"); - dev->irq = 0; - } - if ((ch->twin = comx_twin_check(dev)) != NULL) { - struct comx_channel *twin_ch = ch->twin->priv; - twin_ch->twin = dev; - } - } else if (strcmp(entry->name, FILENAME_IO) == 0) { - dev->base_addr = simple_strtoul(page, NULL, 0); - if ((dev->base_addr & 3) != 0 || dev->base_addr < 0x300 - || dev->base_addr > 0x3fc) { - printk(KERN_ERR "Invalid io value\n"); - dev->base_addr = 0; - } - if ((ch->twin = comx_twin_check(dev)) != NULL) { - struct comx_channel *twin_ch = ch->twin->priv; - - twin_ch->twin = dev; - } - } else if (strcmp(entry->name, FILENAME_MEMADDR) == 0) { - dev->mem_start = simple_strtoul(page, NULL, 0); - if (dev->mem_start <= 0xf000 && dev->mem_start >= 0xa000) { - dev->mem_start *= 16; - } - if ((dev->mem_start & 0xfff) != 0 || dev->mem_start < COMX_MEM_MIN - || dev->mem_start + hw->memory_size > COMX_MEM_MAX) { - printk(KERN_ERR "Invalid memory page\n"); - dev->mem_start = 0; - } - dev->mem_end = dev->mem_start + hw->memory_size; - if ((ch->twin = comx_twin_check(dev)) != NULL) { - struct comx_channel *twin_ch = ch->twin->priv; - - twin_ch->twin = dev; - } - } else if (strcmp(entry->name, FILENAME_CLOCK) == 0) { - if (strncmp("ext", page, 3) == 0) { - hw->clock = 0; - } else { - int kbps; - - kbps = simple_strtoul(page, NULL, 0); - hw->clock = kbps ? COMX_CLOCK_CONST/kbps : 0; - } - } -out: - free_page((unsigned long)page); - return count; -} - -static int comxhw_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - int len = 0; - - - if (strcmp(file->name, FILENAME_IO) == 0) { - len = sprintf(page, "0x%03x\n", (unsigned int)dev->base_addr); - } else if (strcmp(file->name, FILENAME_IRQ) == 0) { - len = sprintf(page, "0x%02x\n", dev->irq == 9 ? 2 : dev->irq); - } else if (strcmp(file->name, FILENAME_CHANNEL) == 0) { - len = sprintf(page, "%01d\n", hw->channel); - } else if (strcmp(file->name, FILENAME_MEMADDR) == 0) { - len = sprintf(page, "0x%05x\n", (unsigned int)dev->mem_start); - } else if (strcmp(file->name, FILENAME_TWIN) == 0) { - len = sprintf(page, "%s\n", ch->twin ? ch->twin->name : "none"); - } else if (strcmp(file->name, FILENAME_CLOCK) == 0) { - if (hw->clock) { - len = sprintf(page, "%-8d\n", COMX_CLOCK_CONST/hw->clock); - } else { - len = sprintf(page, "external\n"); - } - } else if (strcmp(file->name, FILENAME_FIRMWARE) == 0) { - len = min_t(int, FILE_PAGESIZE, - min_t(int, count, - hw->firmware ? - (hw->firmware->len - off) : 0)); - if (len < 0) { - len = 0; - } - *start = hw->firmware ? (hw->firmware->data + off) : NULL; - if (off + len >= (hw->firmware ? hw->firmware->len : 0) || len == 0) { - *eof = 1; - } - return len; - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) { - *eof = 1; - } - return min_t(int, count, len - off); -} - -/* Called on echo comx >boardtype */ -static int COMX_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw; - struct proc_dir_entry *new_file; - - if ((ch->HW_privdata = kmalloc(sizeof(struct comx_privdata), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - memset(hw = ch->HW_privdata, 0, sizeof(struct comx_privdata)); - - if (ch->hardware == &comx_hw || ch->hardware == &cmx_hw) { - hw->memory_size = COMX_MEMORY_SIZE; - hw->io_extent = COMX_IO_EXTENT; - dev->base_addr = COMX_DEFAULT_IO; - dev->irq = COMX_DEFAULT_IRQ; - dev->mem_start = COMX_DEFAULT_MEMADDR; - dev->mem_end = COMX_DEFAULT_MEMADDR + COMX_MEMORY_SIZE; - } else if (ch->hardware == &hicomx_hw) { - hw->memory_size = HICOMX_MEMORY_SIZE; - hw->io_extent = HICOMX_IO_EXTENT; - dev->base_addr = HICOMX_DEFAULT_IO; - dev->irq = HICOMX_DEFAULT_IRQ; - dev->mem_start = HICOMX_DEFAULT_MEMADDR; - dev->mem_end = HICOMX_DEFAULT_MEMADDR + HICOMX_MEMORY_SIZE; - } else { - printk(KERN_ERR "SERIOUS INTERNAL ERROR in %s, line %d\n", __FILE__, __LINE__); - } - - if ((new_file = create_proc_entry(FILENAME_IO, S_IFREG | 0644, ch->procdir)) - == NULL) { - goto cleanup_HW_privdata; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->size = 6; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_IRQ, S_IFREG | 0644, ch->procdir)) - == NULL) { - goto cleanup_filename_io; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->size = 5; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_CHANNEL, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_irq; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->size = 2; // Ezt tudjuk - new_file->nlink = 1; - - if (ch->hardware == &hicomx_hw || ch->hardware == &cmx_hw) { - if ((new_file = create_proc_entry(FILENAME_CLOCK, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_channel; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->size = 9; - new_file->nlink = 1; - } - - if ((new_file = create_proc_entry(FILENAME_MEMADDR, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_clock; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->size = 8; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_TWIN, S_IFREG | 0444, - ch->procdir)) == NULL) { - goto cleanup_filename_memaddr; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = NULL; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_FIRMWARE, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_twin; - } - new_file->data = (void *)new_file; - new_file->read_proc = &comxhw_read_proc; - new_file->write_proc = &comxhw_write_proc; - new_file->nlink = 1; - - if (ch->hardware == &comx_hw) { - ch->HW_board_on = COMX_board_on; - ch->HW_board_off = COMX_board_off; - ch->HW_load_board = COMX_load_board; - } else if (ch->hardware == &cmx_hw) { - ch->HW_board_on = COMX_board_on; - ch->HW_board_off = COMX_board_off; - ch->HW_load_board = CMX_load_board; - ch->HW_set_clock = COMX_set_clock; - } else if (ch->hardware == &hicomx_hw) { - ch->HW_board_on = HICOMX_board_on; - ch->HW_board_off = HICOMX_board_off; - ch->HW_load_board = HICOMX_load_board; - ch->HW_set_clock = COMX_set_clock; - } else { - printk(KERN_ERR "SERIOUS INTERNAL ERROR in %s, line %d\n", __FILE__, __LINE__); - } - - ch->HW_access_board = COMX_access_board; - ch->HW_release_board = COMX_release_board; - ch->HW_txe = COMX_txe; - ch->HW_open = COMX_open; - ch->HW_close = COMX_close; - ch->HW_send_packet = COMX_send_packet; - ch->HW_statistics = COMX_statistics; - - if ((ch->twin = comx_twin_check(dev)) != NULL) { - struct comx_channel *twin_ch = ch->twin->priv; - - twin_ch->twin = dev; - } - - MOD_INC_USE_COUNT; - return 0; - -cleanup_filename_twin: - remove_proc_entry(FILENAME_TWIN, ch->procdir); -cleanup_filename_memaddr: - remove_proc_entry(FILENAME_MEMADDR, ch->procdir); -cleanup_filename_clock: - if (ch->hardware == &hicomx_hw || ch->hardware == &cmx_hw) - remove_proc_entry(FILENAME_CLOCK, ch->procdir); -cleanup_filename_channel: - remove_proc_entry(FILENAME_CHANNEL, ch->procdir); -cleanup_filename_irq: - remove_proc_entry(FILENAME_IRQ, ch->procdir); -cleanup_filename_io: - remove_proc_entry(FILENAME_IO, ch->procdir); -cleanup_HW_privdata: - kfree(ch->HW_privdata); - return -EIO; -} - -/* Called on echo valami >boardtype */ -static int COMX_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_privdata *hw = ch->HW_privdata; - - if (hw->firmware) { - if (hw->firmware->data) kfree(hw->firmware->data); - kfree(hw->firmware); - } if (ch->twin) { - struct comx_channel *twin_ch = ch->twin->priv; - - twin_ch->twin = NULL; - } - - kfree(ch->HW_privdata); - remove_proc_entry(FILENAME_IO, ch->procdir); - remove_proc_entry(FILENAME_IRQ, ch->procdir); - remove_proc_entry(FILENAME_CHANNEL, ch->procdir); - remove_proc_entry(FILENAME_MEMADDR, ch->procdir); - remove_proc_entry(FILENAME_FIRMWARE, ch->procdir); - remove_proc_entry(FILENAME_TWIN, ch->procdir); - if (ch->hardware == &hicomx_hw || ch->hardware == &cmx_hw) { - remove_proc_entry(FILENAME_CLOCK, ch->procdir); - } - - MOD_DEC_USE_COUNT; - return 0; -} - -static int COMX_dump(struct net_device *dev) -{ - printk(KERN_INFO "%s: COMX_dump called, why ?\n", dev->name); - return 0; -} - -static struct comx_hardware comx_hw = { - "comx", - VERSION, - COMX_init, - COMX_exit, - COMX_dump, - NULL -}; - -static struct comx_hardware cmx_hw = { - "cmx", - VERSION, - COMX_init, - COMX_exit, - COMX_dump, - NULL -}; - -static struct comx_hardware hicomx_hw = { - "hicomx", - VERSION, - COMX_init, - COMX_exit, - COMX_dump, - NULL -}; - -static int __init comx_hw_comx_init(void) -{ - comx_register_hardware(&comx_hw); - comx_register_hardware(&cmx_hw); - comx_register_hardware(&hicomx_hw); - return 0; -} - -static void __exit comx_hw_comx_exit(void) -{ - comx_unregister_hardware("comx"); - comx_unregister_hardware("cmx"); - comx_unregister_hardware("hicomx"); -} - -module_init(comx_hw_comx_init); -module_exit(comx_hw_comx_exit); diff -Nru a/drivers/net/wan/comx-hw-locomx.c b/drivers/net/wan/comx-hw-locomx.c --- a/drivers/net/wan/comx-hw-locomx.c Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,496 +0,0 @@ -/* - * Hardware driver for the LoCOMX card, using the generic z85230 - * functions - * - * Author: Gergely Madarasz - * - * Based on skeleton code and old LoCOMX driver by Tivadar Szemethy - * and the hostess_sv11 driver - * - * Contributors: - * Arnaldo Carvalho de Melo (0.14) - * - * Copyright (C) 1999 ITConsult-Pro Co. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.10 (99/06/17): - * - rewritten for the z85230 layer - * - * Version 0.11 (99/06/21): - * - some printk's fixed - * - get rid of a memory leak (it was impossible though :)) - * - * Version 0.12 (99/07/07): - * - check CTS for modem lines, not DCD (which is always high - * in case of this board) - * Version 0.13 (99/07/08): - * - Fix the transmitter status check - * - Handle the net device statistics better - * Version 0.14 (00/08/15): - * - resource release on failure at LOCOMX_init - */ - -#define VERSION "0.14" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "comx.h" -#include "z85230.h" - -MODULE_AUTHOR("Gergely Madarasz "); -MODULE_DESCRIPTION("Hardware driver for the LoCOMX board"); -MODULE_LICENSE("GPL"); - -#define RX_DMA 3 -#define TX_DMA 1 -#define LOCOMX_ID 0x33 -#define LOCOMX_IO_EXTENT 8 -#define LOCOMX_DEFAULT_IO 0x368 -#define LOCOMX_DEFAULT_IRQ 7 - -u8 z8530_locomx[] = { - 11, TCRTxCP, - 14, DTRREQ, - 255 -}; - -struct locomx_data { - int io_extent; - struct z8530_dev board; - struct timer_list status_timer; -}; - -static int LOCOMX_txe(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw = ch->HW_privdata; - - return (!hw->board.chanA.tx_next_skb); -} - - -static void locomx_rx(struct z8530_channel *c, struct sk_buff *skb) -{ - struct net_device *dev = c->netdevice; - struct comx_channel *ch = netdev_priv(dev); - - if (ch->debug_flags & DEBUG_HW_RX) { - comx_debug_skb(dev, skb, "locomx_rx receiving"); - } - ch->LINE_rx(dev,skb); -} - -static int LOCOMX_send_packet(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw = ch->HW_privdata; - - if (ch->debug_flags & DEBUG_HW_TX) { - comx_debug_bytes(dev, skb->data, skb->len, "LOCOMX_send_packet"); - } - - if (!(ch->line_status & LINE_UP)) { - return FRAME_DROPPED; - } - - if(z8530_queue_xmit(&hw->board.chanA,skb)) { - printk(KERN_WARNING "%s: FRAME_DROPPED\n",dev->name); - return FRAME_DROPPED; - } - - if (ch->debug_flags & DEBUG_HW_TX) { - comx_debug(dev, "%s: LOCOMX_send_packet was successful\n\n", dev->name); - } - - if(!hw->board.chanA.tx_next_skb) { - return FRAME_QUEUED; - } else { - return FRAME_ACCEPTED; - } -} - -static void locomx_status_timerfun(unsigned long d) -{ - struct net_device *dev = (struct net_device *)d; - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw = ch->HW_privdata; - - if(!(ch->line_status & LINE_UP) && - (hw->board.chanA.status & CTS)) { - ch->LINE_status(dev, ch->line_status | LINE_UP); - } - if((ch->line_status & LINE_UP) && - !(hw->board.chanA.status & CTS)) { - ch->LINE_status(dev, ch->line_status & ~LINE_UP); - } - mod_timer(&hw->status_timer,jiffies + ch->lineup_delay * HZ); -} - - -static int LOCOMX_open(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - unsigned long flags; - int ret; - - if (!dev->base_addr || !dev->irq) { - return -ENODEV; - } - - if (!request_region(dev->base_addr, hw->io_extent, dev->name)) { - return -EAGAIN; - } - - hw->board.chanA.ctrlio=dev->base_addr + 5; - hw->board.chanA.dataio=dev->base_addr + 7; - - hw->board.irq=dev->irq; - hw->board.chanA.netdevice=dev; - hw->board.chanA.dev=&hw->board; - hw->board.name=dev->name; - hw->board.chanA.txdma=TX_DMA; - hw->board.chanA.rxdma=RX_DMA; - hw->board.chanA.irqs=&z8530_nop; - hw->board.chanB.irqs=&z8530_nop; - - if(request_irq(dev->irq, z8530_interrupt, SA_INTERRUPT, - dev->name, &hw->board)) { - printk(KERN_ERR "%s: unable to obtain irq %d\n", dev->name, - dev->irq); - ret=-EAGAIN; - goto irq_fail; - } - if(request_dma(TX_DMA,"LoCOMX (TX)")) { - printk(KERN_ERR "%s: unable to obtain TX DMA (DMA channel %d)\n", - dev->name, TX_DMA); - ret=-EAGAIN; - goto dma1_fail; - } - - if(request_dma(RX_DMA,"LoCOMX (RX)")) { - printk(KERN_ERR "%s: unable to obtain RX DMA (DMA channel %d)\n", - dev->name, RX_DMA); - ret=-EAGAIN; - goto dma2_fail; - } - - save_flags(flags); - cli(); - - if(z8530_init(&hw->board)!=0) - { - printk(KERN_ERR "%s: Z8530 device not found.\n",dev->name); - ret=-ENODEV; - goto z8530_fail; - } - - hw->board.chanA.dcdcheck=CTS; - - z8530_channel_load(&hw->board.chanA, z8530_hdlc_kilostream_85230); - z8530_channel_load(&hw->board.chanA, z8530_locomx); - z8530_channel_load(&hw->board.chanB, z8530_dead_port); - - z8530_describe(&hw->board, "I/O", dev->base_addr); - - if((ret=z8530_sync_dma_open(dev, &hw->board.chanA))!=0) { - goto z8530_fail; - } - - restore_flags(flags); - - - hw->board.active=1; - hw->board.chanA.rx_function=locomx_rx; - - ch->init_status |= HW_OPEN; - if (hw->board.chanA.status & DCD) { - ch->line_status |= LINE_UP; - } else { - ch->line_status &= ~LINE_UP; - } - - comx_status(dev, ch->line_status); - - init_timer(&hw->status_timer); - hw->status_timer.function=locomx_status_timerfun; - hw->status_timer.data=(unsigned long)dev; - hw->status_timer.expires=jiffies + ch->lineup_delay * HZ; - add_timer(&hw->status_timer); - - for (; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IO) == 0 || - strcmp(procfile->name, FILENAME_IRQ) == 0) { - procfile->mode = S_IFREG | 0444; - } - } - return 0; - -z8530_fail: - restore_flags(flags); - free_dma(RX_DMA); -dma2_fail: - free_dma(TX_DMA); -dma1_fail: - free_irq(dev->irq, &hw->board); -irq_fail: - release_region(dev->base_addr, hw->io_extent); - return ret; -} - -static int LOCOMX_close(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - - hw->board.chanA.rx_function=z8530_null_rx; - netif_stop_queue(dev); - z8530_sync_dma_close(dev, &hw->board.chanA); - - z8530_shutdown(&hw->board); - - del_timer(&hw->status_timer); - free_dma(RX_DMA); - free_dma(TX_DMA); - free_irq(dev->irq,&hw->board); - release_region(dev->base_addr,8); - - for (; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IO) == 0 || - strcmp(procfile->name, FILENAME_IRQ) == 0) { - procfile->mode = S_IFREG | 0644; - } - } - - ch->init_status &= ~HW_OPEN; - return 0; -} - -static int LOCOMX_statistics(struct net_device *dev,char *page) -{ - int len = 0; - - len += sprintf(page + len, "Hello\n"); - - return len; -} - -static int LOCOMX_dump(struct net_device *dev) { - printk(KERN_INFO "LOCOMX_dump called\n"); - return(-1); -} - -static int locomx_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - int len = 0; - - if (strcmp(file->name, FILENAME_IO) == 0) { - len = sprintf(page, "0x%x\n", (unsigned int)dev->base_addr); - } else if (strcmp(file->name, FILENAME_IRQ) == 0) { - len = sprintf(page, "%d\n", (unsigned int)dev->irq); - } else { - printk(KERN_ERR "hw_read_proc: internal error, filename %s\n", - file->name); - return -EBADF; - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) { - *eof = 1; - } - return min_t(int, count, len - off); -} - -static int locomx_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = (struct net_device *)entry->parent->data; - int val; - char *page; - - if (!(page = (char *)__get_free_page(GFP_KERNEL))) { - return -ENOMEM; - } - - if (copy_from_user(page, buffer, count = min_t(unsigned long, count, PAGE_SIZE))) { - free_page((unsigned long)page); - return -EBADF; - } - if (*(page + count - 1) == '\n') { - *(page + count - 1) = 0; - } - - if (strcmp(entry->name, FILENAME_IO) == 0) { - val = simple_strtoul(page, NULL, 0); - if (val != 0x360 && val != 0x368 && val != 0x370 && - val != 0x378) { - printk(KERN_ERR "LoCOMX: incorrect io address!\n"); - } else { - dev->base_addr = val; - } - } else if (strcmp(entry->name, FILENAME_IRQ) == 0) { - val = simple_strtoul(page, NULL, 0); - if (val != 3 && val != 4 && val != 5 && val != 6 && val != 7) { - printk(KERN_ERR "LoCOMX: incorrect irq value!\n"); - } else { - dev->irq = val; - } - } else { - printk(KERN_ERR "locomx_write_proc: internal error, filename %s\n", - entry->name); - free_page((unsigned long)page); - return -EBADF; - } - - free_page((unsigned long)page); - return count; -} - - - -static int LOCOMX_init(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct locomx_data *hw; - struct proc_dir_entry *new_file; - - /* Alloc data for private structure */ - if ((ch->HW_privdata = kmalloc(sizeof(struct locomx_data), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - - memset(hw = ch->HW_privdata, 0, sizeof(struct locomx_data)); - hw->io_extent = LOCOMX_IO_EXTENT; - - /* Register /proc files */ - if ((new_file = create_proc_entry(FILENAME_IO, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_HW_privdata; - } - new_file->data = (void *)new_file; - new_file->read_proc = &locomx_read_proc; - new_file->write_proc = &locomx_write_proc; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_IRQ, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_io; - } - new_file->data = (void *)new_file; - new_file->read_proc = &locomx_read_proc; - new_file->write_proc = &locomx_write_proc; - new_file->nlink = 1; - -/* No clock yet */ -/* - if ((new_file = create_proc_entry(FILENAME_CLOCK, S_IFREG | 0644, - ch->procdir)) == NULL) { - return -EIO; - } - new_file->data = (void *)new_file; - new_file->read_proc = &locomx_read_proc; - new_file->write_proc = &locomx_write_proc; - new_file->nlink = 1; -*/ - - ch->HW_access_board = NULL; - ch->HW_release_board = NULL; - ch->HW_txe = LOCOMX_txe; - ch->HW_open = LOCOMX_open; - ch->HW_close = LOCOMX_close; - ch->HW_send_packet = LOCOMX_send_packet; - ch->HW_statistics = LOCOMX_statistics; - ch->HW_set_clock = NULL; - - ch->current_stats = &hw->board.chanA.stats; - memcpy(ch->current_stats, &ch->stats, sizeof(struct net_device_stats)); - - dev->base_addr = LOCOMX_DEFAULT_IO; - dev->irq = LOCOMX_DEFAULT_IRQ; - - - /* O.K. Count one more user on this module */ - MOD_INC_USE_COUNT; - return 0; -cleanup_filename_io: - remove_proc_entry(FILENAME_IO, ch->procdir); -cleanup_HW_privdata: - kfree(ch->HW_privdata); - return -EIO; -} - - -static int LOCOMX_exit(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - - ch->HW_access_board = NULL; - ch->HW_release_board = NULL; - ch->HW_txe = NULL; - ch->HW_open = NULL; - ch->HW_close = NULL; - ch->HW_send_packet = NULL; - ch->HW_statistics = NULL; - ch->HW_set_clock = NULL; - memcpy(&ch->stats, ch->current_stats, sizeof(struct net_device_stats)); - ch->current_stats = &ch->stats; - - kfree(ch->HW_privdata); - - remove_proc_entry(FILENAME_IO, ch->procdir); - remove_proc_entry(FILENAME_IRQ, ch->procdir); -// remove_proc_entry(FILENAME_CLOCK, ch->procdir); - - MOD_DEC_USE_COUNT; - return 0; -} - -static struct comx_hardware locomx_hw = { - "locomx", - VERSION, - LOCOMX_init, - LOCOMX_exit, - LOCOMX_dump, - NULL -}; - -static int __init comx_hw_locomx_init(void) -{ - comx_register_hardware(&locomx_hw); - return 0; -} - -static void __exit comx_hw_locomx_exit(void) -{ - comx_unregister_hardware("locomx"); -} - -module_init(comx_hw_locomx_init); -module_exit(comx_hw_locomx_exit); diff -Nru a/drivers/net/wan/comx-hw-mixcom.c b/drivers/net/wan/comx-hw-mixcom.c --- a/drivers/net/wan/comx-hw-mixcom.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,960 +0,0 @@ -/* - * Hardware driver for the MixCom synchronous serial board - * - * Author: Gergely Madarasz - * - * based on skeleton driver code and a preliminary hscx driver by - * Tivadar Szemethy - * - * Copyright (C) 1998-1999 ITConsult-Pro Co. - * - * Contributors: - * Arnaldo Carvalho de Melo (0.65) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.60 (99/06/11): - * - ported to the kernel, now works as builtin code - * - * Version 0.61 (99/06/11): - * - recognize the one-channel MixCOM card (id byte = 0x13) - * - printk fixes - * - * Version 0.62 (99/07/15): - * - fixes according to the new hw docs - * - report line status when open - * - * Version 0.63 (99/09/21): - * - line status report fixes - * - * Version 0.64 (99/12/01): - * - some more cosmetical fixes - * - * Version 0.65 (00/08/15) - * - resource release on failure at MIXCOM_init - */ - -#define VERSION "0.65" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "comx.h" -#include "mixcom.h" -#include "hscx.h" - -MODULE_AUTHOR("Gergely Madarasz "); -MODULE_DESCRIPTION("Hardware-level driver for the serial port of the MixCom board"); -MODULE_LICENSE("GPL"); - -#define MIXCOM_DATA(d) ((struct mixcom_privdata *)(COMX_CHANNEL(d)-> \ - HW_privdata)) - -#define MIXCOM_BOARD_BASE(d) (d->base_addr - MIXCOM_SERIAL_OFFSET - \ - (1 - MIXCOM_DATA(d)->channel) * MIXCOM_CHANNEL_OFFSET) - -#define MIXCOM_DEV_BASE(port,channel) (port + MIXCOM_SERIAL_OFFSET + \ - (1 - channel) * MIXCOM_CHANNEL_OFFSET) - -/* Values used to set the IRQ line */ -static unsigned char mixcom_set_irq[]={0xFF, 0xFF, 0xFF, 0x0, 0xFF, 0x2, 0x4, 0x6, 0xFF, 0xFF, 0x8, 0xA, 0xC, 0xFF, 0xE, 0xFF}; - -static unsigned char* hscx_versions[]={"A1", NULL, "A2", NULL, "A3", "2.1"}; - -struct mixcom_privdata { - u16 clock; - char channel; - long txbusy; - struct sk_buff *sending; - unsigned tx_ptr; - struct sk_buff *recving; - unsigned rx_ptr; - unsigned char status; - char card_has_status; -}; - -static inline void wr_hscx(struct net_device *dev, int reg, unsigned char val) -{ - outb(val, dev->base_addr + reg); -} - -static inline unsigned char rd_hscx(struct net_device *dev, int reg) -{ - return inb(dev->base_addr + reg); -} - -static inline void hscx_cmd(struct net_device *dev, int cmd) -{ - unsigned long jiffs = jiffies; - unsigned char cec; - unsigned delay = 0; - - while ((cec = (rd_hscx(dev, HSCX_STAR) & HSCX_CEC) != 0) && - time_before(jiffies, jiffs + HZ)) { - udelay(1); - if (++delay > (100000 / HZ)) break; - } - if (cec) { - printk(KERN_WARNING "%s: CEC stuck, probably no clock!\n",dev->name); - } else { - wr_hscx(dev, HSCX_CMDR, cmd); - } -} - -static inline void hscx_fill_fifo(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - register word to_send = hw->sending->len - hw->tx_ptr; - - - outsb(dev->base_addr + HSCX_FIFO, - &(hw->sending->data[hw->tx_ptr]), min_t(unsigned int, to_send, 32)); - if (to_send <= 32) { - hscx_cmd(dev, HSCX_XTF | HSCX_XME); - kfree_skb(hw->sending); - hw->sending = NULL; - hw->tx_ptr = 0; - } else { - hscx_cmd(dev, HSCX_XTF); - hw->tx_ptr += 32; - } -} - -static inline void hscx_empty_fifo(struct net_device *dev, int cnt) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - - if (hw->recving == NULL) { - if (!(hw->recving = dev_alloc_skb(HSCX_MTU + 16))) { - ch->stats.rx_dropped++; - hscx_cmd(dev, HSCX_RHR); - } else { - skb_reserve(hw->recving, 16); - skb_put(hw->recving, HSCX_MTU); - } - hw->rx_ptr = 0; - } - if (cnt > 32 || !cnt || hw->recving == NULL) { - printk(KERN_ERR "hscx_empty_fifo: cnt is %d, hw->recving %p\n", - cnt, (void *)hw->recving); - return; - } - - insb(dev->base_addr + HSCX_FIFO, &(hw->recving->data[hw->rx_ptr]),cnt); - hw->rx_ptr += cnt; - hscx_cmd(dev, HSCX_RMC); -} - - -static int MIXCOM_txe(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - - return !test_bit(0, &hw->txbusy); -} - -static int mixcom_probe(struct net_device *dev) -{ - unsigned long flags; - int id, vstr, ret=0; - - save_flags(flags); cli(); - - id=inb_p(MIXCOM_BOARD_BASE(dev) + MIXCOM_ID_OFFSET) & 0x7f; - - if (id != MIXCOM_ID ) { - ret=-ENODEV; - printk(KERN_WARNING "%s: no MixCOM board found at 0x%04lx\n",dev->name, dev->base_addr); - goto out; - } - - vstr=inb_p(dev->base_addr + HSCX_VSTR) & 0x0f; - if(vstr>=sizeof(hscx_versions)/sizeof(char*) || - hscx_versions[vstr]==NULL) { - printk(KERN_WARNING "%s: board found but no HSCX chip detected at 0x%4lx (vstr = 0x%1x)\n",dev->name,dev->base_addr,vstr); - ret = -ENODEV; - } else { - printk(KERN_INFO "%s: HSCX chip version %s\n",dev->name,hscx_versions[vstr]); - ret = 0; - } - -out: - - restore_flags(flags); - return ret; -} - -#if 0 -static void MIXCOM_set_clock(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - - if (hw->clock) { - ; - } else { - ; - } -} -#endif - -static void mixcom_board_on(struct net_device *dev) -{ - outb_p(MIXCOM_OFF , MIXCOM_BOARD_BASE(dev) + MIXCOM_IT_OFFSET); - udelay(1000); - outb_p(mixcom_set_irq[dev->irq] | MIXCOM_ON, - MIXCOM_BOARD_BASE(dev) + MIXCOM_IT_OFFSET); - udelay(1000); -} - -static void mixcom_board_off(struct net_device *dev) -{ - outb_p(MIXCOM_OFF , MIXCOM_BOARD_BASE(dev) + MIXCOM_IT_OFFSET); - udelay(1000); -} - -static void mixcom_off(struct net_device *dev) -{ - wr_hscx(dev, HSCX_CCR1, 0x0); -} - -static void mixcom_on(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - wr_hscx(dev, HSCX_CCR1, HSCX_PU | HSCX_ODS | HSCX_ITF); // power up, push-pull - wr_hscx(dev, HSCX_CCR2, HSCX_CIE /* | HSCX_RIE */ ); - wr_hscx(dev, HSCX_MODE, HSCX_TRANS | HSCX_ADM8 | HSCX_RAC | HSCX_RTS ); - wr_hscx(dev, HSCX_RLCR, HSCX_RC | 47); // 1504 bytes - wr_hscx(dev, HSCX_MASK, HSCX_RSC | HSCX_TIN ); - hscx_cmd(dev, HSCX_XRES | HSCX_RHR); - - if (ch->HW_set_clock) ch->HW_set_clock(dev); - -} - -static int MIXCOM_send_packet(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - unsigned long flags; - - if (ch->debug_flags & DEBUG_HW_TX) { - comx_debug_bytes(dev, skb->data, skb->len, "MIXCOM_send_packet"); - } - - if (!(ch->line_status & LINE_UP)) { - return FRAME_DROPPED; - } - - if (skb->len > HSCX_MTU) { - ch->stats.tx_errors++; - return FRAME_ERROR; - } - - save_flags(flags); cli(); - - if (test_and_set_bit(0, &hw->txbusy)) { - printk(KERN_ERR "%s: transmitter called while busy... dropping frame (length %d)\n", dev->name, skb->len); - restore_flags(flags); - return FRAME_DROPPED; - } - - - hw->sending = skb; - hw->tx_ptr = 0; - hw->txbusy = 1; -// atomic_inc(&skb->users); // save it - hscx_fill_fifo(dev); - restore_flags(flags); - - ch->stats.tx_packets++; - ch->stats.tx_bytes += skb->len; - - if (ch->debug_flags & DEBUG_HW_TX) { - comx_debug(dev, "MIXCOM_send_packet was successful\n\n"); - } - - return FRAME_ACCEPTED; -} - -static inline void mixcom_receive_frame(struct net_device *dev) -{ - struct comx_channel *ch=dev->priv; - struct mixcom_privdata *hw=ch->HW_privdata; - register byte rsta; - register word length; - - rsta = rd_hscx(dev, HSCX_RSTA) & (HSCX_VFR | HSCX_RDO | - HSCX_CRC | HSCX_RAB); - length = ((rd_hscx(dev, HSCX_RBCH) & 0x0f) << 8) | - rd_hscx(dev, HSCX_RBCL); - - if ( length > hw->rx_ptr ) { - hscx_empty_fifo(dev, length - hw->rx_ptr); - } - - if (!(rsta & HSCX_VFR)) { - ch->stats.rx_length_errors++; - } - if (rsta & HSCX_RDO) { - ch->stats.rx_over_errors++; - } - if (!(rsta & HSCX_CRC)) { - ch->stats.rx_crc_errors++; - } - if (rsta & HSCX_RAB) { - ch->stats.rx_frame_errors++; - } - ch->stats.rx_packets++; - ch->stats.rx_bytes += length; - - if (rsta == (HSCX_VFR | HSCX_CRC) && hw->recving) { - skb_trim(hw->recving, hw->rx_ptr - 1); - if (ch->debug_flags & DEBUG_HW_RX) { - comx_debug_skb(dev, hw->recving, - "MIXCOM_interrupt receiving"); - } - hw->recving->dev = dev; - if (ch->LINE_rx) { - ch->LINE_rx(dev, hw->recving); - } - } - else if(hw->recving) { - kfree_skb(hw->recving); - } - hw->recving = NULL; - hw->rx_ptr = 0; -} - - -static inline void mixcom_extended_interrupt(struct net_device *dev) -{ - struct comx_channel *ch=dev->priv; - struct mixcom_privdata *hw=ch->HW_privdata; - register byte exir; - - exir = rd_hscx(dev, HSCX_EXIR) & (HSCX_XDU | HSCX_RFO | HSCX_CSC ); - - if (exir & HSCX_RFO) { - ch->stats.rx_over_errors++; - if (hw->rx_ptr) { - kfree_skb(hw->recving); - hw->recving = NULL; hw->rx_ptr = 0; - } - printk(KERN_ERR "MIXCOM: rx overrun\n"); - hscx_cmd(dev, HSCX_RHR); - } - - if (exir & HSCX_XDU) { // xmit underrun - ch->stats.tx_errors++; - ch->stats.tx_aborted_errors++; - if (hw->tx_ptr) { - kfree_skb(hw->sending); - hw->sending = NULL; - hw->tx_ptr = 0; - } - hscx_cmd(dev, HSCX_XRES); - clear_bit(0, &hw->txbusy); - if (ch->LINE_tx) { - ch->LINE_tx(dev); - } - printk(KERN_ERR "MIXCOM: tx underrun\n"); - } - - if (exir & HSCX_CSC) { - ch->stats.tx_carrier_errors++; - if ((rd_hscx(dev, HSCX_STAR) & HSCX_CTS) == 0) { // Vonal le - if (test_and_clear_bit(0, &ch->lineup_pending)) { - del_timer(&ch->lineup_timer); - } else if (ch->line_status & LINE_UP) { - ch->line_status &= ~LINE_UP; - if (ch->LINE_status) { - ch->LINE_status(dev,ch->line_status); - } - } - } - if (!(ch->line_status & LINE_UP) && (rd_hscx(dev, HSCX_STAR) & - HSCX_CTS)) { // Vonal fol - if (!test_and_set_bit(0,&ch->lineup_pending)) { - ch->lineup_timer.function = comx_lineup_func; - ch->lineup_timer.data = (unsigned long)dev; - ch->lineup_timer.expires = jiffies + HZ * - ch->lineup_delay; - add_timer(&ch->lineup_timer); - hscx_cmd(dev, HSCX_XRES); - clear_bit(0, &hw->txbusy); - if (hw->sending) { - kfree_skb(hw->sending); - } - hw->sending=NULL; - hw->tx_ptr = 0; - } - } - } -} - - -static irqreturn_t MIXCOM_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - unsigned long flags; - struct net_device *dev = (struct net_device *)dev_id; - struct comx_channel *ch, *twin_ch; - struct mixcom_privdata *hw, *twin_hw; - register unsigned char ista; - - if (dev==NULL) { - printk(KERN_ERR "comx_interrupt: irq %d for unknown device\n",irq); - return IRQ_NONE; - } - - ch = dev->priv; - hw = ch->HW_privdata; - - save_flags(flags); cli(); - - while((ista = (rd_hscx(dev, HSCX_ISTA) & (HSCX_RME | HSCX_RPF | - HSCX_XPR | HSCX_EXB | HSCX_EXA | HSCX_ICA)))) { - register byte ista2 = 0; - - if (ista & HSCX_RME) { - mixcom_receive_frame(dev); - } - if (ista & HSCX_RPF) { - hscx_empty_fifo(dev, 32); - } - if (ista & HSCX_XPR) { - if (hw->tx_ptr) { - hscx_fill_fifo(dev); - } else { - clear_bit(0, &hw->txbusy); - ch->LINE_tx(dev); - } - } - - if (ista & HSCX_EXB) { - mixcom_extended_interrupt(dev); - } - - if ((ista & HSCX_EXA) && ch->twin) { - mixcom_extended_interrupt(ch->twin); - } - - if ((ista & HSCX_ICA) && ch->twin && - (ista2 = rd_hscx(ch->twin, HSCX_ISTA) & - (HSCX_RME | HSCX_RPF | HSCX_XPR ))) { - if (ista2 & HSCX_RME) { - mixcom_receive_frame(ch->twin); - } - if (ista2 & HSCX_RPF) { - hscx_empty_fifo(ch->twin, 32); - } - if (ista2 & HSCX_XPR) { - twin_ch=ch->twin->priv; - twin_hw=twin_ch->HW_privdata; - if (twin_hw->tx_ptr) { - hscx_fill_fifo(ch->twin); - } else { - clear_bit(0, &twin_hw->txbusy); - ch->LINE_tx(ch->twin); - } - } - } - } - - restore_flags(flags); - return IRQ_HANDLED; -} - -static int MIXCOM_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - unsigned long flags; - int ret = -ENODEV; - - if (!dev->base_addr || !dev->irq) - goto err_ret; - - - if(hw->channel==1) { - if(!TWIN(dev) || !(COMX_CHANNEL(TWIN(dev))->init_status & - IRQ_ALLOCATED)) { - printk(KERN_ERR "%s: channel 0 not yet initialized\n",dev->name); - ret = -EAGAIN; - goto err_ret; - } - } - - - /* Is our hw present at all ? Not checking for channel 0 if it is already - open */ - if(hw->channel!=0 || !(ch->init_status & IRQ_ALLOCATED)) { - if (!request_region(dev->base_addr, MIXCOM_IO_EXTENT, dev->name)) { - ret = -EAGAIN; - goto err_ret; - } - if (mixcom_probe(dev)) { - ret = -ENODEV; - goto err_release_region; - } - } - - if(hw->channel==0 && !(ch->init_status & IRQ_ALLOCATED)) { - if (request_irq(dev->irq, MIXCOM_interrupt, 0, - dev->name, (void *)dev)) { - printk(KERN_ERR "MIXCOM: unable to obtain irq %d\n", dev->irq); - ret = -EAGAIN; - goto err_release_region; - } - } - - save_flags(flags); cli(); - - if(hw->channel==0 && !(ch->init_status & IRQ_ALLOCATED)) { - ch->init_status|=IRQ_ALLOCATED; - mixcom_board_on(dev); - } - - mixcom_on(dev); - - - hw->status=inb(MIXCOM_BOARD_BASE(dev) + MIXCOM_STATUS_OFFSET); - if(hw->status != 0xff) { - printk(KERN_DEBUG "%s: board has status register, good\n", dev->name); - hw->card_has_status=1; - } - - hw->txbusy = 0; - ch->init_status |= HW_OPEN; - - if (rd_hscx(dev, HSCX_STAR) & HSCX_CTS) { - ch->line_status |= LINE_UP; - } else { - ch->line_status &= ~LINE_UP; - } - - restore_flags(flags); - - ch->LINE_status(dev, ch->line_status); - - for (; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IO) == 0 || - strcmp(procfile->name, FILENAME_CHANNEL) == 0 || - strcmp(procfile->name, FILENAME_CLOCK) == 0 || - strcmp(procfile->name, FILENAME_IRQ) == 0) { - procfile->mode = S_IFREG | 0444; - } - } - - return 0; - -err_release_region: - release_region(dev->base_addr, MIXCOM_IO_EXTENT); -err_ret: - return ret; -} - -static int MIXCOM_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - unsigned long flags; - - - save_flags(flags); cli(); - - mixcom_off(dev); - - /* This is channel 0, twin is not open, we can safely turn off everything */ - if(hw->channel==0 && (!(TWIN(dev)) || - !(COMX_CHANNEL(TWIN(dev))->init_status & HW_OPEN))) { - mixcom_board_off(dev); - free_irq(dev->irq, dev); - release_region(dev->base_addr, MIXCOM_IO_EXTENT); - ch->init_status &= ~IRQ_ALLOCATED; - } - - /* This is channel 1, channel 0 has already been shutdown, we can release - this one too */ - if(hw->channel==1 && !(COMX_CHANNEL(TWIN(dev))->init_status & HW_OPEN)) { - if(COMX_CHANNEL(TWIN(dev))->init_status & IRQ_ALLOCATED) { - mixcom_board_off(TWIN(dev)); - free_irq(TWIN(dev)->irq, TWIN(dev)); - release_region(TWIN(dev)->base_addr, MIXCOM_IO_EXTENT); - COMX_CHANNEL(TWIN(dev))->init_status &= ~IRQ_ALLOCATED; - } - } - - /* the ioports for channel 1 can be safely released */ - if(hw->channel==1) { - release_region(dev->base_addr, MIXCOM_IO_EXTENT); - } - - restore_flags(flags); - - /* If we don't hold any hardware open */ - if(!(ch->init_status & IRQ_ALLOCATED)) { - for (; procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IO) == 0 || - strcmp(procfile->name, FILENAME_CHANNEL) == 0 || - strcmp(procfile->name, FILENAME_CLOCK) == 0 || - strcmp(procfile->name, FILENAME_IRQ) == 0) { - procfile->mode = S_IFREG | 0644; - } - } - } - - /* channel 0 was only waiting for us to close channel 1 - close it completely */ - - if(hw->channel==1 && !(COMX_CHANNEL(TWIN(dev))->init_status & HW_OPEN)) { - for (procfile=COMX_CHANNEL(TWIN(dev))->procdir->subdir; - procfile ; procfile = procfile->next) { - if (strcmp(procfile->name, FILENAME_IO) == 0 || - strcmp(procfile->name, FILENAME_CHANNEL) == 0 || - strcmp(procfile->name, FILENAME_CLOCK) == 0 || - strcmp(procfile->name, FILENAME_IRQ) == 0) { - procfile->mode = S_IFREG | 0644; - } - } - } - - ch->init_status &= ~HW_OPEN; - return 0; -} - -static int MIXCOM_statistics(struct net_device *dev,char *page) -{ - struct comx_channel *ch = dev->priv; - // struct mixcom_privdata *hw = ch->HW_privdata; - int len = 0; - - if(ch->init_status && IRQ_ALLOCATED) { - len += sprintf(page + len, "Mixcom board: hardware open\n"); - } - - return len; -} - -static int MIXCOM_dump(struct net_device *dev) { - return 0; -} - -static int mixcom_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - int len = 0; - - if (strcmp(file->name, FILENAME_IO) == 0) { - len = sprintf(page, "0x%x\n", - (unsigned int)MIXCOM_BOARD_BASE(dev)); - } else if (strcmp(file->name, FILENAME_IRQ) == 0) { - len = sprintf(page, "%d\n", (unsigned int)dev->irq); - } else if (strcmp(file->name, FILENAME_CLOCK) == 0) { - if (hw->clock) len = sprintf(page, "%d\n", hw->clock); - else len = sprintf(page, "external\n"); - } else if (strcmp(file->name, FILENAME_CHANNEL) == 0) { - len = sprintf(page, "%01d\n", hw->channel); - } else if (strcmp(file->name, FILENAME_TWIN) == 0) { - if (ch->twin) { - len = sprintf(page, "%s\n",ch->twin->name); - } else { - len = sprintf(page, "none\n"); - } - } else { - printk(KERN_ERR "mixcom_read_proc: internal error, filename %s\n", file->name); - return -EBADF; - } - - if (off >= len) { - *eof = 1; - return 0; - } - *start = page + off; - if (count >= len - off) *eof = 1; - return min_t(int, count, len - off); -} - - -static struct net_device *mixcom_twin_check(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *procfile = ch->procdir->parent->subdir; - struct mixcom_privdata *hw = ch->HW_privdata; - - struct net_device *twin; - struct comx_channel *ch_twin; - struct mixcom_privdata *hw_twin; - - - for ( ; procfile ; procfile = procfile->next) { - if(!S_ISDIR(procfile->mode)) continue; - - twin = procfile->data; - ch_twin = twin->priv; - hw_twin = ch_twin->HW_privdata; - - - if (twin != dev && dev->irq && dev->base_addr && - dev->irq == twin->irq && - ch->hardware == ch_twin->hardware && - dev->base_addr == twin->base_addr + - (1-2*hw->channel)*MIXCOM_CHANNEL_OFFSET && - hw->channel == (1 - hw_twin->channel)) { - if (!TWIN(twin) || TWIN(twin)==dev) { - return twin; - } - } - } - return NULL; -} - - -static void setup_twin(struct net_device* dev) -{ - - if(TWIN(dev) && TWIN(TWIN(dev))) { - TWIN(TWIN(dev))=NULL; - } - if ((TWIN(dev) = mixcom_twin_check(dev)) != NULL) { - if (TWIN(TWIN(dev)) && TWIN(TWIN(dev)) != dev) { - TWIN(dev)=NULL; - } else { - TWIN(TWIN(dev))=dev; - } - } -} - -static int mixcom_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = (struct net_device *)entry->parent->data; - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - char *page; - int value; - - if (!(page = (char *)__get_free_page(GFP_KERNEL))) { - return -ENOMEM; - } - - if (copy_from_user(page, buffer, count = min_t(unsigned long, count, PAGE_SIZE))) { - free_page((unsigned long)page); - return -EFAULT; - } - if (*(page + count - 1) == '\n') { - *(page + count - 1) = 0; - } - - if (strcmp(entry->name, FILENAME_IO) == 0) { - value = simple_strtoul(page, NULL, 0); - if (value != 0x180 && value != 0x280 && value != 0x380) { - printk(KERN_ERR "MIXCOM: incorrect io address!\n"); - } else { - dev->base_addr = MIXCOM_DEV_BASE(value,hw->channel); - } - } else if (strcmp(entry->name, FILENAME_IRQ) == 0) { - value = simple_strtoul(page, NULL, 0); - if (value < 0 || value > 15 || mixcom_set_irq[value]==0xFF) { - printk(KERN_ERR "MIXCOM: incorrect irq value!\n"); - } else { - dev->irq = value; - } - } else if (strcmp(entry->name, FILENAME_CLOCK) == 0) { - if (strncmp("ext", page, 3) == 0) { - hw->clock = 0; - } else { - int kbps; - - kbps = simple_strtoul(page, NULL, 0); - if (!kbps) { - hw->clock = 0; - } else { - hw->clock = kbps; - } - if (hw->clock < 32 || hw->clock > 2000) { - hw->clock = 0; - printk(KERN_ERR "MIXCOM: invalid clock rate!\n"); - } - } - if (ch->init_status & HW_OPEN && ch->HW_set_clock) { - ch->HW_set_clock(dev); - } - } else if (strcmp(entry->name, FILENAME_CHANNEL) == 0) { - value = simple_strtoul(page, NULL, 0); - if (value > 2) { - printk(KERN_ERR "Invalid channel number\n"); - } else { - dev->base_addr+=(hw->channel - value) * MIXCOM_CHANNEL_OFFSET; - hw->channel = value; - } - } else { - printk(KERN_ERR "hw_read_proc: internal error, filename %s\n", - entry->name); - return -EBADF; - } - - setup_twin(dev); - - free_page((unsigned long)page); - return count; -} - -static int MIXCOM_init(struct net_device *dev) { - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw; - struct proc_dir_entry *new_file; - - if ((ch->HW_privdata = kmalloc(sizeof(struct mixcom_privdata), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - - memset(hw = ch->HW_privdata, 0, sizeof(struct mixcom_privdata)); - - if ((new_file = create_proc_entry(FILENAME_IO, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_HW_privdata; - } - new_file->data = (void *)new_file; - new_file->read_proc = &mixcom_read_proc; - new_file->write_proc = &mixcom_write_proc; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_IRQ, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_io; - } - new_file->data = (void *)new_file; - new_file->read_proc = &mixcom_read_proc; - new_file->write_proc = &mixcom_write_proc; - new_file->nlink = 1; - -#if 0 - if ((new_file = create_proc_entry(FILENAME_CLOCK, S_IFREG | 0644, - ch->procdir)) == NULL) { - return -EIO; - } - new_file->data = (void *)new_file; - new_file->read_proc = &mixcom_read_proc; - new_file->write_proc = &mixcom_write_proc; - new_file->nlink = 1; -#endif - - if ((new_file = create_proc_entry(FILENAME_CHANNEL, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_irq; - } - new_file->data = (void *)new_file; - new_file->read_proc = &mixcom_read_proc; - new_file->write_proc = &mixcom_write_proc; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_TWIN, S_IFREG | 0444, - ch->procdir)) == NULL) { - goto cleanup_filename_channel; - } - new_file->data = (void *)new_file; - new_file->read_proc = &mixcom_read_proc; - new_file->write_proc = &mixcom_write_proc; - new_file->nlink = 1; - - setup_twin(dev); - - /* Fill in ch_struct hw specific pointers */ - ch->HW_access_board = NULL; - ch->HW_release_board = NULL; - ch->HW_txe = MIXCOM_txe; - ch->HW_open = MIXCOM_open; - ch->HW_close = MIXCOM_close; - ch->HW_send_packet = MIXCOM_send_packet; - ch->HW_statistics = MIXCOM_statistics; - ch->HW_set_clock = NULL; - - dev->base_addr = MIXCOM_DEV_BASE(MIXCOM_DEFAULT_IO,0); - dev->irq = MIXCOM_DEFAULT_IRQ; - - MOD_INC_USE_COUNT; - return 0; -cleanup_filename_channel: - remove_proc_entry(FILENAME_CHANNEL, ch->procdir); -cleanup_filename_irq: - remove_proc_entry(FILENAME_IRQ, ch->procdir); -cleanup_filename_io: - remove_proc_entry(FILENAME_IO, ch->procdir); -cleanup_HW_privdata: - kfree(ch->HW_privdata); - return -EIO; -} - -static int MIXCOM_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct mixcom_privdata *hw = ch->HW_privdata; - - if(hw->channel==0 && TWIN(dev)) { - return -EBUSY; - } - - if(hw->channel==1 && TWIN(dev)) { - TWIN(TWIN(dev))=NULL; - } - - kfree(ch->HW_privdata); - remove_proc_entry(FILENAME_IO, ch->procdir); - remove_proc_entry(FILENAME_IRQ, ch->procdir); -#if 0 - remove_proc_entry(FILENAME_CLOCK, ch->procdir); -#endif - remove_proc_entry(FILENAME_CHANNEL, ch->procdir); - remove_proc_entry(FILENAME_TWIN, ch->procdir); - - MOD_DEC_USE_COUNT; - return 0; -} - -static struct comx_hardware mixcomhw = { - "mixcom", - VERSION, - MIXCOM_init, - MIXCOM_exit, - MIXCOM_dump, - NULL -}; - -static int __init comx_hw_mixcom_init(void) -{ - return comx_register_hardware(&mixcomhw); -} - -static void __exit comx_hw_mixcom_exit(void) -{ - comx_unregister_hardware("mixcom"); -} - -module_init(comx_hw_mixcom_init); -module_exit(comx_hw_mixcom_exit); diff -Nru a/drivers/net/wan/comx-hw-munich.c b/drivers/net/wan/comx-hw-munich.c --- a/drivers/net/wan/comx-hw-munich.c Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,2854 +0,0 @@ -/* - * Hardware-level driver for the SliceCOM board for Linux kernels 2.4.X - * - * Current maintainer / latest changes: Pasztor Szilard - * - * Original author: Bartok Istvan - * Based on skeleton by Tivadar Szemethy - * - * 0.51: - * - port for 2.4.x - * - clean up some code, make it more portable - * - busted direct hardware access through mapped memory - * - fix a possible race - * - prevent procfs buffer overflow - * - * 0.50: - * - support for the pcicom board, lots of rearrangements - * - handle modem status lines - * - * 0.50a: - * - fix for falc version 1.0 - * - * 0.50b: T&t - * - fix for bad localbus - */ - -#define VERSION "0.51" -#define VERSIONSTR "SliceCOM v" VERSION ", 2002/01/07\n" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#define COMX_NEW - -#ifndef COMX_NEW -#include "../include/comx.h" -#include "../include/munich32x.h" -#include "../include/falc-lh.h" -#else -#include "comx.h" -#include "munich32x.h" -#include "falc-lh.h" -#endif - -MODULE_AUTHOR("Bartok Istvan , Gergely Madarasz , Szilard Pasztor "); -MODULE_DESCRIPTION("Hardware-level driver for the SliceCOM and PciCOM (WelCOM) adapters"); -MODULE_LICENSE("GPL"); -/* - * TODO: az ilyenek a comxhw.h -ban szoktak lenni, idovel menjenek majd oda: - */ - -#define FILENAME_BOARDNUM "boardnum" /* /proc/comx/comx0.1/boardnum */ -#define FILENAME_TIMESLOTS "timeslots" /* /proc/comx/comx0.1/timeslots */ -#define FILENAME_FRAMING "framing" /* /proc/comx/comx0.1/framing */ -#define FILENAME_LINECODE "linecode" /* /proc/comx/comx0.1/linecode */ -#define FILENAME_CLOCK_SOURCE "clock_source" /* /proc/comx/comx0.1/clock_source */ -#define FILENAME_LOOPBACK "loopback" /* /proc/comx/comx0.1/loopback */ -#define FILENAME_REG "reg" /* /proc/comx/comx0.1/reg */ -#define FILENAME_LBIREG "lbireg" /* /proc/comx/comx0.1/lbireg */ - -#define SLICECOM_BOARDNUM_DEFAULT 0 - -#define SLICECOM_FRAMING_CRC4 1 -#define SLICECOM_FRAMING_NO_CRC4 2 -#define SLICECOM_FRAMING_DEFAULT SLICECOM_FRAMING_CRC4 - -#define SLICECOM_LINECODE_HDB3 1 -#define SLICECOM_LINECODE_AMI 2 -#define SLICECOM_LINECODE_DEFAULT SLICECOM_LINECODE_HDB3 - -#define SLICECOM_CLOCK_SOURCE_LINE 1 -#define SLICECOM_CLOCK_SOURCE_INTERNAL 2 -#define SLICECOM_CLOCK_SOURCE_DEFAULT SLICECOM_CLOCK_SOURCE_LINE - -#define SLICECOM_LOOPBACK_NONE 1 -#define SLICECOM_LOOPBACK_LOCAL 2 -#define SLICECOM_LOOPBACK_REMOTE 3 -#define SLICECOM_LOOPBACK_DEFAULT SLICECOM_LOOPBACK_NONE - -#define MUNICH_VIRT(addr) (void *)(&bar1[addr]) - -struct slicecom_stringtable -{ - char *name; - int value; -}; - -/* A convention: keep "default" the last not NULL when reading from /proc, - "error" is an indication that something went wrong, we have an undefined value */ - -struct slicecom_stringtable slicecom_framings[] = -{ - {"crc4", SLICECOM_FRAMING_CRC4}, - {"no-crc4", SLICECOM_FRAMING_NO_CRC4}, - {"default", SLICECOM_FRAMING_DEFAULT}, - {"error", 0} -}; - -struct slicecom_stringtable slicecom_linecodes[] = -{ - {"hdb3", SLICECOM_LINECODE_HDB3}, - {"ami", SLICECOM_LINECODE_AMI}, - {"default", SLICECOM_LINECODE_DEFAULT}, - {"error", 0} -}; - -struct slicecom_stringtable slicecom_clock_sources[] = -{ - {"line", SLICECOM_CLOCK_SOURCE_LINE}, - {"internal", SLICECOM_CLOCK_SOURCE_INTERNAL}, - {"default", SLICECOM_CLOCK_SOURCE_DEFAULT}, - {"error", 0} -}; - -struct slicecom_stringtable slicecom_loopbacks[] = -{ - {"none", SLICECOM_LOOPBACK_NONE}, - {"local", SLICECOM_LOOPBACK_LOCAL}, - {"remote", SLICECOM_LOOPBACK_REMOTE}, - {"default", SLICECOM_LOOPBACK_DEFAULT}, - {"error", 0} -}; - -/* - * Some tunable values... - * - * Note: when tuning values which change the length of text in - * /proc/comx/comx[n]/status, keep in mind that it must be shorter then - * PAGESIZE ! - */ - -#define MAX_BOARDS 4 /* ezzel 4 kartya lehet a gepben: 0..3 */ -#define RX_DESC_MAX 8 /* Rx ring size, must be >= 4 */ -#define TX_DESC_MAX 4 /* Tx ring size, must be >= 2 */ - /* a sokkal hosszabb Tx ring mar ronthatja a nem-FIFO packet */ - /* schedulerek (fair queueing, stb.) hatekonysagat. */ -#define MAX_WORK 10 /* TOD: update the info max. ennyi-1 esemenyt dolgoz fel egy interrupt hivasnal */ - -/* - * These are tunable too, but don't touch them without fully understanding what is happening - */ - -#define UDELAY 20 /* We wait UDELAY usecs with disabled interrupts before and */ - /* after each command to avoid writing into each other's */ - /* ccb->action_spec. A _send_packet nem var, mert azt az */ - /* _interrupt()-bol is meghivhatja a LINE_tx() */ - -/* - * Just to avoid warnings about implicit declarations: - */ - -static int MUNICH_close(struct net_device *dev); -static struct comx_hardware slicecomhw; -static struct comx_hardware pcicomhw; - -static unsigned long flags; -static spinlock_t mister_lock = SPIN_LOCK_UNLOCKED; - -typedef volatile struct /* Time Slot Assignment */ -{ - u32 rxfillmask:8, // ----------------------------+------+ - // | | - rxchannel:5, // ----------------------+---+ | | - rti:1, // ---------------------+| | | | - res2:2, // -------------------++|| | | | - // |||| | | | - txfillmask:8, // ----------+------+ |||| | | | - // | | |||| | | | - txchannel:5, // ----+---+ | | |||| | | | - tti:1, // ---+| | | | |||| | | | - res1:2; // -++|| | | | |||| | | | - // 3 2 1 - // 10987654 32109876 54321098 76543210 -} timeslot_spec_t; - -typedef volatile struct /* Receive Descriptor */ -{ - u32 zero1:16, no:13, hi:1, hold:1, zero2:1; - - u32 next; - u32 data; - - u32 zero3:8, status:8, bno:13, zero4:1, c:1, fe:1; -} rx_desc_t; - -typedef volatile struct /* Transmit Descriptor */ -{ - u32 fnum:11, csm:1, no13:1, zero1:2, v110:1, no:13, hi:1, hold:1, fe:1; - - u32 next; - u32 data; - -} tx_desc_t; - -typedef volatile struct /* Channel Specification */ -{ - u32 iftf:1, mode:2, fa:1, trv:2, crc:1, inv:1, cs:1, tflag:7, ra:1, ro:1, - th:1, ta:1, to:1, ti:1, ri:1, nitbs:1, fit:1, fir:1, re:1, te:1, ch:1, - ifc:1, sfe:1, fe2:1; - - u32 frda; - u32 ftda; - - u32 itbs:6, zero1:26; - -} channel_spec_t; - -typedef volatile struct /* Configuration Control Block */ -{ - u32 action_spec; - u32 reserved1; - u32 reserved2; - timeslot_spec_t timeslot_spec[32]; - channel_spec_t channel_spec[32]; - u32 current_rx_desc[32]; - u32 current_tx_desc[32]; - u32 csa; /* Control Start Address. CSA = *CCBA; CCB = *CSA */ - /* MUNICH does it like: CCB = *( *CCBA ) */ -} munich_ccb_t; - -typedef volatile struct /* Entry in the interrupt queue */ -{ - u32 all; -} munich_intq_t; - -#define MUNICH_INTQLEN 63 /* Rx/Tx Interrupt Queue Length - (not the real len, but the TIQL/RIQL value) */ -#define MUNICH_INTQMAX ( 16*(MUNICH_INTQLEN+1) ) /* Rx/Tx/Periph Interrupt Queue size in munich_intq_t's */ -#define MUNICH_INTQSIZE ( 4*MUNICH_INTQMAX ) /* Rx/Tx/Periph Interrupt Queue size in bytes */ - -#define MUNICH_PIQLEN 4 /* Peripheral Interrupt Queue Length. Unlike the RIQL/TIQL, */ -#define MUNICH_PIQMAX ( 4*MUNICH_PIQLEN ) /* PIQL register needs it like this */ -#define MUNICH_PIQSIZE ( 4*MUNICH_PIQMAX ) - -typedef volatile u32 vol_u32; /* TOD: ezek megszunnek ha atirom readw()/writew()-re - kész */ -typedef volatile u8 vol_u8; - -typedef volatile struct /* counters of E1-errors and errored seconds, see rfc2495 */ -{ - /* use here only unsigned ints, we depend on it when calculating the sum for the last N intervals */ - - unsigned line_code_violations, /* AMI: bipolar violations, HDB3: hdb3 violations */ - path_code_violations, /* FAS errors and CRC4 errors */ - e_bit_errors, /* E-Bit Errors (the remote side received from us with CRC4-error) */ - slip_secs, /* number of seconds with (receive) Controlled Slip(s) */ - fr_loss_secs, /* number of seconds an Out Of Frame defect was detected */ - line_err_secs, /* number of seconds with one or more Line Code Violations */ - degraded_mins, /* Degraded Minute - the estimated error rate is >1E-6, but <1E-3 */ - errored_secs, /* Errored Second - at least one of these happened: - - Path Code Violation - - Out Of Frame defect - - Slip - - receiving AIS - - not incremented during an Unavailable Second */ - bursty_err_secs, /* Bursty Errored Second: (rfc2495 says it does not apply to E1) - - Path Code Violations >1, but <320 - - not a Severely Errored Second - - no AIS - - not incremented during an Unavailabla Second */ - severely_err_secs, /* Severely Errored Second: - - CRC4: >=832 Path COde Violations || >0 Out Of Frame defects - - noCRC4: >=2048 Line Code Violations - - not incremented during an Unavailable Second */ - unavail_secs; /* number of Unavailable Seconds. Unavailable state is said after: - - 10 contiguous Severely Errored Seconds - - or RAI || AIS || LOF || LOS - - (any) loopback has been set */ - - /* - * we do not strictly comply to the rfc: we do not retroactively reduce errored_secs, - * bursty_err_secs, severely_err_secs when 'unavailable state' is reached - */ - -} e1_stats_t; - -typedef volatile struct /* ezek board-adatok, nem lehetnek a slicecom_privdata -ban */ -{ - int use_count; /* num. of interfaces using the board */ - int irq; /* a kartya irq-ja. belemasoljuk a dev->irq -kba is, de csak hogy */ - /* szebb legyen az ifconfig outputja */ - /* ha != 0, az azt jelenti hogy az az irq most nekunk sikeresen */ - /* le van foglalva */ - struct pci_dev *pci; /* a kartya PCI strukturaja. NULL, ha nincs kartya */ - u32 *bar1; /* pci->base_address[0] ioremap()-ed by munich_probe(), */ - /* on x86 can be used both as a bus or virtual address. */ - /* These are the Munich's registers */ - u8 *lbi; /* pci->base_address[1] ioremap()-ed by munich_probe(), */ - /* this is a 256-byte range, the start of the LBI on the board */ - munich_ccb_t *ccb; /* virtual address of CCB */ - munich_intq_t *tiq; /* Tx Interrupt Queue */ - munich_intq_t *riq; /* Rx Interrupt Queue */ - munich_intq_t *piq; /* Peripheral Interrupt Queue (FALC interrupts arrive here) */ - int tiq_ptr, /* A 'current' helyek a tiq/riq/piq -ban. */ - riq_ptr, /* amikor feldolgoztam az interruptokat, a legelso ures */ - piq_ptr; /* interrupt_information szora mutatnak. */ - struct net_device *twins[32]; /* MUNICH channel -> network interface assignment */ - - unsigned long lastcheck; /* When were the Rx rings last checked. Time in jiffies */ - - struct timer_list modemline_timer; - char isx21; - char lineup; - char framing; /* a beallitasok tarolasa */ - char linecode; - char clock_source; - char loopback; - - char devname[30]; /* what to show in /proc/interrupts */ - unsigned histogram[MAX_WORK]; /* number of processed events in the interrupt loop */ - unsigned stat_pri_races; /* number of special events, we try to handle them */ - unsigned stat_pti_races; - unsigned stat_pri_races_missed; /* when it can not be handled, because of MAX_WORK */ - unsigned stat_pti_races_missed; - -#define SLICECOM_BOARD_INTERVALS_SIZE 97 - e1_stats_t intervals[SLICECOM_BOARD_INTERVALS_SIZE]; /* E1 line statistics */ - unsigned current_interval; /* pointer to the current interval */ - unsigned elapsed_seconds; /* elapsed seconds from the start of the current interval */ - unsigned ses_seconds; /* counter of contiguous Severely Errored Seconds */ - unsigned is_unavailable; /* set to 1 after 10 contiguous Severely Errored Seconds */ - unsigned no_ses_seconds; /* contiguous Severely Error -free seconds in unavail state */ - - unsigned deg_elapsed_seconds; /* for counting the 'Degraded Mins' */ - unsigned deg_cumulated_errors; - - struct module *owner; /* pointer to our module to avoid module load races */ -} munich_board_t; - -struct slicecom_privdata -{ - int busy; /* transmitter busy - number of packets in the Tx ring */ - int channel; /* Munich logical channel ('channel-group' in Cisco) */ - unsigned boardnum; - u32 timeslots; /* i-th bit means i-th timeslot is our */ - - int tx_ring_hist[TX_DESC_MAX]; /* histogram: number of packets in Tx ring when _send_packet is called */ - - tx_desc_t tx_desc[TX_DESC_MAX]; /* the ring of Tx descriptors */ - u8 tx_data[TX_DESC_MAX][TXBUFFER_SIZE]; /* buffers for data to transmit */ - int tx_desc_ptr; /* hanyadik descriptornal tartunk a beirassal */ - /* ahol ez all, oda irtunk utoljara */ - - rx_desc_t rx_desc[RX_DESC_MAX]; /* the ring of Rx descriptors */ - u8 rx_data[RX_DESC_MAX][RXBUFFER_SIZE]; /* buffers for received data */ - int rx_desc_ptr; /* hanyadik descriptornal tartunk az olvasassal */ - - int rafutott; -}; - -static u32 reg, reg_ertek; /* why static: don't write stack trash into regs if strtoul() fails */ -static u32 lbireg; -static u8 lbireg_ertek; /* why static: don't write stack trash into regs if strtoul() fails */ - -static munich_board_t slicecom_boards[MAX_BOARDS]; -static munich_board_t pcicom_boards[MAX_BOARDS]; - -/* - * Reprogram Idle Channel Registers in the FALC - send special code in not used channels - * Should be called from the open and close, when the timeslot assignment changes - */ - -void rework_idle_channels(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - munich_board_t *board = slicecom_boards + hw->boardnum; - munich_ccb_t *ccb = board->ccb; - - u8 *lbi = board->lbi; - int i, j, tmp; - - - spin_lock_irqsave(&mister_lock, flags); - - for (i = 0; i < 4; i++) - { - tmp = 0xFF; - for (j = 0; j < 8; j++) - if (ccb->timeslot_spec[8 * i + j].tti == 0) tmp ^= (0x80 >> j); - writeb(tmp, lbi + 0x30 + i); - } - - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * Set PCM framing - /proc/comx/comx0/framing - */ - -void slicecom_set_framing(int boardnum, int value) -{ - u8 *lbi = slicecom_boards[boardnum].lbi; - - spin_lock_irqsave(&mister_lock, flags); - - slicecom_boards[boardnum].framing = value; - switch (value) - { - case SLICECOM_FRAMING_CRC4: - writeb(readb(lbi + FMR1) | 8, lbi + FMR1); - writeb((readb(lbi + FMR2) & 0x3f) | 0x80, lbi + FMR2); - break; - case SLICECOM_FRAMING_NO_CRC4: - writeb(readb(lbi + FMR1) & 0xf7, lbi + FMR1); - writeb(readb(lbi + FMR2) & 0x3f, lbi + FMR2); - break; - default: - printk("slicecom: board %d: unhandled " FILENAME_FRAMING - " value %d\n", boardnum, value); - } - - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * Set PCM linecode - /proc/comx/comx0/linecode - */ - -void slicecom_set_linecode(int boardnum, int value) -{ - u8 *lbi = slicecom_boards[boardnum].lbi; - - spin_lock_irqsave(&mister_lock, flags); - - slicecom_boards[boardnum].linecode = value; - switch (value) - { - case SLICECOM_LINECODE_HDB3: - writeb(readb(lbi + FMR0) | 0xf0, lbi + FMR0); - break; - case SLICECOM_LINECODE_AMI: - writeb((readb(lbi + FMR0) & 0x0f) | 0xa0, lbi + FMR0); - break; - default: - printk("slicecom: board %d: unhandled " FILENAME_LINECODE - " value %d\n", boardnum, value); - } - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * Set PCM clock source - /proc/comx/comx0/clock_source - */ - -void slicecom_set_clock_source(int boardnum, int value) -{ - u8 *lbi = slicecom_boards[boardnum].lbi; - - spin_lock_irqsave(&mister_lock, flags); - - slicecom_boards[boardnum].clock_source = value; - switch (value) - { - case SLICECOM_CLOCK_SOURCE_LINE: - writeb(readb(lbi + LIM0) & ~1, lbi + LIM0); - break; - case SLICECOM_CLOCK_SOURCE_INTERNAL: - writeb(readb(lbi + LIM0) | 1, lbi + LIM0); - break; - default: - printk("slicecom: board %d: unhandled " FILENAME_CLOCK_SOURCE - " value %d\n", boardnum, value); - } - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * Set loopbacks - /proc/comx/comx0/loopback - */ - -void slicecom_set_loopback(int boardnum, int value) -{ - u8 *lbi = slicecom_boards[boardnum].lbi; - - spin_lock_irqsave(&mister_lock, flags); - - slicecom_boards[boardnum].loopback = value; - switch (value) - { - case SLICECOM_LOOPBACK_NONE: - writeb(readb(lbi + LIM0) & ~2, lbi + LIM0); /* Local Loop OFF */ - writeb(readb(lbi + LIM1) & ~2, lbi + LIM1); /* Remote Loop OFF */ - break; - case SLICECOM_LOOPBACK_LOCAL: - writeb(readb(lbi + LIM1) & ~2, lbi + LIM1); /* Remote Loop OFF */ - writeb(readb(lbi + LIM0) | 2, lbi + LIM0); /* Local Loop ON */ - break; - case SLICECOM_LOOPBACK_REMOTE: - writeb(readb(lbi + LIM0) & ~2, lbi + LIM0); /* Local Loop OFF */ - writeb(readb(lbi + LIM1) | 2, lbi + LIM1); /* Remote Loop ON */ - break; - default: - printk("slicecom: board %d: unhandled " FILENAME_LOOPBACK - " value %d\n", boardnum, value); - } - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * Update E1 line status LEDs on the adapter - */ - -void slicecom_update_leds(munich_board_t * board) -{ - u32 *bar1 = board->bar1; - u8 *lbi = board->lbi; - u8 frs0; - u32 leds; - int i; - - spin_lock_irqsave(&mister_lock, flags); - - leds = 0; - frs0 = readb(lbi + FRS0); /* FRS0 bits described on page 137 */ - - if (!(frs0 & 0xa0)) - { - leds |= 0x2000; /* Green LED: Input signal seems to be OK, no LOS, no LFA */ - if (frs0 & 0x10) - leds |= 0x8000; /* Red LED: Receiving Remote Alarm */ - } - writel(leds, MUNICH_VIRT(GPDATA)); - - if (leds == 0x2000 && !board->lineup) - { /* line up */ - board->lineup = 1; - for (i = 0; i < 32; i++) - { - if (board->twins[i] && (board->twins[i]->flags & IFF_RUNNING)) - { - struct comx_channel *ch = board->twins[i]->priv; - - if (!test_and_set_bit(0, &ch->lineup_pending)) - { - ch->lineup_timer.function = comx_lineup_func; - ch->lineup_timer.data = (unsigned long)board->twins[i]; - ch->lineup_timer.expires = jiffies + HZ * ch->lineup_delay; - add_timer(&ch->lineup_timer); - } - } - } - } - else if (leds != 0x2000 && board->lineup) - { /* line down */ - board->lineup = 0; - for (i = 0; i < 32; i++) - if (board->twins[i] && (board->twins[i]->flags & IFF_RUNNING)) - { - struct comx_channel *ch = board->twins[i]->priv; - - if (test_and_clear_bit(0, &ch->lineup_pending)) - del_timer(&ch->lineup_timer); - else if (ch->line_status & LINE_UP) - { - ch->line_status &= ~LINE_UP; - if (ch->LINE_status) - ch->LINE_status(board->twins[i], ch->line_status); - } - } - } - spin_unlock_irqrestore(&mister_lock, flags); -} - -/* - * This function gets called every second when the FALC issues the interrupt. - * Hardware counters contain error counts for last 1-second time interval. - * We add them to the global counters here. - * Read rfc2495 to understand this. - */ - -void slicecom_update_line_counters(munich_board_t * board) -{ - e1_stats_t *curr_int = &board->intervals[board->current_interval]; - - u8 *lbi = board->lbi; - - unsigned framing_errors, code_violations, path_code_violations, crc4_errors, - e_bit_errors; - unsigned slip_detected, /* this one has logical value, not the number of slips! */ - out_of_frame_defect, /* logical value */ - ais_defect, /* logical value */ - errored_sec, bursty_err_sec, severely_err_sec = 0, failure_sec; - u8 isr2, isr3, isr5, frs0; - - spin_lock_irqsave(&mister_lock, flags); - - isr2 = readb(lbi + ISR2); /* ISR0-5 described on page 156 */ - isr3 = readb(lbi + ISR3); - isr5 = readb(lbi + ISR5); - frs0 = readb(lbi + FRS0); /* FRS0 described on page 137 */ - - /* Error Events: */ - - code_violations = readb(lbi + CVCL) + (readb(lbi + CVCH) << 8); - framing_errors = readb(lbi + FECL) + (readb(lbi + FECH) << 8); - crc4_errors = readb(lbi + CEC1L) + (readb(lbi + CEC1H) << 8); - e_bit_errors = readb(lbi + EBCL) + (readb(lbi + EBCH) << 8); - slip_detected = isr3 & (ISR3_RSN | ISR3_RSP); - - path_code_violations = framing_errors + crc4_errors; - - curr_int->line_code_violations += code_violations; - curr_int->path_code_violations += path_code_violations; - curr_int->e_bit_errors += e_bit_errors; - - /* Performance Defects: */ - - /* there was an LFA in the last second, but maybe disappeared: */ - out_of_frame_defect = (isr2 & ISR2_LFA) || (frs0 & FRS0_LFA); - - /* there was an AIS in the last second, but maybe disappeared: */ - ais_defect = (isr2 & ISR2_AIS) || (frs0 & FRS0_AIS); - - /* Performance Parameters: */ - - if (out_of_frame_defect) - curr_int->fr_loss_secs++; - if (code_violations) - curr_int->line_err_secs++; - - errored_sec = ((board->framing == SLICECOM_FRAMING_NO_CRC4) && - (code_violations)) || path_code_violations || - out_of_frame_defect || slip_detected || ais_defect; - - bursty_err_sec = !out_of_frame_defect && !ais_defect && - (path_code_violations > 1) && (path_code_violations < 320); - - switch (board->framing) - { - case SLICECOM_FRAMING_CRC4: - severely_err_sec = out_of_frame_defect || - (path_code_violations >= 832); - break; - case SLICECOM_FRAMING_NO_CRC4: - severely_err_sec = (code_violations >= 2048); - break; - } - - /* - * failure_sec: true if there was a condition leading to a failure - * (and leading to unavailable state) in this second: - */ - - failure_sec = (isr2 & ISR2_RA) || (frs0 & FRS0_RRA) /* Remote/Far End/Distant Alarm Failure */ - || ais_defect || out_of_frame_defect /* AIS or LOF Failure */ - || (isr2 & ISR2_LOS) || (frs0 & FRS0_LOS) /* Loss Of Signal Failure */ - || (board->loopback != SLICECOM_LOOPBACK_NONE); /* Loopback has been set */ - - if (board->is_unavailable) - { - if (severely_err_sec) - board->no_ses_seconds = 0; - else - board->no_ses_seconds++; - - if ((board->no_ses_seconds >= 10) && !failure_sec) - { - board->is_unavailable = 0; - board->ses_seconds = 0; - board->no_ses_seconds = 0; - } - } - else - { - if (severely_err_sec) - board->ses_seconds++; - else - board->ses_seconds = 0; - - if ((board->ses_seconds >= 10) || failure_sec) - { - board->is_unavailable = 1; - board->ses_seconds = 0; - board->no_ses_seconds = 0; - } - } - - if (board->is_unavailable) - curr_int->unavail_secs++; - else - { - if (slip_detected) - curr_int->slip_secs++; - curr_int->errored_secs += errored_sec; - curr_int->bursty_err_secs += bursty_err_sec; - curr_int->severely_err_secs += severely_err_sec; - } - - /* the RFC does not say clearly which errors to count here, we try to count bit errors */ - - if (!board->is_unavailable && !severely_err_sec) - { - board->deg_cumulated_errors += code_violations; - board->deg_elapsed_seconds++; - if (board->deg_elapsed_seconds >= 60) - { - if (board->deg_cumulated_errors >= 123) - curr_int->degraded_mins++; - board->deg_cumulated_errors = 0; - board->deg_elapsed_seconds = 0; - } - - } - - board->elapsed_seconds++; - if (board->elapsed_seconds >= 900) - { - board->current_interval = - (board->current_interval + 1) % SLICECOM_BOARD_INTERVALS_SIZE; - memset((void *)&board->intervals[board->current_interval], 0, - sizeof(e1_stats_t)); - board->elapsed_seconds = 0; - } - - spin_unlock_irqrestore(&mister_lock, flags); -} - -static void pcicom_modemline(unsigned long b) -{ - munich_board_t *board = (munich_board_t *) b; - struct net_device *dev = board->twins[0]; - struct comx_channel *ch = netdev_priv(dev); - unsigned long regs; - - regs = readl((void *)(&board->bar1[GPDATA])); - if ((ch->line_status & LINE_UP) && (regs & 0x0800)) - { - ch->line_status &= ~LINE_UP; - board->lineup = 0; - if (ch->LINE_status) - { - ch->LINE_status(dev, ch->line_status); - } - } - - if (!(ch->line_status & LINE_UP) && !(regs & 0x0800)) - { - ch->line_status |= LINE_UP; - board->lineup = 1; - if (ch->LINE_status) - { - ch->LINE_status(dev, ch->line_status); - } - } - - mod_timer((struct timer_list *)&board->modemline_timer, jiffies + HZ); -} - -/* - * Is it possible to transmit ? - * Called (may be called) by the protocol layer - */ - -static int MUNICH_txe(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - - return (hw->busy < TX_DESC_MAX - 1); -} - -/* - * Hw probe function. Detects all the boards in the system, - * and fills up slicecom_boards[] and pcicom_boards[] - * Returns 0 on success. - * We do not disable interrupts! - */ -static int munich_probe(void) -{ - struct pci_dev *pci; - int boardnum; - int slicecom_boardnum; - int pcicom_boardnum; - u32 *bar1; - u8 *lbi; - munich_board_t *board; - - for (boardnum = 0; boardnum < MAX_BOARDS; boardnum++) - { - pcicom_boards[boardnum].pci = 0; - pcicom_boards[boardnum].bar1 = 0; - pcicom_boards[boardnum].lbi = 0; - slicecom_boards[boardnum].pci = 0; - slicecom_boards[boardnum].bar1 = 0; - slicecom_boards[boardnum].lbi = 0; - } - - pci = NULL; - board = NULL; - slicecom_boardnum = 0; - pcicom_boardnum = 0; - - for (boardnum = 0; - boardnum < MAX_BOARDS && (pci = pci_find_device(PCI_VENDOR_ID_SIEMENS, - PCI_DEVICE_ID_SIEMENS_MUNICH32X, pci)); boardnum++) - { - if (pci_enable_device(pci)) - continue; - - printk("munich_probe: munich chip found, IRQ %d\n", pci->irq); - - bar1 = ioremap_nocache(pci->resource[0].start, 0x100); - lbi = ioremap_nocache(pci->resource[1].start, 0x100); - - if (bar1 && lbi) - { - pci_write_config_dword(pci, MUNICH_PCI_PCIRES, 0xe0000); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - pci_write_config_dword(pci, MUNICH_PCI_PCIRES, 0); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - /* check the type of the card */ - writel(LREG0_MAGIC, MUNICH_VIRT(LREG0)); - writel(LREG1_MAGIC, MUNICH_VIRT(LREG1)); - writel(LREG2_MAGIC, MUNICH_VIRT(LREG2)); - writel(LREG3_MAGIC, MUNICH_VIRT(LREG3)); - writel(LREG4_MAGIC, MUNICH_VIRT(LREG4)); - writel(LREG5_MAGIC, MUNICH_VIRT(LREG5)); - writel(LCONF_MAGIC2,MUNICH_VIRT(LCONF)); /* enable the DMSM */ - - if ((readb(lbi + VSTR) == 0x13) || (readb(lbi + VSTR) == 0x10)) - { - board = slicecom_boards + slicecom_boardnum; - sprintf((char *)board->devname, "slicecom%d", - slicecom_boardnum); - board->isx21 = 0; - slicecom_boardnum++; - } - else if ((readb(lbi + VSTR) == 0x6) || (readb(lbi + GIS) == 0x6)) - { - board = pcicom_boards + pcicom_boardnum; - sprintf((char *)board->devname, "pcicom%d", pcicom_boardnum); - board->isx21 = 1; - pcicom_boardnum++; - } - if (board) - { - printk("munich_probe: %s board found\n", board->devname); - writel(LCONF_MAGIC1, MUNICH_VIRT(LCONF)); /* reset the DMSM */ - board->pci = pci; - board->bar1 = bar1; - board->lbi = lbi; - board->framing = SLICECOM_FRAMING_DEFAULT; - board->linecode = SLICECOM_LINECODE_DEFAULT; - board->clock_source = SLICECOM_CLOCK_SOURCE_DEFAULT; - board->loopback = SLICECOM_LOOPBACK_DEFAULT; - board->owner = THIS_MODULE; - } - else - { - printk("munich_probe: Board error, VSTR: %02X\n", - readb(lbi + VSTR)); - iounmap((void *)bar1); - iounmap((void *)lbi); - } - } - else - { - printk("munich_probe: ioremap() failed, not enabling this board!\n"); - /* .pci = NULL, so the MUNICH_open will not try to open it */ - if (bar1) iounmap((void *)bar1); - if (lbi) iounmap((void *)lbi); - } - } - - if (!pci && !boardnum) - { - printk("munich_probe: no PCI present!\n"); - return -ENODEV; - } - - if (pcicom_boardnum + slicecom_boardnum == 0) - { - printk - ("munich_probe: Couldn't find any munich board: vendor:device %x:%x not found\n", - PCI_VENDOR_ID_SIEMENS, PCI_DEVICE_ID_SIEMENS_MUNICH32X); - return -ENODEV; - } - - /* Found some */ - if (pcicom_boardnum) - printk("%d pcicom board(s) found.\n", pcicom_boardnum); - if (slicecom_boardnum) - printk("%d slicecom board(s) found.\n", slicecom_boardnum); - - return 0; -} - -/* - * Reset the hardware. Get called only from within this module if needed. - */ -#if 0 -static int slicecom_reset(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - - printk("slicecom_reset: resetting the hardware\n"); - - /* Begin to reset the hardware */ - - if (ch->HW_set_clock) - ch->HW_set_clock(dev); - - /* And finish it */ - - return 0; -} -#endif - -/* - * Transmit a packet. - * Called by the protocol layer - * Return values: - * FRAME_ACCEPTED: frame is being transmited, transmitter is busy - * FRAME_QUEUED: frame is being transmitted, there's more room in - * the transmitter for additional packet(s) - * FRAME_ERROR: - * FRAME_DROPPED: there was some error - */ - -static int MUNICH_send_packet(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - - /* Send it to the debug facility too if needed: */ - - if (ch->debug_flags & DEBUG_HW_TX) - comx_debug_bytes(dev, skb->data, skb->len, "MUNICH_send_packet"); - - /* If the line is inactive, don't accept: */ - - /* TODO: atgondolni hogy mi is legyen itt */ - /* if (!(ch->line_status & LINE_UP)) return FRAME_DROPPED; */ - - /* More check, to be sure: */ - - if (skb->len > TXBUFFER_SIZE) - { - ch->stats.tx_errors++; - kfree_skb(skb); - return FRAME_ERROR; - } - - /* Maybe you have to disable irq's while programming the hw: */ - - spin_lock_irqsave(&mister_lock, flags); - - /* And more check: */ - - if (hw->busy >= TX_DESC_MAX - 1) - { - printk(KERN_ERR - "%s: Transmitter called while busy... dropping frame, busy = %d\n", - dev->name, hw->busy); - spin_unlock_irqrestore(&mister_lock, flags); - kfree_skb(skb); - return FRAME_DROPPED; - } - - if (hw->busy >= 0) - hw->tx_ring_hist[hw->busy]++; - /* DELL: */ - else - printk("slicecom: %s: FATAL: busy = %d\n", dev->name, hw->busy); - -// /* DEL: */ -// printk("slicecom: %s: _send_packet called, busy = %d\n", dev->name, hw->busy ); - - /* Packet can go, update stats: */ - - ch->stats.tx_packets++; - ch->stats.tx_bytes += skb->len; - - /* Pass the packet to the HW: */ - /* Step forward with the transmit descriptors: */ - - hw->tx_desc_ptr = (hw->tx_desc_ptr + 1) % TX_DESC_MAX; - - memcpy(&(hw->tx_data[hw->tx_desc_ptr][0]), skb->data, skb->len); - hw->tx_desc[hw->tx_desc_ptr].no = skb->len; - - /* We don't issue any command, just step with the HOLD bit */ - - hw->tx_desc[hw->tx_desc_ptr].hold = 1; - hw->tx_desc[(hw->tx_desc_ptr + TX_DESC_MAX - 1) % TX_DESC_MAX].hold = 0; - -#ifdef COMX_NEW - dev_kfree_skb(skb); -#endif - /* csomag kerult a Tx ringbe: */ - - hw->busy++; - - /* Report it: */ - - if (ch->debug_flags & DEBUG_HW_TX) - comx_debug(dev, "%s: MUNICH_send_packet was successful\n\n", dev->name); - - if (hw->busy >= TX_DESC_MAX - 1) - { - spin_unlock_irqrestore(&mister_lock, flags); - return FRAME_ACCEPTED; - } - - spin_unlock_irqrestore(&mister_lock, flags); - - /* All done */ - - return FRAME_QUEUED; -} - -/* - * Interrupt handler routine. - * Called by the Linux kernel. - * BEWARE! The interrupts are enabled on the call! - */ -static irqreturn_t MUNICH_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - struct sk_buff *skb; - int length; - int rx_status; - int work; /* hany esemenyt kezeltem mar le */ - u32 *bar1; - u8 *lbi; - u32 stat, /* az esemenyek, amiket a ebben a loop korben le kell meg kezelni */ - race_stat = 0, /* race eseten ebben uzenek magamnak hogy mit kell meg lekezelni */ - ack; /* ezt fogom a vegen a STAT-ba irni, kiveszek belole 1-1 bitet ha */ - - /* az adott dolgot nem kell ack-olni mert volt vele munkam, es */ - /* legjobb ha visszaterek ide megegyszer */ - munich_intq_t int_info; - - struct net_device *dev; - struct comx_channel *ch; - struct slicecom_privdata *hw; - munich_board_t *board = (munich_board_t *) dev_id; - int channel; - - // , boardnum = (int)dev_id; - - // board = munich_boards + boardnum; - bar1 = board->bar1; - lbi = board->lbi; - - // Do not uncomment this under heavy load! :-> - // printk("MUNICH_interrupt: masked STAT=0x%08x, tiq=0x%08x, riq=0x%08x, piq=0x%08x\n", stat, board->tiq[0].all, board->riq[0].all, board->piq[0].all ); - - for (work = 0; (stat = (race_stat | (readl(MUNICH_VIRT(STAT)) & ~STAT_NOT_HANDLED_BY_INTERRUPT))) && (work < MAX_WORK - 1); work++) - { - ack = stat & (STAT_PRI | STAT_PTI | STAT_LBII); - - /* Handle the interrupt information in the Rx queue. We don't really trust */ - /* info from this queue, because it can be overflowed, so later check */ - /* every Rx ring for received packets. But there are some errors which can't */ - /* be counted from the Rx rings, so we parse it. */ - - int_info = board->riq[board->riq_ptr]; - if (int_info.all & 0xF0000000) /* ha ez nem 0, akkor itt interrupt_info van */ - { - ack &= ~STAT_PRI; /* don't ack the interrupt, we had some work to do */ - - channel = PCM_INT_CHANNEL(int_info.all); - dev = board->twins[channel]; - - if (dev == NULL) - { - printk - ("MUNICH_interrupt: got an Rx interrupt info for NULL device " - "%s.twins[%d], int_info = 0x%08x\n", board->devname, - channel, int_info.all); - goto go_for_next_interrupt; - } - - ch = netdev_priv(dev); - hw = (struct slicecom_privdata *)ch->HW_privdata; - - // printk("Rx STAT=0x%08x int_info=0x%08x rx_desc_ptr=%d rx_desc.status=0x%01x\n", - // stat, int_info.all, hw->rx_desc_ptr, hw->rx_desc[ hw->rx_desc_ptr ].status ); - - if (int_info.all & PCM_INT_HI) - printk("SliceCOM: %s: Host Initiated interrupt\n", dev->name); - if (int_info.all & PCM_INT_IFC) - printk("SliceCOM: %s: Idle/Flag Change\n", dev->name); - /* TOD: jo ez az Idle/Flag Change valamire? - azonnal latszik belole hogy mikor ad a masik oldal */ - /* TOD: ilyen IT most nem is jon, mert ki van maszkolva az interrupt, biztosan kell ez? */ - - if (int_info.all & PCM_INT_FO) - /* Internal buffer (RB) overrun */ - ch->stats.rx_over_errors++; /* TOD: Ez azt jelenti hogy a belso RB nem volt hozzaferheto, es ezert kihagyott valamit. De nem csak csomag lehetett, hanem esemeny, stb. is. lasd page 247. Ezzel a 'cat status'-hoz igazodok, de a netdevice.h szerint nem egyertelmu hogy ide ez kellene. Nem lehet hogy rx_missed ? */ - /* DE: nem gotozok sehova, elvileg jo igy */ - /* kesobb meg visszaterek az FO-ra, ha packet-FO volt. Keresd a "packet-FO"-t. */ - if (int_info.all & PCM_INT_FI) /* frame received, but we do not trust the int_info queue */ - if (int_info.all & PCM_INT_SF) - { /* Short Frame: rovidebb mint a CRC */ - /* "rovidebb mint CRC+2byte" vizsgalat a "CRC+2"-nel */ - ch->stats.rx_length_errors++; /* TOD: noveljem? ne noveljem? */ - goto go_for_next_interrupt; - } - - go_for_next_interrupt: /* One step in the interrupt queue */ - board->riq[board->riq_ptr].all = 0; /* megjelolom hogy itt meg nem jart a hw */ - board->riq_ptr = (board->riq_ptr + 1) % MUNICH_INTQMAX; - - } - - /* Check every Rx ring for incomed packets: */ - - for (channel = 0; channel < 32; channel++) - { - dev = board->twins[channel]; - - if (dev != NULL) - { - ch = netdev_priv(dev); - hw = (struct slicecom_privdata *)ch->HW_privdata; - - rx_status = hw->rx_desc[hw->rx_desc_ptr].status; - - if (!(rx_status & 0x80)) /* mar jart itt a hardver */ - { - ack &= ~STAT_PRI; /* Don't ack, we had some work */ - - /* Ez most egy kicsit zuros, mert itt mar nem latom az int_infot */ - if (rx_status & RX_STATUS_ROF) - ch->stats.rx_over_errors++; /* TOD: 'cat status'-hoz igazodok */ - - if (rx_status & RX_STATUS_RA) - /* Abort received or issued on channel */ - ch->stats.rx_frame_errors++; /* or HOLD bit in the descriptor */ - /* TOD: 'cat status'-hoz igazodok */ - - if (rx_status & RX_STATUS_LFD) - { /* Long Frame (longer then MFL in the MODE1) */ - ch->stats.rx_length_errors++; - goto go_for_next_frame; - } - - if (rx_status & RX_STATUS_NOB) - { /* Not n*8 bits long frame - frame alignment */ - ch->stats.rx_frame_errors++; /* ez viszont nem igazodik a 'cat status'-hoz */ - goto go_for_next_frame; - } - - if (rx_status & RX_STATUS_CRCO) - { /* CRC error */ - ch->stats.rx_crc_errors++; - goto go_for_next_frame; - } - - if (rx_status & RX_STATUS_SF) - { /* Short Frame: rovidebb mint CRC+2byte */ - ch->stats.rx_errors++; /* The HW does not set PCI_INT_ERR bit for this one, see page 246 */ - ch->stats.rx_length_errors++; - goto go_for_next_frame; - } - - if (rx_status != 0) - { - printk("SliceCOM: %s: unhandled rx_status: 0x%02x\n", - dev->name, rx_status); - goto go_for_next_frame; - } - - /* frame received without errors: */ - - length = hw->rx_desc[hw->rx_desc_ptr].bno; - ch->stats.rx_packets++; /* Count only 'good' packets */ - ch->stats.rx_bytes += length; - - /* Allocate a larger skb and reserve the heading for efficiency: */ - - if ((skb = dev_alloc_skb(length + 16)) == NULL) - { - ch->stats.rx_dropped++; - goto go_for_next_frame; - } - - /* Do bookkeeping: */ - - skb_reserve(skb, 16); - skb_put(skb, length); - skb->dev = dev; - - /* Now copy the data into the buffer: */ - - memcpy(skb->data, &(hw->rx_data[hw->rx_desc_ptr][0]), length); - - /* DEL: UGLY HACK!!!! */ - if (*((int *)skb->data) == 0x02000000 && - *(((int *)skb->data) + 1) == 0x3580008f) - { - printk("%s: swapping hack\n", dev->name); - *((int *)skb->data) = 0x3580008f; - *(((int *)skb->data) + 1) = 0x02000000; - } - - if (ch->debug_flags & DEBUG_HW_RX) - comx_debug_skb(dev, skb, "MUNICH_interrupt receiving"); - - /* Pass it to the protocol entity: */ - - ch->LINE_rx(dev, skb); - - go_for_next_frame: - /* DEL: rafutott-e a HOLD bitre -detektalas */ - { - if( ((rx_desc_t*)phys_to_virt(board->ccb->current_rx_desc[channel]))->hold - && ((rx_desc_t*)phys_to_virt(board->ccb->current_rx_desc[channel]))->status != 0xff) - hw->rafutott++; /* rafutott: hanyszor volt olyan hogy a current descriptoron HOLD bit volt, es a hw mar befejezte az irast (azaz a hw rafutott a HOLD bitre) */ - } - - // if( jiffies % 2 ) /* DELL: okozzunk egy kis Rx ring slipet :) */ - // { - /* Step forward with the receive descriptors: */ - /* if you change this, change the copy of it below too! Search for: "RxSlip" */ - hw->rx_desc[(hw->rx_desc_ptr + RX_DESC_MAX - 1) % RX_DESC_MAX].hold = 1; - hw->rx_desc[hw->rx_desc_ptr].status = 0xFF; /* megjelolom hogy itt meg nem jart a hw */ - hw->rx_desc[(hw->rx_desc_ptr + RX_DESC_MAX - 2) % RX_DESC_MAX].hold = 0; - hw->rx_desc_ptr = (hw->rx_desc_ptr + 1) % RX_DESC_MAX; - // } - } - } - } - - stat &= ~STAT_PRI; - -// } - -// if( stat & STAT_PTI ) /* TOD: primko megvalositas: mindig csak egy esemenyt dolgozok fel, */ - /* es nem torlom a STAT-ot, ezert ujra visszajon ide a rendszer. Amikor */ - /* jon interrupt, de nincs mit feldolgozni, akkor torlom a STAT-ot. */ - /* 'needs a rewrite', de elso megoldasnak jo lesz */ -// { - int_info = board->tiq[board->tiq_ptr]; - if (int_info.all & 0xF0000000) /* ha ez nem 0, akkor itt interrupt_info van */ - { - ack &= ~STAT_PTI; /* don't ack the interrupt, we had some work to do */ - - channel = PCM_INT_CHANNEL(int_info.all); - dev = board->twins[channel]; - - if (dev == NULL) - { - printk("MUNICH_interrupt: got a Tx interrupt for NULL device " - "%s.twins[%d], int_info = 0x%08x\n", - board->isx21 ? "pcicom" : "slicecom", channel, int_info.all); - goto go_for_next_tx_interrupt; - } - - ch = netdev_priv(dev); - hw = (struct slicecom_privdata *)ch->HW_privdata; - - // printk("Tx STAT=0x%08x int_info=0x%08x tiq_ptr=%d\n", stat, int_info.all, board->tiq_ptr ); - - if (int_info.all & PCM_INT_FE2) - { /* "Tx available" */ - /* do nothing */ - } - else if (int_info.all & PCM_INT_FO) - { /* Internal buffer (RB) overrun */ - ch->stats.rx_over_errors++; - } - else - { - printk("slicecom: %s: unhandled Tx int_info: 0x%08x\n", - dev->name, int_info.all); - } - - go_for_next_tx_interrupt: - board->tiq[board->tiq_ptr].all = 0; - board->tiq_ptr = (board->tiq_ptr + 1) % MUNICH_INTQMAX; - } - - /* Check every Tx ring for incoming packets: */ - - for (channel = 0; channel < 32; channel++) - { - dev = board->twins[channel]; - - if (dev != NULL) - { - int newbusy; - - ch = netdev_priv(dev); - hw = (struct slicecom_privdata *)ch->HW_privdata; - - /* We don't trust the "Tx available" info from the TIQ, but check */ - /* every ring if there is some free room */ - - if (ch->init_status && netif_running(dev)) - { - newbusy = ( TX_DESC_MAX + (& hw->tx_desc[ hw->tx_desc_ptr ]) - - (tx_desc_t*)phys_to_virt(board->ccb->current_tx_desc[ hw->channel ]) ) % TX_DESC_MAX; - - if(newbusy < 0) - { - printk("slicecom: %s: FATAL: fresly computed busy = %d, HW: 0x%p, SW: 0x%p\n", - dev->name, newbusy, - phys_to_virt(board->ccb->current_tx_desc[hw->channel]), - & hw->tx_desc[hw->tx_desc_ptr]); - } - - /* Fogyott valami a Tx ringbol? */ - - if (newbusy < hw->busy) - { - // ack &= ~STAT_PTI; /* Don't ack, we had some work */ - hw->busy = newbusy; - if (ch->LINE_tx) - ch->LINE_tx(dev); /* Report it to protocol driver */ - } - else if (newbusy > hw->busy) - printk("slicecom: %s: newbusy > hw->busy, this should not happen!\n", dev->name); - } - } - } - stat &= ~STAT_PTI; - - int_info = board->piq[board->piq_ptr]; - if (int_info.all & 0xF0000000) /* ha ez nem 0, akkor itt interrupt_info van */ - { - ack &= ~STAT_LBII; /* don't ack the interrupt, we had some work to do */ - - /* We do not really use (yet) the interrupt info from this queue, */ - - // printk("slicecom: %s: LBI Interrupt event: %08x\n", board->devname, int_info.all); - - if (!board->isx21) - { - slicecom_update_leds(board); - slicecom_update_line_counters(board); - } - - goto go_for_next_lbi_interrupt; /* To avoid warning about unused label */ - - go_for_next_lbi_interrupt: /* One step in the interrupt queue */ - board->piq[board->piq_ptr].all = 0; /* megjelolom hogy itt meg nem jart a hw */ - board->piq_ptr = (board->piq_ptr + 1) % MUNICH_PIQMAX; - } - stat &= ~STAT_LBII; - - writel(ack, MUNICH_VIRT(STAT)); - - if (stat & STAT_TSPA) - { - // printk("slicecom: %s: PCM TSP Asynchronous\n", board->devname); - writel(STAT_TSPA, MUNICH_VIRT(STAT)); - stat &= ~STAT_TSPA; - } - - if (stat & STAT_RSPA) - { - // printk("slicecom: %s: PCM RSP Asynchronous\n", board->devname); - writel(STAT_RSPA, MUNICH_VIRT(STAT)); - stat &= ~STAT_RSPA; - } - if (stat) - { - printk("MUNICH_interrupt: unhandled interrupt, STAT=0x%08x\n", - stat); - writel(stat, MUNICH_VIRT(STAT)); /* ha valamit megsem kezeltunk le, azert ack-ot kuldunk neki */ - } - - } - board->histogram[work]++; - - /* We can miss these if we reach the MAX_WORK */ - /* Count it to see how often it happens */ - - if (race_stat & STAT_PRI) - board->stat_pri_races_missed++; - if (race_stat & STAT_PTI) - board->stat_pti_races_missed++; - return IRQ_HANDLED; -} - -/* - * Hardware open routine. - * Called by comx (upper) layer when the user wants to bring up the interface - * with ifconfig. - * Initializes hardware, allocates resources etc. - * Returns 0 on OK, or standard error value on error. - */ - -static int MUNICH_open(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - munich_board_t *board; - munich_ccb_t *ccb; - - u32 *bar1; - u8 *lbi; - u32 stat; - unsigned long flags, jiffs; - - int i, channel; - u32 timeslots = hw->timeslots; - - board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - bar1 = board->bar1; - lbi = board->lbi; - - /* TODO: a timeslotok ellenorzese kell majd ide .. hat, biztos? mar a write_proc-ban is - ellenorzom valamennyire. - if (!dev->io || !dev->irq) return -ENODEV; - */ - - if (!board->pci) - { - printk("MUNICH_open: no %s board with boardnum = %d\n", - ch->hardware->name, hw->boardnum); - return -ENODEV; - } - - spin_lock_irqsave(&mister_lock, flags); - /* lock the section to avoid race with multiple opens and make sure - that no interrupts get called while this lock is active */ - - if (board->use_count == 0) /* bring up the board if it was unused */ - /* if fails, frees allocated resources and returns. */ - /* TOD: is it safe? nem kellene resetelni a kartyat? */ - { - printk("MUNICH_open: %s: bringing up board\n", board->devname); - - /* Clean up the board's static struct if messed: */ - - for (i = 0; i < 32; i++) - board->twins[i] = NULL; - for (i = 0; i < MAX_WORK; i++) - board->histogram[i] = 0; - - board->lineup = 0; - - /* Allocate CCB: */ - board->ccb = kmalloc(sizeof(munich_ccb_t), GFP_KERNEL); - if (board->ccb == NULL) - { - spin_unlock_irqrestore(&mister_lock, flags); - return -ENOMEM; - } - memset((void *)board->ccb, 0, sizeof(munich_ccb_t)); - board->ccb->csa = virt_to_phys(board->ccb); - ccb = board->ccb; - for (i = 0; i < 32; i++) - { - ccb->timeslot_spec[i].tti = 1; - ccb->timeslot_spec[i].rti = 1; - } - - /* Interrupt queues: */ - - board->tiq = kmalloc(MUNICH_INTQSIZE, GFP_KERNEL); - if (board->tiq == NULL) - { - spin_unlock_irqrestore(&mister_lock, flags); - return -ENOMEM; - } - memset((void *)board->tiq, 0, MUNICH_INTQSIZE); - - board->riq = kmalloc(MUNICH_INTQSIZE, GFP_KERNEL); - if (board->riq == NULL) - { - spin_unlock_irqrestore(&mister_lock, flags); - return -ENOMEM; - } - memset((void *)board->riq, 0, MUNICH_INTQSIZE); - - board->piq = kmalloc(MUNICH_PIQSIZE, GFP_KERNEL); - if (board->piq == NULL) - { - spin_unlock_irqrestore(&mister_lock, flags); - return -ENOMEM; - } - memset((void *)board->piq, 0, MUNICH_PIQSIZE); - - board->tiq_ptr = 0; - board->riq_ptr = 0; - board->piq_ptr = 0; - - /* Request irq: */ - - board->irq = 0; - - /* (char*) cast to avoid warning about discarding volatile: */ - if (request_irq(board->pci->irq, MUNICH_interrupt, 0, - (char *)board->devname, (void *)board)) - { - printk("MUNICH_open: %s: unable to obtain irq %d\n", board->devname, - board->pci->irq); - /* TOD: free other resources (a sok malloc feljebb) */ - spin_unlock_irqrestore(&mister_lock, flags); - return -EAGAIN; - } - board->irq = board->pci->irq; /* csak akkor legyen != 0, ha tenyleg le van foglalva nekunk */ - - /* Programming device: */ - - /* Reset the board like a power-on: */ - /* TOD: - - It is not a real power-on: if a DMA transaction fails with master abort, the board - stays in half-dead state. - - It doesn't reset the FALC line driver */ - - pci_write_config_dword(board->pci, MUNICH_PCI_PCIRES, 0xe0000); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - pci_write_config_dword(board->pci, MUNICH_PCI_PCIRES, 0); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - writel(virt_to_phys(&ccb->csa), MUNICH_VIRT(CCBA)); - writel(virt_to_phys( board->tiq ), MUNICH_VIRT(TIQBA)); - writel(MUNICH_INTQLEN, MUNICH_VIRT(TIQL)); - writel(virt_to_phys( board->riq ), MUNICH_VIRT(RIQBA)); - writel(MUNICH_INTQLEN, MUNICH_VIRT(RIQL)); - writel(virt_to_phys( board->piq ), MUNICH_VIRT(PIQBA)); - writel(MUNICH_PIQLEN, MUNICH_VIRT(PIQL)); - - /* Put the magic values into the registers: */ - - writel(MODE1_MAGIC, MUNICH_VIRT(MODE1)); - writel(MODE2_MAGIC, MUNICH_VIRT(MODE2)); - - writel(LREG0_MAGIC, MUNICH_VIRT(LREG0)); - writel(LREG1_MAGIC, MUNICH_VIRT(LREG1)); - writel(LREG2_MAGIC, MUNICH_VIRT(LREG2)); - writel(LREG3_MAGIC, MUNICH_VIRT(LREG3)); - writel(LREG4_MAGIC, MUNICH_VIRT(LREG4)); - writel(LREG5_MAGIC, MUNICH_VIRT(LREG5)); - - writel(LCONF_MAGIC1, MUNICH_VIRT(LCONF)); /* reset the DMSM */ - writel(LCONF_MAGIC2, MUNICH_VIRT(LCONF)); /* enable the DMSM */ - - writel(~0, MUNICH_VIRT(TXPOLL)); - writel(board->isx21 ? 0x1400 : 0xa000, MUNICH_VIRT(GPDIR)); - - if (readl(MUNICH_VIRT(STAT))) writel(readl(MUNICH_VIRT(STAT)), MUNICH_VIRT(STAT)); - - ccb->action_spec = CCB_ACTIONSPEC_RES | CCB_ACTIONSPEC_IA; - writel(CMD_ARPCM, MUNICH_VIRT(CMD)); /* Start the PCM core reset */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - stat = 0; /* Wait for the action to complete max. 1 second */ - jiffs = jiffies; - while (!((stat = readl(MUNICH_VIRT(STAT))) & (STAT_PCMA | STAT_PCMF)) && time_before(jiffies, jiffs + HZ)) - { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } - - if (stat & STAT_PCMF) - { - printk(KERN_ERR - "MUNICH_open: %s: Initial ARPCM failed. STAT=0x%08x\n", - board->devname, stat); - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMF, MUNICH_VIRT(STAT)); - free_irq(board->irq, (void *)board); /* TOD: free other resources too *//* maybe shut down hw? */ - board->irq = 0; - spin_unlock_irqrestore(&mister_lock, flags); - return -EAGAIN; - } - else if (!(stat & STAT_PCMA)) - { - printk(KERN_ERR - "MUNICH_open: %s: Initial ARPCM timeout. STAT=0x%08x\n", - board->devname, stat); - free_irq(board->irq, (void *)board); /* TOD: free other resources too *//* maybe shut off the hw? */ - board->irq = 0; - spin_unlock_irqrestore(&mister_lock, flags); - return -EIO; - } - - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMA, MUNICH_VIRT(STAT)); /* Acknowledge */ - - if (board->isx21) writel(0, MUNICH_VIRT(GPDATA)); - - printk("MUNICH_open: %s: succesful HW-open took %ld jiffies\n", - board->devname, jiffies - jiffs); - - /* Set up the FALC hanging on the Local Bus: */ - - if (!board->isx21) - { - writeb(0x0e, lbi + FMR1); - writeb(0, lbi + LIM0); - writeb(0xb0, lbi + LIM1); /* TODO: input threshold */ - writeb(0xf7, lbi + XPM0); - writeb(0x02, lbi + XPM1); - writeb(0x00, lbi + XPM2); - writeb(0xf0, lbi + FMR0); - writeb(0x80, lbi + PCD); - writeb(0x80, lbi + PCR); - writeb(0x00, lbi + LIM2); - writeb(0x07, lbi + XC0); - writeb(0x3d, lbi + XC1); - writeb(0x05, lbi + RC0); - writeb(0x00, lbi + RC1); - writeb(0x83, lbi + FMR2); - writeb(0x9f, lbi + XSW); - writeb(0x0f, lbi + XSP); - writeb(0x00, lbi + TSWM); - writeb(0xe0, lbi + MODE); - writeb(0xff, lbi + IDLE); /* Idle Code to send in unused timeslots */ - writeb(0x83, lbi + IPC); /* interrupt query line mode: Push/pull output, active high */ - writeb(0xbf, lbi + IMR3); /* send an interrupt every second */ - - slicecom_set_framing(hw->boardnum, board->framing); - slicecom_set_linecode(hw->boardnum, board->linecode); - slicecom_set_clock_source(hw->boardnum, board->clock_source); - slicecom_set_loopback(hw->boardnum, board->loopback); - - memset((void *)board->intervals, 0, sizeof(board->intervals)); - board->current_interval = 0; - board->elapsed_seconds = 0; - board->ses_seconds = 0; - board->is_unavailable = 0; - board->no_ses_seconds = 0; - board->deg_elapsed_seconds = 0; - board->deg_cumulated_errors = 0; - } - - /* Enable the interrupts last */ - /* These interrupts will be enabled. We do not need the others. */ - - writel(readl(MUNICH_VIRT(IMASK)) & ~(STAT_PTI | STAT_PRI | STAT_LBII | STAT_TSPA | STAT_RSPA), MUNICH_VIRT(IMASK)); - } - - spin_unlock_irqrestore(&mister_lock, flags); - - dev->irq = board->irq; /* hogy szep legyen az ifconfig outputja */ - ccb = board->ccb; /* TODO: ez igy csunya egy kicsit hogy benn is meg kinn is beletoltom :( */ - - spin_lock_irqsave(&mister_lock, flags); - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - /* Check if the selected timeslots aren't used already */ - - for (i = 0; i < 32; i++) - if (((1 << i) & timeslots) && !ccb->timeslot_spec[i].tti) - { - printk("MUNICH_open: %s: timeslot %d already used by %s\n", - dev->name, i, board->twins[ccb->timeslot_spec[i].txchannel]->name); - spin_unlock_irqrestore(&mister_lock, flags); - return -EBUSY; /* TODO: lehet hogy valami mas errno kellene? */ - } - - /* find a free channel: */ - /* TODO: ugly, rewrite it */ - - for (channel = 0; channel <= 32; channel++) - { - if (channel == 32) - { /* not found a free one */ - printk - ("MUNICH_open: %s: FATAL: can not find a free channel - this should not happen!\n", - dev->name); - spin_unlock_irqrestore(&mister_lock, flags); - return -ENODEV; - } - if (board->twins[channel] == NULL) - break; /* found the first free one */ - } - - board->lastcheck = jiffies; /* avoid checking uninitialized hardware channel */ - - /* Open the channel. If fails, calls MUNICH_close() to properly free resources and stop the HW */ - - hw->channel = channel; - board->twins[channel] = dev; - - board->use_count++; /* meg nem nyitottuk meg a csatornat, de a twins-ben - mar elfoglaltunk egyet, es ha a _close-t akarjuk hivni, akkor ez kell. */ - for (i = 0; i < 32; i++) - if ((1 << i) & timeslots) - { - ccb->timeslot_spec[i].tti = 0; - ccb->timeslot_spec[i].txchannel = channel; - ccb->timeslot_spec[i].txfillmask = ~0; - - ccb->timeslot_spec[i].rti = 0; - ccb->timeslot_spec[i].rxchannel = channel; - ccb->timeslot_spec[i].rxfillmask = ~0; - } - - if (!board->isx21) rework_idle_channels(dev); - - memset((void *)&(hw->tx_desc), 0, TX_DESC_MAX * sizeof(tx_desc_t)); - memset((void *)&(hw->rx_desc), 0, RX_DESC_MAX * sizeof(rx_desc_t)); - - for (i = 0; i < TX_DESC_MAX; i++) - { - hw->tx_desc[i].fe = 1; - hw->tx_desc[i].fnum = 2; - hw->tx_desc[i].data = virt_to_phys( & (hw->tx_data[i][0]) ); - hw->tx_desc[i].next = virt_to_phys( & (hw->tx_desc[ (i+1) % TX_DESC_MAX ]) ); - - } - hw->tx_desc_ptr = 0; /* we will send an initial packet so it is correct: "oda irtunk utoljara" */ - hw->busy = 0; - hw->tx_desc[hw->tx_desc_ptr].hold = 1; - hw->tx_desc[hw->tx_desc_ptr].no = 1; /* TOD: inkabb csak 0 hosszut kuldjunk ki az initkor? */ - - for (i = 0; i < RX_DESC_MAX; i++) - { - hw->rx_desc[i].no = RXBUFFER_SIZE; - hw->rx_desc[i].data = virt_to_phys(&(hw->rx_data[i][0])); - hw->rx_desc[i].next = virt_to_phys(&(hw->rx_desc[(i+1) % RX_DESC_MAX])); - hw->rx_desc[i].status = 0xFF; - } - hw->rx_desc_ptr = 0; - - hw->rx_desc[(hw->rx_desc_ptr + RX_DESC_MAX - 2) % RX_DESC_MAX].hold = 1; - - memset((void *)&ccb->channel_spec[channel], 0, sizeof(channel_spec_t)); - - ccb->channel_spec[channel].ti = 0; /* Transmit off */ - ccb->channel_spec[channel].to = 1; - ccb->channel_spec[channel].ta = 0; - - ccb->channel_spec[channel].th = 1; /* Transmit hold */ - - ccb->channel_spec[channel].ri = 0; /* Receive off */ - ccb->channel_spec[channel].ro = 1; - ccb->channel_spec[channel].ra = 0; - - ccb->channel_spec[channel].mode = 3; /* HDLC */ - - ccb->action_spec = CCB_ACTIONSPEC_IN | (channel << 8); - writel(CMD_ARPCM, MUNICH_VIRT(CMD)); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - spin_unlock_irqrestore(&mister_lock, flags); - - stat = 0; - jiffs = jiffies; - while (!((stat = readl(MUNICH_VIRT(STAT))) & (STAT_PCMA | STAT_PCMF)) && time_before(jiffies, jiffs + HZ)) - { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } - - if (stat & STAT_PCMF) - { - printk(KERN_ERR "MUNICH_open: %s: %s channel %d off failed\n", - dev->name, board->devname, channel); - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMF, MUNICH_VIRT(STAT)); - MUNICH_close(dev); - return -EAGAIN; - } - else if (!(stat & STAT_PCMA)) - { - printk(KERN_ERR "MUNICH_open: %s: %s channel %d off timeout\n", - dev->name, board->devname, channel); - MUNICH_close(dev); - return -EIO; - } - - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMA, MUNICH_VIRT(STAT)); - // printk("MUNICH_open: %s: succesful channel off took %ld jiffies\n", board->devname, jiffies-jiffs); - - spin_lock_irqsave(&mister_lock, flags); - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - ccb->channel_spec[channel].ifc = 1; /* 1 .. 'Idle/Flag change' interrupt letiltva */ - ccb->channel_spec[channel].fit = 1; - ccb->channel_spec[channel].nitbs = 1; - ccb->channel_spec[channel].itbs = 2; - - /* TODOO: lehet hogy jo lenne igy, de utana kellene nezni hogy nem okoz-e fragmentaciot */ - // ccb->channel_spec[channel].itbs = 2 * number_of_timeslots; - // printk("open: %s: number_of_timeslots: %d\n", dev->name, number_of_timeslots); - - ccb->channel_spec[channel].mode = 3; /* HDLC */ - ccb->channel_spec[channel].ftda = virt_to_phys(&(hw->tx_desc)); - ccb->channel_spec[channel].frda = virt_to_phys(&(hw->rx_desc[0])); - - ccb->channel_spec[channel].ti = 1; /* Transmit init */ - ccb->channel_spec[channel].to = 0; - ccb->channel_spec[channel].ta = 1; - - ccb->channel_spec[channel].th = 0; - - ccb->channel_spec[channel].ri = 1; /* Receive init */ - ccb->channel_spec[channel].ro = 0; - ccb->channel_spec[channel].ra = 1; - - ccb->action_spec = CCB_ACTIONSPEC_ICO | (channel << 8); - writel(CMD_ARPCM, MUNICH_VIRT(CMD)); /* Start the channel init */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - spin_unlock_irqrestore(&mister_lock, flags); - - stat = 0; /* Wait for the action to complete max. 1 second */ - jiffs = jiffies; - while (!((stat = readl(MUNICH_VIRT(STAT))) & (STAT_PCMA | STAT_PCMF)) && time_before(jiffies, jiffs + HZ)) - { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } - - if (stat & STAT_PCMF) - { - printk(KERN_ERR "MUNICH_open: %s: channel open ARPCM failed\n", - board->devname); - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMF, MUNICH_VIRT(STAT)); - MUNICH_close(dev); - return -EAGAIN; - } - else if (!(stat & STAT_PCMA)) - { - printk(KERN_ERR "MUNICH_open: %s: channel open ARPCM timeout\n", - board->devname); - MUNICH_close(dev); - return -EIO; - } - - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMA, MUNICH_VIRT(STAT)); - // printk("MUNICH_open: %s: succesful channel open took %ld jiffies\n", board->devname, jiffies-jiffs); - - spin_lock_irqsave(&mister_lock, flags); - - ccb->channel_spec[channel].nitbs = 0; /* once ITBS defined, these must be 0 */ - ccb->channel_spec[channel].itbs = 0; - - if (board->isx21) - { - init_timer(&board->modemline_timer); - board->modemline_timer.data = (unsigned long)board; - board->modemline_timer.function = pcicom_modemline; - board->modemline_timer.expires = jiffies + HZ; - add_timer((struct timer_list *)&board->modemline_timer); - } - - /* It is done. Declare that we're open: */ - hw->busy = 0; /* It may be 1 if the frame at Tx init already ended, but it is not */ - /* a real problem: we compute hw->busy on every interrupt */ - hw->rafutott = 0; - ch->init_status |= HW_OPEN; - - /* Initialize line state: */ - if (board->lineup) - ch->line_status |= LINE_UP; - else - ch->line_status &= ~LINE_UP; - - /* Remove w attribute from /proc files associated to hw parameters: - no write when the device is open */ - - for (; procfile; procfile = procfile->next) - if (strcmp(procfile->name, FILENAME_BOARDNUM) == 0 || - strcmp(procfile->name, FILENAME_TIMESLOTS) == 0) - procfile->mode = S_IFREG | 0444; - - spin_unlock_irqrestore(&mister_lock, flags); - - return 0; -} - -/* - * Hardware close routine. - * Called by comx (upper) layer when the user wants to bring down the interface - * with ifconfig. - * We also call it from MUNICH_open, if the open fails. - * Brings down hardware, frees resources, stops receiver - * Returns 0 on OK, or standard error value on error. - */ - -static int MUNICH_close(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - struct proc_dir_entry *procfile = ch->procdir->subdir; - munich_board_t *board; - munich_ccb_t *ccb; - - u32 *bar1; - u32 timeslots = hw->timeslots; - int stat, i, channel = hw->channel; - unsigned long jiffs; - - board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - ccb = board->ccb; - bar1 = board->bar1; - - if (board->isx21) - del_timer((struct timer_list *)&board->modemline_timer); - - spin_lock_irqsave(&mister_lock, flags); - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - /* Disable receiver for the channel: */ - - for (i = 0; i < 32; i++) - if ((1 << i) & timeslots) - { - ccb->timeslot_spec[i].tti = 1; - ccb->timeslot_spec[i].txfillmask = 0; /* just to be double-sure :) */ - - ccb->timeslot_spec[i].rti = 1; - ccb->timeslot_spec[i].rxfillmask = 0; - } - - if (!board->isx21) rework_idle_channels(dev); - - ccb->channel_spec[channel].ti = 0; /* Receive off, Transmit off */ - ccb->channel_spec[channel].to = 1; - ccb->channel_spec[channel].ta = 0; - ccb->channel_spec[channel].th = 1; - - ccb->channel_spec[channel].ri = 0; - ccb->channel_spec[channel].ro = 1; - ccb->channel_spec[channel].ra = 0; - - board->twins[channel] = NULL; - - ccb->action_spec = CCB_ACTIONSPEC_IN | (channel << 8); - writel(CMD_ARPCM, MUNICH_VIRT(CMD)); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - - spin_unlock_irqrestore(&mister_lock, flags); - - stat = 0; - jiffs = jiffies; - while (!((stat = readl(MUNICH_VIRT(STAT))) & (STAT_PCMA | STAT_PCMF)) && time_before(jiffies, jiffs + HZ)) - { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } - - if (stat & STAT_PCMF) - { - printk(KERN_ERR - "MUNICH_close: %s: FATAL: channel off ARPCM failed, not closing!\n", - dev->name); - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMF, MUNICH_VIRT(STAT)); - /* If we return success, the privdata (and the descriptor list) will be freed */ - return -EIO; - } - else if (!(stat & STAT_PCMA)) - printk(KERN_ERR "MUNICH_close: %s: channel off ARPCM timeout\n", - board->devname); - - writel(readl(MUNICH_VIRT(STAT)) & STAT_PCMA, MUNICH_VIRT(STAT)); - // printk("MUNICH_close: %s: channel off took %ld jiffies\n", board->devname, jiffies-jiffs); - - spin_lock_irqsave(&mister_lock, flags); - - if (board->use_count) board->use_count--; - - if (!board->use_count) /* we were the last user of the board */ - { - printk("MUNICH_close: bringing down board %s\n", board->devname); - - /* program down the board: */ - - writel(0x0000FF7F, MUNICH_VIRT(IMASK)); /* do not send any interrupts */ - writel(0, MUNICH_VIRT(CMD)); /* stop the timer if someone started it */ - writel(~0U, MUNICH_VIRT(STAT)); /* if an interrupt came between the cli()-sti(), quiet it */ - if (ch->hardware == &pcicomhw) - writel(0x1400, MUNICH_VIRT(GPDATA)); - - /* Put the board into 'reset' state: */ - pci_write_config_dword(board->pci, MUNICH_PCI_PCIRES, 0xe0000); - - /* Free irq and other resources: */ - if (board->irq) - free_irq(board->irq, (void *)board); /* Ha nem inicializalta magat, akkor meg nincs irq */ - board->irq = 0; - - /* Free CCB and the interrupt queues */ - if (board->ccb) kfree((void *)board->ccb); - if (board->tiq) kfree((void *)board->tiq); - if (board->riq) kfree((void *)board->riq); - if (board->piq) kfree((void *)board->piq); - board->ccb = NULL; - board->tiq = board->riq = board->piq = NULL; - } - - /* Enable setting of hw parameters */ - for (; procfile; procfile = procfile->next) - if (strcmp(procfile->name, FILENAME_BOARDNUM) == 0 || - strcmp(procfile->name, FILENAME_TIMESLOTS) == 0) - procfile->mode = S_IFREG | 0644; - - /* We're not open anymore */ - ch->init_status &= ~HW_OPEN; - - spin_unlock_irqrestore(&mister_lock, flags); - - return 0; -} - -/* - * Give (textual) status information. - * The text it returns will be a part of what appears when the user does a - * cat /proc/comx/comx[n]/status - * Don't write more than PAGESIZE. - * Return value: number of bytes written (length of the string, incl. 0) - */ - -static int MUNICH_minden(struct net_device *dev, char *page) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - munich_board_t *board; - struct net_device *devp; - - u8 *lbi; - e1_stats_t *curr_int, *prev_int; - e1_stats_t last4, last96; /* sum of last 4, resp. last 96 intervals */ - unsigned *sump, /* running pointer for the sum data */ - *p; /* running pointer for the interval data */ - - int len = 0; - u8 frs0, frs1; - u8 fmr2; - int i, j; - u32 timeslots; - - board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - lbi = board->lbi; - curr_int = &board->intervals[board->current_interval]; - prev_int = - &board-> - intervals[(board->current_interval + SLICECOM_BOARD_INTERVALS_SIZE - - 1) % SLICECOM_BOARD_INTERVALS_SIZE]; - - if (!board->isx21) - { - frs0 = readb(lbi + FRS0); - fmr2 = readb(lbi + FMR2); - len += scnprintf(page + len, PAGE_SIZE - len, "Controller status:\n"); - if (frs0 == 0) - len += scnprintf(page + len, PAGE_SIZE - len, "\tNo alarms\n"); - else - { - if (frs0 & FRS0_LOS) - len += scnprintf(page + len, PAGE_SIZE - len, "\tLoss Of Signal\n"); - else - { - if (frs0 & FRS0_AIS) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tAlarm Indication Signal\n"); - else - { - if (frs0 & FRS0_AUXP) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tAuxiliary Pattern Indication\n"); - if (frs0 & FRS0_LFA) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tLoss of Frame Alignment\n"); - else - { - if (frs0 & FRS0_RRA) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tReceive Remote Alarm\n"); - - /* You can't set this framing with the /proc interface, but it */ - /* may be good to have here this alarm if you set it by hand: */ - - if ((board->framing == SLICECOM_FRAMING_CRC4) && - (frs0 & FRS0_LMFA)) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tLoss of CRC4 Multiframe Alignment\n"); - - if (((fmr2 & 0xc0) == 0xc0) && (frs0 & FRS0_NMF)) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tNo CRC4 Multiframe alignment Found after 400 msec\n"); - } - } - } - } - - frs1 = readb(lbi + FRS1); - if (FRS1_XLS & frs1) - len += scnprintf(page + len, PAGE_SIZE - len, - "\tTransmit Line Short\n"); - - /* debug Rx ring: DEL: - vagy meghagyni, de akkor legyen kicsit altalanosabb */ - } - - len += scnprintf(page + len, PAGE_SIZE - len, "Rx ring:\n"); - len += scnprintf(page + len, PAGE_SIZE - len, "\trafutott: %d\n", hw->rafutott); - len += scnprintf(page + len, PAGE_SIZE - len, - "\tlastcheck: %ld, jiffies: %ld\n", board->lastcheck, jiffies); - len += scnprintf(page + len, PAGE_SIZE - len, "\tbase: %08x\n", - (u32) virt_to_phys(&hw->rx_desc[0])); - len += scnprintf(page + len, PAGE_SIZE - len, "\trx_desc_ptr: %d\n", - hw->rx_desc_ptr); - len += scnprintf(page + len, PAGE_SIZE - len, "\trx_desc_ptr: %08x\n", - (u32) virt_to_phys(&hw->rx_desc[hw->rx_desc_ptr])); - len += scnprintf(page + len, PAGE_SIZE - len, "\thw_curr_ptr: %08x\n", - board->ccb->current_rx_desc[hw->channel]); - - for (i = 0; i < RX_DESC_MAX; i++) - len += scnprintf(page + len, PAGE_SIZE - len, "\t%08x %08x %08x %08x\n", - *((u32 *) & hw->rx_desc[i] + 0), - *((u32 *) & hw->rx_desc[i] + 1), - *((u32 *) & hw->rx_desc[i] + 2), - *((u32 *) & hw->rx_desc[i] + 3)); - - if (!board->isx21) - { - len += scnprintf(page + len, PAGE_SIZE - len, - "Interfaces using this board: (channel-group, interface, timeslots)\n"); - for (i = 0; i < 32; i++) - { - devp = board->twins[i]; - if (devp != NULL) - { - timeslots = - ((struct slicecom_privdata *)((struct comx_channel *)devp-> - priv)->HW_privdata)-> - timeslots; - len += scnprintf(page + len, PAGE_SIZE - len, "\t%2d %s: ", i, - devp->name); - for (j = 0; j < 32; j++) - if ((1 << j) & timeslots) - len += scnprintf(page + len, PAGE_SIZE - len, "%d ", j); - len += scnprintf(page + len, PAGE_SIZE - len, "\n"); - } - } - } - - len += scnprintf(page + len, PAGE_SIZE - len, "Interrupt work histogram:\n"); - for (i = 0; i < MAX_WORK; i++) - len += scnprintf(page + len, PAGE_SIZE - len, "hist[%2d]: %8u%c", i, - board->histogram[i], (i && - ((i + 1) % 4 == 0 || - i == MAX_WORK - 1)) ? '\n' : ' '); - - len += scnprintf(page + len, PAGE_SIZE - len, "Tx ring histogram:\n"); - for (i = 0; i < TX_DESC_MAX; i++) - len += scnprintf(page + len, PAGE_SIZE - len, "hist[%2d]: %8u%c", i, - hw->tx_ring_hist[i], (i && - ((i + 1) % 4 == 0 || - i == - TX_DESC_MAX - 1)) ? '\n' : ' '); - - if (!board->isx21) - { - - memset((void *)&last4, 0, sizeof(last4)); - memset((void *)&last96, 0, sizeof(last96)); - - /* Calculate the sum of last 4 intervals: */ - - for (i = 1; i <= 4; i++) - { - p = (unsigned *)&board->intervals[(board->current_interval + - SLICECOM_BOARD_INTERVALS_SIZE - - i) % SLICECOM_BOARD_INTERVALS_SIZE]; - sump = (unsigned *)&last4; - for (j = 0; j < (sizeof(e1_stats_t) / sizeof(unsigned)); j++) - sump[j] += p[j]; - } - - /* Calculate the sum of last 96 intervals: */ - - for (i = 1; i <= 96; i++) - { - p = (unsigned *)&board->intervals[(board->current_interval + - SLICECOM_BOARD_INTERVALS_SIZE - - i) % SLICECOM_BOARD_INTERVALS_SIZE]; - sump = (unsigned *)&last96; - for (j = 0; j < (sizeof(e1_stats_t) / sizeof(unsigned)); j++) - sump[j] += p[j]; - } - - len += scnprintf(page + len, PAGE_SIZE - len, - "Data in current interval (%d seconds elapsed):\n", - board->elapsed_seconds); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Line Code Violations, %d Path Code Violations, %d E-Bit Errors\n", - curr_int->line_code_violations, - curr_int->path_code_violations, curr_int->e_bit_errors); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Slip Secs, %d Fr Loss Secs, %d Line Err Secs, %d Degraded Mins\n", - curr_int->slip_secs, curr_int->fr_loss_secs, - curr_int->line_err_secs, curr_int->degraded_mins); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Errored Secs, %d Bursty Err Secs, %d Severely Err Secs, %d Unavail Secs\n", - curr_int->errored_secs, curr_int->bursty_err_secs, - curr_int->severely_err_secs, curr_int->unavail_secs); - - len += scnprintf(page + len, PAGE_SIZE - len, - "Data in Interval 1 (15 minutes):\n"); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Line Code Violations, %d Path Code Violations, %d E-Bit Errors\n", - prev_int->line_code_violations, - prev_int->path_code_violations, prev_int->e_bit_errors); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Slip Secs, %d Fr Loss Secs, %d Line Err Secs, %d Degraded Mins\n", - prev_int->slip_secs, prev_int->fr_loss_secs, - prev_int->line_err_secs, prev_int->degraded_mins); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Errored Secs, %d Bursty Err Secs, %d Severely Err Secs, %d Unavail Secs\n", - prev_int->errored_secs, prev_int->bursty_err_secs, - prev_int->severely_err_secs, prev_int->unavail_secs); - - len += scnprintf(page + len, PAGE_SIZE - len, - "Data in last 4 intervals (1 hour):\n"); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Line Code Violations, %d Path Code Violations, %d E-Bit Errors\n", - last4.line_code_violations, last4.path_code_violations, - last4.e_bit_errors); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Slip Secs, %d Fr Loss Secs, %d Line Err Secs, %d Degraded Mins\n", - last4.slip_secs, last4.fr_loss_secs, last4.line_err_secs, - last4.degraded_mins); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Errored Secs, %d Bursty Err Secs, %d Severely Err Secs, %d Unavail Secs\n", - last4.errored_secs, last4.bursty_err_secs, - last4.severely_err_secs, last4.unavail_secs); - - len += scnprintf(page + len, PAGE_SIZE - len, - "Data in last 96 intervals (24 hours):\n"); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Line Code Violations, %d Path Code Violations, %d E-Bit Errors\n", - last96.line_code_violations, last96.path_code_violations, - last96.e_bit_errors); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Slip Secs, %d Fr Loss Secs, %d Line Err Secs, %d Degraded Mins\n", - last96.slip_secs, last96.fr_loss_secs, - last96.line_err_secs, last96.degraded_mins); - len += scnprintf(page + len, PAGE_SIZE - len, - " %d Errored Secs, %d Bursty Err Secs, %d Severely Err Secs, %d Unavail Secs\n", - last96.errored_secs, last96.bursty_err_secs, - last96.severely_err_secs, last96.unavail_secs); - - } - -// len +=scnprintf( page + len, PAGE_SIZE - len, "Special events:\n" ); -// len +=scnprintf( page + len, PAGE_SIZE - len, "\tstat_pri/missed: %u / %u\n", board->stat_pri_races, board->stat_pri_races_missed ); -// len +=scnprintf( page + len, PAGE_SIZE - len, "\tstat_pti/missed: %u / %u\n", board->stat_pti_races, board->stat_pti_races_missed ); - return len; -} - -/* - * Memory dump function. Not used currently. - */ -static int BOARD_dump(struct net_device *dev) -{ - printk - ("BOARD_dump() requested. It is unimplemented, it should not be called\n"); - return (-1); -} - -/* - * /proc file read function for the files registered by this module. - * This function is called by the procfs implementation when a user - * wants to read from a file registered by this module. - * page is the workspace, start should point to the real start of data, - * off is the file offset, data points to the file's proc_dir_entry - * structure. - * Returns the number of bytes copied to the request buffer. - */ - -static int munich_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - munich_board_t *board; - - int len = 0, i; - u32 timeslots = hw->timeslots; - - board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - if (!strcmp(file->name, FILENAME_BOARDNUM)) - len = sprintf(page, "%d\n", hw->boardnum); - else if (!strcmp(file->name, FILENAME_TIMESLOTS)) - { - for (i = 0; i < 32; i++) - if ((1 << i) & timeslots) - len += scnprintf(page + len, PAGE_SIZE - len, "%d ", i); - len += scnprintf(page + len, PAGE_SIZE - len, "\n"); - } - else if (!strcmp(file->name, FILENAME_FRAMING)) - { - i = 0; - while (slicecom_framings[i].value && - slicecom_framings[i].value != board->framing) - i++; - len += scnprintf(page + len, PAGE_SIZE - len, "%s\n", - slicecom_framings[i].name); - } - else if (!strcmp(file->name, FILENAME_LINECODE)) - { - i = 0; - while (slicecom_linecodes[i].value && - slicecom_linecodes[i].value != board->linecode) - i++; - len += scnprintf(page + len, PAGE_SIZE - len, "%s\n", - slicecom_linecodes[i].name); - } - else if (!strcmp(file->name, FILENAME_CLOCK_SOURCE)) - { - i = 0; - while (slicecom_clock_sources[i].value && - slicecom_clock_sources[i].value != board->clock_source) - i++; - len += - scnprintf(page + len, PAGE_SIZE - len, "%s\n", - slicecom_clock_sources[i].name); - } - else if (!strcmp(file->name, FILENAME_LOOPBACK)) - { - i = 0; - while (slicecom_loopbacks[i].value && - slicecom_loopbacks[i].value != board->loopback) - i++; - len += scnprintf(page + len, PAGE_SIZE - len, "%s\n", - slicecom_loopbacks[i].name); - } - /* We set permissions to write-only for REG and LBIREG, but root can read them anyway: */ - else if (!strcmp(file->name, FILENAME_REG)) - { - len += scnprintf(page + len, PAGE_SIZE - len, - "%s: " FILENAME_REG ": write-only file\n", dev->name); - } - else if (!strcmp(file->name, FILENAME_LBIREG)) - { - len += scnprintf(page + len, PAGE_SIZE - len, - "%s: " FILENAME_LBIREG ": write-only file\n", dev->name); - } - else - { - printk("slicecom_read_proc: internal error, filename %s\n", file->name); - return -EBADF; - } - /* file handling administration: count eof status, offset, start address - and count: */ - - if (off >= len) - { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) - *eof = 1; - return min((off_t) count, (off_t) len - off); -} - -/* - * Write function for /proc files registered by us. - * See the comment on read function above. - * Beware! buffer is in userspace!!! - * Returns the number of bytes written - */ - -static int munich_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = (struct net_device *)entry->parent->data; - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw = ch->HW_privdata; - munich_board_t *board; - - unsigned long ts, tmp_boardnum; - - u32 tmp_timeslots = 0; - char *page, *p; - int i; - - board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - /* Paranoia checking: */ - - if (PDE(file->f_dentry->d_inode) != entry) - { - printk(KERN_ERR "munich_write_proc: file <-> data internal error\n"); - return -EIO; - } - - /* Request tmp buffer */ - if (!(page = (char *)__get_free_page(GFP_KERNEL))) - return -ENOMEM; - - /* Copy user data and cut trailing \n */ - if (copy_from_user(page, buffer, count = min(count, PAGE_SIZE))) { - free_page((unsigned long)page); - return -EFAULT; - } - if (*(page + count - 1) == '\n') - *(page + count - 1) = 0; - *(page + PAGE_SIZE - 1) = 0; - - if (!strcmp(entry->name, FILENAME_BOARDNUM)) - { - tmp_boardnum = simple_strtoul(page, NULL, 0); - if (0 <= tmp_boardnum && tmp_boardnum < MAX_BOARDS) - hw->boardnum = tmp_boardnum; - else - { - printk("%s: " FILENAME_BOARDNUM " range is 0...%d\n", dev->name, - MAX_BOARDS - 1); - free_page((unsigned long)page); - return -EINVAL; - } - } - else if (!strcmp(entry->name, FILENAME_TIMESLOTS)) - { - p = page; - while (*p) - { - if (isspace(*p)) - p++; - else - { - ts = simple_strtoul(p, &p, 10); /* base = 10: Don't read 09 as an octal number */ - /* ts = 0 ha nem tudta beolvasni a stringet, erre egy kicsit epitek itt: */ - if (0 <= ts && ts < 32) - { - tmp_timeslots |= (1 << ts); - } - else - { - printk("%s: " FILENAME_TIMESLOTS " range is 1...31\n", - dev->name); - free_page((unsigned long)page); - return -EINVAL; - } - } - } - hw->timeslots = tmp_timeslots; - } - else if (!strcmp(entry->name, FILENAME_FRAMING)) - { - i = 0; - while (slicecom_framings[i].value && - strncmp(slicecom_framings[i].name, page, - strlen(slicecom_framings[i].name))) - i++; - if (!slicecom_framings[i].value) - { - printk("slicecom: %s: Invalid " FILENAME_FRAMING " '%s'\n", - dev->name, page); - free_page((unsigned long)page); - return -EINVAL; - } - else - { /* - * If somebody says: - * echo >boardnum 0 - * echo >framing no-crc4 - * echo >boardnum 1 - * - when the framing was set, hw->boardnum was 0, so it would set the framing for board 0 - * Workaround: allow to set it only if interface is administrative UP - */ - if (netif_running(dev)) - slicecom_set_framing(hw->boardnum, slicecom_framings[i].value); - else - { - printk("%s: " FILENAME_FRAMING - " can not be set while the interface is DOWN\n", - dev->name); - free_page((unsigned long)page); - return -EINVAL; - } - } - } - else if (!strcmp(entry->name, FILENAME_LINECODE)) - { - i = 0; - while (slicecom_linecodes[i].value && - strncmp(slicecom_linecodes[i].name, page, - strlen(slicecom_linecodes[i].name))) - i++; - if (!slicecom_linecodes[i].value) - { - printk("slicecom: %s: Invalid " FILENAME_LINECODE " '%s'\n", - dev->name, page); - free_page((unsigned long)page); - return -EINVAL; - } - else - { /* - * Allow to set it only if interface is administrative UP, - * for the same reason as FILENAME_FRAMING - */ - if (netif_running(dev)) - slicecom_set_linecode(hw->boardnum, - slicecom_linecodes[i].value); - else - { - printk("%s: " FILENAME_LINECODE - " can not be set while the interface is DOWN\n", - dev->name); - free_page((unsigned long)page); - return -EINVAL; - } - } - } - else if (!strcmp(entry->name, FILENAME_CLOCK_SOURCE)) - { - i = 0; - while (slicecom_clock_sources[i].value && - strncmp(slicecom_clock_sources[i].name, page, - strlen(slicecom_clock_sources[i].name))) - i++; - if (!slicecom_clock_sources[i].value) - { - printk("%s: Invalid " FILENAME_CLOCK_SOURCE " '%s'\n", dev->name, - page); - free_page((unsigned long)page); - return -EINVAL; - } - else - { /* - * Allow to set it only if interface is administrative UP, - * for the same reason as FILENAME_FRAMING - */ - if (netif_running(dev)) - slicecom_set_clock_source(hw->boardnum, - slicecom_clock_sources[i].value); - else - { - printk("%s: " FILENAME_CLOCK_SOURCE - " can not be set while the interface is DOWN\n", - dev->name); - free_page((unsigned long)page); - return -EINVAL; - } - } - } - else if (!strcmp(entry->name, FILENAME_LOOPBACK)) - { - i = 0; - while (slicecom_loopbacks[i].value && - strncmp(slicecom_loopbacks[i].name, page, - strlen(slicecom_loopbacks[i].name))) - i++; - if (!slicecom_loopbacks[i].value) - { - printk("%s: Invalid " FILENAME_LOOPBACK " '%s'\n", dev->name, page); - free_page((unsigned long)page); - return -EINVAL; - } - else - { /* - * Allow to set it only if interface is administrative UP, - * for the same reason as FILENAME_FRAMING - */ - if (netif_running(dev)) - slicecom_set_loopback(hw->boardnum, - slicecom_loopbacks[i].value); - else - { - printk("%s: " FILENAME_LOOPBACK - " can not be set while the interface is DOWN\n", - dev->name); - free_page((unsigned long)page); - return -EINVAL; - } - } - } - else if (!strcmp(entry->name, FILENAME_REG)) - { /* DEL: 'reg' csak tmp */ - char *p; - u32 *bar1 = board->bar1; - - reg = simple_strtoul(page, &p, 0); - reg_ertek = simple_strtoul(p + 1, NULL, 0); - - if (reg < 0x100) - { - printk("reg(0x%02x) := 0x%08x jiff: %lu\n", reg, reg_ertek, jiffies); - writel(reg_ertek, MUNICH_VIRT(reg >> 2)); - } - else - { - printk("reg(0x%02x) is 0x%08x jiff: %lu\n", reg - 0x100, - readl(MUNICH_VIRT((reg - 0x100) >> 2)), jiffies); - } - } - else if (!strcmp(entry->name, FILENAME_LBIREG)) - { /* DEL: 'lbireg' csak tmp */ - char *p; - u8 *lbi = board->lbi; - - lbireg = simple_strtoul(page, &p, 0); - lbireg_ertek = simple_strtoul(p + 1, NULL, 0); - - if (lbireg < 0x100) - { - printk("lbireg(0x%02x) := 0x%02x jiff: %lu\n", lbireg, - lbireg_ertek, jiffies); - writeb(lbireg_ertek, lbi + lbireg); - } - else - printk("lbireg(0x%02x) is 0x%02x jiff: %lu\n", lbireg - 0x100, - readb(lbi + lbireg - 0x100), jiffies); - } - else - { - printk(KERN_ERR "munich_write_proc: internal error, filename %s\n", - entry->name); - free_page((unsigned long)page); - return -EBADF; - } - - /* Don't forget to free the workspace */ - free_page((unsigned long)page); - return count; -} - -/* - * Boardtype init function. - * Called by the comx (upper) layer, when you set boardtype. - * Allocates resources associated to using munich board for this device, - * initializes ch_struct pointers etc. - * Returns 0 on success and standard error codes on error. - */ - -static int init_escape(struct comx_channel *ch) -{ - kfree(ch->HW_privdata); - return -EIO; -} - -static int BOARD_init(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - struct slicecom_privdata *hw; - struct proc_dir_entry *new_file; - - /* Alloc data for private structure */ - if ((ch->HW_privdata = - kmalloc(sizeof(struct slicecom_privdata), GFP_KERNEL)) == NULL) - return -ENOMEM; - - memset(hw = ch->HW_privdata, 0, sizeof(struct slicecom_privdata)); - - /* Register /proc files */ - if ((new_file = create_proc_entry(FILENAME_BOARDNUM, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - if (ch->hardware == &slicecomhw) - { - if ((new_file = create_proc_entry(FILENAME_TIMESLOTS, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_FRAMING, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_LINECODE, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_CLOCK_SOURCE, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_LOOPBACK, S_IFREG | 0644, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - } - - /* DEL: ez itt csak fejlesztesi celokra!! */ - if ((new_file = create_proc_entry(FILENAME_REG, S_IFREG | 0200, ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - /* DEL: ez itt csak fejlesztesi celokra!! */ - if ((new_file = create_proc_entry(FILENAME_LBIREG, S_IFREG | 0200, - ch->procdir)) == NULL) - return init_escape(ch); - new_file->data = (void *)new_file; - new_file->read_proc = &munich_read_proc; - new_file->write_proc = &munich_write_proc; -// new_file->proc_iops = &comx_normal_inode_ops; - new_file->nlink = 1; - - /* Fill in ch_struct hw specific pointers: */ - - ch->HW_txe = MUNICH_txe; - ch->HW_open = MUNICH_open; - ch->HW_close = MUNICH_close; - ch->HW_send_packet = MUNICH_send_packet; -#ifndef COMX_NEW - ch->HW_minden = MUNICH_minden; -#else - ch->HW_statistics = MUNICH_minden; -#endif - - hw->boardnum = SLICECOM_BOARDNUM_DEFAULT; - hw->timeslots = ch->hardware == &pcicomhw ? 0xffffffff : 2; - - /* O.K. Count one more user on this module */ - MOD_INC_USE_COUNT; - return 0; -} - -/* - * Boardtype exit function. - * Called by the comx (upper) layer, when you clear boardtype from munich. - * Frees resources associated to using munich board for this device, - * resets ch_struct pointers etc. - */ -static int BOARD_exit(struct net_device *dev) -{ - struct comx_channel *ch = netdev_priv(dev); - - /* Free private data area */ -// board = hw->boardnum + (ch->hardware == &pcicomhw ? pcicom_boards : slicecom_boards); - - kfree(ch->HW_privdata); - /* Remove /proc files */ - remove_proc_entry(FILENAME_BOARDNUM, ch->procdir); - if (ch->hardware == &slicecomhw) - { - remove_proc_entry(FILENAME_TIMESLOTS, ch->procdir); - remove_proc_entry(FILENAME_FRAMING, ch->procdir); - remove_proc_entry(FILENAME_LINECODE, ch->procdir); - remove_proc_entry(FILENAME_CLOCK_SOURCE, ch->procdir); - remove_proc_entry(FILENAME_LOOPBACK, ch->procdir); - } - remove_proc_entry(FILENAME_REG, ch->procdir); - remove_proc_entry(FILENAME_LBIREG, ch->procdir); - - /* Minus one user for the module accounting */ - MOD_DEC_USE_COUNT; - return 0; -} - -static struct comx_hardware slicecomhw = -{ - "slicecom", -#ifdef COMX_NEW - VERSION, -#endif - BOARD_init, - BOARD_exit, - BOARD_dump, - NULL -}; - -static struct comx_hardware pcicomhw = -{ - "pcicom", -#ifdef COMX_NEW - VERSION, -#endif - BOARD_init, - BOARD_exit, - BOARD_dump, - NULL -}; - -/* Module management */ - -static int __init init_mister(void) -{ - printk(VERSIONSTR); - comx_register_hardware(&slicecomhw); - comx_register_hardware(&pcicomhw); - return munich_probe(); -} - -static void __exit cleanup_mister(void) -{ - int i; - - comx_unregister_hardware("slicecom"); - comx_unregister_hardware("pcicom"); - - for (i = 0; i < MAX_BOARDS; i++) - { - if (slicecom_boards[i].bar1) - iounmap((void *)slicecom_boards[i].bar1); - if (slicecom_boards[i].lbi) - iounmap((void *)slicecom_boards[i].lbi); - if (pcicom_boards[i].bar1) - iounmap((void *)pcicom_boards[i].bar1); - if (pcicom_boards[i].lbi) - iounmap((void *)pcicom_boards[i].lbi); - } -} - -module_init(init_mister); -module_exit(cleanup_mister); diff -Nru a/drivers/net/wan/comx-proto-fr.c b/drivers/net/wan/comx-proto-fr.c --- a/drivers/net/wan/comx-proto-fr.c Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1014 +0,0 @@ -/* - * Frame-relay protocol module for the COMX driver - * for Linux 2.2.X - * - * Original author: Tivadar Szemethy - * Maintainer: Gergely Madarasz - * - * Copyright (C) 1998-1999 ITConsult-Pro Co. - * - * Contributors: - * Arnaldo Carvalho de Melo (0.73) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.70 (99/06/14): - * - cleaned up the source code a bit - * - ported back to kernel, now works as builtin code - * - * Version 0.71 (99/06/25): - * - use skb priorities and queues for sending keepalive - * - use device queues for slave->master data transmit - * - set IFF_RUNNING only line protocol up - * - fixes on slave device flags - * - * Version 0.72 (99/07/09): - * - handle slave tbusy with master tbusy (should be fixed) - * - fix the keepalive timer addition/deletion - * - * Version 0.73 (00/08/15) - * - resource release on failure at fr_master_init and - * fr_slave_init - */ - -#define VERSION "0.73" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "comx.h" -#include "comxhw.h" - -MODULE_AUTHOR("Author: Tivadar Szemethy "); -MODULE_DESCRIPTION("Frame Relay protocol implementation for the COMX drivers" - "for Linux kernel 2.4.X"); -MODULE_LICENSE("GPL"); - -#define FRAD_UI 0x03 -#define NLPID_IP 0xcc -#define NLPID_Q933_LMI 0x08 -#define NLPID_CISCO_LMI 0x09 -#define Q933_ENQ 0x75 -#define Q933_LINESTAT 0x51 -#define Q933_COUNTERS 0x53 - -#define MAXALIVECNT 3 /* No. of failures */ - -struct fr_data { - u16 dlci; - struct net_device *master; - char keepa_pend; - char keepa_freq; - char keepalivecnt, keeploopcnt; - struct timer_list keepa_timer; - u8 local_cnt, remote_cnt; -}; - -static struct comx_protocol fr_master_protocol; -static struct comx_protocol fr_slave_protocol; -static struct comx_hardware fr_dlci; - -static void fr_keepalive_send(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct sk_buff *skb; - u8 *fr_packet; - - skb=alloc_skb(dev->hard_header_len + 13, GFP_ATOMIC); - - if(skb==NULL) - return; - - skb_reserve(skb, dev->hard_header_len); - - fr_packet=(u8*)skb_put(skb, 13); - - fr_packet[0] = (fr->dlci & (1024 - 15)) >> 2; - fr_packet[1] = (fr->dlci & 15) << 4 | 1; // EA bit 1 - fr_packet[2] = FRAD_UI; - fr_packet[3] = NLPID_Q933_LMI; - fr_packet[4] = 0; - fr_packet[5] = Q933_ENQ; - fr_packet[6] = Q933_LINESTAT; - fr_packet[7] = 0x01; - fr_packet[8] = 0x01; - fr_packet[9] = Q933_COUNTERS; - fr_packet[10] = 0x02; - fr_packet[11] = ++fr->local_cnt; - fr_packet[12] = fr->remote_cnt; - - skb->dev = dev; - skb->priority = TC_PRIO_CONTROL; - dev_queue_xmit(skb); -} - -static void fr_keepalive_timerfun(unsigned long d) -{ - struct net_device *dev = (struct net_device *)d; - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct comx_channel *sch; - struct fr_data *sfr; - struct net_device *sdev; - - if (ch->init_status & LINE_OPEN) { - if (fr->keepalivecnt == MAXALIVECNT) { - comx_status(dev, ch->line_status & ~PROTO_UP); - dev->flags &= ~IFF_RUNNING; - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) - && (sfr->master == dev) && - (sdev->flags & IFF_UP)) { - sdev->flags &= ~IFF_RUNNING; - comx_status(sdev, - sch->line_status & ~PROTO_UP); - } - } - } - if (fr->keepalivecnt <= MAXALIVECNT) { - ++fr->keepalivecnt; - } - fr_keepalive_send(dev); - } - mod_timer(&fr->keepa_timer, jiffies + HZ * fr->keepa_freq); -} - -static void fr_rx_lmi(struct net_device *dev, struct sk_buff *skb, - u16 dlci, u8 nlpid) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct comx_channel *sch; - struct fr_data *sfr; - struct net_device *sdev; - - if (dlci != fr->dlci || nlpid != NLPID_Q933_LMI || !fr->keepa_freq) { - return; - } - - fr->remote_cnt = skb->data[7]; - if (skb->data[8] == fr->local_cnt) { // keepalive UP! - fr->keepalivecnt = 0; - if ((ch->line_status & LINE_UP) && - !(ch->line_status & PROTO_UP)) { - comx_status(dev, ch->line_status |= PROTO_UP); - dev->flags |= IFF_RUNNING; - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) - && (sfr->master == dev) && - (sdev->flags & IFF_UP)) { - sdev->flags |= IFF_RUNNING; - comx_status(sdev, - sch->line_status | PROTO_UP); - } - } - } - } -} - -static void fr_set_keepalive(struct net_device *dev, int keepa) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - - if (!keepa && fr->keepa_freq) { // switch off - fr->keepa_freq = 0; - if (ch->line_status & LINE_UP) { - comx_status(dev, ch->line_status | PROTO_UP); - dev->flags |= IFF_RUNNING; - del_timer(&fr->keepa_timer); - } - return; - } - - if (keepa) { // bekapcs - if(fr->keepa_freq && (ch->line_status & LINE_UP)) { - del_timer(&fr->keepa_timer); - } - fr->keepa_freq = keepa; - fr->local_cnt = fr->remote_cnt = 0; - init_timer(&fr->keepa_timer); - fr->keepa_timer.expires = jiffies + HZ; - fr->keepa_timer.function = fr_keepalive_timerfun; - fr->keepa_timer.data = (unsigned long)dev; - ch->line_status &= ~(PROTO_UP | PROTO_LOOP); - dev->flags &= ~IFF_RUNNING; - comx_status(dev, ch->line_status); - if(ch->line_status & LINE_UP) { - add_timer(&fr->keepa_timer); - } - } -} - -static void fr_rx(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct net_device *sdev = dev; - struct comx_channel *sch; - struct fr_data *sfr; - u16 dlci; - u8 nlpid; - - if(skb->len <= 4 || skb->data[2] != FRAD_UI) { - kfree_skb(skb); - return; - } - - /* Itt majd ki kell talalni, melyik slave kapja a csomagot */ - dlci = ((skb->data[0] & 0xfc) << 2) | ((skb->data[1] & 0xf0) >> 4); - if ((nlpid = skb->data[3]) == 0) { // Optional padding - nlpid = skb->data[4]; - skb_pull(skb, 1); - } - skb_pull(skb, 4); /* DLCI and header throw away */ - - if (ch->debug_flags & DEBUG_COMX_DLCI) { - comx_debug(dev, "Frame received, DLCI: %d, NLPID: 0x%02x\n", - dlci, nlpid); - comx_debug_skb(dev, skb, "Contents"); - } - - /* Megkeressuk, kihez tartozik */ - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && (sfr = sch->LINE_privdata) && - (sfr->master == dev) && (sfr->dlci == dlci)) { - skb->dev = sdev; - if (ch->debug_flags & DEBUG_COMX_DLCI) { - comx_debug(dev, "Passing it to %s\n",sdev->name); - } - if (dev != sdev) { - sch->stats.rx_packets++; - sch->stats.rx_bytes += skb->len; - } - break; - } - } - switch(nlpid) { - case NLPID_IP: - skb->protocol = htons(ETH_P_IP); - skb->mac.raw = skb->data; - comx_rx(sdev, skb); - break; - case NLPID_Q933_LMI: - fr_rx_lmi(dev, skb, dlci, nlpid); - default: - kfree_skb(skb); - break; - } -} - -static int fr_tx(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct net_device *sdev; - struct comx_channel *sch; - struct fr_data *sfr; - int cnt = 1; - - /* Ha minden igaz, 2 helyen fog allni a tbusy: a masternel, - es annal a slave-nel aki eppen kuldott. - Egy helyen akkor all, ha a master kuldott. - Ez megint jo lesz majd, ha utemezni akarunk */ - - /* This should be fixed, the slave tbusy should be set when - the masters queue is full and reset when not */ - - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && (sfr = sch->LINE_privdata) && - (sfr->master == dev) && (netif_queue_stopped(sdev))) { - netif_wake_queue(sdev); - cnt++; - } - } - - netif_wake_queue(dev); - return 0; -} - -static void fr_status(struct net_device *dev, unsigned short status) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct net_device *sdev; - struct comx_channel *sch; - struct fr_data *sfr; - - if (status & LINE_UP) { - if (!fr->keepa_freq) { - status |= PROTO_UP; - } - } else { - status &= ~(PROTO_UP | PROTO_LOOP); - } - - if (dev == fr->master && fr->keepa_freq) { - if (status & LINE_UP) { - fr->keepa_timer.expires = jiffies + HZ; - add_timer(&fr->keepa_timer); - fr->keepalivecnt = MAXALIVECNT + 1; - fr->keeploopcnt = 0; - } else { - del_timer(&fr->keepa_timer); - } - } - - /* Itt a status valtozast vegig kell vinni az osszes slave-n */ - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_FRAD || sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) && (sfr->master == dev)) { - if(status & LINE_UP) { - netif_wake_queue(sdev); - } - comx_status(sdev, status); - if(status & (PROTO_UP | PROTO_LOOP)) { - dev->flags |= IFF_RUNNING; - } else { - dev->flags &= ~IFF_RUNNING; - } - } - } -} - -static int fr_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct proc_dir_entry *comxdir = ch->procdir; - struct comx_channel *mch; - - if (!(ch->init_status & HW_OPEN)) { - return -ENODEV; - } - - if ((ch->hardware == &fr_dlci && ch->protocol != &fr_slave_protocol) || - (ch->protocol == &fr_slave_protocol && ch->hardware != &fr_dlci)) { - printk(KERN_ERR "Trying to open an improperly set FR interface, giving up\n"); - return -EINVAL; - } - - if (!fr->master) { - return -ENODEV; - } - mch = fr->master->priv; - if (fr->master != dev && (!(mch->init_status & LINE_OPEN) - || (mch->protocol != &fr_master_protocol))) { - printk(KERN_ERR "Master %s is inactive, or incorrectly set up, " - "unable to open %s\n", fr->master->name, dev->name); - return -ENODEV; - } - - ch->init_status |= LINE_OPEN; - ch->line_status &= ~(PROTO_UP | PROTO_LOOP); - dev->flags &= ~IFF_RUNNING; - - if (fr->master == dev) { - if (fr->keepa_freq) { - fr->keepa_timer.function = fr_keepalive_timerfun; - fr->keepa_timer.data = (unsigned long)dev; - add_timer(&fr->keepa_timer); - } else { - if (ch->line_status & LINE_UP) { - ch->line_status |= PROTO_UP; - dev->flags |= IFF_RUNNING; - } - } - } else { - ch->line_status = mch->line_status; - if(fr->master->flags & IFF_RUNNING) { - dev->flags |= IFF_RUNNING; - } - } - - for (; comxdir ; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_DLCI) == 0 || - strcmp(comxdir->name, FILENAME_MASTER) == 0 || - strcmp(comxdir->name, FILENAME_KEEPALIVE) == 0) { - comxdir->mode = S_IFREG | 0444; - } - } -// comx_status(dev, ch->line_status); - return 0; -} - -static int fr_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct proc_dir_entry *comxdir = ch->procdir; - - if (fr->master == dev) { // Ha master - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct net_device *sdev = dev; - struct comx_channel *sch; - struct fr_data *sfr; - - if (!(ch->init_status & HW_OPEN)) { - return -ENODEV; - } - - if (fr->keepa_freq) { - del_timer(&fr->keepa_timer); - } - - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) && - (sfr->master == dev) && - (sch->init_status & LINE_OPEN)) { - dev_close(sdev); - } - } - } - - ch->init_status &= ~LINE_OPEN; - ch->line_status &= ~(PROTO_UP | PROTO_LOOP); - dev->flags &= ~IFF_RUNNING; - - for (; comxdir ; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_DLCI) == 0 || - strcmp(comxdir->name, FILENAME_MASTER) == 0 || - strcmp(comxdir->name, FILENAME_KEEPALIVE) == 0) { - comxdir->mode = S_IFREG | 0444; - } - } - - return 0; -} - -static int fr_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct comx_channel *sch, *mch; - struct fr_data *fr = ch->LINE_privdata; - struct fr_data *sfr; - struct net_device *sdev; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - - if (!fr->master) { - printk(KERN_ERR "BUG: fr_xmit without a master!!! dev: %s\n", dev->name); - return 0; - } - - mch = fr->master->priv; - - /* Ennek majd a slave utemezeskor lesz igazan jelentosege */ - if (ch->debug_flags & DEBUG_COMX_DLCI) { - comx_debug_skb(dev, skb, "Sending frame"); - } - - if (dev != fr->master) { - struct sk_buff *newskb=skb_clone(skb, GFP_ATOMIC); - if (!newskb) - return -ENOMEM; - newskb->dev=fr->master; - dev_queue_xmit(newskb); - ch->stats.tx_bytes += skb->len; - ch->stats.tx_packets++; - dev_kfree_skb(skb); - } else { - netif_stop_queue(dev); - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && (sfr = sch->LINE_privdata) && - (sfr->master == dev) && (netif_queue_stopped(sdev))) { - netif_stop_queue(sdev); - } - } - - switch(mch->HW_send_packet(dev, skb)) { - case FRAME_QUEUED: - netif_wake_queue(dev); - break; - case FRAME_ACCEPTED: - case FRAME_DROPPED: - break; - case FRAME_ERROR: - printk(KERN_ERR "%s: Transmit frame error (len %d)\n", - dev->name, skb->len); - break; - } - } - return 0; -} - -static int fr_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, void *saddr, unsigned len) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - - skb_push(skb, dev->hard_header_len); - /* Put in DLCI */ - skb->data[0] = (fr->dlci & (1024 - 15)) >> 2; - skb->data[1] = (fr->dlci & 15) << 4 | 1; // EA bit 1 - skb->data[2] = FRAD_UI; - skb->data[3] = NLPID_IP; - - return dev->hard_header_len; -} - -static int fr_statistics(struct net_device *dev, char *page) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - int len = 0; - - if (fr->master == dev) { - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - struct net_device *sdev; - struct comx_channel *sch; - struct fr_data *sfr; - int slaves = 0; - - len += sprintf(page + len, - "This is a Frame Relay master device\nSlaves: "); - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) && - (sfr->master == dev) && (sdev != dev)) { - slaves++; - len += sprintf(page + len, "%s ", sdev->name); - } - } - len += sprintf(page + len, "%s\n", slaves ? "" : "(none)"); - if (fr->keepa_freq) { - len += sprintf(page + len, "Line keepalive (value %d) " - "status %s [%d]\n", fr->keepa_freq, - ch->line_status & PROTO_LOOP ? "LOOP" : - ch->line_status & PROTO_UP ? "UP" : "DOWN", - fr->keepalivecnt); - } else { - len += sprintf(page + len, "Line keepalive protocol " - "is not set\n"); - } - } else { // if slave - len += sprintf(page + len, - "This is a Frame Relay slave device, master: %s\n", - fr->master ? fr->master->name : "(not set)"); - } - return len; -} - -static int fr_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct comx_channel *ch = dev->priv; - struct fr_data *fr = NULL; - int len = 0; - - if (ch) { - fr = ch->LINE_privdata; - } - - if (strcmp(file->name, FILENAME_DLCI) == 0) { - len = sprintf(page, "%04d\n", fr->dlci); - } else if (strcmp(file->name, FILENAME_MASTER) == 0) { - len = sprintf(page, "%-9s\n", fr->master ? fr->master->name : - "(none)"); - } else if (strcmp(file->name, FILENAME_KEEPALIVE) == 0) { - len = fr->keepa_freq ? sprintf(page, "% 3d\n", fr->keepa_freq) - : sprintf(page, "off\n"); - } else { - printk(KERN_ERR "comxfr: internal error, filename %s\n", file->name); - return -EBADF; - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) *eof = 1; - return min_t(int, count, len - off); -} - -static int fr_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = entry->parent->data; - struct comx_channel *ch = dev->priv; - struct fr_data *fr = NULL; - char *page; - - if (ch) { - fr = ch->LINE_privdata; - } - - if (!(page = (char *)__get_free_page(GFP_KERNEL))) { - return -ENOMEM; - } - - if (copy_from_user(page, buffer, count)) { - free_page((unsigned long)page); - return -EFAULT; - } - if (*(page + count - 1) == '\n') { - *(page + count - 1) = 0; - } - - if (strcmp(entry->name, FILENAME_DLCI) == 0) { - u16 dlci_new = simple_strtoul(page, NULL, 10); - - if (dlci_new > 1023) { - printk(KERN_ERR "Invalid DLCI value\n"); - } - else fr->dlci = dlci_new; - } else if (strcmp(entry->name, FILENAME_MASTER) == 0) { - struct net_device *new_master = dev_get_by_name(page); - - if (new_master && new_master->type == ARPHRD_FRAD) { - struct comx_channel *sch = new_master->priv; - struct fr_data *sfr = sch->LINE_privdata; - - if (sfr && sfr->master == new_master) { - if(fr->master) - dev_put(fr->master); - fr->master = new_master; - /* Megorokli a master statuszat */ - ch->line_status = sch->line_status; - } - } - } else if (strcmp(entry->name, FILENAME_KEEPALIVE) == 0) { - int keepa_new = -1; - - if (strcmp(page, KEEPALIVE_OFF) == 0) { - keepa_new = 0; - } else { - keepa_new = simple_strtoul(page, NULL, 10); - } - - if (keepa_new < 0 || keepa_new > 100) { - printk(KERN_ERR "invalid keepalive\n"); - } else { - if (fr->keepa_freq && keepa_new != fr->keepa_freq) { - fr_set_keepalive(dev, 0); - } - if (keepa_new) { - fr_set_keepalive(dev, keepa_new); - } - } - } else { - printk(KERN_ERR "comxfr_write_proc: internal error, filename %s\n", - entry->name); - count = -EBADF; - } - - free_page((unsigned long)page); - return count; -} - -static int fr_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - struct net_device *sdev = dev; - struct comx_channel *sch; - struct fr_data *sfr; - struct proc_dir_entry *dir = ch->procdir->parent->subdir; - - /* Ha lezarunk egy master-t, le kell kattintani a slave-eket is */ - if (fr->master && fr->master == dev) { - for (; dir ; dir = dir->next) { - if(!S_ISDIR(dir->mode)) { - continue; - } - if ((sdev = dir->data) && (sch = sdev->priv) && - (sdev->type == ARPHRD_DLCI) && - (sfr = sch->LINE_privdata) && (sfr->master == dev)) { - dev_close(sdev); - sfr->master = NULL; - } - } - } - dev->flags = 0; - dev->type = 0; - dev->mtu = 0; - dev->hard_header_len = 0; - - ch->LINE_rx = NULL; - ch->LINE_tx = NULL; - ch->LINE_status = NULL; - ch->LINE_open = NULL; - ch->LINE_close = NULL; - ch->LINE_xmit = NULL; - ch->LINE_header = NULL; - ch->LINE_rebuild_header = NULL; - ch->LINE_statistics = NULL; - - ch->LINE_status = 0; - - if (fr->master != dev) { // if not master, remove dlci - if(fr->master) - dev_put(fr->master); - remove_proc_entry(FILENAME_DLCI, ch->procdir); - remove_proc_entry(FILENAME_MASTER, ch->procdir); - } else { - if (fr->keepa_freq) { - fr_set_keepalive(dev, 0); - } - remove_proc_entry(FILENAME_KEEPALIVE, ch->procdir); - remove_proc_entry(FILENAME_DLCI, ch->procdir); - } - - kfree(fr); - ch->LINE_privdata = NULL; - - MOD_DEC_USE_COUNT; - return 0; -} - -static int fr_master_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr; - struct proc_dir_entry *new_file; - - if ((fr = ch->LINE_privdata = kmalloc(sizeof(struct fr_data), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - memset(fr, 0, sizeof(struct fr_data)); - fr->master = dev; // this means master - fr->dlci = 0; // let's say default - - dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; - dev->type = ARPHRD_FRAD; - dev->mtu = 1500; - dev->hard_header_len = 4; - dev->addr_len = 0; - - ch->LINE_rx = fr_rx; - ch->LINE_tx = fr_tx; - ch->LINE_status = fr_status; - ch->LINE_open = fr_open; - ch->LINE_close = fr_close; - ch->LINE_xmit = fr_xmit; - ch->LINE_header = fr_header; - ch->LINE_rebuild_header = NULL; - ch->LINE_statistics = fr_statistics; - - if ((new_file = create_proc_entry(FILENAME_DLCI, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_LINE_privdata; - } - new_file->data = (void *)new_file; - new_file->read_proc = &fr_read_proc; - new_file->write_proc = &fr_write_proc; - new_file->size = 5; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_KEEPALIVE, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_dlci; - } - new_file->data = (void *)new_file; - new_file->read_proc = &fr_read_proc; - new_file->write_proc = &fr_write_proc; - new_file->size = 4; - new_file->nlink = 1; - - fr_set_keepalive(dev, 0); - - MOD_INC_USE_COUNT; - return 0; -cleanup_filename_dlci: - remove_proc_entry(FILENAME_DLCI, ch->procdir); -cleanup_LINE_privdata: - kfree(fr); - return -EIO; -} - -static int fr_slave_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr; - struct proc_dir_entry *new_file; - - if ((fr = ch->LINE_privdata = kmalloc(sizeof(struct fr_data), - GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - memset(fr, 0, sizeof(struct fr_data)); - - dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; - dev->type = ARPHRD_DLCI; - dev->mtu = 1500; - dev->hard_header_len = 4; - dev->addr_len = 0; - - ch->LINE_rx = fr_rx; - ch->LINE_tx = fr_tx; - ch->LINE_status = fr_status; - ch->LINE_open = fr_open; - ch->LINE_close = fr_close; - ch->LINE_xmit = fr_xmit; - ch->LINE_header = fr_header; - ch->LINE_rebuild_header = NULL; - ch->LINE_statistics = fr_statistics; - - if ((new_file = create_proc_entry(FILENAME_DLCI, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_LINE_privdata; - } - - new_file->data = (void *)new_file; - new_file->read_proc = &fr_read_proc; - new_file->write_proc = &fr_write_proc; - new_file->size = 5; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_MASTER, S_IFREG | 0644, - ch->procdir)) == NULL) { - goto cleanup_filename_dlci; - } - new_file->data = (void *)new_file; - new_file->read_proc = &fr_read_proc; - new_file->write_proc = &fr_write_proc; - new_file->size = 10; - new_file->nlink = 1; - MOD_INC_USE_COUNT; - return 0; -cleanup_filename_dlci: - remove_proc_entry(FILENAME_DLCI, ch->procdir); -cleanup_LINE_privdata: - kfree(fr); - return -EIO; -} - -static int dlci_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - ch->init_status |= HW_OPEN; - - MOD_INC_USE_COUNT; - return 0; -} - -static int dlci_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - ch->init_status &= ~HW_OPEN; - - MOD_DEC_USE_COUNT; - return 0; -} - -static int dlci_txe(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct fr_data *fr = ch->LINE_privdata; - - if (!fr->master) { - return 0; - } - - ch = fr->master->priv; - fr = ch->LINE_privdata; - return ch->HW_txe(fr->master); -} - -static int dlci_statistics(struct net_device *dev, char *page) -{ - return 0; -} - -static int dlci_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - ch->HW_open = dlci_open; - ch->HW_close = dlci_close; - ch->HW_txe = dlci_txe; - ch->HW_statistics = dlci_statistics; - - /* Nincs egyeb hw info, mert ugyis a fr->master-bol fog minden kiderulni */ - - MOD_INC_USE_COUNT; - return 0; -} - -static int dlci_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - ch->HW_open = NULL; - ch->HW_close = NULL; - ch->HW_txe = NULL; - ch->HW_statistics = NULL; - - MOD_DEC_USE_COUNT; - return 0; -} - -static int dlci_dump(struct net_device *dev) -{ - printk(KERN_INFO "dlci_dump %s, HOGY MI ???\n", dev->name); - return -1; -} - -static struct comx_protocol fr_master_protocol = { - .name = "frad", - .version = VERSION, - .encap_type = ARPHRD_FRAD, - .line_init = fr_master_init, - .line_exit = fr_exit, -}; - -static struct comx_protocol fr_slave_protocol = { - .name = "ietf-ip", - .version = VERSION, - .encap_type = ARPHRD_DLCI, - .line_init = fr_slave_init, - .line_exit = fr_exit, -}; - -static struct comx_hardware fr_dlci = { - .name = "dlci", - .version = VERSION, - .hw_init = dlci_init, - .hw_exit = dlci_exit, - .hw_dump = dlci_dump, -}; - -static int __init comx_proto_fr_init(void) -{ - int ret; - - if ((ret = comx_register_hardware(&fr_dlci))) { - return ret; - } - if ((ret = comx_register_protocol(&fr_master_protocol))) { - return ret; - } - return comx_register_protocol(&fr_slave_protocol); -} - -static void __exit comx_proto_fr_exit(void) -{ - comx_unregister_hardware(fr_dlci.name); - comx_unregister_protocol(fr_master_protocol.name); - comx_unregister_protocol(fr_slave_protocol.name); -} - -module_init(comx_proto_fr_init); -module_exit(comx_proto_fr_exit); diff -Nru a/drivers/net/wan/comx-proto-lapb.c b/drivers/net/wan/comx-proto-lapb.c --- a/drivers/net/wan/comx-proto-lapb.c Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,551 +0,0 @@ -/* - * LAPB protocol module for the COMX driver - * for Linux kernel 2.2.X - * - * Original author: Tivadar Szemethy - * Maintainer: Gergely Madarasz - * - * Copyright (C) 1997-1999 (C) ITConsult-Pro Co. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.80 (99/06/14): - * - cleaned up the source code a bit - * - ported back to kernel, now works as non-module - * - * Changed (00/10/29, Henner Eisen): - * - comx_rx() / comxlapb_data_indication() return status. - * - */ - -#define VERSION "0.80" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "comx.h" -#include "comxhw.h" - -static struct proc_dir_entry *create_comxlapb_proc_entry(char *name, int mode, - int size, struct proc_dir_entry *dir); - -static void comxlapb_rx(struct net_device *dev, struct sk_buff *skb) -{ - if (!dev || !dev->priv) { - dev_kfree_skb(skb); - } else { - lapb_data_received(dev, skb); - } -} - -static int comxlapb_tx(struct net_device *dev) -{ - netif_wake_queue(dev); - return 0; -} - -static int comxlapb_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, void *saddr, unsigned len) -{ - return dev->hard_header_len; -} - -static void comxlapb_status(struct net_device *dev, unsigned short status) -{ - struct comx_channel *ch; - - if (!dev || !(ch = dev->priv)) { - return; - } - if (status & LINE_UP) { - netif_wake_queue(dev); - } - comx_status(dev, status); -} - -static int comxlapb_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - int err = 0; - - if (!(ch->init_status & HW_OPEN)) { - return -ENODEV; - } - - err = lapb_connect_request(dev); - - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(dev, "%s: lapb opened, error code: %d\n", - dev->name, err); - } - - if (!err) { - ch->init_status |= LINE_OPEN; - MOD_INC_USE_COUNT; - } - return err; -} - -static int comxlapb_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - if (!(ch->init_status & HW_OPEN)) { - return -ENODEV; - } - - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(dev, "%s: lapb closed\n", dev->name); - } - - lapb_disconnect_request(dev); - - ch->init_status &= ~LINE_OPEN; - ch->line_status &= ~PROTO_UP; - MOD_DEC_USE_COUNT; - return 0; -} - -static int comxlapb_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct sk_buff *skb2; - - if (!dev || !(ch = dev->priv) || !(dev->flags & (IFF_UP | IFF_RUNNING))) { - return -ENODEV; - } - - if (dev->type == ARPHRD_X25) { // first byte tells what to do - switch(skb->data[0]) { - case 0x00: - break; // transmit - case 0x01: - lapb_connect_request(dev); - kfree_skb(skb); - return 0; - case 0x02: - lapb_disconnect_request(dev); - default: - kfree_skb(skb); - return 0; - } - skb_pull(skb,1); - } - - netif_stop_queue(dev); - - if ((skb2 = skb_clone(skb, GFP_ATOMIC)) != NULL) { - lapb_data_request(dev, skb2); - } - - return FRAME_ACCEPTED; -} - -static int comxlapb_statistics(struct net_device *dev, char *page) -{ - struct lapb_parms_struct parms; - int len = 0; - - len += sprintf(page + len, "Line status: "); - if (lapb_getparms(dev, &parms) != LAPB_OK) { - len += sprintf(page + len, "not initialized\n"); - return len; - } - len += sprintf(page + len, "%s (%s), T1: %d/%d, T2: %d/%d, N2: %d/%d, " - "window: %d\n", parms.mode & LAPB_DCE ? "DCE" : "DTE", - parms.mode & LAPB_EXTENDED ? "EXTENDED" : "STANDARD", - parms.t1timer, parms.t1, parms.t2timer, parms.t2, - parms.n2count, parms.n2, parms.window); - - return len; -} - -static int comxlapb_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct lapb_parms_struct parms; - int len = 0; - - if (lapb_getparms(dev, &parms)) { - return -ENODEV; - } - - if (strcmp(file->name, FILENAME_T1) == 0) { - len += sprintf(page + len, "%02u / %02u\n", - parms.t1timer, parms.t1); - } else if (strcmp(file->name, FILENAME_T2) == 0) { - len += sprintf(page + len, "%02u / %02u\n", - parms.t2timer, parms.t2); - } else if (strcmp(file->name, FILENAME_N2) == 0) { - len += sprintf(page + len, "%02u / %02u\n", - parms.n2count, parms.n2); - } else if (strcmp(file->name, FILENAME_WINDOW) == 0) { - len += sprintf(page + len, "%u\n", parms.window); - } else if (strcmp(file->name, FILENAME_MODE) == 0) { - len += sprintf(page + len, "%s, %s\n", - parms.mode & LAPB_DCE ? "DCE" : "DTE", - parms.mode & LAPB_EXTENDED ? "EXTENDED" : "STANDARD"); - } else { - printk(KERN_ERR "comxlapb: internal error, filename %s\n", file->name); - return -EBADF; - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) { - *eof = 1; - } - return min_t(int, count, len - off); -} - -static int comxlapb_write_proc(struct file *file, const char *buffer, - u_long count, void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = entry->parent->data; - struct lapb_parms_struct parms; - unsigned long parm; - char *page; - - if (lapb_getparms(dev, &parms)) { - return -ENODEV; - } - - if (!(page = (char *)__get_free_page(GFP_KERNEL))) { - return -ENOMEM; - } - - if (copy_from_user(page, buffer, count)) { - free_page((unsigned long)page); - return -EFAULT; - } - if (*(page + count - 1) == '\n') { - *(page + count - 1) = 0; - } - - if (strcmp(entry->name, FILENAME_T1) == 0) { - parm=simple_strtoul(page,NULL,10); - if (parm > 0 && parm < 100) { - parms.t1=parm; - lapb_setparms(dev, &parms); - } - } else if (strcmp(entry->name, FILENAME_T2) == 0) { - parm=simple_strtoul(page, NULL, 10); - if (parm > 0 && parm < 100) { - parms.t2=parm; - lapb_setparms(dev, &parms); - } - } else if (strcmp(entry->name, FILENAME_N2) == 0) { - parm=simple_strtoul(page, NULL, 10); - if (parm > 0 && parm < 100) { - parms.n2=parm; - lapb_setparms(dev, &parms); - } - } else if (strcmp(entry->name, FILENAME_WINDOW) == 0) { - parms.window = simple_strtoul(page, NULL, 10); - lapb_setparms(dev, &parms); - } else if (strcmp(entry->name, FILENAME_MODE) == 0) { - if (comx_strcasecmp(page, "dte") == 0) { - parms.mode &= ~(LAPB_DCE | LAPB_DTE); - parms.mode |= LAPB_DTE; - } else if (comx_strcasecmp(page, "dce") == 0) { - parms.mode &= ~(LAPB_DTE | LAPB_DCE); - parms.mode |= LAPB_DCE; - } else if (comx_strcasecmp(page, "std") == 0 || - comx_strcasecmp(page, "standard") == 0) { - parms.mode &= ~LAPB_EXTENDED; - parms.mode |= LAPB_STANDARD; - } else if (comx_strcasecmp(page, "ext") == 0 || - comx_strcasecmp(page, "extended") == 0) { - parms.mode &= ~LAPB_STANDARD; - parms.mode |= LAPB_EXTENDED; - } - lapb_setparms(dev, &parms); - } else { - printk(KERN_ERR "comxlapb_write_proc: internal error, filename %s\n", - entry->name); - return -EBADF; - } - - free_page((unsigned long)page); - return count; -} - -static void comxlapb_connected(struct net_device *dev, int reason) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *comxdir = ch->procdir->subdir; - - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(ch->dev, "%s: lapb connected, reason: %d\n", - ch->dev->name, reason); - } - - if (ch->dev->type == ARPHRD_X25) { - unsigned char *p; - struct sk_buff *skb; - - if ((skb = dev_alloc_skb(1)) == NULL) { - printk(KERN_ERR "comxlapb: out of memory!\n"); - return; - } - p = skb_put(skb,1); - *p = 0x01; // link established - skb->dev = ch->dev; - skb->protocol = htons(ETH_P_X25); - skb->mac.raw = skb->data; - skb->pkt_type = PACKET_HOST; - - netif_rx(skb); - ch->dev->last_rx = jiffies; - } - - for (; comxdir; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_MODE) == 0) { - comxdir->mode = S_IFREG | 0444; - } - } - - - ch->line_status |= PROTO_UP; - comx_status(ch->dev, ch->line_status); -} - -static void comxlapb_disconnected(struct net_device *dev, int reason) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *comxdir = ch->procdir->subdir; - - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(ch->dev, "%s: lapb disconnected, reason: %d\n", - ch->dev->name, reason); - } - - if (ch->dev->type == ARPHRD_X25) { - unsigned char *p; - struct sk_buff *skb; - - if ((skb = dev_alloc_skb(1)) == NULL) { - printk(KERN_ERR "comxlapb: out of memory!\n"); - return; - } - p = skb_put(skb,1); - *p = 0x02; // link disconnected - skb->dev = ch->dev; - skb->protocol = htons(ETH_P_X25); - skb->mac.raw = skb->data; - skb->pkt_type = PACKET_HOST; - - netif_rx(skb); - ch->dev->last_rx = jiffies; - } - - for (; comxdir; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_MODE) == 0) { - comxdir->mode = S_IFREG | 0644; - } - } - - ch->line_status &= ~PROTO_UP; - comx_status(ch->dev, ch->line_status); -} - -static int comxlapb_data_indication(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = dev->priv; - - if (ch->dev->type == ARPHRD_X25) { - skb_push(skb, 1); - - if (skb_cow(skb, 1)) - return NET_RX_DROP; - - skb->data[0] = 0; // indicate data for X25 - skb->protocol = htons(ETH_P_X25); - } else { - skb->protocol = htons(ETH_P_IP); - } - - skb->dev = ch->dev; - skb->mac.raw = skb->data; - return comx_rx(ch->dev, skb); -} - -static void comxlapb_data_transmit(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = dev->priv; - - if (ch->HW_send_packet) { - ch->HW_send_packet(ch->dev, skb); - } -} - -static int comxlapb_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - dev->flags = 0; - dev->type = 0; - dev->mtu = 0; - dev->hard_header_len = 0; - - ch->LINE_rx = NULL; - ch->LINE_tx = NULL; - ch->LINE_status = NULL; - ch->LINE_open = NULL; - ch->LINE_close = NULL; - ch->LINE_xmit = NULL; - ch->LINE_header = NULL; - ch->LINE_statistics = NULL; - - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(dev, "%s: unregistering lapb\n", dev->name); - } - lapb_unregister(dev); - - remove_proc_entry(FILENAME_T1, ch->procdir); - remove_proc_entry(FILENAME_T2, ch->procdir); - remove_proc_entry(FILENAME_N2, ch->procdir); - remove_proc_entry(FILENAME_MODE, ch->procdir); - remove_proc_entry(FILENAME_WINDOW, ch->procdir); - - MOD_DEC_USE_COUNT; - return 0; -} - -static int comxlapb_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct lapb_register_struct lapbreg; - - dev->mtu = 1500; - dev->hard_header_len = 4; - dev->addr_len = 0; - - ch->LINE_rx = comxlapb_rx; - ch->LINE_tx = comxlapb_tx; - ch->LINE_status = comxlapb_status; - ch->LINE_open = comxlapb_open; - ch->LINE_close = comxlapb_close; - ch->LINE_xmit = comxlapb_xmit; - ch->LINE_header = comxlapb_header; - ch->LINE_statistics = comxlapb_statistics; - - lapbreg.connect_confirmation = comxlapb_connected; - lapbreg.connect_indication = comxlapb_connected; - lapbreg.disconnect_confirmation = comxlapb_disconnected; - lapbreg.disconnect_indication = comxlapb_disconnected; - lapbreg.data_indication = comxlapb_data_indication; - lapbreg.data_transmit = comxlapb_data_transmit; - if (lapb_register(dev, &lapbreg)) { - return -ENOMEM; - } - if (ch->debug_flags & DEBUG_COMX_LAPB) { - comx_debug(dev, "%s: lapb registered\n", dev->name); - } - - if (!create_comxlapb_proc_entry(FILENAME_T1, 0644, 8, ch->procdir)) { - return -ENOMEM; - } - if (!create_comxlapb_proc_entry(FILENAME_T2, 0644, 8, ch->procdir)) { - return -ENOMEM; - } - if (!create_comxlapb_proc_entry(FILENAME_N2, 0644, 8, ch->procdir)) { - return -ENOMEM; - } - if (!create_comxlapb_proc_entry(FILENAME_MODE, 0644, 14, ch->procdir)) { - return -ENOMEM; - } - if (!create_comxlapb_proc_entry(FILENAME_WINDOW, 0644, 0, ch->procdir)) { - return -ENOMEM; - } - - MOD_INC_USE_COUNT; - return 0; -} - -static int comxlapb_init_lapb(struct net_device *dev) -{ - dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; - dev->type = ARPHRD_LAPB; - - return(comxlapb_init(dev)); -} - -static int comxlapb_init_x25(struct net_device *dev) -{ - dev->flags = IFF_NOARP; - dev->type = ARPHRD_X25; - - return(comxlapb_init(dev)); -} - -static struct proc_dir_entry *create_comxlapb_proc_entry(char *name, int mode, - int size, struct proc_dir_entry *dir) -{ - struct proc_dir_entry *new_file; - - if ((new_file = create_proc_entry(name, S_IFREG | mode, dir)) != NULL) { - new_file->data = (void *)new_file; - new_file->read_proc = &comxlapb_read_proc; - new_file->write_proc = &comxlapb_write_proc; - new_file->size = size; - new_file->nlink = 1; - } - return(new_file); -} - -static struct comx_protocol comxlapb_protocol = { - "lapb", - VERSION, - ARPHRD_LAPB, - comxlapb_init_lapb, - comxlapb_exit, - NULL -}; - -static struct comx_protocol comx25_protocol = { - "x25", - VERSION, - ARPHRD_X25, - comxlapb_init_x25, - comxlapb_exit, - NULL -}; - -static int __init comx_proto_lapb_init(void) -{ - int ret; - - if ((ret = comx_register_protocol(&comxlapb_protocol)) != 0) { - return ret; - } - return comx_register_protocol(&comx25_protocol); -} - -static void __exit comx_proto_lapb_exit(void) -{ - comx_unregister_protocol(comxlapb_protocol.name); - comx_unregister_protocol(comx25_protocol.name); -} - -module_init(comx_proto_lapb_init); -module_exit(comx_proto_lapb_exit); - -MODULE_LICENSE("GPL"); diff -Nru a/drivers/net/wan/comx-proto-ppp.c b/drivers/net/wan/comx-proto-ppp.c --- a/drivers/net/wan/comx-proto-ppp.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,269 +0,0 @@ -/* - * Synchronous PPP / Cisco-HDLC driver for the COMX boards - * - * Author: Gergely Madarasz - * - * based on skeleton code by Tivadar Szemethy - * - * Copyright (C) 1999 ITConsult-Pro Co. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * - * Version 0.10 (99/06/10): - * - written the first code :) - * - * Version 0.20 (99/06/16): - * - added hdlc protocol - * - protocol up is IFF_RUNNING - * - * Version 0.21 (99/07/15): - * - some small fixes with the line status - * - * Version 0.22 (99/08/05): - * - don't test IFF_RUNNING but the pp_link_state of the sppp - * - * Version 0.23 (99/12/02): - * - tbusy fixes - * - */ - -#define VERSION "0.23" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "comx.h" - -MODULE_AUTHOR("Author: Gergely Madarasz "); -MODULE_DESCRIPTION("Cisco-HDLC / Synchronous PPP driver for the COMX sync serial boards"); -MODULE_LICENSE("GPL"); - -static struct comx_protocol syncppp_protocol; -static struct comx_protocol hdlc_protocol; - -struct syncppp_data { - struct timer_list status_timer; -}; - -static void syncppp_status_timerfun(unsigned long d) { - struct net_device *dev=(struct net_device *)d; - struct comx_channel *ch=dev->priv; - struct syncppp_data *spch=ch->LINE_privdata; - struct sppp *sp = (struct sppp *)sppp_of(dev); - - if(!(ch->line_status & PROTO_UP) && - (sp->pp_link_state==SPPP_LINK_UP)) { - comx_status(dev, ch->line_status | PROTO_UP); - } - if((ch->line_status & PROTO_UP) && - (sp->pp_link_state==SPPP_LINK_DOWN)) { - comx_status(dev, ch->line_status & ~PROTO_UP); - } - mod_timer(&spch->status_timer,jiffies + HZ*3); -} - -static int syncppp_tx(struct net_device *dev) -{ - struct comx_channel *ch=dev->priv; - - if(ch->line_status & LINE_UP) { - netif_wake_queue(dev); - } - return 0; -} - -static void syncppp_status(struct net_device *dev, unsigned short status) -{ - status &= ~(PROTO_UP | PROTO_LOOP); - if(status & LINE_UP) { - netif_wake_queue(dev); - sppp_open(dev); - } else { - /* Line went down */ - netif_stop_queue(dev); - sppp_close(dev); - } - comx_status(dev, status); -} - -static int syncppp_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct syncppp_data *spch = ch->LINE_privdata; - - if (!(ch->init_status & HW_OPEN)) return -ENODEV; - - ch->init_status |= LINE_OPEN; - ch->line_status &= ~(PROTO_UP | PROTO_LOOP); - - if(ch->line_status & LINE_UP) { - sppp_open(dev); - } - - init_timer(&spch->status_timer); - spch->status_timer.function=syncppp_status_timerfun; - spch->status_timer.data=(unsigned long)dev; - spch->status_timer.expires=jiffies + HZ*3; - add_timer(&spch->status_timer); - - return 0; -} - -static int syncppp_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct syncppp_data *spch = ch->LINE_privdata; - - if (!(ch->init_status & HW_OPEN)) return -ENODEV; - del_timer(&spch->status_timer); - - sppp_close(dev); - - ch->init_status &= ~LINE_OPEN; - ch->line_status &= ~(PROTO_UP | PROTO_LOOP); - - return 0; -} - -static int syncppp_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - netif_stop_queue(dev); - switch(ch->HW_send_packet(dev, skb)) { - case FRAME_QUEUED: - netif_wake_queue(dev); - break; - case FRAME_ACCEPTED: - case FRAME_DROPPED: - break; - case FRAME_ERROR: - printk(KERN_ERR "%s: Transmit frame error (len %d)\n", - dev->name, skb->len); - break; - } - return 0; -} - - -static int syncppp_statistics(struct net_device *dev, char *page) -{ - int len = 0; - - len += sprintf(page + len, " "); - return len; -} - - -static int syncppp_exit(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - sppp_detach(dev); - - dev->flags = 0; - dev->type = 0; - dev->mtu = 0; - - ch->LINE_rx = NULL; - ch->LINE_tx = NULL; - ch->LINE_status = NULL; - ch->LINE_open = NULL; - ch->LINE_close = NULL; - ch->LINE_xmit = NULL; - ch->LINE_header = NULL; - ch->LINE_rebuild_header = NULL; - ch->LINE_statistics = NULL; - - kfree(ch->LINE_privdata); - ch->LINE_privdata = NULL; - - MOD_DEC_USE_COUNT; - return 0; -} - -static int syncppp_init(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct ppp_device *pppdev = (struct ppp_device *)ch->if_ptr; - - ch->LINE_privdata = kmalloc(sizeof(struct syncppp_data), GFP_KERNEL); - if (!ch->LINE_privdata) - return -ENOMEM; - - pppdev->dev = dev; - sppp_attach(pppdev); - - if(ch->protocol == &hdlc_protocol) { - pppdev->sppp.pp_flags |= PP_CISCO; - dev->type = ARPHRD_HDLC; - } else { - pppdev->sppp.pp_flags &= ~PP_CISCO; - dev->type = ARPHRD_PPP; - } - - ch->LINE_rx = sppp_input; - ch->LINE_tx = syncppp_tx; - ch->LINE_status = syncppp_status; - ch->LINE_open = syncppp_open; - ch->LINE_close = syncppp_close; - ch->LINE_xmit = syncppp_xmit; - ch->LINE_header = NULL; - ch->LINE_statistics = syncppp_statistics; - - - MOD_INC_USE_COUNT; - return 0; -} - -static struct comx_protocol syncppp_protocol = { - "ppp", - VERSION, - ARPHRD_PPP, - syncppp_init, - syncppp_exit, - NULL -}; - -static struct comx_protocol hdlc_protocol = { - "hdlc", - VERSION, - ARPHRD_PPP, - syncppp_init, - syncppp_exit, - NULL -}; - -static int __init comx_proto_ppp_init(void) -{ - int ret; - - ret = comx_register_protocol(&hdlc_protocol); - if (!ret) { - ret = comx_register_protocol(&syncppp_protocol); - if (ret) - comx_unregister_protocol(hdlc_protocol.name); - } - return ret; -} - -static void __exit comx_proto_ppp_exit(void) -{ - comx_unregister_protocol(syncppp_protocol.name); - comx_unregister_protocol(hdlc_protocol.name); -} - -module_init(comx_proto_ppp_init); -module_exit(comx_proto_ppp_exit); diff -Nru a/drivers/net/wan/comx.c b/drivers/net/wan/comx.c --- a/drivers/net/wan/comx.c Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1128 +0,0 @@ -/* - * Device driver framework for the COMX line of synchronous serial boards - * - * for Linux kernel 2.2.X / 2.4.X - * - * Original authors: Arpad Bakay , - * Peter Bajan , - * Previous maintainer: Tivadar Szemethy - * Current maintainer: Gergely Madarasz - * - * Copyright (C) 1995-1999 ITConsult-Pro Co. - * - * Contributors: - * Arnaldo Carvalho de Melo (0.85) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * Version 0.80 (99/06/11): - * - clean up source code (playing a bit of indent) - * - port back to kernel, add support for non-module versions - * - add support for board resets when channel protocol is down - * - reset the device structure after protocol exit - * the syncppp driver needs it - * - add support for /proc/comx/protocols and - * /proc/comx/boardtypes - * - * Version 0.81 (99/06/21): - * - comment out the board reset support code, the locomx - * driver seems not buggy now - * - printk() levels fixed - * - * Version 0.82 (99/07/08): - * - Handle stats correctly if the lowlevel driver is - * is not a comx one (locomx - z85230) - * - * Version 0.83 (99/07/15): - * - reset line_status when interface is down - * - * Version 0.84 (99/12/01): - * - comx_status should not check for IFF_UP (to report - * line status from dev->open()) - * - * Version 0.85 (00/08/15): - * - resource release on failure in comx_mkdir - * - fix return value on failure at comx_write_proc - * - * Changed (00/10/29, Henner Eisen): - * - comx_rx() / comxlapb_data_indication() return status. - */ - -#define VERSION "0.85" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_KMOD -#include -#endif - -#ifndef CONFIG_PROC_FS -#error For now, COMX really needs the /proc filesystem -#endif - -#include -#include "comx.h" - -MODULE_AUTHOR("Gergely Madarasz "); -MODULE_DESCRIPTION("Common code for the COMX synchronous serial adapters"); -MODULE_LICENSE("GPL"); - -static struct comx_hardware *comx_channels = NULL; -static struct comx_protocol *comx_lines = NULL; - -static int comx_mkdir(struct inode *, struct dentry *, int); -static int comx_rmdir(struct inode *, struct dentry *); -static struct dentry *comx_lookup(struct inode *, struct dentry *, struct nameidata *); - -static struct inode_operations comx_root_inode_ops = { - .lookup = comx_lookup, - .mkdir = comx_mkdir, - .rmdir = comx_rmdir, -}; - -static int comx_delete_dentry(struct dentry *dentry); -static struct proc_dir_entry *create_comx_proc_entry(char *name, int mode, - int size, struct proc_dir_entry *dir); - -static struct dentry_operations comx_dentry_operations = { - .d_delete = comx_delete_dentry, -}; - - -static struct proc_dir_entry * comx_root_dir; - -struct comx_debugflags_struct comx_debugflags[] = { - { "comx_rx", DEBUG_COMX_RX }, - { "comx_tx", DEBUG_COMX_TX }, - { "hw_tx", DEBUG_HW_TX }, - { "hw_rx", DEBUG_HW_RX }, - { "hdlc_keepalive", DEBUG_HDLC_KEEPALIVE }, - { "comxppp", DEBUG_COMX_PPP }, - { "comxlapb", DEBUG_COMX_LAPB }, - { "dlci", DEBUG_COMX_DLCI }, - { NULL, 0 } -}; - - -int comx_debug(struct net_device *dev, char *fmt, ...) -{ - struct comx_channel *ch = dev->priv; - char *page,*str; - va_list args; - int len; - - if (!ch->debug_area) return 0; - - if (!(page = (char *)__get_free_page(GFP_ATOMIC))) return -ENOMEM; - - va_start(args, fmt); - len = vsprintf(str = page, fmt, args); - va_end(args); - - if (len >= PAGE_SIZE) { - printk(KERN_ERR "comx_debug: PANIC! len = %d !!!\n", len); - free_page((unsigned long)page); - return -EINVAL; - } - - while (len) { - int to_copy; - int free = (ch->debug_start - ch->debug_end + ch->debug_size) - % ch->debug_size; - - to_copy = min_t(int, free ? free : ch->debug_size, - min_t(int, ch->debug_size - ch->debug_end, len)); - memcpy(ch->debug_area + ch->debug_end, str, to_copy); - str += to_copy; - len -= to_copy; - ch->debug_end = (ch->debug_end + to_copy) % ch->debug_size; - if (ch->debug_start == ch->debug_end) // Full ? push start away - ch->debug_start = (ch->debug_start + len + 1) % - ch->debug_size; - ch->debug_file->size = (ch->debug_end - ch->debug_start + - ch->debug_size) % ch->debug_size; - } - - free_page((unsigned long)page); - return 0; -} - -int comx_debug_skb(struct net_device *dev, struct sk_buff *skb, char *msg) -{ - struct comx_channel *ch = dev->priv; - - if (!ch->debug_area) return 0; - if (!skb) comx_debug(dev, "%s: %s NULL skb\n\n", dev->name, msg); - if (!skb->len) comx_debug(dev, "%s: %s empty skb\n\n", dev->name, msg); - - return comx_debug_bytes(dev, skb->data, skb->len, msg); -} - -int comx_debug_bytes(struct net_device *dev, unsigned char *bytes, int len, - char *msg) -{ - int pos = 0; - struct comx_channel *ch = dev->priv; - - if (!ch->debug_area) return 0; - - comx_debug(dev, "%s: %s len %d\n", dev->name, msg, len); - - while (pos != len) { - char line[80]; - int i = 0; - - memset(line, 0, 80); - sprintf(line,"%04d ", pos); - do { - sprintf(line + 5 + (pos % 16) * 3, "%02x", bytes[pos]); - sprintf(line + 60 + (pos % 16), "%c", - isprint(bytes[pos]) ? bytes[pos] : '.'); - pos++; - } while (pos != len && pos % 16); - - while ( i++ != 78 ) if (line[i] == 0) line[i] = ' '; - line[77] = '\n'; - line[78] = 0; - - comx_debug(dev, "%s", line); - } - comx_debug(dev, "\n"); - return 0; -} - -static void comx_loadavg_timerfun(unsigned long d) -{ - struct net_device *dev = (struct net_device *)d; - struct comx_channel *ch = dev->priv; - - ch->avg_bytes[ch->loadavg_counter] = ch->current_stats->rx_bytes; - ch->avg_bytes[ch->loadavg_counter + ch->loadavg_size] = - ch->current_stats->tx_bytes; - - ch->loadavg_counter = (ch->loadavg_counter + 1) % ch->loadavg_size; - - mod_timer(&ch->loadavg_timer,jiffies + HZ * ch->loadavg[0]); -} - -#if 0 -static void comx_reset_timerfun(unsigned long d) -{ - struct net_device *dev = (struct net_device *)d; - struct comx_channel *ch = dev->priv; - - if(!(ch->line_status & (PROTO_LOOP | PROTO_UP))) { - if(test_and_set_bit(0,&ch->reset_pending) && ch->HW_reset) { - ch->HW_reset(dev); - } - } - - mod_timer(&ch->reset_timer, jiffies + HZ * ch->reset_timeout); -} -#endif - -static int comx_open(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *comxdir = ch->procdir->subdir; - int ret=0; - - if (!ch->protocol || !ch->hardware) return -ENODEV; - - if ((ret = ch->HW_open(dev))) return ret; - if ((ret = ch->LINE_open(dev))) { - ch->HW_close(dev); - return ret; - }; - - for (; comxdir ; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_HARDWARE) == 0 || - strcmp(comxdir->name, FILENAME_PROTOCOL) == 0) - comxdir->mode = S_IFREG | 0444; - } - -#if 0 - ch->reset_pending = 1; - ch->reset_timeout = 30; - ch->reset_timer.function = comx_reset_timerfun; - ch->reset_timer.data = (unsigned long)dev; - ch->reset_timer.expires = jiffies + HZ * ch->reset_timeout; - add_timer(&ch->reset_timer); -#endif - - return 0; -} - -static int comx_close(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - struct proc_dir_entry *comxdir = ch->procdir->subdir; - int ret = -ENODEV; - - if (test_and_clear_bit(0, &ch->lineup_pending)) { - del_timer(&ch->lineup_timer); - } - -#if 0 - del_timer(&ch->reset_timer); -#endif - - if (ch->init_status & LINE_OPEN && ch->protocol && ch->LINE_close) { - ret = ch->LINE_close(dev); - } - - if (ret) return ret; - - if (ch->init_status & HW_OPEN && ch->hardware && ch->HW_close) { - ret = ch->HW_close(dev); - } - - ch->line_status=0; - - for (; comxdir ; comxdir = comxdir->next) { - if (strcmp(comxdir->name, FILENAME_HARDWARE) == 0 || - strcmp(comxdir->name, FILENAME_PROTOCOL) == 0) - comxdir->mode = S_IFREG | 0644; - } - - return ret; -} - -void comx_status(struct net_device *dev, int status) -{ - struct comx_channel *ch = dev->priv; - -#if 0 - if(status & (PROTO_UP | PROTO_LOOP)) { - clear_bit(0,&ch->reset_pending); - } -#endif - - printk(KERN_NOTICE "Interface %s: modem status %s, line protocol %s\n", - dev->name, status & LINE_UP ? "UP" : "DOWN", - status & PROTO_LOOP ? "LOOP" : status & PROTO_UP ? - "UP" : "DOWN"); - - ch->line_status = status; -} - -static int comx_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - int rc; - - if (skb->len > dev->mtu + dev->hard_header_len) { - printk(KERN_ERR "comx_xmit: %s: skb->len %d > dev->mtu %d\n", dev->name, - (int)skb->len, dev->mtu); - } - - if (ch->debug_flags & DEBUG_COMX_TX) { - comx_debug_skb(dev, skb, "comx_xmit skb"); - } - - rc=ch->LINE_xmit(skb, dev); -// if (!rc) dev_kfree_skb(skb); - - return rc; -} - -static int comx_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, void *saddr, unsigned len) -{ - struct comx_channel *ch = dev->priv; - - if (ch->LINE_header) { - return (ch->LINE_header(skb, dev, type, daddr, saddr, len)); - } else { - return 0; - } -} - -static int comx_rebuild_header(struct sk_buff *skb) -{ - struct net_device *dev = skb->dev; - struct comx_channel *ch = dev->priv; - - if (ch->LINE_rebuild_header) { - return(ch->LINE_rebuild_header(skb)); - } else { - return 0; - } -} - -int comx_rx(struct net_device *dev, struct sk_buff *skb) -{ - struct comx_channel *ch = dev->priv; - - if (ch->debug_flags & DEBUG_COMX_RX) { - comx_debug_skb(dev, skb, "comx_rx skb"); - } - if (skb) { - netif_rx(skb); - dev->last_rx = jiffies; - } - return 0; -} - -static struct net_device_stats *comx_stats(struct net_device *dev) -{ - struct comx_channel *ch = dev->priv; - - return ch->current_stats; -} - -void comx_lineup_func(unsigned long d) -{ - struct net_device *dev = (struct net_device *)d; - struct comx_channel *ch = dev->priv; - - del_timer(&ch->lineup_timer); - clear_bit(0, &ch->lineup_pending); - - if (ch->LINE_status) { - ch->LINE_status(dev, ch->line_status |= LINE_UP); - } -} - -#define LOADAVG(avg, off) (int) \ - ((ch->avg_bytes[(ch->loadavg_counter - 1 + ch->loadavg_size * 2) \ - % ch->loadavg_size + off] - ch->avg_bytes[(ch->loadavg_counter - 1 \ - - ch->loadavg[avg] / ch->loadavg[0] + ch->loadavg_size * 2) \ - % ch->loadavg_size + off]) / ch->loadavg[avg] * 8) - -static int comx_statistics(struct net_device *dev, char *page) -{ - struct comx_channel *ch = dev->priv; - int len = 0; - int tmp; - int i = 0; - char tmpstr[20]; - int tmpstrlen = 0; - - len += sprintf(page + len, "Interface administrative status is %s, " - "modem status is %s, protocol is %s\n", - dev->flags & IFF_UP ? "UP" : "DOWN", - ch->line_status & LINE_UP ? "UP" : "DOWN", - ch->line_status & PROTO_LOOP ? "LOOP" : - ch->line_status & PROTO_UP ? "UP" : "DOWN"); - len += sprintf(page + len, "Modem status changes: %lu, Transmitter status " - "is %s, tbusy: %d\n", ch->current_stats->tx_carrier_errors, ch->HW_txe ? - ch->HW_txe(dev) ? "IDLE" : "BUSY" : "NOT READY", netif_running(dev)); - len += sprintf(page + len, "Interface load (input): %d / %d / %d bits/s (", - LOADAVG(0,0), LOADAVG(1, 0), LOADAVG(2, 0)); - tmpstr[0] = 0; - for (i=0; i != 3; i++) { - char tf; - - tf = ch->loadavg[i] % 60 == 0 && - ch->loadavg[i] / 60 > 0 ? 'm' : 's'; - tmpstrlen += sprintf(tmpstr + tmpstrlen, "%d%c%s", - ch->loadavg[i] / (tf == 'm' ? 60 : 1), tf, - i == 2 ? ")\n" : "/"); - } - len += sprintf(page + len, - "%s (output): %d / %d / %d bits/s (%s", tmpstr, - LOADAVG(0,ch->loadavg_size), LOADAVG(1, ch->loadavg_size), - LOADAVG(2, ch->loadavg_size), tmpstr); - - len += sprintf(page + len, "Debug flags: "); - tmp = len; i = 0; - while (comx_debugflags[i].name) { - if (ch->debug_flags & comx_debugflags[i].value) - len += sprintf(page + len, "%s ", - comx_debugflags[i].name); - i++; - } - len += sprintf(page + len, "%s\n", tmp == len ? "none" : ""); - - len += sprintf(page + len, "RX errors: len: %lu, overrun: %lu, crc: %lu, " - "aborts: %lu\n buffer overrun: %lu, pbuffer overrun: %lu\n" - "TX errors: underrun: %lu\n", - ch->current_stats->rx_length_errors, ch->current_stats->rx_over_errors, - ch->current_stats->rx_crc_errors, ch->current_stats->rx_frame_errors, - ch->current_stats->rx_missed_errors, ch->current_stats->rx_fifo_errors, - ch->current_stats->tx_fifo_errors); - - if (ch->LINE_statistics && (ch->init_status & LINE_OPEN)) { - len += ch->LINE_statistics(dev, page + len); - } else { - len += sprintf(page+len, "Line status: driver not initialized\n"); - } - if (ch->HW_statistics && (ch->init_status & HW_OPEN)) { - len += ch->HW_statistics(dev, page + len); - } else { - len += sprintf(page+len, "Board status: driver not initialized\n"); - } - - return len; -} - -static int comx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -{ - struct comx_channel *ch = dev->priv; - - if (ch->LINE_ioctl) { - return(ch->LINE_ioctl(dev, ifr, cmd)); - } - return -EINVAL; -} - -static void comx_reset_dev(struct net_device *dev) -{ - dev->open = comx_open; - dev->stop = comx_close; - dev->hard_start_xmit = comx_xmit; - dev->hard_header = comx_header; - dev->rebuild_header = comx_rebuild_header; - dev->get_stats = comx_stats; - dev->do_ioctl = comx_ioctl; - dev->change_mtu = NULL; - dev->tx_queue_len = 20; - dev->flags = IFF_NOARP; -} - -static int comx_init_dev(struct net_device *dev) -{ - struct comx_channel *ch; - - if ((ch = kmalloc(sizeof(struct comx_channel), GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - memset(ch, 0, sizeof(struct comx_channel)); - - ch->loadavg[0] = 5; - ch->loadavg[1] = 300; - ch->loadavg[2] = 900; - ch->loadavg_size = ch->loadavg[2] / ch->loadavg[0] + 1; - if ((ch->avg_bytes = kmalloc(ch->loadavg_size * - sizeof(unsigned long) * 2, GFP_KERNEL)) == NULL) { - kfree(ch); - return -ENOMEM; - } - - memset(ch->avg_bytes, 0, ch->loadavg_size * sizeof(unsigned long) * 2); - ch->loadavg_counter = 0; - ch->loadavg_timer.function = comx_loadavg_timerfun; - ch->loadavg_timer.data = (unsigned long)dev; - ch->loadavg_timer.expires = jiffies + HZ * ch->loadavg[0]; - add_timer(&ch->loadavg_timer); - - dev->priv = (void *)ch; - ch->dev = dev; - ch->line_status &= ~LINE_UP; - - ch->current_stats = &ch->stats; - - comx_reset_dev(dev); - return 0; -} - -static int comx_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct net_device *dev = file->parent->data; - struct comx_channel *ch = dev->priv; - int len = 0; - - if (strcmp(file->name, FILENAME_STATUS) == 0) { - len = comx_statistics(dev, page); - } else if (strcmp(file->name, FILENAME_HARDWARE) == 0) { - len = sprintf(page, "%s\n", ch->hardware ? - ch->hardware->name : HWNAME_NONE); - } else if (strcmp(file->name, FILENAME_PROTOCOL) == 0) { - len = sprintf(page, "%s\n", ch->protocol ? - ch->protocol->name : PROTONAME_NONE); - } else if (strcmp(file->name, FILENAME_LINEUPDELAY) == 0) { - len = sprintf(page, "%01d\n", ch->lineup_delay); - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) { - *eof = 1; - } - return min_t(int, count, len - off); -} - - -static int comx_root_read_proc(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - struct proc_dir_entry *file = (struct proc_dir_entry *)data; - struct comx_hardware *hw; - struct comx_protocol *line; - - int len = 0; - - if (strcmp(file->name, FILENAME_HARDWARELIST) == 0) { - for(hw=comx_channels;hw;hw=hw->next) - len+=sprintf(page+len, "%s\n", hw->name); - } else if (strcmp(file->name, FILENAME_PROTOCOLLIST) == 0) { - for(line=comx_lines;line;line=line->next) - len+=sprintf(page+len, "%s\n", line->name); - } - - if (off >= len) { - *eof = 1; - return 0; - } - - *start = page + off; - if (count >= len - off) { - *eof = 1; - } - return min_t(int, count, len - off); -} - - - -static int comx_write_proc(struct file *file, const char *buffer, u_long count, - void *data) -{ - struct proc_dir_entry *entry = (struct proc_dir_entry *)data; - struct net_device *dev = (struct net_device *)entry->parent->data; - struct comx_channel *ch = dev->priv; - char *page; - struct comx_hardware *hw = comx_channels; - struct comx_protocol *line = comx_lines; - int ret=0; - - if (count > PAGE_SIZE) { - printk(KERN_ERR "count is %lu > %d!!!\n", count, (int)PAGE_SIZE); - return -ENOSPC; - } - - if (!(page = (char *)__get_free_page(GFP_KERNEL))) return -ENOMEM; - - if(copy_from_user(page, buffer, count)) - { - count = -EFAULT; - goto out; - } - - if (page[count-1] == '\n') - page[count-1] = '\0'; - else if (count < PAGE_SIZE) - page[count] = '\0'; - else if (page[count]) { - count = -EINVAL; - goto out; - } - - if (strcmp(entry->name, FILENAME_DEBUG) == 0) { - int i; - int ret = 0; - - if ((i = simple_strtoul(page, NULL, 10)) != 0) { - unsigned long flags; - - save_flags(flags); cli(); - if (ch->debug_area) kfree(ch->debug_area); - if ((ch->debug_area = kmalloc(ch->debug_size = i, - GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - } - ch->debug_start = ch->debug_end = 0; - restore_flags(flags); - free_page((unsigned long)page); - return ret ? ret : count; - } - - if (*page != '+' && *page != '-') { - free_page((unsigned long)page); - return -EINVAL; - } - while (comx_debugflags[i].value && - strncmp(comx_debugflags[i].name, page + 1, - strlen(comx_debugflags[i].name))) { - i++; - } - - if (comx_debugflags[i].value == 0) { - printk(KERN_ERR "Invalid debug option\n"); - free_page((unsigned long)page); - return -EINVAL; - } - if (*page == '+') { - ch->debug_flags |= comx_debugflags[i].value; - } else { - ch->debug_flags &= ~comx_debugflags[i].value; - } - } else if (strcmp(entry->name, FILENAME_HARDWARE) == 0) { - if(strlen(page)>10) { - free_page((unsigned long)page); - return -EINVAL; - } - while (hw) { - if (strcmp(hw->name, page) == 0) { - break; - } else { - hw = hw->next; - } - } -#ifdef CONFIG_KMOD - if(!hw && comx_strcasecmp(HWNAME_NONE,page) != 0){ - request_module("comx-hw-%s",page); - } - hw=comx_channels; - while (hw) { - if (comx_strcasecmp(hw->name, page) == 0) { - break; - } else { - hw = hw->next; - } - } -#endif - - if (comx_strcasecmp(HWNAME_NONE, page) != 0 && !hw) { - free_page((unsigned long)page); - return -ENODEV; - } - if (ch->init_status & HW_OPEN) { - free_page((unsigned long)page); - return -EBUSY; - } - if (ch->hardware && ch->hardware->hw_exit && - (ret=ch->hardware->hw_exit(dev))) { - free_page((unsigned long)page); - return ret; - } - ch->hardware = hw; - entry->size = strlen(page) + 1; - if (hw && hw->hw_init) hw->hw_init(dev); - } else if (strcmp(entry->name, FILENAME_PROTOCOL) == 0) { - if(strlen(page)>10) { - free_page((unsigned long)page); - return -EINVAL; - } - while (line) { - if (comx_strcasecmp(line->name, page) == 0) { - break; - } else { - line = line->next; - } - } -#ifdef CONFIG_KMOD - if(!line && comx_strcasecmp(PROTONAME_NONE, page) != 0) { - request_module("comx-proto-%s",page); - } - line=comx_lines; - while (line) { - if (comx_strcasecmp(line->name, page) == 0) { - break; - } else { - line = line->next; - } - } -#endif - - if (comx_strcasecmp(PROTONAME_NONE, page) != 0 && !line) { - free_page((unsigned long)page); - return -ENODEV; - } - - if (ch->init_status & LINE_OPEN) { - free_page((unsigned long)page); - return -EBUSY; - } - - if (ch->protocol && ch->protocol->line_exit && - (ret=ch->protocol->line_exit(dev))) { - free_page((unsigned long)page); - return ret; - } - ch->protocol = line; - entry->size = strlen(page) + 1; - comx_reset_dev(dev); - if (line && line->line_init) line->line_init(dev); - } else if (strcmp(entry->name, FILENAME_LINEUPDELAY) == 0) { - int i; - - if ((i = simple_strtoul(page, NULL, 10)) != 0) { - if (i >=0 && i < 10) { - ch->lineup_delay = i; - } else { - printk(KERN_ERR "comx: invalid lineup_delay value\n"); - } - } - } -out: - free_page((unsigned long)page); - return count; -} - -static int comx_mkdir(struct inode *dir, struct dentry *dentry, int mode) -{ - struct proc_dir_entry *new_dir, *debug_file; - struct net_device *dev; - struct comx_channel *ch; - int ret = -EIO; - - if ((dev = kmalloc(sizeof(struct net_device), GFP_KERNEL)) == NULL) { - return -ENOMEM; - } - memset(dev, 0, sizeof(struct net_device)); - - lock_kernel(); - if ((new_dir = create_proc_entry(dentry->d_name.name, mode | S_IFDIR, - comx_root_dir)) == NULL) { - goto cleanup_dev; - } - - new_dir->nlink = 2; - new_dir->data = NULL; // ide jon majd a struct dev - - /* Ezek kellenek */ - if (!create_comx_proc_entry(FILENAME_HARDWARE, 0644, - strlen(HWNAME_NONE) + 1, new_dir)) { - goto cleanup_new_dir; - } - if (!create_comx_proc_entry(FILENAME_PROTOCOL, 0644, - strlen(PROTONAME_NONE) + 1, new_dir)) { - goto cleanup_filename_hardware; - } - if (!create_comx_proc_entry(FILENAME_STATUS, 0444, 0, new_dir)) { - goto cleanup_filename_protocol; - } - if (!create_comx_proc_entry(FILENAME_LINEUPDELAY, 0644, 2, new_dir)) { - goto cleanup_filename_status; - } - - if ((debug_file = create_proc_entry(FILENAME_DEBUG, - S_IFREG | 0644, new_dir)) == NULL) { - goto cleanup_filename_lineupdelay; - } - debug_file->data = (void *)debug_file; - debug_file->read_proc = NULL; // see below - debug_file->write_proc = &comx_write_proc; - debug_file->nlink = 1; - - strcpy(dev->name, (char *)new_dir->name); - dev->init = comx_init_dev; - - if (register_netdevice(dev)) { - goto cleanup_filename_debug; - } - ch = dev->priv; - if((ch->if_ptr = (void *)kmalloc(sizeof(struct ppp_device), - GFP_KERNEL)) == NULL) { - goto cleanup_register; - } - memset(ch->if_ptr, 0, sizeof(struct ppp_device)); - ch->debug_file = debug_file; - ch->procdir = new_dir; - new_dir->data = dev; - - ch->debug_start = ch->debug_end = 0; - if ((ch->debug_area = kmalloc(ch->debug_size = DEFAULT_DEBUG_SIZE, - GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - goto cleanup_if_ptr; - } - - ch->lineup_delay = DEFAULT_LINEUP_DELAY; - - MOD_INC_USE_COUNT; - unlock_kernel(); - return 0; -cleanup_if_ptr: - kfree(ch->if_ptr); -cleanup_register: - unregister_netdevice(dev); -cleanup_filename_debug: - remove_proc_entry(FILENAME_DEBUG, new_dir); -cleanup_filename_lineupdelay: - remove_proc_entry(FILENAME_LINEUPDELAY, new_dir); -cleanup_filename_status: - remove_proc_entry(FILENAME_STATUS, new_dir); -cleanup_filename_protocol: - remove_proc_entry(FILENAME_PROTOCOL, new_dir); -cleanup_filename_hardware: - remove_proc_entry(FILENAME_HARDWARE, new_dir); -cleanup_new_dir: - remove_proc_entry(dentry->d_name.name, comx_root_dir); -cleanup_dev: - kfree(dev); - unlock_kernel(); - return ret; -} - -static int comx_rmdir(struct inode *dir, struct dentry *dentry) -{ - struct proc_dir_entry *entry = PDE(dentry->d_inode); - struct net_device *dev; - struct comx_channel *ch; - int ret; - - lock_kernel(); - dev = entry->data; - ch = dev->priv; - if (dev->flags & IFF_UP) { - printk(KERN_ERR "%s: down interface before removing it\n", dev->name); - unlock_kernel(); - return -EBUSY; - } - - if (ch->protocol && ch->protocol->line_exit && - (ret=ch->protocol->line_exit(dev))) { - unlock_kernel(); - return ret; - } - if (ch->hardware && ch->hardware->hw_exit && - (ret=ch->hardware->hw_exit(dev))) { - if(ch->protocol && ch->protocol->line_init) { - ch->protocol->line_init(dev); - } - unlock_kernel(); - return ret; - } - ch->protocol = NULL; - ch->hardware = NULL; - - del_timer(&ch->loadavg_timer); - kfree(ch->avg_bytes); - - unregister_netdev(dev); - if (ch->debug_area) { - kfree(ch->debug_area); - } - if (dev->priv) { - kfree(dev->priv); - } - free_netdev(dev); - - remove_proc_entry(FILENAME_DEBUG, entry); - remove_proc_entry(FILENAME_LINEUPDELAY, entry); - remove_proc_entry(FILENAME_STATUS, entry); - remove_proc_entry(FILENAME_HARDWARE, entry); - remove_proc_entry(FILENAME_PROTOCOL, entry); - remove_proc_entry(dentry->d_name.name, comx_root_dir); - - MOD_DEC_USE_COUNT; - unlock_kernel(); - return 0; -} - -static struct dentry *comx_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) -{ - struct proc_dir_entry *de; - struct inode *inode = NULL; - - lock_kernel(); - if ((de = PDE(dir)) != NULL) { - for (de = de->subdir ; de ; de = de->next) { - if ((de->namelen == dentry->d_name.len) && - (memcmp(dentry->d_name.name, de->name, - de->namelen) == 0)) { - if ((inode = proc_get_inode(dir->i_sb, - de->low_ino, de)) == NULL) { - printk(KERN_ERR "COMX: lookup error\n"); - unlock_kernel(); - return ERR_PTR(-EINVAL); - } - break; - } - } - } - unlock_kernel(); - dentry->d_op = &comx_dentry_operations; - d_add(dentry, inode); - return NULL; -} - -int comx_strcasecmp(const char *cs, const char *ct) -{ - register signed char __res; - - while (1) { - if ((__res = toupper(*cs) - toupper(*ct++)) != 0 || !*cs++) { - break; - } - } - return __res; -} - -static int comx_delete_dentry(struct dentry *dentry) -{ - return 1; -} - -static struct proc_dir_entry *create_comx_proc_entry(char *name, int mode, - int size, struct proc_dir_entry *dir) -{ - struct proc_dir_entry *new_file; - - if ((new_file = create_proc_entry(name, S_IFREG | mode, dir)) != NULL) { - new_file->data = (void *)new_file; - new_file->read_proc = &comx_read_proc; - new_file->write_proc = &comx_write_proc; - new_file->size = size; - new_file->nlink = 1; - } - return(new_file); -} - -int comx_register_hardware(struct comx_hardware *comx_hw) -{ - struct comx_hardware *hw = comx_channels; - - if (!hw) { - comx_channels = comx_hw; - } else { - while (hw->next != NULL && strcmp(comx_hw->name, hw->name) != 0) { - hw = hw->next; - } - if (strcmp(comx_hw->name, hw->name) == 0) { - return -1; - } - hw->next = comx_hw; - } - - printk(KERN_INFO "COMX: driver for hardware type %s, version %s\n", comx_hw->name, comx_hw->version); - return 0; -} - -int comx_unregister_hardware(char *name) -{ - struct comx_hardware *hw = comx_channels; - - if (!hw) { - return -1; - } - - if (strcmp(hw->name, name) == 0) { - comx_channels = comx_channels->next; - return 0; - } - - while (hw->next != NULL && strcmp(hw->next->name,name) != 0) { - hw = hw->next; - } - - if (hw->next != NULL && strcmp(hw->next->name, name) == 0) { - hw->next = hw->next->next; - return 0; - } - return -1; -} - -int comx_register_protocol(struct comx_protocol *comx_line) -{ - struct comx_protocol *pr = comx_lines; - - if (!pr) { - comx_lines = comx_line; - } else { - while (pr->next != NULL && strcmp(comx_line->name, pr->name) !=0) { - pr = pr->next; - } - if (strcmp(comx_line->name, pr->name) == 0) { - return -1; - } - pr->next = comx_line; - } - - printk(KERN_INFO "COMX: driver for protocol type %s, version %s\n", comx_line->name, comx_line->version); - return 0; -} - -int comx_unregister_protocol(char *name) -{ - struct comx_protocol *pr = comx_lines; - - if (!pr) { - return -1; - } - - if (strcmp(pr->name, name) == 0) { - comx_lines = comx_lines->next; - return 0; - } - - while (pr->next != NULL && strcmp(pr->next->name,name) != 0) { - pr = pr->next; - } - - if (pr->next != NULL && strcmp(pr->next->name, name) == 0) { - pr->next = pr->next->next; - return 0; - } - return -1; -} - -static int __init comx_init(void) -{ - struct proc_dir_entry *new_file; - - comx_root_dir = create_proc_entry("comx", - S_IFDIR | S_IWUSR | S_IRUGO | S_IXUGO, &proc_root); - if (!comx_root_dir) - return -ENOMEM; - comx_root_dir->proc_iops = &comx_root_inode_ops; - - if ((new_file = create_proc_entry(FILENAME_HARDWARELIST, - S_IFREG | 0444, comx_root_dir)) == NULL) { - return -ENOMEM; - } - - new_file->data = new_file; - new_file->read_proc = &comx_root_read_proc; - new_file->write_proc = NULL; - new_file->nlink = 1; - - if ((new_file = create_proc_entry(FILENAME_PROTOCOLLIST, - S_IFREG | 0444, comx_root_dir)) == NULL) { - return -ENOMEM; - } - - new_file->data = new_file; - new_file->read_proc = &comx_root_read_proc; - new_file->write_proc = NULL; - new_file->nlink = 1; - - - printk(KERN_INFO "COMX: driver version %s (C) 1995-1999 ITConsult-Pro Co. \n", - VERSION); - return 0; -} - -static void __exit comx_exit(void) -{ - remove_proc_entry(FILENAME_HARDWARELIST, comx_root_dir); - remove_proc_entry(FILENAME_PROTOCOLLIST, comx_root_dir); - remove_proc_entry(comx_root_dir->name, &proc_root); -} - -module_init(comx_init); -module_exit(comx_exit); - -EXPORT_SYMBOL(comx_register_hardware); -EXPORT_SYMBOL(comx_unregister_hardware); -EXPORT_SYMBOL(comx_register_protocol); -EXPORT_SYMBOL(comx_unregister_protocol); -EXPORT_SYMBOL(comx_debug_skb); -EXPORT_SYMBOL(comx_debug_bytes); -EXPORT_SYMBOL(comx_debug); -EXPORT_SYMBOL(comx_lineup_func); -EXPORT_SYMBOL(comx_status); -EXPORT_SYMBOL(comx_rx); -EXPORT_SYMBOL(comx_strcasecmp); -EXPORT_SYMBOL(comx_root_dir); diff -Nru a/drivers/net/wan/comx.h b/drivers/net/wan/comx.h --- a/drivers/net/wan/comx.h Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,232 +0,0 @@ -/* - * General definitions for the COMX driver - * - * Original authors: Arpad Bakay , - * Peter Bajan , - * Previous maintainer: Tivadar Szemethy - * Currently maintained by: Gergely Madarasz - * - * Copyright (C) 1995-1999 ITConsult-Pro Co. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - * - * net_device_stats: - * rx_length_errors rec_len < 4 || rec_len > 2000 - * rx_over_errors receive overrun (OVR) - * rx_crc_errors rx crc error - * rx_frame_errors aborts rec'd (ABO) - * rx_fifo_errors status fifo overrun (PBUFOVR) - * rx_missed_errors receive buffer overrun (BUFOVR) - * tx_aborted_errors ? - * tx_carrier_errors modem line status changes - * tx_fifo_errors tx underrun (locomx) - */ -#include - -struct comx_protocol { - char *name; - char *version; - unsigned short encap_type; - int (*line_init)(struct net_device *dev); - int (*line_exit)(struct net_device *dev); - struct comx_protocol *next; - }; - -struct comx_hardware { - char *name; - char *version; - int (*hw_init)(struct net_device *dev); - int (*hw_exit)(struct net_device *dev); - int (*hw_dump)(struct net_device *dev); - struct comx_hardware *next; - }; - -struct comx_channel { - void *if_ptr; // General purpose pointer - struct net_device *dev; // Where we belong to - struct net_device *twin; // On dual-port cards - struct proc_dir_entry *procdir; // the directory - - unsigned char init_status; - unsigned char line_status; - - struct timer_list lineup_timer; // against line jitter - long int lineup_pending; - unsigned char lineup_delay; - -#if 0 - struct timer_list reset_timer; // for board resetting - long reset_pending; - int reset_timeout; -#endif - - struct net_device_stats stats; - struct net_device_stats *current_stats; -#if 0 - unsigned long board_resets; -#endif - unsigned long *avg_bytes; - int loadavg_counter, loadavg_size; - int loadavg[3]; - struct timer_list loadavg_timer; - int debug_flags; - char *debug_area; - int debug_start, debug_end, debug_size; - struct proc_dir_entry *debug_file; -#ifdef CONFIG_COMX_DEBUG_RAW - char *raw; - int raw_len; -#endif - // LINE specific - struct comx_protocol *protocol; - void (*LINE_rx)(struct net_device *dev, struct sk_buff *skb); - int (*LINE_tx)(struct net_device *dev); - void (*LINE_status)(struct net_device *dev, u_short status); - int (*LINE_open)(struct net_device *dev); - int (*LINE_close)(struct net_device *dev); - int (*LINE_xmit)(struct sk_buff *skb, struct net_device *dev); - int (*LINE_header)(struct sk_buff *skb, struct net_device *dev, - u_short type,void *daddr, void *saddr, - unsigned len); - int (*LINE_rebuild_header)(struct sk_buff *skb); - int (*LINE_statistics)(struct net_device *dev, char *page); - int (*LINE_parameter_check)(struct net_device *dev); - int (*LINE_ioctl)(struct net_device *dev, struct ifreq *ifr, - int cmd); - void (*LINE_mod_use)(int); - void * LINE_privdata; - - // HW specific - - struct comx_hardware *hardware; - void (*HW_board_on)(struct net_device *dev); - void (*HW_board_off)(struct net_device *dev); - struct net_device *(*HW_access_board)(struct net_device *dev); - void (*HW_release_board)(struct net_device *dev, struct net_device *savep); - int (*HW_txe)(struct net_device *dev); - int (*HW_open)(struct net_device *dev); - int (*HW_close)(struct net_device *dev); - int (*HW_send_packet)(struct net_device *dev,struct sk_buff *skb); - int (*HW_statistics)(struct net_device *dev, char *page); -#if 0 - int (*HW_reset)(struct net_device *dev, char *page); -#endif - int (*HW_load_board)(struct net_device *dev); - void (*HW_set_clock)(struct net_device *dev); - void *HW_privdata; - }; - -struct comx_debugflags_struct { - char *name; - int value; - }; - -#define COMX_ROOT_DIR_NAME "comx" - -#define FILENAME_HARDWARE "boardtype" -#define FILENAME_HARDWARELIST "boardtypes" -#define FILENAME_PROTOCOL "protocol" -#define FILENAME_PROTOCOLLIST "protocols" -#define FILENAME_DEBUG "debug" -#define FILENAME_CLOCK "clock" -#define FILENAME_STATUS "status" -#define FILENAME_IO "io" -#define FILENAME_IRQ "irq" -#define FILENAME_KEEPALIVE "keepalive" -#define FILENAME_LINEUPDELAY "lineup_delay" -#define FILENAME_CHANNEL "channel" -#define FILENAME_FIRMWARE "firmware" -#define FILENAME_MEMADDR "memaddr" -#define FILENAME_TWIN "twin" -#define FILENAME_T1 "t1" -#define FILENAME_T2 "t2" -#define FILENAME_N2 "n2" -#define FILENAME_WINDOW "window" -#define FILENAME_MODE "mode" -#define FILENAME_DLCI "dlci" -#define FILENAME_MASTER "master" -#ifdef CONFIG_COMX_DEBUG_RAW -#define FILENAME_RAW "raw" -#endif - -#define PROTONAME_NONE "none" -#define HWNAME_NONE "none" -#define KEEPALIVE_OFF "off" - -#define FRAME_ACCEPTED 0 /* sending and xmitter busy */ -#define FRAME_DROPPED 1 -#define FRAME_ERROR 2 /* xmitter error */ -#define FRAME_QUEUED 3 /* sending but more can come */ - -#define LINE_UP 1 /* Modem UP */ -#define PROTO_UP 2 -#define PROTO_LOOP 4 - -#define HW_OPEN 1 -#define LINE_OPEN 2 -#define FW_LOADED 4 -#define IRQ_ALLOCATED 8 - -#define DEBUG_COMX_RX 2 -#define DEBUG_COMX_TX 4 -#define DEBUG_HW_TX 16 -#define DEBUG_HW_RX 32 -#define DEBUG_HDLC_KEEPALIVE 64 -#define DEBUG_COMX_PPP 128 -#define DEBUG_COMX_LAPB 256 -#define DEBUG_COMX_DLCI 512 - -#define DEBUG_PAGESIZE 3072 -#define DEFAULT_DEBUG_SIZE 4096 -#define DEFAULT_LINEUP_DELAY 1 -#define FILE_PAGESIZE 3072 - -#ifndef COMX_PPP_MAJOR -#define COMX_PPP_MAJOR 88 -#endif - - -#define COMX_CHANNEL(dev) ((struct comx_channel*)dev->priv) - -#define TWIN(dev) (COMX_CHANNEL(dev)->twin) - - -#ifndef byte -typedef u8 byte; -#endif -#ifndef word -typedef u16 word; -#endif - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif -#ifndef SEEK_CUR -#define SEEK_CUR 1 -#endif -#ifndef SEEK_END -#define SEEK_END 2 -#endif - -extern struct proc_dir_entry * comx_root_dir; - -extern int comx_register_hardware(struct comx_hardware *comx_hw); -extern int comx_unregister_hardware(char *name); -extern int comx_register_protocol(struct comx_protocol *comx_line); -extern int comx_unregister_protocol(char *name); - -extern int comx_rx(struct net_device *dev, struct sk_buff *skb); -extern void comx_status(struct net_device *dev, int status); -extern void comx_lineup_func(unsigned long d); - -extern int comx_debug(struct net_device *dev, char *fmt, ...); -extern int comx_debug_skb(struct net_device *dev, struct sk_buff *skb, char *msg); -extern int comx_debug_bytes(struct net_device *dev, unsigned char *bytes, int len, - char *msg); -extern int comx_strcasecmp(const char *cs, const char *ct); - -extern struct inode_operations comx_normal_inode_ops; diff -Nru a/drivers/net/wan/comxhw.h b/drivers/net/wan/comxhw.h --- a/drivers/net/wan/comxhw.h Tue May 18 23:38:05 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,113 +0,0 @@ -/* - * Defines for comxhw.c - * - * Original authors: Arpad Bakay , - * Peter Bajan , - * Previous maintainer: Tivadar Szemethy - * Current maintainer: Gergely Madarasz - * - * Copyright (C) 1995-1999 ITConsult-Pro Co. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - */ - -#define LOCOMX_IO_EXTENT 8 -#define COMX_IO_EXTENT 4 -#define HICOMX_IO_EXTENT 16 - -#define COMX_MAX_TX_SIZE 1600 -#define COMX_MAX_RX_SIZE 2048 - -#define COMX_JAIL_OFFSET 0xffff -#define COMX_JAIL_VALUE 0xfe -#define COMX_MEMORY_SIZE 65536 -#define HICOMX_MEMORY_SIZE 16384 -#define COMX_MEM_MIN 0xa0000 -#define COMX_MEM_MAX 0xf0000 - -#define COMX_DEFAULT_IO 0x360 -#define COMX_DEFAULT_IRQ 10 -#define COMX_DEFAULT_MEMADDR 0xd0000 -#define HICOMX_DEFAULT_IO 0x320 -#define HICOMX_DEFAULT_IRQ 10 -#define HICOMX_DEFAULT_MEMADDR 0xd0000 -#define LOCOMX_DEFAULT_IO 0x368 -#define LOCOMX_DEFAULT_IRQ 7 - -#define MAX_CHANNELNO 2 - -#define COMX_CHANNEL_OFFSET 0x2000 - -#define COMX_ENABLE_BOARD_IT 0x40 -#define COMX_BOARD_RESET 0x20 -#define COMX_ENABLE_BOARD_MEM 0x10 -#define COMX_DISABLE_BOARD_MEM 0 -#define COMX_DISABLE_ALL 0x00 - -#define HICOMX_DISABLE_ALL 0x00 -#define HICOMX_ENABLE_BOARD_MEM 0x02 -#define HICOMX_DISABLE_BOARD_MEM 0x0 -#define HICOMX_BOARD_RESET 0x01 -#define HICOMX_PRG_MEM 4 -#define HICOMX_DATA_MEM 0 -#define HICOMX_ID_BYTE 0x55 - -#define CMX_ID_BYTE 0x31 -#define COMX_CLOCK_CONST 8000 - -#define LINKUP_READY 3 - -#define OFF_FW_L1_ID 0x01e /* ID bytes */ -#define OFF_FW_L2_ID 0x1006 -#define FW_L1_ID_1 0xab -#define FW_L1_ID_2_COMX 0xc0 -#define FW_L1_ID_2_HICOMX 0xc1 -#define FW_L2_ID_1 0xab - -#define OFF_A_L2_CMD 0x130 /* command register for L2 */ -#define OFF_A_L2_CMDPAR 0x131 /* command parameter byte */ -#define OFF_A_L1_STATB 0x122 /* stat. block for L1 */ -#define OFF_A_L1_ABOREC 0x122 /* receive ABORT counter */ -#define OFF_A_L1_OVERRUN 0x123 /* receive overrun counter */ -#define OFF_A_L1_CRCREC 0x124 /* CRC error counter */ -#define OFF_A_L1_BUFFOVR 0x125 /* buffer overrun counter */ -#define OFF_A_L1_PBUFOVR 0x126 /* priority buffer overrun counter */ -#define OFF_A_L1_MODSTAT 0x127 /* current state of modem ctrl lines */ -#define OFF_A_L1_STATE 0x127 /* end of stat. block for L1 */ -#define OFF_A_L1_TXPC 0x128 /* Tx counter for the PC */ -#define OFF_A_L1_TXZ80 0x129 /* Tx counter for the Z80 */ -#define OFF_A_L1_RXPC 0x12a /* Rx counter for the PC */ -#define OFF_A_L1_RXZ80 0x12b /* Rx counter for the Z80 */ -#define OFF_A_L1_REPENA 0x12c /* IT rep disable */ -#define OFF_A_L1_CHNR 0x12d /* L1 channel logical number */ -#define OFF_A_L1_CLKINI 0x12e /* Timer Const */ -#define OFF_A_L2_LINKUP 0x132 /* Linkup byte */ -#define OFF_A_L2_DAV 0x134 /* Rx DAV */ -#define OFF_A_L2_RxBUFP 0x136 /* Rx buff relative to membase */ -#define OFF_A_L2_TxEMPTY 0x138 /* Tx Empty */ -#define OFF_A_L2_TxBUFP 0x13a /* Tx Buf */ -#define OFF_A_L2_NBUFFS 0x144 /* Number of buffers to fetch */ - -#define OFF_A_L2_SABMREC 0x164 /* LAPB no. of SABMs received */ -#define OFF_A_L2_SABMSENT 0x165 /* LAPB no. of SABMs sent */ -#define OFF_A_L2_REJREC 0x166 /* LAPB no. of REJs received */ -#define OFF_A_L2_REJSENT 0x167 /* LAPB no. of REJs sent */ -#define OFF_A_L2_FRMRREC 0x168 /* LAPB no. of FRMRs received */ -#define OFF_A_L2_FRMRSENT 0x169 /* LAPB no. of FRMRs sent */ -#define OFF_A_L2_PROTERR 0x16A /* LAPB no. of protocol errors rec'd */ -#define OFF_A_L2_LONGREC 0x16B /* LAPB no. of long frames */ -#define OFF_A_L2_INVNR 0x16C /* LAPB no. of invalid N(R)s rec'd */ -#define OFF_A_L2_UNDEFFR 0x16D /* LAPB no. of invalid frames */ - -#define OFF_A_L2_T1 0x174 /* T1 timer */ -#define OFF_A_L2_ADDR 0x176 /* DCE = 1, DTE = 3 */ - -#define COMX_CMD_INIT 1 -#define COMX_CMD_EXIT 2 -#define COMX_CMD_OPEN 16 -#define COMX_CMD_CLOSE 17 - diff -Nru a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c --- a/drivers/net/wan/cosa.c Tue May 18 23:38:05 2004 +++ b/drivers/net/wan/cosa.c Tue May 18 23:38:05 2004 @@ -93,6 +93,7 @@ #include #include #include +#include #undef COSA_SLOW_IO /* for testing purposes only */ #undef REALLY_SLOW_IO @@ -233,6 +234,9 @@ /* IRQ can be safely autoprobed */ static int irq[MAX_CARDS+1] = { -1, -1, -1, -1, -1, -1, 0, }; +/* for class stuff*/ +static struct class_simple *cosa_class; + #ifdef MODULE MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i"); MODULE_PARM_DESC(io, "The I/O bases of the COSA or SRP cards"); @@ -359,7 +363,7 @@ static int __init cosa_init(void) { - int i; + int i, err = 0; printk(KERN_INFO "cosa v1.08 (c) 1997-2000 Jan Kasprzak \n"); #ifdef CONFIG_SMP @@ -369,12 +373,14 @@ if (register_chrdev(cosa_major, "cosa", &cosa_fops)) { printk(KERN_WARNING "cosa: unable to get major %d\n", cosa_major); - return -EIO; + err = -EIO; + goto out; } } else { if (!(cosa_major=register_chrdev(0, "cosa", &cosa_fops))) { printk(KERN_WARNING "cosa: unable to register chardev\n"); - return -EIO; + err = -EIO; + goto out; } } for (i=0; i #include #include -#include #include #include #include @@ -71,6 +70,7 @@ #include #include #include + #include #include #include diff -Nru a/drivers/parisc/wax.c b/drivers/parisc/wax.c --- a/drivers/parisc/wax.c Tue May 18 23:38:08 2004 +++ b/drivers/parisc/wax.c Tue May 18 23:38:08 2004 @@ -17,7 +17,6 @@ #include #include #include -#include #include #include diff -Nru a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c --- a/drivers/parport/parport_pc.c Tue May 18 23:38:09 2004 +++ b/drivers/parport/parport_pc.c Tue May 18 23:38:09 2004 @@ -2699,7 +2699,7 @@ * and 840 locks up if you write 1 to bit 2! */ /* oxsemi_954 */ { 1, { { 0, -1 }, } }, /* oxsemi_840 */ { 1, { { 0, -1 }, } }, - /* aks_0100 */ { 1, { { 0, 1 }, } }, + /* aks_0100 */ { 1, { { 0, -1 }, } }, /* mobility_pp */ { 1, { { 0, 1 }, } }, }; diff -Nru a/drivers/parport/share.c b/drivers/parport/share.c --- a/drivers/parport/share.c Tue May 18 23:38:07 2004 +++ b/drivers/parport/share.c Tue May 18 23:38:07 2004 @@ -169,7 +169,7 @@ /** * parport_unregister_driver - deregister a parallel port device driver - * @arg: structure describing the driver that was given to + * @drv: structure describing the driver that was given to * parport_register_driver() * * This should be called by a parallel port device driver that diff -Nru a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h --- a/drivers/pci/hotplug/acpiphp.h Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/acpiphp.h Tue May 18 23:38:09 2004 @@ -47,7 +47,6 @@ #define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg) #define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg) -#define SLOT_MAGIC 0x67267322 /* name size which is used for entries in pcihpfs */ #define SLOT_NAME_SIZE KOBJ_NAME_LEN /* {_SUN} */ @@ -59,7 +58,6 @@ * struct slot - slot information for each *physical* slot */ struct slot { - u32 magic; u8 number; struct hotplug_slot *hotplug_slot; struct list_head slot_list; @@ -220,9 +218,7 @@ extern int acpiphp_get_num_slots (void); extern struct acpiphp_slot *get_slot_from_id (int id); typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); -extern int acpiphp_for_each_slot (acpiphp_callback fn, void *data); -extern int acpiphp_check_bridge (struct acpiphp_bridge *bridge); extern int acpiphp_enable_slot (struct acpiphp_slot *slot); extern int acpiphp_disable_slot (struct acpiphp_slot *slot); extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot); @@ -241,7 +237,6 @@ /* acpiphp_res.c */ extern struct pci_resource *acpiphp_get_io_resource (struct pci_resource **head, u32 size); -extern struct pci_resource *acpiphp_get_max_resource (struct pci_resource **head, u32 size); extern struct pci_resource *acpiphp_get_resource (struct pci_resource **head, u32 size); extern struct pci_resource *acpiphp_get_resource_with_base (struct pci_resource **head, u64 base, u32 size); extern int acpiphp_resource_sort_and_combine (struct pci_resource **head); diff -Nru a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c --- a/drivers/pci/hotplug/acpiphp_core.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/acpiphp_core.c Tue May 18 23:38:08 2004 @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -43,11 +44,7 @@ static LIST_HEAD(slot_list); -#if !defined(CONFIG_HOTPLUG_PCI_ACPI_MODULE) - #define MY_NAME "acpiphp" -#else - #define MY_NAME THIS_MODULE->name -#endif +#define MY_NAME "acpiphp" static int debug; int acpiphp_debug; @@ -62,72 +59,28 @@ MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); +module_param(debug, bool, 644); static int enable_slot (struct hotplug_slot *slot); static int disable_slot (struct hotplug_slot *slot); static int set_attention_status (struct hotplug_slot *slot, u8 value); -static int hardware_test (struct hotplug_slot *slot, u32 value); static int get_power_status (struct hotplug_slot *slot, u8 *value); -static int get_attention_status (struct hotplug_slot *slot, u8 *value); static int get_address (struct hotplug_slot *slot, u32 *value); static int get_latch_status (struct hotplug_slot *slot, u8 *value); static int get_adapter_status (struct hotplug_slot *slot, u8 *value); -static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value); -static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value); static struct hotplug_slot_ops acpi_hotplug_slot_ops = { .owner = THIS_MODULE, .enable_slot = enable_slot, .disable_slot = disable_slot, .set_attention_status = set_attention_status, - .hardware_test = hardware_test, .get_power_status = get_power_status, - .get_attention_status = get_attention_status, .get_latch_status = get_latch_status, .get_adapter_status = get_adapter_status, .get_address = get_address, - .get_max_bus_speed = get_max_bus_speed, - .get_cur_bus_speed = get_cur_bus_speed, }; - -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int slot_paranoia_check (struct slot *slot, const char *function) -{ - if (!slot) { - dbg("%s - slot == NULL\n", function); - return -1; - } - if (slot->magic != SLOT_MAGIC) { - dbg("%s - bad magic number for slot\n", function); - return -1; - } - if (!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!\n", function); - return -1; - } - return 0; -} - - -static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function) -{ - struct slot *slot; - - if (!hotplug_slot) { - dbg("%s - hotplug_slot == NULL\n", function); - return NULL; - } - - slot = (struct slot *)hotplug_slot->private; - if (slot_paranoia_check(slot, function)) - return NULL; - return slot; -} - - /** * enable_slot - power on and enable a slot * @hotplug_slot: slot to enable @@ -135,20 +88,14 @@ * Actual tasks are done in acpiphp_enable_slot() * */ -static int enable_slot (struct hotplug_slot *hotplug_slot) +static int enable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* enable the specified slot */ - retval = acpiphp_enable_slot(slot->acpi_slot); - - return retval; + return acpiphp_enable_slot(slot->acpi_slot); } @@ -159,20 +106,14 @@ * Actual tasks are done in acpiphp_disable_slot() * */ -static int disable_slot (struct hotplug_slot *hotplug_slot) +static int disable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* disable the specified slot */ - retval = acpiphp_disable_slot(slot->acpi_slot); - - return retval; + return acpiphp_disable_slot(slot->acpi_slot); } @@ -184,10 +125,8 @@ * attention status LED. * */ -static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status) +static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status) { - int retval = 0; - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); switch (status) { @@ -203,33 +142,9 @@ break; } - return retval; -} - - -/** - * hardware_test - hardware test - * - * We have nothing to do for now... - * - */ -static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value) -{ - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - - err("No hardware tests are defined for this driver\n"); - retval = -ENODEV; - - return retval; + return 0; } - /** * get_power_status - get power status of a slot * @hotplug_slot: slot to get status @@ -239,41 +154,17 @@ * In that case, the value returned may not be reliable. * */ -static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); *value = acpiphp_get_power_status(slot->acpi_slot); - return retval; -} - - -/** - * get_attention_status - get attention LED status - * - * TBD: - * ACPI doesn't provide any formal means to access attention LED status. - * - */ -static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value) -{ - int retval = 0; - - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - - *value = hotplug_slot->info->attention_status; - - return retval; + return 0; } - /** * get_latch_status - get latch status of a slot * @hotplug_slot: slot to get status @@ -283,19 +174,15 @@ * Instead, we fake latch status from _STA * */ -static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); *value = acpiphp_get_latch_status(slot->acpi_slot); - return retval; + return 0; } @@ -308,19 +195,15 @@ * Instead, we fake adapter status from _STA * */ -static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); *value = acpiphp_get_adapter_status(slot->acpi_slot); - return retval; + return 0; } @@ -330,51 +213,18 @@ * @busdev: pointer to struct pci_busdev (seg, bus, dev) * */ -static int get_address (struct hotplug_slot *hotplug_slot, u32 *value) +static int get_address(struct hotplug_slot *hotplug_slot, u32 *value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); *value = acpiphp_get_address(slot->acpi_slot); - return retval; -} - - -/* return dummy value because ACPI doesn't provide any method... */ -static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) -{ - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; - - *value = PCI_SPEED_UNKNOWN; - - return 0; -} - - -/* return dummy value because ACPI doesn't provide any method... */ -static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) -{ - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; - - *value = PCI_SPEED_UNKNOWN; - return 0; } - -static int __init init_acpi (void) +static int __init init_acpi(void) { int retval; @@ -397,7 +247,7 @@ * @slot: slot to name * */ -static void make_slot_name (struct slot *slot) +static void make_slot_name(struct slot *slot) { snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "%u", slot->acpi_slot->sun); @@ -409,10 +259,7 @@ */ static void release_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -426,42 +273,32 @@ * init_slots - initialize 'struct slot' structures for each slot * */ -static int __init init_slots (void) +static int __init init_slots(void) { struct slot *slot; - int retval = 0; + int retval = -ENOMEM; int i; for (i = 0; i < num_slots; ++i) { slot = kmalloc(sizeof(struct slot), GFP_KERNEL); if (!slot) - return -ENOMEM; + goto error; memset(slot, 0, sizeof(struct slot)); slot->hotplug_slot = kmalloc(sizeof(struct hotplug_slot), GFP_KERNEL); - if (!slot->hotplug_slot) { - kfree(slot); - return -ENOMEM; - } + if (!slot->hotplug_slot) + goto error_slot; memset(slot->hotplug_slot, 0, sizeof(struct hotplug_slot)); slot->hotplug_slot->info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); - if (!slot->hotplug_slot->info) { - kfree(slot->hotplug_slot); - kfree(slot); - return -ENOMEM; - } + if (!slot->hotplug_slot->info) + goto error_hpslot; memset(slot->hotplug_slot->info, 0, sizeof(struct hotplug_slot_info)); slot->hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); - if (!slot->hotplug_slot->name) { - kfree(slot->hotplug_slot->info); - kfree(slot->hotplug_slot); - kfree(slot); - return -ENOMEM; - } + if (!slot->hotplug_slot->name) + goto error_info; - slot->magic = SLOT_MAGIC; slot->number = i; slot->hotplug_slot->private = slot; @@ -473,14 +310,15 @@ slot->hotplug_slot->info->attention_status = acpiphp_get_attention_status(slot->acpi_slot); slot->hotplug_slot->info->latch_status = acpiphp_get_latch_status(slot->acpi_slot); slot->hotplug_slot->info->adapter_status = acpiphp_get_adapter_status(slot->acpi_slot); + slot->hotplug_slot->info->max_bus_speed = PCI_SPEED_UNKNOWN; + slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; make_slot_name(slot); retval = pci_hp_register(slot->hotplug_slot); if (retval) { err("pci_hp_register failed with error %d\n", retval); - release_slot(slot->hotplug_slot); - return retval; + goto error_name; } /* add slot to our internal list */ @@ -488,6 +326,16 @@ info("Slot [%s] registered\n", slot->hotplug_slot->name); } + return 0; +error_name: + kfree(slot->hotplug_slot->name); +error_info: + kfree(slot->hotplug_slot->info); +error_hpslot: + kfree(slot->hotplug_slot); +error_slot: + kfree(slot); +error: return retval; } @@ -503,8 +351,6 @@ list_del(&slot->slot_list); pci_hp_deregister(slot->hotplug_slot); } - - return; } @@ -521,11 +367,7 @@ if (retval) return retval; - retval = init_slots(); - if (retval) - return retval; - - return 0; + return init_slots(); } diff -Nru a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c --- a/drivers/pci/hotplug/acpiphp_glue.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/acpiphp_glue.c Tue May 18 23:38:06 2004 @@ -66,7 +66,7 @@ * 4. .. * */ -static int is_ejectable (acpi_handle handle) +static int is_ejectable(acpi_handle handle) { acpi_status status; acpi_handle tmp; @@ -326,10 +326,10 @@ bridge->hpp.enable_PERR = package->package.elements[3].integer.value; dbg("_HPP parameter = (%02x, %02x, %02x, %02x)\n", - bridge->hpp.cache_line_size, - bridge->hpp.latency_timer, - bridge->hpp.enable_SERR, - bridge->hpp.enable_PERR); + bridge->hpp.cache_line_size, + bridge->hpp.latency_timer, + bridge->hpp.enable_SERR, + bridge->hpp.enable_PERR); bridge->flags |= BRIDGE_HAS_HPP; @@ -919,6 +919,48 @@ return (unsigned int)sta; } +/** + * acpiphp_check_bridge - re-enumerate devices + * + * Iterate over all slots under this bridge and make sure that if a + * card is present they are enabled, and if not they are disabled. + */ +static int acpiphp_check_bridge(struct acpiphp_bridge *bridge) +{ + struct acpiphp_slot *slot; + int retval = 0; + int enabled, disabled; + + enabled = disabled = 0; + + for (slot = bridge->slots; slot; slot = slot->next) { + unsigned int status = get_slot_status(slot); + if (slot->flags & SLOT_ENABLED) { + if (status == ACPI_STA_ALL) + continue; + retval = acpiphp_disable_slot(slot); + if (retval) { + err("Error occurred in disabling\n"); + goto err_exit; + } + disabled++; + } else { + if (status != ACPI_STA_ALL) + continue; + retval = acpiphp_enable_slot(slot); + if (retval) { + err("Error occurred in enabling\n"); + goto err_exit; + } + enabled++; + } + } + + dbg("%s: %d enabled, %d disabled\n", __FUNCTION__, enabled, disabled); + + err_exit: + return retval; +} /* * ACPI event handlers @@ -1113,6 +1155,8 @@ kfree(bridge); } + + acpi_pci_unregister_driver(&acpi_pci_hp_driver); } @@ -1138,13 +1182,14 @@ } +#if 0 /** * acpiphp_for_each_slot - call function for each slot * @fn: callback function * @data: context to be passed to callback function * */ -int acpiphp_for_each_slot(acpiphp_callback fn, void *data) +static int acpiphp_for_each_slot(acpiphp_callback fn, void *data) { struct list_head *node; struct acpiphp_bridge *bridge; @@ -1163,7 +1208,7 @@ err_exit: return retval; } - +#endif /* search matching slot from id */ struct acpiphp_slot *get_slot_from_id(int id) @@ -1180,7 +1225,8 @@ } /* should never happen! */ - err("%s: no object for id %d\n",__FUNCTION__, id); + err("%s: no object for id %d\n", __FUNCTION__, id); + WARN_ON(1); return 0; } @@ -1237,50 +1283,6 @@ err_exit: up(&slot->crit_sect); - return retval; -} - - -/** - * acpiphp_check_bridge - re-enumerate devices - * - * Iterate over all slots under this bridge and make sure that if a - * card is present they are enabled, and if not they are disabled. - */ -int acpiphp_check_bridge(struct acpiphp_bridge *bridge) -{ - struct acpiphp_slot *slot; - int retval = 0; - int enabled, disabled; - - enabled = disabled = 0; - - for (slot = bridge->slots; slot; slot = slot->next) { - unsigned int status = get_slot_status(slot); - if (slot->flags & SLOT_ENABLED) { - if (status == ACPI_STA_ALL) - continue; - retval = acpiphp_disable_slot(slot); - if (retval) { - err("Error occurred in disabling\n"); - goto err_exit; - } - disabled++; - } else { - if (status != ACPI_STA_ALL) - continue; - retval = acpiphp_enable_slot(slot); - if (retval) { - err("Error occurred in enabling\n"); - goto err_exit; - } - enabled++; - } - } - - dbg("%s: %d enabled, %d disabled\n", __FUNCTION__, enabled, disabled); - - err_exit: return retval; } diff -Nru a/drivers/pci/hotplug/acpiphp_res.c b/drivers/pci/hotplug/acpiphp_res.c --- a/drivers/pci/hotplug/acpiphp_res.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/acpiphp_res.c Tue May 18 23:38:06 2004 @@ -105,7 +105,7 @@ return 0; } - +#if 0 /* * sort_by_max_size - sort nodes by their length, largest first */ @@ -151,6 +151,7 @@ return 0; } +#endif /** * get_io_resource - get resource for I/O ports @@ -247,6 +248,7 @@ } +#if 0 /** * get_max_resource - get the largest resource * @@ -254,7 +256,7 @@ * list pointed to by head. It aligns the node on top and bottom * to "size" alignment before returning it. */ -struct pci_resource *acpiphp_get_max_resource (struct pci_resource **head, u32 size) +static struct pci_resource *acpiphp_get_max_resource (struct pci_resource **head, u32 size) { struct pci_resource *max; struct pci_resource *temp; @@ -340,7 +342,7 @@ /* If we get here, we couldn't find one */ return NULL; } - +#endif /** * get_resource - get resource (mem, pfmem) diff -Nru a/drivers/pci/hotplug/cpci_hotplug.h b/drivers/pci/hotplug/cpci_hotplug.h --- a/drivers/pci/hotplug/cpci_hotplug.h Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/cpci_hotplug.h Tue May 18 23:38:05 2004 @@ -40,9 +40,7 @@ #define HS_CSR_EIM 0x0002 #define HS_CSR_DHA 0x0001 -#define SLOT_MAGIC 0x67267322 struct slot { - u32 magic; u8 number; unsigned int devfn; struct pci_bus *bus; @@ -86,7 +84,6 @@ extern u8 cpci_get_latch_status(struct slot *slot); extern u8 cpci_get_adapter_status(struct slot *slot); extern u16 cpci_get_hs_csr(struct slot * slot); -extern u16 cpci_set_hs_csr(struct slot * slot, u16 hs_csr); extern int cpci_set_attention_status(struct slot *slot, int status); extern int cpci_check_and_clear_ins(struct slot * slot); extern int cpci_check_ext(struct slot * slot); diff -Nru a/drivers/pci/hotplug/cpci_hotplug_core.c b/drivers/pci/hotplug/cpci_hotplug_core.c --- a/drivers/pci/hotplug/cpci_hotplug_core.c Tue May 18 23:38:07 2004 +++ b/drivers/pci/hotplug/cpci_hotplug_core.c Tue May 18 23:38:07 2004 @@ -40,11 +40,7 @@ #define DRIVER_AUTHOR "Scott Murray " #define DRIVER_DESC "CompactPCI Hot Plug Core" -#if !defined(CONFIG_HOTPLUG_CPCI_MODULE) #define MY_NAME "cpci_hotplug" -#else -#define MY_NAME THIS_MODULE->name -#endif #define dbg(format, arg...) \ do { \ @@ -71,63 +67,21 @@ static int set_attention_status(struct hotplug_slot *slot, u8 value); static int get_power_status(struct hotplug_slot *slot, u8 * value); static int get_attention_status(struct hotplug_slot *slot, u8 * value); -static int get_latch_status(struct hotplug_slot *slot, u8 * value); -static int get_adapter_status(struct hotplug_slot *slot, u8 * value); static struct hotplug_slot_ops cpci_hotplug_slot_ops = { .owner = THIS_MODULE, .enable_slot = enable_slot, .disable_slot = disable_slot, .set_attention_status = set_attention_status, - .hardware_test = NULL, .get_power_status = get_power_status, .get_attention_status = get_attention_status, - .get_latch_status = get_latch_status, - .get_adapter_status = get_adapter_status, }; -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int -slot_paranoia_check(struct slot *slot, const char *function) -{ - if(!slot) { - dbg("%s - slot == NULL", function); - return -1; - } - if(slot->magic != SLOT_MAGIC) { - dbg("%s - bad magic number for slot", function); - return -1; - } - if(!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!", function); - return -1; - } - return 0; -} - -static inline struct slot * -get_slot(struct hotplug_slot *hotplug_slot, const char *function) -{ - struct slot *slot; - - if(!hotplug_slot) { - dbg("%s - hotplug_slot == NULL", function); - return NULL; - } - - slot = (struct slot *) hotplug_slot->private; - if(slot_paranoia_check(slot, function)) - return NULL; - return slot; -} - static int update_latch_status(struct hotplug_slot *hotplug_slot, u8 value) { struct hotplug_slot_info info; - if(!(hotplug_slot && hotplug_slot->info)) - return -EINVAL; memcpy(&info, hotplug_slot->info, sizeof(struct hotplug_slot_info)); info.latch_status = value; return pci_hp_change_slot_info(hotplug_slot, &info); @@ -138,8 +92,6 @@ { struct hotplug_slot_info info; - if(!(hotplug_slot && hotplug_slot->info)) - return -EINVAL; memcpy(&info, hotplug_slot->info, sizeof(struct hotplug_slot_info)); info.adapter_status = value; return pci_hp_change_slot_info(hotplug_slot, &info); @@ -148,12 +100,9 @@ static int enable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - if(slot == NULL) - return -ENODEV; - dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name); if(controller->ops->set_power) { @@ -166,12 +115,9 @@ static int disable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - if(slot == NULL) - return -ENODEV; - dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name); /* Unconfigure device */ @@ -220,10 +166,8 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 * value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; - if(slot == NULL) - return -ENODEV; *value = cpci_get_power_status(slot); return 0; } @@ -231,10 +175,8 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 * value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; - if(slot == NULL) - return -ENODEV; *value = cpci_get_attention_status(slot); return 0; } @@ -242,48 +184,12 @@ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if(slot == NULL) - return -ENODEV; - switch (status) { - case 0: - cpci_set_attention_status(slot, 0); - break; - - case 1: - default: - cpci_set_attention_status(slot, 1); - break; - } - - return 0; -} - -static int -get_latch_status(struct hotplug_slot *hotplug_slot, u8 * value) -{ - if(hotplug_slot == NULL || hotplug_slot->info == NULL) - return -ENODEV; - *value = hotplug_slot->info->latch_status; - return 0; -} - -static int -get_adapter_status(struct hotplug_slot *hotplug_slot, u8 * value) -{ - if(hotplug_slot == NULL || hotplug_slot->info == NULL) - return -ENODEV; - *value = hotplug_slot->info->adapter_status; - return 0; + return cpci_set_attention_status(hotplug_slot->private, status); } static void release_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if(slot == NULL) - return; + struct slot *slot = hotplug_slot->private; kfree(slot->hotplug_slot->info); kfree(slot->hotplug_slot->name); @@ -306,15 +212,12 @@ struct hotplug_slot *hotplug_slot; struct hotplug_slot_info *info; char *name; - int status = 0; + int status = -ENOMEM; int i; if(!(controller && bus)) { return -ENODEV; } - if(last < first) { - return -EINVAL; - } /* * Create a structure for each slot, and register that slot @@ -322,38 +225,28 @@ */ for (i = first; i <= last; ++i) { slot = kmalloc(sizeof (struct slot), GFP_KERNEL); - if(!slot) - return -ENOMEM; + if (!slot) + goto error; memset(slot, 0, sizeof (struct slot)); hotplug_slot = kmalloc(sizeof (struct hotplug_slot), GFP_KERNEL); - if(!hotplug_slot) { - kfree(slot); - return -ENOMEM; - } + if (!hotplug_slot) + goto error_slot; memset(hotplug_slot, 0, sizeof (struct hotplug_slot)); slot->hotplug_slot = hotplug_slot; info = kmalloc(sizeof (struct hotplug_slot_info), GFP_KERNEL); - if(!info) { - kfree(hotplug_slot); - kfree(slot); - return -ENOMEM; - } + if (!info) + goto error_hpslot; memset(info, 0, sizeof (struct hotplug_slot_info)); hotplug_slot->info = info; name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); - if(!name) { - kfree(info); - kfree(hotplug_slot); - kfree(slot); - return -ENOMEM; - } + if (!name) + goto error_info; hotplug_slot->name = name; - slot->magic = SLOT_MAGIC; slot->bus = bus; slot->number = i; slot->devfn = PCI_DEVFN(i, 0); @@ -373,13 +266,9 @@ dbg("registering slot %s", slot->hotplug_slot->name); status = pci_hp_register(slot->hotplug_slot); - if(status) { + if (status) { err("pci_hp_register failed with error %d", status); - kfree(info); - kfree(name); - kfree(hotplug_slot); - kfree(slot); - return status; + goto error_name; } /* Add slot to our internal list */ @@ -388,6 +277,16 @@ slots++; spin_unlock(&list_lock); } + return 0; +error_name: + kfree(name); +error_info: + kfree(info); +error_hpslot: + kfree(hotplug_slot); +error_slot: + kfree(slot); +error: return status; } @@ -399,10 +298,6 @@ struct list_head *next; int status; - if(!bus) { - return -ENODEV; - } - spin_lock(&list_lock); if(!slots) { spin_unlock(&list_lock); @@ -428,7 +323,7 @@ } /* This is the interrupt mode interrupt handler */ -irqreturn_t +static irqreturn_t cpci_hp_intr(int irq, void *data, struct pt_regs *regs) { dbg("entered cpci_hp_intr"); @@ -890,7 +785,6 @@ */ cleanup_slots(); } - EXPORT_SYMBOL_GPL(cpci_hp_register_controller); EXPORT_SYMBOL_GPL(cpci_hp_unregister_controller); diff -Nru a/drivers/pci/hotplug/cpci_hotplug_pci.c b/drivers/pci/hotplug/cpci_hotplug_pci.c --- a/drivers/pci/hotplug/cpci_hotplug_pci.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/cpci_hotplug_pci.c Tue May 18 23:38:08 2004 @@ -127,6 +127,7 @@ return hs_csr; } +#if 0 u16 cpci_set_hs_csr(struct slot* slot, u16 hs_csr) { int hs_cap; @@ -156,6 +157,7 @@ } return new_hs_csr; } +#endif int cpci_check_and_clear_ins(struct slot* slot) { diff -Nru a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c --- a/drivers/pci/hotplug/cpcihp_generic.c Tue May 18 23:38:07 2004 +++ b/drivers/pci/hotplug/cpcihp_generic.c Tue May 18 23:38:07 2004 @@ -76,73 +76,6 @@ static struct cpci_hp_controller_ops generic_hpc_ops; static struct cpci_hp_controller generic_hpc; -/* The following allows configuring the driver when it's compiled into the kernel */ -#ifndef MODULE -static int __init cpcihp_generic_setup(char* str) -{ - char* p; - unsigned long tmp; - - if(!str) - return -EINVAL; - bridge = str; - - p = strchr(str, ','); - str = p + 1; - if(!(p && *str && *p == ',')) - goto setup_error; - tmp = simple_strtoul(str, &p, 0); - if(p == str || tmp > 0xff) { - err("hotplug bus first slot number out of range"); - goto setup_error; - } - first_slot = (u8) tmp; - - str = p + 1; - if(!(*str && *p == ',')) - return -EINVAL; - tmp = simple_strtoul(str, &p, 0); - if(p == str || tmp > 0xff) { - err("hotplug bus last slot number out of range"); - goto setup_error; - } - last_slot = (u8) tmp; - - str = p + 1; - if(!(*str && *p == ',')) - goto setup_error; - tmp = simple_strtoul(str, &p, 0); - if(p == str || tmp > 0xffff) { - err("port number out of range"); - goto setup_error; - } - port = (u16) tmp; - - str = p + 1; - if(!(*str && *p == ',')) - goto setup_error; - tmp = simple_strtoul(str, &p, 0); - if(p == str) { - err("invalid #ENUM bit number"); - goto setup_error; - } - enum_bit = (u8) tmp; - - str = p + 1; - if(*str && *p == ',') { - tmp = simple_strtoul(str, &p, 0); - if(p != str) - debug = (int) tmp; - } - return 0; -setup_error: - bridge = NULL; - return -EINVAL; -} - -__setup("cpcihp_generic=", cpcihp_generic_setup); -#endif - static int __init validate_parameters(void) { char* str; diff -Nru a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c --- a/drivers/pci/hotplug/cpcihp_zt5550.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/cpcihp_zt5550.c Tue May 18 23:38:08 2004 @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -42,11 +43,7 @@ #define DRIVER_AUTHOR "Scott Murray " #define DRIVER_DESC "ZT5550 CompactPCI Hot Plug Driver" -#if !defined(CONFIG_HOTPLUG_PCI_CPCI_ZT5550_MODULE) #define MY_NAME "cpcihp_zt5550" -#else -#define MY_NAME THIS_MODULE->name -#endif #define dbg(format, arg...) \ do { \ @@ -175,7 +172,7 @@ return 0; } -int zt5550_hc_disable_irq(void) +static int zt5550_hc_disable_irq(void) { u8 reg; @@ -301,7 +298,7 @@ MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, 644); MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); -MODULE_PARM(poll, "i"); +module_param(poll, bool, 644); MODULE_PARM_DESC(poll, "#ENUM polling mode enabled or not"); diff -Nru a/drivers/pci/hotplug/cpqphp.h b/drivers/pci/hotplug/cpqphp.h --- a/drivers/pci/hotplug/cpqphp.h Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/cpqphp.h Tue May 18 23:38:08 2004 @@ -33,11 +33,7 @@ #include /* for read? and write? functions */ #include /* for delays */ -#if !defined(CONFIG_HOTPLUG_PCI_COMPAQ_MODULE) - #define MY_NAME "cpqphp.o" -#else - #define MY_NAME THIS_MODULE->name -#endif +#define MY_NAME "cpqphp" #define dbg(fmt, arg...) do { if (cpqhp_debug) printk(KERN_DEBUG "%s: " fmt , MY_NAME , ## arg); } while (0) #define err(format, arg...) printk(KERN_ERR "%s: " format , MY_NAME , ## arg) @@ -257,9 +253,7 @@ struct pci_dev* pci_dev; }; -#define SLOT_MAGIC 0x67267321 struct slot { - u32 magic; struct slot *next; u8 bus; u8 device; @@ -377,11 +371,8 @@ #define PCISLOT_66_MHZ_SUPPORTED 0x00000100 #define PCISLOT_64_BIT_SUPPORTED 0x00000200 - - #define PCI_TO_PCI_BRIDGE_CLASS 0x00060400 - #define INTERLOCK_OPEN 0x00000002 #define ADD_NOT_SUPPORTED 0x00000003 #define CARD_FUNCTIONING 0x00000005 @@ -440,7 +431,6 @@ extern void cpqhp_destroy_resource_list (struct resource_lists * resources); extern int cpqhp_configure_device (struct controller* ctrl, struct pci_func* func); extern int cpqhp_unconfigure_device (struct pci_func* func); -extern struct slot *cpqhp_find_slot (struct controller *ctrl, u8 device); /* Global variables */ extern int cpqhp_debug; @@ -453,50 +443,15 @@ extern u8 cpqhp_disk_irq; - /* inline functions */ - -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int slot_paranoia_check (struct slot *slot, const char *function) -{ - if (!slot) { - dbg("%s - slot == NULL", function); - return -1; - } - if (slot->magic != SLOT_MAGIC) { - dbg("%s - bad magic number for slot", function); - return -1; - } - if (!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!", function); - return -1; - } - return 0; -} - -static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function) -{ - struct slot *slot; - - if (!hotplug_slot) { - dbg("%s - hotplug_slot == NULL\n", function); - return NULL; - } - - slot = (struct slot *)hotplug_slot->private; - if (slot_paranoia_check (slot, function)) - return NULL; - return slot; -} - /* * return_resource * * Puts node back in the resource list pointed to by head * */ -static inline void return_resource (struct pci_resource **head, struct pci_resource *node) +static inline void return_resource(struct pci_resource **head, struct pci_resource *node) { if (!node || !head) return; @@ -504,7 +459,7 @@ *head = node; } -static inline void set_SOGO (struct controller *ctrl) +static inline void set_SOGO(struct controller *ctrl) { u16 misc; @@ -514,7 +469,7 @@ } -static inline void amber_LED_on (struct controller *ctrl, u8 slot) +static inline void amber_LED_on(struct controller *ctrl, u8 slot) { u32 led_control; @@ -524,7 +479,7 @@ } -static inline void amber_LED_off (struct controller *ctrl, u8 slot) +static inline void amber_LED_off(struct controller *ctrl, u8 slot) { u32 led_control; @@ -534,7 +489,7 @@ } -static inline int read_amber_LED (struct controller *ctrl, u8 slot) +static inline int read_amber_LED(struct controller *ctrl, u8 slot) { u32 led_control; @@ -545,7 +500,7 @@ } -static inline void green_LED_on (struct controller *ctrl, u8 slot) +static inline void green_LED_on(struct controller *ctrl, u8 slot) { u32 led_control; @@ -554,7 +509,7 @@ writel(led_control, ctrl->hpc_reg + LED_CONTROL); } -static inline void green_LED_off (struct controller *ctrl, u8 slot) +static inline void green_LED_off(struct controller *ctrl, u8 slot) { u32 led_control; @@ -564,7 +519,7 @@ } -static inline void green_LED_blink (struct controller *ctrl, u8 slot) +static inline void green_LED_blink(struct controller *ctrl, u8 slot) { u32 led_control; @@ -575,7 +530,7 @@ } -static inline void slot_disable (struct controller *ctrl, u8 slot) +static inline void slot_disable(struct controller *ctrl, u8 slot) { u8 slot_enable; @@ -585,7 +540,7 @@ } -static inline void slot_enable (struct controller *ctrl, u8 slot) +static inline void slot_enable(struct controller *ctrl, u8 slot) { u8 slot_enable; @@ -595,7 +550,7 @@ } -static inline u8 is_slot_enabled (struct controller *ctrl, u8 slot) +static inline u8 is_slot_enabled(struct controller *ctrl, u8 slot) { u8 slot_enable; @@ -605,7 +560,7 @@ } -static inline u8 read_slot_enable (struct controller *ctrl) +static inline u8 read_slot_enable(struct controller *ctrl) { return readb(ctrl->hpc_reg + SLOT_ENABLE); } @@ -619,7 +574,7 @@ * Returns controller speed. * */ -static inline u8 get_controller_speed (struct controller *ctrl) +static inline u8 get_controller_speed(struct controller *ctrl) { u8 curr_freq; u16 misc; @@ -652,7 +607,7 @@ * Returns adapter speed. * */ -static inline u8 get_adapter_speed (struct controller *ctrl, u8 hp_slot) +static inline u8 get_adapter_speed(struct controller *ctrl, u8 hp_slot) { u32 temp_dword = readl(ctrl->hpc_reg + NON_INT_INPUT); dbg("slot: %d, PCIXCAP: %8x\n", hp_slot, temp_dword); @@ -669,7 +624,7 @@ return PCI_SPEED_33MHz; } -static inline void enable_slot_power (struct controller *ctrl, u8 slot) +static inline void enable_slot_power(struct controller *ctrl, u8 slot) { u8 slot_power; @@ -678,7 +633,7 @@ writeb(slot_power, ctrl->hpc_reg + SLOT_POWER); } -static inline void disable_slot_power (struct controller *ctrl, u8 slot) +static inline void disable_slot_power(struct controller *ctrl, u8 slot) { u8 slot_power; @@ -688,40 +643,31 @@ } -static inline int cpq_get_attention_status (struct controller *ctrl, struct slot *slot) +static inline int cpq_get_attention_status(struct controller *ctrl, struct slot *slot) { u8 hp_slot; - if (slot == NULL) - return 1; - hp_slot = slot->device - ctrl->slot_device_offset; - return read_amber_LED (ctrl, hp_slot); + return read_amber_LED(ctrl, hp_slot); } -static inline int get_slot_enabled (struct controller *ctrl, struct slot *slot) +static inline int get_slot_enabled(struct controller *ctrl, struct slot *slot) { u8 hp_slot; - if (slot == NULL) - return 1; - hp_slot = slot->device - ctrl->slot_device_offset; - return is_slot_enabled (ctrl, hp_slot); + return is_slot_enabled(ctrl, hp_slot); } -static inline int cpq_get_latch_status (struct controller *ctrl, struct slot *slot) +static inline int cpq_get_latch_status(struct controller *ctrl, struct slot *slot) { u32 status; u8 hp_slot; - if (slot == NULL) - return 1; - hp_slot = slot->device - ctrl->slot_device_offset; dbg("%s: slot->device = %d, ctrl->slot_device_offset = %d \n", __FUNCTION__, slot->device, ctrl->slot_device_offset); @@ -732,15 +678,12 @@ } -static inline int get_presence_status (struct controller *ctrl, struct slot *slot) +static inline int get_presence_status(struct controller *ctrl, struct slot *slot) { int presence_save = 0; u8 hp_slot; u32 tempdword; - if (slot == NULL) - return 0; - hp_slot = slot->device - ctrl->slot_device_offset; tempdword = readl(ctrl->hpc_reg + INT_INPUT_CLEAR); @@ -751,13 +694,13 @@ #define SLOT_NAME_SIZE 10 -static inline void make_slot_name (char *buffer, int buffer_size, struct slot *slot) +static inline void make_slot_name(char *buffer, int buffer_size, struct slot *slot) { - snprintf (buffer, buffer_size, "%d", slot->number); + snprintf(buffer, buffer_size, "%d", slot->number); } -static inline int wait_for_ctrl_irq (struct controller *ctrl) +static inline int wait_for_ctrl_irq(struct controller *ctrl) { DECLARE_WAITQUEUE(wait, current); int retval = 0; @@ -773,139 +716,6 @@ dbg("%s - end\n", __FUNCTION__); return retval; -} - - -/** - * set_controller_speed - set the frequency and/or mode of a specific - * controller segment. - * - * @ctrl: controller to change frequency/mode for. - * @adapter_speed: the speed of the adapter we want to match. - * @hp_slot: the slot number where the adapter is installed. - * - * Returns 0 if we successfully change frequency and/or mode to match the - * adapter speed. - * - */ -static inline u8 set_controller_speed(struct controller *ctrl, u8 adapter_speed, u8 hp_slot) -{ - struct slot *slot; - u8 reg; - u8 slot_power = readb(ctrl->hpc_reg + SLOT_POWER); - u16 reg16; - u32 leds = readl(ctrl->hpc_reg + LED_CONTROL); - - if (ctrl->speed == adapter_speed) - return 0; - - /* We don't allow freq/mode changes if we find another adapter running - * in another slot on this controller */ - for(slot = ctrl->slot; slot; slot = slot->next) { - if (slot->device == (hp_slot + ctrl->slot_device_offset)) - continue; - if (!slot->hotplug_slot && !slot->hotplug_slot->info) - continue; - if (slot->hotplug_slot->info->adapter_status == 0) - continue; - /* If another adapter is running on the same segment but at a - * lower speed/mode, we allow the new adapter to function at - * this rate if supported */ - if (ctrl->speed < adapter_speed) - return 0; - - return 1; - } - - /* If the controller doesn't support freq/mode changes and the - * controller is running at a higher mode, we bail */ - if ((ctrl->speed > adapter_speed) && (!ctrl->pcix_speed_capability)) - return 1; - - /* But we allow the adapter to run at a lower rate if possible */ - if ((ctrl->speed < adapter_speed) && (!ctrl->pcix_speed_capability)) - return 0; - - /* We try to set the max speed supported by both the adapter and - * controller */ - if (ctrl->speed_capability < adapter_speed) { - if (ctrl->speed == ctrl->speed_capability) - return 0; - adapter_speed = ctrl->speed_capability; - } - - writel(0x0L, ctrl->hpc_reg + LED_CONTROL); - writeb(0x00, ctrl->hpc_reg + SLOT_ENABLE); - - set_SOGO(ctrl); - wait_for_ctrl_irq(ctrl); - - if (adapter_speed != PCI_SPEED_133MHz_PCIX) - reg = 0xF5; - else - reg = 0xF4; - pci_write_config_byte(ctrl->pci_dev, 0x41, reg); - - reg16 = readw(ctrl->hpc_reg + NEXT_CURR_FREQ); - reg16 &= ~0x000F; - switch(adapter_speed) { - case(PCI_SPEED_133MHz_PCIX): - reg = 0x75; - reg16 |= 0xB; - break; - case(PCI_SPEED_100MHz_PCIX): - reg = 0x74; - reg16 |= 0xA; - break; - case(PCI_SPEED_66MHz_PCIX): - reg = 0x73; - reg16 |= 0x9; - break; - case(PCI_SPEED_66MHz): - reg = 0x73; - reg16 |= 0x1; - break; - default: /* 33MHz PCI 2.2 */ - reg = 0x71; - break; - - } - reg16 |= 0xB << 12; - writew(reg16, ctrl->hpc_reg + NEXT_CURR_FREQ); - - mdelay(5); - - /* Reenable interrupts */ - writel(0, ctrl->hpc_reg + INT_MASK); - - pci_write_config_byte(ctrl->pci_dev, 0x41, reg); - - /* Restart state machine */ - reg = ~0xF; - pci_read_config_byte(ctrl->pci_dev, 0x43, ®); - pci_write_config_byte(ctrl->pci_dev, 0x43, reg); - - /* Only if mode change...*/ - if (((ctrl->speed == PCI_SPEED_66MHz) && (adapter_speed == PCI_SPEED_66MHz_PCIX)) || - ((ctrl->speed == PCI_SPEED_66MHz_PCIX) && (adapter_speed == PCI_SPEED_66MHz))) - set_SOGO(ctrl); - - wait_for_ctrl_irq(ctrl); - mdelay(1100); - - /* Restore LED/Slot state */ - writel(leds, ctrl->hpc_reg + LED_CONTROL); - writeb(slot_power, ctrl->hpc_reg + SLOT_ENABLE); - - set_SOGO(ctrl); - wait_for_ctrl_irq(ctrl); - - ctrl->speed = adapter_speed; - slot = cpqhp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - - info("Successfully changed frequency/mode for adapter in slot %d\n", - slot->number); - return 0; } #endif diff -Nru a/drivers/pci/hotplug/cpqphp_core.c b/drivers/pci/hotplug/cpqphp_core.c --- a/drivers/pci/hotplug/cpqphp_core.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/cpqphp_core.c Tue May 18 23:38:05 2004 @@ -2,7 +2,7 @@ * Compaq Hot Plug Controller Driver * * Copyright (C) 1995,2001 Compaq Computer Corporation - * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001 Greg Kroah-Hartman * Copyright (C) 2001 IBM Corp. * * All rights reserved. @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -57,10 +58,10 @@ static void *smbios_table; static void *smbios_start; static void *cpqhp_rom_start; -static u8 power_mode; +static int power_mode; static int debug; -#define DRIVER_VERSION "0.9.7" +#define DRIVER_VERSION "0.9.8" #define DRIVER_AUTHOR "Dan Zink , Greg Kroah-Hartman " #define DRIVER_DESC "Compaq Hot Plug PCI Controller Driver" @@ -68,16 +69,16 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(power_mode, "b"); +module_param(power_mode, bool, 644); MODULE_PARM_DESC(power_mode, "Power mode enabled or not"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, 644); MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); #define CPQHPC_MODULE_MINOR 208 -static int one_time_init (void); -static int set_attention_status (struct hotplug_slot *slot, u8 value); +static int one_time_init (void); +static int set_attention_status (struct hotplug_slot *slot, u8 value); static int process_SI (struct hotplug_slot *slot); static int process_SS (struct hotplug_slot *slot); static int hardware_test (struct hotplug_slot *slot, u32 value); @@ -103,30 +104,18 @@ }; -static inline int is_slot64bit (struct slot *slot) +static inline int is_slot64bit(struct slot *slot) { - if (!slot || !slot->p_sm_slot) - return 0; - - if (readb(slot->p_sm_slot + SMBIOS_SLOT_WIDTH) == 0x06) - return 1; - - return 0; + return (readb(slot->p_sm_slot + SMBIOS_SLOT_WIDTH) == 0x06) ? 1 : 0; } -static inline int is_slot66mhz (struct slot *slot) +static inline int is_slot66mhz(struct slot *slot) { - if (!slot || !slot->p_sm_slot) - return 0; - - if (readb(slot->p_sm_slot + SMBIOS_SLOT_TYPE) == 0x0E) - return 1; - - return 0; + return (readb(slot->p_sm_slot + SMBIOS_SLOT_TYPE) == 0x0E) ? 1 : 0; } /** - * detect_SMBIOS_pointer - find the system Management BIOS Table in the specified region of memory. + * detect_SMBIOS_pointer - find the System Management BIOS Table in mem region. * * @begin: begin pointer for region to be scanned. * @end: end pointer for region to be scanned. @@ -210,7 +199,8 @@ return -ENOMEM; } - len = (routing_table->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); + len = (routing_table->size - sizeof(struct irq_routing_table)) / + sizeof(struct irq_info); // Make sure I got at least one entry if (len == 0) { kfree(routing_table); @@ -231,8 +221,8 @@ } -/* - * get_subsequent_smbios_entry +/** + * get_subsequent_smbios_entry: get the next entry from bios table. * * Gets the first entry if previous == NULL * Otherwise, returns the next entry @@ -242,7 +232,8 @@ * * returns a pointer to an SMBIOS structure or NULL if none found */ -static void * get_subsequent_smbios_entry(void *smbios_start, void *smbios_table, void *curr) +static void *get_subsequent_smbios_entry(void *smbios_start, + void *smbios_table, void *curr) { u8 bail = 0; u8 previous_byte = 1; @@ -259,8 +250,9 @@ p_temp += readb(curr + SMBIOS_GENERIC_LENGTH); while ((p_temp < p_max) && !bail) { - // Look for the double NULL terminator - // The first condition is the previous byte and the second is the curr + /* Look for the double NULL terminator + * The first condition is the previous byte + * and the second is the curr */ if (!previous_byte && !(readb(p_temp))) { bail = 1; } @@ -290,7 +282,8 @@ * * returns a pointer to an SMBIOS structure or %NULL if none found */ -static void *get_SMBIOS_entry (void *smbios_start, void *smbios_table, u8 type, void * previous) +static void *get_SMBIOS_entry(void *smbios_start, void *smbios_table, u8 type, + void * previous) { if (!smbios_table) return NULL; @@ -298,12 +291,14 @@ if (!previous) { previous = smbios_start; } else { - previous = get_subsequent_smbios_entry(smbios_start, smbios_table, previous); + previous = get_subsequent_smbios_entry(smbios_start, + smbios_table, previous); } while (previous) { if (readb(previous + SMBIOS_GENERIC_TYPE) != type) { - previous = get_subsequent_smbios_entry(smbios_start, smbios_table, previous); + previous = get_subsequent_smbios_entry(smbios_start, + smbios_table, previous); } else { break; } @@ -314,11 +309,8 @@ static void release_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return; - + struct slot *slot = hotplug_slot->private; + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); kfree(slot->hotplug_slot->info); @@ -327,7 +319,8 @@ kfree(slot); } -static int ctrl_slot_setup (struct controller * ctrl, void *smbios_start, void *smbios_table) +static int ctrl_slot_setup(struct controller * ctrl, void *smbios_start, + void *smbios_table) { struct slot *new_slot; u8 number_of_slots; @@ -336,7 +329,7 @@ u8 ctrl_slot; u32 tempdword; void *slot_entry= NULL; - int result; + int result = -ENOMEM; dbg("%s\n", __FUNCTION__); @@ -347,44 +340,40 @@ slot_number = ctrl->first_slot; while (number_of_slots) { - new_slot = (struct slot *) kmalloc(sizeof(struct slot), GFP_KERNEL); + new_slot = kmalloc(sizeof(*new_slot), GFP_KERNEL); if (!new_slot) - return -ENOMEM; + goto error; memset(new_slot, 0, sizeof(struct slot)); - new_slot->hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL); - if (!new_slot->hotplug_slot) { - kfree (new_slot); - return -ENOMEM; - } - memset(new_slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); + new_slot->hotplug_slot = kmalloc(sizeof(*(new_slot->hotplug_slot)), + GFP_KERNEL); + if (!new_slot->hotplug_slot) + goto error_slot; + memset(new_slot->hotplug_slot, 0, sizeof(struct hotplug_slot)); + + new_slot->hotplug_slot->info = + kmalloc(sizeof(*(new_slot->hotplug_slot->info)), + GFP_KERNEL); + if (!new_slot->hotplug_slot->info) + goto error_hpslot; + memset(new_slot->hotplug_slot->info, 0, + sizeof(struct hotplug_slot_info)); + new_slot->hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); + if (!new_slot->hotplug_slot->name) + goto error_info; - new_slot->hotplug_slot->info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!new_slot->hotplug_slot->info) { - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } - memset(new_slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); - new_slot->hotplug_slot->name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL); - if (!new_slot->hotplug_slot->name) { - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } - - new_slot->magic = SLOT_MAGIC; new_slot->ctrl = ctrl; new_slot->bus = ctrl->bus; new_slot->device = slot_device; new_slot->number = slot_number; dbg("slot->number = %d\n",new_slot->number); - slot_entry = get_SMBIOS_entry(smbios_start, smbios_table, 9, slot_entry); + slot_entry = get_SMBIOS_entry(smbios_start, smbios_table, 9, + slot_entry); while (slot_entry && (readw(slot_entry + SMBIOS_SLOT_NUMBER) != new_slot->number)) { - slot_entry = get_SMBIOS_entry(smbios_start, smbios_table, 9, slot_entry); + slot_entry = get_SMBIOS_entry(smbios_start, + smbios_table, 9, slot_entry); } new_slot->p_sm_slot = slot_entry; @@ -417,7 +406,7 @@ /* register this slot with the hotplug pci core */ new_slot->hotplug_slot->release = &release_slot; new_slot->hotplug_slot->private = new_slot; - make_slot_name (new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot); + make_slot_name(new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot); new_slot->hotplug_slot->ops = &cpqphp_hotplug_slot_ops; new_slot->hotplug_slot->info->power_status = get_slot_enabled(ctrl, new_slot); @@ -425,13 +414,15 @@ new_slot->hotplug_slot->info->latch_status = cpq_get_latch_status(ctrl, new_slot); new_slot->hotplug_slot->info->adapter_status = get_presence_status(ctrl, new_slot); - dbg ("registering bus %d, dev %d, number %d, ctrl->slot_device_offset %d, slot %d\n", - new_slot->bus, new_slot->device, new_slot->number, ctrl->slot_device_offset, slot_number); + dbg ("registering bus %d, dev %d, number %d, " + "ctrl->slot_device_offset %d, slot %d\n", + new_slot->bus, new_slot->device, + new_slot->number, ctrl->slot_device_offset, + slot_number); result = pci_hp_register (new_slot->hotplug_slot); if (result) { err ("pci_hp_register failed with error %d\n", result); - release_slot(new_slot->hotplug_slot); - return result; + goto error_name; } new_slot->next = ctrl->slot; @@ -443,6 +434,17 @@ } return 0; + +error_name: + kfree(new_slot->hotplug_slot->name); +error_info: + kfree(new_slot->hotplug_slot->info); +error_hpslot: + kfree(new_slot->hotplug_slot); +error_slot: + kfree(new_slot); +error: + return result; } static int ctrl_slot_cleanup (struct controller * ctrl) @@ -485,7 +487,8 @@ // // Output: SUCCESS or FAILURE //============================================================================= -static int get_slot_mapping (struct pci_bus *bus, u8 bus_num, u8 dev_num, u8 *slot) +static int +get_slot_mapping(struct pci_bus *bus, u8 bus_num, u8 dev_num, u8 *slot) { struct irq_routing_table *PCIIRQRoutingInfoLength; u32 work; @@ -520,17 +523,22 @@ kfree(PCIIRQRoutingInfoLength); return 0; } else { - // Didn't get a match on the target PCI device. Check if the - // current IRQ table entry is a PCI-to-PCI bridge device. If so, - // and it's secondary bus matches the bus number for the target - // device, I need to save the bridge's slot number. If I can't - // find an entry for the target device, I will have to assume it's - // on the other side of the bridge, and assign it the bridge's slot. + /* Did not get a match on the target PCI device. Check + * if the current IRQ table entry is a PCI-to-PCI bridge + * device. If so, and it's secondary bus matches the + * bus number for the target device, I need to save the + * bridge's slot number. If I can not find an entry for + * the target device, I will have to assume it's on the + * other side of the bridge, and assign it the bridge's + * slot. */ bus->number = tbus; - pci_bus_read_config_dword (bus, PCI_DEVFN(tdevice, 0), PCI_REVISION_ID, &work); + pci_bus_read_config_dword(bus, PCI_DEVFN(tdevice, 0), + PCI_REVISION_ID, &work); if ((work >> 8) == PCI_TO_PCI_BRIDGE_CLASS) { - pci_bus_read_config_dword (bus, PCI_DEVFN(tdevice, 0), PCI_PRIMARY_BUS, &work); + pci_bus_read_config_dword(bus, + PCI_DEVFN(tdevice, 0), + PCI_PRIMARY_BUS, &work); // See if bridge's secondary bus matches target bus. if (((work >> 8) & 0x000000FF) == (long) bus_num) { bridgeSlot = tslot; @@ -559,7 +567,9 @@ * cpqhp_set_attention_status - Turns the Amber LED for a slot on or off * */ -static int cpqhp_set_attention_status (struct controller *ctrl, struct pci_func *func, u32 status) +static int +cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func, + u32 status) { u8 hp_slot; @@ -600,22 +610,15 @@ static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status) { struct pci_func *slot_func; - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; u8 bus; u8 devfn; u8 device; u8 function; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - if (cpqhp_get_bus_dev(ctrl, &bus, &devfn, slot->number) == -1) return -ENODEV; @@ -624,33 +627,25 @@ dbg("bus, dev, fn = %d, %d, %d\n", bus, device, function); slot_func = cpqhp_slot_find(bus, device, function); - if (!slot_func) { + if (!slot_func) return -ENODEV; - } return cpqhp_set_attention_status(ctrl, slot_func, status); } -static int process_SI (struct hotplug_slot *hotplug_slot) +static int process_SI(struct hotplug_slot *hotplug_slot) { struct pci_func *slot_func; - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; u8 bus; u8 devfn; u8 device; u8 function; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - if (cpqhp_get_bus_dev(ctrl, &bus, &devfn, slot->number) == -1) return -ENODEV; @@ -659,9 +654,8 @@ dbg("bus, dev, fn = %d, %d, %d\n", bus, device, function); slot_func = cpqhp_slot_find(bus, device, function); - if (!slot_func) { + if (!slot_func) return -ENODEV; - } slot_func->bus = bus; slot_func->device = device; @@ -672,25 +666,18 @@ } -static int process_SS (struct hotplug_slot *hotplug_slot) +static int process_SS(struct hotplug_slot *hotplug_slot) { struct pci_func *slot_func; - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; u8 bus; u8 devfn; u8 device; u8 function; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - if (cpqhp_get_bus_dev(ctrl, &bus, &devfn, slot->number) == -1) return -ENODEV; @@ -699,121 +686,78 @@ dbg("bus, dev, fn = %d, %d, %d\n", bus, device, function); slot_func = cpqhp_slot_find(bus, device, function); - if (!slot_func) { + if (!slot_func) return -ENODEV; - } - - dbg("In power_down_board, slot_func = %p, ctrl = %p\n", slot_func, ctrl); + + dbg("In %s, slot_func = %p, ctrl = %p\n", __FUNCTION__, slot_func, ctrl); return cpqhp_process_SS(ctrl, slot_func); } -static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value) +static int hardware_test(struct hotplug_slot *hotplug_slot, u32 value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - if (slot == NULL) - return -ENODEV; - - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - - return cpqhp_hardware_test (ctrl, value); + return cpqhp_hardware_test(ctrl, value); } -static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; - + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - *value = get_slot_enabled(ctrl, slot); return 0; } -static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - *value = cpq_get_attention_status(ctrl, slot); return 0; } -static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; - + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - - *value = cpq_get_latch_status (ctrl, slot); + *value = cpq_get_latch_status(ctrl, slot); return 0; } -static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - - *value = get_presence_status (ctrl, slot); + *value = get_presence_status(ctrl, slot); return 0; } static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - *value = ctrl->speed_capability; return 0; @@ -821,18 +765,11 @@ static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - struct controller *ctrl; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; + struct controller *ctrl = slot->ctrl; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - ctrl = slot->ctrl; - if (ctrl == NULL) - return -ENODEV; - *value = ctrl->speed; return 0; @@ -908,11 +845,11 @@ case PCI_VENDOR_ID_COMPAQ: if (rev >= 0x13) { /* CIOBX */ ctrl->push_flag = 1; - ctrl->slot_switch_type = 1; // Switch is present - ctrl->push_button = 1; // Pushbutton is present - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 1; // PCI-X supported + ctrl->slot_switch_type = 1; + ctrl->push_button = 1; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 1; ctrl->pcix_speed_capability = 1; pci_read_config_byte(pdev, 0x41, &bus_cap); if (bus_cap & 0x80) { @@ -942,55 +879,55 @@ switch (subsystem_deviceid) { case PCI_SUB_HPC_ID: /* Original 6500/7000 implementation */ - ctrl->slot_switch_type = 1; // Switch is present + ctrl->slot_switch_type = 1; ctrl->speed_capability = PCI_SPEED_33MHz; - ctrl->push_button = 0; // No pushbutton - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 0; // PCI-X not supported - ctrl->pcix_speed_capability = 0; // N/A since PCI-X not supported + ctrl->push_button = 0; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 0; + ctrl->pcix_speed_capability = 0; break; case PCI_SUB_HPC_ID2: /* First Pushbutton implementation */ ctrl->push_flag = 1; - ctrl->slot_switch_type = 1; // Switch is present + ctrl->slot_switch_type = 1; ctrl->speed_capability = PCI_SPEED_33MHz; - ctrl->push_button = 1; // Pushbutton is present - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 0; // PCI-X not supported - ctrl->pcix_speed_capability = 0; // N/A since PCI-X not supported + ctrl->push_button = 1; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 0; + ctrl->pcix_speed_capability = 0; break; case PCI_SUB_HPC_ID_INTC: /* Third party (6500/7000) */ - ctrl->slot_switch_type = 1; // Switch is present + ctrl->slot_switch_type = 1; ctrl->speed_capability = PCI_SPEED_33MHz; - ctrl->push_button = 0; // No pushbutton - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 0; // PCI-X not supported - ctrl->pcix_speed_capability = 0; // N/A since PCI-X not supported + ctrl->push_button = 0; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 0; + ctrl->pcix_speed_capability = 0; break; case PCI_SUB_HPC_ID3: /* First 66 Mhz implementation */ ctrl->push_flag = 1; - ctrl->slot_switch_type = 1; // Switch is present + ctrl->slot_switch_type = 1; ctrl->speed_capability = PCI_SPEED_66MHz; - ctrl->push_button = 1; // Pushbutton is present - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 0; // PCI-X not supported - ctrl->pcix_speed_capability = 0; // N/A since PCI-X not supported + ctrl->push_button = 1; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 0; + ctrl->pcix_speed_capability = 0; break; case PCI_SUB_HPC_ID4: /* First PCI-X implementation, 100MHz */ ctrl->push_flag = 1; - ctrl->slot_switch_type = 1; // Switch is present + ctrl->slot_switch_type = 1; ctrl->speed_capability = PCI_SPEED_100MHz_PCIX; - ctrl->push_button = 1; // Pushbutton is present - ctrl->pci_config_space = 1; // Index/data access to working registers 0 = not supported, 1 = supported - ctrl->defeature_PHP = 1; // PHP is supported - ctrl->pcix_support = 1; // PCI-X supported + ctrl->push_button = 1; + ctrl->pci_config_space = 1; + ctrl->defeature_PHP = 1; + ctrl->pcix_support = 1; ctrl->pcix_speed_capability = 0; break; default: @@ -1079,33 +1016,41 @@ } // Tell the user that we found one. - info("Initializing the PCI hot plug controller residing on PCI bus %d\n", pdev->bus->number); + info("Initializing the PCI hot plug controller residing on PCI bus %d\n", + pdev->bus->number); - dbg ("Hotplug controller capabilities:\n"); - dbg (" speed_capability %d\n", ctrl->speed_capability); - dbg (" slot_switch_type %s\n", ctrl->slot_switch_type == 0 ? "no switch" : "switch present"); - dbg (" defeature_PHP %s\n", ctrl->defeature_PHP == 0 ? "PHP not supported" : "PHP supported"); - dbg (" alternate_base_address %s\n", ctrl->alternate_base_address == 0 ? "not supported" : "supported"); - dbg (" pci_config_space %s\n", ctrl->pci_config_space == 0 ? "not supported" : "supported"); - dbg (" pcix_speed_capability %s\n", ctrl->pcix_speed_capability == 0 ? "not supported" : "supported"); - dbg (" pcix_support %s\n", ctrl->pcix_support == 0 ? "not supported" : "supported"); + dbg("Hotplug controller capabilities:\n"); + dbg(" speed_capability %d\n", ctrl->speed_capability); + dbg(" slot_switch_type %s\n", ctrl->slot_switch_type ? + "switch present" : "no switch"); + dbg(" defeature_PHP %s\n", ctrl->defeature_PHP ? + "PHP supported" : "PHP not supported"); + dbg(" alternate_base_address %s\n", ctrl->alternate_base_address ? + "supported" : "not supported"); + dbg(" pci_config_space %s\n", ctrl->pci_config_space ? + "supported" : "not supported"); + dbg(" pcix_speed_capability %s\n", ctrl->pcix_speed_capability ? + "supported" : "not supported"); + dbg(" pcix_support %s\n", ctrl->pcix_support ? + "supported" : "not supported"); ctrl->pci_dev = pdev; pci_set_drvdata(pdev, ctrl); - /* make our own copy of the pci bus structure, as we like tweaking it a lot */ - ctrl->pci_bus = kmalloc (sizeof (*ctrl->pci_bus), GFP_KERNEL); + /* make our own copy of the pci bus structure, + * as we like tweaking it a lot */ + ctrl->pci_bus = kmalloc(sizeof(*ctrl->pci_bus), GFP_KERNEL); if (!ctrl->pci_bus) { err("out of memory\n"); rc = -ENOMEM; goto err_free_ctrl; } - memcpy (ctrl->pci_bus, pdev->bus, sizeof (*ctrl->pci_bus)); + memcpy(ctrl->pci_bus, pdev->bus, sizeof(*ctrl->pci_bus)); ctrl->bus = pdev->bus->number; ctrl->rev = rev; dbg("bus device function rev: %d %d %d %d\n", ctrl->bus, - PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev); + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev); init_MUTEX(&ctrl->crit_sect); init_waitqueue_head(&ctrl->queue); @@ -1127,9 +1072,12 @@ goto err_free_bus; } - ctrl->hpc_reg = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); + ctrl->hpc_reg = ioremap(pci_resource_start(pdev, 0), + pci_resource_len(pdev, 0)); if (!ctrl->hpc_reg) { - err("cannot remap MMIO region %lx @ %lx\n", pci_resource_len(pdev, 0), pci_resource_start(pdev, 0)); + err("cannot remap MMIO region %lx @ %lx\n", + pci_resource_len(pdev, 0), + pci_resource_start(pdev, 0)); rc = -ENODEV; goto err_free_mem_region; } @@ -1138,21 +1086,25 @@ ctrl->speed = get_controller_speed(ctrl); - //************************************************** - // - // Save configuration headers for this and - // subordinate PCI buses - // - //************************************************** + /******************************************************** + * + * Save configuration headers for this and + * subordinate PCI buses + * + ********************************************************/ // find the physical slot number of the first hot plug slot - // Get slot won't work for devices behind bridges, but - // in this case it will always be called for the "base" - // bus/dev/func of a slot. - // CS: this is leveraging the PCIIRQ routing code from the kernel (pci-pc.c: get_irq_routing_table) - rc = get_slot_mapping(ctrl->pci_bus, pdev->bus->number, (readb(ctrl->hpc_reg + SLOT_MASK) >> 4), &(ctrl->first_slot)); - dbg("get_slot_mapping: first_slot = %d, returned = %d\n", ctrl->first_slot, rc); + /* Get slot won't work for devices behind bridges, but + * in this case it will always be called for the "base" + * bus/dev/func of a slot. + * CS: this is leveraging the PCIIRQ routing code from the kernel + * (pci-pc.c: get_irq_routing_table) */ + rc = get_slot_mapping(ctrl->pci_bus, pdev->bus->number, + (readb(ctrl->hpc_reg + SLOT_MASK) >> 4), + &(ctrl->first_slot)); + dbg("get_slot_mapping: first_slot = %d, returned = %d\n", + ctrl->first_slot, rc); if (rc) { err(msg_initialization_err, rc); goto err_iounmap; @@ -1161,7 +1113,8 @@ // Store PCI Config Space for all devices on this bus rc = cpqhp_save_config(ctrl, ctrl->bus, readb(ctrl->hpc_reg + SLOT_MASK)); if (rc) { - err("%s: unable to save PCI configuration data, error %d\n", __FUNCTION__, rc); + err("%s: unable to save PCI configuration data, error %d\n", + __FUNCTION__, rc); goto err_iounmap; } @@ -1198,7 +1151,8 @@ rc = ctrl_slot_setup(ctrl, smbios_start, smbios_table); if (rc) { err(msg_initialization_err, 6); - err("%s: unable to save PCI configuration data, error %d\n", __FUNCTION__, rc); + err("%s: unable to save PCI configuration data, error %d\n", + __FUNCTION__, rc); goto err_iounmap; } @@ -1209,7 +1163,8 @@ dbg("HPC interrupt = %d \n", ctrl->interrupt); if (request_irq(ctrl->interrupt, cpqhp_ctrl_intr, SA_SHIRQ, MY_NAME, ctrl)) { - err("Can't get irq %d for the hotplug pci controller\n", ctrl->interrupt); + err("Can't get irq %d for the hotplug pci controller\n", + ctrl->interrupt); rc = -ENODEV; goto err_iounmap; } @@ -1265,8 +1220,8 @@ if (!power_mode) { if (!func->is_a_board) { - green_LED_off (ctrl, hp_slot); - slot_disable (ctrl, hp_slot); + green_LED_off(ctrl, hp_slot); + slot_disable(ctrl, hp_slot); } } @@ -1277,7 +1232,7 @@ if (!power_mode) { set_SOGO(ctrl); // Wait for SOBS to be unset - wait_for_ctrl_irq (ctrl); + wait_for_ctrl_irq(ctrl); } rc = init_SERR(ctrl); @@ -1290,7 +1245,7 @@ // Done with exclusive hardware access up(&ctrl->crit_sect); - cpqhp_create_ctrl_files (ctrl); + cpqhp_create_ctrl_files(ctrl); return 0; @@ -1350,35 +1305,36 @@ compaq_nvram_init(cpqhp_rom_start); /* Map smbios table entry point structure */ - smbios_table = detect_SMBIOS_pointer(cpqhp_rom_start, cpqhp_rom_start + ROM_PHY_LEN); + smbios_table = detect_SMBIOS_pointer(cpqhp_rom_start, + cpqhp_rom_start + ROM_PHY_LEN); if (!smbios_table) { err ("Could not find the SMBIOS pointer in memory\n"); retval = -EIO; - goto error; + goto error_rom_start; } - smbios_start = ioremap(readl(smbios_table + ST_ADDRESS), readw(smbios_table + ST_LENGTH)); + smbios_start = ioremap(readl(smbios_table + ST_ADDRESS), + readw(smbios_table + ST_LENGTH)); if (!smbios_start) { err ("Could not ioremap memory region taken from SMBIOS values\n"); retval = -EIO; - goto error; + goto error_smbios_start; } initialized = 1; return retval; +error_smbios_start: + iounmap(smbios_start); +error_rom_start: + iounmap(cpqhp_rom_start); error: - if (cpqhp_rom_start) - iounmap(cpqhp_rom_start); - if (smbios_start) - iounmap(smbios_start); - return retval; } -static void unload_cpqphpd(void) +static void __exit unload_cpqphpd(void) { struct pci_func *next; struct pci_func *TempSlot; @@ -1512,7 +1468,7 @@ static struct pci_driver cpqhpc_driver = { - .name = "pci_hotplug", + .name = "compaq_pci_hotplug", .id_table = hpcd_pci_tbl, .probe = cpqhpc_probe, /* remove: cpqhpc_remove_one, */ @@ -1526,12 +1482,10 @@ cpqhp_debug = debug; + info (DRIVER_DESC " version: " DRIVER_VERSION "\n"); result = pci_module_init(&cpqhpc_driver); dbg("pci_module_init = %d\n", result); - if (result) - return result; - info (DRIVER_DESC " version: " DRIVER_VERSION "\n"); - return 0; + return result; } diff -Nru a/drivers/pci/hotplug/cpqphp_ctrl.c b/drivers/pci/hotplug/cpqphp_ctrl.c --- a/drivers/pci/hotplug/cpqphp_ctrl.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/cpqphp_ctrl.c Tue May 18 23:38:06 2004 @@ -39,8 +39,10 @@ #include #include "cpqphp.h" -static u32 configure_new_device(struct controller* ctrl, struct pci_func *func,u8 behind_bridge, struct resource_lists *resources); -static int configure_new_function(struct controller* ctrl, struct pci_func *func,u8 behind_bridge, struct resource_lists *resources); +static u32 configure_new_device(struct controller* ctrl, struct pci_func *func, + u8 behind_bridge, struct resource_lists *resources); +static int configure_new_function(struct controller* ctrl, struct pci_func *func, + u8 behind_bridge, struct resource_lists *resources); static void interrupt_event_handler(struct controller *ctrl); static struct semaphore event_semaphore; /* mutex for process loop (up if something to process) */ @@ -53,7 +55,7 @@ static wait_queue_head_t delay_wait; /* delay is in jiffies to wait for */ -static void long_delay (int delay) +static void long_delay(int delay) { DECLARE_WAITQUEUE(wait, current); @@ -64,7 +66,7 @@ */ down (&delay_sem); - init_waitqueue_head (&delay_wait); + init_waitqueue_head(&delay_wait); add_wait_queue(&delay_wait, &wait); set_current_state(TASK_INTERRUPTIBLE); @@ -72,11 +74,11 @@ remove_wait_queue(&delay_wait, &wait); set_current_state(TASK_RUNNING); - up (&delay_sem); + up(&delay_sem); } -//FIXME: The following line needs to be somewhere else... +/* FIXME: The following line needs to be somewhere else... */ #define WRONG_BUS_FREQUENCY 0x07 static u8 handle_switch_change(u8 change, struct controller * ctrl) { @@ -89,18 +91,19 @@ if (!change) return 0; - // Switch Change + /* Switch Change */ dbg("cpqsbd: Switch interrupt received.\n"); for (hp_slot = 0; hp_slot < 6; hp_slot++) { if (change & (0x1L << hp_slot)) { - //********************************* - // this one changed. - //********************************* - func = cpqhp_slot_find(ctrl->bus, (hp_slot + ctrl->slot_device_offset), 0); + /********************************** + * this one changed. + **********************************/ + func = cpqhp_slot_find(ctrl->bus, + (hp_slot + ctrl->slot_device_offset), 0); - //this is the structure that tells the worker thread - //what to do + /* this is the structure that tells the worker thread + *what to do */ taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; taskInfo->hp_slot = hp_slot; @@ -112,17 +115,17 @@ func->presence_save |= (temp_word >> (hp_slot + 7)) & 0x02; if (ctrl->ctrl_int_comp & (0x1L << hp_slot)) { - //********************************* - // Switch opened - //********************************* + /********************************** + * Switch opened + **********************************/ func->switch_save = 0; taskInfo->event_type = INT_SWITCH_OPEN; } else { - //********************************* - // Switch closed - //********************************* + /********************************** + * Switch closed + **********************************/ func->switch_save = 0x10; @@ -134,18 +137,14 @@ return rc; } - -/* - * cpqhp_find_slot +/** + * cpqhp_find_slot: find the struct slot of given device + * @ctrl: scan lots of this controller + * @device: the device id to find */ -struct slot *cpqhp_find_slot (struct controller * ctrl, u8 device) +static struct slot *cpqhp_find_slot(struct controller *ctrl, u8 device) { - struct slot *slot; - - if (!ctrl) - return NULL; - - slot = ctrl->slot; + struct slot *slot = ctrl->slot; while (slot && (slot->device != device)) { slot = slot->next; @@ -168,18 +167,19 @@ if (!change) return 0; - //********************************* - // Presence Change - //********************************* + /********************************** + * Presence Change + **********************************/ dbg("cpqsbd: Presence/Notify input change.\n"); dbg(" Changed bits are 0x%4.4x\n", change ); for (hp_slot = 0; hp_slot < 6; hp_slot++) { if (change & (0x0101 << hp_slot)) { - //********************************* - // this one changed. - //********************************* - func = cpqhp_slot_find(ctrl->bus, (hp_slot + ctrl->slot_device_offset), 0); + /********************************** + * this one changed. + **********************************/ + func = cpqhp_slot_find(ctrl->bus, + (hp_slot + ctrl->slot_device_offset), 0); taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; @@ -191,55 +191,51 @@ if (!p_slot) return 0; - // If the switch closed, must be a button - // If not in button mode, nevermind + /* If the switch closed, must be a button + * If not in button mode, nevermind */ if (func->switch_save && (ctrl->push_button == 1)) { temp_word = ctrl->ctrl_int_comp >> 16; temp_byte = (temp_word >> hp_slot) & 0x01; temp_byte |= (temp_word >> (hp_slot + 7)) & 0x02; if (temp_byte != func->presence_save) { - //********************************* - // button Pressed (doesn't do anything) - //********************************* + /************************************** + * button Pressed (doesn't do anything) + **************************************/ dbg("hp_slot %d button pressed\n", hp_slot); taskInfo->event_type = INT_BUTTON_PRESS; } else { - //********************************* - // button Released - TAKE ACTION!!!! - //********************************* + /********************************** + * button Released - TAKE ACTION!!!! + **********************************/ dbg("hp_slot %d button released\n", hp_slot); taskInfo->event_type = INT_BUTTON_RELEASE; - // Cancel if we are still blinking + /* Cancel if we are still blinking */ if ((p_slot->state == BLINKINGON_STATE) || (p_slot->state == BLINKINGOFF_STATE)) { taskInfo->event_type = INT_BUTTON_CANCEL; dbg("hp_slot %d button cancel\n", hp_slot); } else if ((p_slot->state == POWERON_STATE) || (p_slot->state == POWEROFF_STATE)) { - //info(msg_button_ignore, p_slot->number); + /* info(msg_button_ignore, p_slot->number); */ taskInfo->event_type = INT_BUTTON_IGNORE; dbg("hp_slot %d button ignore\n", hp_slot); } } } else { - // Switch is open, assume a presence change - // Save the presence state + /* Switch is open, assume a presence change + * Save the presence state */ temp_word = ctrl->ctrl_int_comp >> 16; func->presence_save = (temp_word >> hp_slot) & 0x01; func->presence_save |= (temp_word >> (hp_slot + 7)) & 0x02; if ((!(ctrl->ctrl_int_comp & (0x010000 << hp_slot))) || (!(ctrl->ctrl_int_comp & (0x01000000 << hp_slot)))) { - //********************************* - // Present - //********************************* + /* Present */ taskInfo->event_type = INT_PRESENCE_ON; } else { - //********************************* - // Not Present - //********************************* + /* Not Present */ taskInfo->event_type = INT_PRESENCE_OFF; } } @@ -260,18 +256,19 @@ if (!change) return 0; - //********************************* - // power fault - //********************************* + /********************************** + * power fault + **********************************/ info("power fault interrupt\n"); for (hp_slot = 0; hp_slot < 6; hp_slot++) { if (change & (0x01 << hp_slot)) { - //********************************* - // this one changed. - //********************************* - func = cpqhp_slot_find(ctrl->bus, (hp_slot + ctrl->slot_device_offset), 0); + /********************************** + * this one changed. + **********************************/ + func = cpqhp_slot_find(ctrl->bus, + (hp_slot + ctrl->slot_device_offset), 0); taskInfo = &(ctrl->event_queue[ctrl->next_event]); ctrl->next_event = (ctrl->next_event + 1) % 10; @@ -280,16 +277,16 @@ rc++; if (ctrl->ctrl_int_comp & (0x00000100 << hp_slot)) { - //********************************* - // power fault Cleared - //********************************* + /********************************** + * power fault Cleared + **********************************/ func->status = 0x00; taskInfo->event_type = INT_POWER_FAULT_CLEAR; } else { - //********************************* - // power fault - //********************************* + /********************************** + * power fault + **********************************/ taskInfo->event_type = INT_POWER_FAULT; if (ctrl->rev < 4) { @@ -297,18 +294,20 @@ green_LED_off (ctrl, hp_slot); set_SOGO (ctrl); - // this is a fatal condition, we want to crash the - // machine to protect from data corruption - // simulated_NMI shouldn't ever return - //FIXME - //simulated_NMI(hp_slot, ctrl); - - //The following code causes a software crash just in - //case simulated_NMI did return - //FIXME - //panic(msg_power_fault); + /* this is a fatal condition, we want + * to crash the machine to protect from + * data corruption. simulated_NMI + * shouldn't ever return */ + /* FIXME + simulated_NMI(hp_slot, ctrl); */ + + /* The following code causes a software + * crash just in case simulated_NMI did + * return */ + /*FIXME + panic(msg_power_fault); */ } else { - // set power fault status for this board + /* set power fault status for this board */ func->status = 0xFF; info("power fault bit %x set\n", hp_slot); } @@ -320,11 +319,9 @@ } -/* - * sort_by_size - * - * Sorts nodes on the list by their length. - * Smallest first. +/** + * sort_by_size: sort nodes on the list by their length, smallest first. + * @head: list to sort * */ static int sort_by_size(struct pci_resource **head) @@ -334,15 +331,15 @@ int out_of_order = 1; if (!(*head)) - return(1); + return 1; if (!((*head)->next)) - return(0); + return 0; while (out_of_order) { out_of_order = 0; - // Special case for swapping list head + /* Special case for swapping list head */ if (((*head)->next) && ((*head)->length > (*head)->next->length)) { out_of_order++; @@ -365,17 +362,15 @@ } else current_res = current_res->next; } - } // End of out_of_order loop + } /* End of out_of_order loop */ - return(0); + return 0; } -/* - * sort_by_max_size - * - * Sorts nodes on the list by their length. - * Largest first. +/** + * sort_by_max_size: sort nodes on the list by their length, largest first. + * @head: list to sort * */ static int sort_by_max_size(struct pci_resource **head) @@ -385,15 +380,15 @@ int out_of_order = 1; if (!(*head)) - return(1); + return 1; if (!((*head)->next)) - return(0); + return 0; while (out_of_order) { out_of_order = 0; - // Special case for swapping list head + /* Special case for swapping list head */ if (((*head)->next) && ((*head)->length < (*head)->next->length)) { out_of_order++; @@ -416,19 +411,18 @@ } else current_res = current_res->next; } - } // End of out_of_order loop + } /* End of out_of_order loop */ - return(0); + return 0; } -/* - * do_pre_bridge_resource_split - * - * Returns zero or one node of resources that aren't in use +/** + * do_pre_bridge_resource_split: find node of resources that are unused * */ -static struct pci_resource *do_pre_bridge_resource_split (struct pci_resource **head, struct pci_resource **orig_head, u32 alignment) +static struct pci_resource *do_pre_bridge_resource_split(struct pci_resource **head, + struct pci_resource **orig_head, u32 alignment) { struct pci_resource *prevnode = NULL; struct pci_resource *node; @@ -438,32 +432,32 @@ dbg("do_pre_bridge_resource_split\n"); if (!(*head) || !(*orig_head)) - return(NULL); + return NULL; rc = cpqhp_resource_sort_and_combine(head); if (rc) - return(NULL); + return NULL; if ((*head)->base != (*orig_head)->base) - return(NULL); + return NULL; if ((*head)->length == (*orig_head)->length) - return(NULL); + return NULL; - // If we got here, there the bridge requires some of the resource, but - // we may be able to split some off of the front + /* If we got here, there the bridge requires some of the resource, but + * we may be able to split some off of the front */ node = *head; if (node->length & (alignment -1)) { - // this one isn't an aligned length, so we'll make a new entry - // and split it up. - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + /* this one isn't an aligned length, so we'll make a new entry + * and split it up. */ + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; temp_dword = (node->length | (alignment-1)) + 1 - alignment; @@ -473,52 +467,45 @@ node->length -= temp_dword; node->base += split_node->length; - // Put it in the list + /* Put it in the list */ *head = split_node; split_node->next = node; } - if (node->length < alignment) { - return(NULL); - } + if (node->length < alignment) + return NULL; - // Now unlink it + /* Now unlink it */ if (*head == node) { *head = node->next; - node->next = NULL; } else { prevnode = *head; while (prevnode->next != node) prevnode = prevnode->next; prevnode->next = node->next; - node->next = NULL; } + node->next = NULL; - return(node); + return node; } -/* - * do_bridge_resource_split - * - * Returns zero or one node of resources that aren't in use +/** + * do_bridge_resource_split: find one node of resources that aren't in use * */ -static struct pci_resource *do_bridge_resource_split (struct pci_resource **head, u32 alignment) +static struct pci_resource *do_bridge_resource_split(struct pci_resource **head, u32 alignment) { struct pci_resource *prevnode = NULL; struct pci_resource *node; u32 rc; u32 temp_dword; - if (!(*head)) - return(NULL); - rc = cpqhp_resource_sort_and_combine(head); if (rc) - return(NULL); + return NULL; node = *head; @@ -528,44 +515,41 @@ kfree(prevnode); } - if (node->length < alignment) { - kfree(node); - return(NULL); - } + if (node->length < alignment) + goto error; if (node->base & (alignment - 1)) { - // Short circuit if adjusted size is too small + /* Short circuit if adjusted size is too small */ temp_dword = (node->base | (alignment-1)) + 1; - if ((node->length - (temp_dword - node->base)) < alignment) { - kfree(node); - return(NULL); - } + if ((node->length - (temp_dword - node->base)) < alignment) + goto error; node->length -= (temp_dword - node->base); node->base = temp_dword; } - if (node->length & (alignment - 1)) { - // There's stuff in use after this node - kfree(node); - return(NULL); - } - - return(node); + if (node->length & (alignment - 1)) + /* There's stuff in use after this node */ + goto error; + + return node; +error: + kfree(node); + return NULL; } -/* - * get_io_resource +/** + * get_io_resource: find first node of given size not in ISA aliasing window. + * @head: list to search + * @size: size of node to find, must be a power of two. * - * this function sorts the resource list by size and then - * returns the first node of "size" length that is not in the - * ISA aliasing window. If it finds a node larger than "size" - * it will split it up. + * Description: this function sorts the resource list by size and then returns + * returns the first node of "size" length that is not in the ISA aliasing + * window. If it finds a node larger than "size" it will split it up. * - * size must be a power of two. */ -static struct pci_resource *get_io_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size) { struct pci_resource *prevnode; struct pci_resource *node; @@ -573,66 +557,66 @@ u32 temp_dword; if (!(*head)) - return(NULL); + return NULL; if ( cpqhp_resource_sort_and_combine(head) ) - return(NULL); + return NULL; if ( sort_by_size(head) ) - return(NULL); + return NULL; for (node = *head; node; node = node->next) { if (node->length < size) continue; if (node->base & (size - 1)) { - // this one isn't base aligned properly - // so we'll make a new entry and split it up + /* this one isn't base aligned properly + * so we'll make a new entry and split it up */ temp_dword = (node->base | (size-1)) + 1; - // Short circuit if adjusted size is too small + /* Short circuit if adjusted size is too small */ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base; split_node->length = temp_dword - node->base; node->base = temp_dword; node->length -= split_node->length; - // Put it in the list + /* Put it in the list */ split_node->next = node->next; node->next = split_node; - } // End of non-aligned base + } /* End of non-aligned base */ - // Don't need to check if too small since we already did + /* Don't need to check if too small since we already did */ if (node->length > size) { - // this one is longer than we need - // so we'll make a new entry and split it up - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + /* this one is longer than we need + * so we'll make a new entry and split it up */ + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base + size; split_node->length = node->length - size; node->length = size; - // Put it in the list + /* Put it in the list */ split_node->next = node->next; node->next = split_node; - } // End of too big on top end + } /* End of too big on top end */ - // For IO make sure it's not in the ISA aliasing space + /* For IO make sure it's not in the ISA aliasing space */ if (node->base & 0x300L) continue; - // If we got here, then it is the right size - // Now take it out of the list + /* If we got here, then it is the right size + * Now take it out of the list and break */ if (*head == node) { *head = node->next; } else { @@ -643,92 +627,87 @@ prevnode->next = node->next; } node->next = NULL; - // Stop looping break; } - return(node); + return node; } -/* - * get_max_resource +/** + * get_max_resource: get largest node which has at least the given size. + * @head: the list to search the node in + * @size: the minimum size of the node to find * - * Gets the largest node that is at least "size" big from the + * Description: Gets the largest node that is at least "size" big from the * list pointed to by head. It aligns the node on top and bottom * to "size" alignment before returning it. */ -static struct pci_resource *get_max_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_max_resource(struct pci_resource **head, u32 size) { struct pci_resource *max; struct pci_resource *temp; struct pci_resource *split_node; u32 temp_dword; - if (!(*head)) - return(NULL); - if (cpqhp_resource_sort_and_combine(head)) - return(NULL); + return NULL; if (sort_by_max_size(head)) - return(NULL); - - for (max = *head;max; max = max->next) { + return NULL; - // If not big enough we could probably just bail, - // instead we'll continue to the next. + for (max = *head; max; max = max->next) { + /* If not big enough we could probably just bail, + * instead we'll continue to the next. */ if (max->length < size) continue; if (max->base & (size - 1)) { - // this one isn't base aligned properly - // so we'll make a new entry and split it up + /* this one isn't base aligned properly + * so we'll make a new entry and split it up */ temp_dword = (max->base | (size-1)) + 1; - // Short circuit if adjusted size is too small + /* Short circuit if adjusted size is too small */ if ((max->length - (temp_dword - max->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = max->base; split_node->length = temp_dword - max->base; max->base = temp_dword; max->length -= split_node->length; - // Put it next in the list split_node->next = max->next; max->next = split_node; } if ((max->base + max->length) & (size - 1)) { - // this one isn't end aligned properly at the top - // so we'll make a new entry and split it up - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + /* this one isn't end aligned properly at the top + * so we'll make a new entry and split it up */ + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; temp_dword = ((max->base + max->length) & ~(size - 1)); split_node->base = temp_dword; split_node->length = max->length + max->base - split_node->base; max->length -= split_node->length; - // Put it in the list split_node->next = max->next; max->next = split_node; } - // Make sure it didn't shrink too much when we aligned it + /* Make sure it didn't shrink too much when we aligned it */ if (max->length < size) continue; - // Now take it out of the list - temp = (struct pci_resource*) *head; + /* Now take it out of the list */ + temp = *head; if (temp == max) { *head = max->next; } else { @@ -740,38 +719,36 @@ } max->next = NULL; - return(max); + break; } - // If we get here, we couldn't find one - return(NULL); + return max; } -/* - * get_resource +/** + * get_resource: find resource of given size and split up larger ones. + * @head: the list to search for resources + * @size: the size limit to use * - * this function sorts the resource list by size and then + * Description: This function sorts the resource list by size and then * returns the first node of "size" length. If it finds a node * larger than "size" it will split it up. * * size must be a power of two. */ -static struct pci_resource *get_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_resource(struct pci_resource **head, u32 size) { struct pci_resource *prevnode; struct pci_resource *node; struct pci_resource *split_node; u32 temp_dword; - if (!(*head)) - return(NULL); - - if ( cpqhp_resource_sort_and_combine(head) ) - return(NULL); + if (cpqhp_resource_sort_and_combine(head)) + return NULL; - if ( sort_by_size(head) ) - return(NULL); + if (sort_by_size(head)) + return NULL; for (node = *head; node; node = node->next) { dbg("%s: req_size =%x node=%p, base=%x, length=%x\n", @@ -781,51 +758,50 @@ if (node->base & (size - 1)) { dbg("%s: not aligned\n", __FUNCTION__); - // this one isn't base aligned properly - // so we'll make a new entry and split it up + /* this one isn't base aligned properly + * so we'll make a new entry and split it up */ temp_dword = (node->base | (size-1)) + 1; - // Short circuit if adjusted size is too small + /* Short circuit if adjusted size is too small */ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base; split_node->length = temp_dword - node->base; node->base = temp_dword; node->length -= split_node->length; - // Put it in the list split_node->next = node->next; node->next = split_node; - } // End of non-aligned base + } /* End of non-aligned base */ - // Don't need to check if too small since we already did + /* Don't need to check if too small since we already did */ if (node->length > size) { dbg("%s: too big\n", __FUNCTION__); - // this one is longer than we need - // so we'll make a new entry and split it up - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + /* this one is longer than we need + * so we'll make a new entry and split it up */ + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base + size; split_node->length = node->length - size; node->length = size; - // Put it in the list + /* Put it in the list */ split_node->next = node->next; node->next = split_node; - } // End of too big on top end + } /* End of too big on top end */ dbg("%s: got one!!!\n", __FUNCTION__); - // If we got here, then it is the right size - // Now take it out of the list + /* If we got here, then it is the right size + * Now take it out of the list */ if (*head == node) { *head = node->next; } else { @@ -836,17 +812,17 @@ prevnode->next = node->next; } node->next = NULL; - // Stop looping break; } - return(node); + return node; } -/* - * cpqhp_resource_sort_and_combine +/** + * cpqhp_resource_sort_and_combine: sort nodes by base addresses and clean up. + * @head: the list to sort and clean up * - * Sorts all of the nodes in the list in ascending order by + * Description: Sorts all of the nodes in the list in ascending order by * their base addresses. Also does garbage collection by * combining adjacent nodes. * @@ -861,19 +837,19 @@ dbg("%s: head = %p, *head = %p\n", __FUNCTION__, head, *head); if (!(*head)) - return(1); + return 1; dbg("*head->next = %p\n",(*head)->next); if (!(*head)->next) - return(0); /* only one item on the list, already sorted! */ + return 0; /* only one item on the list, already sorted! */ dbg("*head->base = 0x%x\n",(*head)->base); dbg("*head->next->base = 0x%x\n",(*head)->next->base); while (out_of_order) { out_of_order = 0; - // Special case for swapping list head + /* Special case for swapping list head */ if (((*head)->next) && ((*head)->base > (*head)->next->base)) { node1 = *head; @@ -896,13 +872,13 @@ } else node1 = node1->next; } - } // End of out_of_order loop + } /* End of out_of_order loop */ node1 = *head; while (node1 && node1->next) { if ((node1->base + node1->length) == node1->next->base) { - // Combine + /* Combine */ dbg("8..\n"); node1->length += node1->next->length; node2 = node1->next; @@ -912,7 +888,7 @@ node1 = node1->next; } - return(0); + return 0; } @@ -927,23 +903,23 @@ misc = readw(ctrl->hpc_reg + MISC); - //********************************* - // Check to see if it was our interrupt - //********************************* + /*************************************** + * Check to see if it was our interrupt + ***************************************/ if (!(misc & 0x000C)) { return IRQ_NONE; } if (misc & 0x0004) { - //********************************* - // Serial Output interrupt Pending - //********************************* + /********************************** + * Serial Output interrupt Pending + **********************************/ - // Clear the interrupt + /* Clear the interrupt */ misc |= 0x0004; writew(misc, ctrl->hpc_reg + MISC); - // Read to clear posted writes + /* Read to clear posted writes */ misc = readw(ctrl->hpc_reg + MISC); dbg ("%s - waking up\n", __FUNCTION__); @@ -951,21 +927,20 @@ } if (misc & 0x0008) { - // General-interrupt-input interrupt Pending + /* General-interrupt-input interrupt Pending */ Diff = readl(ctrl->hpc_reg + INT_INPUT_CLEAR) ^ ctrl->ctrl_int_comp; ctrl->ctrl_int_comp = readl(ctrl->hpc_reg + INT_INPUT_CLEAR); - // Clear the interrupt + /* Clear the interrupt */ writel(Diff, ctrl->hpc_reg + INT_INPUT_CLEAR); - // Read it back to clear any posted writes + /* Read it back to clear any posted writes */ temp_dword = readl(ctrl->hpc_reg + INT_INPUT_CLEAR); - if (!Diff) { - // Clear all interrupts + if (!Diff) + /* Clear all interrupts */ writel(0xFFFFFFFF, ctrl->hpc_reg + INT_INPUT_CLEAR); - } schedule_flag += handle_switch_change((u8)(Diff & 0xFFL), ctrl); schedule_flag += handle_presence_change((u16)((Diff & 0xFFFF0000L) >> 16), ctrl); @@ -1000,12 +975,12 @@ struct pci_func *new_slot; struct pci_func *next; - new_slot = (struct pci_func *) kmalloc(sizeof(struct pci_func), GFP_KERNEL); + new_slot = kmalloc(sizeof(*new_slot), GFP_KERNEL); if (new_slot == NULL) { - // I'm not dead yet! - // You will be. - return(new_slot); + /* I'm not dead yet! + * You will be. */ + return new_slot; } memset(new_slot, 0, sizeof(struct pci_func)); @@ -1021,11 +996,11 @@ next = next->next; next->next = new_slot; } - return(new_slot); + return new_slot; } -/* +/** * slot_remove - Removes a node from the linked list of slots. * @old_slot: slot to remove * @@ -1036,19 +1011,19 @@ struct pci_func *next; if (old_slot == NULL) - return(1); + return 1; next = cpqhp_slot_list[old_slot->bus]; if (next == NULL) { - return(1); + return 1; } if (next == old_slot) { cpqhp_slot_list[old_slot->bus] = old_slot->next; cpqhp_destroy_board_resources(old_slot); kfree(old_slot); - return(0); + return 0; } while ((next->next != old_slot) && (next->next != NULL)) { @@ -1059,9 +1034,9 @@ next->next = old_slot->next; cpqhp_destroy_board_resources(old_slot); kfree(old_slot); - return(0); + return 0; } else - return(2); + return 2; } @@ -1077,9 +1052,6 @@ u8 tempBus; struct pci_func *next; - if (bridge == NULL) - return(1); - secondaryBus = (bridge->config_space[0x06] >> 8) & 0xFF; subordinateBus = (bridge->config_space[0x06] >> 16) & 0xFF; @@ -1093,26 +1065,23 @@ next = cpqhp_slot_list[bridge->bus]; - if (next == NULL) { - return(1); - } + if (next == NULL) + return 1; if (next == bridge) { cpqhp_slot_list[bridge->bus] = bridge->next; - kfree(bridge); - return(0); + goto out; } - while ((next->next != bridge) && (next->next != NULL)) { + while ((next->next != bridge) && (next->next != NULL)) next = next->next; - } - if (next->next == bridge) { - next->next = bridge->next; - kfree(bridge); - return(0); - } else - return(2); + if (next->next != bridge) + return 2; + next->next = bridge->next; +out: + kfree(bridge); + return 0; } @@ -1132,7 +1101,7 @@ func = cpqhp_slot_list[bus]; if ((func == NULL) || ((func->device == device) && (index == 0))) - return(func); + return func; if (func->device == device) found++; @@ -1144,18 +1113,18 @@ found++; if (found == index) - return(func); + return func; } - return(NULL); + return NULL; } -// DJZ: I don't think is_bridge will work as is. -//FIXME +/* DJZ: I don't think is_bridge will work as is. + * FIXME */ static int is_bridge(struct pci_func * func) { - // Check the header type + /* Check the header type */ if (((func->config_space[0x03] >> 16) & 0xFF) == 0x01) return 1; else @@ -1163,6 +1132,138 @@ } +/** + * set_controller_speed - set the frequency and/or mode of a specific + * controller segment. + * + * @ctrl: controller to change frequency/mode for. + * @adapter_speed: the speed of the adapter we want to match. + * @hp_slot: the slot number where the adapter is installed. + * + * Returns 0 if we successfully change frequency and/or mode to match the + * adapter speed. + * + */ +static u8 set_controller_speed(struct controller *ctrl, u8 adapter_speed, u8 hp_slot) +{ + struct slot *slot; + u8 reg; + u8 slot_power = readb(ctrl->hpc_reg + SLOT_POWER); + u16 reg16; + u32 leds = readl(ctrl->hpc_reg + LED_CONTROL); + + if (ctrl->speed == adapter_speed) + return 0; + + /* We don't allow freq/mode changes if we find another adapter running + * in another slot on this controller */ + for(slot = ctrl->slot; slot; slot = slot->next) { + if (slot->device == (hp_slot + ctrl->slot_device_offset)) + continue; + if (!slot->hotplug_slot && !slot->hotplug_slot->info) + continue; + if (slot->hotplug_slot->info->adapter_status == 0) + continue; + /* If another adapter is running on the same segment but at a + * lower speed/mode, we allow the new adapter to function at + * this rate if supported */ + if (ctrl->speed < adapter_speed) + return 0; + + return 1; + } + + /* If the controller doesn't support freq/mode changes and the + * controller is running at a higher mode, we bail */ + if ((ctrl->speed > adapter_speed) && (!ctrl->pcix_speed_capability)) + return 1; + + /* But we allow the adapter to run at a lower rate if possible */ + if ((ctrl->speed < adapter_speed) && (!ctrl->pcix_speed_capability)) + return 0; + + /* We try to set the max speed supported by both the adapter and + * controller */ + if (ctrl->speed_capability < adapter_speed) { + if (ctrl->speed == ctrl->speed_capability) + return 0; + adapter_speed = ctrl->speed_capability; + } + + writel(0x0L, ctrl->hpc_reg + LED_CONTROL); + writeb(0x00, ctrl->hpc_reg + SLOT_ENABLE); + + set_SOGO(ctrl); + wait_for_ctrl_irq(ctrl); + + if (adapter_speed != PCI_SPEED_133MHz_PCIX) + reg = 0xF5; + else + reg = 0xF4; + pci_write_config_byte(ctrl->pci_dev, 0x41, reg); + + reg16 = readw(ctrl->hpc_reg + NEXT_CURR_FREQ); + reg16 &= ~0x000F; + switch(adapter_speed) { + case(PCI_SPEED_133MHz_PCIX): + reg = 0x75; + reg16 |= 0xB; + break; + case(PCI_SPEED_100MHz_PCIX): + reg = 0x74; + reg16 |= 0xA; + break; + case(PCI_SPEED_66MHz_PCIX): + reg = 0x73; + reg16 |= 0x9; + break; + case(PCI_SPEED_66MHz): + reg = 0x73; + reg16 |= 0x1; + break; + default: /* 33MHz PCI 2.2 */ + reg = 0x71; + break; + + } + reg16 |= 0xB << 12; + writew(reg16, ctrl->hpc_reg + NEXT_CURR_FREQ); + + mdelay(5); + + /* Reenable interrupts */ + writel(0, ctrl->hpc_reg + INT_MASK); + + pci_write_config_byte(ctrl->pci_dev, 0x41, reg); + + /* Restart state machine */ + reg = ~0xF; + pci_read_config_byte(ctrl->pci_dev, 0x43, ®); + pci_write_config_byte(ctrl->pci_dev, 0x43, reg); + + /* Only if mode change...*/ + if (((ctrl->speed == PCI_SPEED_66MHz) && (adapter_speed == PCI_SPEED_66MHz_PCIX)) || + ((ctrl->speed == PCI_SPEED_66MHz_PCIX) && (adapter_speed == PCI_SPEED_66MHz))) + set_SOGO(ctrl); + + wait_for_ctrl_irq(ctrl); + mdelay(1100); + + /* Restore LED/Slot state */ + writel(leds, ctrl->hpc_reg + LED_CONTROL); + writeb(slot_power, ctrl->hpc_reg + SLOT_ENABLE); + + set_SOGO(ctrl); + wait_for_ctrl_irq(ctrl); + + ctrl->speed = adapter_speed; + slot = cpqhp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); + + info("Successfully changed frequency/mode for adapter in slot %d\n", + slot->number); + return 0; +} + /* the following routines constitute the bulk of the hotplug controller logic */ @@ -1178,7 +1279,7 @@ * If board isn't same, turns it back off. * */ -static u32 board_replaced(struct pci_func * func, struct controller * ctrl) +static u32 board_replaced(struct pci_func *func, struct controller *ctrl) { u8 hp_slot; u8 temp_byte; @@ -1190,36 +1291,35 @@ hp_slot = func->device - ctrl->slot_device_offset; if (readl(ctrl->hpc_reg + INT_INPUT_CLEAR) & (0x01L << hp_slot)) { - //********************************* - // The switch is open. - //********************************* + /********************************** + * The switch is open. + **********************************/ rc = INTERLOCK_OPEN; } else if (is_slot_enabled (ctrl, hp_slot)) { - //********************************* - // The board is already on - //********************************* + /********************************** + * The board is already on + **********************************/ rc = CARD_FUNCTIONING; } else { - // Wait for exclusive access to hardware down(&ctrl->crit_sect); - // turn on board without attaching to the bus + /* turn on board without attaching to the bus */ enable_slot_power (ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Change bits in slot power register to force another shift out - // NOTE: this is to work around the timer bug + /* Change bits in slot power register to force another shift out + * NOTE: this is to work around the timer bug */ temp_byte = readb(ctrl->hpc_reg + SLOT_POWER); writeb(0x00, ctrl->hpc_reg + SLOT_POWER); writeb(temp_byte, ctrl->hpc_reg + SLOT_POWER); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); adapter_speed = get_adapter_speed(ctrl, hp_slot); @@ -1227,21 +1327,19 @@ if (set_controller_speed(ctrl, adapter_speed, hp_slot)) rc = WRONG_BUS_FREQUENCY; - // turn off board without attaching to the bus + /* turn off board without attaching to the bus */ disable_slot_power (ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); if (rc) - return(rc); + return rc; - // Wait for exclusive access to hardware down(&ctrl->crit_sect); slot_enable (ctrl, hp_slot); @@ -1251,35 +1349,34 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); - // Wait for ~1 second because of hot plug spec + /* Wait for ~1 second because of hot plug spec */ long_delay(1*HZ); - // Check for a power fault + /* Check for a power fault */ if (func->status == 0xFF) { - // power fault occurred, but it was benign + /* power fault occurred, but it was benign */ rc = POWER_FAILURE; func->status = 0; } else rc = cpqhp_valid_replace(ctrl, func); if (!rc) { - // It must be the same board + /* It must be the same board */ rc = cpqhp_configure_board(ctrl, func); if (rc || src) { - // If configuration fails, turn it off - // Get slot won't work for devices behind bridges, but - // in this case it will always be called for the "base" - // bus/dev/func of an adapter. + /* If configuration fails, turn it off + * Get slot won't work for devices behind + * bridges, but in this case it will always be + * called for the "base" bus/dev/func of an + * adapter. */ - // Wait for exclusive access to hardware down(&ctrl->crit_sect); amber_LED_on (ctrl, hp_slot); @@ -1288,16 +1385,15 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); if (rc) - return(rc); + return rc; else - return(1); + return 1; } func->status = 0; @@ -1310,12 +1406,12 @@ } if (rc) { - // If configuration fails, turn it off - // Get slot won't work for devices behind bridges, but - // in this case it will always be called for the "base" - // bus/dev/func of an adapter. + /* If configuration fails, turn it off + * Get slot won't work for devices behind + * bridges, but in this case it will always be + * called for the "base" bus/dev/func of an + * adapter. */ - // Wait for exclusive access to hardware down(&ctrl->crit_sect); amber_LED_on (ctrl, hp_slot); @@ -1324,37 +1420,33 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); - return(rc); + return rc; } - // Done configuring so turn LED on full time + /* Done configuring so turn LED on full time */ - // Wait for exclusive access to hardware down(&ctrl->crit_sect); green_LED_on (ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); rc = 0; } else { - // Something is wrong + /* Something is wrong - // Get slot won't work for devices behind bridges, but - // in this case it will always be called for the "base" - // bus/dev/func of an adapter. + * Get slot won't work for devices behind bridges, but + * in this case it will always be called for the "base" + * bus/dev/func of an adapter. */ - // Wait for exclusive access to hardware down(&ctrl->crit_sect); amber_LED_on (ctrl, hp_slot); @@ -1363,15 +1455,14 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); } } - return(rc); + return rc; } @@ -1383,7 +1474,7 @@ * Configures board * */ -static u32 board_added(struct pci_func * func, struct controller * ctrl) +static u32 board_added(struct pci_func *func, struct controller *ctrl) { u8 hp_slot; u8 temp_byte; @@ -1399,26 +1490,25 @@ dbg("%s: func->device, slot_offset, hp_slot = %d, %d ,%d\n", __FUNCTION__, func->device, ctrl->slot_device_offset, hp_slot); - // Wait for exclusive access to hardware down(&ctrl->crit_sect); - // turn on board without attaching to the bus - enable_slot_power (ctrl, hp_slot); + /* turn on board without attaching to the bus */ + enable_slot_power(ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Change bits in slot power register to force another shift out - // NOTE: this is to work around the timer bug + /* Change bits in slot power register to force another shift out + * NOTE: this is to work around the timer bug */ temp_byte = readb(ctrl->hpc_reg + SLOT_POWER); writeb(0x00, ctrl->hpc_reg + SLOT_POWER); writeb(temp_byte, ctrl->hpc_reg + SLOT_POWER); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); adapter_speed = get_adapter_speed(ctrl, hp_slot); @@ -1426,25 +1516,23 @@ if (set_controller_speed(ctrl, adapter_speed, hp_slot)) rc = WRONG_BUS_FREQUENCY; - // turn off board without attaching to the bus + /* turn off board without attaching to the bus */ disable_slot_power (ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset - wait_for_ctrl_irq (ctrl); + /* Wait for SOBS to be unset */ + wait_for_ctrl_irq(ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); if (rc) - return(rc); + return rc; p_slot = cpqhp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); - // turn on board and blink green LED + /* turn on board and blink green LED */ - // Wait for exclusive access to hardware dbg("%s: before down\n", __FUNCTION__); down(&ctrl->crit_sect); dbg("%s: after down\n", __FUNCTION__); @@ -1461,47 +1549,46 @@ dbg("%s: before set_SOGO\n", __FUNCTION__); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ dbg("%s: before wait_for_ctrl_irq\n", __FUNCTION__); wait_for_ctrl_irq (ctrl); dbg("%s: after wait_for_ctrl_irq\n", __FUNCTION__); - // Done with exclusive hardware access dbg("%s: before up\n", __FUNCTION__); up(&ctrl->crit_sect); dbg("%s: after up\n", __FUNCTION__); - // Wait for ~1 second because of hot plug spec + /* Wait for ~1 second because of hot plug spec */ dbg("%s: before long_delay\n", __FUNCTION__); long_delay(1*HZ); dbg("%s: after long_delay\n", __FUNCTION__); dbg("%s: func status = %x\n", __FUNCTION__, func->status); - // Check for a power fault + /* Check for a power fault */ if (func->status == 0xFF) { - // power fault occurred, but it was benign + /* power fault occurred, but it was benign */ temp_register = 0xFFFFFFFF; dbg("%s: temp register set to %x by power fault\n", __FUNCTION__, temp_register); rc = POWER_FAILURE; func->status = 0; } else { - // Get vendor/device ID u32 + /* Get vendor/device ID u32 */ ctrl->pci_bus->number = func->bus; rc = pci_bus_read_config_dword (ctrl->pci_bus, PCI_DEVFN(func->device, func->function), PCI_VENDOR_ID, &temp_register); dbg("%s: pci_read_config_dword returns %d\n", __FUNCTION__, rc); dbg("%s: temp_register is %x\n", __FUNCTION__, temp_register); if (rc != 0) { - // Something's wrong here + /* Something's wrong here */ temp_register = 0xFFFFFFFF; dbg("%s: temp register set to %x by error\n", __FUNCTION__, temp_register); } - // Preset return code. It will be changed later if things go okay. + /* Preset return code. It will be changed later if things go okay. */ rc = NO_ADAPTER_PRESENT; } - // All F's is an empty slot or an invalid board - if (temp_register != 0xFFFFFFFF) { // Check for a board in the slot + /* All F's is an empty slot or an invalid board */ + if (temp_register != 0xFFFFFFFF) { /* Check for a board in the slot */ res_lists.io_head = ctrl->io_head; res_lists.mem_head = ctrl->mem_head; res_lists.p_mem_head = ctrl->p_mem_head; @@ -1522,7 +1609,6 @@ cpqhp_resource_sort_and_combine(&(ctrl->bus_head)); if (rc) { - // Wait for exclusive access to hardware down(&ctrl->crit_sect); amber_LED_on (ctrl, hp_slot); @@ -1531,12 +1617,11 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); - return(rc); + return rc; } else { cpqhp_save_slot_config(ctrl, func); } @@ -1546,7 +1631,8 @@ func->switch_save = 0x10; func->is_a_board = 0x01; - //next, we will instantiate the linux pci_dev structures (with appropriate driver notification, if already present) + /* next, we will instantiate the linux pci_dev structures (with + * appropriate driver notification, if already present) */ dbg("%s: configure linux pci_dev structure\n", __FUNCTION__); index = 0; do { @@ -1556,20 +1642,17 @@ } } while (new_slot); - // Wait for exclusive access to hardware down(&ctrl->crit_sect); green_LED_on (ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); } else { - // Wait for exclusive access to hardware down(&ctrl->crit_sect); amber_LED_on (ctrl, hp_slot); @@ -1578,13 +1661,12 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); - return(rc); + return rc; } return 0; } @@ -1605,26 +1687,23 @@ struct resource_lists res_lists; struct pci_func *temp_func; - if (func == NULL) - return(1); - if (cpqhp_unconfigure_device(func)) - return(1); + return 1; device = func->device; hp_slot = func->device - ctrl->slot_device_offset; dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot); - // When we get here, it is safe to change base Address Registers. - // We will attempt to save the base Address Register Lengths + /* When we get here, it is safe to change base address registers. + * We will attempt to save the base address register lengths */ if (replace_flag || !ctrl->add_support) rc = cpqhp_save_base_addr_length(ctrl, func); else if (!func->bus_head && !func->mem_head && !func->p_mem_head && !func->io_head) { - // Here we check to see if we've saved any of the board's - // resources already. If so, we'll skip the attempt to - // determine what's being used. + /* Here we check to see if we've saved any of the board's + * resources already. If so, we'll skip the attempt to + * determine what's being used. */ index = 0; temp_func = cpqhp_slot_find(func->bus, func->device, index++); while (temp_func) { @@ -1639,12 +1718,11 @@ if (!skip) rc = cpqhp_save_used_resources(ctrl, func); } - // Change status to shutdown + /* Change status to shutdown */ if (func->is_a_board) func->status = 0x01; func->configured = 0; - // Wait for exclusive access to hardware down(&ctrl->crit_sect); green_LED_off (ctrl, hp_slot); @@ -1652,15 +1730,14 @@ set_SOGO(ctrl); - // turn off SERR for slot + /* turn off SERR for slot */ temp_byte = readb(ctrl->hpc_reg + SLOT_SERR); temp_byte &= ~(0x01 << hp_slot); writeb(temp_byte, ctrl->hpc_reg + SLOT_SERR); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); if (!replace_flag && ctrl->add_support) { @@ -1690,13 +1767,11 @@ func = cpqhp_slot_find(ctrl->bus, device, 0); } - // Setup slot structure with entry for empty slot + /* Setup slot structure with entry for empty slot */ func = cpqhp_slot_create(ctrl->bus); - if (func == NULL) { - // Out of memory - return(1); - } + if (func == NULL) + return 1; func->bus = ctrl->bus; func->device = device; @@ -1710,15 +1785,14 @@ return 0; } - -static void pushbutton_helper_thread (unsigned long data) +static void pushbutton_helper_thread(unsigned long data) { pushbutton_pending = data; up(&event_semaphore); } -// this is the main worker thread +/* this is the main worker thread */ static int event_thread(void* data) { struct controller *ctrl; @@ -1745,7 +1819,7 @@ } -int cpqhp_event_start_thread (void) +int cpqhp_event_start_thread(void) { int pid; @@ -1765,7 +1839,7 @@ } -void cpqhp_event_stop_thread (void) +void cpqhp_event_stop_thread(void) { event_finished = 1; dbg("event_thread finish command given\n"); @@ -1775,12 +1849,12 @@ } -static int update_slot_info (struct controller *ctrl, struct slot *slot) +static int update_slot_info(struct controller *ctrl, struct slot *slot) { struct hotplug_slot_info *info; int result; - info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); + info = kmalloc(sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; @@ -1805,7 +1879,7 @@ change = 0; for (loop = 0; loop < 10; loop++) { - //dbg("loop %d\n", loop); + /* dbg("loop %d\n", loop); */ if (ctrl->event_queue[loop].event_type != 0) { hp_slot = ctrl->event_queue[loop].hp_slot; @@ -1827,17 +1901,14 @@ dbg("button cancel\n"); del_timer(&p_slot->task_event); - // Wait for exclusive access to hardware down(&ctrl->crit_sect); if (p_slot->state == BLINKINGOFF_STATE) { - // slot is on - // turn on green LED + /* slot is on */ dbg("turn on green LED\n"); green_LED_on (ctrl, hp_slot); } else if (p_slot->state == BLINKINGON_STATE) { - // slot is off - // turn off green LED + /* slot is off */ dbg("turn off green LED\n"); green_LED_off (ctrl, hp_slot); } @@ -1850,28 +1921,24 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); } - // ***********button Released (No action on press...) + /*** button Released (No action on press...) */ else if (ctrl->event_queue[loop].event_type == INT_BUTTON_RELEASE) { dbg("button release\n"); if (is_slot_enabled (ctrl, hp_slot)) { - // slot is on dbg("slot is on\n"); p_slot->state = BLINKINGOFF_STATE; info(msg_button_off, p_slot->number); } else { - // slot is off dbg("slot is off\n"); p_slot->state = BLINKINGON_STATE; info(msg_button_on, p_slot->number); } - // Wait for exclusive access to hardware down(&ctrl->crit_sect); dbg("blink green LED and turn off amber\n"); @@ -1881,23 +1948,22 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); - // Done with exclusive hardware access up(&ctrl->crit_sect); init_timer(&p_slot->task_event); p_slot->hp_slot = hp_slot; p_slot->ctrl = ctrl; -// p_slot->physical_slot = physical_slot; - p_slot->task_event.expires = jiffies + 5 * HZ; // 5 second delay +/* p_slot->physical_slot = physical_slot; */ + p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ p_slot->task_event.function = pushbutton_helper_thread; p_slot->task_event.data = (u32) p_slot; dbg("add_timer p_slot = %p\n", p_slot); add_timer(&p_slot->task_event); } - // ***********POWER FAULT + /***********POWER FAULT */ else if (ctrl->event_queue[loop].event_type == INT_POWER_FAULT) { dbg("power fault\n"); } else { @@ -1910,7 +1976,7 @@ change = 1; } - } // End of FOR loop + } /* End of FOR loop */ } return; @@ -1924,7 +1990,7 @@ * Handles all pending events and exits. * */ -void cpqhp_pushbutton_thread (unsigned long slot) +void cpqhp_pushbutton_thread(unsigned long slot) { u8 hp_slot; u8 device; @@ -1937,9 +2003,9 @@ device = p_slot->device; - if (is_slot_enabled (ctrl, hp_slot)) { + if (is_slot_enabled(ctrl, hp_slot)) { p_slot->state = POWEROFF_STATE; - // power Down board + /* power Down board */ func = cpqhp_slot_find(p_slot->bus, p_slot->device, 0); dbg("In power_down_board, func = %p, ctrl = %p\n", func, ctrl); if (!func) { @@ -1954,7 +2020,7 @@ set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); } } @@ -1962,7 +2028,7 @@ p_slot->state = STATIC_STATE; } else { p_slot->state = POWERON_STATE; - // slot is off + /* slot is off */ func = cpqhp_slot_find(p_slot->bus, p_slot->device, 0); dbg("In add_board, func = %p, ctrl = %p\n", func, ctrl); @@ -1973,12 +2039,12 @@ if (func != NULL && ctrl != NULL) { if (cpqhp_process_SI(ctrl, func) != 0) { - amber_LED_on (ctrl, hp_slot); - green_LED_off (ctrl, hp_slot); + amber_LED_on(ctrl, hp_slot); + green_LED_off(ctrl, hp_slot); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); } } @@ -1990,7 +2056,7 @@ } -int cpqhp_process_SI (struct controller *ctrl, struct pci_func *func) +int cpqhp_process_SI(struct controller *ctrl, struct pci_func *func) { u8 device, hp_slot; u16 temp_word; @@ -1999,35 +2065,30 @@ struct slot* p_slot; int physical_slot = 0; - if (!ctrl) - return(1); - tempdword = 0; device = func->device; hp_slot = device - ctrl->slot_device_offset; p_slot = cpqhp_find_slot(ctrl, device); - if (p_slot) { + if (p_slot) physical_slot = p_slot->number; - } - // Check to see if the interlock is closed + /* Check to see if the interlock is closed */ tempdword = readl(ctrl->hpc_reg + INT_INPUT_CLEAR); if (tempdword & (0x01 << hp_slot)) { - return(1); + return 1; } if (func->is_a_board) { rc = board_replaced(func, ctrl); } else { - // add board + /* add board */ slot_remove(func); func = cpqhp_slot_create(ctrl->bus); - if (func == NULL) { - return(1); - } + if (func == NULL) + return 1; func->bus = ctrl->bus; func->device = device; @@ -2035,7 +2096,7 @@ func->configured = 0; func->is_a_board = 1; - // We have to save the presence info for these slots + /* We have to save the presence info for these slots */ temp_word = ctrl->ctrl_int_comp >> 16; func->presence_save = (temp_word >> hp_slot) & 0x01; func->presence_save |= (temp_word >> (hp_slot + 7)) & 0x02; @@ -2053,13 +2114,11 @@ } else slot_remove(func); - // Setup slot structure with entry for empty slot + /* Setup slot structure with entry for empty slot */ func = cpqhp_slot_create(ctrl->bus); - if (func == NULL) { - // Out of memory - return(1); - } + if (func == NULL) + return 1; func->bus = ctrl->bus; func->device = device; @@ -2067,7 +2126,7 @@ func->configured = 0; func->is_a_board = 0; - // We have to save the presence info for these slots + /* We have to save the presence info for these slots */ temp_word = ctrl->ctrl_int_comp >> 16; func->presence_save = (temp_word >> hp_slot) & 0x01; func->presence_save |= @@ -2092,7 +2151,7 @@ } -int cpqhp_process_SS (struct controller *ctrl, struct pci_func *func) +int cpqhp_process_SS(struct controller *ctrl, struct pci_func *func) { u8 device, class_code, header_type, BCR; u8 index = 0; @@ -2110,12 +2169,12 @@ physical_slot = p_slot->number; } - // Make sure there are no video controllers here + /* Make sure there are no video controllers here */ while (func && !rc) { pci_bus->number = func->bus; devfn = PCI_DEVFN(func->device, func->function); - // Check the Class Code + /* Check the Class Code */ rc = pci_bus_read_config_byte (pci_bus, devfn, 0x0B, &class_code); if (rc) return rc; @@ -2124,18 +2183,19 @@ /* Display/Video adapter (not supported) */ rc = REMOVE_NOT_SUPPORTED; } else { - // See if it's a bridge + /* See if it's a bridge */ rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &header_type); if (rc) return rc; - // If it's a bridge, check the VGA Enable bit + /* If it's a bridge, check the VGA Enable bit */ if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_BRIDGE_CONTROL, &BCR); if (rc) return rc; - // If the VGA Enable bit is set, remove isn't supported + /* If the VGA Enable bit is set, remove isn't + * supported */ if (BCR & PCI_BRIDGE_CTL_VGA) { rc = REMOVE_NOT_SUPPORTED; } @@ -2147,7 +2207,7 @@ func = cpqhp_slot_find(ctrl->bus, device, 0); if ((func != NULL) && !rc) { - //FIXME: Replace flag should be passed into process_SS + /* FIXME: Replace flag should be passed into process_SS */ replace_flag = !(ctrl->add_support); rc = remove_board(func, replace_flag, ctrl); } else if (!rc) { @@ -2157,16 +2217,42 @@ if (p_slot) update_slot_info(ctrl, p_slot); - return(rc); + return rc; } +/** + * switch_leds: switch the leds, go from one site to the other. + * @ctrl: controller to use + * @num_of_slots: number of slots to use + * @direction: 1 to start from the left side, 0 to start right. + */ +static void switch_leds(struct controller *ctrl, const int num_of_slots, + u32 *work_LED, const int direction) +{ + int loop; + for (loop = 0; loop < num_of_slots; loop++) { + if (direction) + *work_LED = *work_LED >> 1; + else + *work_LED = *work_LED << 1; + writel(*work_LED, ctrl->hpc_reg + LED_CONTROL); + + set_SOGO(ctrl); + + /* Wait for SOGO interrupt */ + wait_for_ctrl_irq(ctrl); + + /* Get ready for next iteration */ + long_delay((2*HZ)/10); + } +} /** * hardware_test - runs hardware tests * * For hot plug ctrl folks to play with. - * test_num is the number entered in the GUI + * test_num is the number written to the "test" file in sysfs * */ int cpqhp_hardware_test(struct controller *ctrl, int test_num) @@ -2180,132 +2266,45 @@ switch (test_num) { case 1: - // Do stuff here! + /* Do stuff here! */ - // Do that funky LED thing - save_LED = readl(ctrl->hpc_reg + LED_CONTROL); // so we can restore them later + /* Do that funky LED thing */ + /* so we can restore them later */ + save_LED = readl(ctrl->hpc_reg + LED_CONTROL); work_LED = 0x01010101; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - for (loop = 0; loop < num_of_slots; loop++) { - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - work_LED = work_LED << 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - long_delay((2*HZ)/10); - } - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED >> 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED << 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED >> 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } + switch_leds(ctrl, num_of_slots, &work_LED, 0); + switch_leds(ctrl, num_of_slots, &work_LED, 1); + switch_leds(ctrl, num_of_slots, &work_LED, 0); + switch_leds(ctrl, num_of_slots, &work_LED, 1); work_LED = 0x01010000; writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - for (loop = 0; loop < num_of_slots; loop++) { - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - work_LED = work_LED << 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - long_delay((2*HZ)/10); - } - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED >> 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } + switch_leds(ctrl, num_of_slots, &work_LED, 0); + switch_leds(ctrl, num_of_slots, &work_LED, 1); work_LED = 0x00000101; writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED << 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } - for (loop = 0; loop < num_of_slots; loop++) { - work_LED = work_LED >> 1; - writel(work_LED, ctrl->hpc_reg + LED_CONTROL); - - set_SOGO(ctrl); - - // Wait for SOGO interrupt - wait_for_ctrl_irq (ctrl); - - // Get ready for next iteration - long_delay((2*HZ)/10); - } - + switch_leds(ctrl, num_of_slots, &work_LED, 0); + switch_leds(ctrl, num_of_slots, &work_LED, 1); work_LED = 0x01010000; writel(work_LED, ctrl->hpc_reg + LED_CONTROL); for (loop = 0; loop < num_of_slots; loop++) { set_SOGO(ctrl); - // Wait for SOGO interrupt + /* Wait for SOGO interrupt */ wait_for_ctrl_irq (ctrl); - // Get ready for next iteration + /* Get ready for next iteration */ long_delay((3*HZ)/10); work_LED = work_LED >> 16; writel(work_LED, ctrl->hpc_reg + LED_CONTROL); set_SOGO(ctrl); - // Wait for SOGO interrupt + /* Wait for SOGO interrupt */ wait_for_ctrl_irq (ctrl); - // Get ready for next iteration + /* Get ready for next iteration */ long_delay((3*HZ)/10); work_LED = work_LED << 16; writel(work_LED, ctrl->hpc_reg + LED_CONTROL); @@ -2313,18 +2312,19 @@ writel(work_LED, ctrl->hpc_reg + LED_CONTROL); } - writel (save_LED, ctrl->hpc_reg + LED_CONTROL); // put it back the way it was + /* put it back the way it was */ + writel(save_LED, ctrl->hpc_reg + LED_CONTROL); set_SOGO(ctrl); - // Wait for SOBS to be unset + /* Wait for SOBS to be unset */ wait_for_ctrl_irq (ctrl); break; case 2: - // Do other stuff here! + /* Do other stuff here! */ break; case 3: - // and more... + /* and more... */ break; } return 0; @@ -2342,7 +2342,7 @@ * Returns 0 if success * */ -static u32 configure_new_device (struct controller * ctrl, struct pci_func * func, +static u32 configure_new_device(struct controller * ctrl, struct pci_func * func, u8 behind_bridge, struct resource_lists * resources) { u8 temp_byte, function, max_functions, stop_it; @@ -2354,7 +2354,7 @@ new_slot = func; dbg("%s\n", __FUNCTION__); - // Check for Multi-function device + /* Check for Multi-function device */ ctrl->pci_bus->number = func->bus; rc = pci_bus_read_config_byte (ctrl->pci_bus, PCI_DEVFN(func->device, func->function), 0x0E, &temp_byte); if (rc) { @@ -2362,7 +2362,7 @@ return rc; } - if (temp_byte & 0x80) // Multi-function device + if (temp_byte & 0x80) /* Multi-function device */ max_functions = 8; else max_functions = 1; @@ -2383,29 +2383,27 @@ cpqhp_return_board_resources(new_slot, resources); } - return(rc); + return rc; } function++; stop_it = 0; - // The following loop skips to the next present function - // and creates a board structure + /* The following loop skips to the next present function + * and creates a board structure */ while ((function < max_functions) && (!stop_it)) { pci_bus_read_config_dword (ctrl->pci_bus, PCI_DEVFN(func->device, function), 0x00, &ID); - if (ID == 0xFFFFFFFF) { // There's nothing there. + if (ID == 0xFFFFFFFF) { /* There's nothing there. */ function++; - } else { // There's something there - // Setup slot structure. + } else { /* There's something there */ + /* Setup slot structure. */ new_slot = cpqhp_slot_create(func->bus); - if (new_slot == NULL) { - // Out of memory - return(1); - } + if (new_slot == NULL) + return 1; new_slot->bus = func->bus; new_slot->device = func->device; @@ -2442,8 +2440,9 @@ * Returns 0 if success * */ -static int configure_new_function (struct controller * ctrl, struct pci_func * func, - u8 behind_bridge, struct resource_lists * resources) +static int configure_new_function(struct controller *ctrl, struct pci_func *func, + u8 behind_bridge, + struct resource_lists *resources) { int cloop; u8 IRQ = 0; @@ -2475,57 +2474,56 @@ pci_bus->number = func->bus; devfn = PCI_DEVFN(func->device, func->function); - // Check for Bridge - rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &temp_byte); + /* Check for Bridge */ + rc = pci_bus_read_config_byte(pci_bus, devfn, PCI_HEADER_TYPE, &temp_byte); if (rc) return rc; - if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { // PCI-PCI Bridge - // set Primary bus + if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ + /* set Primary bus */ dbg("set Primary bus = %d\n", func->bus); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_PRIMARY_BUS, func->bus); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_PRIMARY_BUS, func->bus); if (rc) return rc; - // find range of busses to use + /* find range of busses to use */ dbg("find ranges of buses to use\n"); - bus_node = get_max_resource(&resources->bus_head, 1); + bus_node = get_max_resource(&(resources->bus_head), 1); - // If we don't have any busses to allocate, we can't continue + /* If we don't have any busses to allocate, we can't continue */ if (!bus_node) return -ENOMEM; - // set Secondary bus + /* set Secondary bus */ temp_byte = bus_node->base; dbg("set Secondary bus = %d\n", bus_node->base); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SECONDARY_BUS, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, temp_byte); if (rc) return rc; - // set subordinate bus + /* set subordinate bus */ temp_byte = bus_node->base + bus_node->length - 1; dbg("set subordinate bus = %d\n", bus_node->base + bus_node->length - 1); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); if (rc) return rc; - // set subordinate Latency Timer and base Latency Timer + /* set subordinate Latency Timer and base Latency Timer */ temp_byte = 0x40; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SEC_LATENCY_TIMER, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_SEC_LATENCY_TIMER, temp_byte); if (rc) return rc; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_LATENCY_TIMER, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_LATENCY_TIMER, temp_byte); if (rc) return rc; - // set Cache Line size + /* set Cache Line size */ temp_byte = 0x08; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_CACHE_LINE_SIZE, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_CACHE_LINE_SIZE, temp_byte); if (rc) return rc; - // Setup the IO, memory, and prefetchable windows - + /* Setup the IO, memory, and prefetchable windows */ io_node = get_max_resource(&(resources->io_head), 0x1000); if (!io_node) return -ENOMEM; @@ -2537,13 +2535,16 @@ return -ENOMEM; dbg("Setup the IO, memory, and prefetchable windows\n"); dbg("io_node\n"); - dbg("(base, len, next) (%x, %x, %p)\n", io_node->base, io_node->length, io_node->next); + dbg("(base, len, next) (%x, %x, %p)\n", io_node->base, + io_node->length, io_node->next); dbg("mem_node\n"); - dbg("(base, len, next) (%x, %x, %p)\n", mem_node->base, mem_node->length, mem_node->next); + dbg("(base, len, next) (%x, %x, %p)\n", mem_node->base, + mem_node->length, mem_node->next); dbg("p_mem_node\n"); - dbg("(base, len, next) (%x, %x, %p)\n", p_mem_node->base, p_mem_node->length, p_mem_node->next); + dbg("(base, len, next) (%x, %x, %p)\n", p_mem_node->base, + p_mem_node->length, p_mem_node->next); - // set up the IRQ info + /* set up the IRQ info */ if (!resources->irqs) { irqs.barber_pole = 0; irqs.interrupt[0] = 0; @@ -2560,32 +2561,28 @@ irqs.valid_INT = resources->irqs->valid_INT; } - // set up resource lists that are now aligned on top and bottom - // for anything behind the bridge. + /* set up resource lists that are now aligned on top and bottom + * for anything behind the bridge. */ temp_resources.bus_head = bus_node; temp_resources.io_head = io_node; temp_resources.mem_head = mem_node; temp_resources.p_mem_head = p_mem_node; temp_resources.irqs = &irqs; - // Make copies of the nodes we are going to pass down so that - // if there is a problem,we can just use these to free resources - hold_bus_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_IO_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + /* Make copies of the nodes we are going to pass down so that + * if there is a problem,we can just use these to free resources */ + hold_bus_node = kmalloc(sizeof(*hold_bus_node), GFP_KERNEL); + hold_IO_node = kmalloc(sizeof(*hold_IO_node), GFP_KERNEL); + hold_mem_node = kmalloc(sizeof(*hold_mem_node), GFP_KERNEL); + hold_p_mem_node = kmalloc(sizeof(*hold_p_mem_node), GFP_KERNEL); if (!hold_bus_node || !hold_IO_node || !hold_mem_node || !hold_p_mem_node) { - if (hold_bus_node) - kfree(hold_bus_node); - if (hold_IO_node) - kfree(hold_IO_node); - if (hold_mem_node) - kfree(hold_mem_node); - if (hold_p_mem_node) - kfree(hold_p_mem_node); + kfree(hold_bus_node); + kfree(hold_IO_node); + kfree(hold_mem_node); + kfree(hold_p_mem_node); - return(1); + return 1; } memcpy(hold_bus_node, bus_node, sizeof(struct pci_resource)); @@ -2594,55 +2591,55 @@ bus_node->length -= 1; bus_node->next = NULL; - // If we have IO resources copy them and fill in the bridge's - // IO range registers + /* If we have IO resources copy them and fill in the bridge's + * IO range registers */ if (io_node) { memcpy(hold_IO_node, io_node, sizeof(struct pci_resource)); io_node->next = NULL; - // set IO base and Limit registers + /* set IO base and Limit registers */ temp_byte = io_node->base >> 8; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_BASE, temp_byte); temp_byte = (io_node->base + io_node->length - 1) >> 8; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_LIMIT, temp_byte); } else { kfree(hold_IO_node); hold_IO_node = NULL; } - // If we have memory resources copy them and fill in the bridge's - // memory range registers. Otherwise, fill in the range - // registers with values that disable them. + /* If we have memory resources copy them and fill in the + * bridge's memory range registers. Otherwise, fill in the + * range registers with values that disable them. */ if (mem_node) { memcpy(hold_mem_node, mem_node, sizeof(struct pci_resource)); mem_node->next = NULL; - // set Mem base and Limit registers + /* set Mem base and Limit registers */ temp_word = mem_node->base >> 16; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_BASE, temp_word); temp_word = (mem_node->base + mem_node->length - 1) >> 16; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); } else { temp_word = 0xFFFF; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_BASE, temp_word); temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); kfree(hold_mem_node); hold_mem_node = NULL; } - // If we have prefetchable memory resources copy them and - // fill in the bridge's memory range registers. Otherwise, - // fill in the range registers with values that disable them. + /* If we have prefetchable memory resources copy them and + * fill in the bridge's memory range registers. Otherwise, + * fill in the range registers with values that disable them. */ if (p_mem_node) { memcpy(hold_p_mem_node, p_mem_node, sizeof(struct pci_resource)); p_mem_node->next = NULL; - // set Pre Mem base and Limit registers + /* set Pre Mem base and Limit registers */ temp_word = p_mem_node->base >> 16; rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); @@ -2659,12 +2656,12 @@ hold_p_mem_node = NULL; } - // Adjust this to compensate for extra adjustment in first loop + /* Adjust this to compensate for extra adjustment in first loop */ irqs.barber_pole--; rc = 0; - // Here we actually find the devices and configure them + /* Here we actually find the devices and configure them */ for (device = 0; (device <= 0x1F) && !rc; device++) { irqs.barber_pole = (irqs.barber_pole + 1) & 0x03; @@ -2673,12 +2670,11 @@ pci_bus_read_config_dword (pci_bus, PCI_DEVFN(device, 0), 0x00, &ID); pci_bus->number = func->bus; - if (ID != 0xFFFFFFFF) { // device Present - // Setup slot structure. + if (ID != 0xFFFFFFFF) { /* device present */ + /* Setup slot structure. */ new_slot = cpqhp_slot_create(hold_bus_node->base); if (new_slot == NULL) { - // Out of memory rc = -ENOMEM; continue; } @@ -2691,19 +2687,12 @@ rc = configure_new_device(ctrl, new_slot, 1, &temp_resources); dbg("configure_new_device rc=0x%x\n",rc); - } // End of IF (device in slot?) - } // End of FOR loop - - if (rc) { - cpqhp_destroy_resource_list(&temp_resources); + } /* End of IF (device in slot?) */ + } /* End of FOR loop */ - return_resource(&(resources->bus_head), hold_bus_node); - return_resource(&(resources->io_head), hold_IO_node); - return_resource(&(resources->mem_head), hold_mem_node); - return_resource(&(resources->p_mem_head), hold_p_mem_node); - return(rc); - } - // save the interrupt routing information + if (rc) + goto free_and_out; + /* save the interrupt routing information */ if (resources->irqs) { resources->irqs->interrupt[0] = irqs.interrupt[0]; resources->irqs->interrupt[1] = irqs.interrupt[1]; @@ -2711,25 +2700,19 @@ resources->irqs->interrupt[3] = irqs.interrupt[3]; resources->irqs->valid_INT = irqs.valid_INT; } else if (!behind_bridge) { - // We need to hook up the interrupts here + /* We need to hook up the interrupts here */ for (cloop = 0; cloop < 4; cloop++) { if (irqs.valid_INT & (0x01 << cloop)) { rc = cpqhp_set_irq(func->bus, func->device, 0x0A + cloop, irqs.interrupt[cloop]); - if (rc) { - cpqhp_destroy_resource_list (&temp_resources); - - return_resource(&(resources-> bus_head), hold_bus_node); - return_resource(&(resources-> io_head), hold_IO_node); - return_resource(&(resources-> mem_head), hold_mem_node); - return_resource(&(resources-> p_mem_head), hold_p_mem_node); - return rc; - } + if (rc) + goto free_and_out; } - } // end of for loop + } /* end of for loop */ } - // Return unused bus resources - // First use the temporary node to store information for the board + /* Return unused bus resources + * First use the temporary node to store information for + * the board */ if (hold_bus_node && bus_node && temp_resources.bus_head) { hold_bus_node->length = bus_node->base - hold_bus_node->base; @@ -2738,7 +2721,7 @@ temp_byte = temp_resources.bus_head->base - 1; - // set subordinate bus + /* set subordinate bus */ rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); if (temp_resources.bus_head->length == 0) { @@ -2749,13 +2732,13 @@ } } - // If we have IO space available and there is some left, - // return the unused portion + /* If we have IO space available and there is some left, + * return the unused portion */ if (hold_IO_node && temp_resources.io_head) { io_node = do_pre_bridge_resource_split(&(temp_resources.io_head), &hold_IO_node, 0x1000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (io_node) { hold_IO_node->base = io_node->base + io_node->length; @@ -2767,12 +2750,13 @@ io_node = do_bridge_resource_split(&(temp_resources.io_head), 0x1000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (io_node) { - // First use the temporary node to store information for the board + /* First use the temporary node to store + * information for the board */ hold_IO_node->length = io_node->base - hold_IO_node->base; - // If we used any, add it to the board's list + /* If we used any, add it to the board's list */ if (hold_IO_node->length) { hold_IO_node->next = func->io_head; func->io_head = hold_IO_node; @@ -2782,7 +2766,7 @@ return_resource(&(resources->io_head), io_node); } else { - // it doesn't need any IO + /* it doesn't need any IO */ temp_word = 0x0000; rc = pci_bus_write_config_word (pci_bus, devfn, PCI_IO_LIMIT, temp_word); @@ -2790,22 +2774,22 @@ kfree(hold_IO_node); } } else { - // it used most of the range + /* it used most of the range */ hold_IO_node->next = func->io_head; func->io_head = hold_IO_node; } } else if (hold_IO_node) { - // it used the whole range + /* it used the whole range */ hold_IO_node->next = func->io_head; func->io_head = hold_IO_node; } - // If we have memory space available and there is some left, - // return the unused portion + /* If we have memory space available and there is some left, + * return the unused portion */ if (hold_mem_node && temp_resources.mem_head) { mem_node = do_pre_bridge_resource_split(&(temp_resources. mem_head), &hold_mem_node, 0x100000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (mem_node) { hold_mem_node->base = mem_node->base + mem_node->length; @@ -2817,23 +2801,24 @@ mem_node = do_bridge_resource_split(&(temp_resources.mem_head), 0x100000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (mem_node) { - // First use the temporary node to store information for the board + /* First use the temporary node to store + * information for the board */ hold_mem_node->length = mem_node->base - hold_mem_node->base; if (hold_mem_node->length) { hold_mem_node->next = func->mem_head; func->mem_head = hold_mem_node; - // configure end address + /* configure end address */ temp_word = (mem_node->base - 1) >> 16; rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); - // Return unused resources to the pool + /* Return unused resources to the pool */ return_resource(&(resources->mem_head), mem_node); } else { - // it doesn't need any Mem + /* it doesn't need any Mem */ temp_word = 0x0000; rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); @@ -2841,22 +2826,22 @@ kfree(hold_mem_node); } } else { - // it used most of the range + /* it used most of the range */ hold_mem_node->next = func->mem_head; func->mem_head = hold_mem_node; } } else if (hold_mem_node) { - // it used the whole range + /* it used the whole range */ hold_mem_node->next = func->mem_head; func->mem_head = hold_mem_node; } - // If we have prefetchable memory space available and there is some - // left at the end, return the unused portion + /* If we have prefetchable memory space available and there + * is some left at the end, return the unused portion */ if (hold_p_mem_node && temp_resources.p_mem_head) { p_mem_node = do_pre_bridge_resource_split(&(temp_resources.p_mem_head), &hold_p_mem_node, 0x100000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (p_mem_node) { hold_p_mem_node->base = p_mem_node->base + p_mem_node->length; @@ -2868,12 +2853,13 @@ p_mem_node = do_bridge_resource_split(&(temp_resources.p_mem_head), 0x100000); - // Check if we were able to split something off + /* Check if we were able to split something off */ if (p_mem_node) { - // First use the temporary node to store information for the board + /* First use the temporary node to store + * information for the board */ hold_p_mem_node->length = p_mem_node->base - hold_p_mem_node->base; - // If we used any, add it to the board's list + /* If we used any, add it to the board's list */ if (hold_p_mem_node->length) { hold_p_mem_node->next = func->p_mem_head; func->p_mem_head = hold_p_mem_node; @@ -2883,7 +2869,7 @@ return_resource(&(resources->p_mem_head), p_mem_node); } else { - // it doesn't need any PMem + /* it doesn't need any PMem */ temp_word = 0x0000; rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); @@ -2891,35 +2877,42 @@ kfree(hold_p_mem_node); } } else { - // it used the most of the range + /* it used the most of the range */ hold_p_mem_node->next = func->p_mem_head; func->p_mem_head = hold_p_mem_node; } } else if (hold_p_mem_node) { - // it used the whole range + /* it used the whole range */ hold_p_mem_node->next = func->p_mem_head; func->p_mem_head = hold_p_mem_node; } - // We should be configuring an IRQ and the bridge's base address - // registers if it needs them. Although we have never seen such - // a device - - // enable card - command = 0x0157; // = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR + /* We should be configuring an IRQ and the bridge's base address + * registers if it needs them. Although we have never seen such + * a device */ + + /* enable card */ + command = 0x0157; /* = PCI_COMMAND_IO | + * PCI_COMMAND_MEMORY | + * PCI_COMMAND_MASTER | + * PCI_COMMAND_INVALIDATE | + * PCI_COMMAND_PARITY | + * PCI_COMMAND_SERR */ rc = pci_bus_write_config_word (pci_bus, devfn, PCI_COMMAND, command); - // set Bridge Control Register - command = 0x07; // = PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR | PCI_BRIDGE_CTL_NO_ISA + /* set Bridge Control Register */ + command = 0x07; /* = PCI_BRIDGE_CTL_PARITY | + * PCI_BRIDGE_CTL_SERR | + * PCI_BRIDGE_CTL_NO_ISA */ rc = pci_bus_write_config_word (pci_bus, devfn, PCI_BRIDGE_CONTROL, command); } else if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_NORMAL) { - // Standard device + /* Standard device */ rc = pci_bus_read_config_byte (pci_bus, devfn, 0x0B, &class_code); if (class_code == PCI_BASE_CLASS_DISPLAY) { - // Display (video) adapter (not supported) - return(DEVICE_TYPE_NOT_SUPPORTED); + /* Display (video) adapter (not supported) */ + return DEVICE_TYPE_NOT_SUPPORTED; } - // Figure out IO and memory needs + /* Figure out IO and memory needs */ for (cloop = 0x10; cloop <= 0x24; cloop += 4) { temp_register = 0xFFFFFFFF; @@ -2929,11 +2922,11 @@ rc = pci_bus_read_config_dword (pci_bus, devfn, cloop, &temp_register); dbg("CND: base = 0x%x\n", temp_register); - if (temp_register) { // If this register is implemented + if (temp_register) { /* If this register is implemented */ if ((temp_register & 0x03L) == 0x01) { - // Map IO + /* Map IO */ - // set base = amount of IO space + /* set base = amount of IO space */ base = temp_register & 0xFFFFFFFC; base = ~base + 1; @@ -2943,7 +2936,7 @@ io_node->base, io_node->length, io_node->next); dbg("func (%p) io_head (%p)\n", func, func->io_head); - // allocate the resource to the board + /* allocate the resource to the board */ if (io_node) { base = io_node->base; @@ -2952,14 +2945,14 @@ } else return -ENOMEM; } else if ((temp_register & 0x0BL) == 0x08) { - // Map prefetchable memory + /* Map prefetchable memory */ base = temp_register & 0xFFFFFFF0; base = ~base + 1; dbg("CND: length = 0x%x\n", base); p_mem_node = get_resource(&(resources->p_mem_head), base); - // allocate the resource to the board + /* allocate the resource to the board */ if (p_mem_node) { base = p_mem_node->base; @@ -2968,14 +2961,14 @@ } else return -ENOMEM; } else if ((temp_register & 0x0BL) == 0x00) { - // Map memory + /* Map memory */ base = temp_register & 0xFFFFFFF0; base = ~base + 1; dbg("CND: length = 0x%x\n", base); mem_node = get_resource(&(resources->mem_head), base); - // allocate the resource to the board + /* allocate the resource to the board */ if (mem_node) { base = mem_node->base; @@ -2984,14 +2977,14 @@ } else return -ENOMEM; } else if ((temp_register & 0x0BL) == 0x04) { - // Map memory + /* Map memory */ base = temp_register & 0xFFFFFFF0; base = ~base + 1; dbg("CND: length = 0x%x\n", base); mem_node = get_resource(&(resources->mem_head), base); - // allocate the resource to the board + /* allocate the resource to the board */ if (mem_node) { base = mem_node->base; @@ -3000,42 +2993,44 @@ } else return -ENOMEM; } else if ((temp_register & 0x0BL) == 0x06) { - // Those bits are reserved, we can't handle this - return(1); + /* Those bits are reserved, we can't handle this */ + return 1; } else { - // Requesting space below 1M - return(NOT_ENOUGH_RESOURCES); + /* Requesting space below 1M */ + return NOT_ENOUGH_RESOURCES; } - rc = pci_bus_write_config_dword (pci_bus, devfn, cloop, base); + rc = pci_bus_write_config_dword(pci_bus, devfn, cloop, base); - // Check for 64-bit base + /* Check for 64-bit base */ if ((temp_register & 0x07L) == 0x04) { cloop += 4; - // Upper 32 bits of address always zero on today's systems - // FIXME this is probably not true on Alpha and ia64??? + /* Upper 32 bits of address always zero + * on today's systems */ + /* FIXME this is probably not true on + * Alpha and ia64??? */ base = 0; - rc = pci_bus_write_config_dword (pci_bus, devfn, cloop, base); + rc = pci_bus_write_config_dword(pci_bus, devfn, cloop, base); } } - } // End of base register loop + } /* End of base register loop */ if (cpqhp_legacy_mode) { - // Figure out which interrupt pin this function uses + /* Figure out which interrupt pin this function uses */ rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_INTERRUPT_PIN, &temp_byte); - // If this function needs an interrupt and we are behind a bridge - // and the pin is tied to something that's alread mapped, - // set this one the same + /* If this function needs an interrupt and we are behind + * a bridge and the pin is tied to something that's + * alread mapped, set this one the same */ if (temp_byte && resources->irqs && (resources->irqs->valid_INT & (0x01 << ((temp_byte + resources->irqs->barber_pole - 1) & 0x03)))) { - // We have to share with something already set up + /* We have to share with something already set up */ IRQ = resources->irqs->interrupt[(temp_byte + resources->irqs->barber_pole - 1) & 0x03]; } else { - // Program IRQ based on card type + /* Program IRQ based on card type */ rc = pci_bus_read_config_byte (pci_bus, devfn, 0x0B, &class_code); if (class_code == PCI_BASE_CLASS_STORAGE) { @@ -3045,43 +3040,59 @@ } } - // IRQ Line + /* IRQ Line */ rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_INTERRUPT_LINE, IRQ); } if (!behind_bridge) { rc = cpqhp_set_irq(func->bus, func->device, temp_byte + 0x09, IRQ); if (rc) - return(1); + return 1; } else { - //TBD - this code may also belong in the other clause of this If statement + /* TBD - this code may also belong in the other clause + * of this If statement */ resources->irqs->interrupt[(temp_byte + resources->irqs->barber_pole - 1) & 0x03] = IRQ; resources->irqs->valid_INT |= 0x01 << (temp_byte + resources->irqs->barber_pole - 1) & 0x03; } - // Latency Timer + /* Latency Timer */ temp_byte = 0x40; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_LATENCY_TIMER, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, + PCI_LATENCY_TIMER, temp_byte); - // Cache Line size + /* Cache Line size */ temp_byte = 0x08; - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_CACHE_LINE_SIZE, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, + PCI_CACHE_LINE_SIZE, temp_byte); - // disable ROM base Address + /* disable ROM base Address */ temp_dword = 0x00L; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_ROM_ADDRESS, temp_dword); + rc = pci_bus_write_config_word(pci_bus, devfn, + PCI_ROM_ADDRESS, temp_dword); - // enable card - temp_word = 0x0157; // = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_COMMAND, temp_word); - } // End of Not-A-Bridge else - else { - // It's some strange type of PCI adapter (Cardbus?) - return(DEVICE_TYPE_NOT_SUPPORTED); + /* enable card */ + temp_word = 0x0157; /* = PCI_COMMAND_IO | + * PCI_COMMAND_MEMORY | + * PCI_COMMAND_MASTER | + * PCI_COMMAND_INVALIDATE | + * PCI_COMMAND_PARITY | + * PCI_COMMAND_SERR */ + rc = pci_bus_write_config_word (pci_bus, devfn, + PCI_COMMAND, temp_word); + } else { /* End of Not-A-Bridge else */ + /* It's some strange type of PCI adapter (Cardbus?) */ + return DEVICE_TYPE_NOT_SUPPORTED; } func->configured = 1; return 0; -} +free_and_out: + cpqhp_destroy_resource_list (&temp_resources); + return_resource(&(resources-> bus_head), hold_bus_node); + return_resource(&(resources-> io_head), hold_IO_node); + return_resource(&(resources-> mem_head), hold_mem_node); + return_resource(&(resources-> p_mem_head), hold_p_mem_node); + return rc; +} diff -Nru a/drivers/pci/hotplug/cpqphp_pci.c b/drivers/pci/hotplug/cpqphp_pci.c --- a/drivers/pci/hotplug/cpqphp_pci.c Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/cpqphp_pci.c Tue May 18 23:38:09 2004 @@ -722,23 +722,23 @@ devfn = PCI_DEVFN(func->device, func->function); // Save the command register - pci_bus_read_config_word (pci_bus, devfn, PCI_COMMAND, &save_command); + pci_bus_read_config_word(pci_bus, devfn, PCI_COMMAND, &save_command); // disable card command = 0x00; - pci_bus_write_config_word (pci_bus, devfn, PCI_COMMAND, command); + pci_bus_write_config_word(pci_bus, devfn, PCI_COMMAND, command); // Check for Bridge - pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &header_type); + pci_bus_read_config_byte(pci_bus, devfn, PCI_HEADER_TYPE, &header_type); if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { // PCI-PCI Bridge // Clear Bridge Control Register command = 0x00; - pci_bus_write_config_word (pci_bus, devfn, PCI_BRIDGE_CONTROL, command); - pci_bus_read_config_byte (pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); - pci_bus_read_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); + pci_bus_write_config_word(pci_bus, devfn, PCI_BRIDGE_CONTROL, command); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); - bus_node =(struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + bus_node = kmalloc(sizeof(*bus_node), GFP_KERNEL); if (!bus_node) return -ENOMEM; @@ -749,11 +749,11 @@ func->bus_head = bus_node; // Save IO base and Limit registers - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_BASE, &b_base); - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_LIMIT, &b_length); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_BASE, &b_base); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_LIMIT, &b_length); if ((b_base <= b_length) && (save_command & 0x01)) { - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(*io_node), GFP_KERNEL); if (!io_node) return -ENOMEM; @@ -765,11 +765,11 @@ } // Save memory base and Limit registers - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (save_command & 0x02)) { - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(*mem_node), GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -781,11 +781,11 @@ } // Save prefetchable memory base and Limit registers - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (save_command & 0x02)) { - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(*p_mem_node), GFP_KERNEL); if (!p_mem_node) return -ENOMEM; @@ -800,8 +800,8 @@ pci_bus_read_config_dword (pci_bus, devfn, cloop, &save_base); temp_register = 0xFFFFFFFF; - pci_bus_write_config_dword (pci_bus, devfn, cloop, temp_register); - pci_bus_read_config_dword (pci_bus, devfn, cloop, &base); + pci_bus_write_config_dword(pci_bus, devfn, cloop, temp_register); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &base); temp_register = base; @@ -813,7 +813,8 @@ temp_register = base & 0xFFFFFFFE; temp_register = (~temp_register) + 1; - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(*io_node), + GFP_KERNEL); if (!io_node) return -ENOMEM; @@ -830,7 +831,8 @@ temp_register = base & 0xFFFFFFF0; temp_register = (~temp_register) + 1; - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(*p_mem_node), + GFP_KERNEL); if (!p_mem_node) return -ENOMEM; @@ -846,7 +848,8 @@ temp_register = base & 0xFFFFFFF0; temp_register = (~temp_register) + 1; - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(*mem_node), + GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -862,11 +865,11 @@ } else if ((header_type & 0x7F) == 0x00) { // Standard header // Figure out IO and memory base lengths for (cloop = 0x10; cloop <= 0x24; cloop += 4) { - pci_bus_read_config_dword (pci_bus, devfn, cloop, &save_base); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &save_base); temp_register = 0xFFFFFFFF; - pci_bus_write_config_dword (pci_bus, devfn, cloop, temp_register); - pci_bus_read_config_dword (pci_bus, devfn, cloop, &base); + pci_bus_write_config_dword(pci_bus, devfn, cloop, temp_register); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &base); temp_register = base; @@ -878,7 +881,8 @@ temp_register = base & 0xFFFFFFFE; temp_register = (~temp_register) + 1; - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(*io_node), + GFP_KERNEL); if (!io_node) return -ENOMEM; @@ -894,7 +898,8 @@ temp_register = base & 0xFFFFFFF0; temp_register = (~temp_register) + 1; - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(*p_mem_node), + GFP_KERNEL); if (!p_mem_node) return -ENOMEM; @@ -910,7 +915,8 @@ temp_register = base & 0xFFFFFFF0; temp_register = (~temp_register) + 1; - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(*mem_node), + GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -1293,14 +1299,15 @@ temp_dword = io_base + io_length; if ((io_base) && (temp_dword < 0x10000)) { - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(*io_node), GFP_KERNEL); if (!io_node) return -ENOMEM; io_node->base = io_base; io_node->length = io_length; - dbg("found io_node(base, length) = %x, %x\n", io_node->base, io_node->length); + dbg("found io_node(base, length) = %x, %x\n", + io_node->base, io_node->length); dbg("populated slot =%d \n", populated_slot); if (!populated_slot) { io_node->next = ctrl->io_head; @@ -1314,7 +1321,7 @@ // If we've got a valid memory base, use it temp_dword = mem_base + mem_length; if ((mem_base) && (temp_dword < 0x10000)) { - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(*mem_node), GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -1322,7 +1329,8 @@ mem_node->length = mem_length << 16; - dbg("found mem_node(base, length) = %x, %x\n", mem_node->base, mem_node->length); + dbg("found mem_node(base, length) = %x, %x\n", + mem_node->base, mem_node->length); dbg("populated slot =%d \n", populated_slot); if (!populated_slot) { mem_node->next = ctrl->mem_head; @@ -1337,14 +1345,15 @@ // the base + length isn't greater than 0xFFFF temp_dword = pre_mem_base + pre_mem_length; if ((pre_mem_base) && (temp_dword < 0x10000)) { - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(*p_mem_node), GFP_KERNEL); if (!p_mem_node) return -ENOMEM; p_mem_node->base = pre_mem_base << 16; p_mem_node->length = pre_mem_length << 16; - dbg("found p_mem_node(base, length) = %x, %x\n", p_mem_node->base, p_mem_node->length); + dbg("found p_mem_node(base, length) = %x, %x\n", + p_mem_node->base, p_mem_node->length); dbg("populated slot =%d \n", populated_slot); if (!populated_slot) { @@ -1360,13 +1369,14 @@ // The second condition is to ignore bus numbers on // populated slots that don't have PCI-PCI bridges if (secondary_bus && (secondary_bus != primary_bus)) { - bus_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + bus_node = kmalloc(sizeof(*bus_node), GFP_KERNEL); if (!bus_node) return -ENOMEM; bus_node->base = secondary_bus; bus_node->length = max_bus - secondary_bus + 1; - dbg("found bus_node(base, length) = %x, %x\n", bus_node->base, bus_node->length); + dbg("found bus_node(base, length) = %x, %x\n", + bus_node->base, bus_node->length); dbg("populated slot =%d \n", populated_slot); if (!populated_slot) { bus_node->next = ctrl->bus_head; diff -Nru a/drivers/pci/hotplug/ibmphp.h b/drivers/pci/hotplug/ibmphp.h --- a/drivers/pci/hotplug/ibmphp.h Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/ibmphp.h Tue May 18 23:38:05 2004 @@ -271,7 +271,6 @@ ***********************************************************/ extern struct list_head ibmphp_ebda_pci_rsrc_head; extern struct list_head ibmphp_slot_head; -extern struct list_head ibmphp_res_head; /*********************************************************** * FUNCTION PROTOTYPES * ***********************************************************/ @@ -754,7 +753,6 @@ /* Functions */ extern int ibmphp_init_devno (struct slot **); /* This function is called from EBDA, so we need it not be static */ -extern int ibmphp_disable_slot (struct hotplug_slot *); /* This function is called from HPC, so we need it to not be static */ extern int ibmphp_do_disable_slot (struct slot *slot_cur); extern int ibmphp_update_slot_info (struct slot *); /* This function is called from HPC, so we need it to not be be static */ extern int ibmphp_configure_card (struct pci_func *, u8); diff -Nru a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c --- a/drivers/pci/hotplug/ibmphp_core.c Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/ibmphp_core.c Tue May 18 23:38:09 2004 @@ -1146,7 +1146,7 @@ * OUTPUT: SUCCESS 0 ; FAILURE: UNCONFIGURE , VALIDATE * DISABLE POWER , * **************************************************************/ -int ibmphp_disable_slot (struct hotplug_slot *hotplug_slot) +static int ibmphp_disable_slot (struct hotplug_slot *hotplug_slot) { struct slot *slot = hotplug_slot->private; int rc; diff -Nru a/drivers/pci/hotplug/ibmphp_res.c b/drivers/pci/hotplug/ibmphp_res.c --- a/drivers/pci/hotplug/ibmphp_res.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/ibmphp_res.c Tue May 18 23:38:08 2004 @@ -45,7 +45,6 @@ static struct bus_node *find_bus_wprev (u8, struct bus_node **, u8); static LIST_HEAD(gbuses); -LIST_HEAD(ibmphp_res_head); static struct bus_node * __init alloc_error_bus (struct ebda_pci_rsrc * curr, u8 busno, int flag) { diff -Nru a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c --- a/drivers/pci/hotplug/pci_hotplug_core.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/pci_hotplug_core.c Tue May 18 23:38:08 2004 @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -45,11 +46,7 @@ #include "pci_hotplug.h" -#if !defined(CONFIG_HOTPLUG_PCI_MODULE) - #define MY_NAME "pci_hotplug" -#else - #define MY_NAME THIS_MODULE->name -#endif +#define MY_NAME "pci_hotplug" #define dbg(fmt, arg...) do { if (debug) printk(KERN_DEBUG "%s: %s: " fmt , MY_NAME , __FUNCTION__ , ## arg); } while (0) #define err(format, arg...) printk(KERN_ERR "%s: " format , MY_NAME , ## arg) @@ -704,7 +701,7 @@ MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, 644); MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); EXPORT_SYMBOL_GPL(pci_hotplug_slots_subsys); diff -Nru a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h --- a/drivers/pci/hotplug/pciehp.h Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/pciehp.h Tue May 18 23:38:08 2004 @@ -35,11 +35,7 @@ #include #include "pci_hotplug.h" -#if !defined(CONFIG_HOTPLUG_PCI_PCIE_MODULE) - #define MY_NAME "pciehp" -#else - #define MY_NAME THIS_MODULE->name -#endif +#define MY_NAME "pciehp" extern int pciehp_poll_mode; extern int pciehp_poll_time; @@ -72,9 +68,7 @@ struct pci_dev* pci_dev; }; -#define SLOT_MAGIC 0x67267321 struct slot { - u32 magic; struct slot *next; u8 bus; u8 device; @@ -108,9 +102,9 @@ struct controller { struct controller *next; struct semaphore crit_sect; /* critical section semaphore */ - void * hpc_ctlr_handle; /* HPC controller handle */ + void *hpc_ctlr_handle; /* HPC controller handle */ int num_slots; /* Number of slots on ctlr */ - int slot_num_inc; /* 1 or -1 */ + int slot_num_inc; /* 1 or -1 */ struct pci_resource *mem_head; struct pci_resource *p_mem_head; struct pci_resource *io_head; @@ -191,7 +185,7 @@ #define msg_initialization_err "Initialization failure, error=%d\n" #define msg_HPC_rev_error "Unsupported revision of the PCI hot plug controller found.\n" #define msg_HPC_non_pcie "The PCI hot plug controller is not supported by this driver.\n" -#define msg_HPC_not_supported "This system is not supported by this version of pciephd mdoule. Upgrade to a newer version of pciehpd\n" +#define msg_HPC_not_supported "This system is not supported by this version of pciephd module. Upgrade to a newer version of pciehpd\n" #define msg_unable_to_save "Unable to store PCI hot plug add resource information. This system must be rebooted before adding any PCI devices.\n" #define msg_button_on "PCI slot #%d - powering on due to button press.\n" #define msg_button_off "PCI slot #%d - powering off due to button press.\n" @@ -202,7 +196,6 @@ extern void pciehp_create_ctrl_files (struct controller *ctrl); /* controller functions */ -extern void pciehp_pushbutton_thread (unsigned long event_pointer); extern int pciehprm_find_available_resources (struct controller *ctrl); extern int pciehp_event_start_thread (void); extern void pciehp_event_stop_thread (void); @@ -239,47 +232,10 @@ /* Inline functions */ - -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int slot_paranoia_check (struct slot *slot, const char *function) -{ - if (!slot) { - dbg("%s - slot == NULL", function); - return -1; - } - if (slot->magic != SLOT_MAGIC) { - dbg("%s - bad magic number for slot", function); - return -1; - } - if (!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!", function); - return -1; - } - return 0; -} - -static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function) -{ - struct slot *slot; - - if (!hotplug_slot) { - dbg("%s - hotplug_slot == NULL\n", function); - return NULL; - } - - slot = (struct slot *)hotplug_slot->private; - if (slot_paranoia_check (slot, function)) - return NULL; - return slot; -} - -static inline struct slot *pciehp_find_slot (struct controller *ctrl, u8 device) +static inline struct slot *pciehp_find_slot(struct controller *ctrl, u8 device) { struct slot *p_slot, *tmp_slot = NULL; - if (!ctrl) - return NULL; - p_slot = ctrl->slot; dbg("p_slot = %p\n", p_slot); @@ -294,10 +250,10 @@ p_slot = tmp_slot; } - return (p_slot); + return p_slot; } -static inline int wait_for_ctrl_irq (struct controller *ctrl) +static inline int wait_for_ctrl_irq(struct controller *ctrl) { int retval = 0; @@ -345,7 +301,7 @@ typedef u8(*php_intr_callback_t) (unsigned int change_id, void *instance_id); -int pcie_init( struct controller *ctrl, struct pci_dev *pdev, +int pcie_init(struct controller *ctrl, struct pci_dev *pdev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, @@ -353,7 +309,7 @@ /* This has no meaning for PCI Express, as there is only 1 slot per port */ -int pcie_get_ctlr_slot_config( struct controller *ctrl, +int pcie_get_ctlr_slot_config(struct controller *ctrl, int *num_ctlr_slots, int *first_device_num, int *physical_slot_num, @@ -361,12 +317,12 @@ int *flags); struct hpc_ops { - int (*power_on_slot ) (struct slot *slot); - int (*power_off_slot ) (struct slot *slot); - int (*get_power_status) (struct slot *slot, u8 *status); + int (*power_on_slot) (struct slot *slot); + int (*power_off_slot) (struct slot *slot); + int (*get_power_status) (struct slot *slot, u8 *status); int (*get_attention_status) (struct slot *slot, u8 *status); int (*set_attention_status) (struct slot *slot, u8 status); - int (*get_latch_status) (struct slot *slot, u8 *status); + int (*get_latch_status) (struct slot *slot, u8 *status); int (*get_adapter_status) (struct slot *slot, u8 *status); int (*get_max_bus_speed) (struct slot *slot, enum pci_bus_speed *speed); @@ -380,7 +336,7 @@ void (*green_led_off) (struct slot *slot); void (*green_led_blink) (struct slot *slot); void (*release_ctlr) (struct controller *ctrl); - int (*check_lnk_status) (struct controller *ctrl); + int (*check_lnk_status) (struct controller *ctrl); }; #endif /* _PCIEHP_H */ diff -Nru a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c --- a/drivers/pci/hotplug/pciehp_core.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/pciehp_core.c Tue May 18 23:38:05 2004 @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -45,7 +46,7 @@ int pciehp_debug; int pciehp_poll_mode; int pciehp_poll_time; -struct controller *pciehp_ctrl_list; /* = NULL */ +struct controller *pciehp_ctrl_list; struct pci_func *pciehp_slot_list[256]; #define DRIVER_VERSION "0.4" @@ -56,9 +57,9 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(pciehp_debug, "i"); -MODULE_PARM(pciehp_poll_mode, "i"); -MODULE_PARM(pciehp_poll_time, "i"); +module_param(pciehp_debug, bool, 644); +module_param(pciehp_poll_mode, bool, 644); +module_param(pciehp_poll_time, int, 644); MODULE_PARM_DESC(pciehp_debug, "Debugging mode enabled or not"); MODULE_PARM_DESC(pciehp_poll_mode, "Using polling mechanism for hot-plug events or not"); MODULE_PARM_DESC(pciehp_poll_time, "Polling mechanism frequency, in seconds"); @@ -69,7 +70,6 @@ static int set_attention_status (struct hotplug_slot *slot, u8 value); static int enable_slot (struct hotplug_slot *slot); static int disable_slot (struct hotplug_slot *slot); -static int hardware_test (struct hotplug_slot *slot, u32 value); static int get_power_status (struct hotplug_slot *slot, u8 *value); static int get_attention_status (struct hotplug_slot *slot, u8 *value); static int get_latch_status (struct hotplug_slot *slot, u8 *value); @@ -82,7 +82,6 @@ .set_attention_status = set_attention_status, .enable_slot = enable_slot, .disable_slot = disable_slot, - .hardware_test = hardware_test, .get_power_status = get_power_status, .get_attention_status = get_attention_status, .get_latch_status = get_latch_status, @@ -97,7 +96,7 @@ u8 number_of_slots; u8 slot_device; u32 slot_number; - int result; + int result = -ENOMEM; dbg("%s\n",__FUNCTION__); @@ -106,34 +105,30 @@ slot_number = ctrl->first_slot; while (number_of_slots) { - new_slot = (struct slot *) kmalloc(sizeof(struct slot), GFP_KERNEL); + new_slot = kmalloc(sizeof(*new_slot), GFP_KERNEL); if (!new_slot) - return -ENOMEM; + goto error; memset(new_slot, 0, sizeof(struct slot)); - new_slot->hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL); - if (!new_slot->hotplug_slot) { - kfree (new_slot); - return -ENOMEM; - } - memset(new_slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); - - new_slot->hotplug_slot->info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!new_slot->hotplug_slot->info) { - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } - memset(new_slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); - new_slot->hotplug_slot->name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL); - if (!new_slot->hotplug_slot->name) { - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } + new_slot->hotplug_slot = + kmalloc(sizeof(*(new_slot->hotplug_slot)), + GFP_KERNEL); + if (!new_slot->hotplug_slot) + goto error_slot; + memset(new_slot->hotplug_slot, 0, sizeof(struct hotplug_slot)); + + new_slot->hotplug_slot->info = + kmalloc(sizeof(*(new_slot->hotplug_slot->info)), + GFP_KERNEL); + if (!new_slot->hotplug_slot->info) + goto error_hpslot; + memset(new_slot->hotplug_slot->info, 0, + sizeof(struct hotplug_slot_info)); + new_slot->hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, + GFP_KERNEL); + if (!new_slot->hotplug_slot->name) + goto error_info; - new_slot->magic = SLOT_MAGIC; new_slot->ctrl = ctrl; new_slot->bus = ctrl->slot_bus; new_slot->device = slot_device; @@ -157,11 +152,7 @@ result = pci_hp_register (new_slot->hotplug_slot); if (result) { err ("pci_hp_register failed with error %d\n", result); - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot->name); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return result; + goto error_name; } new_slot->next = ctrl->slot; @@ -172,7 +163,18 @@ slot_number += ctrl->slot_num_inc; } - return(0); + return 0; + +error_name: + kfree(new_slot->hotplug_slot->name); +error_info: + kfree(new_slot->hotplug_slot->info); +error_hpslot: + kfree(new_slot->hotplug_slot); +error_slot: + kfree(new_slot); +error: + return result; } @@ -228,13 +230,10 @@ /* * set_attention_status - Turns the Amber LED for a slot on, off or blink */ -static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status) +static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; - if (slot == NULL) - return -ENODEV; - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); hotplug_slot->info->attention_status = status; @@ -244,12 +243,9 @@ } -static int enable_slot (struct hotplug_slot *hotplug_slot) +static int enable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -257,33 +253,20 @@ } -static int disable_slot (struct hotplug_slot *hotplug_slot) +static int disable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); return pciehp_disable_slot(slot); } - -static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value) +static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value) { - return 0; -} - - -static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) -{ - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_power_status(slot, value); @@ -293,14 +276,11 @@ return 0; } -static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_attention_status(slot, value); @@ -310,14 +290,11 @@ return 0; } -static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_latch_status(slot, value); @@ -327,31 +304,24 @@ return 0; } -static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_adapter_status(slot, value); - if (retval < 0) *value = hotplug_slot->info->adapter_status; return 0; } -static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) +static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -362,13 +332,10 @@ return 0; } -static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) +static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -388,7 +355,7 @@ int num_ctlr_slots; /* number of slots supported by this HPC */ u8 value; - ctrl = (struct controller *) kmalloc(sizeof(struct controller), GFP_KERNEL); + ctrl = kmalloc(sizeof(*ctrl), GFP_KERNEL); if (!ctrl) { err("%s : out of memory\n", __FUNCTION__); goto err_out_none; @@ -411,7 +378,7 @@ pci_set_drvdata(pdev, ctrl); - ctrl->pci_bus = kmalloc (sizeof (*ctrl->pci_bus), GFP_KERNEL); + ctrl->pci_bus = kmalloc(sizeof(*ctrl->pci_bus), GFP_KERNEL); if (!ctrl->pci_bus) { err("%s: out of memory\n", __FUNCTION__); rc = -ENOMEM; @@ -535,49 +502,35 @@ return retval; } +static inline void __exit +free_pciehp_res(struct pci_resource *res) +{ + struct pci_resource *tres; + + while (res) { + tres = res; + res = res->next; + kfree(tres); + } +} -static void unload_pciehpd(void) +static void __exit unload_pciehpd(void) { struct pci_func *next; struct pci_func *TempSlot; int loop; struct controller *ctrl; struct controller *tctrl; - struct pci_resource *res; - struct pci_resource *tres; ctrl = pciehp_ctrl_list; while (ctrl) { cleanup_slots(ctrl); - res = ctrl->io_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->p_mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->bus_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + free_pciehp_res(ctrl->io_head); + free_pciehp_res(ctrl->mem_head); + free_pciehp_res(ctrl->p_mem_head); + free_pciehp_res(ctrl->bus_head); kfree (ctrl->pci_bus); @@ -592,33 +545,10 @@ for (loop = 0; loop < 256; loop++) { next = pciehp_slot_list[loop]; while (next != NULL) { - res = next->io_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->p_mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->bus_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + free_pciehp_res(next->io_head); + free_pciehp_res(next->mem_head); + free_pciehp_res(next->p_mem_head); + free_pciehp_res(next->bus_head); TempSlot = next; next = next->next; @@ -700,8 +630,5 @@ info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n"); } - module_init(pcied_init); module_exit(pcied_cleanup); - - diff -Nru a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c --- a/drivers/pci/hotplug/pciehp_ctrl.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/pciehp_ctrl.c Tue May 18 23:38:05 2004 @@ -251,12 +251,10 @@ } -/* - * sort_by_size - * - * Sorts nodes on the list by their length. - * Smallest first. +/** + * sort_by_size: sort nodes by their length, smallest first. * + * @head: list to sort */ static int sort_by_size(struct pci_resource **head) { @@ -265,10 +263,10 @@ int out_of_order = 1; if (!(*head)) - return(1); + return 1; if (!((*head)->next)) - return(0); + return 0; while (out_of_order) { out_of_order = 0; @@ -298,7 +296,7 @@ } } /* End of out_of_order loop */ - return(0); + return 0; } @@ -316,10 +314,10 @@ int out_of_order = 1; if (!(*head)) - return(1); + return 1; if (!((*head)->next)) - return(0); + return 0; while (out_of_order) { out_of_order = 0; @@ -349,17 +347,18 @@ } } /* End of out_of_order loop */ - return(0); + return 0; } -/* - * do_pre_bridge_resource_split - * - * Returns zero or one node of resources that aren't in use +/** + * do_pre_bridge_resource_split: return one unused resource node + * @head: list to scan * */ -static struct pci_resource *do_pre_bridge_resource_split (struct pci_resource **head, struct pci_resource **orig_head, u32 alignment) +static struct pci_resource * +do_pre_bridge_resource_split(struct pci_resource **head, + struct pci_resource **orig_head, u32 alignment) { struct pci_resource *prevnode = NULL; struct pci_resource *node; @@ -369,18 +368,18 @@ dbg("do_pre_bridge_resource_split\n"); if (!(*head) || !(*orig_head)) - return(NULL); + return NULL; rc = pciehp_resource_sort_and_combine(head); if (rc) - return(NULL); + return NULL; if ((*head)->base != (*orig_head)->base) - return(NULL); + return NULL; if ((*head)->length == (*orig_head)->length) - return(NULL); + return NULL; /* If we got here, there the bridge requires some of the resource, but @@ -392,10 +391,10 @@ /* this one isn't an aligned length, so we'll make a new entry * and split it up. */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; temp_dword = (node->length | (alignment-1)) + 1 - alignment; @@ -410,34 +409,32 @@ split_node->next = node; } - if (node->length < alignment) { - return(NULL); - } + if (node->length < alignment) + return NULL; /* Now unlink it */ if (*head == node) { *head = node->next; - node->next = NULL; } else { prevnode = *head; while (prevnode->next != node) prevnode = prevnode->next; prevnode->next = node->next; - node->next = NULL; } + node->next = NULL; - return(node); + return node; } -/* - * do_bridge_resource_split - * - * Returns zero or one node of resources that aren't in use +/** + * do_bridge_resource_split: return one unused resource node + * @head: list to scan * */ -static struct pci_resource *do_bridge_resource_split (struct pci_resource **head, u32 alignment) +static struct pci_resource * +do_bridge_resource_split(struct pci_resource **head, u32 alignment) { struct pci_resource *prevnode = NULL; struct pci_resource *node; @@ -445,12 +442,12 @@ u32 temp_dword; if (!(*head)) - return(NULL); + return NULL; rc = pciehp_resource_sort_and_combine(head); if (rc) - return(NULL); + return NULL; node = *head; @@ -462,7 +459,7 @@ if (node->length < alignment) { kfree(node); - return(NULL); + return NULL; } if (node->base & (alignment - 1)) { @@ -470,7 +467,7 @@ temp_dword = (node->base | (alignment-1)) + 1; if ((node->length - (temp_dword - node->base)) < alignment) { kfree(node); - return(NULL); + return NULL; } node->length -= (temp_dword - node->base); @@ -480,10 +477,10 @@ if (node->length & (alignment - 1)) { /* There's stuff in use after this node */ kfree(node); - return(NULL); + return NULL; } - return(node); + return node; } @@ -497,7 +494,7 @@ * * size must be a power of two. */ -static struct pci_resource *get_io_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size) { struct pci_resource *prevnode; struct pci_resource *node; @@ -505,13 +502,13 @@ u32 temp_dword; if (!(*head)) - return(NULL); + return NULL; if ( pciehp_resource_sort_and_combine(head) ) - return(NULL); + return NULL; if ( sort_by_size(head) ) - return(NULL); + return NULL; for (node = *head; node; node = node->next) { if (node->length < size) @@ -526,10 +523,11 @@ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base; split_node->length = temp_dword - node->base; @@ -545,10 +543,11 @@ if (node->length > size) { /* this one is longer than we need so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base + size; split_node->length = node->length - size; @@ -579,7 +578,7 @@ break; } - return(node); + return node; } @@ -592,7 +591,7 @@ * J.I. modified to put max size limits of; 64M->32M->16M->8M->4M->1M * This is needed to avoid allocating entire ACPI _CRS res to one child bridge/slot. */ -static struct pci_resource *get_max_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_max_resource(struct pci_resource **head, u32 size) { struct pci_resource *max; struct pci_resource *temp; @@ -602,13 +601,13 @@ int i; if (!(*head)) - return(NULL); + return NULL; if (pciehp_resource_sort_and_combine(head)) - return(NULL); + return NULL; if (sort_by_max_size(head)) - return(NULL); + return NULL; for (max = *head;max; max = max->next) { @@ -626,10 +625,11 @@ if ((max->length - (temp_dword - max->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = max->base; split_node->length = temp_dword - max->base; @@ -644,10 +644,11 @@ if ((max->base + max->length) & (size - 1)) { /* this one isn't end aligned properly at the top so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; temp_dword = ((max->base + max->length) & ~(size - 1)); split_node->base = temp_dword; split_node->length = max->length + max->base @@ -665,9 +666,10 @@ for ( i = 0; max_size[i] > size; i++) { if (max->length > max_size[i]) { - split_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - break; /* return (NULL); */ + break; /* return NULL; */ split_node->base = max->base + max_size[i]; split_node->length = max->length - max_size[i]; max->length = max_size[i]; @@ -691,11 +693,11 @@ } max->next = NULL; - return(max); + return max; } /* If we get here, we couldn't find one */ - return(NULL); + return NULL; } @@ -708,7 +710,7 @@ * * size must be a power of two. */ -static struct pci_resource *get_resource (struct pci_resource **head, u32 size) +static struct pci_resource *get_resource(struct pci_resource **head, u32 size) { struct pci_resource *prevnode; struct pci_resource *node; @@ -716,13 +718,13 @@ u32 temp_dword; if (!(*head)) - return(NULL); + return NULL; if ( pciehp_resource_sort_and_combine(head) ) - return(NULL); + return NULL; if ( sort_by_size(head) ) - return(NULL); + return NULL; for (node = *head; node; node = node->next) { dbg("%s: req_size =0x%x node=%p, base=0x%x, length=0x%x\n", @@ -740,10 +742,11 @@ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base; split_node->length = temp_dword - node->base; @@ -760,10 +763,11 @@ dbg("%s: too big\n", __FUNCTION__); /* this one is longer than we need so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!split_node) - return(NULL); + return NULL; split_node->base = node->base + size; split_node->length = node->length - size; @@ -790,7 +794,7 @@ /* Stop looping */ break; } - return(node); + return node; } @@ -812,12 +816,12 @@ dbg("%s: head = %p, *head = %p\n", __FUNCTION__, head, *head); if (!(*head)) - return(1); + return 1; dbg("*head->next = %p\n",(*head)->next); if (!(*head)->next) - return(0); /* only one item on the list, already sorted! */ + return 0; /* only one item on the list, already sorted! */ dbg("*head->base = 0x%x\n",(*head)->base); dbg("*head->next->base = 0x%x\n",(*head)->next->base); @@ -863,7 +867,7 @@ node1 = node1->next; } - return(0); + return 0; } @@ -878,11 +882,10 @@ struct pci_func *new_slot; struct pci_func *next; dbg("%s: busnumber %x\n", __FUNCTION__, busnumber); - new_slot = (struct pci_func *) kmalloc(sizeof(struct pci_func), GFP_KERNEL); + new_slot = kmalloc(sizeof(struct pci_func), GFP_KERNEL); - if (new_slot == NULL) { - return(new_slot); - } + if (new_slot == NULL) + return new_slot; memset(new_slot, 0, sizeof(struct pci_func)); @@ -897,11 +900,11 @@ next = next->next; next->next = new_slot; } - return(new_slot); + return new_slot; } -/* +/** * slot_remove - Removes a node from the linked list of slots. * @old_slot: slot to remove * @@ -912,19 +915,18 @@ struct pci_func *next; if (old_slot == NULL) - return(1); + return 1; next = pciehp_slot_list[old_slot->bus]; - if (next == NULL) { - return(1); - } + if (next == NULL) + return 1; if (next == old_slot) { pciehp_slot_list[old_slot->bus] = old_slot->next; pciehp_destroy_board_resources(old_slot); kfree(old_slot); - return(0); + return 0; } while ((next->next != old_slot) && (next->next != NULL)) { @@ -935,9 +937,9 @@ next->next = old_slot->next; pciehp_destroy_board_resources(old_slot); kfree(old_slot); - return(0); + return 0; } else - return(2); + return 2; } @@ -954,7 +956,7 @@ struct pci_func *next; if (bridge == NULL) - return(1); + return 1; secondaryBus = (bridge->config_space[0x06] >> 8) & 0xFF; subordinateBus = (bridge->config_space[0x06] >> 16) & 0xFF; @@ -970,13 +972,13 @@ next = pciehp_slot_list[bridge->bus]; if (next == NULL) { - return(1); + return 1; } if (next == bridge) { pciehp_slot_list[bridge->bus] = bridge->next; kfree(bridge); - return(0); + return 0; } while ((next->next != bridge) && (next->next != NULL)) { @@ -986,9 +988,9 @@ if (next->next == bridge) { next->next = bridge->next; kfree(bridge); - return(0); + return 0; } else - return(2); + return 2; } @@ -1016,7 +1018,7 @@ dbg("%s: func == NULL\n", __FUNCTION__); if ((func == NULL) || ((func->device == device) && (index == 0))) - return(func); + return func; if (func->device == device) found++; @@ -1035,11 +1037,11 @@ if ((found == index) || (func->function == index)) { dbg("%s: Found bus %x dev %x func %x\n", __FUNCTION__, func->bus, func->device, func->function); - return(func); + return func; } } - return(NULL); + return NULL; } static int is_bridge(struct pci_func * func) @@ -1187,7 +1189,7 @@ /* Done with exclusive hardware access */ up(&ctrl->crit_sect); - return(rc); + return rc; } pciehp_save_slot_config(ctrl, func); @@ -1251,7 +1253,7 @@ /* Done with exclusive hardware access */ up(&ctrl->crit_sect); - return(rc); + return rc; } return 0; } @@ -1273,10 +1275,10 @@ struct slot *p_slot; if (func == NULL) - return(1); + return 1; if (pciehp_unconfigure_device(func)) - return(1); + return 1; device = func->device; @@ -1370,7 +1372,7 @@ func = pciehp_slot_create(ctrl->slot_bus); if (func == NULL) { - return(1); + return 1; } func->bus = ctrl->slot_bus; @@ -1385,7 +1387,7 @@ } -static void pushbutton_helper_thread (unsigned long data) +static void pushbutton_helper_thread(unsigned long data) { pushbutton_pending = data; @@ -1393,6 +1395,81 @@ } +/** + * pciehp_pushbutton_thread + * + * Scheduled procedure to handle blocking stuff for the pushbuttons + * Handles all pending events and exits. + * + */ +static void pciehp_pushbutton_thread(unsigned long slot) +{ + struct slot *p_slot = (struct slot *) slot; + u8 getstatus; + int rc; + + pushbutton_pending = 0; + + if (!p_slot) { + dbg("%s: Error! slot NULL\n", __FUNCTION__); + return; + } + + p_slot->hpc_ops->get_power_status(p_slot, &getstatus); + if (getstatus) { + p_slot->state = POWEROFF_STATE; + dbg("In power_down_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); + + if (pciehp_disable_slot(p_slot)) { + /* Wait for exclusive access to hardware */ + down(&p_slot->ctrl->crit_sect); + + /* Turn on the Attention LED */ + rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); + if (rc) { + err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); + return; + } + + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + /* Done with exclusive hardware access */ + up(&p_slot->ctrl->crit_sect); + } + p_slot->state = STATIC_STATE; + } else { + p_slot->state = POWERON_STATE; + dbg("In add_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); + + if (pciehp_enable_slot(p_slot)) { + /* Wait for exclusive access to hardware */ + down(&p_slot->ctrl->crit_sect); + + /* Turn off the green LED */ + rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); + if (rc) { + err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); + return; + } + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + p_slot->hpc_ops->green_led_off(p_slot); + + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + /* Done with exclusive hardware access */ + up(&p_slot->ctrl->crit_sect); + } + p_slot->state = STATIC_STATE; + } + + return; +} + + /* this is the main worker thread */ static int event_thread(void* data) { @@ -1420,7 +1497,7 @@ return 0; } -int pciehp_event_start_thread (void) +int pciehp_event_start_thread(void) { int pid; @@ -1440,7 +1517,7 @@ } -void pciehp_event_stop_thread (void) +void pciehp_event_stop_thread(void) { event_finished = 1; dbg("event_thread finish command given\n"); @@ -1450,13 +1527,13 @@ } -static int update_slot_info (struct slot *slot) +static int update_slot_info(struct slot *slot) { struct hotplug_slot_info *info; /* char buffer[SLOT_NAME_SIZE]; */ int result; - info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); + info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); if (!info) return -ENOMEM; @@ -1603,87 +1680,10 @@ } } /* End of FOR loop */ } - - return; } -/** - * pciehp_pushbutton_thread - * - * Scheduled procedure to handle blocking stuff for the pushbuttons - * Handles all pending events and exits. - * - */ -void pciehp_pushbutton_thread (unsigned long slot) -{ - struct slot *p_slot = (struct slot *) slot; - u8 getstatus; - int rc; - - pushbutton_pending = 0; - - if (!p_slot) { - dbg("%s: Error! slot NULL\n", __FUNCTION__); - return; - } - - p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (getstatus) { - p_slot->state = POWEROFF_STATE; - dbg("In power_down_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); - - if (pciehp_disable_slot(p_slot)) { - /* Wait for exclusive access to hardware */ - down(&p_slot->ctrl->crit_sect); - - /* Turn on the Attention LED */ - rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); - if (rc) { - err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); - return; - } - - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ - up(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } else { - p_slot->state = POWERON_STATE; - dbg("In add_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); - - if (pciehp_enable_slot(p_slot)) { - /* Wait for exclusive access to hardware */ - down(&p_slot->ctrl->crit_sect); - - /* Turn off the green LED */ - rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); - if (rc) { - err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); - return; - } - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - p_slot->hpc_ops->green_led_off(p_slot); - - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ - up(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } - - return; -} - - -int pciehp_enable_slot (struct slot *p_slot) +int pciehp_enable_slot(struct slot *p_slot) { u8 getstatus = 0; int rc; @@ -1692,7 +1692,7 @@ func = pciehp_slot_find(p_slot->bus, p_slot->device, 0); if (!func) { dbg("%s: Error! slot NULL\n", __FUNCTION__); - return (1); + return 1; } /* Check to see if (latch closed, card present, power off) */ @@ -1701,21 +1701,21 @@ if (rc || !getstatus) { info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); if (rc || getstatus) { info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); if (rc || getstatus) { info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } up(&p_slot->ctrl->crit_sect); @@ -1723,7 +1723,7 @@ func = pciehp_slot_create(p_slot->bus); if (func == NULL) - return (1); + return 1; func->bus = p_slot->bus; func->device = p_slot->device; @@ -1746,7 +1746,7 @@ /* Setup slot structure with entry for empty slot */ func = pciehp_slot_create(p_slot->bus); if (func == NULL) - return (1); /* Out of memory */ + return 1; /* Out of memory */ func->bus = p_slot->bus; func->device = p_slot->device; @@ -1767,7 +1767,7 @@ } -int pciehp_disable_slot (struct slot *p_slot) +int pciehp_disable_slot(struct slot *p_slot) { u8 class_code, header_type, BCR; u8 index = 0; @@ -1779,7 +1779,7 @@ struct pci_func *func; if (!p_slot->ctrl) - return (1); + return 1; /* Check to see if (latch closed, card present, power on) */ down(&p_slot->ctrl->crit_sect); @@ -1788,21 +1788,21 @@ if (ret || !getstatus) { info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); if (ret || getstatus) { info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); if (ret || !getstatus) { info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); up(&p_slot->ctrl->crit_sect); - return (0); + return 0; } up(&p_slot->ctrl->crit_sect); @@ -1854,7 +1854,7 @@ if (p_slot) update_slot_info(p_slot); - return(rc); + return rc; } @@ -1869,7 +1869,7 @@ * Returns 0 if success * */ -static u32 configure_new_device (struct controller * ctrl, struct pci_func * func, +static u32 configure_new_device(struct controller * ctrl, struct pci_func * func, u8 behind_bridge, struct resource_lists * resources, u8 bridge_bus, u8 bridge_dev) { u8 temp_byte, function, max_functions, stop_it; @@ -1901,20 +1901,23 @@ function = 0; do { - rc = configure_new_function(ctrl, new_slot, behind_bridge, resources, bridge_bus, bridge_dev); + rc = configure_new_function(ctrl, new_slot, behind_bridge, + resources, bridge_bus, bridge_dev); if (rc) { - dbg("configure_new_function failed %d\n",rc); + dbg("configure_new_function failed: %d\n", rc); index = 0; while (new_slot) { - new_slot = pciehp_slot_find(new_slot->bus, new_slot->device, index++); + new_slot = pciehp_slot_find(new_slot->bus, + new_slot->device, index++); if (new_slot) - pciehp_return_board_resources(new_slot, resources); + pciehp_return_board_resources(new_slot, + resources); } - return(rc); + return rc; } function++; @@ -1936,7 +1939,7 @@ if (new_slot == NULL) { /* Out of memory */ - return(1); + return 1; } new_slot->bus = func->bus; @@ -1950,41 +1953,63 @@ } } while (function < max_functions); - dbg("returning from configure_new_device\n"); + dbg("returning from %s\n", __FUNCTION__); return 0; } - /* * Configuration logic that involves the hotplug data structures and * their bookkeeping */ - /** - * configure_new_function - Configures the PCI header information of one device - * - * @ctrl: pointer to controller structure - * @func: pointer to function structure - * @behind_bridge: 1 if this is a recursive call, 0 if not - * @resources: pointer to set of resource lists - * - * Calls itself recursively for bridged devices. - * Returns 0 if success - * + * configure_bridge: fill bridge's registers, either configure or disable it. */ -static int configure_new_function (struct controller * ctrl, struct pci_func * func, - u8 behind_bridge, struct resource_lists *resources, u8 bridge_bus, u8 bridge_dev) +static int +configure_bridge(struct pci_bus *pci_bus, unsigned int devfn, + struct pci_resource *mem_node, + struct pci_resource **hold_mem_node, + int base_addr, int limit_addr) +{ + u16 temp_word; + u32 rc; + + if (mem_node) { + memcpy(*hold_mem_node, mem_node, sizeof(struct pci_resource)); + mem_node->next = NULL; + + /* set Mem base and Limit registers */ + RES_CHECK(mem_node->base, 16); + temp_word = (u16)(mem_node->base >> 16); + rc = pci_bus_write_config_word(pci_bus, devfn, base_addr, temp_word); + + RES_CHECK(mem_node->base + mem_node->length - 1, 16); + temp_word = (u16)((mem_node->base + mem_node->length - 1) >> 16); + rc = pci_bus_write_config_word(pci_bus, devfn, limit_addr, temp_word); + } else { + temp_word = 0xFFFF; + rc = pci_bus_write_config_word(pci_bus, devfn, base_addr, temp_word); + + temp_word = 0x0000; + rc = pci_bus_write_config_word(pci_bus, devfn, limit_addr, temp_word); + + kfree(*hold_mem_node); + *hold_mem_node = NULL; + } + return rc; +} + +static int +configure_new_bridge(struct controller *ctrl, struct pci_func *func, + u8 behind_bridge, struct resource_lists *resources, + struct pci_bus *pci_bus) { int cloop; u8 temp_byte; u8 device; - u8 class_code; u16 temp_word; u32 rc; - u32 temp_register; - u32 base; u32 ID; unsigned int devfn; struct pci_resource *mem_node; @@ -1997,486 +2022,483 @@ struct pci_resource *hold_bus_node; struct irq_mapping irqs; struct pci_func *new_slot; - struct pci_bus lpci_bus, *pci_bus; struct resource_lists temp_resources; - memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus)); - pci_bus = &lpci_bus; - pci_bus->number = func->bus; devfn = PCI_DEVFN(func->device, func->function); - /* Check for Bridge */ - rc = pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &temp_byte); + /* set Primary bus */ + dbg("set Primary bus = 0x%x\n", func->bus); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_PRIMARY_BUS, func->bus); if (rc) return rc; - dbg("%s: bus %x dev %x func %x temp_byte = %x\n", __FUNCTION__, - func->bus, func->device, func->function, temp_byte); - - if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ - /* set Primary bus */ - dbg("set Primary bus = 0x%x\n", func->bus); - rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_PRIMARY_BUS, func->bus); - if (rc) - return rc; - /* find range of busses to use */ - bus_node = get_max_resource(&resources->bus_head, 1L); - - /* If we don't have any busses to allocate, we can't continue */ - if (!bus_node) { - err("Got NO bus resource to use\n"); - return -ENOMEM; - } - dbg("Got ranges of buses to use: base:len=0x%x:%x\n", bus_node->base, bus_node->length); - - /* set Secondary bus */ - dbg("set Secondary bus = 0x%x\n", temp_byte); - dbg("func->bus %x\n", func->bus); - - temp_byte = (u8)bus_node->base; - dbg("set Secondary bus = 0x%x\n", temp_byte); - rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, temp_byte); - if (rc) - return rc; - - /* set subordinate bus */ - temp_byte = (u8)(bus_node->base + bus_node->length - 1); - dbg("set subordinate bus = 0x%x\n", temp_byte); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); - if (rc) - return rc; + /* find range of busses to use */ + bus_node = get_max_resource(&resources->bus_head, 1L); - /* Set HP parameters (Cache Line Size, Latency Timer) */ - rc = pciehprm_set_hpp(ctrl, func, PCI_HEADER_TYPE_BRIDGE); - if (rc) - return rc; + /* If we don't have any busses to allocate, we can't continue */ + if (!bus_node) { + err("Got NO bus resource to use\n"); + return -ENOMEM; + } + dbg("Got ranges of buses to use: base:len=0x%x:%x\n", bus_node->base, bus_node->length); - /* Setup the IO, memory, and prefetchable windows */ + /* set Secondary bus */ + temp_byte = (u8)bus_node->base; + dbg("set Secondary bus = 0x%x\n", temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, temp_byte); + if (rc) + return rc; - io_node = get_max_resource(&(resources->io_head), 0x1000L); - if (io_node) { - dbg("io_node(base, len, next) (%x, %x, %p)\n", io_node->base, io_node->length, io_node->next); - } + /* set subordinate bus */ + temp_byte = (u8)(bus_node->base + bus_node->length - 1); + dbg("set subordinate bus = 0x%x\n", temp_byte); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); + if (rc) + return rc; - mem_node = get_max_resource(&(resources->mem_head), 0x100000L); - if (mem_node) { - dbg("mem_node(base, len, next) (%x, %x, %p)\n", mem_node->base, mem_node->length, mem_node->next); - } + /* Set HP parameters (Cache Line Size, Latency Timer) */ + rc = pciehprm_set_hpp(ctrl, func, PCI_HEADER_TYPE_BRIDGE); + if (rc) + return rc; - if (resources->p_mem_head) - p_mem_node = get_max_resource(&(resources->p_mem_head), 0x100000L); - else { - /* - * In some platform implementation, MEM and PMEM are not - * distinguished, and hence ACPI _CRS has only MEM entries - * for both MEM and PMEM. - */ - dbg("using MEM for PMEM\n"); - p_mem_node = get_max_resource(&(resources->mem_head), 0x100000L); - } - if (p_mem_node) { - dbg("p_mem_node(base, len, next) (%x, %x, %p)\n", p_mem_node->base, p_mem_node->length, p_mem_node->next); - } + /* Setup the IO, memory, and prefetchable windows */ - /* set up the IRQ info */ - if (!resources->irqs) { - irqs.barber_pole = 0; - irqs.interrupt[0] = 0; - irqs.interrupt[1] = 0; - irqs.interrupt[2] = 0; - irqs.interrupt[3] = 0; - irqs.valid_INT = 0; - } else { - irqs.barber_pole = resources->irqs->barber_pole; - irqs.interrupt[0] = resources->irqs->interrupt[0]; - irqs.interrupt[1] = resources->irqs->interrupt[1]; - irqs.interrupt[2] = resources->irqs->interrupt[2]; - irqs.interrupt[3] = resources->irqs->interrupt[3]; - irqs.valid_INT = resources->irqs->valid_INT; - } + io_node = get_max_resource(&(resources->io_head), 0x1000L); + if (io_node) { + dbg("io_node(base, len, next) (%x, %x, %p)\n", io_node->base, + io_node->length, io_node->next); + } - /* set up resource lists that are now aligned on top and bottom - * for anything behind the bridge. - */ - temp_resources.bus_head = bus_node; - temp_resources.io_head = io_node; - temp_resources.mem_head = mem_node; - temp_resources.p_mem_head = p_mem_node; - temp_resources.irqs = &irqs; + mem_node = get_max_resource(&(resources->mem_head), 0x100000L); + if (mem_node) { + dbg("mem_node(base, len, next) (%x, %x, %p)\n", mem_node->base, + mem_node->length, mem_node->next); + } - /* Make copies of the nodes we are going to pass down so that - * if there is a problem,we can just use these to free resources + if (resources->p_mem_head) + p_mem_node = get_max_resource(&(resources->p_mem_head), 0x100000L); + else { + /* + * In some platform implementation, MEM and PMEM are not + * distinguished, and hence ACPI _CRS has only MEM entries + * for both MEM and PMEM. */ - hold_bus_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_IO_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - - if (!hold_bus_node || !hold_IO_node || !hold_mem_node || !hold_p_mem_node) { - if (hold_bus_node) - kfree(hold_bus_node); - if (hold_IO_node) - kfree(hold_IO_node); - if (hold_mem_node) - kfree(hold_mem_node); - if (hold_p_mem_node) - kfree(hold_p_mem_node); + dbg("using MEM for PMEM\n"); + p_mem_node = get_max_resource(&(resources->mem_head), 0x100000L); + } + if (p_mem_node) { + dbg("p_mem_node(base, len, next) (%x, %x, %p)\n", p_mem_node->base, + p_mem_node->length, p_mem_node->next); + } + + /* set up the IRQ info */ + if (!resources->irqs) { + irqs.barber_pole = 0; + irqs.interrupt[0] = 0; + irqs.interrupt[1] = 0; + irqs.interrupt[2] = 0; + irqs.interrupt[3] = 0; + irqs.valid_INT = 0; + } else { + irqs.barber_pole = resources->irqs->barber_pole; + irqs.interrupt[0] = resources->irqs->interrupt[0]; + irqs.interrupt[1] = resources->irqs->interrupt[1]; + irqs.interrupt[2] = resources->irqs->interrupt[2]; + irqs.interrupt[3] = resources->irqs->interrupt[3]; + irqs.valid_INT = resources->irqs->valid_INT; + } - return(1); - } + /* set up resource lists that are now aligned on top and bottom + * for anything behind the bridge. + */ + temp_resources.bus_head = bus_node; + temp_resources.io_head = io_node; + temp_resources.mem_head = mem_node; + temp_resources.p_mem_head = p_mem_node; + temp_resources.irqs = &irqs; - memcpy(hold_bus_node, bus_node, sizeof(struct pci_resource)); + /* Make copies of the nodes we are going to pass down so that + * if there is a problem,we can just use these to free resources + */ + hold_bus_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + hold_IO_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + hold_mem_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + hold_p_mem_node = kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + + if (!hold_bus_node || !hold_IO_node || !hold_mem_node || !hold_p_mem_node) { + kfree(hold_bus_node); + kfree(hold_IO_node); + kfree(hold_mem_node); + kfree(hold_p_mem_node); - bus_node->base += 1; - bus_node->length -= 1; - bus_node->next = NULL; + return 1; + } - /* If we have IO resources copy them and fill in the bridge's - * IO range registers - */ - if (io_node) { - memcpy(hold_IO_node, io_node, sizeof(struct pci_resource)); - io_node->next = NULL; + memcpy(hold_bus_node, bus_node, sizeof(struct pci_resource)); - /* set IO base and Limit registers */ - RES_CHECK(io_node->base, 8); - temp_byte = (u8)(io_node->base >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); + bus_node->base += 1; + bus_node->length -= 1; + bus_node->next = NULL; - RES_CHECK(io_node->base + io_node->length - 1, 8); - temp_byte = (u8)((io_node->base + io_node->length - 1) >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); - } else { - kfree(hold_IO_node); - hold_IO_node = NULL; - } + /* If we have IO resources copy them and fill in the bridge's + * IO range registers + */ + if (io_node) { + memcpy(hold_IO_node, io_node, sizeof(struct pci_resource)); + io_node->next = NULL; + + /* set IO base and Limit registers */ + RES_CHECK(io_node->base, 8); + temp_byte = (u8)(io_node->base >> 8); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); + + RES_CHECK(io_node->base + io_node->length - 1, 8); + temp_byte = (u8)((io_node->base + io_node->length - 1) >> 8); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); + } else { + kfree(hold_IO_node); + hold_IO_node = NULL; + } - /* If we have memory resources copy them and fill in the bridge's - * memory range registers. Otherwise, fill in the range - * registers with values that disable them. - */ - if (mem_node) { - memcpy(hold_mem_node, mem_node, sizeof(struct pci_resource)); - mem_node->next = NULL; + /* If we have memory resources copy them and fill in the bridge's + * memory range registers. Otherwise, fill in the range + * registers with values that disable them. + */ + rc = configure_bridge(pci_bus, devfn, mem_node, &hold_mem_node, + PCI_MEMORY_BASE, PCI_MEMORY_LIMIT); - /* set Mem base and Limit registers */ - RES_CHECK(mem_node->base, 16); - temp_word = (u32)(mem_node->base >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + /* If we have prefetchable memory resources copy them and + * fill in the bridge's memory range registers. Otherwise, + * fill in the range registers with values that disable them. + */ + rc = configure_bridge(pci_bus, devfn, p_mem_node, &hold_p_mem_node, + PCI_PREF_MEMORY_BASE, PCI_PREF_MEMORY_LIMIT); - RES_CHECK(mem_node->base + mem_node->length - 1, 16); - temp_word = (u32)((mem_node->base + mem_node->length - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); - } else { - temp_word = 0xFFFF; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + /* Adjust this to compensate for extra adjustment in first loop */ + irqs.barber_pole--; - temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + rc = 0; - kfree(hold_mem_node); - hold_mem_node = NULL; - } + /* Here we actually find the devices and configure them */ + for (device = 0; (device <= 0x1F) && !rc; device++) { + irqs.barber_pole = (irqs.barber_pole + 1) & 0x03; - /* If we have prefetchable memory resources copy them and - * fill in the bridge's memory range registers. Otherwise, - * fill in the range registers with values that disable them. - */ - if (p_mem_node) { - memcpy(hold_p_mem_node, p_mem_node, sizeof(struct pci_resource)); - p_mem_node->next = NULL; + ID = 0xFFFFFFFF; + pci_bus->number = hold_bus_node->base; + pci_bus_read_config_dword (pci_bus, PCI_DEVFN(device, 0), PCI_VENDOR_ID, &ID); + pci_bus->number = func->bus; - /* set Pre Mem base and Limit registers */ - RES_CHECK(p_mem_node->base, 16); - temp_word = (u32)(p_mem_node->base >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); + if (ID != 0xFFFFFFFF) { /* device Present */ + /* Setup slot structure. */ + new_slot = pciehp_slot_create(hold_bus_node->base); + + if (new_slot == NULL) { + /* Out of memory */ + rc = -ENOMEM; + continue; + } - RES_CHECK(p_mem_node->base + p_mem_node->length - 1, 16); - temp_word = (u32)((p_mem_node->base + p_mem_node->length - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); - } else { - temp_word = 0xFFFF; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); + new_slot->bus = hold_bus_node->base; + new_slot->device = device; + new_slot->function = 0; + new_slot->is_a_board = 1; + new_slot->status = 0; + + rc = configure_new_device(ctrl, new_slot, 1, + &temp_resources, func->bus, + func->device); + dbg("configure_new_device rc=0x%x\n",rc); + } /* End of IF (device in slot?) */ + } /* End of FOR loop */ - temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + if (rc) { + pciehp_destroy_resource_list(&temp_resources); - kfree(hold_p_mem_node); - hold_p_mem_node = NULL; - } + return_resource(&(resources->bus_head), hold_bus_node); + return_resource(&(resources->io_head), hold_IO_node); + return_resource(&(resources->mem_head), hold_mem_node); + return_resource(&(resources->p_mem_head), hold_p_mem_node); + return(rc); + } - /* Adjust this to compensate for extra adjustment in first loop */ - irqs.barber_pole--; + /* save the interrupt routing information */ + if (resources->irqs) { + resources->irqs->interrupt[0] = irqs.interrupt[0]; + resources->irqs->interrupt[1] = irqs.interrupt[1]; + resources->irqs->interrupt[2] = irqs.interrupt[2]; + resources->irqs->interrupt[3] = irqs.interrupt[3]; + resources->irqs->valid_INT = irqs.valid_INT; + } else if (!behind_bridge) { + /* We need to hook up the interrupts here */ + for (cloop = 0; cloop < 4; cloop++) { + if (irqs.valid_INT & (0x01 << cloop)) { + rc = pciehp_set_irq(func->bus, func->device, + 0x0A + cloop, irqs.interrupt[cloop]); + if (rc) { + pciehp_destroy_resource_list (&temp_resources); + return_resource(&(resources->bus_head), hold_bus_node); + return_resource(&(resources->io_head), hold_IO_node); + return_resource(&(resources->mem_head), hold_mem_node); + return_resource(&(resources->p_mem_head), hold_p_mem_node); + return rc; + } + } + } /* end of for loop */ + } - rc = 0; + /* Return unused bus resources + * First use the temporary node to store information for the board + */ + if (hold_bus_node && bus_node && temp_resources.bus_head) { + hold_bus_node->length = bus_node->base - hold_bus_node->base; - /* Here we actually find the devices and configure them */ - for (device = 0; (device <= 0x1F) && !rc; device++) { - irqs.barber_pole = (irqs.barber_pole + 1) & 0x03; + hold_bus_node->next = func->bus_head; + func->bus_head = hold_bus_node; - ID = 0xFFFFFFFF; - pci_bus->number = hold_bus_node->base; - pci_bus_read_config_dword (pci_bus, PCI_DEVFN(device, 0), PCI_VENDOR_ID, &ID); - pci_bus->number = func->bus; + temp_byte = (u8)(temp_resources.bus_head->base - 1); - if (ID != 0xFFFFFFFF) { /* device Present */ - /* Setup slot structure. */ - new_slot = pciehp_slot_create(hold_bus_node->base); + /* set subordinate bus */ + dbg("re-set subordinate bus = 0x%x\n", temp_byte); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); - if (new_slot == NULL) { - /* Out of memory */ - rc = -ENOMEM; - continue; - } + if (temp_resources.bus_head->length == 0) { + kfree(temp_resources.bus_head); + temp_resources.bus_head = NULL; + } else { + dbg("return bus res of b:d(0x%x:%x) base:len(0x%x:%x)\n", + func->bus, func->device, temp_resources.bus_head->base, temp_resources.bus_head->length); + return_resource(&(resources->bus_head), temp_resources.bus_head); + } + } - new_slot->bus = hold_bus_node->base; - new_slot->device = device; - new_slot->function = 0; - new_slot->is_a_board = 1; - new_slot->status = 0; + /* If we have IO space available and there is some left, + * return the unused portion + */ + if (hold_IO_node && temp_resources.io_head) { + io_node = do_pre_bridge_resource_split(&(temp_resources.io_head), + &hold_IO_node, 0x1000); - rc = configure_new_device(ctrl, new_slot, 1, &temp_resources, func->bus, func->device); - dbg("configure_new_device rc=0x%x\n",rc); - } /* End of IF (device in slot?) */ - } /* End of FOR loop */ + /* Check if we were able to split something off */ + if (io_node) { + hold_IO_node->base = io_node->base + io_node->length; - if (rc) { - pciehp_destroy_resource_list(&temp_resources); + RES_CHECK(hold_IO_node->base, 8); + temp_byte = (u8)((hold_IO_node->base) >> 8); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); - return_resource(&(resources->bus_head), hold_bus_node); - return_resource(&(resources->io_head), hold_IO_node); - return_resource(&(resources->mem_head), hold_mem_node); - return_resource(&(resources->p_mem_head), hold_p_mem_node); - return(rc); - } - - /* save the interrupt routing information */ - if (resources->irqs) { - resources->irqs->interrupt[0] = irqs.interrupt[0]; - resources->irqs->interrupt[1] = irqs.interrupt[1]; - resources->irqs->interrupt[2] = irqs.interrupt[2]; - resources->irqs->interrupt[3] = irqs.interrupt[3]; - resources->irqs->valid_INT = irqs.valid_INT; - } else if (!behind_bridge) { - /* We need to hook up the interrupts here */ - for (cloop = 0; cloop < 4; cloop++) { - if (irqs.valid_INT & (0x01 << cloop)) { - rc = pciehp_set_irq(func->bus, func->device, - 0x0A + cloop, irqs.interrupt[cloop]); - if (rc) { - pciehp_destroy_resource_list (&temp_resources); - return_resource(&(resources->bus_head), hold_bus_node); - return_resource(&(resources->io_head), hold_IO_node); - return_resource(&(resources->mem_head), hold_mem_node); - return_resource(&(resources->p_mem_head), hold_p_mem_node); - return rc; - } - } - } /* end of for loop */ + return_resource(&(resources->io_head), io_node); } - /* Return unused bus resources - * First use the temporary node to store information for the board - */ - if (hold_bus_node && bus_node && temp_resources.bus_head) { - hold_bus_node->length = bus_node->base - hold_bus_node->base; + io_node = do_bridge_resource_split(&(temp_resources.io_head), 0x1000); - hold_bus_node->next = func->bus_head; - func->bus_head = hold_bus_node; + /* Check if we were able to split something off */ + if (io_node) { + /* First use the temporary node to store information for the board */ + hold_IO_node->length = io_node->base - hold_IO_node->base; - temp_byte = (u8)(temp_resources.bus_head->base - 1); + /* If we used any, add it to the board's list */ + if (hold_IO_node->length) { + hold_IO_node->next = func->io_head; + func->io_head = hold_IO_node; - /* set subordinate bus */ - dbg("re-set subordinate bus = 0x%x\n", temp_byte); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, temp_byte); + RES_CHECK(io_node->base - 1, 8); + temp_byte = (u8)((io_node->base - 1) >> 8); + rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); - if (temp_resources.bus_head->length == 0) { - kfree(temp_resources.bus_head); - temp_resources.bus_head = NULL; + return_resource(&(resources->io_head), io_node); } else { - dbg("return bus res of b:d(0x%x:%x) base:len(0x%x:%x)\n", - func->bus, func->device, temp_resources.bus_head->base, temp_resources.bus_head->length); - return_resource(&(resources->bus_head), temp_resources.bus_head); - } - } - - /* If we have IO space available and there is some left, - * return the unused portion - */ - if (hold_IO_node && temp_resources.io_head) { - io_node = do_pre_bridge_resource_split(&(temp_resources.io_head), - &hold_IO_node, 0x1000); - - /* Check if we were able to split something off */ - if (io_node) { - hold_IO_node->base = io_node->base + io_node->length; - - RES_CHECK(hold_IO_node->base, 8); - temp_byte = (u8)((hold_IO_node->base) >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); + /* it doesn't need any IO */ + temp_byte = 0x00; + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_LIMIT, temp_byte); return_resource(&(resources->io_head), io_node); + kfree(hold_IO_node); } - - io_node = do_bridge_resource_split(&(temp_resources.io_head), 0x1000); - - /* Check if we were able to split something off */ - if (io_node) { - /* First use the temporary node to store information for the board */ - hold_IO_node->length = io_node->base - hold_IO_node->base; - - /* If we used any, add it to the board's list */ - if (hold_IO_node->length) { - hold_IO_node->next = func->io_head; - func->io_head = hold_IO_node; - - RES_CHECK(io_node->base - 1, 8); - temp_byte = (u8)((io_node->base - 1) >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); - - return_resource(&(resources->io_head), io_node); - } else { - /* it doesn't need any IO */ - temp_byte = 0x00; - rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_LIMIT, temp_byte); - - return_resource(&(resources->io_head), io_node); - kfree(hold_IO_node); - } - } else { - /* it used most of the range */ - hold_IO_node->next = func->io_head; - func->io_head = hold_IO_node; - } - } else if (hold_IO_node) { - /* it used the whole range */ + } else { + /* it used most of the range */ hold_IO_node->next = func->io_head; func->io_head = hold_IO_node; } + } else if (hold_IO_node) { + /* it used the whole range */ + hold_IO_node->next = func->io_head; + func->io_head = hold_IO_node; + } - /* If we have memory space available and there is some left, - * return the unused portion - */ - if (hold_mem_node && temp_resources.mem_head) { - mem_node = do_pre_bridge_resource_split(&(temp_resources.mem_head), &hold_mem_node, 0x100000L); + /* If we have memory space available and there is some left, + * return the unused portion + */ + if (hold_mem_node && temp_resources.mem_head) { + mem_node = do_pre_bridge_resource_split(&(temp_resources.mem_head), &hold_mem_node, 0x100000L); - /* Check if we were able to split something off */ - if (mem_node) { - hold_mem_node->base = mem_node->base + mem_node->length; - - RES_CHECK(hold_mem_node->base, 16); - temp_word = (u32)((hold_mem_node->base) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + /* Check if we were able to split something off */ + if (mem_node) { + hold_mem_node->base = mem_node->base + mem_node->length; - return_resource(&(resources->mem_head), mem_node); - } + RES_CHECK(hold_mem_node->base, 16); + temp_word = (u16)((hold_mem_node->base) >> 16); + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); - mem_node = do_bridge_resource_split(&(temp_resources.mem_head), 0x100000L); + return_resource(&(resources->mem_head), mem_node); + } - /* Check if we were able to split something off */ - if (mem_node) { - /* First use the temporary node to store information for the board */ - hold_mem_node->length = mem_node->base - hold_mem_node->base; - - if (hold_mem_node->length) { - hold_mem_node->next = func->mem_head; - func->mem_head = hold_mem_node; - - /* configure end address */ - RES_CHECK(mem_node->base - 1, 16); - temp_word = (u32)((mem_node->base - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + mem_node = do_bridge_resource_split(&(temp_resources.mem_head), 0x100000L); - /* Return unused resources to the pool */ - return_resource(&(resources->mem_head), mem_node); - } else { - /* it doesn't need any Mem */ - temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + /* Check if we were able to split something off */ + if (mem_node) { + /* First use the temporary node to store information for the board */ + hold_mem_node->length = mem_node->base - hold_mem_node->base; - return_resource(&(resources->mem_head), mem_node); - kfree(hold_mem_node); - } - } else { - /* it used most of the range */ + if (hold_mem_node->length) { hold_mem_node->next = func->mem_head; func->mem_head = hold_mem_node; + + /* configure end address */ + RES_CHECK(mem_node->base - 1, 16); + temp_word = (u16)((mem_node->base - 1) >> 16); + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + + /* Return unused resources to the pool */ + return_resource(&(resources->mem_head), mem_node); + } else { + /* it doesn't need any Mem */ + temp_word = 0x0000; + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + + return_resource(&(resources->mem_head), mem_node); + kfree(hold_mem_node); } - } else if (hold_mem_node) { - /* it used the whole range */ + } else { + /* it used most of the range */ hold_mem_node->next = func->mem_head; func->mem_head = hold_mem_node; } + } else if (hold_mem_node) { + /* it used the whole range */ + hold_mem_node->next = func->mem_head; + func->mem_head = hold_mem_node; + } - /* If we have prefetchable memory space available and there is some - * left at the end, return the unused portion - */ - if (hold_p_mem_node && temp_resources.p_mem_head) { - p_mem_node = do_pre_bridge_resource_split(&(temp_resources.p_mem_head), - &hold_p_mem_node, 0x100000L); - - /* Check if we were able to split something off */ - if (p_mem_node) { - hold_p_mem_node->base = p_mem_node->base + p_mem_node->length; - - RES_CHECK(hold_p_mem_node->base, 16); - temp_word = (u32)((hold_p_mem_node->base) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); + /* If we have prefetchable memory space available and there is some + * left at the end, return the unused portion + */ + if (hold_p_mem_node && temp_resources.p_mem_head) { + p_mem_node = do_pre_bridge_resource_split(&(temp_resources.p_mem_head), + &hold_p_mem_node, 0x100000L); - return_resource(&(resources->p_mem_head), p_mem_node); - } + /* Check if we were able to split something off */ + if (p_mem_node) { + hold_p_mem_node->base = p_mem_node->base + p_mem_node->length; - p_mem_node = do_bridge_resource_split(&(temp_resources.p_mem_head), 0x100000L); + RES_CHECK(hold_p_mem_node->base, 16); + temp_word = (u16)((hold_p_mem_node->base) >> 16); + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); - /* Check if we were able to split something off */ - if (p_mem_node) { - /* First use the temporary node to store information for the board */ - hold_p_mem_node->length = p_mem_node->base - hold_p_mem_node->base; - - /* If we used any, add it to the board's list */ - if (hold_p_mem_node->length) { - hold_p_mem_node->next = func->p_mem_head; - func->p_mem_head = hold_p_mem_node; - - RES_CHECK(p_mem_node->base - 1, 16); - temp_word = (u32)((p_mem_node->base - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + return_resource(&(resources->p_mem_head), p_mem_node); + } - return_resource(&(resources->p_mem_head), p_mem_node); - } else { - /* it doesn't need any PMem */ - temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + p_mem_node = do_bridge_resource_split(&(temp_resources.p_mem_head), 0x100000L); - return_resource(&(resources->p_mem_head), p_mem_node); - kfree(hold_p_mem_node); - } - } else { - /* it used the most of the range */ + /* Check if we were able to split something off */ + if (p_mem_node) { + /* First use the temporary node to store information for the board */ + hold_p_mem_node->length = p_mem_node->base - hold_p_mem_node->base; + + /* If we used any, add it to the board's list */ + if (hold_p_mem_node->length) { hold_p_mem_node->next = func->p_mem_head; func->p_mem_head = hold_p_mem_node; + + RES_CHECK(p_mem_node->base - 1, 16); + temp_word = (u16)((p_mem_node->base - 1) >> 16); + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + + return_resource(&(resources->p_mem_head), p_mem_node); + } else { + /* it doesn't need any PMem */ + temp_word = 0x0000; + rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + + return_resource(&(resources->p_mem_head), p_mem_node); + kfree(hold_p_mem_node); } - } else if (hold_p_mem_node) { - /* it used the whole range */ + } else { + /* it used the most of the range */ hold_p_mem_node->next = func->p_mem_head; func->p_mem_head = hold_p_mem_node; } + } else if (hold_p_mem_node) { + /* it used the whole range */ + hold_p_mem_node->next = func->p_mem_head; + func->p_mem_head = hold_p_mem_node; + } - /* We should be configuring an IRQ and the bridge's base address - * registers if it needs them. Although we have never seen such - * a device - */ + /* We should be configuring an IRQ and the bridge's base address + * registers if it needs them. Although we have never seen such + * a device + */ + + pciehprm_enable_card(ctrl, func, PCI_HEADER_TYPE_BRIDGE); - pciehprm_enable_card(ctrl, func, PCI_HEADER_TYPE_BRIDGE); + dbg("PCI Bridge Hot-Added s:b:d:f(%02x:%02x:%02x:%02x)\n", ctrl->seg, func->bus, func->device, func->function); - dbg("PCI Bridge Hot-Added s:b:d:f(%02x:%02x:%02x:%02x)\n", ctrl->seg, func->bus, func->device, func->function); + return rc; +} + +/** + * configure_new_function - Configures the PCI header information of one device + * + * @ctrl: pointer to controller structure + * @func: pointer to function structure + * @behind_bridge: 1 if this is a recursive call, 0 if not + * @resources: pointer to set of resource lists + * + * Calls itself recursively for bridged devices. + * Returns 0 if success + * + */ +static int +configure_new_function(struct controller *ctrl, struct pci_func *func, + u8 behind_bridge, struct resource_lists *resources, + u8 bridge_bus, u8 bridge_dev) +{ + int cloop; + u8 temp_byte; + u8 class_code; + u16 temp_word; + u32 rc; + u32 temp_register; + u32 base; + unsigned int devfn; + struct pci_resource *mem_node; + struct pci_resource *io_node; + struct pci_bus lpci_bus, *pci_bus; + + memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus)); + pci_bus = &lpci_bus; + pci_bus->number = func->bus; + devfn = PCI_DEVFN(func->device, func->function); + + /* Check for Bridge */ + rc = pci_bus_read_config_byte(pci_bus, devfn, PCI_HEADER_TYPE, &temp_byte); + if (rc) + return rc; + dbg("%s: bus %x dev %x func %x temp_byte = %x\n", __FUNCTION__, + func->bus, func->device, func->function, temp_byte); + + if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ + rc = configure_new_bridge(ctrl, func, behind_bridge, resources, + pci_bus); + + if (rc) + return rc; } else if ((temp_byte & 0x7F) == PCI_HEADER_TYPE_NORMAL) { /* Standard device */ u64 base64; - rc = pci_bus_read_config_byte (pci_bus, devfn, 0x0B, &class_code); + rc = pci_bus_read_config_byte(pci_bus, devfn, 0x0B, &class_code); if (class_code == PCI_BASE_CLASS_DISPLAY) - return (DEVICE_TYPE_NOT_SUPPORTED); + return DEVICE_TYPE_NOT_SUPPORTED; /* Figure out IO and memory needs */ for (cloop = PCI_BASE_ADDRESS_0; cloop <= PCI_BASE_ADDRESS_5; cloop += 4) { @@ -2535,7 +2557,7 @@ else { if (prefetchable) dbg("using MEM for PMEM\n"); - mem_node=get_resource(&(resources->mem_head), (ulong)base); + mem_node = get_resource(&(resources->mem_head), (ulong)base); } /* allocate the resource to the board */ @@ -2614,11 +2636,10 @@ } /* End of Not-A-Bridge else */ else { /* It's some strange type of PCI adapter (Cardbus?) */ - return(DEVICE_TYPE_NOT_SUPPORTED); + return DEVICE_TYPE_NOT_SUPPORTED; } func->configured = 1; return 0; } - diff -Nru a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c --- a/drivers/pci/hotplug/pciehp_hpc.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/pciehp_hpc.c Tue May 18 23:38:08 2004 @@ -291,14 +291,14 @@ static int pcie_write_cmd(struct slot *slot, u16 cmd) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; int retval = 0; u16 slot_status; DBG_ENTER_ROUTINE dbg("%s : Enter\n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -331,13 +331,13 @@ static int hpc_check_lnk_status(struct controller *ctrl) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; u16 lnk_status; int retval = 0; DBG_ENTER_ROUTINE - if (!ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -362,14 +362,14 @@ static int hpc_get_attention_status(struct slot *slot, u8 *status) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_ctrl; u8 atten_led_state; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -409,14 +409,14 @@ static int hpc_get_power_status(struct slot * slot, u8 *status) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_ctrl; u8 pwr_state; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -450,13 +450,13 @@ static int hpc_get_latch_status(struct slot *slot, u8 *status) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_status; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -476,14 +476,14 @@ static int hpc_get_adapter_status(struct slot *slot, u8 *status) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_status; u8 card_state; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -503,7 +503,7 @@ static int hpc_query_power_fault(struct slot * slot) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_status; u8 pwr_fault; int retval = 0; @@ -511,7 +511,7 @@ DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -532,13 +532,13 @@ static int hpc_set_attention_status(struct slot *slot, u8 value) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd = 0; u16 slot_ctrl; int rc = 0; dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -580,13 +580,13 @@ static void hpc_set_green_led_on(struct slot *slot) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd; u16 slot_ctrl; int rc = 0; dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return ; } @@ -615,13 +615,13 @@ static void hpc_set_green_led_off(struct slot *slot) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd; u16 slot_ctrl; int rc = 0; dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return ; } @@ -651,13 +651,13 @@ static void hpc_set_green_led_blink(struct slot *slot) { - struct php_ctlr_state_s *php_ctlr =(struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd; u16 slot_ctrl; int rc = 0; dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return ; } @@ -692,13 +692,13 @@ int *updown, /* physical_slot_num increament: 1 or -1 */ int *flags) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; u32 slot_cap; int rc = 0; DBG_ENTER_ROUTINE - if (!ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -723,12 +723,12 @@ static void hpc_release_ctlr(struct controller *ctrl) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle; struct php_ctlr_state_s *p, *p_prev; DBG_ENTER_ROUTINE - if (!ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return ; } @@ -769,7 +769,7 @@ static int hpc_power_on_slot(struct slot * slot) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd; u16 slot_ctrl; @@ -778,7 +778,7 @@ DBG_ENTER_ROUTINE dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -818,7 +818,7 @@ static int hpc_power_off_slot(struct slot * slot) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; u16 slot_cmd; u16 slot_ctrl; @@ -827,7 +827,7 @@ DBG_ENTER_ROUTINE dbg("%s: \n", __FUNCTION__); - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -879,10 +879,10 @@ return IRQ_NONE; if (!pciehp_poll_mode) { - ctrl = (struct controller *)dev_id; + ctrl = dev_id; php_ctlr = ctrl->hpc_ctlr_handle; } else { - php_ctlr = (struct php_ctlr_state_s *) dev_id; + php_ctlr = dev_id; ctrl = (struct controller *)php_ctlr->callback_instance_id; } @@ -1017,14 +1017,14 @@ static int hpc_get_max_lnk_speed (struct slot *slot, enum pcie_link_speed *value) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; enum pcie_link_speed lnk_speed; u32 lnk_cap; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -1058,14 +1058,14 @@ static int hpc_get_max_lnk_width (struct slot *slot, enum pcie_link_width *value) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; enum pcie_link_width lnk_wdth; u32 lnk_cap; int retval = 0; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -1120,14 +1120,14 @@ static int hpc_get_cur_lnk_speed (struct slot *slot, enum pcie_link_speed *value) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; enum pcie_link_speed lnk_speed = PCI_SPEED_UNKNOWN; int retval = 0; u16 lnk_status; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -1161,14 +1161,14 @@ static int hpc_get_cur_lnk_width (struct slot *slot, enum pcie_link_width *value) { - struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle; + struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle; enum pcie_link_width lnk_wdth = PCIE_LNK_WIDTH_UNKNOWN; int retval = 0; u16 lnk_status; DBG_ENTER_ROUTINE - if (!slot->ctrl->hpc_ctlr_handle) { + if (!php_ctlr) { err("%s: Invalid HPC controller handle!\n", __FUNCTION__); return -1; } @@ -1245,7 +1245,7 @@ }; int pcie_init(struct controller * ctrl, - struct pci_dev * pdev, + struct pci_dev *pdev, php_intr_callback_t attention_button_callback, php_intr_callback_t switch_change_callback, php_intr_callback_t presence_change_callback, diff -Nru a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c --- a/drivers/pci/hotplug/pciehp_pci.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/pciehp_pci.c Tue May 18 23:38:08 2004 @@ -69,7 +69,7 @@ if (func->pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { pci_read_config_byte(func->pci_dev, PCI_SECONDARY_BUS, &bus); - child = (struct pci_bus*) pci_add_new_bus(func->pci_dev->bus, (func->pci_dev), bus); + child = pci_add_new_bus(func->pci_dev->bus, (func->pci_dev), bus); pci_do_scan_bus(child); } @@ -83,10 +83,12 @@ int rc = 0; int j; - dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus, func->device, func->function); + dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus, + func->device, func->function); for (j=0; j<8 ; j++) { - struct pci_dev* temp = pci_find_slot(func->bus, (func->device << 3) | j); + struct pci_dev* temp = pci_find_slot(func->bus, + (func->device << 3) | j); if (temp) { pci_remove_bus_device(temp); } @@ -169,7 +171,8 @@ memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus)); pci_bus = &lpci_bus; - dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, num_ctlr_slots, first_device_num); + dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, + num_ctlr_slots, first_device_num); /* Decide which slots are supported */ if (is_hot_plug) { @@ -183,7 +186,8 @@ LastSupported = 0x1F; } - dbg("FirstSupported = %d, LastSupported = %d\n", FirstSupported, LastSupported); + dbg("FirstSupported = %d, LastSupported = %d\n", FirstSupported, + LastSupported); /* Save PCI configuration space for all devices in supported slots */ dbg("%s: pci_bus->number = %x\n", __FUNCTION__, pci_bus->number); @@ -191,15 +195,18 @@ dbg("%s: bus = %x, dev = %x\n", __FUNCTION__, busnumber, device); for (device = FirstSupported; device <= LastSupported; device++) { ID = 0xFFFFFFFF; - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), PCI_VENDOR_ID, &ID); + rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), + PCI_VENDOR_ID, &ID); if (ID != 0xFFFFFFFF) { /* device in slot */ dbg("%s: ID = %x\n", __FUNCTION__, ID); - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), 0x0B, &class_code); + rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), + 0x0B, &class_code); if (rc) return rc; - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), PCI_HEADER_TYPE, &header_type); + rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), + PCI_HEADER_TYPE, &header_type); if (rc) return rc; @@ -221,7 +228,8 @@ /* Recurse the subordinate bus * get the subordinate bus number */ - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), PCI_SECONDARY_BUS, &secondary_bus); if (rc) { return rc; @@ -263,13 +271,17 @@ new_slot->switch_save = 0x10; /* In case of unsupported board */ new_slot->status = DevError; - new_slot->pci_dev = pci_find_slot(new_slot->bus, (new_slot->device << 3) | new_slot->function); + new_slot->pci_dev = pci_find_slot(new_slot->bus, + (new_slot->device << 3) | new_slot->function); dbg("new_slot->pci_dev = %p\n", new_slot->pci_dev); for (cloop = 0; cloop < 0x20; cloop++) { - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, function), cloop << 2, - (u32 *) & (new_slot->config_space [cloop])); - /* dbg("new_slot->config_space[%x] = %x\n", cloop, new_slot->config_space[cloop]); */ + rc = pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(device, function), + cloop << 2, + (u32 *) &(new_slot->config_space [cloop])); + /* dbg("new_slot->config_space[%x] = %x\n", + cloop, new_slot->config_space[cloop]); */ if (rc) return rc; } @@ -284,19 +296,23 @@ while ((function < max_functions)&&(!stop_it)) { dbg("%s: In while loop \n", __FUNCTION__); - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, function), PCI_VENDOR_ID, &ID); + rc = pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(device, function), + PCI_VENDOR_ID, &ID); if (ID == 0xFFFFFFFF) { /* nothing there. */ function++; dbg("Nothing there\n"); } else { /* Something there */ - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), 0x0B, - &class_code); + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), + 0x0B, &class_code); if (rc) return rc; - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), PCI_HEADER_TYPE, - &header_type); + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), + PCI_HEADER_TYPE, &header_type); if (rc) return rc; @@ -306,8 +322,8 @@ } } while (function < max_functions); - } /* End of IF (device in slot?) */ - else if (is_hot_plug) { + /* End of IF (device in slot?) */ + } else if (is_hot_plug) { /* Setup slot structure with entry for empty slot */ new_slot = pciehp_slot_create(busnumber); @@ -339,7 +355,7 @@ * * returns 0 if success */ -int pciehp_save_slot_config (struct controller *ctrl, struct pci_func * new_slot) +int pciehp_save_slot_config(struct controller *ctrl, struct pci_func * new_slot) { int rc; u8 class_code; @@ -358,12 +374,15 @@ ID = 0xFFFFFFFF; - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_VENDOR_ID, &ID); + pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, 0), + PCI_VENDOR_ID, &ID); if (ID != 0xFFFFFFFF) { /* device in slot */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), 0x0B, &class_code); + pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), + 0x0B, &class_code); - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_HEADER_TYPE, &header_type); + pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), + PCI_HEADER_TYPE, &header_type); if (header_type & 0x80) /* Multi-function device */ max_functions = 8; @@ -375,7 +394,8 @@ do { if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ /* Recurse the subordinate bus */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), PCI_SECONDARY_BUS, &secondary_bus); sub_bus = (int) secondary_bus; @@ -384,15 +404,17 @@ rc = pciehp_save_config(ctrl, sub_bus, 0, 0); if (rc) - return(rc); + return rc; } /* End of IF */ new_slot->status = 0; for (cloop = 0; cloop < 0x20; cloop++) { - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, function), - cloop << 2, (u32 *) & (new_slot->config_space [cloop])); + pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(new_slot->device, function), + cloop << 2, + (u32 *) &(new_slot->config_space [cloop])); } function++; @@ -404,15 +426,20 @@ */ while ((function < max_functions) && (!stop_it)) { - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, function), PCI_VENDOR_ID, &ID); + pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(new_slot->device, function), + PCI_VENDOR_ID, &ID); if (ID == 0xFFFFFFFF) { /* nothing there. */ function++; } else { /* Something there */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), 0x0B, &class_code); - - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), PCI_HEADER_TYPE, - &header_type); + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), + 0x0B, &class_code); + + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), + PCI_HEADER_TYPE, &header_type); stop_it++; } @@ -421,10 +448,10 @@ } while (function < max_functions); } /* End of IF (device in slot?) */ else { - return(2); + return 2; } - return(0); + return 0; } @@ -440,7 +467,7 @@ * it loops for all functions of the slot and disables them. * else, it just get resources of the function and return. */ -int pciehp_save_used_resources (struct controller *ctrl, struct pci_func *func, int disable) +int pciehp_save_used_resources(struct controller *ctrl, struct pci_func *func, int disable) { u8 cloop; u8 header_type; @@ -472,7 +499,7 @@ devfn = PCI_DEVFN(func->device, func->function); /* Save the command register */ - pci_bus_read_config_word (pci_bus, devfn, PCI_COMMAND, &save_command); + pci_bus_read_config_word(pci_bus, devfn, PCI_COMMAND, &save_command); if (disable) { /* disable card */ @@ -481,20 +508,22 @@ } /* Check for Bridge */ - pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &header_type); + pci_bus_read_config_byte(pci_bus, devfn, PCI_HEADER_TYPE, &header_type); if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ - dbg("Save_used_res of PCI bridge b:d=0x%x:%x, sc=0x%x\n", func->bus, func->device, save_command); + dbg("Save_used_res of PCI bridge b:d=0x%x:%x, sc=0x%x\n", + func->bus, func->device, save_command); if (disable) { /* Clear Bridge Control Register */ command = 0x00; pci_bus_write_config_word(pci_bus, devfn, PCI_BRIDGE_CONTROL, command); } - pci_bus_read_config_byte (pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); - pci_bus_read_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); - bus_node =(struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + bus_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!bus_node) return -ENOMEM; @@ -505,13 +534,14 @@ func->bus_head = bus_node; /* Save IO base and Limit registers */ - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_BASE, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_BASE, &temp_byte); base = temp_byte; - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_LIMIT, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_LIMIT, &temp_byte); length = temp_byte; if ((base <= length) && (!disable || (save_command & PCI_COMMAND_IO))) { - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!io_node) return -ENOMEM; @@ -523,11 +553,12 @@ } /* Save memory base and Limit registers */ - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -538,11 +569,12 @@ func->mem_head = mem_node; } /* Save prefetchable memory base and Limit registers */ - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!p_mem_node) return -ENOMEM; @@ -553,38 +585,41 @@ func->p_mem_head = p_mem_node; } } else if ((header_type & 0x7F) == PCI_HEADER_TYPE_NORMAL) { - dbg("Save_used_res of PCI adapter b:d=0x%x:%x, sc=0x%x\n", func->bus, func->device, save_command); + dbg("Save_used_res of PCI adapter b:d=0x%x:%x, sc=0x%x\n", + func->bus, func->device, save_command); /* Figure out IO and memory base lengths */ for (cloop = PCI_BASE_ADDRESS_0; cloop <= PCI_BASE_ADDRESS_5; cloop += 4) { - pci_bus_read_config_dword (pci_bus, devfn, cloop, &save_base); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &save_base); temp_register = 0xFFFFFFFF; - pci_bus_write_config_dword (pci_bus, devfn, cloop, temp_register); - pci_bus_read_config_dword (pci_bus, devfn, cloop, &temp_register); + pci_bus_write_config_dword(pci_bus, devfn, cloop, temp_register); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &temp_register); - if (!disable) { - pci_bus_write_config_dword (pci_bus, devfn, cloop, save_base); - } + if (!disable) + pci_bus_write_config_dword(pci_bus, devfn, cloop, save_base); if (!temp_register) continue; base = temp_register; - if ((base & PCI_BASE_ADDRESS_SPACE_IO) && (!disable || (save_command & PCI_COMMAND_IO))) { + if ((base & PCI_BASE_ADDRESS_SPACE_IO) && + (!disable || (save_command & PCI_COMMAND_IO))) { /* IO base */ /* set temp_register = amount of IO space requested */ base = base & 0xFFFFFFFCL; base = (~base) + 1; - io_node = (struct pci_resource *) kmalloc(sizeof (struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof (struct pci_resource), + GFP_KERNEL); if (!io_node) return -ENOMEM; io_node->base = (ulong)save_base & PCI_BASE_ADDRESS_IO_MASK; io_node->length = (ulong)base; - dbg("sur adapter: IO bar=0x%x(length=0x%x)\n", io_node->base, io_node->length); + dbg("sur adapter: IO bar=0x%x(length=0x%x)\n", + io_node->base, io_node->length); io_node->next = func->io_head; func->io_head = io_node; @@ -594,11 +629,13 @@ char *res_type_str = "PMEM"; u32 temp_register2; - t_mem_node = (struct pci_resource *) kmalloc(sizeof (struct pci_resource), GFP_KERNEL); + t_mem_node = kmalloc(sizeof (struct pci_resource), + GFP_KERNEL); if (!t_mem_node) return -ENOMEM; - if (!(base & PCI_BASE_ADDRESS_MEM_PREFETCH) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { + if (!(base & PCI_BASE_ADDRESS_MEM_PREFETCH) && + (!disable || (save_command & PCI_COMMAND_MEMORY))) { prefetchable = 0; mem_node = t_mem_node; res_type_str++; @@ -613,16 +650,20 @@ if (prefetchable) { p_mem_node->base = (ulong)save_base & PCI_BASE_ADDRESS_MEM_MASK; p_mem_node->length = (ulong)base; - dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", res_type_str, - p_mem_node->base, p_mem_node->length); + dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", + res_type_str, + p_mem_node->base, + p_mem_node->length); p_mem_node->next = func->p_mem_head; func->p_mem_head = p_mem_node; } else { mem_node->base = (ulong)save_base & PCI_BASE_ADDRESS_MEM_MASK; mem_node->length = (ulong)base; - dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", res_type_str, - mem_node->base, mem_node->length); + dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", + res_type_str, + mem_node->base, + mem_node->length); mem_node->next = func->mem_head; func->mem_head = mem_node; @@ -642,16 +683,20 @@ if (prefetchable) { p_mem_node->base = base64 & PCI_BASE_ADDRESS_MEM_MASK; p_mem_node->length = base; - dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", res_type_str, - p_mem_node->base, p_mem_node->length); + dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", + res_type_str, + p_mem_node->base, + p_mem_node->length); p_mem_node->next = func->p_mem_head; func->p_mem_head = p_mem_node; } else { mem_node->base = base64 & PCI_BASE_ADDRESS_MEM_MASK; mem_node->length = base; - dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", res_type_str, - mem_node->base, mem_node->length); + dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", + res_type_str, + mem_node->base, + mem_node->length); mem_node->next = func->mem_head; func->mem_head = mem_node; @@ -659,13 +704,15 @@ cloop += 4; break; default: - dbg("asur: reserved BAR type=0x%x\n", temp_register); + dbg("asur: reserved BAR type=0x%x\n", + temp_register); break; } } } /* End of base register loop */ } else { /* Some other unknown header type */ - dbg("Save_used_res of PCI unknown type b:d=0x%x:%x. skip.\n", func->bus, func->device); + dbg("Save_used_res of PCI unknown type b:d=0x%x:%x. skip.\n", + func->bus, func->device); } /* find the next device in this slot */ @@ -674,10 +721,29 @@ func = pciehp_slot_find(func->bus, func->device, index++); } - return(0); + return 0; } +/** + * kfree_resource_list: release memory of all list members + * @res: resource list to free + */ +static inline void +return_resource_list(struct pci_resource **func, struct pci_resource **res) +{ + struct pci_resource *node; + struct pci_resource *t_node; + + node = *func; + *func = NULL; + while (node) { + t_node = node->next; + return_resource(res, node); + node = t_node; + } +} + /* * pciehp_return_board_resources * @@ -686,95 +752,40 @@ * * returns 0 if success */ -int pciehp_return_board_resources(struct pci_func * func, struct resource_lists * resources) +int pciehp_return_board_resources(struct pci_func * func, + struct resource_lists * resources) { - int rc = 0; - struct pci_resource *node; - struct pci_resource *t_node; + int rc; + dbg("%s\n", __FUNCTION__); if (!func) - return(1); + return 1; - node = func->io_head; - func->io_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->io_head), node); - node = t_node; - } + return_resource_list(&(func->io_head),&(resources->io_head)); + return_resource_list(&(func->mem_head),&(resources->mem_head)); + return_resource_list(&(func->p_mem_head),&(resources->p_mem_head)); + return_resource_list(&(func->bus_head),&(resources->bus_head)); - node = func->mem_head; - func->mem_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->mem_head), node); - node = t_node; - } - - node = func->p_mem_head; - func->p_mem_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->p_mem_head), node); - node = t_node; - } - - node = func->bus_head; - func->bus_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->bus_head), node); - node = t_node; - } - - rc |= pciehp_resource_sort_and_combine(&(resources->mem_head)); + rc = pciehp_resource_sort_and_combine(&(resources->mem_head)); rc |= pciehp_resource_sort_and_combine(&(resources->p_mem_head)); rc |= pciehp_resource_sort_and_combine(&(resources->io_head)); rc |= pciehp_resource_sort_and_combine(&(resources->bus_head)); - return(rc); + return rc; } - -/* - * pciehp_destroy_resource_list - * - * Puts node back in the resource list pointed to by head +/** + * kfree_resource_list: release memory of all list members + * @res: resource list to free */ -void pciehp_destroy_resource_list (struct resource_lists * resources) +static inline void +kfree_resource_list(struct pci_resource **r) { struct pci_resource *res, *tres; - res = resources->io_head; - resources->io_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->mem_head; - resources->mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->p_mem_head; - resources->p_mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->bus_head; - resources->bus_head = NULL; + res = *r; + *r = NULL; while (res) { tres = res; @@ -783,50 +794,26 @@ } } - -/* - * pciehp_destroy_board_resources - * - * Puts node back in the resource list pointed to by head +/** + * pciehp_destroy_resource_list: put node back in the resource list + * @resources: list to put nodes back */ -void pciehp_destroy_board_resources (struct pci_func * func) +void pciehp_destroy_resource_list(struct resource_lists * resources) { - struct pci_resource *res, *tres; - - res = func->io_head; - func->io_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->mem_head; - func->mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->p_mem_head; - func->p_mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->bus_head; - func->bus_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + kfree_resource_list(&(resources->io_head)); + kfree_resource_list(&(resources->mem_head)); + kfree_resource_list(&(resources->p_mem_head)); + kfree_resource_list(&(resources->bus_head)); } +/** + * pciehp_destroy_board_resources: put node back in the resource list + * @resources: list to put nodes back + */ +void pciehp_destroy_board_resources(struct pci_func * func) +{ + kfree_resource_list(&(func->io_head)); + kfree_resource_list(&(func->mem_head)); + kfree_resource_list(&(func->p_mem_head)); + kfree_resource_list(&(func->bus_head)); +} diff -Nru a/drivers/pci/hotplug/pciehprm.h b/drivers/pci/hotplug/pciehprm.h --- a/drivers/pci/hotplug/pciehprm.h Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/pciehprm.h Tue May 18 23:38:09 2004 @@ -37,7 +37,6 @@ int pciehprm_init(enum php_ctlr_type ct); void pciehprm_cleanup(void); int pciehprm_print_pirt(void); -void *pciehprm_get_slot(struct slot *slot); int pciehprm_find_available_resources(struct controller *ctrl); int pciehprm_set_hpp(struct controller *ctrl, struct pci_func *func, u8 card_type); void pciehprm_enable_card(struct controller *ctrl, struct pci_func *func, u8 card_type); diff -Nru a/drivers/pci/hotplug/pciehprm_acpi.c b/drivers/pci/hotplug/pciehprm_acpi.c --- a/drivers/pci/hotplug/pciehprm_acpi.c Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/pciehprm_acpi.c Tue May 18 23:38:09 2004 @@ -1301,6 +1301,7 @@ } +#if 0 void * pciehprm_get_slot(struct slot *slot) { struct acpi_bridge *ab = acpi_bridges_head; @@ -1312,6 +1313,7 @@ return (void *)aps; } +#endif static void pciehprm_dump_func_res( struct pci_func *fun) { diff -Nru a/drivers/pci/hotplug/pciehprm_nonacpi.c b/drivers/pci/hotplug/pciehprm_nonacpi.c --- a/drivers/pci/hotplug/pciehprm_nonacpi.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/pciehprm_nonacpi.c Tue May 18 23:38:05 2004 @@ -52,11 +52,6 @@ return 0; } -void * pciehprm_get_slot(struct slot *slot) -{ - return NULL; -} - int pciehprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) { diff -Nru a/drivers/pci/hotplug/pcihp_skeleton.c b/drivers/pci/hotplug/pcihp_skeleton.c --- a/drivers/pci/hotplug/pcihp_skeleton.c Tue May 18 23:38:07 2004 +++ b/drivers/pci/hotplug/pcihp_skeleton.c Tue May 18 23:38:07 2004 @@ -30,16 +30,14 @@ #include #include +#include #include #include #include #include #include "pci_hotplug.h" - -#define SLOT_MAGIC 0x67267322 struct slot { - u32 magic; u8 number; struct hotplug_slot *hotplug_slot; struct list_head slot_list; @@ -47,11 +45,7 @@ static LIST_HEAD(slot_list); -#if !defined(CONFIG_HOTPLUG_PCI_SKELETON_MODULE) - #define MY_NAME "pcihp_skeleton" -#else - #define MY_NAME THIS_MODULE->name -#endif +#define MY_NAME "pcihp_skeleton" #define dbg(format, arg...) \ do { \ @@ -69,14 +63,14 @@ static int debug; static int num_slots; -#define DRIVER_VERSION "0.2" +#define DRIVER_VERSION "0.3" #define DRIVER_AUTHOR "Greg Kroah-Hartman " #define DRIVER_DESC "Hot Plug PCI Controller Skeleton Driver" MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, 644); MODULE_PARM_DESC(debug, "Debugging mode enabled or not"); static int enable_slot (struct hotplug_slot *slot); @@ -100,50 +94,12 @@ .get_adapter_status = get_adapter_status, }; - -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int slot_paranoia_check (struct slot *slot, const char *function) -{ - if (!slot) { - dbg("%s - slot == NULL", function); - return -1; - } - if (slot->magic != SLOT_MAGIC) { - dbg("%s - bad magic number for slot", function); - return -1; - } - if (!slot->hotplug_slot) { - dbg("%s - slot->hotplug_slot == NULL!", function); - return -1; - } - return 0; -} - -static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function) -{ - struct slot *slot; - - if (!hotplug_slot) { - dbg("%s - hotplug_slot == NULL\n", function); - return NULL; - } - - slot = (struct slot *)hotplug_slot->private; - if (slot_paranoia_check (slot, function)) - return NULL; - return slot; -} - - -static int enable_slot (struct hotplug_slot *hotplug_slot) +static int enable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - - dbg ("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); + + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* * Fill in code here to enable the specified slot @@ -153,15 +109,12 @@ } -static int disable_slot (struct hotplug_slot *hotplug_slot) +static int disable_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - - dbg ("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); + + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* * Fill in code here to disable the specified slot @@ -170,15 +123,12 @@ return retval; } -static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status) +static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - - dbg ("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); + + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); switch (status) { case 0: @@ -198,32 +148,30 @@ return retval; } -static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value) +static int hardware_test(struct hotplug_slot *hotplug_slot, u32 value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - - dbg ("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); - err ("No hardware tests are defined for this driver"); - retval = -ENODEV; + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); + + switch (value) { + case 0: + /* Specify a test here */ + break; + case 1: + /* Specify another test here */ + break; + } - /* Or you can specify a test if you want to */ - return retval; } -static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* @@ -234,14 +182,11 @@ return retval; } -static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* @@ -252,14 +197,11 @@ return retval; } -static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* @@ -270,14 +212,11 @@ return retval; } -static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value) +static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value) { - struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); + struct slot *slot = hotplug_slot->private; int retval = 0; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); /* @@ -288,13 +227,9 @@ return retval; } -static void release_slots(struct hotplug_slot *hotplug_slot) +static void release_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - int retval = 0; - - if (slot == NULL) - return -ENODEV; + struct slot *slot = hotplug_slot->private; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); kfree(slot->hotplug_slot->info); @@ -304,22 +239,26 @@ } #define SLOT_NAME_SIZE 10 -static void make_slot_name (struct slot *slot) +static void make_slot_name(struct slot *slot) { /* * Stupid way to make a filename out of the slot name. * replace this if your hardware provides a better way to name slots. */ - snprintf (slot->hotplug_slot->name, SLOT_NAME_SIZE, "%d", slot->number); + snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "%d", slot->number); } -static int init_slots (void) +/** + * init_slots - initialize 'struct slot' structures for each slot + * + */ +static int __init init_slots(void) { struct slot *slot; struct hotplug_slot *hotplug_slot; struct hotplug_slot_info *info; char *name; - int retval = 0; + int retval = -ENOMEM; int i; /* @@ -327,43 +266,34 @@ * with the pci_hotplug subsystem. */ for (i = 0; i < num_slots; ++i) { - slot = kmalloc (sizeof (struct slot), GFP_KERNEL); + slot = kmalloc(sizeof(struct slot), GFP_KERNEL); if (!slot) - return -ENOMEM; + goto error; memset(slot, 0, sizeof(struct slot)); - hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL); - if (!hotplug_slot) { - kfree (slot); - return -ENOMEM; - } + hotplug_slot = kmalloc(sizeof(struct hotplug_slot), + GFP_KERNEL); + if (!hotplug_slot) + goto error_slot; memset(hotplug_slot, 0, sizeof (struct hotplug_slot)); slot->hotplug_slot = hotplug_slot; - info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!info) { - kfree (hotplug_slot); - kfree (slot); - return -ENOMEM; - } + info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL); + if (!info) + goto error_hpslot; memset(info, 0, sizeof (struct hotplug_slot_info)); hotplug_slot->info = info; - name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL); - if (!name) { - kfree (info); - kfree (hotplug_slot); - kfree (slot); - return -ENOMEM; - } + name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL); + if (!name) + goto error_info; hotplug_slot->name = name; - slot->magic = SLOT_MAGIC; slot->number = i; hotplug_slot->private = slot; hotplug_slot->release = &release_slot; - make_slot_name (slot); + make_slot_name(slot); hotplug_slot->ops = &skel_hotplug_slot_ops; /* @@ -375,25 +305,31 @@ info->latch_status = get_latch_status(slot); info->adapter_status = get_adapter_status(slot); - dbg ("registering slot %d\n", i); - retval = pci_hp_register (slot->hotplug_slot); + dbg("registering slot %d\n", i); + retval = pci_hp_register(slot->hotplug_slot); if (retval) { - err ("pci_hp_register failed with error %d\n", retval); - kfree (info); - kfree (name); - kfree (hotplug_slot); - kfree (slot); - return retval; + err("pci_hp_register failed with error %d\n", retval); + goto error_name; } /* add slot to our internal list */ - list_add (&slot->slot_list, &slot_list); + list_add(&slot->slot_list, &slot_list); } + return 0; +error_name: + kfree(name); +error_info: + kfree(info); +error_hpslot: + kfree(hotplug_slot); +error_slot: + kfree(slot); +error: return retval; } -static void cleanup_slots(void) +static void __exit cleanup_slots(void) { struct list_head *tmp; struct list_head *next; @@ -404,10 +340,10 @@ * Memory will be freed in release_slot() callback after slot's * lifespan is finished. */ - list_for_each_safe (tmp, next, &slot_list) { - slot = list_entry (tmp, struct slot, slot_list); - list_del (&slot->slot_list); - pci_hp_deregister (slot->hotplug_slot); + list_for_each_safe(tmp, next, &slot_list) { + slot = list_entry(tmp, struct slot, slot_list); + list_del(&slot->slot_list); + pci_hp_deregister(slot->hotplug_slot); } } @@ -415,20 +351,16 @@ { int retval; + info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); /* * Do specific initialization stuff for your driver here - * Like initilizing your controller hardware (if any) and + * Like initializing your controller hardware (if any) and * determining the number of slots you have in the system * right now. */ num_slots = 5; - retval = init_slots(); - if (retval) - return retval; - - info (DRIVER_DESC " version: " DRIVER_VERSION "\n"); - return 0; + return init_slots(); } static void __exit pcihp_skel_exit(void) @@ -441,4 +373,3 @@ module_init(pcihp_skel_init); module_exit(pcihp_skel_exit); - diff -Nru a/drivers/pci/hotplug/rpadlpar_core.c b/drivers/pci/hotplug/rpadlpar_core.c --- a/drivers/pci/hotplug/rpadlpar_core.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/rpadlpar_core.c Tue May 18 23:38:08 2004 @@ -47,15 +47,13 @@ { struct device_node *child; struct device_node *parent = of_find_node_by_name(NULL, "vdevice"); + char *loc_code; if (!parent) return NULL; - for (child = of_get_next_child(parent, NULL); + for (child = of_get_next_child(parent, NULL); child; child = of_get_next_child(parent, child)) { - - char *loc_code; - loc_code = get_property(child, "ibm,loc-code", NULL); if (loc_code && !strcmp(loc_code, drc_name)) return child; @@ -309,12 +307,8 @@ */ int dlpar_remove_pci_slot(struct slot *slot, char *drc_name) { - struct device_node *dn = find_php_slot_pci_node(drc_name); struct pci_dev *bridge_dev; - if (!dn) - return -ENODEV; - bridge_dev = slot->bridge; if (!bridge_dev) { printk(KERN_ERR "%s: unexpected null bridge device\n", @@ -358,13 +352,19 @@ if (down_interruptible(&rpadlpar_sem)) return -ERESTARTSYS; - + + if (!find_php_slot_vio_node(drc_name) && + !find_php_slot_pci_node(drc_name)) { + rc = -ENODEV; + goto exit; + } + slot = find_slot(drc_name); if (!slot) { rc = -EINVAL; goto exit; } - + switch (slot->dev_type) { case PCI_DEV: rc = dlpar_remove_pci_slot(slot, drc_name); diff -Nru a/drivers/pci/hotplug/rpaphp.h b/drivers/pci/hotplug/rpaphp.h --- a/drivers/pci/hotplug/rpaphp.h Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/rpaphp.h Tue May 18 23:38:06 2004 @@ -62,8 +62,6 @@ #define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg) #define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg) -#define SLOT_MAGIC 0x67267322 - /* slot types */ #define VIO_DEV 1 #define PCI_DEV 2 @@ -79,7 +77,6 @@ * struct slot - slot information for each *physical* slot */ struct slot { - u32 magic; int state; u32 index; u32 type; diff -Nru a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c --- a/drivers/pci/hotplug/rpaphp_core.c Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/rpaphp_core.c Tue May 18 23:38:09 2004 @@ -54,7 +54,7 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -module_param(debug, int, 0644); +module_param(debug, bool, 0644); static int enable_slot(struct hotplug_slot *slot); static int disable_slot(struct hotplug_slot *slot); @@ -63,7 +63,6 @@ static int get_attention_status(struct hotplug_slot *slot, u8 * value); static int get_adapter_status(struct hotplug_slot *slot, u8 * value); static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value); -static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value); struct hotplug_slot_ops rpaphp_hotplug_slot_ops = { .owner = THIS_MODULE, @@ -74,18 +73,8 @@ .get_attention_status = get_attention_status, .get_adapter_status = get_adapter_status, .get_max_bus_speed = get_max_bus_speed, - .get_cur_bus_speed = get_cur_bus_speed, }; -static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function) -{ - if (!hotplug_slot) { - dbg("%s - hotplug_slot == NULL\n", function); - return NULL; - } - return (struct slot *)hotplug_slot->private; -} - static int rpaphp_get_attention_status(struct slot *slot) { return slot->hotplug_slot->info->attention_status; @@ -100,11 +89,8 @@ */ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 value) { - int retval = 0; - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + int retval; + struct slot *slot = (struct slot *)hotplug_slot->private; down(&rpaphp_sem); switch (value) { @@ -136,10 +122,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 * value) { int retval; - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = (struct slot *)hotplug_slot->private; down(&rpaphp_sem); retval = rpaphp_get_power_status(slot, value); @@ -155,10 +138,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 * value) { int retval = 0; - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = (struct slot *)hotplug_slot->private; down(&rpaphp_sem); *value = rpaphp_get_attention_status(slot); @@ -168,11 +148,9 @@ static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 * value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); + struct slot *slot = (struct slot *)hotplug_slot->private; int retval = 0; - if (slot == NULL) - return -ENODEV; down(&rpaphp_sem); /* have to go through this */ switch (slot->dev_type) { @@ -191,10 +169,7 @@ static int get_max_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) { - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = (struct slot *)hotplug_slot->private; down(&rpaphp_sem); switch (slot->type) { @@ -231,18 +206,6 @@ return 0; } -/* return dummy value because not sure if PRA provides any method... */ -static int get_cur_bus_speed(struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value) -{ - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; - - *value = PCI_SPEED_UNKNOWN; - return 0; -} - int rpaphp_remove_slot(struct slot *slot) { int retval = 0; @@ -268,24 +231,24 @@ { *indexes = (int *) get_property(dn, "ibm,drc-indexes", NULL); if (!*indexes) - return (0); + return 0; /* &names[1] contains NULL terminated slot names */ *names = (int *) get_property(dn, "ibm,drc-names", NULL); if (!*names) - return (0); + return 0; /* &types[1] contains NULL terminated slot types */ *types = (int *) get_property(dn, "ibm,drc-types", NULL); if (!*types) - return (0); + return 0; /* power_domains[1...n] are the slot power domains */ *power_domains = (int *) get_property(dn, "ibm,drc-power-domains", NULL); if (!*power_domains) - return (0); + return 0; if (strcmp(dn->name, "pci") == 0 && - !get_property(dn, "ibm,fw-pci-hot-plug-ctrl", NULL)) - return (0); - return (1); + !get_property(dn, "ibm,fw-pci-hot-plug-ctrl", NULL)) + return 0; + return 1; } static inline int is_vdevice_root(struct device_node *dn) @@ -293,10 +256,10 @@ return !strcmp(dn->name, "vdevice"); } -/************************************* - * Add Hot Plug slot(s) to sysfs +/** + * rpaphp_add_slot: Add Hot Plug slot(s) to sysfs * - ************************************/ + */ int rpaphp_add_slot(struct device_node *dn) { struct slot *slot; @@ -320,8 +283,9 @@ name = (char *) &names[1]; type = (char *) &types[1]; for (i = 0; i < indexes[0]; - i++, - name += (strlen(name) + 1), type += (strlen(type) + 1)) { + i++, + name += (strlen(name) + 1), + type += (strlen(type) + 1)) { if (!(slot = alloc_slot_struct(dn, indexes[i + 1], name, power_domains[i + 1]))) { retval = -ENOMEM; @@ -334,38 +298,28 @@ } /* for indexes */ } /* end of PCI device_node */ - exit: +exit: dbg("%s - Exit: num_slots=%d rc[%d]\n", __FUNCTION__, num_slots, retval); return retval; } -/* - * init_slots - initialize 'struct slot' structures for each slot - * - */ -static void init_slots(void) +static int __init init_rpa(void) { struct device_node *dn; - for (dn = find_all_nodes(); dn; dn = dn->next) - rpaphp_add_slot(dn); -} - -static int init_rpa(void) -{ - init_MUTEX(&rpaphp_sem); /* initialize internal data structure etc. */ - init_slots(); + for (dn = find_all_nodes(); dn; dn = dn->next) + rpaphp_add_slot(dn); if (!num_slots) return -ENODEV; return 0; } -static void cleanup_slots(void) +static void __exit cleanup_slots(void) { struct list_head *tmp, *n; struct slot *slot; @@ -400,10 +354,7 @@ static int enable_slot(struct hotplug_slot *hotplug_slot) { int retval = 0; - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = (struct slot *)hotplug_slot->private; if (slot->state == CONFIGURED) { dbg("%s: %s is already enabled\n", __FUNCTION__, slot->name); @@ -431,10 +382,7 @@ static int disable_slot(struct hotplug_slot *hotplug_slot) { int retval; - struct slot *slot = get_slot(hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; + struct slot *slot = (struct slot *)hotplug_slot->private; dbg("%s - Entry: slot[%s]\n", __FUNCTION__, slot->name); diff -Nru a/drivers/pci/hotplug/rpaphp_pci.c b/drivers/pci/hotplug/rpaphp_pci.c --- a/drivers/pci/hotplug/rpaphp_pci.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/rpaphp_pci.c Tue May 18 23:38:05 2004 @@ -30,7 +30,7 @@ struct pci_dev *rpaphp_find_pci_dev(struct device_node *dn) { - struct pci_dev *retval_dev = NULL, *dev = NULL; + struct pci_dev *retval_dev = NULL, *dev; char bus_id[BUS_ID_SIZE]; sprintf(bus_id, "%04x:%02x:%02x.%d",dn->phb->global_number, @@ -57,9 +57,8 @@ struct resource *res = &dev->resource[resource]; struct resource *root = pci_find_parent_resource(dev, res); char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge"; - int err; + int err = -EINVAL; - err = -EINVAL; if (root != NULL) { err = request_resource(root, res); } @@ -117,8 +116,8 @@ return rc; } -/* - * get_pci_adapter_status - get the status of a slot +/** + * get_pci_adapter_status - get the status of a slot * * 0-- slot is empty * 1-- adapter is configured @@ -136,7 +135,7 @@ if (state == PRESENT) { if (!is_init) /* at run-time slot->state can be changed by */ - /* config/unconfig adapter */ + /* config/unconfig adapter */ *value = slot->state; else { if (!slot->dn->child) @@ -154,7 +153,7 @@ *value = state; } - exit: +exit: return rc; } @@ -175,6 +174,7 @@ pci_read_irq_line(dev); for (i = 0; i < PCI_NUM_RESOURCES; i++) { struct resource *r = &dev->resource[i]; + if (r->parent || !r->start || !r->flags) continue; rpaphp_claim_resource(dev, i); @@ -183,7 +183,8 @@ } } -static void rpaphp_pci_config_device(struct pci_bus *pci_bus, struct device_node *dn) +static void +rpaphp_pci_config_device(struct pci_bus *pci_bus, struct device_node *dn) { int num; @@ -192,7 +193,6 @@ rpaphp_fixup_new_pci_devices(pci_bus); pci_bus_add_devices(pci_bus); } - return; } static int rpaphp_pci_config_bridge(struct pci_dev *dev, struct device_node *dn); @@ -201,7 +201,8 @@ rpaphp_pci_config_dn() will recursively configure all devices under the given slot->dn and return the dn's pci_dev. *****************************************************************************/ -static struct pci_dev *rpaphp_pci_config_dn(struct device_node *dn, struct pci_bus *bus) +static struct pci_dev * +rpaphp_pci_config_dn(struct device_node *dn, struct pci_bus *bus) { struct device_node *local; struct pci_dev *dev; @@ -256,16 +257,16 @@ goto exit; } + eeh_add_device_early(slot->dn->child); dev = rpaphp_pci_config_dn(slot->dn, pci_bus); - eeh_add_device(dev); + eeh_add_device_late(dev); } else { /* slot is not enabled */ err("slot doesn't have pci_dev structure\n"); dev = NULL; - goto exit; } - exit: +exit: dbg("Exit %s: pci_dev %s\n", __FUNCTION__, dev ? "found" : "not found"); return dev; } @@ -304,9 +305,9 @@ if (slot->hotplug_slot->info->adapter_status == NOT_VALID) { dbg("%s: NOT_VALID: skip dn->full_name=%s\n", __FUNCTION__, slot->dn->full_name); - return (-1); + return -1; } - return (0); + return 0; } static int setup_pci_slot(struct slot *slot) @@ -317,7 +318,8 @@ dealloc_slot_struct(slot); return 1; } - + + strcpy(slot->name, pci_name(slot->bridge)); /* find slot's pci_dev if it's not empty */ if (slot->hotplug_slot->info->adapter_status == EMPTY) { slot->state = EMPTY; /* slot is empty */ @@ -353,7 +355,7 @@ if (setup_pci_slot(slot)) goto exit_rc; rc = register_slot(slot); - exit_rc: +exit_rc: if (rc) dealloc_slot_struct(slot); return rc; @@ -389,7 +391,7 @@ slot->state = NOT_VALID; retval = -EINVAL; } - exit: +exit: if (slot->state != NOT_VALID) rpaphp_set_attention_status(slot, LED_ON); else diff -Nru a/drivers/pci/hotplug/rpaphp_slot.c b/drivers/pci/hotplug/rpaphp_slot.c --- a/drivers/pci/hotplug/rpaphp_slot.c Tue May 18 23:38:07 2004 +++ b/drivers/pci/hotplug/rpaphp_slot.c Tue May 18 23:38:07 2004 @@ -58,13 +58,10 @@ sysfs_remove_file(&slot->kobj, &hotplug_slot_attr_location.attr); } -/* free up the memory user by a slot */ +/* free up the memory used by a slot */ static void rpaphp_release_slot(struct hotplug_slot *hotplug_slot) { - struct slot *slot = hotplug_slot? (struct slot *) hotplug_slot->private:NULL; - - if (slot == NULL) - return; + struct slot *slot = (struct slot *) hotplug_slot->private; dealloc_slot_struct(slot); } @@ -83,54 +80,47 @@ { struct slot *slot; - dbg("Enter alloc_slot_struct(): dn->full_name=%s drc_index=0x%x drc_name=%s\n", - dn->full_name, drc_index, drc_name); - slot = kmalloc(sizeof (struct slot), GFP_KERNEL); if (!slot) - return (NULL); + goto error_nomem; memset(slot, 0, sizeof (struct slot)); slot->hotplug_slot = kmalloc(sizeof (struct hotplug_slot), GFP_KERNEL); - if (!slot->hotplug_slot) { - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot) + goto error_slot; memset(slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); slot->hotplug_slot->info = kmalloc(sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!slot->hotplug_slot->info) { - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot->info) + goto error_hpslot; memset(slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); slot->hotplug_slot->name = kmalloc(BUS_ID_SIZE + 1, GFP_KERNEL); - if (!slot->hotplug_slot->name) { - kfree(slot->hotplug_slot->info); - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->hotplug_slot->name) + goto error_info; slot->location = kmalloc(strlen(drc_name) + 1, GFP_KERNEL); - if (!slot->location) { - kfree(slot->hotplug_slot->info); - kfree(slot->hotplug_slot->name); - kfree(slot->hotplug_slot); - kfree(slot); - return (NULL); - } + if (!slot->location) + goto error_name; slot->name = slot->hotplug_slot->name; slot->dn = dn; slot->index = drc_index; strcpy(slot->location, drc_name); slot->power_domain = power_domain; - slot->magic = SLOT_MAGIC; slot->hotplug_slot->private = slot; slot->hotplug_slot->ops = &rpaphp_hotplug_slot_ops; slot->hotplug_slot->release = &rpaphp_release_slot; - dbg("Exit alloc_slot_struct(): slot->dn->full_name=%s drc_index=0x%x drc_name=%s\n", - slot->dn->full_name, slot->index, slot->name); - return (slot); + slot->hotplug_slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN; + + return slot; + +error_name: + kfree(slot->hotplug_slot->name); +error_info: + kfree(slot->hotplug_slot->info); +error_hpslot: + kfree(slot->hotplug_slot); +error_slot: + kfree(slot); +error_nomem: + return NULL; } int register_slot(struct slot *slot) @@ -138,13 +128,15 @@ int retval; char *vio_uni_addr = NULL; - dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n", __FUNCTION__, slot->dn->full_name, slot->index, slot->name, slot->power_domain, slot->type); + dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n", + __FUNCTION__, slot->dn->full_name, slot->index, slot->name, + slot->power_domain, slot->type); retval = pci_hp_register(slot->hotplug_slot); if (retval) { err("pci_hp_register failed with error %d\n", retval); rpaphp_release_slot(slot->hotplug_slot); - return (retval); + return retval; } /* create "phy_locatoin" file */ @@ -163,7 +155,7 @@ info("Slot [%s](bus_id=%s) registered\n", slot->name, pci_name(slot->bridge)); num_slots++; - return (0); + return 0; } int rpaphp_get_power_status(struct slot *slot, u8 * value) diff -Nru a/drivers/pci/hotplug/rpaphp_vio.c b/drivers/pci/hotplug/rpaphp_vio.c --- a/drivers/pci/hotplug/rpaphp_vio.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/rpaphp_vio.c Tue May 18 23:38:08 2004 @@ -94,6 +94,7 @@ slot->state = NOT_CONFIGURED; if (setup_vio_hotplug_slot_info(slot)) goto exit_rc; + strcpy(slot->name, slot->dev.vio_dev->dev.bus_id); info("%s: registered VIO device[name=%s vio_dev=%p]\n", __FUNCTION__, slot->name, slot->dev.vio_dev); rc = register_slot(slot); diff -Nru a/drivers/pci/hotplug/shpchp.h b/drivers/pci/hotplug/shpchp.h --- a/drivers/pci/hotplug/shpchp.h Tue May 18 23:38:08 2004 +++ b/drivers/pci/hotplug/shpchp.h Tue May 18 23:38:08 2004 @@ -205,7 +205,6 @@ extern void shpchp_create_ctrl_files (struct controller *ctrl); /* controller functions */ -extern void shpchp_pushbutton_thread(unsigned long event_pointer); extern int shpchprm_find_available_resources(struct controller *ctrl); extern int shpchp_event_start_thread(void); extern void shpchp_event_stop_thread(void); diff -Nru a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c --- a/drivers/pci/hotplug/shpchp_core.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/shpchp_core.c Tue May 18 23:38:05 2004 @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -56,9 +57,9 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(shpchp_debug, "i"); -MODULE_PARM(shpchp_poll_mode, "i"); -MODULE_PARM(shpchp_poll_time, "i"); +module_param(shpchp_debug, bool, 644); +module_param(shpchp_poll_mode, bool, 644); +module_param(shpchp_poll_time, int, 644); MODULE_PARM_DESC(shpchp_debug, "Debugging mode enabled or not"); MODULE_PARM_DESC(shpchp_poll_mode, "Using polling mechanism for hot-plug events or not"); MODULE_PARM_DESC(shpchp_poll_time, "Polling mechanism frequency, in seconds"); @@ -69,7 +70,6 @@ static int set_attention_status (struct hotplug_slot *slot, u8 value); static int enable_slot (struct hotplug_slot *slot); static int disable_slot (struct hotplug_slot *slot); -static int hardware_test (struct hotplug_slot *slot, u32 value); static int get_power_status (struct hotplug_slot *slot, u8 *value); static int get_attention_status (struct hotplug_slot *slot, u8 *value); static int get_latch_status (struct hotplug_slot *slot, u8 *value); @@ -82,22 +82,37 @@ .set_attention_status = set_attention_status, .enable_slot = enable_slot, .disable_slot = disable_slot, - .hardware_test = hardware_test, .get_power_status = get_power_status, .get_attention_status = get_attention_status, - .get_latch_status = get_latch_status, + .get_latch_status = get_latch_status, .get_adapter_status = get_adapter_status, - .get_max_bus_speed = get_max_bus_speed, - .get_cur_bus_speed = get_cur_bus_speed, + .get_max_bus_speed = get_max_bus_speed, + .get_cur_bus_speed = get_cur_bus_speed, }; +/** + * release_slot - free up the memory used by a slot + * @hotplug_slot: slot to free + */ +static void release_slot(struct hotplug_slot *hotplug_slot) +{ + struct slot *slot = (struct slot *)hotplug_slot->private; + + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); + + kfree(slot->hotplug_slot->info); + kfree(slot->hotplug_slot->name); + kfree(slot->hotplug_slot); + kfree(slot); +} + static int init_slots(struct controller *ctrl) { struct slot *new_slot; u8 number_of_slots; u8 slot_device; u32 slot_number, sun; - int result; + int result = -ENOMEM; dbg("%s\n",__FUNCTION__); @@ -108,30 +123,21 @@ while (number_of_slots) { new_slot = (struct slot *) kmalloc(sizeof(struct slot), GFP_KERNEL); if (!new_slot) - return -ENOMEM; + goto error; memset(new_slot, 0, sizeof(struct slot)); new_slot->hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL); - if (!new_slot->hotplug_slot) { - kfree (new_slot); - return -ENOMEM; - } + if (!new_slot->hotplug_slot) + goto error_slot; memset(new_slot->hotplug_slot, 0, sizeof (struct hotplug_slot)); new_slot->hotplug_slot->info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); - if (!new_slot->hotplug_slot->info) { - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } + if (!new_slot->hotplug_slot->info) + goto error_hpslot; memset(new_slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info)); new_slot->hotplug_slot->name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL); - if (!new_slot->hotplug_slot->name) { - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } + if (!new_slot->hotplug_slot->name) + goto error_info; new_slot->magic = SLOT_MAGIC; new_slot->ctrl = ctrl; @@ -139,19 +145,17 @@ new_slot->device = slot_device; new_slot->hpc_ops = ctrl->hpc_ops; - if (shpchprm_get_physical_slot_number(ctrl, &sun, new_slot->bus, new_slot->device)) { - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return -ENOMEM; - } + if (shpchprm_get_physical_slot_number(ctrl, &sun, + new_slot->bus, new_slot->device)) + goto error_name; new_slot->number = sun; new_slot->hp_slot = slot_device - ctrl->slot_device_offset; /* register this slot with the hotplug pci core */ new_slot->hotplug_slot->private = new_slot; - make_slot_name (new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot); + new_slot->hotplug_slot->release = &release_slot; + make_slot_name(new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot); new_slot->hotplug_slot->ops = &shpchp_hotplug_slot_ops; new_slot->hpc_ops->get_power_status(new_slot, &(new_slot->hotplug_slot->info->power_status)); @@ -164,11 +168,7 @@ result = pci_hp_register (new_slot->hotplug_slot); if (result) { err ("pci_hp_register failed with error %d\n", result); - kfree (new_slot->hotplug_slot->info); - kfree (new_slot->hotplug_slot->name); - kfree (new_slot->hotplug_slot); - kfree (new_slot); - return result; + goto error_name; } new_slot->next = ctrl->slot; @@ -179,11 +179,21 @@ slot_number += ctrl->slot_num_inc; } - return(0); -} + return 0; +error_name: + kfree(new_slot->hotplug_slot->name); +error_info: + kfree(new_slot->hotplug_slot->info); +error_hpslot: + kfree(new_slot->hotplug_slot); +error_slot: + kfree(new_slot); +error: + return result; +} -static int cleanup_slots (struct controller * ctrl) +static void cleanup_slots(struct controller *ctrl) { struct slot *old_slot, *next_slot; @@ -192,16 +202,9 @@ while (old_slot) { next_slot = old_slot->next; - pci_hp_deregister (old_slot->hotplug_slot); - kfree(old_slot->hotplug_slot->info); - kfree(old_slot->hotplug_slot->name); - kfree(old_slot->hotplug_slot); - kfree(old_slot); + pci_hp_deregister(old_slot->hotplug_slot); old_slot = next_slot; } - - - return(0); } static int get_ctlr_slot_config(struct controller *ctrl) @@ -216,7 +219,7 @@ rc = shpc_get_ctlr_slot_config(ctrl, &num_ctlr_slots, &first_device_num, &physical_slot_num, &updown, &flags); if (rc) { err("%s: get_ctlr_slot_config fail for b:d (%x:%x)\n", __FUNCTION__, ctrl->bus, ctrl->device); - return (-1); + return -1; } ctrl->num_slots = num_ctlr_slots; @@ -227,7 +230,7 @@ dbg("%s: num_slot(0x%x) 1st_dev(0x%x) psn(0x%x) updown(%d) for b:d (%x:%x)\n", __FUNCTION__, num_ctlr_slots, first_device_num, physical_slot_num, updown, ctrl->bus, ctrl->device); - return (0); + return 0; } @@ -238,15 +241,11 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - if (slot == NULL) - return -ENODEV; - dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); hotplug_slot->info->attention_status = status; slot->hpc_ops->set_attention_status(slot, status); - return 0; } @@ -254,9 +253,6 @@ static int enable_slot (struct hotplug_slot *hotplug_slot) { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -267,30 +263,17 @@ static int disable_slot (struct hotplug_slot *hotplug_slot) { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); return shpchp_disable_slot(slot); } - -static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value) -{ - return 0; -} - - static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value) { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_power_status(slot, value); @@ -304,10 +287,7 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_attention_status(slot, value); @@ -321,10 +301,7 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; - + dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_latch_status(slot, value); @@ -338,14 +315,10 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); retval = slot->hpc_ops->get_adapter_status(slot, value); - if (retval < 0) *value = hotplug_slot->info->adapter_status; @@ -356,9 +329,6 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -373,9 +343,6 @@ { struct slot *slot = get_slot (hotplug_slot, __FUNCTION__); int retval; - - if (slot == NULL) - return -ENODEV; dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name); @@ -531,49 +498,35 @@ return retval; } +static inline void __exit +free_shpchp_res(struct pci_resource *res) +{ + struct pci_resource *tres; + + while (res) { + tres = res; + res = res->next; + kfree(tres); + } +} -static void unload_shpchpd(void) +static void __exit unload_shpchpd(void) { struct pci_func *next; struct pci_func *TempSlot; int loop; struct controller *ctrl; struct controller *tctrl; - struct pci_resource *res; - struct pci_resource *tres; ctrl = shpchp_ctrl_list; while (ctrl) { cleanup_slots(ctrl); - res = ctrl->io_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->p_mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = ctrl->bus_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + free_shpchp_res(ctrl->io_head); + free_shpchp_res(ctrl->mem_head); + free_shpchp_res(ctrl->p_mem_head); + free_shpchp_res(ctrl->bus_head); kfree (ctrl->pci_bus); @@ -589,33 +542,10 @@ for (loop = 0; loop < 256; loop++) { next = shpchp_slot_list[loop]; while (next != NULL) { - res = next->io_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->p_mem_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = next->bus_head; - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + free_shpchp_res(next->io_head); + free_shpchp_res(next->mem_head); + free_shpchp_res(next->p_mem_head); + free_shpchp_res(next->bus_head); TempSlot = next; next = next->next; @@ -697,8 +627,5 @@ info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n"); } - module_init(shpcd_init); module_exit(shpcd_cleanup); - - diff -Nru a/drivers/pci/hotplug/shpchp_ctrl.c b/drivers/pci/hotplug/shpchp_ctrl.c --- a/drivers/pci/hotplug/shpchp_ctrl.c Tue May 18 23:38:09 2004 +++ b/drivers/pci/hotplug/shpchp_ctrl.c Tue May 18 23:38:09 2004 @@ -396,7 +396,7 @@ /* This one isn't an aligned length, so we'll make a new entry * and split it up. */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -530,7 +530,7 @@ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -549,7 +549,7 @@ if (node->length > size) { /* This one is longer than we need so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -630,7 +630,7 @@ if ((max->length - (temp_dword - max->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -648,7 +648,7 @@ if ((max->base + max->length) & (size - 1)) { /* This one isn't end aligned properly at the top so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -669,7 +669,8 @@ for ( i = 0; max_size[i] > size; i++) { if (max->length > max_size[i]) { - split_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), + GFP_KERNEL); if (!split_node) break; /* return (NULL); */ split_node->base = max->base + max_size[i]; @@ -744,7 +745,7 @@ if ((node->length - (temp_dword - node->base)) < size) continue; - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -764,7 +765,7 @@ dbg("%s: too big\n", __FUNCTION__); /* this one is longer than we need so we'll make a new entry and split it up */ - split_node = (struct pci_resource*) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + split_node = kmalloc(sizeof(*split_node), GFP_KERNEL); if (!split_node) return(NULL); @@ -882,7 +883,7 @@ struct pci_func *new_slot; struct pci_func *next; - new_slot = (struct pci_func *) kmalloc(sizeof(struct pci_func), GFP_KERNEL); + new_slot = kmalloc(sizeof(*new_slot), GFP_KERNEL); if (new_slot == NULL) { return(new_slot); @@ -1572,7 +1573,7 @@ retval = p_slot->hpc_ops->check_cmd_status(ctrl); if (retval) { - err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc); + err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, retval); /* Done with exclusive hardware access */ up(&ctrl->crit_sect); return retval; @@ -1795,6 +1796,81 @@ } +/** + * shpchp_pushbutton_thread + * + * Scheduled procedure to handle blocking stuff for the pushbuttons + * Handles all pending events and exits. + * + */ +static void shpchp_pushbutton_thread (unsigned long slot) +{ + struct slot *p_slot = (struct slot *) slot; + u8 getstatus; + int rc; + + pushbutton_pending = 0; + + if (!p_slot) { + dbg("%s: Error! slot NULL\n", __FUNCTION__); + return; + } + + p_slot->hpc_ops->get_power_status(p_slot, &getstatus); + if (getstatus) { + p_slot->state = POWEROFF_STATE; + dbg("In power_down_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); + + if (shpchp_disable_slot(p_slot)) { + /* Wait for exclusive access to hardware */ + down(&p_slot->ctrl->crit_sect); + + /* Turn on the Attention LED */ + rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); + if (rc) { + err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); + return; + } + + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + /* Done with exclusive hardware access */ + up(&p_slot->ctrl->crit_sect); + } + p_slot->state = STATIC_STATE; + } else { + p_slot->state = POWERON_STATE; + dbg("In add_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); + + if (shpchp_enable_slot(p_slot)) { + /* Wait for exclusive access to hardware */ + down(&p_slot->ctrl->crit_sect); + + /* Turn off the green LED */ + rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); + if (rc) { + err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); + return; + } + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + p_slot->hpc_ops->green_led_off(p_slot); + + /* Wait for the command to complete */ + wait_for_ctrl_irq (p_slot->ctrl); + + /* Done with exclusive hardware access */ + up(&p_slot->ctrl->crit_sect); + } + p_slot->state = STATIC_STATE; + } + + return; +} + + /* this is the main worker thread */ static int event_thread(void* data) { @@ -1856,7 +1932,7 @@ struct hotplug_slot_info *info; int result; - info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL); + info = kmalloc(sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; @@ -2011,81 +2087,6 @@ } -/** - * shpchp_pushbutton_thread - * - * Scheduled procedure to handle blocking stuff for the pushbuttons - * Handles all pending events and exits. - * - */ -void shpchp_pushbutton_thread (unsigned long slot) -{ - struct slot *p_slot = (struct slot *) slot; - u8 getstatus; - int rc; - - pushbutton_pending = 0; - - if (!p_slot) { - dbg("%s: Error! slot NULL\n", __FUNCTION__); - return; - } - - p_slot->hpc_ops->get_power_status(p_slot, &getstatus); - if (getstatus) { - p_slot->state = POWEROFF_STATE; - dbg("In power_down_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); - - if (shpchp_disable_slot(p_slot)) { - /* Wait for exclusive access to hardware */ - down(&p_slot->ctrl->crit_sect); - - /* Turn on the Attention LED */ - rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); - if (rc) { - err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); - return; - } - - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ - up(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } else { - p_slot->state = POWERON_STATE; - dbg("In add_board, b:d(%x:%x)\n", p_slot->bus, p_slot->device); - - if (shpchp_enable_slot(p_slot)) { - /* Wait for exclusive access to hardware */ - down(&p_slot->ctrl->crit_sect); - - /* Turn off the green LED */ - rc = p_slot->hpc_ops->set_attention_status(p_slot, 1); - if (rc) { - err("%s: Issue of Set Atten Indicator On command failed\n", __FUNCTION__); - return; - } - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - p_slot->hpc_ops->green_led_off(p_slot); - - /* Wait for the command to complete */ - wait_for_ctrl_irq (p_slot->ctrl); - - /* Done with exclusive hardware access */ - up(&p_slot->ctrl->crit_sect); - } - p_slot->state = STATIC_STATE; - } - - return; -} - - int shpchp_enable_slot (struct slot *p_slot) { u8 getstatus = 0; @@ -2504,22 +2505,18 @@ /* Make copies of the nodes we are going to pass down so that * if there is a problem,we can just use these to free resources */ - hold_bus_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_IO_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); - hold_p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + hold_bus_node = kmalloc(sizeof(*hold_bus_node), GFP_KERNEL); + hold_IO_node = kmalloc(sizeof(*hold_IO_node), GFP_KERNEL); + hold_mem_node = kmalloc(sizeof(*hold_mem_node), GFP_KERNEL); + hold_p_mem_node = kmalloc(sizeof(*hold_p_mem_node), GFP_KERNEL); if (!hold_bus_node || !hold_IO_node || !hold_mem_node || !hold_p_mem_node) { - if (hold_bus_node) - kfree(hold_bus_node); - if (hold_IO_node) - kfree(hold_IO_node); - if (hold_mem_node) - kfree(hold_mem_node); - if (hold_p_mem_node) - kfree(hold_p_mem_node); + kfree(hold_bus_node); + kfree(hold_IO_node); + kfree(hold_mem_node); + kfree(hold_p_mem_node); - return(1); + return 1; } memcpy(hold_bus_node, bus_node, sizeof(struct pci_resource)); @@ -2538,11 +2535,11 @@ /* set IO base and Limit registers */ RES_CHECK(io_node->base, 8); temp_byte = (u8)(io_node->base >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_BASE, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_BASE, temp_byte); RES_CHECK(io_node->base + io_node->length - 1, 8); temp_byte = (u8)((io_node->base + io_node->length - 1) >> 8); - rc = pci_bus_write_config_byte (pci_bus, devfn, PCI_IO_LIMIT, temp_byte); + rc = pci_bus_write_config_byte(pci_bus, devfn, PCI_IO_LIMIT, temp_byte); } else { kfree(hold_IO_node); hold_IO_node = NULL; @@ -2559,17 +2556,17 @@ /* set Mem base and Limit registers */ RES_CHECK(mem_node->base, 16); temp_word = (u32)(mem_node->base >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_BASE, temp_word); RES_CHECK(mem_node->base + mem_node->length - 1, 16); temp_word = (u32)((mem_node->base + mem_node->length - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); } else { temp_word = 0xFFFF; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_BASE, temp_word); temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, temp_word); kfree(hold_mem_node); hold_mem_node = NULL; @@ -2586,17 +2583,17 @@ /* set Pre Mem base and Limit registers */ RES_CHECK(p_mem_node->base, 16); temp_word = (u32)(p_mem_node->base >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); RES_CHECK(p_mem_node->base + p_mem_node->length - 1, 16); temp_word = (u32)((p_mem_node->base + p_mem_node->length - 1) >> 16); - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); } else { temp_word = 0xFFFF; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word); temp_word = 0x0000; - rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); + rc = pci_bus_write_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word); kfree(hold_p_mem_node); hold_p_mem_node = NULL; @@ -2613,7 +2610,8 @@ ID = 0xFFFFFFFF; pci_bus->number = hold_bus_node->base; - pci_bus_read_config_dword (pci_bus, PCI_DEVFN(device, 0), PCI_VENDOR_ID, &ID); + pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), + PCI_VENDOR_ID, &ID); pci_bus->number = func->bus; if (ID != 0xFFFFFFFF) { /* device Present */ diff -Nru a/drivers/pci/hotplug/shpchp_pci.c b/drivers/pci/hotplug/shpchp_pci.c --- a/drivers/pci/hotplug/shpchp_pci.c Tue May 18 23:38:07 2004 +++ b/drivers/pci/hotplug/shpchp_pci.c Tue May 18 23:38:07 2004 @@ -53,10 +53,11 @@ /* Still NULL ? Well then scan for it ! */ if (func->pci_dev == NULL) { num = pci_scan_slot(ctrl->pci_dev->subordinate, PCI_DEVFN(func->device, func->function)); - if (num) + if (num) { dbg("%s: subordiante %p number %x\n", __FUNCTION__, ctrl->pci_dev->subordinate, ctrl->pci_dev->subordinate->number); - pci_bus_add_devices(ctrl->pci_dev->subordinate); + pci_bus_add_devices(ctrl->pci_dev->subordinate); + } func->pci_dev = pci_find_slot(func->bus, PCI_DEVFN(func->device, func->function)); if (func->pci_dev == NULL) { @@ -67,7 +68,7 @@ if (func->pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { pci_read_config_byte(func->pci_dev, PCI_SECONDARY_BUS, &bus); - child = (struct pci_bus*) pci_add_new_bus(func->pci_dev->bus, (func->pci_dev), bus); + child = pci_add_new_bus(func->pci_dev->bus, (func->pci_dev), bus); pci_do_scan_bus(child); } @@ -81,10 +82,12 @@ int rc = 0; int j; - dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus, func->device, func->function); + dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus, + func->device, func->function); for (j=0; j<8 ; j++) { - struct pci_dev* temp = pci_find_slot(func->bus, (func->device << 3) | j); + struct pci_dev* temp = pci_find_slot(func->bus, + (func->device << 3) | j); if (temp) { pci_remove_bus_device(temp); } @@ -163,12 +166,14 @@ int is_hot_plug = num_ctlr_slots || first_device_num; struct pci_bus lpci_bus, *pci_bus; - dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, num_ctlr_slots, first_device_num); + dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, + num_ctlr_slots, first_device_num); memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus)); pci_bus = &lpci_bus; - dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, num_ctlr_slots, first_device_num); + dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__, + num_ctlr_slots, first_device_num); /* Decide which slots are supported */ if (is_hot_plug) { @@ -182,20 +187,24 @@ LastSupported = 0x1F; } - dbg("FirstSupported = %d, LastSupported = %d\n", FirstSupported, LastSupported); + dbg("FirstSupported = %d, LastSupported = %d\n", FirstSupported, + LastSupported); /* Save PCI configuration space for all devices in supported slots */ pci_bus->number = busnumber; for (device = FirstSupported; device <= LastSupported; device++) { ID = 0xFFFFFFFF; - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), PCI_VENDOR_ID, &ID); + rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0), + PCI_VENDOR_ID, &ID); if (ID != 0xFFFFFFFF) { /* device in slot */ - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), 0x0B, &class_code); + rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), + 0x0B, &class_code); if (rc) return rc; - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), PCI_HEADER_TYPE, &header_type); + rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0), + PCI_HEADER_TYPE, &header_type); if (rc) return rc; @@ -216,7 +225,8 @@ /* Recurse the subordinate bus * get the subordinate bus number */ - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), PCI_SECONDARY_BUS, &secondary_bus); if (rc) { return rc; @@ -255,13 +265,17 @@ new_slot->switch_save = 0x10; /* In case of unsupported board */ new_slot->status = DevError; - new_slot->pci_dev = pci_find_slot(new_slot->bus, (new_slot->device << 3) | new_slot->function); + new_slot->pci_dev = pci_find_slot(new_slot->bus, + (new_slot->device << 3) | new_slot->function); dbg("new_slot->pci_dev = %p\n", new_slot->pci_dev); for (cloop = 0; cloop < 0x20; cloop++) { - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, function), - cloop << 2, (u32 *) & (new_slot->config_space [cloop])); - /* dbg("new_slot->config_space[%x] = %x\n", cloop, new_slot->config_space[cloop]); */ + rc = pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(device, function), + cloop << 2, + (u32 *) &(new_slot->config_space [cloop])); + /* dbg("new_slot->config_space[%x] = %x\n", + cloop, new_slot->config_space[cloop]); */ if (rc) return rc; } @@ -275,23 +289,28 @@ */ while ((function < max_functions)&&(!stop_it)) { - rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, function), PCI_VENDOR_ID, &ID); + rc = pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(device, function), + PCI_VENDOR_ID, &ID); if (ID == 0xFFFFFFFF) { /* nothing there. */ function++; dbg("Nothing there\n"); } else { /* Something there */ - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), 0x0B, &class_code); if (rc) return rc; - rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, function), + rc = pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(device, function), PCI_HEADER_TYPE, &header_type); if (rc) return rc; - dbg("class_code = %x, header_type = %x\n", class_code, header_type); + dbg("class_code = %x, header_type = %x\n", + class_code, header_type); stop_it++; } } @@ -328,7 +347,7 @@ * * returns 0 if success */ -int shpchp_save_slot_config (struct controller *ctrl, struct pci_func * new_slot) +int shpchp_save_slot_config(struct controller *ctrl, struct pci_func * new_slot) { int rc; u8 class_code; @@ -347,12 +366,15 @@ ID = 0xFFFFFFFF; - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_VENDOR_ID, &ID); + pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, 0), + PCI_VENDOR_ID, &ID); if (ID != 0xFFFFFFFF) { /* device in slot */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), 0x0B, &class_code); + pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), + 0x0B, &class_code); - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), PCI_HEADER_TYPE, &header_type); + pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0), + PCI_HEADER_TYPE, &header_type); if (header_type & 0x80) /* Multi-function device */ max_functions = 8; @@ -364,7 +386,8 @@ do { if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ /* Recurse the subordinate bus */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), PCI_SECONDARY_BUS, &secondary_bus); sub_bus = (int) secondary_bus; @@ -373,15 +396,17 @@ rc = shpchp_save_config(ctrl, sub_bus, 0, 0); if (rc) - return(rc); + return rc; } /* End of IF */ new_slot->status = 0; for (cloop = 0; cloop < 0x20; cloop++) { - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, function), - cloop << 2, (u32 *) & (new_slot->config_space [cloop])); + pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(new_slot->device, function), + cloop << 2, + (u32 *) &(new_slot->config_space [cloop])); } function++; @@ -393,15 +418,20 @@ */ while ((function < max_functions) && (!stop_it)) { - pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, function), PCI_VENDOR_ID, &ID); + pci_bus_read_config_dword(pci_bus, + PCI_DEVFN(new_slot->device, function), + PCI_VENDOR_ID, &ID); if (ID == 0xFFFFFFFF) { /* nothing there. */ function++; } else { /* Something there */ - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), 0x0B, &class_code); - - pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, function), PCI_HEADER_TYPE, - &header_type); + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), + 0x0B, &class_code); + + pci_bus_read_config_byte(pci_bus, + PCI_DEVFN(new_slot->device, function), + PCI_HEADER_TYPE, &header_type); stop_it++; } @@ -410,10 +440,10 @@ } while (function < max_functions); } /* End of IF (device in slot?) */ else { - return(2); + return 2; } - return(0); + return 0; } @@ -429,7 +459,7 @@ * it loops for all functions of the slot and disables them. * else, it just get resources of the function and return. */ -int shpchp_save_used_resources (struct controller *ctrl, struct pci_func *func, int disable) +int shpchp_save_used_resources(struct controller *ctrl, struct pci_func *func, int disable) { u8 cloop; u8 header_type; @@ -461,7 +491,7 @@ devfn = PCI_DEVFN(func->device, func->function); /* Save the command register */ - pci_bus_read_config_word (pci_bus, devfn, PCI_COMMAND, &save_command); + pci_bus_read_config_word(pci_bus, devfn, PCI_COMMAND, &save_command); if (disable) { /* disable card */ @@ -470,20 +500,22 @@ } /* Check for Bridge */ - pci_bus_read_config_byte (pci_bus, devfn, PCI_HEADER_TYPE, &header_type); + pci_bus_read_config_byte(pci_bus, devfn, PCI_HEADER_TYPE, &header_type); if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) { /* PCI-PCI Bridge */ - dbg("Save_used_res of PCI bridge b:d=0x%x:%x, sc=0x%x\n", func->bus, func->device, save_command); + dbg("Save_used_res of PCI bridge b:d=0x%x:%x, sc=0x%x\n", + func->bus, func->device, save_command); if (disable) { /* Clear Bridge Control Register */ command = 0x00; pci_bus_write_config_word(pci_bus, devfn, PCI_BRIDGE_CONTROL, command); } - pci_bus_read_config_byte (pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); - pci_bus_read_config_byte (pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SECONDARY_BUS, &secondary_bus); + pci_bus_read_config_byte(pci_bus, devfn, PCI_SUBORDINATE_BUS, &temp_byte); - bus_node =(struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + bus_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!bus_node) return -ENOMEM; @@ -494,13 +526,14 @@ func->bus_head = bus_node; /* Save IO base and Limit registers */ - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_BASE, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_BASE, &temp_byte); base = temp_byte; - pci_bus_read_config_byte (pci_bus, devfn, PCI_IO_LIMIT, &temp_byte); + pci_bus_read_config_byte(pci_bus, devfn, PCI_IO_LIMIT, &temp_byte); length = temp_byte; if ((base <= length) && (!disable || (save_command & PCI_COMMAND_IO))) { - io_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!io_node) return -ENOMEM; @@ -512,11 +545,12 @@ } /* Save memory base and Limit registers */ - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { - mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + mem_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!mem_node) return -ENOMEM; @@ -527,11 +561,12 @@ func->mem_head = mem_node; } /* Save prefetchable memory base and Limit registers */ - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); - pci_bus_read_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_BASE, &w_base); + pci_bus_read_config_word(pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, &w_length); if ((w_base <= w_length) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { - p_mem_node = (struct pci_resource *) kmalloc(sizeof(struct pci_resource), GFP_KERNEL); + p_mem_node = kmalloc(sizeof(struct pci_resource), + GFP_KERNEL); if (!p_mem_node) return -ENOMEM; @@ -542,38 +577,41 @@ func->p_mem_head = p_mem_node; } } else if ((header_type & 0x7F) == PCI_HEADER_TYPE_NORMAL) { - dbg("Save_used_res of PCI adapter b:d=0x%x:%x, sc=0x%x\n", func->bus, func->device, save_command); + dbg("Save_used_res of PCI adapter b:d=0x%x:%x, sc=0x%x\n", + func->bus, func->device, save_command); /* Figure out IO and memory base lengths */ for (cloop = PCI_BASE_ADDRESS_0; cloop <= PCI_BASE_ADDRESS_5; cloop += 4) { - pci_bus_read_config_dword (pci_bus, devfn, cloop, &save_base); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &save_base); temp_register = 0xFFFFFFFF; - pci_bus_write_config_dword (pci_bus, devfn, cloop, temp_register); - pci_bus_read_config_dword (pci_bus, devfn, cloop, &temp_register); + pci_bus_write_config_dword(pci_bus, devfn, cloop, temp_register); + pci_bus_read_config_dword(pci_bus, devfn, cloop, &temp_register); - if (!disable) { - pci_bus_write_config_dword (pci_bus, devfn, cloop, save_base); - } + if (!disable) + pci_bus_write_config_dword(pci_bus, devfn, cloop, save_base); if (!temp_register) continue; base = temp_register; - if ((base & PCI_BASE_ADDRESS_SPACE_IO) && (!disable || (save_command & PCI_COMMAND_IO))) { + if ((base & PCI_BASE_ADDRESS_SPACE_IO) && + (!disable || (save_command & PCI_COMMAND_IO))) { /* IO base */ /* set temp_register = amount of IO space requested */ base = base & 0xFFFFFFFCL; base = (~base) + 1; - io_node = (struct pci_resource *) kmalloc(sizeof (struct pci_resource), GFP_KERNEL); + io_node = kmalloc(sizeof (struct pci_resource), + GFP_KERNEL); if (!io_node) return -ENOMEM; io_node->base = (ulong)save_base & PCI_BASE_ADDRESS_IO_MASK; io_node->length = (ulong)base; - dbg("sur adapter: IO bar=0x%x(length=0x%x)\n", io_node->base, io_node->length); + dbg("sur adapter: IO bar=0x%x(length=0x%x)\n", + io_node->base, io_node->length); io_node->next = func->io_head; func->io_head = io_node; @@ -583,11 +621,13 @@ char *res_type_str = "PMEM"; u32 temp_register2; - t_mem_node = (struct pci_resource *) kmalloc(sizeof (struct pci_resource), GFP_KERNEL); + t_mem_node = kmalloc(sizeof (struct pci_resource), + GFP_KERNEL); if (!t_mem_node) return -ENOMEM; - if (!(base & PCI_BASE_ADDRESS_MEM_PREFETCH) && (!disable || (save_command & PCI_COMMAND_MEMORY))) { + if (!(base & PCI_BASE_ADDRESS_MEM_PREFETCH) && + (!disable || (save_command & PCI_COMMAND_MEMORY))) { prefetchable = 0; mem_node = t_mem_node; res_type_str++; @@ -602,16 +642,20 @@ if (prefetchable) { p_mem_node->base = (ulong)save_base & PCI_BASE_ADDRESS_MEM_MASK; p_mem_node->length = (ulong)base; - dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", res_type_str, - p_mem_node->base, p_mem_node->length); + dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", + res_type_str, + p_mem_node->base, + p_mem_node->length); p_mem_node->next = func->p_mem_head; func->p_mem_head = p_mem_node; } else { mem_node->base = (ulong)save_base & PCI_BASE_ADDRESS_MEM_MASK; mem_node->length = (ulong)base; - dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", res_type_str, - mem_node->base, mem_node->length); + dbg("sur adapter: 32 %s bar=0x%x(length=0x%x)\n", + res_type_str, + mem_node->base, + mem_node->length); mem_node->next = func->mem_head; func->mem_head = mem_node; @@ -631,16 +675,20 @@ if (prefetchable) { p_mem_node->base = base64 & PCI_BASE_ADDRESS_MEM_MASK; p_mem_node->length = base; - dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", res_type_str, - p_mem_node->base, p_mem_node->length); + dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", + res_type_str, + p_mem_node->base, + p_mem_node->length); p_mem_node->next = func->p_mem_head; func->p_mem_head = p_mem_node; } else { mem_node->base = base64 & PCI_BASE_ADDRESS_MEM_MASK; mem_node->length = base; - dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", res_type_str, - mem_node->base, mem_node->length); + dbg("sur adapter: 64 %s base=0x%x(len=0x%x)\n", + res_type_str, + mem_node->base, + mem_node->length); mem_node->next = func->mem_head; func->mem_head = mem_node; @@ -648,13 +696,15 @@ cloop += 4; break; default: - dbg("asur: reserved BAR type=0x%x\n", temp_register); + dbg("asur: reserved BAR type=0x%x\n", + temp_register); break; } } } /* End of base register loop */ } else { /* Some other unknown header type */ - dbg("Save_used_res of PCI unknown type b:d=0x%x:%x. skip.\n", func->bus, func->device); + dbg("Save_used_res of PCI unknown type b:d=0x%x:%x. skip.\n", + func->bus, func->device); } /* find the next device in this slot */ @@ -663,9 +713,27 @@ func = shpchp_slot_find(func->bus, func->device, index++); } - return(0); + return 0; } +/** + * kfree_resource_list: release memory of all list members + * @res: resource list to free + */ +static inline void +return_resource_list(struct pci_resource **func, struct pci_resource **res) +{ + struct pci_resource *node; + struct pci_resource *t_node; + + node = *func; + *func = NULL; + while (node) { + t_node = node->next; + return_resource(res, node); + node = t_node; + } +} /* * shpchp_return_board_resources @@ -675,95 +743,39 @@ * * returns 0 if success */ -int shpchp_return_board_resources(struct pci_func * func, struct resource_lists * resources) +int shpchp_return_board_resources(struct pci_func * func, + struct resource_lists * resources) { - int rc = 0; - struct pci_resource *node; - struct pci_resource *t_node; + int rc; dbg("%s\n", __FUNCTION__); if (!func) - return(1); - - node = func->io_head; - func->io_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->io_head), node); - node = t_node; - } + return 1; - node = func->mem_head; - func->mem_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->mem_head), node); - node = t_node; - } + return_resource_list(&(func->io_head),&(resources->io_head)); + return_resource_list(&(func->mem_head),&(resources->mem_head)); + return_resource_list(&(func->p_mem_head),&(resources->p_mem_head)); + return_resource_list(&(func->bus_head),&(resources->bus_head)); - node = func->p_mem_head; - func->p_mem_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->p_mem_head), node); - node = t_node; - } - - node = func->bus_head; - func->bus_head = NULL; - while (node) { - t_node = node->next; - return_resource(&(resources->bus_head), node); - node = t_node; - } - - rc |= shpchp_resource_sort_and_combine(&(resources->mem_head)); + rc = shpchp_resource_sort_and_combine(&(resources->mem_head)); rc |= shpchp_resource_sort_and_combine(&(resources->p_mem_head)); rc |= shpchp_resource_sort_and_combine(&(resources->io_head)); rc |= shpchp_resource_sort_and_combine(&(resources->bus_head)); - return(rc); + return rc; } - -/* - * shpchp_destroy_resource_list - * - * Puts node back in the resource list pointed to by head +/** + * kfree_resource_list: release memory of all list members + * @res: resource list to free */ -void shpchp_destroy_resource_list (struct resource_lists * resources) +static inline void +kfree_resource_list(struct pci_resource **r) { struct pci_resource *res, *tres; - res = resources->io_head; - resources->io_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->mem_head; - resources->mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->p_mem_head; - resources->p_mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = resources->bus_head; - resources->bus_head = NULL; + res = *r; + *r = NULL; while (res) { tres = res; @@ -772,50 +784,26 @@ } } - -/* - * shpchp_destroy_board_resources - * - * Puts node back in the resource list pointed to by head +/** + * shpchp_destroy_resource_list: put node back in the resource list + * @resources: list to put nodes back */ -void shpchp_destroy_board_resources (struct pci_func * func) +void shpchp_destroy_resource_list(struct resource_lists *resources) { - struct pci_resource *res, *tres; - - res = func->io_head; - func->io_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->mem_head; - func->mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->p_mem_head; - func->p_mem_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } - - res = func->bus_head; - func->bus_head = NULL; - - while (res) { - tres = res; - res = res->next; - kfree(tres); - } + kfree_resource_list(&(resources->io_head)); + kfree_resource_list(&(resources->mem_head)); + kfree_resource_list(&(resources->p_mem_head)); + kfree_resource_list(&(resources->bus_head)); } +/** + * shpchp_destroy_board_resources: put node back in the resource list + * @resources: list to put nodes back + */ +void shpchp_destroy_board_resources(struct pci_func * func) +{ + kfree_resource_list(&(func->io_head)); + kfree_resource_list(&(func->mem_head)); + kfree_resource_list(&(func->p_mem_head)); + kfree_resource_list(&(func->bus_head)); +} diff -Nru a/drivers/pci/hotplug/shpchprm.h b/drivers/pci/hotplug/shpchprm.h --- a/drivers/pci/hotplug/shpchprm.h Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/shpchprm.h Tue May 18 23:38:06 2004 @@ -39,7 +39,6 @@ int shpchprm_init(enum php_ctlr_type ct); void shpchprm_cleanup(void); int shpchprm_print_pirt(void); -void *shpchprm_get_slot(struct slot *slot); int shpchprm_find_available_resources(struct controller *ctrl); int shpchprm_set_hpp(struct controller *ctrl, struct pci_func *func, u8 card_type); void shpchprm_enable_card(struct controller *ctrl, struct pci_func *func, u8 card_type); diff -Nru a/drivers/pci/hotplug/shpchprm_acpi.c b/drivers/pci/hotplug/shpchprm_acpi.c --- a/drivers/pci/hotplug/shpchprm_acpi.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/shpchprm_acpi.c Tue May 18 23:38:06 2004 @@ -1299,7 +1299,8 @@ } -void * shpchprm_get_slot(struct slot *slot) +#if 0 +static void * shpchprm_get_slot(struct slot *slot) { struct acpi_bridge *ab = acpi_bridges_head; struct acpi_php_slot *aps = get_acpi_slot (ab, slot->number); @@ -1310,6 +1311,7 @@ return (void *)aps; } +#endif static void shpchprm_dump_func_res( struct pci_func *fun) { diff -Nru a/drivers/pci/hotplug/shpchprm_legacy.c b/drivers/pci/hotplug/shpchprm_legacy.c --- a/drivers/pci/hotplug/shpchprm_legacy.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/hotplug/shpchprm_legacy.c Tue May 18 23:38:06 2004 @@ -55,11 +55,6 @@ return 0; } -void * shpchprm_get_slot(struct slot *slot) -{ - return NULL; -} - int shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) { int offset = devnum - ctrl->slot_device_offset; diff -Nru a/drivers/pci/hotplug/shpchprm_nonacpi.c b/drivers/pci/hotplug/shpchprm_nonacpi.c --- a/drivers/pci/hotplug/shpchprm_nonacpi.c Tue May 18 23:38:05 2004 +++ b/drivers/pci/hotplug/shpchprm_nonacpi.c Tue May 18 23:38:05 2004 @@ -51,11 +51,6 @@ return 0; } -void * shpchprm_get_slot(struct slot *slot) -{ - return NULL; -} - int shpchprm_get_physical_slot_number(struct controller *ctrl, u32 *sun, u8 busnum, u8 devnum) { int offset = devnum - ctrl->slot_device_offset; diff -Nru a/drivers/pci/pci.c b/drivers/pci/pci.c --- a/drivers/pci/pci.c Tue May 18 23:38:06 2004 +++ b/drivers/pci/pci.c Tue May 18 23:38:06 2004 @@ -640,7 +640,7 @@ if (cacheline_size == pci_cache_line_size) return 0; - printk(KERN_WARNING "PCI: cache line size of %d is not supported " + printk(KERN_DEBUG "PCI: cache line size of %d is not supported " "by device %s\n", pci_cache_line_size << 2, pci_name(dev)); return -EINVAL; diff -Nru a/drivers/pci/pci.ids b/drivers/pci/pci.ids --- a/drivers/pci/pci.ids Tue May 18 23:38:07 2004 +++ b/drivers/pci/pci.ids Tue May 18 23:38:07 2004 @@ -7,7 +7,7 @@ # so if you have anything to contribute, please visit the home page or # send a diff -u against the most recent pci.ids to pci-ids@ucw.cz. # -# Daily snapshot on Wed 2004-01-14 11:00:17 +# Daily snapshot on Thu 2004-04-15 10:00:04 # # Vendors, devices and subsystems. Please keep sorted. @@ -24,7 +24,23 @@ # Real TJN ID is e159, but they got it wrong several times --mj 0059 Tiger Jet Network Inc. (Wrong ID) 0070 Hauppauge computer works Inc. + 4000 WinTV PVR-350 + 4001 WinTV PVR-250 (v1) + 4009 WinTV PVR-250 + 4801 WinTV PVR-250 MCE 0100 Ncipher Corp Ltd +# 018a is not LevelOne but there is a board misprogrammed +018a LevelOne + 0106 FPC-0106TX misprogrammed [RTL81xx] +# 021b is not Compaq but there is a board misprogrammed +021b Compaq Computer Corporation + 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] +# http://www.davicom.com.tw/ +0291 Davicom Semiconductor, Inc. + 8212 DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40) +# SpeedStream is Efficient Networks, Inc, a Siemens Company +02ac SpeedStream + 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] 0675 Dynalink 1700 IS64PH ISDN Adapter 1702 IS64PH ISDN Adapter @@ -36,8 +52,23 @@ 0e11 Compaq Computer Corporation 0001 PCI to EISA Bridge 0002 PCI to ISA Bridge + 0046 Smart Array 64xx + 0e11 409a Smart Array 641 + 0e11 409b Smart Array 642 + 0e11 409c Smart Array 6400 + 0e11 409d Smart Array 6400 EM 0049 NC7132 Gigabit Upgrade Module 004a NC6136 Gigabit Server Adapter + 007c NC7770 1000BaseTX + 007d NC6770 1000BaseTX + 0085 NC7780 1000BaseTX + 00bb NC7760 + 00ca NC7771 + 00cb NC7781 + 00cf NC7772 + 00d0 NC7782 + 00d1 NC7783 + 00e3 NC7761 0508 Netelligent 4/16 Token Ring 1000 Triflex/Pentium Bridge, Model 1000 2000 Triflex/Pentium Bridge, Model 2000 @@ -45,6 +76,25 @@ 3033 QVision 1280/p 3034 QVision 1280/p 4000 4000 [Triflex] + 4030 SMART-2/P + 4031 SMART-2SL + 4032 Smart Array 3200 + 4033 Smart Array 3100ES + 4034 Smart Array 221 + 4040 Integrated Array + 4048 Compaq Raid LC2 + 4050 Smart Array 4200 + 4051 Smart Array 4250ES + 4058 Smart Array 431 + 4070 Smart Array 5300 + 4080 Smart Array 5i + 4082 Smart Array 532 + 4083 Smart Array 5312 + 4091 Smart Array 6i + 409a Smart Array 641 + 409b Smart Array 642 + 409c Smart Array 6400 + 409d Smart Array 6400 EM 6010 HotPlug PCI Bridge 6010 7020 USB Controller a0ec Fibre Channel Host Controller @@ -54,7 +104,7 @@ 8086 002a PCI Hotplug Controller A 8086 002b PCI Hotplug Controller B a0f8 ZFMicro Chipset USB - a0fc Fibre Channel Host Controller + a0fc FibreChannel HBA Tachyon ae10 Smart-2/P RAID Controller 0e11 4030 Smart-2/P Array Controller 0e11 4031 Smart-2SL Array Controller @@ -64,21 +114,21 @@ ae2a MPC ae2b MIS-E ae31 System Management Controller - ae32 Netelligent 10/100 + ae32 Netelligent 10/100 TX PCI UTP ae33 Triflex Dual EIDE Controller - ae34 Netelligent 10 + ae34 Netelligent 10 T PCI UTP ae35 Integrated NetFlex-3/P - ae40 Netelligent 10/100 Dual - ae43 ProLiant Integrated Netelligent 10/100 + ae40 Netelligent Dual 10/100 TX PCI UTP + ae43 Netelligent Integrated 10/100 TX UTP ae69 CETUS-L ae6c Northstar ae6d NorthStar CPU to PCI Bridge - b011 Integrated Netelligent 10/100 - b012 Netelligent 10 T/2 + b011 Netelligent 10/100 TX Embedded UTP + b012 Netelligent 10 T/2 PCI UTP/Coax b01e NC3120 Fast Ethernet NIC b01f NC3122 Fast Ethernet NIC b02f NC1120 Ethernet NIC - b030 Netelligent WS 5100 + b030 Netelligent 10/100 TX UTP b04a 10/100 TX PCI Intel WOL UTP Controller b060 Smart Array 5300 Controller b0c6 NC3161 Fast Ethernet NIC @@ -96,6 +146,9 @@ b163 NC3134 Fast Ethernet NIC b164 NC3165 Fast Ethernet Upgrade Module b178 Smart Array 5i/532 + 0e11 4080 Smart Array 5i + 0e11 4082 Smart Array 532 + 0e11 4083 Smart Array 5312 b1a4 NC7131 Gigabit Server Adapter f130 NetFlex-3/P ThunderLAN 1.0 f150 NetFlex-3/P ThunderLAN 2.3 @@ -128,32 +181,59 @@ 0020 53c1010 Ultra3 SCSI Adapter 1de1 1020 DC-390U3W 0021 53c1010 66MHz Ultra3 SCSI Adapter + 124b 1070 PMC-USCSI3 4c53 1080 CT8 mainboard 4c53 1300 P017 mezzanine (32-bit PMC) 4c53 1310 P017 mezzanine (64-bit PMC) 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI + 1028 0123 PowerEdge 2600 + 1028 014a PowerEdge 1750 1028 1010 LSI U320 SCSI Controller - 0040 53c1035 + 0031 53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI + 0032 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 0033 1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 0040 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 1000 0033 MegaRAID SCSI 320-2XR + 1000 0066 MegaRAID SCSI 320-2XRWS + 0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI 008f 53c875J 1092 8000 FirePort 40 SCSI Controller 1092 8760 FirePort 40 Dual SCSI Host Adapter - 0621 FC909 - 0622 FC929 + 0407 MegaRAID + 1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller + 1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller + 1000 0532 MegaRAID 532 SCSI 320-2X RAID Controller + 1028 0533 PowerEgde Expandable RAID Controller 4/QC + 8086 0532 Storage RAID Controller SRCU42X + 0621 FC909 Fibre Channel Adapter + 0622 FC929 Fibre Channel Adapter + 1000 1020 44929 O Dual Fibre Channel card 0623 FC929 LAN - 0624 FC919 + 0624 FC919 Fibre Channel Adapter 0625 FC919 LAN - 0626 FC929X + 0626 FC929X Fibre Channel Adapter + 1000 1010 7202-XP-LC Dual Fibre Channel card 0627 FC929X LAN - 0628 FC919X + 0628 FC919X Fibre Channel Adapter 0629 FC919X LAN 0701 83C885 NT50 DigitalScape Fast Ethernet 0702 Yellowfin G-NIC gigabit ethernet 1318 0000 PEI100X + 0804 SA2010 + 0805 SA2010ZC + 0806 SA2020 + 0807 SA2020ZC 0901 61C102 1000 63C815 - 1960 PowerEdge Expandable RAID Controller 4 - 1028 0518 PowerEdge Expandable RAID Controller 4/DC - 1028 0520 PowerEdge Expandable RAID Controller 4/SC + 1960 MegaRAID + 1000 0518 MegaRAID 518 SCSI 320-2 Controller + 1000 0520 MegaRAID 520 SCSI 320-1 Controller + 1000 0522 MegaRAID 522 i4133 RAID Controller + 1000 0523 MegaRAID SATA 150-6 RAID Controller + 1000 4523 MegaRAID SATA 150-4 RAID Controller + 1000 a520 MegaRAID ZCR SCSI 320-0 Controller + 1028 0518 MegaRAID 518 DELL PERC 4/DC RAID Controller + 1028 0520 MegaRAID 520 DELL PERC 4/SC RAID Controller 1028 0531 PowerEdge Expandable RAID Controller 4/QC 1001 Kolter Electronic 0010 PCI 1616 Measurement card with 32 digital I/O lines @@ -167,16 +247,57 @@ 9100 INI-9100/9100W SCSI Host 1002 ATI Technologies Inc 4136 Radeon IGP 320 M - 4144 Radeon R300 AD [Radeon 9500 Pro] - 4145 Radeon R300 AE [Radeon 9500 Pro] - 4146 Radeon R300 AF [Radeon 9500 Pro] - 4147 Radeon R300 AG [FireGL Z1/X1] + 4144 R300 AD [Radeon 9500 Pro] +# New PCI ID provided by ATI developer relations (correction to above) + 4145 R300 AE [Radeon 9700 Pro] +# New PCI ID provided by ATI developer relations (oops, correction to above) + 4146 R300 AF [Radeon 9700 Pro] + 4147 R300 AG [FireGL Z1/X1] + 4148 R350 AH [Radeon 9800] + 4149 R350 AI [Radeon 9800] + 414b R350 AK [Fire GL ??] +# New PCI ID provided by ATI developer relations + 4150 RV350 AP [Radeon 9600] + 1458 4024 Giga-Byte GV-R96128D Primary + 148c 2064 PowerColor R96A-C3N + 148c 2066 PowerColor R96A-C3N + 174b 7c19 Sapphire Atlantis Radeon 9600 Pro + 174b 7c29 GC-R9600PRO Primary [Sapphire] + 18bc 0101 GC-R9600PRO Primary +# New PCI ID provided by ATI developer relations + 4151 RV350 AQ [Radeon 9600] +# New PCI ID provided by ATI developer relations + 4152 RV350 AR [Radeon 9600] + 4154 RV350 AT [Fire GL T2] + 4155 RV350 AU [Fire GL T2] + 4156 RV350 AV [Fire GL T2] + 4157 RV350 AW [Fire GL T2] 4158 68800AX [Mach32] - 4164 Radeon R300 Secondary (DVI) output - 4242 Radeon R200 BB [Radeon All in Wonder 8500DV] +# The PCI ID is unrelated to any DVI output. + 4164 R300 AD [Radeon 9500 Pro] (Secondary) +# New PCI ID info provided by ATI developer relations + 4165 R300 AE [Radeon 9700 Pro] (Secondary) +# New PCI ID info provided by ATI developer relations + 4166 R300 AF [Radeon 9700 Pro] (Secondary) +# New PCI ID provided by ATI developer relations + 4168 Radeon R350 [Radeon 9800] (Secondary) +# New PCI ID provided by ATI developer relations (correction to above) + 4170 RV350 AP [Radeon 9600] (Secondary) + 1458 4025 Giga-Byte GV-R96128D Secondary + 148c 2067 PowerColor R96A-C3N (Secondary) + 174b 7c28 GC-R9600PRO Secondary [Sapphire] + 18bc 0100 GC-R9600PRO Secondary +# New PCI ID provided by ATI developer relations (correction to above) + 4171 RV350 AQ [Radeon 9600] (Secondary) +# New PCI ID provided by ATI developer relations (correction to above) + 4172 RV350 AR [Radeon 9600] (Secondary) + 4242 R200 BB [Radeon All in Wonder 8500DV] 1002 02aa Radeon 8500 AIW DV Edition 4336 Radeon Mobility U1 4337 Radeon IGP 340M + 4341 IXP150 AC'97 Audio Controller +# Radeon 9100 IGP integrated + 4353 ATI SMBus 4354 215CT [Mach64 CT] 4358 210888CX [Mach64 CX] 4554 210888ET [Mach64 ET] @@ -246,21 +367,22 @@ 475a 3D Rage IIC AGP 1002 0087 Rage 3D IIC 1002 475a Rage IIC AGP - 4964 Radeon R250 Id [Radeon 9000] - 4965 Radeon R250 Ie [Radeon 9000] - 4966 Radeon R250 If [Radeon 9000] - 10f1 0002 R250 If [Tachyon G9000 PRO] - 148c 2039 R250 If [Radeon 9000 Pro "Evil Commando"] - 1509 9a00 R250 If [Radeon 9000 "AT009"] -# New subdevice - 3D Prophet 9000 PCI by Hercules. AGP version probably would have same ID, so not specified. - 1681 0040 R250 If [3D prophet 9000] - 174b 7176 R250 If [Sapphire Radeon 9000 Pro] - 174b 7192 R250 If [Radeon 9000 "Atlantis"] - 17af 2005 R250 If [Excalibur Radeon 9000 Pro] - 17af 2006 R250 If [Excalibur Radeon 9000] - 4967 Radeon R250 Ig [Radeon 9000] - 496e Radeon R250 [Radeon 9000] (Secondary) + 4964 Radeon RV250 Id [Radeon 9000] + 4965 Radeon RV250 Ie [Radeon 9000] + 4966 Radeon RV250 If [Radeon 9000] + 10f1 0002 RV250 If [Tachyon G9000 PRO] + 148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"] + 1509 9a00 RV250 If [Radeon 9000 "AT009"] +# New subdevice - 3D Prophet 9000 PCI by Hercules. AGP version probably would have same ID, so not specified. + 1681 0040 RV250 If [3D prophet 9000] + 174b 7176 RV250 If [Sapphire Radeon 9000 Pro] + 174b 7192 RV250 If [Radeon 9000 "Atlantis"] + 17af 2005 RV250 If [Excalibur Radeon 9000 Pro] + 17af 2006 RV250 If [Excalibur Radeon 9000] + 4967 Radeon RV250 Ig [Radeon 9000] + 496e Radeon RV250 [Radeon 9000] (Secondary) 4c42 3D Rage LT Pro AGP-133 + 0e11 b0e7 Rage LT Pro (Compaq Presario 5240) 0e11 b0e8 Rage 3D LT Pro 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) 1002 0040 Rage LT Pro AGP 2X @@ -294,10 +416,11 @@ 4c57 Radeon Mobility M7 LW [Radeon Mobility 7500] 1014 0517 ThinkPad T30 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) + 1028 012a Latitude C640 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] 4c59 Radeon Mobility M6 LY - 1014 0235 ThinkPad A30p (2653-64G) + 1014 0235 ThinkPad A30/A30p (2652/2653) 1014 0239 ThinkPad X22/X23/X24 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 4c5a Radeon Mobility M6 LZ @@ -312,15 +435,29 @@ 4e44 Radeon R300 ND [Radeon 9700 Pro] 4e45 Radeon R300 NE [Radeon 9500 Pro] 1002 0002 Radeon R300 NE [Radeon 9500 Pro] - 4e46 Radeon R300 NF [Radeon 9700] +# New PCI ID provided by ATI developer relations (correction to above) + 4e46 RV350 NF [Radeon 9600] 4e47 Radeon R300 NG [FireGL X1] 4e48 Radeon R350 [Radeon 9800] +# New PCI ID provided by ATI developer relations + 4e49 Radeon R350 [Radeon 9800] + 4e4a RV350 NJ [Radeon 9800 XT] + 4e4b R350 NK [Fire GL X2] +# New PCI ID provided by ATI developer relations + 4e50 RV350 [Mobility Radeon 9600 M10] +# New PCI ID provided by ATI developer relations + 4e52 RV350 [Mobility Radeon 9600 M10] + 4e54 M10 NT [FireGL Mobility T2] 4e64 Radeon R300 [Radeon 9700 Pro] (Secondary) 4e65 Radeon R300 [Radeon 9500 Pro] (Secondary) 1002 0003 Radeon R300 NE [Radeon 9500 Pro] - 4e66 Radeon R300 [Radeon 9700] (Secondary) +# New PCI ID provided by ATI developer relations (correction to above) + 4e66 RV350 NF [Radeon 9600] (Secondary) 4e67 Radeon R300 [FireGL X1] (Secondary) 4e68 Radeon R350 [Radeon 9800] (Secondary) +# New PCI ID provided by ATI developer relations + 4e69 Radeon R350 [Radeon 9800] (Secondary) + 4e6a RV350 NJ [Radeon 9800 XT] (Secondary) 5041 Rage 128 PA/PRO 5042 Rage 128 PB/PRO AGP 2x 5043 Rage 128 PC/PRO AGP 4x @@ -390,6 +527,8 @@ 514d Radeon R200 QM [Radeon 9100] 514e Radeon R200 QN [Radeon 8500LE] 514f Radeon R200 QO [Radeon 8500LE] + 5154 R200 QT [Radeon 8500] + 5155 R200 QU [Radeon 9100] 5157 Radeon RV200 QW [Radeon 7500] 1002 013a Radeon 7500 1458 4000 RV200 QW [RADEON 7500 PRO MAYA AR] @@ -469,7 +608,20 @@ 1002 5654 Mach64VT Reference 5655 264VT3 [Mach64 VT3] 5656 264VT4 [Mach64 VT4] - 5961 Radeon RV280 [Radeon 9200] + 5941 RV280 [Radeon 9200] (Secondary) +# http://www.hightech.com.hk/html/9200.htm + 17af 200d Excalibur Radeon 9200 + 18bc 0050 GeXcube GC-R9200-C3 (Secondary) + 5960 RV280 [Radeon 9200 PRO] + 5961 RV280 [Radeon 9200] +# http://www.hightech.com.hk/html/9200.htm + 17af 200c Excalibur Radeon 9200 + 18bc 0051 GeXcube GC-R9200-C3 + 5964 RV280 [Radeon 9200 SE] + 148c 2073 CN-AG92E + 5c61 RV250 5c61 [Radeon Mobility 9200 M9+] + 5c63 RV250 5c63 [Radeon Mobility 9200 M9+] + 5d44 RV280 [Radeon 9200 SE] (Secondary) 700f PCI Bridge [IGP 320M] 7010 PCI Bridge [IGP 340M] cab0 AGP Bridge [IGP 320M] @@ -610,6 +762,7 @@ 1186 1100 DFE-500TX Fast Ethernet 1186 1101 DFE-500TX Fast Ethernet 1186 1102 DFE-500TX Fast Ethernet + 1186 1112 DFE-570TX Quad Fast Ethernet 1259 2800 AT-2800Tx Fast Ethernet 1266 0004 Eagle Fast EtherMAX 12af 0019 NetFlyer Cardbus Fast Ethernet @@ -621,7 +774,7 @@ 1395 0001 10/100 Ethernet CardBus PC Card 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200) 8086 0001 EtherExpress PRO/100 Mobile CardBus 32 - 001a Farallon PN9000SX + 001a Farallon PN9000SX Gigabit Ethernet 0021 DECchip 21052 0022 DECchip 21150 0023 DECchip 21150 @@ -639,7 +792,8 @@ 12d9 000a IP Telephony card 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard - 9005 0365 Adaptec 5400S + 9005 0364 5400S (Mustang) + 9005 0365 5400S (Mustang) 9005 1364 Dell PowerEdge RAID Controller 2 9005 1365 Dell PowerEdge RAID Controller 2 e4bf 1000 CC8-1-BLUES @@ -818,8 +972,13 @@ 101e American Megatrends Inc. 1960 MegaRAID 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller - 101e 0475 MegaRAID 475 Express 500 RAID Controller + 101e 0475 MegaRAID 475 Express 500/500LC RAID Controller + 101e 0477 MegaRAID 477 Elite 3100 RAID Controller 101e 0493 MegaRAID 493 Elite 1600 RAID Controller + 101e 0494 MegaRAID 494 Elite 1650 RAID Controller + 101e 0503 MegaRAID 503 Enterprise 1650 RAID Controller + 101e 0511 MegaRAID 511 i4 IDE RAID Controller + 101e 0522 MegaRAID 522 i4133 RAID Controller 1028 0471 PowerEdge RAID Controller 3/QC 1028 0475 PowerEdge RAID Controller 3/SC 1028 0493 PowerEdge RAID Controller 3/DC @@ -843,6 +1002,7 @@ 1103 K8 NorthBridge 2000 79c970 [PCnet32 LANCE] 1014 2000 NetFinity 10/100 Fast Ethernet + 1022 2000 PCnet - Fast 79C971 103c 104c Ethernet with LAN remote power Adapter 103c 1064 Ethernet with LAN remote power Adapter 103c 1065 Ethernet with LAN remote power Adapter @@ -913,6 +1073,7 @@ 0194 82C194 2000 4DWave DX 2001 4DWave NX + 2100 CyberBlade XP4m32 8400 CyberBlade/i7 1023 8400 CyberBlade i7 AGP 8420 CyberBlade/i7d @@ -1029,7 +1190,6 @@ 1028 0003 PowerEdge Expandable RAID Controller 3/Si 0004 PowerEdge Expandable RAID Controller 3/Si 1028 00d0 PowerEdge Expandable RAID Controller 3/Si - 0005 PowerEdge Expandable RAID Controller 3/Di 0006 PowerEdge Expandable RAID Controller 3/Di 0007 Remote Access Controller:DRAC III 0008 Remote Access Controller @@ -1040,12 +1200,26 @@ 1028 0121 PowerEdge Expandable RAID Controller 3/Di 000c Remote Access Controller:ERA or ERA/O 000d BMC/SMIC device - 000e PowerEdge Expandable RAID Controller - 000f PowerEdge Expandable RAID Controller 4/Di + 000e PowerEdge Expandable RAID controller 4 + 1028 0123 PowerEdge Expandable RAID Controller 4/Di + 000f PowerEdge Expandable RAID controller 4 + 1028 013b MegaRAID DELL PERC 4/Di RAID On Motherboard + 1028 014a PowerEdge Expandable RAID Controller 4/Di + 1028 014c MegaRAID DELL PERC 4/Di RAID On Motherboard + 1028 014d MegaRAID DELL PERC 4/Di RAID On Motherboard 1029 Siemens Nixdorf IS 102a LSI Logic 0000 HYDRA 0010 ASPEN + 001f AHA-2940U2/U2W /7890/7891 SCSI Controllers + 9005 000f 2940U2W SCSI Controller + 9005 0106 2940U2W SCSI Controller + 9005 a180 2940U2W SCSI Controller + 00c5 AIC-7899 U160/m SCSI Controller + 1028 00c5 PowerEdge 2550/2650/4600 + 00cf AIC-7899P U160/m + 1028 0106 PowerEdge 4600 + 1028 0121 PowerEdge 2650 102b Matrox Graphics, Inc. # DJ: I've a suspicion that 0010 is a duplicate of 0d10. 0010 MGA-I [Impression?] @@ -1171,6 +1345,7 @@ 102b 0f83 Millennium G550 102b 0f84 Millennium G550 Dual Head DDR 32Mb 102b 1e41 Millennium G550 + 2537 MGA G650 AGP 4536 VIA Framegrabber 6573 Shark 10/100 Multiport SwitchNIC 102c Chips and Technologies @@ -1206,6 +1381,11 @@ 0009 r4x00 0020 ATM Meteor 155 102f 00f8 ATM Meteor 155 + 0105 TC86C001 [goku-s] IDE + 0106 TC86C001 [goku-s] USB 1.1 Host + 0107 TC86C001 [goku-s] USB Device Controller + 0108 TC86C001 [goku-s] I2C/SIO/GPIO Controller + 0180 TX4927 1030 TMC Research 1031 Miro Computer Products AG 5601 DC20 ASIC @@ -1235,6 +1415,7 @@ 1179 0001 USB 12ee 7000 Root Hub 1799 0001 Root Hub + 807d 0035 PCI-USB2 (OHCI subsystem) 003b PCI to C-bus Bridge 003e NAPCCARD Cardbus Controller 0046 PowerVR PCX2 [midas] @@ -1252,14 +1433,21 @@ 0074 56k Voice Modem 1033 8014 RCV56ACF 56k Voice Modem 009b Vrc5476 + 00a5 VRC4173 00a6 VRC5477 AC97 00cd IEEE 1394 [OrangeLink] Host Controller 12ee 8011 Root hub + 00ce IEEE 1394 Host Controller 00df Vr4131 00e0 USB 2.0 + 0ee4 3383 Sitecom IEEE 1394 / USB2.0 Combo Card 12ee 7001 Root hub 1799 0002 Root Hub + 807d 1043 PCI-USB2 (EHCI subsystem) + 00e7 IEEE 1394 Host Controller + 00f2 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr 00f3 uPD6113x Multimedia Decoder/Processor [EMMA2] + 010c VR7701 1034 Framatome Connectors USA Inc. 1035 Comp. & Comm. Research Lab 1036 Future Domain Corp. @@ -1267,27 +1455,27 @@ 1037 Hitachi Micro Systems 1038 AMP, Inc 1039 Silicon Integrated Systems [SiS] -# This is what all my tests report. I don't know if this is equivalent to "5591/5592 AGP". - 0001 SiS 530 Virtual PCI-to-PCI bridge (AGP) + 0001 Virtual PCI-to-PCI bridge (AGP) 0002 SG86C202 0006 85C501/2/3 - 0008 85C503/5513 + 0008 SiS85C503/5513 (LPC Bridge) 0009 ACPI 0018 SiS85C503/5513 (LPC Bridge) 0200 5597/5598/6326 VGA 1039 0000 SiS5597 SVGA (Shared RAM) 0204 82C204 0205 SG86C205 - 0300 SiS300/305 PCI/AGP VGA Display Adapter + 0300 300/305 PCI/AGP VGA Display Adapter 107d 2720 Leadtek WinFast VR300 - 0310 SiS315H PCI/AGP VGA Display Adapter - 0315 SiS315 PCI/AGP VGA Display Adapter - 0325 SiS315PRO PCI/AGP VGA Display Adapter - 0330 SiS330 [Xabre] PCI/AGP VGA Display Adapter + 0310 315H PCI/AGP VGA Display Adapter + 0315 315 PCI/AGP VGA Display Adapter + 0325 315PRO PCI/AGP VGA Display Adapter + 0330 330 [Xabre] PCI/AGP VGA Display Adapter 0406 85C501/2 0496 85C496 0530 530 Host 0540 540 Host + 0550 550 Host 0597 5513C 0601 85C601 0620 620 Host @@ -1297,24 +1485,32 @@ 0645 SiS645 Host & Memory & AGP Controller 0646 SiS645DX Host & Memory & AGP Controller 0648 SiS 645xx - 0650 650 Host - 0651 SiS651 Host + 0650 650/M650 Host + 0651 651 Host + 0655 655 Host + 0660 660 Host + 0661 661FX/M661FX/M661MX Host 0730 730 Host 0733 733 Host 0735 735 Host 0740 740 Host + 0741 741/741GX/M741 Host 0745 745 Host 0746 746 Host - 0755 SiS 755 Host Bridge - 0900 SiS900 10/100 Ethernet + 0755 755 Host + 0760 760/M760 Host + 0900 SiS900 PCI Fast Ethernet 1039 0900 SiS900 10/100 Ethernet Adapter 1043 8035 CUSI-FX motherboard 0961 SiS961 [MuTIOL Media IO] 0962 SiS962 [MuTIOL Media IO] + 0963 SiS963 [MuTIOL Media IO] + 0964 SiS964 [MuTIOL Media IO] + 0965 SiS965 [MuTIOL Media IO] 3602 83C602 5107 5107 5300 SiS540 PCI Display Adapter - 5315 SiS550 AGP/VGA VGA Display Adapter + 5315 550 PCI/AGP VGA Display Adapter 5401 486 PCI Chipset 5511 5511/5512 5513 5513 [IDE] @@ -1332,12 +1528,12 @@ 6204 Video decoder & MPEG interface 6205 VGA Controller 6236 6236 3D-AGP - 6300 SiS630 GUI Accelerator+3D + 6300 630/730 PCI/AGP VGA Display Adapter 1019 0970 P6STP-FL motherboard 1043 8035 CUSI-FX motherboard - 6306 SiS530 3D PCI/AGP + 6306 530/620 PCI/AGP VGA Display Adapter 1039 6306 SiS530,620 GUI Accelerator+3D - 6325 SiS650/651/M650/740 PCI/AGP VGA Display Adapter + 6325 65x/M650/740 PCI/AGP VGA Display Adapter 6326 86C326 5598/6326 1039 6326 SiS6326 GUI Accelerator 1092 0a50 SpeedStar A50 @@ -1345,14 +1541,16 @@ 1092 4910 SpeedStar A70 1092 4920 SpeedStar A70 1569 6326 SiS6326 GUI Accelerator + 6330 661FX/M661FX/M661MX/741/M741/760/M760 PCI/AGP 7001 USB 1.0 Controller 1039 7000 Onboard USB Controller 7002 USB 2.0 Controller 1509 7002 Onboard USB Controller 7007 FireWire Controller 7012 Sound Controller - 7013 Intel 537 [56k Winmodem] - 7016 10/100 Ethernet Adapter +# There are may be different modem codecs here (Intel537 compatible and incompatible) + 7013 AC'97 Modem Controller + 7016 SiS7016 PCI Fast Ethernet Adapter 1039 7016 SiS7016 10/100 Ethernet Adapter 7018 SiS PCI Audio Accelerator 1014 01b6 SiS PCI Audio Accelerator @@ -1410,6 +1608,7 @@ 103c 1226 Keystone SP2 103c 1227 Powerbar SP2 103c 1282 Everest SP2 + 1054 PCI Local Bus Adapter 1064 79C970 PCnet Ethernet Controller 108b Visualize FXe 10c1 NetServer Smart IRQ Router @@ -1422,6 +1621,7 @@ 1229 zx1 System Bus Adapter 122a zx1 I/O Controller 122e zx1 Local Bus Adapter + 127c sx1000 I/O Controller 1290 Auxiliary Diva Serial Port 2910 E2910A PCIBus Exerciser 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer @@ -1437,8 +1637,11 @@ 3020 Samurai_IDE 1043 Asustek Computer, Inc. 0675 ISDNLink P-IN100-ST-D + 4015 v7100 SDRAM [GeForce2 MX] 4021 v7100 Combo Deluxe [GeForce2 MX + TV tuner] 4057 v8200 GeForce 3 + 8043 v8240 PAL 128M [P4T] Motherboard + 807b v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI] 1044 Distributed Processing Technology 1012 Domino RAID Engine a400 SmartCache/Raid I-IV Controller @@ -1523,9 +1726,9 @@ 021b STPC Consumer IIA Southbridge 0500 ST70137 [Unicorn] ADSL DMT Transceiver 0564 STPC Client Northbridge - 0981 DEC-Tulip compatible 10/100 Ethernet + 0981 21x4x DEC-Tulip compatible 10/100 Ethernet 1746 STG 1764X - 2774 DEC-Tulip compatible 10/100 Ethernet + 2774 21x4x DEC-Tulip compatible 10/100 Ethernet 3520 MPEG-II decoder card 55cc STPC Client Southbridge 104b BusLogic @@ -1577,24 +1780,33 @@ 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link) 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link) + 8025 TSB82AA2 IEEE-1394b Link Layer Controller 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) 8027 PCI4451 IEEE-1394 Controller 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100) 8029 PCI4510 IEEE-1394 Controller + 1071 8160 MIM2900 8400 ACX 100 22Mbps Wireless Interface + 00fc 16ec U.S. Robotics 22 Mbps Wireless PC Card (model 2210) + 00fd 16ec U.S. Robotics 22Mbps Wireless PCI Adapter (model 2216) + 1186 3b01 DWL-520+ 22Mbps PCI Wireless Adapter 8401 ACX 100 22Mbps Wireless Interface # OK, this info is almost useless as is, but at least it's known that it's a wireless card. More info requested from reporter (whi 9000 Wireless Interface (of unknown type) + 9066 ACX 111 54Mbps Wireless Interface a001 TDC1570 a100 TDC1561 a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f - a106 TMS320C6205 + a106 TMS320C6205 Fixed Point DSP + 175c 5000 ASI50xx Audio Adapter + 175c 8700 ASI87xx Radio Tuner card ac10 PCI1050 ac11 PCI1053 ac12 PCI1130 ac13 PCI1031 ac15 PCI1131 ac16 PCI1250 + 1014 0092 ThinkPad 600 ac17 PCI1220 ac18 PCI1260 ac19 PCI1221 @@ -1603,6 +1815,7 @@ 0e11 b113 Armada M700 ac1c PCI1225 0e11 b121 Armada E500 + 1028 0088 Dell Computer Corporation Latitude CPi A400XT ac1d PCI1251A ac1e PCI1211 ac1f PCI1251B @@ -1617,18 +1830,27 @@ ac42 PCI4451 PC card Cardbus Controller 1028 00e6 PCI4451 PC card CardBus Controller (Dell Inspiron 8100) ac44 PCI4510 PC card Cardbus Controller + 1071 8160 MIM2000 + ac46 PCI4520 PC card Cardbus Controller ac50 PCI1410 PC card Cardbus Controller ac51 PCI1420 1014 023b ThinkPad T23 (2647-4MG) 1028 00b1 Latitude C600 + 1028 012a Latitude C640 10cf 1095 Lifebook C6155 e4bf 1000 CP2-2-HIPHOP ac52 PCI1451 PC card Cardbus Controller ac53 PCI1421 PC card Cardbus Controller - ac55 PCI1250 PC card Cardbus Controller - 1014 0512 ThinkPad T30 + ac55 PCI1520 PC card Cardbus Controller + 1014 0512 ThinkPad T30/T40 ac56 PCI1510 PC card Cardbus Controller ac60 PCI2040 PCI to DSP Bridge Controller + 175c 5100 ASI51xx Audio Adapter + 175c 6100 ASI61xx Audio Adapter + 175c 6200 ASI62xx Audio Adapter + ac8d PCI 7620 + ac8e PCI7420 CardBus Controller + ac8f PCI7420 Flash Media Controller fe00 FireWire Host Controller fe03 12C01A FireWire Host Controller 104d Sony Corporation @@ -1674,7 +1896,20 @@ 0006 MPC8245 [Unity] 0100 MC145575 [HFC-PCI] 0431 KTI829c 100VG - 1801 Audio I/O Controller (MIDI) + 1801 DSP56301 Digital Signal Processor + 14fb 0101 Transas Radar Imitator Board [RIM] + 14fb 0102 Transas Radar Imitator Board [RIM-2] + 14fb 0202 Transas Radar Integrator Board [RIB-2] + 14fb 0611 1 channel CAN bus Controller [CanPci-1] + 14fb 0612 2 channels CAN bus Controller [CanPci-2] + 14fb 0613 3 channels CAN bus Controller [CanPci-3] + 14fb 0614 4 channels CAN bus Controller [CanPci-4] + 14fb 0621 1 channel CAN bus Controller [CanPci2-1] + 14fb 0622 2 channels CAN bus Controller [CanPci2-2] + 14fb 0810 Transas VTS Radar Integrator Board [RIB-4] + 175c 4200 ASI4215 Audio Adapter + 175c 4300 ASI43xx Audio Adapter + 175c 4400 ASI4401 Audio Adapter ecc0 0030 Layla 18c0 MPC8265A/MPC8266 4801 Raven @@ -1710,6 +1945,10 @@ 105a 4d39 Fasttrak66 1275 20275 3318 PDC20318 (SATA150 TX4) + 3319 PDC20319 (SATA150 TX4) + 3373 PDC20378 (SATA150 TX) + 1462 702e K8T NEO FIS2R motherboard + 3375 PDC20375 (SATA150 TX2plus) 3376 PDC20376 1043 809e A7V8X motherboard 4d30 20267 @@ -1727,11 +1966,15 @@ 105a 4d68 Ultra133TX2 5275 PDC20276 IDE 105a 0275 SuperTrak SX6000 IDE + 105a 1275 MBFastTrak133 Lite (tm) Controller (RAID mode) + 1458 b001 MBUltra 133 5300 DC5300 6268 20268R 6269 PDC20271 105a 6269 FastTrak TX2/TX2000 6621 PDC20621 [SX4000] 4 Channel IDE RAID Controller + 6622 PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller + 6626 PDC20618 Ultra 618 6629 PDC20619 FastTrak TX4000 RAID 7275 PDC20277 105b Foxconn International, Inc. @@ -1812,14 +2055,21 @@ 0005 National PC87550 System Controller 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave 1067 Mitsubishi Electric + 0301 AccelGraphics AccelECLIPSE + 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] + 0308 Tornado 3000 [OEM Evans & Sutherland] 1002 VG500 [VolumePro Volume Rendering Accelerator] 1068 Diversified Technology 1069 Mylex Corporation 0001 DAC960P 0002 DAC960PD - 0010 DAC960PX + 0010 DAC960PG + 0020 DAC960LA 0050 AcceleRAID 352/170/160 support Device b166 Gemstone chipset SCSI controller + 1014 0242 iSeries 2872 DASD IOA + 1014 0266 Dual Channel PCI-X U320 SCSI Adapter + 1014 0278 Dual Channel PCI-X U320 SCSI RAID Adapter ba55 eXtremeRAID 1100 support Device ba56 eXtremeRAID 2000/3000 support Device 106a Aten Research Inc @@ -1853,6 +2103,22 @@ 0032 UniNorth 2 GMAC (Sun GEM) 0033 UniNorth 2 ATA/100 0034 UniNorth 2 AGP + 0035 UniNorth 2 PCI + 0036 UniNorth 2 Internal PCI + 003b UniNorth/Intrepid ATA/100 + 003e KeyLargo/Intrepid Mac I/O + 003f KeyLargo/Intrepid USB + 0040 K2 KeyLargo USB + 0041 K2 KeyLargo Mac/IO + 0042 K2 FireWire + 0043 K2 ATA/100 + 0045 K2 HT-PCI Bridge + 0046 K2 HT-PCI Bridge + 0047 K2 HT-PCI Bridge + 0048 K2 HT-PCI Bridge + 0049 K2 HT-PCI Bridge + 004b U3 AGP + 004c K2 GMAC (Sun GEM) 1645 Tigon3 Gigabit Ethernet NIC (BCM5701) 106c Hyundai Electronics America 8801 Dual Pentium ISA/PCI Motherboard @@ -1865,6 +2131,7 @@ 106f City Gate Development Ltd 1070 Daewoo Telecom Ltd 1071 Mitac + 8160 Mitac 8060B Mobile Platform 1072 GIT Co Ltd 1073 Yamaha Corporation 0001 3D GUI Accelerator @@ -1905,13 +2172,13 @@ 101e 8471 QLA12160 on AMI MegaRAID 101e 8493 QLA12160 on AMI MegaRAID 1240 ISP1240 SCSI Host Adapter - 1280 ISP1280 + 1280 ISP1280 SCSI Host Adapter 2020 ISP2020A Fast!SCSI Basic Adapter 2100 QLA2100 64-bit Fibre Channel Adapter 1077 0001 QLA2100 64-bit Fibre Channel Adapter - 2200 QLA2200 + 2200 QLA2200 64-bit Fibre Channel Adapter 1077 0002 QLA2200 - 2300 QLA2300 64-bit FC-AL Adapter + 2300 QLA2300 64-bit Fibre Channel Adapter 2312 QLA2312 Fibre Channel Adapter 1078 Cyrix Corporation 0000 5510 [Grappa] @@ -2008,6 +2275,7 @@ 8001 Schizo PCI Bus Module a000 Ultra IIi a001 Ultra IIe + a801 Tomatillo PCI Bus Module 108f Systemsoft 1090 Encore Computer Corporation 1091 Intergraph Corporation @@ -2063,7 +2331,7 @@ c801 PCI-GPIB c831 PCI-GPIB bridge 1094 First International Computers [FIC] -1095 CMD Technology Inc +1095 Silicon Image, Inc. (formerly CMD Technology Inc) 0240 Adaptec AAR-1210SA SATA HostRAID Controller 0640 PCI0640 0643 PCI0643 @@ -2078,8 +2346,12 @@ 0670 USB0670 1095 0670 USB0670 0673 USB0673 - 0680 PCI0680 - 3112 Silicon Image SiI 3112 SATARaid Controller + 0680 PCI0680 Ultra ATA-133 Host Controller + 1095 3680 Winic W-680 (Silicon Image 680 based) + 3112 Silicon Image Serial ATARaid Controller [ CMD/Sil 3112/3112A ] + 1095 6112 Asus A7N8X + 3114 Silicon Image SiI 3114 SATARaid Controller + 3512 Silicon Image Serial ATARaid Controller [ CMD/Sil 3512 ] 1096 Alacron 1097 Appian Technology 1098 Quantum Designs (H.K.) Ltd @@ -2109,11 +2381,13 @@ 127a 0003 Bt878a Mediastream Controller PAL BG 127a 0048 Bt878/832 Mediastream Controller 144f 3000 MagicTView CPH060 - Video + 1461 0002 TV98 Series (TV/No FM/Remote) 1461 0004 AVerTV WDM Video Capture 14f1 0001 Bt878 Mediastream Controller NTSC 14f1 0002 Bt878 Mediastream Controller PAL BG 14f1 0003 Bt878a Mediastream Controller PAL BG 14f1 0048 Bt878/832 Mediastream Controller + 1822 0001 VisionPlus DVB card 1851 1850 FlyVideo'98 - Video 1851 1851 FlyVideo II 1852 1852 FlyVideo'98 - Video (with FM Tuner) @@ -2170,6 +2444,7 @@ 14f1 0002 Bt878 Video Capture (Audio Section) 14f1 0003 Bt878 Video Capture (Audio Section) 14f1 0048 Bt878 Video Capture (Audio Section) + 1822 0001 VisionPlus DVB Card bd11 1200 PCTV pro (TV + FM stereo receiver, audio section) 0879 Bt879 Audio Capture 127a 0044 Bt879 Video Capture (Audio Section) @@ -2228,8 +2503,8 @@ 0006 HPCEX 0007 RPCEX 0008 DiVO VIP - 0009 Alteon Gigabit Ethernet - 10a9 8002 Acenic Gigabit Ethernet + 0009 AceNIC Gigabit Ethernet + 10a9 8002 AceNIC Gigabit Ethernet 0010 AMP Video I/O 0011 GRIP 0012 SGH PSHAC GSN @@ -2278,12 +2553,18 @@ 1147 VScom 020 2 port parallel adaptor 2724 Thales PCSM Security Card 9030 PCI <-> IOBus Bridge Hot Swap + 10b5 2862 Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board + 10b5 2906 Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board + 10b5 2940 Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board 15ed 1002 MCCS 8-port Serial Hot Swap 15ed 1003 MCCS 16-port Serial Hot Swap 9036 9036 9050 PCI <-> IOBus Bridge 10b5 2036 SatPak GPS + 10b5 2221 Alpermann+Velte PCL PCI LV: Timecode Reader Board 10b5 2273 SH-ARC SoHard ARCnet card + 10b5 2431 Alpermann+Velte PCL PCI D: Timecode Reader Board + 10b5 2905 Alpermann+Velte PCI TS: Time Synchronisation Board 10b5 9050 MP9050 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem @@ -2295,6 +2576,10 @@ 15ed 1001 Macrolink MCCS 16-port Serial 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap +# Sorry, there was a typo + 5654 2036 OpenSwitch 6 Telephony card +# Sorry, there was a typo + 5654 3132 OpenSwitch 12 Telephony card 5654 5634 OpenLine4 Telephony Card d531 c002 PCIntelliCAN 2xSJA1000 CAN bus d84d 4006 EX-4006 1P @@ -2317,7 +2602,17 @@ 9054 PCI <-> IOBus Bridge 10b5 2455 Wessex Techology PHIL-PCI 10b5 2696 Innes Corp AM Radcap card + 10b5 2717 Innes Corp Auricon card + 10b5 2844 Innes Corp TVS Encoder card 12d9 0002 PCI Prosody Card rev 1.5 + 16df 0011 PIKA PrimeNet MM PCI + 16df 0012 PIKA PrimeNet MM cPCI 8 + 16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling Option) + 16df 0014 PIKA PrimeNet MM cPCI 4 + 16df 0015 PIKA Daytona MM + 16df 0016 PIKA InLine MM + 9056 Francois + 10b5 2979 CellinkBlade 11 - CPCI board VoATM AAL1 9060 9060 906d 9060SD 125c 0640 Aries 16000P @@ -2326,6 +2621,7 @@ 10b5 9080 9080 [real subsystem ID not set] 129d 0002 Aculab PCI Prosidy card 12d9 0002 PCI Prosody Card + 12df 4422 4422PCI ["Do-All" Telemetry Data Aquisition System] bb04 B&B 3PCIOSD1A Isolated PCI Serial 10b6 Madge Networks 0001 Smart 16/4 PCI Ringnode @@ -2358,17 +2654,22 @@ 1006 MINI PCI type 3B Data Fax Modem 1007 Mini PCI 56k Winmodem 10b7 615c Mini PCI 56K Modem - 1700 3c940 1000Base? + 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] + 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] + 1700 3c940 10/100/1000Base-T [Marvell] + 1043 80eb P4P800 Mainboard + 10b7 0010 3C940 Gigabit LOM Ethernet Adapter + 10b7 0020 3C941 Gigabit LOM Ethernet Adapter 3390 3c339 TokenLink Velocity 3590 3c359 TokenLink Velocity XL 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B) - 4500 3c450 Cyclone/unknown + 4500 3c450 HomePNA [Tornado] 5055 3c555 Laptop Hurricane - 5057 3c575 [Megahertz] 10/100 LAN CardBus + 5057 3c575 Megahertz 10/100 LAN CardBus [Boomerang] 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 5157 3c575 [Megahertz] 10/100 LAN CardBus + 5157 3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone] 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 5257 3CCFE575CT Cyclone CardBus + 5257 3cCFE575CT CardBus [Cyclone] 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet 5900 3c590 10BaseT [Vortex] 5920 3c592 EISA 10mbps Demon/Vortex @@ -2376,20 +2677,22 @@ 5951 3c595 100BaseT4 [Vortex] 5952 3c595 100Base-MII [Vortex] 5970 3c597 EISA Fast Demon/Vortex - 5b57 3c595 [Megahertz] 10/100 LAN CardBus + 5b57 3c595 Megahertz 10/100 LAN CardBus [Boomerang] 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 6055 3c556 Hurricane CardBus - 6056 3c556B Hurricane CardBus + 6000 3CRSHPW796 [OfficeConnect Wireless CardBus] + 6001 3com 3CRWE154G72 [Office Connect Wireless LAN Adapter] + 6055 3c556 Hurricane CardBus [Cyclone] + 6056 3c556B CardBus [Tornado] 10b7 6556 10/100 Mini PCI Ethernet Adapter - 6560 3CCFE656 Cyclone CardBus + 6560 3cCFE656 CardBus [Cyclone] 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus - 6561 3CCFEM656 10/100 LAN+56K Modem CardBus + 6561 3cCFEM656 10/100 LAN+56K Modem CardBus 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus - 6562 3CCFEM656 [id 6562] Cyclone CardBus + 6562 3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone] 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus - 6563 3CCFEM656B 10/100 LAN+56K Modem CardBus + 6563 3cCFEM656B 10/100 LAN+56K Modem CardBus 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus - 6564 3CCFEM656 [id 6564] Cyclone CardBus + 6564 3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado] 7646 3cSOHO100-TX Hurricane 7770 3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect] 7940 3c803 FDDILink UTP Controller @@ -2397,13 +2700,13 @@ 7990 3c805 FDDILink DAS Controller 8811 Token ring 9000 3c900 10BaseT [Boomerang] - 9001 3c900 Combo [Boomerang] - 9004 3c900B-TPO [Etherlink XL TPO] + 9001 3c900 10Mbps Combo [Boomerang] + 9004 3c900B-TPO Etherlink XL [Cyclone] 10b7 9004 3C900B-TPO Etherlink XL TPO 10Mb - 9005 3c900B-Combo [Etherlink XL Combo] + 9005 3c900B-Combo Etherlink XL [Cyclone] 10b7 9005 3C900B-Combo Etherlink XL Combo - 9006 3c900B-TPC [Etherlink XL TPC] - 900a 3c900B-FL [Etherlink XL FL] + 9006 3c900B-TPC Etherlink XL [Cyclone] + 900a 3c900B-FL 10base-FL [Cyclone] 9050 3c905 100BaseTX [Boomerang] 9051 3c905 100BaseT4 [Boomerang] 9055 3c905B 100BaseTX [Cyclone] @@ -2428,21 +2731,23 @@ 1028 0098 3C905B Fast Etherlink XL 10/100 1028 0099 3C905B Fast Etherlink XL 10/100 10b7 9055 3C905B Fast Etherlink XL 10/100 - 9056 3c905B-T4 [Fast EtherLink XL 10/100] - 9058 3c905B-Combo [Deluxe Etherlink XL 10/100] - 905a 3c905B-FX [Fast Etherlink XL FX 10/100] + 9056 3c905B-T4 Fast EtherLink XL [Cyclone] + 9058 3c905B Deluxe Etherlink 10/100/BNC [Cyclone] + 905a 3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone] 9200 3c905C-TX/TX-M [Tornado] 1028 0095 3C920 Integrated Fast Ethernet Controller 1028 0097 3C920 Integrated Fast Ethernet Controller + 1028 012a 3C920 Integrated Fast Ethernet Controller [Latitude C640] 10b7 1000 3C905C-TX Fast Etherlink for PC Management NIC 10b7 7000 10/100 Mini PCI Ethernet Adapter - 9201 3C920B-EMB Integrated Fast Ethernet Controller - 9300 3CSOHO100B-TX [910-A01] - 9800 3c980-TX [Fast Etherlink XL Server Adapter] + 10f1 2466 Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller) + 9201 3C920B-EMB Integrated Fast Ethernet Controller [Tornado] + 9202 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller + 9210 3C920B-EMB-WNM Integrated Fast Ethernet Controller + 9300 3CSOHO100B-TX 910-A01 [tulip] + 9800 3c980-TX Fast Etherlink XL Server Adapter [Cyclone] 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter - 9805 3c980-TX 10/100baseTX NIC [Python-T] - 10b7 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] - 10b7 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] + 9805 3c980-C 10/100baseTX NIC [Python-T] 10b7 9805 3c980 10/100baseTX NIC [Python-T] 10f1 2462 Thunder K7 S2462 9900 3C990-TX [Typhoon] @@ -2458,9 +2763,10 @@ 10b7 2102 3CR990-FX-97 Server [Typhoon Fiber 168-bit] 9908 3CR990SVR95 [Typhoon Server 56-bit] 9909 3CR990SVR97 [Typhoon Server 168-bit] + 990a 3C990SVR [Typhoon Server] 990b 3C990SVR [Typhoon Server] 10b8 Standard Microsystems Corp [SMC] - 0005 83C170QF + 0005 83c170 EPIC/100 Fast Ethernet Adapter 1055 e000 LANEPIC 10/100 [EVB171Q-PCI] 1055 e002 LANEPIC 10/100 [EVB171G-PCI] 10b8 a011 EtherPower II 10/100 @@ -2468,7 +2774,7 @@ 10b8 a015 EtherPower II 10/100 10b8 a016 EtherPower II 10/100 10b8 a017 EtherPower II 10/100 - 0006 LANEPIC + 0006 83c175 EPIC/100 Fast Ethernet Adapter 1055 e100 LANEPIC Cardbus Fast Ethernet Adapter 1055 e102 LANEPIC Cardbus Fast Ethernet Adapter 1055 e300 LANEPIC Cardbus Fast Ethernet Adapter @@ -2478,6 +2784,8 @@ 13a2 8006 LANEPIC Cardbus Fast Ethernet Adapter 1000 FDC 37c665 1001 FDC 37C922 +# 802.11g card + 2802 SMC2802W [EZ Connect g] a011 83C170QF b106 SMC34C90 10b9 ALi Corporation @@ -2522,6 +2830,7 @@ 3151 M3151 3307 M3307 3309 M3309 + 3323 M3325 Video/Audio Decoder 5212 M4803 5215 MS4803 5217 M5217H @@ -2543,7 +2852,7 @@ 1014 0506 ThinkPad R30 5453 M5453 PCI AC-Link Controller Modem Device 5455 M5455 PCI AC-Link Controller Audio Device - 5457 Intel 537 [M5457 AC-Link Modem] + 5457 M5457 AC'97 Modem Controller # Same but more usefull for driver's lookup 5459 SmartLink SmartPCI561 56K Modem # SmartLink PCI SoftModem @@ -2554,6 +2863,9 @@ 10b9 7101 ALI M7101 Power Management Controller 10ba Mitsubishi Electric Corp. 0301 AccelGraphics AccelECLIPSE + 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] + 0308 Tornado 3000 [OEM Evans & Sutherland] + 1002 VG500 [VolumePro Volume Rendering Accelerator] 10bb Dapha Electronics Corporation 10bc Advanced Logic Research 10bd Surecom Technology @@ -2594,6 +2906,7 @@ 10f7 8312 MagicGraph 128XD 0005 NM2200 [MagicGraph 256AV] 1014 00dd ThinkPad 570 + 1028 0088 Latitude CPi A400XT 0006 NM2360 [MagicMedia 256ZX] 0016 NM2380 [MagicMedia 256XL+] 10c8 0016 MagicMedia 256XL+ @@ -2725,7 +3038,7 @@ 1102 1024 CT6932 RIVA TNT2 Value 32Mb 1102 102c CT6931 RIVA TNT2 Value [Jumper] 1462 8808 MSI-8808 - 1554 1041 PixelView RIVA TNT2 M64 32MB + 1554 1041 Pixelview RIVA TNT2 M64 002e NV6 [Vanta] 002f NV6 [Vanta] 0060 nForce2 ISA Bridge @@ -2781,9 +3094,11 @@ 0150 NV15 [GeForce2 GTS/Pro] 1043 4016 V7700 AGP Video Card 107d 2840 WinFast GeForce2 GTS with TV output + 107d 2842 WinFast GeForce 2 Pro 1462 8831 Creative GeForce2 Pro 0151 NV15DDR [GeForce2 Ti] 1043 405f V7700Ti + 1462 5506 Creative 3D Blaster Geforce2 Titanium 0152 NV15BR [GeForce2 Ultra, Bladerunner] 1048 0c56 GLADIAC Ultra 0153 NV15GL [Quadro2 Pro] @@ -2798,16 +3113,23 @@ 0174 NV17 [GeForce4 440 Go] 0175 NV17 [GeForce4 420 Go] 0176 NV17 [GeForce4 420 Go 32M] + 4c53 1090 Cx9 / Vx9 mainboard + 0177 NV17 [GeForce4 460 Go] 0178 NV17GL [Quadro4 550 XGL] 0179 NV17 [GeForce4 440 Go 64M] + 10de 0179 GeForce4 MX (Mac) 017a NV17GL [Quadro4 200/400 NVS] 017b NV17GL [Quadro4 550 XGL] 017c NV17GL [Quadro4 550 GoGL] 0181 NV18 [GeForce4 MX 440 AGP 8x] 1043 806f V9180 Magic 1462 8880 MS-StarForce GeForce4 MX 440 with AGP8X + 1462 8900 MS-8890 GeForce 4 MX440 AGP8X + 1462 9350 MSI Geforce4 MX T8X with AGP8X + 147b 8f0d Siluro GF4 MX-8X 0182 NV18 [GeForce4 MX 440SE AGP 8x] 0183 NV18 [GeForce4 MX 420 AGP 8x] + 0185 NV18 [GeForce4 MX 4000 AGP 8x] 0188 NV18GL [Quadro4 580 XGL] 018a NV18GL [Quadro4 NVS AGP 8x] 018b NV18GL [Quadro4 380 XGL] @@ -2822,7 +3144,7 @@ 01b7 nForce AGP to PCI Bridge 01b8 nForce PCI-to-PCI bridge 01bc nForce IDE - 01c1 Intel 537 [nForce MC97 Modem] + 01c1 nForce AC'97 Modem Controller 01c2 nForce USB Controller 01c3 nForce Ethernet Controller 01e0 nForce2 AGP (different version?) @@ -2863,21 +3185,42 @@ 0309 NV30GL [Quadro FX 1000] 0311 NV31 [GeForce FX 5600 Ultra] 0312 NV31 [GeForce FX 5600] + 0314 NV31 [GeForce FX 5600XT] + 031a NV31M [GeForce FX Go 5600] + 031c NVIDIA Quadro FX 700 Go 0321 NV34 [GeForce FX 5200 Ultra] 0322 NV34 [GeForce FX 5200] + 1462 9171 MS-8917 (FX5200-T128) + 0324 NV34M [GeForce FX Go 5200] + 1071 8160 MIM2000 + 0328 NV34M [GeForce FX Go 5200] + 0329 NV34M [GeForce FX Go5200] 032b NV34GL [Quadro FX 500] + 032c NV34GLM [GeForce FX Go 5300] 0330 NV35 [GeForce FX 5900 Ultra] 0331 NV35 [GeForce FX 5900] + 0332 NV35 [GeForce FX 5900XT] + 0333 NV38 [GeForce FX 5950 Ultra] 0338 NV35GL [Quadro FX 3000] + 0341 NV 36 [GeForce 5700 Ultra] + 0342 NV 36 [GeForce 5700] 10df Emulex Corporation 1ae5 LP6000 Fibre Channel Host Adapter + 1ae6 LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + 1ae7 LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:2-3) f085 LP850 Fibre Channel Adapter f095 LP952 Fibre Channel Adapter f098 LP982 Fibre Channel Adapter f700 LP7000 Fibre Channel Host Adapter + f701 LP 7000EFibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f800 LP8000 Fibre Channel Host Adapter + f801 LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f900 LP9000 Fibre Channel Host Adapter + f901 LP 9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f980 LP9802 Fibre Channel Adapter + f981 LP 9802 Fibre Channel Host Adapter Alternate ID + f982 LP 9802 Fibre Channel Host Adapter Alternate ID + fa00 LP10000 Fibre Channel Host Adapter 10e0 Integrated Micro Solutions Inc. 5026 IMS5026/27/28 5027 IMS5027 @@ -2900,6 +3243,7 @@ 10e6 Gainbery Computer Products Inc. 10e7 Vadem 10e8 Applied Micro Circuits Corp. + 1072 INES GPIB-PCI (AMCC5920 based) 2011 Q-Motion Video Capture/Edit board 4750 S5930 [Matchmaker] 5920 S5920 @@ -2926,6 +3270,8 @@ 5000 CyberPro 5000 5050 CyberPro 5050 5202 CyberPro 5202 +# CyberPro5202 Audio Function + 5252 CyberPro5252 10eb Artists Graphics 0101 3GA 8111 Twist3 Frame Grabber @@ -2943,6 +3289,7 @@ 8139 RTL-8139/8139C/8139C+ 1025 8920 ALN-325 1025 8921 ALN-325 + 1071 8160 MIM2000 10bd 0320 EP-320X-R 10ec 8139 RT8139 1186 1300 DFE-538TX @@ -2954,17 +3301,20 @@ 1429 d010 ND010 1432 9130 EN-9130TX 1436 8139 RT8139 + 1458 e000 GA-7VM400M Motherboard 146c 1439 FE-1439TX 1489 6001 GF100TXRII 1489 6002 GF100TXRA 149c 139a LFE-8139ATX 149c 8139 LFE-8139TX + 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card 2646 0001 EtheRx 8e2e 7000 KF-230TX 8e2e 7100 KF-230TX/2 a0a0 0007 ALN-325C - 8169 RTL-8169 + 8169 RTL-8169 Gigabit Ethernet 1371 434e ProG-2000L + 8180 RTL8180L 802.11b MAC 8197 SmartLAN56 56K Modem 10ed Ascii Corporation 7310 V7310 @@ -2975,6 +3325,7 @@ 3fc3 RME Digi96/8 Pad 3fc4 RME Digi9652 (Hammerfall) 3fc5 RME Hammerfall DSP + 3fc6 RME Hammerfall DSP MADI 8381 Ellips Santos Frame Grabber 10ef Racore Computer Products, Inc. 8154 M815x Token Ring Adapter @@ -2991,7 +3342,7 @@ 10f9 PC Direct 10fa Truevision 000c TARGA 1000 -10fb Thesys Gesellschaft für Mikroelektronik mbH +10fb Thesys Gesellschaft für Mikroelektronik mbH 186f TH 6255 10fc I-O Data Device, Inc. # What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives @@ -3029,7 +3380,10 @@ 0004 SB Audigy 1102 0051 SB0090 Audigy Player 1102 0053 SB0090 Audigy Player/OEM + 1102 0058 SB0090 Audigy Player/OEM + 1102 2002 SB Audigy 2 ZS (SB0350) 0006 [SB Live! Value] EMU10k1X + 0007 SB Audigy LS 4001 SB Audigy FireWire Port 1102 0010 SB Audigy FireWire Port 7002 SB Live! MIDI/Game Port @@ -3037,6 +3391,7 @@ 7003 SB Audigy MIDI/Game port 1102 0040 SB Audigy MIDI/Game Port 7004 [SB Live! Value] Input device controller + 7005 SB Audigy LS MIDI/Game port 8064 SB0100 [SBLive! 5.1 OEM] 8938 Ectiva EV1938 1103 Triones Technologies, Inc. @@ -3055,6 +3410,13 @@ 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder 8300 REALmagic Hollywood Plus DVD Decoder 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder + 8401 EM8401 REALmagic DVD/MPEG-2 A/V Decoder + 8470 EM8470 REALmagic DVD/MPEG-4 A/V Decoder + 8471 EM8471 REALmagic DVD/MPEG-4 A/V Decoder + 8475 EM8475 REALmagic DVD/MPEG-4 A/V Decoder + 8476 EM8476 REALmagic DVD/MPEG-4 A/V Decoder + 8485 EM8485 REALmagic DVD/MPEG-4 A/V Decoder + 8486 EM8486 REALmagic DVD/MPEG-4 A/V Decoder 1106 VIA Technologies, Inc. 0102 Embedded VIA Ethernet Controller 0130 VT6305 1394.A Controller @@ -3068,10 +3430,13 @@ 0505 VT82C505 # Shares chip with :0576. The VT82C576M has :1571 instead of :0561. 0561 VT82C576MV - 0571 VT82C586A/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE + 0571 VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE 1019 0985 P6VXA Motherboard + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 8052 VT8233A Bus Master ATA100/66/33 IDE 1043 808c A7V8X motherboard + 1043 80a1 A7V8X-X motherboard rev. 1.01 + 1043 80ed A7V600 motherboard 1106 0571 VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE 1179 0001 Magnia Z310 1297 f641 FX41 motherboard @@ -3112,10 +3477,14 @@ 1106 VT82C570MV 1571 VT82C576M/VT82C586 1595 VT82C595/97 [Apollo VP2/97] - 3038 USB +# This is *not* USB 2.0 as the existing entry suggests + 3038 VT82xxxxx UHCI USB 1.1 Controller 0925 1234 USB Controller 1019 0985 P6VXA Motherboard - 1043 808c A7V8X motherboard + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1043 808c VT6202 USB2.0 4 port controller + 1043 80a1 A7V8X-X motherboard + 1043 80ed A7V600 motherboard 1179 0001 Magnia Z310 1458 5004 GA-7VAX Mainboard 3040 VT82C586B ACPI @@ -3126,6 +3495,7 @@ 3044 IEEE 1394 Host Controller 3050 VT82C596 Power Management 3051 VT82C596 Power Management + 3053 VT6105M [Rhine-III] 3057 VT82C686 [Apollo Super ACPI] 1019 0985 P6VXA Motherboard 1043 8033 A7V Mainboard @@ -3134,17 +3504,23 @@ 1043 8042 A7V133/A7V133-C Mainboard 1179 0001 Magnia Z310 3058 VT82C686 AC97 Audio Controller + 0e11 0097 SoundMax Digital Integrated Audio 0e11 b194 Soundmax integrated digital audio 1019 0985 P6VXA Motherboard 1106 4511 Onboard Audio on EP7KXA 1458 7600 Onboard Audio 1462 3091 MS-6309 Onboard Audio 15dd 7609 Onboard Audio - 3059 VT8233/A/8235 AC97 Audio Controller + 3059 VT8233/A/8235/8237 AC97 Audio Controller + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 8095 A7V8X Motherboard (Realtek ALC650 codec) + 1043 80b0 A7V600 motherboard (ADI AD1980 codec [SoundMAX]) + 1106 3059 L7VMM2 Motherboard 1297 c160 FX41 motherboard (Realtek ALC650 codec) 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) + 1462 3800 KT266 onboard audio 3065 VT6102 [Rhine-II] + 1043 80a1 A7V8X-X Motherboard 1106 0102 VT6102 [Rhine II] Embeded Ethernet Controller on VT8235 1186 1400 DFE-530TX rev A 1186 1401 DFE-530TX rev B @@ -3160,10 +3536,14 @@ 3102 VT8662 Host Bridge 3103 VT8615 Host Bridge 3104 USB 2.0 + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 808c A7V8X motherboard + 1043 80a1 A7V8X-X motherboard rev 1.01 + 1043 80ed A7V600 motherboard 1297 f641 FX41 motherboard 1458 5004 GA-7VAX Mainboard 3106 VT6105 [Rhine-III] + 1186 1403 DFE-530TX rev C 3109 VT8233C PCI to ISA Bridge 3112 VT8361 [KLE133] Host Bridge 3116 VT8375 [KM266/KL266] Host Bridge @@ -3176,17 +3556,33 @@ 3133 VT3133 Host Bridge 3147 VT8233A ISA Bridge 3148 P4M266 Host Bridge + 3149 VIA VT6420 SATA RAID Controller + 1043 80ed A7V600 motherboard + 1462 7020 MSI Neo K8T FIS2R mainboard 3156 P/KN266 Host Bridge +# on ASUS P4P800 + 3164 VT6410 ATA133 RAID controller 3168 VT8374 P4X400 Host Controller/AGP Bridge 3177 VT8235 ISA Bridge + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 808c A7V8X motherboard + 1043 80a1 A7V8X-X motherboard 1297 f641 FX41 motherboard 1458 5001 GA-7VAX Mainboard - 3189 VT8377 [KT400 AGP] Host Bridge + 3188 VT8385 [K8T800 AGP] Host Bridge + 3189 VT8377 [KT400/KT600 AGP] Host Bridge 1043 807f A7V8X motherboard 1458 5000 GA-7VAX Mainboard +# Updated the entry to the proper "chip [name] desc" format + 3205 VT8378 [KM400] Chipset Host Bridge + 1458 5000 GA-7VM400M Motherboard + 3227 VT8237 ISA bridge [K8T800 South] + 1043 80ed A7V600 motherboard 5030 VT82C596 ACPI [Apollo PRO] 6100 VT85C100A [Rhine II] +# S3 Graphics UniChromeâ„¢ 2D/3D Graphics with motion compensation + 7205 VT8378 [S3 UniChrome] Integrated Video + 1458 d000 GA-7VM400M Motherboard 8231 VT8231 [PCI-to-ISA Bridge] 8235 VT8235 ACPI 8305 VT8363/8365 [KT133/KM133 AGP] @@ -3207,7 +3603,10 @@ b103 VT8615 AGP Bridge b112 VT8361 [KLE133] AGP Bridge b168 VT8235 PCI Bridge + b188 VT8237 PCI bridge [K8T800 South] b198 VT8237 PCI Bridge +# 32-Bit PCI bus master Ethernet MAC with standard MII interface + d104 VT8237 Integrated Fast Ethernet Controller 1107 Stratus Computers 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) 1108 Proteon, Inc. @@ -3231,6 +3630,7 @@ 007c FSC Remote Service Controller, shared memory device 007d FSC Remote Service Controller, SMIC device 2102 DSCC4 WAN adapter + 2104 Eicon Diva 2.02 compatible passive ISDN card 4021 SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter) 4942 FPGA I-Bus Tracer for MBD 6120 SZB6120 @@ -3256,13 +3656,15 @@ 103c 1207 EN-1207D Fast Ethernet Adapter 1113 1211 EN-1207D Fast Ethernet Adapter 1216 EN-1216 Ethernet Adapter + 1113 2242 EN2242 10/100 Ethernet Mini-PCI Card 111a 1020 SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?] 1217 EN-1217 Ethernet Adapter 5105 10Mbps Network card 9211 EN-1207D Fast Ethernet Adapter 1113 9211 EN-1207D Fast Ethernet Adapter - 9511 Fast Ethernet Adapter + 9511 21x4x DEC-Tulip compatible Fast Ethernet 1114 Atmel Corporation + 0506 802.11b Wireless Network Adaptor (at76c506) 1115 3D Labs 1116 Data Translation 0022 DT3001 @@ -3283,14 +3685,18 @@ 0003 GDT 6120/6520 0004 GDT 6530 0005 GDT 6550 - 0006 GDT 6x17 - 0007 GDT 6x27 + 0006 GDT 6117/6517 + 0007 GDT 6127/6527 0008 GDT 6537 - 0009 GDT 6557 + 0009 GDT 6557/6557-ECC 000a GDT 6115/6515 000b GDT 6125/6525 000c GDT 6535 000d GDT 6555 + 0010 GDT 6115/6515 + 0011 GDT 6125/6525 + 0012 GDT 6535 + 0013 GDT 6555/6555-ECC 0100 GDT 6117RP/6517RP 0101 GDT 6127RP/6527RP 0102 GDT 6537RP @@ -3345,7 +3751,8 @@ 0211 GDT 6529RD/6629RD 0260 GDT 7519RN/7619RN 0261 GDT 7529RN/7629RN - 0300 GDT Raid Controller + 02ff GDT MAXRP + 0300 GDT NEWRX 111a Efficient Networks, Inc 0000 155P-MF1 (FPGA) 0002 155P-MF1 (ASIC) @@ -3361,6 +3768,7 @@ 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) 0007 SpeedStream ADSL 111a 1001 ENI-3061 ADSL [ASIC] + 1203 SpeedStream 1023 Wireless PCI Adapter 111b Teledyne Electronic Systems 111c Tricord Systems Inc. 0001 Powerbis Bridge @@ -3409,11 +3817,32 @@ 7135 SAA7135 Audio+video broadcast decoder 7145 SAA7145 7146 SAA7146 + 110a 0000 Fujitsu/Siemens DVB-C card rev1.5 + 110a ffff Fujitsu/Siemens DVB-C card rev1.5 + 1131 4f56 KNC1 DVB-S Budget + 1131 4f61 Fujitsu-Siemens Activy DVB-S Budget 114b 2003 DVRaptor Video Edit/Capture Card 11bd 0006 DV500 Overlay 11bd 000a DV500 Overlay + 13c2 0000 Siemens/Technotrend/Hauppauge DVB card rev1.3 + 13c2 0001 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 + 13c2 0002 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0003 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0004 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0006 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 + 13c2 0008 Technotrend/Hauppauge DVB-T + 13c2 000a Octal/Technotrend DVB-C for iTV + 13c2 1003 Technotrend-Budget / Hauppauge WinTV-NOVA-S DVB card + 13c2 1004 Technotrend-Budget / Hauppauge WinTV-NOVA-C DVB card + 13c2 1005 Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card + 13c2 100c Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card + 13c2 100f Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card + 13c2 1011 Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card + 13c2 1013 SATELCO Multimedia DVB + 13c2 1102 Technotrend/Hauppauge DVB card rev2.1 1132 Mitel Corp. -1133 Eicon Technology Corporation +# This is the new official company name. See disclaimer on www.eicon.com for details! +1133 Eicon Networks Corporation 7901 EiconCard S90 7902 EiconCard S90 7911 EiconCard S91 @@ -3478,6 +3907,8 @@ 1133 1c0c Diva Server V-PRI/E1-30 Cornet NQ 3 e01e Diva Server 2PRI e020 Diva Server 4PRI + e024 Diva Server Analog-4P + e028 Diva Server Analog-8P 1134 Mercury Computer Systems 0001 Raceway Bridge 1135 Fuji Xerox Co Ltd @@ -3545,24 +3976,37 @@ 1148 5843 FDDI SK-5843 (SK-NET FDDI-LP64) 1148 5844 FDDI SK-5844 (SK-NET FDDI-LP64 DAS) 4200 Token Ring adapter - 4300 Gigabit Ethernet - 1148 9821 SK-9821 (1000Base-T single link) - 1148 9822 SK-9822 (1000Base-T dual link) - 1148 9841 SK-9841 (1000Base-LX single link) - 1148 9842 SK-9842 (1000Base-LX dual link) - 1148 9843 SK-9843 (1000Base-SX single link) - 1148 9844 SK-9844 (1000Base-SX dual link) - 1148 9861 SK-9861 (1000Base-SX VF45 single link) - 1148 9862 SK-9862 (1000Base-SX VF45 dual link) -# Information got from SysKonnekt - 1148 9871 SK-9871 (1000Base-ZX single link) -# Information got from SysKonnekt - 1148 9872 SK-9872 (1000Base-ZX dual link) - 1259 2970 AT-2970SX [Allied Telesyn] - 1259 2972 AT-2970T [Allied Telesyn] - 1259 2975 AT-2970SX [Allied Telesyn] - 1259 2977 AT-2970T [Allied Telesyn] - 4320 SK-98xx Gigabit Ethernet Server Adapter + 4300 SK-98xx Gigabit Ethernet Server Adapter + 1148 9821 SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T) + 1148 9822 SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link) + 1148 9841 SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX) + 1148 9842 SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link) + 1148 9843 SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX) + 1148 9844 SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link) + 1148 9861 SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition) + 1148 9862 SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link) + 1148 9871 SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX) + 1148 9872 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) + 1259 2970 AT-2970SX Gigabit Ethernet Adapter + 1259 2971 AT-2970LX Gigabit Ethernet Adapter + 1259 2972 AT-2970TX Gigabit Ethernet Adapter + 1259 2973 AT-2971SX Gigabit Ethernet Adapter + 1259 2974 AT-2971T Gigabit Ethernet Adapter + 1259 2975 AT-2970SX/2SC Gigabit Ethernet Adapter + 1259 2976 AT-2970LX/2SC Gigabit Ethernet Adapter + 1259 2977 AT-2970TX/2TX Gigabit Ethernet Adapter + 4320 SK-98xx V2.0 Gigabit Ethernet Adapter + 1148 0121 Marvell RDK-8001 Adapter + 1148 0221 Marvell RDK-8002 Adapter + 1148 0321 Marvell RDK-8003 Adapter + 1148 0421 Marvell RDK-8004 Adapter + 1148 0621 Marvell RDK-8006 Adapter + 1148 0721 Marvell RDK-8007 Adapter + 1148 0821 Marvell RDK-8008 Adapter + 1148 0921 Marvell RDK-8009 Adapter + 1148 1121 Marvell RDK-8011 Adapter + 1148 1221 Marvell RDK-8012 Adapter + 1148 3221 SK-9521 V2.0 10/100/1000Base-T Adapter 1148 5021 SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter 1148 5041 SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter 1148 5043 SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter @@ -3570,7 +4014,8 @@ 1148 5061 SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter 1148 5071 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter 1148 9521 SK-9521 10/100/1000Base-T Adapter - 4400 Gigabit Ethernet + 4400 SK-9Dxx Gigabit Ethernet Adapter + 4500 SK-9Mxx Gigabit Ethernet Adapter 1149 Win System Corporation 114a VMIC 5579 VMIPCI-5579 (Reflective Memory Card) @@ -3611,14 +4056,28 @@ 114f 0031 DataFire RAS BRI S/T Adapter 0026 AccelePort 4r 920 0027 AccelePort Xr 920 + 0028 ClassicBoard 4 + 0029 ClassicBoard 8 0034 AccelePort 2r 920 0035 DataFire DSP T1/E1/PRI cPCI 0040 AccelePort Xp - 0042 AccelePort 2p PCI + 0042 AccelePort 2p + 0043 AccelePort 4p + 0044 AccelePort 8p + 0045 AccelePort 16p + 004e AccelePort 32p 0070 Datafire Micro V IOM2 (Europe) 0071 Datafire Micro V (Europe) 0072 Datafire Micro V IOM2 (North America) 0073 Datafire Micro V (North America) + 00b0 Digi Neo 4 + 00b1 Digi Neo 8 + 00c8 Digi Neo 2 DB9 + 00c9 Digi Neo 2 DB9 PRI + 00ca Digi Neo 2 RJ45 + 00cb Digi Neo 2 RJ45 PRI + 00d0 ClassicBoard 4 422 + 00d1 ClassicBoard 8 422 6001 Avanstar 1150 Thinking Machines Corp 1151 JAE Electronics Inc. @@ -3665,6 +4124,7 @@ 000f Cardbus Ethernet 10/100 1014 0183 10/100 EtherJet Cardbus Adapter 115d 0183 Cardbus Ethernet 10/100 + 00d4 Mini-PCI K56Flex Modem 0101 Cardbus 56k modem 115d 1081 Cardbus 56k Modem 0103 Cardbus Ethernet + 56k Modem @@ -3698,6 +4158,8 @@ 0015 CMIC-GC Host Bridge 0016 CMIC-GC Host Bridge 0017 GCNB-LE Host Bridge + 0101 CIOB-X2 + 0110 CIOB-E I/O Bridge with Gigabit Ethernet 0200 OSB4 South Bridge 0201 CSB5 South Bridge 4c53 1080 CT8 mainboard @@ -3709,10 +4171,11 @@ 0220 OSB4/CSB5 OHCI USB Controller 4c53 1080 CT8 mainboard 0221 CSB6 OHCI USB Controller - 0225 GCLE Host Bridge + 0225 CSB5 LPC bridge # cancelled 4c53 1080 CT8 mainboard 0227 GCLE-2 Host Bridge + 0230 CSB5 LPC bridge 4c53 1080 CT8 mainboard 1167 Mutoh Industries Inc 1168 Thine Electronics Inc @@ -3769,6 +4232,7 @@ 1014 0185 ThinkPad A/T/X Series 104d 80df Vaio PCG-FX403 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 14ef 0220 PCD-RP-220S 0477 RL5c477 0478 RL5c478 1014 0184 ThinkPad A30p (2653-64G) @@ -3792,7 +4256,11 @@ 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter 1340 DFE-690TXD CardBus PC Card 1561 DRP-32TXD Cardbus PC Card - 4000 DL2K Ethernet + 3300 DWL-510 2.4GHz Wireless PCI Adapter + 3b05 DWL-G650+ CardBus PC Card + 4000 DL2000-based Gigabit Ethernet + 4c00 Gigabit Ethernet Adapter + 8400 D-Link DWL-650+ CardBus PC Card 1187 Advanced Technology Laboratories, Inc. 1188 Shima Seiki Manufacturing Ltd. 1189 Matsushita Electronics Co Ltd @@ -3845,6 +4313,7 @@ 1195 Ratoc System Inc 1196 Hytec Electronics Ltd 1197 Gage Applied Sciences, Inc. + 010c CompuScope 82G 8bit 2GS/s Analog Input Card 1198 Lambda Systems Inc 1199 Attachmate Corporation 119a Mind Share, Inc. @@ -3868,11 +4337,20 @@ 11a9 InnoSys Inc. 4240 AMCC S933Q Intelligent Serial Card 11aa Actel -11ab Galileo Technology Ltd. +# (formerly Galileo technologies) +11ab Marvell 0146 GT-64010/64010A System Controller + 4320 Yukon Gigabit Ethernet 10/100/1000Base-T Adapter 4611 GT-64115 System Controller 4620 GT-64120/64120A/64121A System Controller 4801 GT-48001 + 5040 MV88SX5040 4-port SATA I PCI-X Controller + 5041 MV88SX5041 4-port SATA I PCI-X Controller + 5080 MV88SX5080 8-port SATA I PCI-X Controller + 5081 MV88SX5081 8-port SATA I PCI-X Controller + 6041 MV88SX6041 4-port SATA II PCI-X Controller + 6081 MV88SX6081 8-port SATA II PCI-X Controller + 6460 MV64360/64361/64362 System Controller f003 GT-64010 Primary Image Piranha Image Generator 11ac Canon Information Systems Research Aust. 11ad Lite-On Communications Inc @@ -3886,6 +4364,7 @@ 11ad c001 LNE100TX [ver 2.0] 11ae Aztech System Ltd 11af Avid Technology Inc. + 0001 [Cinema] 11b0 V3 Semiconductor Inc. 0002 V300PSC 0292 V292PBC [Am29030/40 Bridge] @@ -3966,6 +4445,7 @@ 0444 LT WinModem 0445 LT WinModem 8086 2203 PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card) + 8086 2204 PRO/100+ MiniPCI on Armada E500 0446 LT WinModem 0447 LT WinModem 0448 WinModem 56k @@ -4011,6 +4491,7 @@ 0461 V90 WildWire Modem 0462 V90 WildWire Modem 0480 Venus Modem (V90, 56KFlex) + 048c V.92 56K WinModem 5801 USB 5802 USS-312 USB Controller # 4 port PCI USB Controller made by Agere (formely Lucent) @@ -4047,6 +4528,7 @@ 11d2 Intercom Inc. 11d3 Trancell Systems Inc 11d4 Analog Devices + 1535 Blackfin BF535 processor 1805 SM56 PCI modem 1889 AD1889 sound chip 11d5 Ikon Corporation @@ -4107,7 +4589,7 @@ 11f6 2011 RL100-ATX 2201 ReadyLink 100TX (Winbond W89C840) 11f6 2011 ReadyLink 100TX - 9881 RL100TX + 9881 RL100TX Fast Ethernet 11f7 Scientific Atlanta 11f8 PMC-Sierra Inc. 7375 PM7375 [LASAR-155 ATM SAR] @@ -4117,18 +4599,28 @@ 11fc Silicon Magic 11fd High Street Consultants 11fe Comtrol Corporation - 0001 RocketPort 8 Oct - 0002 RocketPort 8 Intf - 0003 RocketPort 16 Intf - 0004 RocketPort 32 Intf - 0005 RocketPort Octacable - 0006 RocketPort 8J - 0007 RocketPort 4-port - 0008 RocketPort 8-port - 0009 RocketPort 16-port - 000a RocketPort Plus Quadcable - 000b RocketPort Plus Octacable - 000c RocketPort 8-port Modem + 0001 RocketPort 32 port w/external I/F + 0002 RocketPort 8 port w/external I/F + 0003 RocketPort 16 port w/external I/F + 0004 RocketPort 4 port w/quad cable + 0005 RocketPort 8 port w/octa cable + 0006 RocketPort 8 port w/RJ11 connectors + 0007 RocketPort 4 port w/RJ11 connectors + 0008 RocketPort 8 port w/ DB78 SNI (Siemens) connector + 0009 RocketPort 16 port w/ DB78 SNI (Siemens) connector + 000a RocketPort Plus 4 port + 000b RocketPort Plus 8 port + 000c RocketModem 6 port + 000d RocketModem 4-port + 000e RocketPort Plus 2 port RS232 + 000f RocketPort Plus 2 port RS422 + 0801 RocketPort UPCI 32 port w/external I/F + 0802 RocketPort UPCI 8 port w/external I/F + 0803 RocketPort UPCI 16 port w/external I/F + 0805 RocketPort UPCI 8 port w/octa cable + 080c RocketModem III 8 port + 080d RocketModem III 4 port + 0903 RocketPort Compact PCI 16 port w/external I/F 8015 RocketPort 4-port UART 16954 11ff Scion Corporation 1200 CSS Corporation @@ -4186,6 +4678,14 @@ 1025 1016 Travelmate 612 TX 6972 OZ6912 Cardbus Controller 1179 0001 Magnia Z310 + 7110 OZ711Mx MultiMediaBay Accelerator + 7112 OZ711EC1/M1 SmartCardBus MultiMediaBay Controller + 7113 OZ711EC1 SmartCardBus Controller + 7114 OZ711M1 SmartCardBus MultiMediaBay Controller + 71e2 OZ711E2 SmartCardBus Controller + 7212 OZ711M2 SmartCardBus MultiMediaBay Controller + 7213 OZ6933E CardBus Controller + 7223 OZ711M3 SmartCardBus MultiMediaBay Controller 1218 Hybricon Corp. 1219 First Virtual Corporation 121a 3Dfx Interactive, Inc. @@ -4228,6 +4728,7 @@ 121a 0061 Voodoo3 3500 TV (PAL) 121a 0062 Voodoo3 3500 TV (SECAM) 0009 Voodoo 4 / Voodoo 5 + 121a 0003 Voodoo5 PCI 5500 121a 0009 Voodoo5 AGP 5500/6000 0057 Voodoo 3/3000 [Avenger] 121b Advanced Telecommunications Modules @@ -4253,6 +4754,7 @@ 1224 Interactive Images 1225 Power I/O, Inc. 1227 Tech-Source + 0006 Raptor GFX 8P 1228 Norsk Elektro Optikk A/S 1229 Data Kinesis Inc. 122a Integrated Telecom @@ -4314,6 +4816,7 @@ 0e00 Fritz!PCI v2.0 ISDN 1100 C2 ISDN 1200 T1 ISDN + 2700 Fritz!Card DSL SL 1245 A.P.D., S.A. 1246 Dipix Technologies, Inc. 1247 Xylon Research, Inc. @@ -4350,10 +4853,13 @@ 1258 Gilbarco, Inc. 1259 Allied Telesyn International 2560 AT-2560 Fast Ethernet Adapter (i82557B) + a117 RTL81xx Fast Ethernet + a120 21x4x DEC-Tulip compatible 10/100 Ethernet 125a ABB Power Systems 125b Asix Electronics Corporation - 1400 ALFA GFC2204 + 1400 ALFA GFC2204 Fast Ethernet 125c Aurora Technologies, Inc. + 0101 Saturn 4520P 0640 Aries 16000P 125d ESS Technology 0000 ES336H Fax Modem (Early Model) @@ -4395,13 +4901,16 @@ 14fe 0429 ES56-PI Data Fax Modem 125e Specialvideo Engineering SRL 125f Concurrent Technologies, Inc. -1260 Harris Semiconductor +1260 Intersil Corporation 3873 Prism 2.5 Wavelan chipset 1186 3501 DWL-520 Wireless PCI Adapter + 1186 3700 DWL-520 Wireless PCI Adapter, Rev E1 1668 0414 HWP01170-01 802.11b PCI Wireless Adapter + 16a5 1601 AIR.mate PC-400 PCI Wireless LAN Adapter 1737 3874 WMP11 Wireless 802.11b PCI Adapter 8086 2513 Wireless 802.11b MiniPCI Adapter - 3890 D-Links DWL-g650 A1 + 3890 Intersil ISL3890 [Prism GT/Prism Duette] + 17cf 0014 Ovislink WL-5400PCM, Prism GT 8130 HMP8130 NTSC/PAL Video Decoder 8131 HMP8131 NTSC/PAL Video Decoder 1261 Matsushita-Kotobuki Electronics Industries, Ltd. @@ -4421,9 +4930,12 @@ 126a Lexmark International, Inc. 126b Adax, Inc. 126c Northern Telecom + 1211 10/100BaseTX [RTL81xx] + 126c 802.11b Wireless Ethernet Adapter 126d Splash Technology, Inc. 126e Sumitomo Metal Industries, Ltd. 126f Silicon Motion, Inc. + 0501 SM501 VoyagerGX 0710 SM710 LynxEM 0712 SM712 LynxEM+ 0720 SM720 Lynx3DM @@ -4498,6 +5010,7 @@ 1274 2000 Creative Sound Blaster AudioPCI128 1274 2003 Creative SoundBlaster AudioPCI 128 1274 5880 Creative Sound Blaster AudioPCI128 + 1274 8001 Sound Blaster 16PCI 4.1ch 1458 a000 5880 AudioPCI On Motherboard 6OXET 1462 6880 5880 AudioPCI On Motherboard MS-6188 1.00 270f 2001 5880 AudioPCI On Motherboard 6CTR @@ -4637,12 +5150,14 @@ 1281 Yokogawa Electric Corporation 1282 Davicom Semiconductor, Inc. 9009 Ethernet 100/10 MBit - 9100 Ethernet 100/10 MBit - 9102 Ethernet 100/10 MBit + 9100 21x4x DEC-Tulip compatible 10/100 Ethernet + 9102 21x4x DEC-Tulip compatible 10/100 Ethernet 9132 Ethernet 100/10 MBit 1283 Integrated Technology Express, Inc. 673a IT8330G + 8212 IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212) 8330 IT8330G + 8872 IT8874F PCI Dual Serial Port Controller 8888 IT8888F PCI to ISA Bridge with SMB 8889 IT8889F PCI to ISA Bridge e886 IT8330G @@ -4688,6 +5203,7 @@ 12a1 Simpact Associates, Inc. 12a2 Newgen Systems Corporation 12a3 Lucent Technologies + 8105 T8105 H100 Digital Switch 12a4 NTT Electronics Technology Company 12a5 Vision Dynamics Ltd. 12a6 Scalable Networks, Inc. @@ -4706,6 +5222,7 @@ 0002 AceNIC Gigabit Ethernet (Copper) 10a9 8002 Acenic Gigabit Ethernet 12ae 0002 Gigabit Ethernet-T (3C986-T) + 00fa Farallon PN9100-T Gigabit Ethernet 12af TDK USA Corp 12b0 Jorge Scientific Corp 12b1 GammaLink @@ -4807,6 +5324,7 @@ 12d9 Aculab PLC 0002 PCI Prosody 0004 cPCI Prosody + 0005 Aculab E1/T1 PCI card 12da True Time Inc. 12db Annapolis Micro Systems, Inc 12dc Symicron Computer Communication Ltd. @@ -4889,7 +5407,8 @@ 1304 Juniper Networks 1305 Netphone, Inc 1306 Duet Technologies -1307 Computer Boards +# Formerly ComputerBoards +1307 Measurement Computing 0001 PCI-DAS1602/16 000b PCI-DIO48H 000c PCI-PDISO8 @@ -4926,6 +5445,7 @@ 0037 PCI-DAS64/M3/16 004c PCI-DAS1000 004d PCI-QUAD04 + 0052 PCI-DAS4020/12 1308 Jato Technologies Inc. 0001 NetCelerator Adapter 1308 0001 NetCelerator Adapter @@ -4942,11 +5462,15 @@ 1313 Yaskawa Electric Co. 1316 Teradyne Inc 1317 Linksys - 0981 Fast Ethernet 10/100 - 0985 Network Everywhere Fast Ethernet 10/100 model NC100 - 1985 Fast Ethernet 10/100 + 0981 21x4x DEC-Tulip compatible 10/100 Ethernet + 0985 NC100 Network Everywhere Fast Ethernet 10/100 + 1985 21x4x DEC-Tulip compatible 10/100 Ethernet + 2850 HSP MicroModem 56 + 8201 [ADMtek] SP906B_V2 Wireless LAN adapter + 1317 8201 SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card + 9511 21x4x DEC-Tulip compatible 10/100 Ethernet 1318 Packet Engines Inc. - 0911 PCI Ethernet Adapter + 0911 GNIC-II PCI Gigabit Ethernet [Hamachi] 1319 Fortemedia, Inc 0801 Xwave QS3000A [FM801] 0802 Xwave QS3000A [FM801 game port] @@ -5083,6 +5607,7 @@ 01c0 SSCLP-200/300 135d ABB Network Partner AB 135e Sealevel Systems Inc + 5101 Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32) 7101 Single Port RS-232/422/485/530 7201 Dual Port RS-232/422/485 Interface 7202 Dual Port RS-232 Interface @@ -5109,6 +5634,7 @@ 136f Applied Magic Inc 1370 ATL Products 1371 CNet Technology Inc + 434e GigaCard Network Adapter 1373 Silicon Vision Inc 1374 Silicom Ltd 1375 Argosystems Inc @@ -5117,6 +5643,7 @@ 1378 Telemann Co. Ltd 1379 Asahi Kasei Microsystems Co Ltd 137a Mark of the Unicorn Inc + 0001 PCI-324 Audiowire Interface 137b PPT Vision 137c Iwatsu Electric Co Ltd 137d Dynachip Corporation @@ -5125,15 +5652,15 @@ 1380 Sanritz Automation Co Ltd 1381 Brains Co. Ltd 1382 Marian - Electronic & Software + 2088 Marc-8 MIDI 8 channel audio card 1383 Controlnet Inc 1384 Reality Simulation Systems Inc 1385 Netgear 4100 802.11b Wireless Adapter (MA301) 4105 MA311 802.11b wireless adapter - 620a GA620 + 620a GA620 Gigabit Ethernet 622a GA622 - 630a GA630 - f311 FA311 + 630a GA630 Gigabit Ethernet 1386 Video Domain Technologies 1387 Systran Corp 1388 Hitachi Information Technology Co Ltd @@ -5150,6 +5677,7 @@ 1392 Medialight Inc 1393 Moxa Technologies Co Ltd 1040 Smartio C104H/PCI + 1141 Industrio CP-114 1680 Smartio C168H/PCI 2040 Intellio CP-204J 2180 Intellio C218 Turbo PCI @@ -5229,6 +5757,9 @@ 13c4 Phase Metrics 13c5 Alphi Technology Corp 13c6 Condor Engineering Inc + 0520 CEI-520 A429 Card + 0620 CEI-620 A429 Card + 0820 CEI-820 A429 Card 13c7 Blue Chip Technology Ltd 13c8 Apptech Inc 13c9 Eaton Corporation @@ -5239,11 +5770,13 @@ 13ce Cocom A/S 13cf Studio Audio & Video Ltd 13d0 Techsan Electronics Co Ltd -# http://www.b2c2inc.com/products/pc-specs.html - 2103 B2C2 Sky2PC PCI [SkyStar2] + 2103 B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card + 2200 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card 13d1 Abocom Systems Inc ab02 ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter + ab03 21x4x DEC-Tulip compatible 10/100 Ethernet ab06 RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter + ab08 21x4x DEC-Tulip compatible 10/100 Ethernet 13d2 Shark Multimedia Inc 13d3 IMC Networks 13d4 Graphics Microsystems Inc @@ -5285,6 +5818,7 @@ 1401 Zentai Fibre Channel Adapter 13f5 Kansai Electric Co. Ltd 13f6 C-Media Electronics Inc + 0011 CMI8738 0100 CM8338A 13f6 ffff CMI8338/C3DX PCI Audio Device 0101 CM8338B @@ -5305,6 +5839,9 @@ 13fc Computer Peripherals International 13fd Micro Science Inc 13fe Advantech Co. Ltd + 1600 PCI-1612 4-port RS-232/422/485 PCI Communication Card + 1752 PCI-1752 + 1754 PCI-1754 1756 PCI-1756 13ff Silicon Spice Inc 1400 Artx Inc @@ -5319,9 +5856,15 @@ 0100 Lava Dual Serial 0101 Lava Quatro A 0102 Lava Quatro B + 0120 Quattro-PCI A + 0121 Quattro-PCI B + 0180 Lava Octo A + 0181 Lava Octo B 0200 Lava Port Plus 0201 Lava Quad A 0202 Lava Quad B + 0220 Lava Quattro PCI Ports A/B + 0221 Lava Quattro PCI Ports C/D 0500 Lava Single Serial 0600 Lava Port 650 8000 Lava Parallel @@ -5342,6 +5885,7 @@ 1411 Ikos Systems Inc 1412 IC Ensemble Inc 1712 ICE1712 [Envy24] + 1412 d638 M-Audio Delta 410 1724 ICE1724 [Envy24HT] 1413 Addonics 1414 Microsoft Corporation @@ -5382,10 +5926,12 @@ 142c Minton Optic Industry Co Ltd 142d Pix stream Inc 142e Vitec Multimedia + 4020 VM2-2 [Video Maker 2] MPEG1/2 Encoder 142f Radicom Research Inc 1430 ITT Aerospace/Communications Division 1431 Gilat Satellite Networks 1432 Edimax Computer Co. + 9130 RTL81xx Fast Ethernet 1433 Eltec Elektronik GmbH 1435 Real Time Devices US Inc. 1436 CIS Technology Inc @@ -5443,6 +5989,10 @@ 1460 DYNARC INC 1461 Avermedia Technologies Inc 1462 Micro-Star International Co., Ltd. + 8725 NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter +# MSI G4Ti4800, 128MB DDR SDRAM, TV-Out, DVI-I + 9000 NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter + 9119 NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter 1463 Fast Corporation 1464 Interactive Circuits & Systems Ltd 1465 GN NETTEST Telecom DIV. @@ -5533,7 +6083,7 @@ 14b5 Creamware GmBH 0200 Scope 0300 Pulsar - 0400 Pulsar2 + 0400 PulsarSRB 0600 Pulsar2 0800 DSP-Board 0900 DSP-Board @@ -5548,8 +6098,9 @@ 0340 PC4800 0350 PC4800 4500 PC4500 - 4800 PC4800 + 4800 Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800 a504 Cisco Aironet Wireless 802.11b + a505 Cisco Aironet CB20a 802.11a Wireless LAN Adapter 14ba INTERNIX Inc. 14bb SEMTECH Corporation 14bc Globespan Semiconductor Inc. @@ -5558,6 +6109,7 @@ 14bf SPIDER Communications Inc. 14c0 COMPAL Electronics Inc 14c1 MYRICOM Inc. + 8043 Myrinet 2000 Scalable Cluster Interconnect 14c2 DTK Computer 14c3 MEDIATEK Corp. 14c4 IWASAKI Information Systems Co Ltd @@ -5598,11 +6150,10 @@ 14d7 Hirakawa Hewtech Corp 14d8 HOPF Elektronik GmBH 14d9 Alpha Processor Inc + 0010 AP1011 HyperTransport-PCI Bridge [Sturgeon] 14da National Aerospace Laboratories 14db AFAVLAB Technology Inc 2120 TK9902 - 2180 P028 - 2182 P030 14dc Amplicon Liveline Ltd 0000 PCI230 0001 PCI242 @@ -5649,6 +6200,10 @@ 0e11 009a NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) 0e11 00c1 NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) 1028 0121 Broadcom BCM5701 1000Base-T + 103c 128a HP 1000Base-T (PCI) [A7061A] + 103c 128b HP 1000Base-SX (PCI) [A7073A] + 103c 12a4 HP Core Lan 1000Base-T + 103c 12c1 HP IOX Core Lan 1000Base-T [A7109AX] 10a9 8010 SGI IO9 Gigabit Ethernet (Copper) 10a9 8011 SGI Gigabit Ethernet (Copper) 10a9 8012 SGI Gigabit Ethernet (Fiber) @@ -5684,16 +6239,25 @@ 1166 1648 NetXtreme CIOB-E 1000Base-T 164d NetXtreme BCM5702FE Gigabit Ethernet 1653 NetXtreme BCM5705 Gigabit Ethernet + 1654 NetXtreme BCM5705_2 Gigabit Ethernet + 1658 NetXtreme BCM5720 Gigabit Ethernet + 1659 NetXtreme BCM5721 Gigabit Ethernet 165d NetXtreme BCM5705M Gigabit Ethernet + 165e NetXtreme BCM5705M_2 Gigabit Ethernet + 166e NetXtreme BCM5705F Gigabit Ethernet + 1676 NetXtreme BCM5750 Gigabit Ethernet + 1677 NetXtreme BCM5751 Gigabit Ethernet + 167c NetXtreme BCM5750M Gigabit Ethernet 1696 NetXtreme BCM5782 Gigabit Ethernet + 103c 12bc HP d530 CMT (DG746A) 14e4 000d NetXtreme BCM5782 1000Base-T 169c NetXtreme BCM5788 Gigabit Ethernet - 16a6 NetXtreme BCM5702 Gigabit Ethernet + 16a6 NetXtreme BCM5702X Gigabit Ethernet 0e11 00bb NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T) 1028 0126 BCM5702 1000Base-T 14e4 000c BCM5702 1000Base-T 14e4 8009 BCM5702 1000Base-T - 16a7 NetXtreme BCM5703 Gigabit Ethernet + 16a7 NetXtreme BCM5703X Gigabit Ethernet 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 14e4 0009 NetXtreme BCM5703 1000Base-T @@ -5702,25 +6266,33 @@ 14e4 800a NetXtreme BCM5703 1000Base-T 16a8 NetXtreme BCM5704S Gigabit Ethernet 10b7 2001 3C998-SX Dual Port 1000-SX PCI-X - 16c6 NetXtreme BCM5702 Gigabit Ethernet + 16c6 NetXtreme BCM5702A3 Gigabit Ethernet 10b7 1100 3C1000B-T 10/100/1000 PCI 14e4 000c BCM5702 1000Base-T 14e4 8009 BCM5702 1000Base-T 16c7 NetXtreme BCM5703 Gigabit Ethernet + 103c 12c3 HP Combo FC/GigE-SX [A9782A] + 103c 12ca HP Combo FC/GigE-T [A9784A] 14e4 0009 NetXtreme BCM5703 1000Base-T 14e4 000a NetXtreme BCM5703 1000Base-SX + 170d NetXtreme BCM5901 Gigabit Ethernet + 170e NetXtreme BCM5901_2 Gigabit Ethernet 4210 BCM4210 iLine10 HomePNA 2.0 4211 BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem 4212 BCM4212 v.90 56k modem 4301 BCM4301 802.11b 4320 BCM94306 802.11g + 1028 0001 TrueMobile 1300 WLAN Mini-PCI Card 1737 4320 WPC54G + 4324 BCM4309 802.11a/b/g + 1028 0001 Truemobile 1400 4401 BCM4401 100Base-T 1043 80a8 A7V8X motherboard 4402 BCM4402 Integrated 10/100BaseT 4410 BCM4413 iLine32 HomePNA 2.0 4411 BCM4413 V.90 56k modem 4412 BCM4413 10/100BaseT + 5690 BCM5690 12-port Multi-Layer Gigabit Ethernet Switch 5820 BCM5820 Crypto Accelerator 5821 BCM5821 Crypto Accelerator 14e5 Pixelfusion Ltd @@ -5730,6 +6302,7 @@ 14e9 GARNETS System CO Ltd 14ea Planex Communications, Inc ab06 FNW-3603-TX CardBus Fast Ethernet + ab07 RTL81xx RealTek Ethernet 14eb SEIKO EPSON Corp 14ec ACQIRIS 14ed DATAKINETICS Ltd @@ -5872,6 +6445,7 @@ 13e0 8d85 Compaq Stinger 14f1 2004 Dynalink 56PMi 8234 RS8234 ATM SAR Controller [ServiceSAR Plus] + 8800 Winfast TV2000 XP 14f2 MOBILITY Electronics 0120 EV1000 bridge 0121 EV1000 Parallel port @@ -5894,6 +6468,7 @@ 14fe ARCHTEK TELECOM Corp 14ff TWINHEAD INTERNATIONAL Corp 1500 DELTA Electronics, Inc + 1360 RTL81xx RealTek Ethernet 1501 BANKSOFT CANADA Ltd 1502 MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd 1503 KAWASAKI LSI USA Inc @@ -5926,8 +6501,10 @@ 1514 TFL LAN Inc 1515 Advent design 1516 MYSON Technology Inc + 0800 MTD-8xx 100/10M Ethernet PCI Adapter 0803 SURECOM EP-320X-S 100/10M Ethernet PCI Adapter 1320 10bd SURECOM EP-320X-S 100/10M Ethernet PCI Adapter + 0891 MTD-8xx 100/10M Ethernet PCI Adapter 1517 ECHOTEK Corp 1518 PEP MODULAR Computers GmbH 1519 TELEFON AKTIEBOLAGET LM Ericsson @@ -5952,12 +6529,19 @@ 1522 0600 RockForce+ 2 Port V.90 Data/Fax/Voice Modem 1522 0700 RockForce+ 4 Port V.90 Data/Fax/Voice Modem 1522 0800 RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0c00 RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem + 1522 0d00 RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem +# this is a correction to a recent entry. 1522:0E00 should be 1522:1D00 + 1522 1d00 RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem 1523 MUSIC Semiconductors 1524 ENE Technology Inc + 0510 CB710 Memory Card Reader Controller 1211 CB1211 Cardbus Controller 1225 CB1225 Cardbus Controller 1410 CB1410 Cardbus Controller + 1411 CB710 Cardbus Controller 1420 CB1420 Cardbus Controller + 1421 CB720 Cardbus Controller 1525 IMPACT Technologies 1526 ISS, Inc 1527 SOLECTRON @@ -5977,9 +6561,11 @@ 1535 EVERGREEN Technologies Inc 1537 DATALEX COMMUNCATIONS 1538 ARALION Inc + 0303 ARS106S Ultra ATA 133/100/66 Host Controller 1539 ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A. 153a ONO SOKKI 153b TERRATEC Electronic GmbH + 1144 Aureon 5.1 153c ANTAL Electronic 153d FILANET Corp 153e TECHWELL Inc @@ -6123,6 +6709,7 @@ 15ab Bluesteel Networks Inc 15ac North Atlantic Instruments 15ad VMWare Inc + 0405 [VMWare SVGA II] PCI Display Adapter 0710 Virtual SVGA 15ae Amersham Pharmacia Biotech 15b0 Zoltrix International Ltd @@ -6130,6 +6717,9 @@ 15b2 Mosaid Technologies Inc 15b3 Mellanox Technology 5274 MT21108 InfiniBridge + 5a44 MT23108 InfiniHost + 5a45 MT23108 InfiniHost (Tavor) + 5a46 MT23108 PCI Bridge 15b4 CCI/TRIAD 15b5 Cimetrics Inc 15b6 Texas Memory Systems Inc @@ -6139,7 +6729,9 @@ 15ba Impacct Technology Corp 15bb Portwell Inc 15bc Agilent Technologies - 2929 E2929A PCI/PCI-X Bus Analyzer + 2922 64 Bit, 133MHz PCI-X Exerciser & Protocol Checker + 2928 64 Bit, 66MHz PCI Exerciser & Analyzer + 2929 64 Bit, 133MHz PCI-X Analyzer & Exerciser 15bd DFI Inc 15be Sola Electronics 15bf High Tech Computer Corp (HTC) @@ -6149,6 +6741,7 @@ 15c3 Taiwan Mycomp Co Ltd 15c4 EVSX Inc 15c5 Procomp Informatics Ltd + 8010 1394b - 1394 Firewire 3-Port Host Adapter Card 15c6 Technical University of Budapest 15c7 Tateyama System Laboratory Co Ltd 0349 Tateyama C-PCI PLC/NC card Rev.01A @@ -6187,9 +6780,12 @@ 15e8 National Datacomm Corp 0130 Wireless PCI Card 15e9 Pacific Digital Corp + 1841 ADMA-100 DiscStaQ ATA Controller 15ea Tokyo Denshi Sekei K.K. 15eb Drsearch GmbH 15ec Beckhoff GmbH + 3101 FC3101 Profibus DP 1 Channel PCI + 5102 FC5102 15ed Macrolink Inc 15ee In Win Development Inc 15ef Intelligent Paradigm Inc @@ -6223,11 +6819,13 @@ 1619 FarSite Communications Ltd 0400 FarSync T2P (2 port X.21/V.35/V.24) 0440 FarSync T4P (4 port X.21/V.35/V.24) +1626 TDK Semiconductor Corp. + 8410 RTL81xx Fast Ethernet 1629 Kongsberg Spacetec AS 1003 Format synchronizer v3.0 2002 Fast Universal Data Output 1638 Standard Microsystems Corp [SMC] - 1100 SMC2602W EZConnect / Addtron AWA-100 + 1100 SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000 163c Smart Link Ltd. 3052 SmartLink SmartPCI562 56K Modem 5449 SmartPCI561 Modem @@ -6239,27 +6837,69 @@ 165d Hsing Tech. Enterprise Co., Ltd. 1661 Worldspace Corp. 1668 Actiontec Electronics Inc + 0100 Mini-PCI bridge +# Formerly SiByte, Inc. +166d Broadcom Corporation + 0001 SiByte BCM1125/1125H/1250 System-on-a-Chip PCI + 0002 SiByte BCM1125H/1250 System-on-a-Chip HyperTransport 1681 Hercules +# More specs, more accurate desc. + 0010 Hercules 3d Prophet II Ultra 64MB [ 350 MHz NV15BR core, 128-bit DDR @ 460 MHz, 1.5v AGP4x ] +1688 CastleNet Technology Inc. + 1170 WLAN 802.11b card +168c Atheros Communications, Inc. + 0007 AR5000 802.11a Wireless Adapter + 0011 AR5210 802.11a NIC + 0012 AR5211 802.11ab NIC + 0013 AR5212 802.11abg NIC + 1186 3202 D-link DWL-G650 B3 Wireless cardbus adapter + 1186 3203 DWL-G520 Wireless PCI Adapter + 1186 3a94 C54C Wireless 801.11g cardbus + 168c 0013 WG511T Wireless CardBus Adapter + 168c 1025 DWL-G650B2 Wireless CardBus Adapter + 1014 AR5212 802.11abg NIC 16ab Global Sun Technology Inc + 1100 GL24110P + 1101 PLX9052 PCMCIA-to-PCI Wireless LAN 1102 PCMCIA-to-PCI Wireless Network Bridge +16ae Safenet Inc + 1141 SafeXcel-1141 16be Creatix Polymedia GmbH 16ca CENATEK Inc 0001 Rocket Drive DL +16cd Densitron Technologies +# www.pikatechnologies.com +16df PIKA Technologies Inc. 16ec U.S. Robotics + 00ff USR997900 10/100 Mbps PCI Network Card 3685 Wireless Access PCI Adapter Model 022415 16f6 VideoTele.com, Inc. +# www.internetmachines.com +1702 Internet Machines Corporation (IMC) 1705 Digital First, Inc. -170b NetOctave Inc +170b NetOctave + 0100 NSP2000-SSL crypto accelerator 170c YottaYotta Inc. 172a Accelerated Encryption 1737 Linksys + 1032 Gigabit Network Adapter + 1737 0015 EG1032 v2 Instant Gigabit Network Adapter + 1064 Gigabit Network Adapter + 1737 0016 EG1064 v2 Instant Gigabit Network Adapter + ab08 21x4x DEC-Tulip compatible 10/100 Ethernet + ab09 21x4x DEC-Tulip compatible 10/100 Ethernet 173b Altima (nee Broadcom) 03e8 AC1000 Gigabit Ethernet + 03e9 AC1001 Gigabit Ethernet 03ea AC9100 Gigabit Ethernet 173b 0001 AC1002 + 03eb AC1003 Gigabit Ethernet 1743 Peppercon AG 8139 ROL/F-100 Fast Ethernet Adapter with ROL +1749 RLX Technologies 174b PC Partner Limited +174d WellX Telecom SA +175c AudioScience Inc 175e Sanera Systems, Inc. 1787 Hightech Information System Ltd. # also used by Struck Innovative Systeme for joint developments @@ -6271,21 +6911,48 @@ 0005 PROFIBUS 0006 AMCC HOTlink 1799 Belkin + 6001 Wireless PCI Card - F5D6001 + 6020 Wireless PCMCIA Card - F5D6020 + 6060 Wireless PDA Card - F5D6060 17af Hightech Information System Ltd. +17b3 Hawking Technologies + ab08 PN672TX 10/100 Ethernet +17b4 Indra Networks, Inc. + 0011 WebEnhance 100 GZIP Compression Card +17c0 Wistron Corp. +17c2 Newisys, Inc. 17cc NetChip Technology, Inc 2280 USB 2.0 +# S2io ships 10Gb PCI-X Ethernet adapters www.s2io.com +17d5 S2io Inc. 1813 Ambient Technologies Inc 4000 HaM controllerless modem 16be 0001 V9x HAM Data Fax Modem 4100 HaM plus Data Fax Modem 16be 0002 V9x HAM 1394 +1814 RaLink + 0101 Wireless PCI Adpator RT2400 / RT2460 + 0201 Ralink RT2500 802.11 Cardbus Reference Card +1830 Credence Systems Corporation 1851 Microtune, Inc. 1852 Anritsu Corp. +1867 Topspin Communications + 5a44 MT23108 PCI-X HCA + 5a45 MT23108 PCI-X HCA flash recovery + 5a46 MT23108 PCI-X HCA bridge 1888 Varisys Ltd 0301 VMFX1 FPGA PMC module 0601 VSM2 dual PMC carrier 0710 VS14x series PowerPC PCI board 0720 VS24x series PowerPC PCI board +# found e.g. on KNC DVB-S card +1894 KNC One +18a1 Astute Networks Inc. +18ca XGI - Xabre Graphics Inc + 0040 Volari V8 +18e6 MPL AG + 0001 OSCI [Octal Serial Communication Interface] +18fb Resilience Corporation 1a08 Sierra semiconductor 0000 SC15064 1b13 Jaton Corp @@ -6321,7 +6988,10 @@ 0021 HB6 Universal PCI-PCI bridge (non-transparent mode) 4c53 1050 CT7 mainboard 4c53 1080 CT8 mainboard + 4c53 10a0 CA3/CR3 mainboard 4c53 3010 PPCI mezzanine (32-bit PMC) + 4c53 3011 PPCI mezzanine (64-bit PMC) + 0026 HB2 PCI-PCI Bridge 101a E.Band [AudioTrak Inca88] 101b E.Band [AudioTrak Inca88] 8011 VXPro II Chipset @@ -6356,7 +7026,17 @@ 3d3d 0121 Oxygen VX1 000c GLINT R3 [Oxygen VX1] 3d3d 0144 Oxygen VX1-4X AGP [Permedia 4] + 000d GLint R4 rev A + 0011 GLint R4 rev B + 0012 GLint R5 rev A + 0013 GLint R5 rev B + 0020 VP10 visual processor +# P10 generic II + 0022 VP10 visual processor + 0024 VP9 visual processor 0100 Permedia II 2D+3D + 07a1 Wildcat III 6210 + 07a3 Wildcat IV 7210 1004 Permedia 3d04 Permedia ffff Glint VGA @@ -6379,11 +7059,16 @@ 4033 Addtron Technology Co, Inc. 1360 RTL8139 Ethernet 4143 Digital Equipment Corp +4144 Alpha Data 416c Aladdin Knowledge Systems 0100 AladdinCARD 0200 CPC 4444 Internext Compression Inc + 0016 iTVC16 (CX23416) MPEG-2 Encoder + 0070 4009 WinTV PVR 250 0803 iTVC15 MPEG-2 Encoder + 0070 4000 WinTV PVR-350 + 0070 4001 WinTV PVR-250 4468 Bridgeport machines 4594 Cogetec Informatique Inc 45fb Baldor Electric Company @@ -6399,6 +7084,11 @@ 4b10 Buslogic Inc. 4c48 LUNG HWA Electronics 4c53 SBS Technologies + 0000 PLUSTEST device + 4c53 3000 PLUSTEST card (PC104+) + 4c53 3001 PLUSTEST card (PMC) + 0001 PLUSTEST-MM device + 4c53 3002 PLUSTEST-MM card (PMC) 4ca1 Seanix Technology Inc 4d51 MediaQ Inc. 0200 MQ-200 @@ -6576,8 +7266,9 @@ 0003 TURBOstor HFP-832 [HiPPI NIC] 5654 VoiceTronix Pty Ltd 5700 Netpower +5851 Exacq Technologies 6356 UltraStor -6374 c't Magazin für Computertechnik +6374 c't Magazin für Computertechnik 6773 GPPCI 6409 Logitec Corp. 6666 Decision Computer International Co. @@ -6589,11 +7280,37 @@ 8008 Quancom Electronic GmbH 0010 WDOG1 [PCI-Watchdog 1] 0011 PWDOG2 [PCI-Watchdog 2] +# Wrong ID used in subsystem ID of AsusTek PCI-USB2 PCI card. +807d Asustek Computer, Inc. 8086 Intel Corp. 0007 82379AB 0008 Extended Express System Support Controller - 0039 21145 + 0008 1000 WorldMark 4300 INCA ASIC + 0039 21145 Fast Ethernet 0122 82437FX + 0326 PCI Bridge Hub I/OxAPIC Interrupt Controller A + 0327 PCI Bridge Hub I/OxAPIC Interrupt Controller B + 0329 PCI Bridge Hub A + 032a PCI Bridge Hub B + 032c PCI Bridge Hub +# A-segment bridge + 0330 80332 [Dobson] I/O processor +# A-segment IOAPIC + 0331 80332 [Dobson] I/O processor +# B-segment bridge + 0332 80332 [Dobson] I/O processor +# B-segment IOAPIC + 0333 80332 [Dobson] I/O processor +# Address Translation Unit (ATU) + 0334 80332 [Dobson] I/O processor +# PCI-X bridge + 0335 80331 [Lindsay] I/O processor +# Address Translation Unit (ATU) + 0336 80331 [Lindsay] I/O processor +# A-segment bridge + 0340 41210 [Lanai] Serial to Parallel PCI Bridge +# B-segment bridge + 0341 41210 [Lanai] Serial to Parallel PCI Bridge 0482 82375EB 0483 82424ZX [Saturn] 0484 82378IB [SIO ISA Bridge] @@ -6625,28 +7342,84 @@ 8086 1004 PRO/1000 T Server Adapter 8086 2004 PRO/1000 T Server Adapter 1008 82544EI Gigabit Ethernet Controller (Copper) + 1014 0269 iSeries 1000/100/10 Ethernet Adapter + 1028 011c PRO/1000 XT Network Connection 8086 1107 PRO/1000 XT Server Adapter 8086 2107 PRO/1000 XT Server Adapter 8086 2110 PRO/1000 XT Server Adapter + 8086 3108 PRO/1000 XT Network Connection 1009 82544EI Gigabit Ethernet Controller (Fiber) + 1014 0268 iSeries Gigabit Ethernet Adapter 8086 1109 PRO/1000 XF Server Adapter 8086 2109 PRO/1000 XF Server Adapter 100c 82544GC Gigabit Ethernet Controller (Copper) 8086 1112 PRO/1000 T Desktop Adapter 8086 2112 PRO/1000 T Desktop Adapter 100d 82544GC Gigabit Ethernet Controller (LOM) + 1028 0123 PRO/1000 XT Network Connection + 1079 891f 82544GC Based Network Connection + 4c53 1080 CT8 mainboard + 8086 110d 82544GC Based Network Connection 100e 82540EM Gigabit Ethernet Controller + 1014 0265 PRO/1000 MT Network Connection + 1014 0267 PRO/1000 MT Network Connection + 1014 026a PRO/1000 MT Network Connection + 107b 8920 PRO/1000 MT Desktop Adapter 8086 001e PRO/1000 MT Desktop Adapter 8086 002e PRO/1000 MT Desktop Adapter 100f 82545EM Gigabit Ethernet Controller (Copper) + 1014 0269 iSeries 1000/100/10 Ethernet Adapter + 1014 028e PRO/1000 MT Network Connection + 8086 1000 PRO/1000 MT Network Connection 8086 1001 PRO/1000 MT Server Adapter 1010 82546EB Gigabit Ethernet Controller (Copper) + 1014 027c PRO/1000 MT Dual Port Network Adapter + 18fb 7872 RESlink-X + 4c53 1080 CT8 mainboard + 4c53 10a0 CA3/CR3 mainboard 8086 1011 PRO/1000 MT Dual Port Server Adapter + 8086 101a PRO/1000 MT Dual Port Network Adapter 1011 82545EM Gigabit Ethernet Controller (Fiber) + 1014 0268 iSeries Gigabit Ethernet Adapter 8086 1002 PRO/1000 MF Server Adapter + 8086 1003 PRO/1000 MF Server Adapter (LX) 1012 82546EB Gigabit Ethernet Controller (Fiber) 8086 1012 PRO/1000 MF Dual Port Server Adapter + 1013 82541EI Gigabit Ethernet Controller (Copper) + 8086 0013 PRO/1000 MT Network Connection + 8086 1113 PRO/1000 MT Desktop Adapter + 1014 82541ER Gigabit Ethernet Controller 1015 82540EM Gigabit Ethernet Controller (LOM) + 1016 82540EP Gigabit Ethernet Controller (LOM) + 1014 052c PRO/1000 MT Mobile Connection + 1179 0001 PRO/1000 MT Mobile Connection + 8086 1016 PRO/1000 MT Mobile Connection + 1017 82540EP Gigabit Ethernet Controller (LOM) + 8086 1017 PR0/1000 MT Desktop Connection +# Update controller name from 82541EP to 82541EI + 1018 82541EI Gigabit Ethernet Controller + 8086 1018 PRO/1000 MT Desktop Adapter + 1019 82547EI Gigabit Ethernet Controller (LOM) + 1458 1019 GA-8IPE1000 Pro2 motherboard (865PE) + 8086 1019 PRO/1000 CT Desktop Connection + 101d 82546EB Gigabit Ethernet Controller + 8086 1000 PRO/1000 MT Quad Port Server Adapter + 101e 82540EP Gigabit Ethernet Controller (Mobile) + 1014 0549 PRO/1000 MT Mobile Connection + 1179 0001 PRO/1000 MT Mobile Connection + 8086 101e PRO/1000 MT Mobile Connection + 1026 82545GM Gigabit Ethernet Controller + 8086 1000 PRO/1000 MT Server Connection + 8086 1001 PRO/1000 MT Server Adapter + 8086 1002 PRO/1000 MT Server Adapter + 8086 1026 PRO/1000 MT Server Connection + 1027 82545GM Gigabit Ethernet Controller + 8086 1001 PRO/1000 MF Server Adapter(LX) + 8086 1002 PRO/1000 MF Server Adapter(LX) + 8086 1003 PRO/1000 MF Server Adapter(LX) + 8086 1027 PRO/1000 MF Server Adapter + 1028 82545GM Gigabit Ethernet Controller + 8086 1028 PRO/1000 MB Server Adapter 1029 82559 Ethernet Controller 1030 82559 InBusiness 10/100 1031 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller @@ -6666,6 +7439,7 @@ 1037 82801CAM (ICH3) Chipset Ethernet Controller 1038 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller 1039 82801BD PRO/100 VE (LOM) Ethernet Controller + 1014 0267 NetVista A30p 103a 82801BD PRO/100 VE (CNR) Ethernet Controller 103b 82801BD PRO/100 VM (LOM) Ethernet Controller 103c 82801BD PRO/100 VM (CNR) Ethernet Controller @@ -6674,10 +7448,49 @@ 1040 536EP Data Fax Modem 16be 1040 V.9X DSP Data Fax Modem 1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter - 1048 82597EX 10GbE Ethernet Controller + 8086 2527 MIM2000/Centrino + 1048 Intel(R) PRO/10GbE LR Server Adapter 8086 a01f PRO/10GbE LR Server Adapter 8086 a11f PRO/10GbE LR Server Adapter + 1050 82562EZ 10/100 Ethernet Controller + 1462 728c 865PE Neo2 (MS-6728) + 1051 82801EB/ER (ICH5/ICH5R) integrated LAN Controller 1059 82551QM Ethernet Controller +# Updated controller name from 82547EI to 82547GI + 1075 82547GI Gigabit Ethernet Controller + 8086 0075 PRO/1000 CT Network Connection + 8086 1075 PRO/1000 CT Network Connection +# Added PI to part name. Previous part name was 82541GI + 1076 82541GI/PI Gigabit Ethernet Controller + 8086 0076 PRO/1000 MT Network Connection + 8086 1076 PRO/1000 MT Network Connection + 8086 1176 PRO/1000 MT Desktop Adapter + 8086 1276 PRO/1000 MT Desktop Adapter +# Update controller name from 82541EI to 82541GI + 1077 82541GI Gigabit Ethernet Controller + 1179 0001 PRO/1000 MT Mobile Connection + 8086 0077 PRO/1000 MT Mobile Connection + 8086 1077 PRO/1000 MT Mobile Connection + 1078 82541EI Gigabit Ethernet Controller + 8086 1078 PRO/1000 MT Network Connection +# Update from mistaken ID of 82546EB + 1079 82546GB Gigabit Ethernet Controller + 103c 12a6 HP Dual Port 1000Base-T [A9900A] + 103c 12cf HP Core Dual Port 1000Base-T [AB352A] + 4c53 1090 Cx9 / Vx9 mainboard + 8086 0079 PRO/1000 MT Dual Port Network Connection + 8086 1079 PRO/1000 MT Dual Port Network Connection + 8086 1179 PRO/1000 MT Dual Port Network Connection + 8086 117a PRO/1000 MT Dual Port Server Adapter +# Update from mistaken ID of 82546EB + 107a 82546GB Gigabit Ethernet Controller + 103c 12a8 HP Dual Port 1000base-SX [A9899A] + 8086 107a PRO/1000 MF Dual Port Server Adapter + 8086 127a PRO/1000 MF Dual Port Server Adapter +# Update from mistaken ID of 82546EB + 107b 82546GB Gigabit Ethernet Controller + 8086 007b PRO/1000 MB Dual Port Server Connection + 8086 107b PRO/1000 MB Dual Port Server Connection 1130 82815 815 Chipset Host Bridge and Memory Controller Hub 1025 1016 Travelmate 612 TX 1043 8027 TUSL2-C Mainboard @@ -6696,6 +7509,9 @@ 1200 Intel IXP1200 Network Processor 172a 0000 AEP SSL Accelerator 1209 82559ER + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 4c53 1070 PC6 mainboard 1221 82092AA_0 1222 82092AA_1 1223 SAA7116 @@ -6744,6 +7560,7 @@ 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter 1028 009b PowerEdge 2550 + 1028 00ce PowerEdge 1400 1033 8000 PC-9821X-B06 1033 8016 PK-UG-X006 1033 801f PK-UG-X006 @@ -6769,6 +7586,7 @@ 144d 2501 SEM-2000 MiniPCI LAN Adapter 144d 2502 SEM-2100IL MiniPCI LAN Adapter 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) + 4c53 1080 CT8 mainboard 8086 0001 EtherExpress PRO/100B (TX) 8086 0002 EtherExpress PRO/100B (T4) 8086 0003 EtherExpress PRO/10+ @@ -6875,6 +7693,7 @@ 1460 82870P2 P64H2 Hub PCI Bridge 1461 82870P2 P64H2 I/OxAPIC 15d9 3480 P4DP6 + 4c53 1090 Cx9 / Vx9 mainboard 1462 82870P2 P64H2 Hot Plug Controller 1960 80960RP [i960RP Microprocessor] 101e 0431 MegaRAID 431 RAID Controller @@ -6897,6 +7716,10 @@ 1111 1111 MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC 1111 1112 PowerEdge Expandable RAID Controller 2/SC 113c 03a2 MegaRAID + e4bf 1010 CG1-RADIO + e4bf 1020 CU2-QUARTET + e4bf 1040 CU1-CHORUS + e4bf 3100 CX1-BAND 1962 80960RM [i960RM Microprocessor] 105a 0000 SuperTrak SX6000 I2O CPU 1a21 82840 840 (Carmel) Chipset Host Bridge (Hub A) @@ -6997,7 +7820,8 @@ 8086 4532 D815EEA2 mainboard 8086 4557 D815EGEW Mainboard 244c 82801BAM ISA Bridge (LPC) - 244e 82801BA/CA/DB/EB PCI Bridge + 244e 82801BA/CA/DB/EB/ER Hub interface to PCI Bridge + 1014 0267 NetVista A30p 2450 82801E ISA Bridge (LPC) 2452 82801E USB 2453 82801E SMBus @@ -7011,6 +7835,7 @@ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 + 8086 4541 Latitude C640 2483 82801CA/CAM SMBus Controller 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP @@ -7022,7 +7847,7 @@ 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 2485 82801CA/CAM AC'97 Audio Controller - 1014 0222 ThinkPad T23 (2647-4MG) or A30p (2653-64G) + 1014 0222 ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653) 1014 0508 ThinkPad T30 1014 051c ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP @@ -7031,6 +7856,7 @@ 1014 0223 ThinkPad A/T/X Series 1014 0503 ThinkPad R31 2656BBG 1014 051a ThinkPad A/T/X Series + 101f 1025 Acer 620 Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 1179 0001 Toshiba Satellite 1110 Z15 internal Modem 134d 4c21 Dell Inspiron 2100 internal modem @@ -7045,40 +7871,98 @@ 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 8086 1958 vpr Matrix 170B4 + 8086 4541 Latitude C640 248b 82801CA Ultra ATA Storage Controller 15d9 3480 P4DP6 248c 82801CAM ISA Bridge (LPC) - 24c0 82801DB LPC Interface Controller + 24c0 82801DB (ICH4) LPC Bridge + 1014 0267 NetVista A30p 1462 5800 845PE Max (MS-6580) - 24c2 82801DB USB (Hub #1) + 24c2 82801DB (ICH4) USB UHCI #1 + 1014 0267 NetVista A30p + 1071 8160 MIM2000 1462 5800 845PE Max (MS-6580) - 24c3 82801DB/DBM SMBus Controller + 24c3 82801DB/DBM (ICH4) SMBus Controller + 1014 0267 NetVista A30p + 1071 8160 MIM2000 + 1458 24c2 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) - 24c4 82801DB USB (Hub #2) + 4c53 1090 Cx9 / Vx9 mainboard + 24c4 82801DB (ICH4) USB UHCI #2 + 1014 0267 NetVista A30p + 1071 8160 MIM2000 1462 5800 845PE Max (MS-6580) - 24c5 82801DB AC'97 Audio Controller + 4c53 1090 Cx9 / Vx9 mainboard + 24c5 82801DB (ICH4) AC'97 Audio Controller + 0e11 00b8 Analog Devices Inc. codec [SoundMAX] + 1014 0267 NetVista A30p + 1071 8160 MIM2000 + 1458 a002 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) - 24c6 82801DB AC'97 Modem Controller - 24c7 82801DB USB (Hub #3) + 24c6 82801DB (ICH4) AC'97 Modem Controller + 1071 8160 MIM2000 + 24c7 82801DB (ICH4) USB UHCI #3 + 1014 0267 NetVista A30p + 1071 8160 MIM2000 1462 5800 845PE Max (MS-6580) - 24ca 82801DBM Ultra ATA Storage Controller - 24cb 82801DB Ultra ATA Storage Controller + 24ca 82801DBM (ICH4) Ultra ATA Storage Controller + 1071 8160 MIM2000 + 24cb 82801DB (ICH4) Ultra ATA 100 Storage Controller + 1014 0267 NetVista A30p + 1458 24c2 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) + 4c53 1090 Cx9 / Vx9 mainboard 24cc 82801DBM LPC Interface Controller - 24cd 82801DB USB2 - 1462 3981 845PE Max (MS-6580) Onboard USB EHCI Controller - 24d0 82801EB LPC Interface Controller - 24d1 82801EB Ultra ATA Storage Controller - 24d2 82801EB USB - 24d3 82801EB SMBus Controller - 24d4 82801EB USB - 24d5 82801EB AC'97 Audio Controller - 24d6 82801EB AC'97 Modem Controller - 24d7 82801EB USB - 24db 82801EB Ultra ATA Storage Controller + 24cd 82801DB (ICH4) USB2 EHCI Controller + 1014 0267 NetVista A30p + 1071 8160 MIM2000 + 1462 3981 845PE Max (MS-6580) + 4c53 1090 Cx9 / Vx9 mainboard + 24d0 82801EB/ER (ICH5/ICH5R) LPC Bridge + 24d1 82801EB (ICH5) Serial ATA 150 Storage Controller + 103c 12bc d530 CMT (DG746A) + 1458 24d1 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24d2 82801EB/ER (ICH5/ICH5R) USB UHCI #1 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 Mainboard + 1462 7280 865PE Neo2 (MS-6728) + 24d3 82801EB/ER (ICH5/ICH5R) SMBus Controller + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24d4 82801EB/ER (ICH5/ICH5R) USB UHCI #2 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24d5 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller + 103c 12bc Analog Devices codec [SoundMAX Integrated Digital Audio] + 1043 80f3 P4P800 Mainboard + 1462 7280 865PE Neo2 (MS-6728) + 24d6 82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller + 24d7 82801EB/ER (ICH5/ICH5R) USB UHCI #3 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24db 82801EB/ER (ICH5/ICH5R) Ultra ATA 100 Storage Controller + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7580 MSI 875P 24dc 82801EB LPC Interface Controller - 24dd 82801EB USB2 - 24de 82801EB USB + 24dd 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 Mainboard + 1458 5006 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24de 82801EB/ER (ICH5/ICH5R) USB UHCI #4 + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 24df 82801EB (ICH5R) SATA (cc=RAID) 2500 82820 820 (Camino) Chipset Host Bridge (MCH) 1028 0095 Precision Workstation 220 Chipset 1043 801c P3C-2000 system chipset @@ -7098,33 +7982,85 @@ 15d9 3480 P4DP6 2541 E7000 Series Host RASUM Controller 15d9 3480 P4DP6 + 4c53 1090 Cx9 / Vx9 mainboard 2543 E7000 Series Hub Interface B PCI-to-PCI Bridge 2544 E7000 Series Hub Interface B RASUM Controller + 4c53 1090 Cx9 / Vx9 mainboard 2545 E7000 Series Hub Interface C PCI-to-PCI Bridge 2546 E7000 Series Hub Interface C RASUM Controller 2547 E7000 Series Hub Interface D PCI-to-PCI Bridge 2548 E7000 Series Hub Interface D RASUM Controller 254c E7501 Memory Controller Hub + 4c53 1090 Cx9 / Vx9 mainboard 2550 E7505 Memory Controller Hub 2551 E7000 Series RAS Controller 2552 E7000 Series Processor to AGP Controller 2553 E7000 Series Hub Interface B PCI-to-PCI Bridge 2554 E7000 Series Hub Interface B PCI-to-PCI Bridge RAS Controller 255d E7205 Memory Controller Hub - 2560 82845G/GL [Brookdale-G] Chipset Host Bridge + 2560 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface + 1458 2560 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) - 2561 82845G/GL [Brookdale-G] Chipset AGP Bridge - 2562 82845G/GL [Brookdale-G] Chipset Integrated Graphics Device - 2570 82865G/PE/P Processor to I/O Controller - 2571 82865G/PE/P Processor to AGP Controller + 2561 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge + 2562 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device + 1014 0267 NetVista A30p + 2570 82865G/PE/P DRAM Controller/Host-Hub Interface + 1043 80f2 P4P800 Mainboard + 1458 2570 GA-8IPE1000 Pro2 motherboard (865PE) + 2571 82865G/PE/P PCI to AGP Controller 2572 82865G Integrated Graphics Device - 2573 82865G/PE/P Processor to PCI to CSA Bridge - 2576 82864G/PE/P Processor to I/O Memory Interface + 2573 82865G/PE/P PCI to CSA Bridge + 2576 82865G/PE/P Processor to I/O Memory Interface 2578 82875P Memory Controller Hub + 1462 7580 MS-6758 (875P Neo) +# Motherboard P4SCE + 15d9 4580 Super Micro Computer Inc. P4SCE 2579 82875P Processor to AGP Controller 257b 82875P Processor to PCI to CSA Bridge 257e 82875P Processor to I/O Memory Interface + 2580 Memory Controller Hub + 2581 Memory Controller Hub PCI Express Port + 2582 Graphics Controller + 2584 Workstation Memory Controller Hub + 2585 Workstation Memory Controller Hub PCI Express Port + 2588 Server Memory Controller Hub + 2589 Server Memory Controller Hub PCI Express Port + 258a Graphics Controller + 25a1 6300ESB LPC Interface Controller + 25a2 6300ESB PATA Storage Controller + 25a3 6300ESB SATA Storage Controller + 25a4 6300ESB SMBus Controller + 25a6 6300ESB AC'97 Audio Controller + 25a7 6300ESB AC'97 Modem Controller + 25a9 6300ESB USB Universal Host Controller + 25aa 6300ESB USB Universal Host Controller + 25ab 6300ESB Watchdog Timer + 25ac 6300ESB I/O Advanced Programmable Interrupt Controller + 25ad 6300ESB USB2 Enhanced Host Controller + 25ae 6300ESB 64-bit PCI-X Bridge + 25b0 6300ESB SATA RAID Controller + 2640 I/O Controller Hub LPC + 2641 I/O Controller Hub LPC + 2642 I/O Controller Hub LPC + 2651 I/O Controller Hub SATA cc=ide + 2652 I/O Controller Hub SATA cc=raid + 2658 I/O Controller Hub USB + 2659 I/O Controller Hub USB + 265a I/O Controller Hub USB + 265b I/O Controller Hub USB + 265c I/O Controller Hub USB2 + 2660 I/O Controller Hub PCI Express Port 0 + 2662 I/O Controller Hub PCI Express Port 1 + 2664 I/O Controller Hub PCI Express Port 2 + 2666 I/O Controller Hub PCI Express Port 3 + 2668 I/O Controller Hub Audio + 266a I/O Controller Hub SMBus + 266d I/O Controller Hub Modem + 266e I/O Controller Hub Audio + 266f I/O Controller Hub PATA + 2782 Graphics Controller 3092 Integrated RAID + 3200 GD31244 PCI-X SATA HBA 3340 82855PM Processor to I/O Controller 3341 82855PM Processor to AGP Controller 3575 82830 830 Chipset Host Bridge @@ -7135,7 +8071,24 @@ 1014 0513 ThinkPad A/T/X Series 3578 82830 830 Chipset Host Bridge 3580 82852/855GM Host Bridge + 3581 855GME GMCH Host-to-AGP Bridge (Virtual PCI-to-PCI) 3582 82852/855GM Integrated Graphics Device + 3584 855GM/GME GMCH Memory I/O Control Registers + 3585 855GM/GME GMCH Configuration Process Registers + 3590 Server Memory Controller Hub + 3591 Memory Controller Hub Error Reporting Register + 3592 Server Memory Controller Hub + 3593 Memory Controller Hub Error Reporting Register + 3594 Memory Controller Hub DMA Controller + 3595 Memory Controller Hub PCI Express Port A0 + 3596 Memory Controller Hub PCI Express Port A1 + 3597 Memory Controller Hub PCI Express Port B0 + 3598 Memory Controller Hub PCI Express Port B1 + 3599 Memory Controller Hub PCI Express Port C0 + 359a Memory Controller Hub PCI Express Port C1 + 359b Memory Controller Hub Extended Configuration Registers + 359e Workstation Memory Controller Hub + 4220 Intel(R) PRO/Wireless 2200BG 5200 EtherExpress PRO/100 Intelligent Server 5201 EtherExpress PRO/100 Intelligent Server 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter @@ -7144,13 +8097,18 @@ 7010 82371SB PIIX3 IDE [Natoma/Triton II] 7020 82371SB PIIX3 USB [Natoma/Triton II] 7030 430VX - 82437VX TVX [Triton VX] + 7050 Intel Intercast Video Capture Card 7100 430TX - 82439TX MTXC 7110 82371AB/EB/MB PIIX4 ISA 7111 82371AB/EB/MB PIIX4 IDE 7112 82371AB/EB/MB PIIX4 USB 7113 82371AB/EB/MB PIIX4 ACPI 7120 82810 GMCH [Graphics Memory Controller Hub] + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard 7121 82810 CGC [Chipset Graphics Controller] + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard 8086 4341 Cayman (CA810) Mainboard 7122 82810 DC-100 GMCH [Graphics Memory Controller Hub] 7123 82810 DC-100 CGC [Chipset Graphics Controller] @@ -7163,12 +8121,17 @@ 7181 440LX/EX - 82443LX/EX AGP bridge 7190 440BX/ZX/DX - 82443BX/ZX/DX Host bridge 0e11 0500 Armada 1750 Laptop System Chipset - 0e11 b110 Armada M700 + 0e11 b110 Armada M700/E500 1179 0001 Toshiba Tecra 8100 Laptop System Chipset + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard 7191 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge 7192 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) 0e11 0460 Armada 1700 Laptop System Chipset + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 7194 82440MX Host Bridge + 1033 0000 Versa Note Vxi + 4c53 10a0 CA3/CR3 mainboard 7195 82440MX AC'97 Audio Controller 10cf 1099 QSound_SigmaTel Stac97 PCI Audio 11d4 0040 SoundMAX Integrated Digital Audio @@ -7179,8 +8142,11 @@ 719a 82440MX USB Universal Host Controller 719b 82440MX Power Management Controller 71a0 440GX - 82443GX Host bridge + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard 71a1 440GX - 82443GX AGP bridge 71a2 440GX - 82443GX Host bridge (AGP disabled) + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 7600 82372FB PIIX5 ISA 7601 82372FB PIIX5 IDE 7602 82372FB PIIX5 USB @@ -7204,6 +8170,8 @@ 84e4 460GX - 84460GX Memory Data Controller (MDC) 84e6 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB) 84ea 460GX - 84460GX AGP Bridge (GXB function 1) + 8500 IXP4xx Family Network Processor (IXP420, 421, 422, 425 and IXC1100) + 9000 Intel IXP2000 Familly Network Processor 9621 Integrated RAID 9622 Integrated RAID 9641 Integrated RAID @@ -7212,16 +8180,22 @@ # observed, and documented in Intel revision note; new mask of 1011:0026 b154 21154 PCI-to-PCI Bridge b555 21555 Non transparent PCI-to-PCI Bridge + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard e4bf 1000 CC8-1-BLUES ffff 450NX/GX [Orion] - 82453KX/GX Memory controller [BUG] 8800 Trigem Computer Inc. 2008 Video assistent component 8866 T-Square Design Inc. 8888 Silicon Magic +# 8c4a is not Winbond but there is a board misprogrammed +8c4a Winbond + 1980 W89C940 misprogrammed [ne2k] 8e0e Computone Corporation 8e2e KTI 3000 ET32P2 9004 Adaptec + 0078 AHA-2940U_CN 1078 AIC-7810 1160 AIC-1160 [Family Fibre Channel Adapter] 2178 AIC-7821 @@ -7240,6 +8214,9 @@ 5478 AIC-7850 5575 AVA-2930 5578 AIC-7855 + 5647 ANA-7711 TCP Offload Engine + 9004 7710 ANA-7711F TCP Offload Engine - Optical + 9004 7711 ANA-7711LP TCP Offload Engine - Copper 5675 AIC-755x 5678 AIC-7856 5775 AIC-755x @@ -7331,11 +8308,13 @@ 0010 AHA-2940U2/U2W 9005 2180 AHA-2940U2 SCSI Controller 9005 8100 AHA-2940U2B SCSI Controller + 9005 a100 AHA-2940U2B SCSI Controller 9005 a180 AHA-2940U2W SCSI Controller 9005 e100 AHA-2950U2B SCSI Controller 0011 AHA-2930U2 0013 78902 9005 0003 AAA-131U2 Array1000 1 Channel RAID Controller + 9005 000f AIC7890_ARO 001f AHA-2940U2/U2W / 7890/7891 9005 000f 2940U2W SCSI Controller 9005 a180 2940U2W SCSI Controller @@ -7345,6 +8324,7 @@ 003f AIC-7890 0050 AHA-3940U2x/395U2x 9005 f500 AHA-3950U2B + 9005 ffff AHA-3950U2B 0051 AHA-3950U2D 9005 b500 AHA-3950U2D 0053 AIC-7896 SCSI Controller @@ -7352,6 +8332,7 @@ 005f AIC-7896U2/7897U2 0080 AIC-7892A U160/m 0e11 e2a0 Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter + 9005 6220 AHA-29160C 9005 62a0 29160N Ultra160 SCSI Controller 9005 e220 29160LP Low Profile Ultra160 SCSI Controller 9005 e2a0 29160 Ultra160 SCSI Controller @@ -7369,23 +8350,50 @@ 00c5 RAID subsystem HBA 1028 00c5 PowerEdge 2550 00cf AIC-7899P U160/m + 1028 00ce PowerEdge 1400 1028 00d1 PowerEdge 2550 10f1 2462 Thunder K7 S2462 15d9 9005 Onboard SCSI Host Adapter 0250 ServeRAID Controller 1014 0279 ServeRAID-xx 1014 028c ServeRAID-xx + 0283 AAC-RAID + 9005 0283 Catapult + 0284 AAC-RAID + 9005 0284 Tomcat 0285 AAC-RAID + 0e11 0295 SATA 6Ch (Bearcat) 1028 0287 PowerEdge Expandable RAID Controller 320/DC + 1028 0291 CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) + 17aa 0286 Legend S220 (Legend Crusader) + 17aa 0287 Legend S230 (Legend Vulcan) + 9005 0285 2200S (Vulcan) + 9005 0286 2120S (Crusader) + 9005 0287 2200S (Vulcan-2m) + 9005 0288 3230S (Harrier) + 9005 0289 3240S (Tornado) + 9005 028a ASR-2020S PCI-X ZCR (Skyhawk) + 9005 028b ASR-2020S SO-DIMM PCI-X ZCR (Terminator) + 9005 0290 AAR-2410SA PCI SATA 4ch (Jaguar II) + 9005 0292 AAR-2810SA PCI SATA 8ch (Corsair-8) + 9005 0293 AAR-21610SA PCI SATA 16ch (Corsair-16) + 9005 0294 ESD SO-DIMM PCI-X SATA ZCR (Prowler) + 0286 AAC-RAID (Rocket) + 9005 028c ASR-2230S + ASR-2230SLP PCI-X (Lancer) 8000 ASC-29320A U320 800f AIC-7901 U320 8010 ASC-39320 U320 8011 ASC-32320D U320 - 0e11 00ac U320 + 0e11 00ac ASC-39320D U320 9005 0041 ASC-39320D U320 8012 ASC-29320 U320 8013 ASC-29320B U320 8014 ASC-29320LP U320 + 8015 ASC-39320B U320 + 8016 ASC-39320A U320 + 8017 ASC-29320ALP U320 + 801c ASC-39320D U320 + 801d AIC-7902B U320 801e AIC-7901A U320 801f AIC-7902 U320 8080 ASC-29320A U320 w/HostRAID @@ -7410,8 +8418,19 @@ 9699 Omni Media Technology Inc 6565 6565 9710 NetMos Technology - 9815 VScom 021H-EP2 2 port parallel adaptor - 9835 222N-2 I/O Card (2S+1P) + 9815 PCI 9815 Multi-I/O Controller + 1000 0020 2P0S (2 port parallel adaptor) + 9835 PCI 9835 Multi-I/O Controller + 1000 0002 2S (16C550 UART) + 1000 0012 1P2S + 9845 PCI 9845 Multi-I/O Controller + 1000 0006 0P6S (6 port 16550a serial card) + 9855 PCI 9855 Multi-I/O Controller 4 Serial 1 Parallel + 1000 0014 1P4S +9902 Stargen Inc. + 0001 SG2010 PCI over Starfabric Bridge + 0002 SG2010 PCI to Starfabric Gateway + 0003 SG1010 Starfabric Switch and PCI Bridge a0a0 AOPEN Inc. a0f1 UNISYS Corporation a200 NEC Corporation @@ -7441,12 +8460,15 @@ dead Indigita Corporation e000 Winbond e000 W89C940 -e159 Tiger Jet Network Inc. +# see : http://www.schoenfeld.de/inside/Inside_CWMK3.txt +e159 Individual Computers - Jens Schoenfeld 0001 Intel 537 0059 0001 128k ISDN-S/T Adapter 0059 0003 128k ISDN-U Adapter 0002 Tiger100APC ISDN chipset e4bf EKF Elektronik GmbH +# Innovative and scalable network IC vendor +e55e Essence Technology, Inc. ea01 Eagle Technology # The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID. ea60 RME @@ -7486,12 +8508,17 @@ cafe KONA SD SMPTE 259M I/O efac KONA SD SMPTE 259M I/O facd KONA HD SMPTE 292M I/O -fa57 Fast Search & Transfer ASA +fa57 Interagon AS + 0001 PMC [Pattern Matching Chip] febd Ultraview Corp. feda Broadcom Inc (nee Epigram) a0fa BCM4210 iLine10 HomePNA 2.0 a10e BCM4230 iLine10 HomePNA 2.0 +# IT & Telecom company, develops PCI Trunk cards +fede Fedetec Inc. + 0003 TABIC PCI v3 fffe VMWare Inc + 0405 Virtual SVGA 4.0 0710 Virtual SVGA ffff Illegal Vendor ID diff -Nru a/drivers/pci/probe.c b/drivers/pci/probe.c --- a/drivers/pci/probe.c Tue May 18 23:38:08 2004 +++ b/drivers/pci/probe.c Tue May 18 23:38:08 2004 @@ -193,7 +193,7 @@ return; if (dev->transparent) { - printk("Transparent bridge - %s\n", pci_name(dev)); + printk(KERN_INFO "PCI: Transparent bridge - %s\n", pci_name(dev)); for(i = 0; i < PCI_BUS_NUM_RESOURCES; i++) child->resource[i] = child->parent->resource[i]; return; diff -Nru a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig --- a/drivers/pcmcia/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/Kconfig Tue May 18 23:38:08 2004 @@ -120,6 +120,13 @@ This driver is also available as a module called sa1111_cs. +config PCMCIA_PXA2XX + tristate "PXA2xx support" + depends on ARM && ARCH_PXA && PCMCIA + help + Say Y here to include support for the PXA2xx PCMCIA controller + + config PCMCIA_PROBE bool default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X diff -Nru a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile --- a/drivers/pcmcia/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/Makefile Tue May 18 23:38:08 2004 @@ -15,10 +15,14 @@ obj-$(CONFIG_HD64465_PCMCIA) += hd64465_ss.o obj-$(CONFIG_PCMCIA_SA1100) += sa11xx_core.o sa1100_cs.o obj-$(CONFIG_PCMCIA_SA1111) += sa11xx_core.o sa1111_cs.o +obj-$(CONFIG_PCMCIA_PXA2XX) += pxa2xx_core.o pxa2xx_cs.o pcmcia_core-y += cistpl.o rsrc_mgr.o bulkmem.o cs.o pcmcia_core-$(CONFIG_CARDBUS) += cardbus.o +sa11xx_core-y += soc_common.o sa11xx_base.o +pxa2xx_core-y += soc_common.o pxa2xx_base.o + sa1111_cs-y += sa1111_generic.o sa1111_cs-$(CONFIG_SA1100_ADSBITSY) += sa1100_adsbitsy.o sa1111_cs-$(CONFIG_ASSABET_NEPONSET) += sa1100_neponset.o @@ -42,3 +46,6 @@ sa1100_cs-$(CONFIG_SA1100_STORK) += sa1100_stork.o sa1100_cs-$(CONFIG_SA1100_TRIZEPS) += sa1100_trizeps.o sa1100_cs-$(CONFIG_SA1100_YOPY) += sa1100_yopy.o + +pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o + diff -Nru a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c --- a/drivers/pcmcia/i82365.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/i82365.c Tue May 18 23:38:09 2004 @@ -68,7 +68,7 @@ #include "o2micro.h" #ifdef DEBUG -static const char *version = +static const char version[] = "i82365.c 1.265 1999/11/10 18:36:21 (David Hinds)"; static int pc_debug; diff -Nru a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/pxa2xx_base.c Tue May 18 23:38:09 2004 @@ -0,0 +1,335 @@ +/*====================================================================== + + Device driver for the PCMCIA control functionality of PXA2xx + microprocessors. + + The contents of this file may be used under the + terms of the GNU Public License version 2 (the "GPL") + + (c) Ian Molton (spyro@f2s.com) 2003 + (c) Stefan Eletzhofer (stefan.eletzhofer@inquant.de) 2003,4 + + derived from sa11xx_base.c + + Portions created by John G. Dorsey are + Copyright (C) 1999 John G. Dorsey. + + ======================================================================*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "cs_internal.h" +#include "soc_common.h" +#include "pxa2xx_base.h" + + +#define MCXX_SETUP_MASK (0x7f) +#define MCXX_ASST_MASK (0x1f) +#define MCXX_HOLD_MASK (0x3f) +#define MCXX_SETUP_SHIFT (0) +#define MCXX_ASST_SHIFT (7) +#define MCXX_HOLD_SHIFT (14) + +static inline u_int pxa2xx_mcxx_hold(u_int pcmcia_cycle_ns, + u_int mem_clk_10khz) +{ + u_int code = pcmcia_cycle_ns * mem_clk_10khz; + return (code / 300000) + ((code % 300000) ? 1 : 0) - 1; +} + +static inline u_int pxa2xx_mcxx_asst(u_int pcmcia_cycle_ns, + u_int mem_clk_10khz) +{ + u_int code = pcmcia_cycle_ns * mem_clk_10khz; + return (code / 300000) + ((code % 300000) ? 1 : 0) - 1; +} + +static inline u_int pxa2xx_mcxx_setup(u_int pcmcia_cycle_ns, + u_int mem_clk_10khz) +{ + u_int code = pcmcia_cycle_ns * mem_clk_10khz; + return (code / 100000) + ((code % 100000) ? 1 : 0) - 1; +} + +/* This function returns the (approximate) command assertion period, in + * nanoseconds, for a given CPU clock frequency and MCXX_ASST value: + */ +static inline u_int pxa2xx_pcmcia_cmd_time(u_int mem_clk_10khz, + u_int pcmcia_mcxx_asst) +{ + return (300000 * (pcmcia_mcxx_asst + 1) / mem_clk_10khz); +} + +static int pxa2xx_pcmcia_set_mcmem( int sock, int speed, int clock ) +{ + MCMEM(sock) = ((pxa2xx_mcxx_setup(speed, clock) + & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT) + | ((pxa2xx_mcxx_asst(speed, clock) + & MCXX_ASST_MASK) << MCXX_ASST_SHIFT) + | ((pxa2xx_mcxx_hold(speed, clock) + & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT); + + return 0; +} + +static int pxa2xx_pcmcia_set_mcio( int sock, int speed, int clock ) +{ + MCIO(sock) = ((pxa2xx_mcxx_setup(speed, clock) + & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT) + | ((pxa2xx_mcxx_asst(speed, clock) + & MCXX_ASST_MASK) << MCXX_ASST_SHIFT) + | ((pxa2xx_mcxx_hold(speed, clock) + & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT); + + return 0; +} + +static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock ) +{ + MCATT(sock) = ((pxa2xx_mcxx_setup(speed, clock) + & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT) + | ((pxa2xx_mcxx_asst(speed, clock) + & MCXX_ASST_MASK) << MCXX_ASST_SHIFT) + | ((pxa2xx_mcxx_hold(speed, clock) + & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT); + + return 0; +} + +static int pxa2xx_pcmcia_set_mcxx(struct soc_pcmcia_socket *skt, unsigned int lclk) +{ + int sock = skt->nr; + + pxa2xx_pcmcia_set_mcmem( sock, SOC_PCMCIA_5V_MEM_ACCESS, lclk ); + pxa2xx_pcmcia_set_mcatt( sock, SOC_PCMCIA_ATTR_MEM_ACCESS, lclk ); + pxa2xx_pcmcia_set_mcio( sock, SOC_PCMCIA_IO_ACCESS, lclk ); + + return 0; +} + +static int pxa2xx_pcmcia_set_timing(struct soc_pcmcia_socket *skt) +{ + unsigned int lclk = get_lclk_frequency_10khz(); + return pxa2xx_pcmcia_set_mcxx(skt, lclk); +} + +int pxa2xx_drv_pcmcia_probe(struct device *dev) +{ + int ret; + struct pcmcia_low_level *ops; + int first, nr; + + if (!dev || !dev->platform_data) + return -ENODEV; + + ops = (struct pcmcia_low_level *)dev->platform_data; + first = ops->first; + nr = ops->nr; + + /* Setup GPIOs for PCMCIA/CF alternate function mode. + * + * It would be nice if set_GPIO_mode included support + * for driving GPIO outputs to default high/low state + * before programming GPIOs as outputs. Setting GPIO + * outputs to default high/low state via GPSR/GPCR + * before defining them as outputs should reduce + * the possibility of glitching outputs during GPIO + * setup. This of course assumes external terminators + * are present to hold GPIOs in a defined state. + * + * In the meantime, setup default state of GPIO + * outputs before we enable them as outputs. + */ + + GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | + GPIO_bit(GPIO49_nPWE) | + GPIO_bit(GPIO50_nPIOR) | + GPIO_bit(GPIO51_nPIOW) | + GPIO_bit(GPIO52_nPCE_1) | + GPIO_bit(GPIO53_nPCE_2); + + pxa_gpio_mode(GPIO48_nPOE_MD); + pxa_gpio_mode(GPIO49_nPWE_MD); + pxa_gpio_mode(GPIO50_nPIOR_MD); + pxa_gpio_mode(GPIO51_nPIOW_MD); + pxa_gpio_mode(GPIO52_nPCE_1_MD); + pxa_gpio_mode(GPIO53_nPCE_2_MD); + pxa_gpio_mode(GPIO54_pSKTSEL_MD); /* REVISIT: s/b dependent on num sockets */ + pxa_gpio_mode(GPIO55_nPREG_MD); + pxa_gpio_mode(GPIO56_nPWAIT_MD); + pxa_gpio_mode(GPIO57_nIOIS16_MD); + + /* Provide our PXA2xx specific timing routines. */ + ops->set_timing = pxa2xx_pcmcia_set_timing; + + ret = soc_common_drv_pcmcia_probe(dev, ops, first, nr); + + if (ret == 0) { + /* + * We have at least one socket, so set MECR:CIT + * (Card Is There) + */ + MECR |= MECR_CIT; + + /* Set MECR:NOS (Number Of Sockets) */ + if (nr > 1) + MECR |= MECR_NOS; + else + MECR &= ~MECR_NOS; + } + + return ret; +} +EXPORT_SYMBOL(pxa2xx_drv_pcmcia_probe); + +static int pxa2xx_drv_pcmcia_suspend(struct device *dev, u32 state, u32 level) +{ + int ret = 0; + if (level == SUSPEND_SAVE_STATE) + ret = pcmcia_socket_dev_suspend(dev, state); + return ret; +} + +static int pxa2xx_drv_pcmcia_resume(struct device *dev, u32 level) +{ + int ret = 0; + if (level == RESUME_RESTORE_STATE) + ret = pcmcia_socket_dev_resume(dev); + return ret; +} + +static struct device_driver pxa2xx_pcmcia_driver = { + .probe = pxa2xx_drv_pcmcia_probe, + .remove = soc_common_drv_pcmcia_remove, + .suspend = pxa2xx_drv_pcmcia_suspend, + .resume = pxa2xx_drv_pcmcia_resume, + .name = "pxa2xx-pcmcia", + .bus = &platform_bus_type, +}; + +#ifdef CONFIG_CPU_FREQ + +/* + * When pxa2xx_pcmcia_notifier() decides that a MC{IO,MEM,ATT} adjustment (due + * to a core clock frequency change) is needed, this routine establishes + * new values consistent with the clock speed `clock'. + */ +static void pxa2xx_pcmcia_update_mcxx(unsigned int clock) +{ + struct soc_pcmcia_socket *skt; + + down(&soc_sockets_lock); + list_for_each_entry(skt, &soc_sockets, node) { + pxa2xx_pcmcia_set_mcio(skt->nr, calc_speed(skt->spd_io, + MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS), clock); + pxa2xx_pcmcia_set_mcmem(skt->nr, calc_speed(skt->spd_io, + MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock ); + pxa2xx_pcmcia_set_mcatt(skt->nr, calc_speed(skt->spd_io, + MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock ); + } + up(&soc_sockets_lock); +} + +/* + * When changing the processor L clock frequency, it is necessary + * to adjust the MCXX timings accordingly. We've recorded the timings + * requested by Card Services, so this is just a matter of finding + * out what our current speed is, and then recomputing the new MCXX + * values. + * + * Returns: 0 on success, -1 on error + */ +static int +pxa2xx_pcmcia_notifier(struct notifier_block *nb, unsigned long val, void *data) +{ + struct cpufreq_freqs *freqs = data; + +#warning "it's not clear if this is right since the core CPU (N) clock has no effect on the memory (L) clock" + switch (val) { + case CPUFREQ_PRECHANGE: + if (freqs->new > freqs->old) { + debug( 2, "new frequency %u.%uMHz > %u.%uMHz, " + "pre-updating\n", + freqs->new / 1000, (freqs->new / 100) % 10, + freqs->old / 1000, (freqs->old / 100) % 10); + pxa2xx_pcmcia_update_mcxx(freqs->new); + } + break; + + case CPUFREQ_POSTCHANGE: + if (freqs->new < freqs->old) { + debug( 2, "new frequency %u.%uMHz < %u.%uMHz, " + "post-updating\n", + freqs->new / 1000, (freqs->new / 100) % 10, + freqs->old / 1000, (freqs->old / 100) % 10); + pxa2xx_pcmcia_update_mcxx(freqs->new); + } + break; + } + + return 0; +} + +static struct notifier_block pxa2xx_pcmcia_notifier_block = { + .notifier_call = pxa2xx_pcmcia_notifier +}; + +static int __init pxa2xx_pcmcia_cpufreq_init(void) +{ + int ret; + + ret = cpufreq_register_notifier(&pxa2xx_pcmcia_notifier_block, + CPUFREQ_TRANSITION_NOTIFIER); + if (ret < 0) + printk(KERN_ERR "Unable to register CPU frequency change " + "notifier for PCMCIA (%d)\n", ret); + return ret; +} + +static void __exit pxa2xx_pcmcia_cpufreq_exit(void) +{ + cpufreq_unregister_notifier(&pxa2xx_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER); +} + +#else +#define pxa2xx_pcmcia_cpufreq_init() +#define pxa2xx_pcmcia_cpufreq_exit() +#endif + +static int __init pxa2xx_pcmcia_init(void) +{ + int ret = driver_register(&pxa2xx_pcmcia_driver); + if (ret == 0) + pxa2xx_pcmcia_cpufreq_init(); + return ret; +} + +static void __exit pxa2xx_pcmcia_exit(void) +{ + pxa2xx_pcmcia_cpufreq_exit(); + driver_unregister(&pxa2xx_pcmcia_driver); +} + +module_init(pxa2xx_pcmcia_init); +module_exit(pxa2xx_pcmcia_exit); + +MODULE_AUTHOR("Stefan Eletzhofer and Ian Molton "); +MODULE_DESCRIPTION("Linux PCMCIA Card Services: PXA2xx core socket driver"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/pcmcia/pxa2xx_base.h b/drivers/pcmcia/pxa2xx_base.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/pxa2xx_base.h Tue May 18 23:38:09 2004 @@ -0,0 +1,3 @@ +/* temporary measure */ +extern int pxa2xx_drv_pcmcia_probe(struct device *); + diff -Nru a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/pxa2xx_lubbock.c Tue May 18 23:38:09 2004 @@ -0,0 +1,221 @@ +/* + * linux/drivers/pcmcia/pxa2xx_lubbock.c + * + * Author: George Davis + * Created: Jan 10, 2002 + * Copyright: MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Originally based upon linux/drivers/pcmcia/sa1100_neponset.c + * + * Lubbock PCMCIA specific routines. + * + */ +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "sa1111_generic.h" + +static int +lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, + const socket_state_t *state) +{ + unsigned long flags, gpio, misc_wr; + int ret = 1; + struct pcmcia_state new_state; + + local_irq_save(flags); + + gpio = PA_DWR; + misc_wr = LUB_MISC_WR; + + /* Lubbock uses the Maxim MAX1602, with the following connections: + * + * Socket 0 (PCMCIA): + * MAX1602 Lubbock Register + * Pin Signal + * ----- ------- ---------------------- + * A0VPP S0_PWR0 SA-1111 GPIO A<0> + * A1VPP S0_PWR1 SA-1111 GPIO A<1> + * A0VCC S0_PWR2 SA-1111 GPIO A<2> + * A1VCC S0_PWR3 SA-1111 GPIO A<3> + * VX VCC + * VY +3.3V + * 12IN +12V + * CODE +3.3V Cirrus Code, CODE = High (VY) + * + * Socket 1 (CF): + * MAX1602 Lubbock Register + * Pin Signal + * ----- ------- ---------------------- + * A0VPP GND VPP is not connected + * A1VPP GND VPP is not connected + * A0VCC S1_PWR0 MISC_WR<14> + * A1VCC S1_PWR0 MISC_WR<15> + * VX VCC + * VY +3.3V + * 12IN GND VPP is not connected + * CODE +3.3V Cirrus Code, CODE = High (VY) + * + */ + +again: + switch(skt->nr){ + case 0: + + switch(state->Vcc){ + case 0: + gpio &= ~(GPIO_bit(2) | GPIO_bit(3)); + break; + + case 33: + gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(3); + break; + + case 50: + gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2); + break; + + default: + printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc); + ret = -1; + } + + switch(state->Vpp){ + case 0: + gpio &= ~(GPIO_bit(0) | GPIO_bit(1)); + break; + + case 120: + gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(1); + break; + + default: + /* REVISIT: I'm not sure about this? Is this correct? + Is it always safe or do we have potential problems + with bogus combinations of Vcc and Vpp settings? */ + if(state->Vpp == state->Vcc) + gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(0); + else { + printk(KERN_ERR "%s(): unrecognized Vpp %u\n", __FUNCTION__, state->Vpp); + ret = -1; + break; + } + } + + break; + + case 1: + switch(state->Vcc){ + case 0: + misc_wr &= ~((1 << 15) | (1 << 14)); + break; + + case 33: + misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14); + gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2); + break; + + case 50: + misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14); + break; + + default: + printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc); + ret = -1; + break; + } + + if(state->Vpp!=state->Vcc && state->Vpp!=0){ + printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n", __FUNCTION__, state->Vpp); + ret = -1; + break; + } + + break; + + default: + ret = -1; + } + + if (ret >= 0) { + sa1111_pcmcia_configure_socket(skt, state); + LUB_MISC_WR = misc_wr; + PA_DWR = gpio; + } + + if (ret > 0) { + ret = 0; +#if 1 + /* + * HACK ALERT: + * We can't sense the voltage properly on Lubbock before actually + * applying some power to the socket (catch 22). + * Resense the socket Voltage Sense pins after applying socket power. + */ + sa1111_pcmcia_socket_state(skt, &new_state); + if (state->Vcc == 33 && !new_state.vs_3v && !new_state.vs_Xv) { + /* Switch to 5V, Configure socket with 5V voltage */ + PA_DWR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3)); + PA_DDR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3)); + /* We need to hack around the const qualifier as well to keep this + ugly workaround localized and not force it to the rest of the code. + Barf bags avaliable in the seat pocket in front of you! */ + ((socket_state_t *)state)->Vcc = 50; + ((socket_state_t *)state)->Vpp = 50; + goto again; + } +#endif + } + + local_irq_restore(flags); + return ret; +} + +static struct pcmcia_low_level lubbock_pcmcia_ops = { + .owner = THIS_MODULE, + .hw_init = sa1111_pcmcia_hw_init, + .hw_shutdown = sa1111_pcmcia_hw_shutdown, + .socket_state = sa1111_pcmcia_socket_state, + .configure_socket = lubbock_pcmcia_configure_socket, + .socket_init = sa1111_pcmcia_socket_init, + .socket_suspend = sa1111_pcmcia_socket_suspend, + .first = 0, + .nr = 2, +}; + +#include "pxa2xx_base.h" + +int __init pcmcia_lubbock_init(struct device *dev) +{ + int ret = -ENODEV; + + if (machine_is_lubbock()) { + /* + * Set GPIO_A<3:0> to be outputs for the MAX1600, + * and switch to standby mode. + */ + PA_DWR = 0; + PA_DDR = 0; + PA_SDR = 0; + PA_SSR = 0; + + /* Set CF Socket 1 power to standby mode. */ + LUB_MISC_WR &= ~(GPIO_bit(15) | GPIO_bit(14)); + + dev->platform_data = &lubbock_pcmcia_ops; + ret = pxa2xx_drv_pcmcia_probe(dev); + } + + return ret; +} diff -Nru a/drivers/pcmcia/sa1100.h b/drivers/pcmcia/sa1100.h --- a/drivers/pcmcia/sa1100.h Tue May 18 23:38:07 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,164 +0,0 @@ -/*====================================================================== - - Device driver for the PCMCIA control functionality of StrongARM - SA-1100 microprocessors. - - The contents of this file are subject to the Mozilla Public - License Version 1.1 (the "License"); you may not use this file - except in compliance with the License. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - implied. See the License for the specific language governing - rights and limitations under the License. - - The initial developer of the original code is John G. Dorsey - . Portions created by John G. Dorsey are - Copyright (C) 1999 John G. Dorsey. All Rights Reserved. - - Alternatively, the contents of this file may be used under the - terms of the GNU Public License version 2 (the "GPL"), in which - case the provisions of the GPL are applicable instead of the - above. If you wish to allow the use of your version of this file - only under the terms of the GPL and not to allow others to use - your version of this file under the MPL, indicate your decision - by deleting the provisions above and replace them with the notice - and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this - file under either the MPL or the GPL. - -======================================================================*/ - -#if !defined(_PCMCIA_SA1100_H) -# define _PCMCIA_SA1100_H - -#include -#include -#include -#include -#include "cs_internal.h" -#include "sa1100_generic.h" - -/* MECR: Expansion Memory Configuration Register - * (SA-1100 Developers Manual, p.10-13; SA-1110 Developers Manual, p.10-24) - * - * MECR layout is: - * - * FAST1 BSM1<4:0> BSA1<4:0> BSIO1<4:0> FAST0 BSM0<4:0> BSA0<4:0> BSIO0<4:0> - * - * (This layout is actually true only for the SA-1110; the FASTn bits are - * reserved on the SA-1100.) - */ - -#define MECR_SOCKET_0_SHIFT (0) -#define MECR_SOCKET_1_SHIFT (16) - -#define MECR_BS_MASK (0x1f) -#define MECR_FAST_MODE_MASK (0x01) - -#define MECR_BSIO_SHIFT (0) -#define MECR_BSA_SHIFT (5) -#define MECR_BSM_SHIFT (10) -#define MECR_FAST_SHIFT (15) - -#define MECR_SET(mecr, sock, shift, mask, bs) \ -((mecr)=((mecr)&~(((mask)<<(shift))<<\ - ((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))|\ - (((bs)<<(shift))<<((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))) - -#define MECR_GET(mecr, sock, shift, mask) \ -((((mecr)>>(((sock)==0)?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))>>\ - (shift))&(mask)) - -#define MECR_BSIO_SET(mecr, sock, bs) \ -MECR_SET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK, (bs)) - -#define MECR_BSIO_GET(mecr, sock) \ -MECR_GET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK) - -#define MECR_BSA_SET(mecr, sock, bs) \ -MECR_SET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK, (bs)) - -#define MECR_BSA_GET(mecr, sock) \ -MECR_GET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK) - -#define MECR_BSM_SET(mecr, sock, bs) \ -MECR_SET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK, (bs)) - -#define MECR_BSM_GET(mecr, sock) \ -MECR_GET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK) - -#define MECR_FAST_SET(mecr, sock, fast) \ -MECR_SET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK, (fast)) - -#define MECR_FAST_GET(mecr, sock) \ -MECR_GET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK) - - -/* This function implements the BS value calculation for setting the MECR - * using integer arithmetic: - */ -static inline unsigned int sa1100_pcmcia_mecr_bs(unsigned int pcmcia_cycle_ns, - unsigned int cpu_clock_khz){ - unsigned int t = ((pcmcia_cycle_ns * cpu_clock_khz) / 6) - 1000000; - return (t / 1000000) + (((t % 1000000) == 0) ? 0 : 1); -} - -/* This function returns the (approxmiate) command assertion period, in - * nanoseconds, for a given CPU clock frequency and MECR BS value: - */ -static inline unsigned int sa1100_pcmcia_cmd_time(unsigned int cpu_clock_khz, - unsigned int pcmcia_mecr_bs){ - return (((10000000 * 2) / cpu_clock_khz) * (3 * (pcmcia_mecr_bs + 1))) / 10; -} - - -/* SA-1100 PCMCIA Memory and I/O timing - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * The SA-1110 Developer's Manual, section 10.2.5, says the following: - * - * "To calculate the recommended BS_xx value for each address space: - * divide the command width time (the greater of twIOWR and twIORD, - * or the greater of twWE and twOE) by processor cycle time; divide - * by 2; divide again by 3 (number of BCLK's per command assertion); - * round up to the next whole number; and subtract 1." - * - * The PC Card Standard, Release 7, section 4.13.4, says that twIORD - * has a minimum value of 165ns. Section 4.13.5 says that twIOWR has - * a minimum value of 165ns, as well. Section 4.7.2 (describing - * common and attribute memory write timing) says that twWE has a - * minimum value of 150ns for a 250ns cycle time (for 5V operation; - * see section 4.7.4), or 300ns for a 600ns cycle time (for 3.3V - * operation, also section 4.7.4). Section 4.7.3 says that taOE - * has a maximum value of 150ns for a 300ns cycle time (for 5V - * operation), or 300ns for a 600ns cycle time (for 3.3V operation). - * - * When configuring memory maps, Card Services appears to adopt the policy - * that a memory access time of "0" means "use the default." The default - * PCMCIA I/O command width time is 165ns. The default PCMCIA 5V attribute - * and memory command width time is 150ns; the PCMCIA 3.3V attribute and - * memory command width time is 300ns. - */ -#define SA1100_PCMCIA_IO_ACCESS (165) -#define SA1100_PCMCIA_5V_MEM_ACCESS (150) -#define SA1100_PCMCIA_3V_MEM_ACCESS (300) - - -/* The socket driver actually works nicely in interrupt-driven form, - * so the (relatively infrequent) polling is "just to be sure." - */ -#define SA1100_PCMCIA_POLL_PERIOD (2*HZ) - -struct pcmcia_low_level; - -/* I/O pins replacing memory pins - * (PCMCIA System Architecture, 2nd ed., by Don Anderson, p.75) - * - * These signals change meaning when going from memory-only to - * memory-or-I/O interface: - */ -#define iostschg bvd1 -#define iospkr bvd2 - -#endif /* !defined(_PCMCIA_SA1100_H) */ diff -Nru a/drivers/pcmcia/sa1100_adsbitsy.c b/drivers/pcmcia/sa1100_adsbitsy.c --- a/drivers/pcmcia/sa1100_adsbitsy.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_adsbitsy.c Tue May 18 23:38:09 2004 @@ -20,7 +20,7 @@ #include "sa1111_generic.h" -static int adsbitsy_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int adsbitsy_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* Set GPIO_A<3:0> to be outputs for PCMCIA/CF power controller: */ PA_DDR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3); @@ -35,7 +35,7 @@ } static int -adsbitsy_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +adsbitsy_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int pa_dwr_mask, pa_dwr_set; int ret; diff -Nru a/drivers/pcmcia/sa1100_assabet.c b/drivers/pcmcia/sa1100_assabet.c --- a/drivers/pcmcia/sa1100_assabet.c Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_assabet.c Tue May 18 23:38:08 2004 @@ -25,23 +25,23 @@ { 1, ASSABET_IRQ_GPIO_CF_BVD1, "CF BVD1" }, }; -static int assabet_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int assabet_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = ASSABET_IRQ_GPIO_CF_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /* * Release all resources. */ -static void assabet_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void assabet_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static void -assabet_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +assabet_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -55,7 +55,7 @@ } static int -assabet_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int mask; @@ -93,22 +93,22 @@ * be called at initialisation, power management event, or * pcmcia event. */ -static void assabet_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void assabet_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { /* * Enable CF bus */ ASSABET_BCR_clear(ASSABET_BCR_CF_BUS_OFF); - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /* * Disable card status IRQs on suspend. */ -static void assabet_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void assabet_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* * Tristate the CF bus signals. Also assert CF diff -Nru a/drivers/pcmcia/sa1100_badge4.c b/drivers/pcmcia/sa1100_badge4.c --- a/drivers/pcmcia/sa1100_badge4.c Tue May 18 23:38:06 2004 +++ b/drivers/pcmcia/sa1100_badge4.c Tue May 18 23:38:06 2004 @@ -75,7 +75,7 @@ } static int -badge4_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +badge4_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { int ret; diff -Nru a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c --- a/drivers/pcmcia/sa1100_cerf.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_cerf.c Tue May 18 23:38:09 2004 @@ -27,20 +27,20 @@ { CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD1, "CF_BVD1" } }; -static int cerf_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = CERF_IRQ_GPIO_CF_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void cerf_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static void -cerf_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -54,7 +54,7 @@ } static int -cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { switch (state->Vcc) { @@ -78,14 +78,14 @@ return 0; } -static void cerf_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void cerf_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void cerf_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void cerf_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static struct pcmcia_low_level cerf_pcmcia_ops = { diff -Nru a/drivers/pcmcia/sa1100_flexanet.c b/drivers/pcmcia/sa1100_flexanet.c --- a/drivers/pcmcia/sa1100_flexanet.c Tue May 18 23:38:07 2004 +++ b/drivers/pcmcia/sa1100_flexanet.c Tue May 18 23:38:07 2004 @@ -28,20 +28,20 @@ * * Called by sa1100_pcmcia_driver_init on startup. */ -static int flexanet_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int flexanet_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = skt->nr ? IRQ_GPIO_CF2_IRQ : IRQ_GPIO_CF1_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /* * Socket shutdown */ -static void flexanet_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void flexanet_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); } @@ -52,7 +52,7 @@ * */ static void -flexanet_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +flexanet_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; /* Sense the GPIOs, asynchronously */ @@ -85,7 +85,7 @@ * */ static int -flexanet_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +flexanet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long value, flags, mask; @@ -133,14 +133,14 @@ return 0; } -static void flexanet_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void flexanet_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void flexanet_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void flexanet_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /* diff -Nru a/drivers/pcmcia/sa1100_freebird.c b/drivers/pcmcia/sa1100_freebird.c --- a/drivers/pcmcia/sa1100_freebird.c Tue May 18 23:38:05 2004 +++ b/drivers/pcmcia/sa1100_freebird.c Tue May 18 23:38:05 2004 @@ -20,7 +20,7 @@ { 0, IRQ_GPIO_FREEBIRD_CF_BVD, "CF_BVD1" }, }; -static int freebird_pcmcia_init(struct sa1100_pcmcia_socket *skt) +static int freebird_pcmcia_init(struct soc_pcmcia_socket *skt) { /* Enable Linkup CF card */ LINKUP_PRC = 0xc0; @@ -35,12 +35,12 @@ skt->irq = IRQ_GPIO_FREEBIRD_CF_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void freebird_pcmcia_shutdown(struct sa1100_pcmcia_socket *skt) +static void freebird_pcmcia_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs); /* Disable CF card */ LINKUP_PRC = 0x40; /* SSP=1 SOE=0 */ @@ -48,7 +48,7 @@ } static void -freebird_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +freebird_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = LINKUP_PRS; // printk("LINKUP_PRS=%x\n",levels); @@ -63,7 +63,7 @@ } static int -freebird_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +freebird_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, socket_state_t *state) { unsigned long value, flags; @@ -103,14 +103,14 @@ return 0; } -static void freebird_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void freebird_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void freebird_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void freebird_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static struct pcmcia_low_level freebird_pcmcia_ops = { diff -Nru a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c --- a/drivers/pcmcia/sa1100_generic.c Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_generic.c Tue May 18 23:38:08 2004 @@ -43,7 +43,7 @@ #include #include -#include "sa1100.h" +#include "sa1100_generic.h" static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = { #ifdef CONFIG_SA1100_ASSABET @@ -118,7 +118,7 @@ static struct device_driver sa11x0_pcmcia_driver = { .probe = sa11x0_drv_pcmcia_probe, - .remove = sa11xx_drv_pcmcia_remove, + .remove = soc_common_drv_pcmcia_remove, .name = "sa11x0-pcmcia", .bus = &platform_bus_type, .suspend = sa11x0_drv_pcmcia_suspend, diff -Nru a/drivers/pcmcia/sa1100_generic.h b/drivers/pcmcia/sa1100_generic.h --- a/drivers/pcmcia/sa1100_generic.h Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_generic.h Tue May 18 23:38:08 2004 @@ -1,4 +1,5 @@ -#include "sa11xx_core.h" +#include "soc_common.h" +#include "sa11xx_base.h" /* * Declaration for all machine specific init/exit functions. diff -Nru a/drivers/pcmcia/sa1100_graphicsclient.c b/drivers/pcmcia/sa1100_graphicsclient.c --- a/drivers/pcmcia/sa1100_graphicsclient.c Tue May 18 23:38:05 2004 +++ b/drivers/pcmcia/sa1100_graphicsclient.c Tue May 18 23:38:05 2004 @@ -38,7 +38,7 @@ { 0, S0_CD_IRQ, "PCMCIA 0 CD" }, }; -static int gcplus_pcmcia_init(struct sa1100_pcmcia_socket *skt) +static int gcplus_pcmcia_init(struct soc_pcmcia_socket *skt) { // Reset PCMCIA // Reset Timing for CPLD(U2) version 8001E or later @@ -54,10 +54,10 @@ skt->irq = S0_STS_IRQ; /* Register interrupts */ - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void gcplus_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void gcplus_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { /* disable IRQs */ free_irq(S0_CD_IRQ, skt); @@ -68,7 +68,7 @@ } static void -gcplus_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +gcplus_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = *PCMCIA_Status; @@ -82,7 +82,7 @@ } static int -gcplus_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +gcplus_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long flags; @@ -125,11 +125,11 @@ return 0; } -static void gcplus_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void gcplus_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { } -static void gcplus_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void gcplus_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { } diff -Nru a/drivers/pcmcia/sa1100_graphicsmaster.c b/drivers/pcmcia/sa1100_graphicsmaster.c --- a/drivers/pcmcia/sa1100_graphicsmaster.c Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_graphicsmaster.c Tue May 18 23:38:08 2004 @@ -19,7 +19,7 @@ #include "sa1111_generic.h" -static int graphicsmaster_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int graphicsmaster_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int return_val=0; @@ -36,7 +36,7 @@ } static int -graphicsmaster_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +graphicsmaster_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int pa_dwr_mask, pa_dwr_set; diff -Nru a/drivers/pcmcia/sa1100_h3600.c b/drivers/pcmcia/sa1100_h3600.c --- a/drivers/pcmcia/sa1100_h3600.c Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_h3600.c Tue May 18 23:38:08 2004 @@ -23,18 +23,18 @@ { 1, IRQ_GPIO_H3600_PCMCIA_CD1, "PCMCIA CD1" } }; -static int h3600_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = skt->nr ? IRQ_GPIO_H3600_PCMCIA_IRQ1 : IRQ_GPIO_H3600_PCMCIA_IRQ0; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void h3600_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void h3600_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF bus: */ clr_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON); @@ -43,7 +43,7 @@ } static void -h3600_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +h3600_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -71,7 +71,7 @@ } static int -h3600_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +h3600_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { if (state->Vcc != 0 && state->Vcc != 33 && state->Vcc != 50) { printk(KERN_ERR "h3600_pcmcia: unrecognized Vcc %u.%uV\n", @@ -89,7 +89,7 @@ return 0; } -static void h3600_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void h3600_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { /* Enable CF bus: */ set_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON); @@ -99,12 +99,12 @@ set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(10*HZ / 1000); - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void h3600_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void h3600_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* * FIXME: This doesn't fit well. We don't have the mechanism in diff -Nru a/drivers/pcmcia/sa1100_jornada720.c b/drivers/pcmcia/sa1100_jornada720.c --- a/drivers/pcmcia/sa1100_jornada720.c Tue May 18 23:38:06 2004 +++ b/drivers/pcmcia/sa1100_jornada720.c Tue May 18 23:38:06 2004 @@ -23,7 +23,7 @@ #warning *** Does SOCKET1_3V actually do anything? #define SOCKET1_3V GPIO_GPIO3 -static int jornada720_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* * What is all this crap for? @@ -49,7 +49,7 @@ } static int -jornada720_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int pa_dwr_mask, pa_dwr_set; int ret; diff -Nru a/drivers/pcmcia/sa1100_neponset.c b/drivers/pcmcia/sa1100_neponset.c --- a/drivers/pcmcia/sa1100_neponset.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_neponset.c Tue May 18 23:38:09 2004 @@ -42,7 +42,7 @@ */ static int -neponset_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +neponset_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int ncr_mask, ncr_set, pa_dwr_mask, pa_dwr_set; int ret; @@ -106,7 +106,7 @@ return 0; } -static void neponset_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void neponset_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { if (skt->nr == 0) NCR_0 &= ~(NCR_A0VPP | NCR_A1VPP); diff -Nru a/drivers/pcmcia/sa1100_pangolin.c b/drivers/pcmcia/sa1100_pangolin.c --- a/drivers/pcmcia/sa1100_pangolin.c Tue May 18 23:38:05 2004 +++ b/drivers/pcmcia/sa1100_pangolin.c Tue May 18 23:38:05 2004 @@ -26,7 +26,7 @@ { PANGOLIN_SOCK, IRQ_PCMCIA_CD, "PCMCIA CD" }, }; -static int pangolin_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int pangolin_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int res; @@ -37,12 +37,12 @@ skt->irq = IRQ_PCMCIA_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void pangolin_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void pangolin_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); #ifndef CONFIG_SA1100_PANGOLIN_PCMCIA_IDE /* Disable PCMCIA bus: */ @@ -51,7 +51,7 @@ } static void -pangolin_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +pangolin_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -66,7 +66,7 @@ } static int -pangolin_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +pangolin_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long value, flags; @@ -115,14 +115,14 @@ return 0; } -static void pangolin_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void pangolin_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void pangolin_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void pangolin_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static struct pcmcia_low_level pangolin_pcmcia_ops = { diff -Nru a/drivers/pcmcia/sa1100_pfs168.c b/drivers/pcmcia/sa1100_pfs168.c --- a/drivers/pcmcia/sa1100_pfs168.c Tue May 18 23:38:06 2004 +++ b/drivers/pcmcia/sa1100_pfs168.c Tue May 18 23:38:06 2004 @@ -18,7 +18,7 @@ #include "sa1111_generic.h" -static int pfs168_pcmcia_init(struct sa1100_pcmcia_socket *skt) +static int pfs168_pcmcia_init(struct soc_pcmcia_socket *skt) { /* TPS2211 to standby mode: */ PA_DWR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3); @@ -30,7 +30,7 @@ } static int -pfs168_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +pfs168_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int pa_dwr_mask = 0, pa_dwr_set = 0; diff -Nru a/drivers/pcmcia/sa1100_shannon.c b/drivers/pcmcia/sa1100_shannon.c --- a/drivers/pcmcia/sa1100_shannon.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_shannon.c Tue May 18 23:38:09 2004 @@ -21,7 +21,7 @@ { 1, SHANNON_IRQ_GPIO_EJECT_1, "PCMCIA_CD_1" }, }; -static int shannon_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int shannon_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* All those are inputs */ GPDR &= ~(SHANNON_GPIO_EJECT_0 | SHANNON_GPIO_EJECT_1 | @@ -31,16 +31,16 @@ skt->irq = skt->nr ? SHANNON_IRQ_GPIO_RDY_1 : SHANNON_IRQ_GPIO_RDY_0; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void shannon_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void shannon_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static void -shannon_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +shannon_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -69,7 +69,7 @@ } static int -shannon_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +shannon_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { switch (state->Vcc) { @@ -93,14 +93,14 @@ return 0; } -static void shannon_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void shannon_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void shannon_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void shannon_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static struct pcmcia_low_level shannon_pcmcia_ops = { diff -Nru a/drivers/pcmcia/sa1100_simpad.c b/drivers/pcmcia/sa1100_simpad.c --- a/drivers/pcmcia/sa1100_simpad.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_simpad.c Tue May 18 23:38:09 2004 @@ -24,19 +24,19 @@ { 1, IRQ_GPIO_CF_CD, "CF_CD" }, }; -static int simpad_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); skt->irq = IRQ_GPIO_CF_IRQ; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void simpad_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void simpad_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF bus: */ //set_cs3_bit(PCMCIA_BUFF_DIS); @@ -44,7 +44,7 @@ } static void -simpad_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +simpad_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -66,7 +66,7 @@ } static int -simpad_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +simpad_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long flags; @@ -103,14 +103,14 @@ return 0; } -static void simpad_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void simpad_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void simpad_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void simpad_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); set_cs3_bit(PCMCIA_RESET); } diff -Nru a/drivers/pcmcia/sa1100_stork.c b/drivers/pcmcia/sa1100_stork.c --- a/drivers/pcmcia/sa1100_stork.c Tue May 18 23:38:07 2004 +++ b/drivers/pcmcia/sa1100_stork.c Tue May 18 23:38:07 2004 @@ -36,24 +36,24 @@ { 1, IRQ_GPIO_STORK_PCMCIA_B_CARD_DETECT, "PCMCIA_CD1" }, }; -static int stork_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int stork_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { printk("in stork_pcmcia_init\n"); skt->irq = skt->nr ? IRQ_GPIO_STORK_PCMCIA_B_RDY : IRQ_GPIO_STORK_PCMCIA_A_RDY; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void stork_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void stork_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { int i; printk("%s\n", __FUNCTION__); /* disable IRQs */ - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF bus: */ storkClearLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON); @@ -62,7 +62,7 @@ } static void -stork_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +stork_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long levels = GPLR; @@ -95,7 +95,7 @@ } static int -stork_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +stork_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long flags; @@ -156,16 +156,16 @@ return 0; } -static void stork_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void stork_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { storkSetLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON); - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void stork_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void stork_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* * Hack! diff -Nru a/drivers/pcmcia/sa1100_system3.c b/drivers/pcmcia/sa1100_system3.c --- a/drivers/pcmcia/sa1100_system3.c Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1100_system3.c Tue May 18 23:38:09 2004 @@ -47,7 +47,7 @@ # define DPRINTK( x, args... ) /* nix */ #endif -static int system3_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int system3_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT; @@ -55,12 +55,12 @@ return 0; } -void system3_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +void system3_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { } static void -system3_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +system3_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { unsigned long status = PCSR; diff -Nru a/drivers/pcmcia/sa1100_trizeps.c b/drivers/pcmcia/sa1100_trizeps.c --- a/drivers/pcmcia/sa1100_trizeps.c Tue May 18 23:38:07 2004 +++ b/drivers/pcmcia/sa1100_trizeps.c Tue May 18 23:38:07 2004 @@ -32,7 +32,7 @@ * * ******************************************************/ -static int trizeps_pcmcia_init(struct sa1100_pcmcia_socket *skt) +static int trizeps_pcmcia_init(struct soc_pcmcia_socket *skt) { skt->irq = TRIZEPS_IRQ_PCMCIA_IRQ0; @@ -43,18 +43,18 @@ GPDR &= ~((GPIO_GPIO(TRIZEPS_GPIO_PCMCIA_CD0)) | (GPIO_GPIO(TRIZEPS_GPIO_PCMCIA_IRQ0))); - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /** * * ******************************************************/ -static void trizeps_pcmcia_shutdown(struct sa1100_pcmcia_socket *skt) +static void trizeps_pcmcia_shutdown(struct soc_pcmcia_socket *skt) { printk(">>>>>PCMCIA TRIZEPS shutdown\n"); - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF bus: */ TRIZEPS_BCR_set(TRIZEPS_BCR1, TRIZEPS_nPCM_ENA_REG); @@ -64,7 +64,7 @@ * ******************************************************/ static void -trizeps_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +trizeps_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state_array) { unsigned long levels = GPLR; @@ -83,7 +83,7 @@ * ******************************************************/ static int -trizeps_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +trizeps_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned long flags; @@ -129,14 +129,14 @@ return 0; } -static void trizeps_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void trizeps_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void trizeps_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void trizeps_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } /** diff -Nru a/drivers/pcmcia/sa1100_xp860.c b/drivers/pcmcia/sa1100_xp860.c --- a/drivers/pcmcia/sa1100_xp860.c Tue May 18 23:38:06 2004 +++ b/drivers/pcmcia/sa1100_xp860.c Tue May 18 23:38:06 2004 @@ -19,7 +19,7 @@ #define NCR_A0VPP (1<<16) #define NCR_A1VPP (1<<17) -static int xp860_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int xp860_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* Set GPIO_A<3:0> to be outputs for PCMCIA/CF power controller: */ PA_DDR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3); @@ -42,7 +42,7 @@ } static int -xp860_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +xp860_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int gpio_mask, pa_dwr_mask; unsigned int gpio_set, pa_dwr_set; diff -Nru a/drivers/pcmcia/sa1100_yopy.c b/drivers/pcmcia/sa1100_yopy.c --- a/drivers/pcmcia/sa1100_yopy.c Tue May 18 23:38:08 2004 +++ b/drivers/pcmcia/sa1100_yopy.c Tue May 18 23:38:08 2004 @@ -33,19 +33,19 @@ { 0, IRQ_CF_BVD1, "CF_BVD1" }, }; -static int yopy_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +static int yopy_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = IRQ_CF_IREQ; pcmcia_power(0); pcmcia_reset(1); - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void yopy_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +static void yopy_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF */ pcmcia_reset(1); @@ -53,7 +53,7 @@ } static void -yopy_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, +yopy_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state_array *state) { unsigned long levels = GPLR; @@ -68,7 +68,7 @@ } static int -yopy_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, +yopy_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { switch (state->Vcc) { @@ -93,14 +93,14 @@ return 0; } -static void yopy_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +static void yopy_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -static void yopy_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +static void yopy_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static struct pcmcia_low_level yopy_pcmcia_ops = { diff -Nru a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c --- a/drivers/pcmcia/sa1111_generic.c Tue May 18 23:38:06 2004 +++ b/drivers/pcmcia/sa1111_generic.c Tue May 18 23:38:06 2004 @@ -29,20 +29,20 @@ { 1, IRQ_S1_BVD1_STSCHG, "SA1111 CF BVD1" }, }; -int sa1111_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt) +int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { if (skt->irq == NO_IRQ) skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT; - return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -void sa1111_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt) +void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { - sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -void sa1111_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state) +void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) { struct sa1111_dev *sadev = SA1111_DEV(skt->dev); unsigned long status = sa1111_readl(sadev->mapbase + SA1111_PCSR); @@ -70,7 +70,7 @@ } } -int sa1111_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state) +int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { struct sa1111_dev *sadev = SA1111_DEV(skt->dev); unsigned int pccr_skt_mask, pccr_set_mask, val; @@ -110,14 +110,14 @@ return 0; } -void sa1111_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt) +void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { - sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } -void sa1111_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt) +void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { - sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); } static int pcmcia_probe(struct sa1111_dev *dev) @@ -148,6 +148,9 @@ #ifdef CONFIG_SA1100_JORNADA720 pcmcia_jornada720_init(&dev->dev); #endif +#ifdef CONFIG_ARCH_LUBBOCK + pcmcia_lubbock_init(&dev->dev); +#endif #ifdef CONFIG_ASSABET_NEPONSET pcmcia_neponset_init(dev); #endif @@ -165,7 +168,7 @@ static int __devexit pcmcia_remove(struct sa1111_dev *dev) { - sa11xx_drv_pcmcia_remove(&dev->dev); + soc_common_drv_pcmcia_remove(&dev->dev); release_mem_region(dev->res.start, 512); return 0; } diff -Nru a/drivers/pcmcia/sa1111_generic.h b/drivers/pcmcia/sa1111_generic.h --- a/drivers/pcmcia/sa1111_generic.h Tue May 18 23:38:09 2004 +++ b/drivers/pcmcia/sa1111_generic.h Tue May 18 23:38:09 2004 @@ -1,13 +1,15 @@ -#include "sa11xx_core.h" +#include "soc_common.h" +#include "sa11xx_base.h" -extern int sa1111_pcmcia_hw_init(struct sa1100_pcmcia_socket *); -extern void sa1111_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *); -extern void sa1111_pcmcia_socket_state(struct sa1100_pcmcia_socket *, struct pcmcia_state *); -extern int sa1111_pcmcia_configure_socket(struct sa1100_pcmcia_socket *, const socket_state_t *); -extern void sa1111_pcmcia_socket_init(struct sa1100_pcmcia_socket *); -extern void sa1111_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *); +extern int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *); +extern void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *); +extern void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *, struct pcmcia_state *); +extern int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *, const socket_state_t *); +extern void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *); +extern void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *); extern int pcmcia_badge4_init(struct device *); extern int pcmcia_jornada720_init(struct device *); +extern int pcmcia_lubbock_init(struct device *); extern int pcmcia_neponset_init(struct sa1111_dev *); diff -Nru a/drivers/pcmcia/sa11xx_base.c b/drivers/pcmcia/sa11xx_base.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/sa11xx_base.c Tue May 18 23:38:09 2004 @@ -0,0 +1,257 @@ +/*====================================================================== + + Device driver for the PCMCIA control functionality of StrongARM + SA-1100 microprocessors. + + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The initial developer of the original code is John G. Dorsey + . Portions created by John G. Dorsey are + Copyright (C) 1999 John G. Dorsey. All Rights Reserved. + + Alternatively, the contents of this file may be used under the + terms of the GNU Public License version 2 (the "GPL"), in which + case the provisions of the GPL are applicable instead of the + above. If you wish to allow the use of your version of this file + only under the terms of the GPL and not to allow others to use + your version of this file under the MPL, indicate your decision + by deleting the provisions above and replace them with the notice + and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this + file under either the MPL or the GPL. + +======================================================================*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "soc_common.h" +#include "sa11xx_base.h" + + +/* + * sa1100_pcmcia_default_mecr_timing + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * Calculate MECR clock wait states for given CPU clock + * speed and command wait state. This function can be over- + * written by a board specific version. + * + * The default is to simply calculate the BS values as specified in + * the INTEL SA1100 development manual + * "Expansion Memory (PCMCIA) Configuration Register (MECR)" + * that's section 10.2.5 in _my_ version of the manual ;) + */ +static unsigned int +sa1100_pcmcia_default_mecr_timing(struct soc_pcmcia_socket *skt, + unsigned int cpu_speed, + unsigned int cmd_time) +{ + return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed); +} + +static unsigned short +calc_speed(unsigned short *spds, int num, unsigned short dflt) +{ + unsigned short speed = 0; + int i; + + for (i = 0; i < num; i++) + if (speed < spds[i]) + speed = spds[i]; + if (speed == 0) + speed = dflt; + + return speed; +} + +/* sa1100_pcmcia_set_mecr() + * ^^^^^^^^^^^^^^^^^^^^^^^^ + * + * set MECR value for socket based on this sockets + * io, mem and attribute space access speed. + * Call board specific BS value calculation to allow boards + * to tweak the BS values. + */ +static int +sa1100_pcmcia_set_mecr(struct soc_pcmcia_socket *skt, unsigned int cpu_clock) +{ + u32 mecr, old_mecr; + unsigned long flags; + unsigned short speed; + unsigned int bs_io, bs_mem, bs_attr; + + speed = calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS); + bs_io = skt->ops->get_timing(skt, cpu_clock, speed); + + speed = calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS); + bs_mem = skt->ops->get_timing(skt, cpu_clock, speed); + + speed = calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS); + bs_attr = skt->ops->get_timing(skt, cpu_clock, speed); + + local_irq_save(flags); + + old_mecr = mecr = MECR; + MECR_FAST_SET(mecr, skt->nr, 0); + MECR_BSIO_SET(mecr, skt->nr, bs_io); + MECR_BSA_SET(mecr, skt->nr, bs_attr); + MECR_BSM_SET(mecr, skt->nr, bs_mem); + if (old_mecr != mecr) + MECR = mecr; + + local_irq_restore(flags); + + debug(skt, 2, "FAST %X BSM %X BSA %X BSIO %X\n", + MECR_FAST_GET(mecr, skt->nr), + MECR_BSM_GET(mecr, skt->nr), MECR_BSA_GET(mecr, skt->nr), + MECR_BSIO_GET(mecr, skt->nr)); + + return 0; +} + +static int +sa1100_pcmcia_set_timing(struct soc_pcmcia_socket *skt) +{ + return sa1100_pcmcia_set_mecr(skt, cpufreq_get(0)); +} + +static int +sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf) +{ + unsigned int clock = cpufreq_get(0); + unsigned long mecr = MECR; + char *p = buf; + + p+=sprintf(p, "I/O : %u (%u)\n", + calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS), + sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr))); + + p+=sprintf(p, "attribute: %u (%u)\n", + calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS), + sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr))); + + p+=sprintf(p, "common : %u (%u)\n", + calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS), + sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr))); + + return p - buf; +} + +int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, + int first, int nr) +{ + /* + * set default MECR calculation if the board specific + * code did not specify one... + */ + if (!ops->get_timing) + ops->get_timing = sa1100_pcmcia_default_mecr_timing; + + /* Provide our SA11x0 specific timing routines. */ + ops->set_timing = sa1100_pcmcia_set_timing; + ops->show_timing = sa1100_pcmcia_show_timing; + + return soc_common_drv_pcmcia_probe(dev, ops, first, nr); +} +EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe); + +#ifdef CONFIG_CPU_FREQ + +/* sa1100_pcmcia_update_mecr() + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * When sa1100_pcmcia_notifier() decides that a MECR adjustment (due + * to a core clock frequency change) is needed, this routine establishes + * new BS_xx values consistent with the clock speed `clock'. + */ +static void sa1100_pcmcia_update_mecr(unsigned int clock) +{ + struct soc_pcmcia_socket *skt; + + down(&soc_pcmcia_sockets_lock); + list_for_each_entry(skt, &soc_pcmcia_sockets, node) + sa1100_pcmcia_set_mecr(skt, clock); + up(&soc_pcmcia_sockets_lock); +} + +/* sa1100_pcmcia_notifier() + * ^^^^^^^^^^^^^^^^^^^^^^^^ + * When changing the processor core clock frequency, it is necessary + * to adjust the MECR timings accordingly. We've recorded the timings + * requested by Card Services, so this is just a matter of finding + * out what our current speed is, and then recomputing the new MECR + * values. + * + * Returns: 0 on success, -1 on error + */ +static int +sa1100_pcmcia_notifier(struct notifier_block *nb, unsigned long val, + void *data) +{ + struct cpufreq_freqs *freqs = data; + + switch (val) { + case CPUFREQ_PRECHANGE: + if (freqs->new > freqs->old) + sa1100_pcmcia_update_mecr(freqs->new); + break; + + case CPUFREQ_POSTCHANGE: + if (freqs->new < freqs->old) + sa1100_pcmcia_update_mecr(freqs->new); + break; + } + + return 0; +} + +static struct notifier_block sa1100_pcmcia_notifier_block = { + .notifier_call = sa1100_pcmcia_notifier +}; + +static int __init sa11xx_pcmcia_init(void) +{ + int ret; + + printk(KERN_INFO "SA11xx PCMCIA\n"); + + ret = cpufreq_register_notifier(&sa1100_pcmcia_notifier_block, + CPUFREQ_TRANSITION_NOTIFIER); + if (ret < 0) + printk(KERN_ERR "Unable to register CPU frequency change " + "notifier (%d)\n", ret); + + return ret; +} +module_init(sa11xx_pcmcia_init); + +static void __exit sa11xx_pcmcia_exit(void) +{ + cpufreq_unregister_notifier(&sa1100_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER); +} + +module_exit(sa11xx_pcmcia_exit); +#endif + +MODULE_AUTHOR("John Dorsey "); +MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11xx core socket driver"); +MODULE_LICENSE("Dual MPL/GPL"); diff -Nru a/drivers/pcmcia/sa11xx_base.h b/drivers/pcmcia/sa11xx_base.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/sa11xx_base.h Tue May 18 23:38:07 2004 @@ -0,0 +1,123 @@ +/*====================================================================== + + Device driver for the PCMCIA control functionality of StrongARM + SA-1100 microprocessors. + + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The initial developer of the original code is John G. Dorsey + . Portions created by John G. Dorsey are + Copyright (C) 1999 John G. Dorsey. All Rights Reserved. + + Alternatively, the contents of this file may be used under the + terms of the GNU Public License version 2 (the "GPL"), in which + case the provisions of the GPL are applicable instead of the + above. If you wish to allow the use of your version of this file + only under the terms of the GPL and not to allow others to use + your version of this file under the MPL, indicate your decision + by deleting the provisions above and replace them with the notice + and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this + file under either the MPL or the GPL. + +======================================================================*/ + +#if !defined(_PCMCIA_SA1100_H) +# define _PCMCIA_SA1100_H + +/* SA-1100 PCMCIA Memory and I/O timing + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * The SA-1110 Developer's Manual, section 10.2.5, says the following: + * + * "To calculate the recommended BS_xx value for each address space: + * divide the command width time (the greater of twIOWR and twIORD, + * or the greater of twWE and twOE) by processor cycle time; divide + * by 2; divide again by 3 (number of BCLK's per command assertion); + * round up to the next whole number; and subtract 1." + */ + +/* MECR: Expansion Memory Configuration Register + * (SA-1100 Developers Manual, p.10-13; SA-1110 Developers Manual, p.10-24) + * + * MECR layout is: + * + * FAST1 BSM1<4:0> BSA1<4:0> BSIO1<4:0> FAST0 BSM0<4:0> BSA0<4:0> BSIO0<4:0> + * + * (This layout is actually true only for the SA-1110; the FASTn bits are + * reserved on the SA-1100.) + */ + +#define MECR_SOCKET_0_SHIFT (0) +#define MECR_SOCKET_1_SHIFT (16) + +#define MECR_BS_MASK (0x1f) +#define MECR_FAST_MODE_MASK (0x01) + +#define MECR_BSIO_SHIFT (0) +#define MECR_BSA_SHIFT (5) +#define MECR_BSM_SHIFT (10) +#define MECR_FAST_SHIFT (15) + +#define MECR_SET(mecr, sock, shift, mask, bs) \ +((mecr)=((mecr)&~(((mask)<<(shift))<<\ + ((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))|\ + (((bs)<<(shift))<<((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))) + +#define MECR_GET(mecr, sock, shift, mask) \ +((((mecr)>>(((sock)==0)?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))>>\ + (shift))&(mask)) + +#define MECR_BSIO_SET(mecr, sock, bs) \ +MECR_SET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK, (bs)) + +#define MECR_BSIO_GET(mecr, sock) \ +MECR_GET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK) + +#define MECR_BSA_SET(mecr, sock, bs) \ +MECR_SET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK, (bs)) + +#define MECR_BSA_GET(mecr, sock) \ +MECR_GET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK) + +#define MECR_BSM_SET(mecr, sock, bs) \ +MECR_SET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK, (bs)) + +#define MECR_BSM_GET(mecr, sock) \ +MECR_GET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK) + +#define MECR_FAST_SET(mecr, sock, fast) \ +MECR_SET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK, (fast)) + +#define MECR_FAST_GET(mecr, sock) \ +MECR_GET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK) + + +/* This function implements the BS value calculation for setting the MECR + * using integer arithmetic: + */ +static inline unsigned int sa1100_pcmcia_mecr_bs(unsigned int pcmcia_cycle_ns, + unsigned int cpu_clock_khz){ + unsigned int t = ((pcmcia_cycle_ns * cpu_clock_khz) / 6) - 1000000; + return (t / 1000000) + (((t % 1000000) == 0) ? 0 : 1); +} + +/* This function returns the (approximate) command assertion period, in + * nanoseconds, for a given CPU clock frequency and MECR BS value: + */ +static inline unsigned int sa1100_pcmcia_cmd_time(unsigned int cpu_clock_khz, + unsigned int pcmcia_mecr_bs){ + return (((10000000 * 2) / cpu_clock_khz) * (3 * (pcmcia_mecr_bs + 1))) / 10; +} + + +extern int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr); + +#endif /* !defined(_PCMCIA_SA1100_H) */ diff -Nru a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c --- a/drivers/pcmcia/sa11xx_core.c Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,971 +0,0 @@ -/*====================================================================== - - Device driver for the PCMCIA control functionality of StrongARM - SA-1100 microprocessors. - - The contents of this file are subject to the Mozilla Public - License Version 1.1 (the "License"); you may not use this file - except in compliance with the License. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - implied. See the License for the specific language governing - rights and limitations under the License. - - The initial developer of the original code is John G. Dorsey - . Portions created by John G. Dorsey are - Copyright (C) 1999 John G. Dorsey. All Rights Reserved. - - Alternatively, the contents of this file may be used under the - terms of the GNU Public License version 2 (the "GPL"), in which - case the provisions of the GPL are applicable instead of the - above. If you wish to allow the use of your version of this file - only under the terms of the GPL and not to allow others to use - your version of this file under the MPL, indicate your decision - by deleting the provisions above and replace them with the notice - and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this - file under either the MPL or the GPL. - -======================================================================*/ -/* - * Please see linux/Documentation/arm/SA1100/PCMCIA for more information - * on the low-level kernel interface. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "sa11xx_core.h" -#include "sa1100.h" - -#ifdef DEBUG -static int pc_debug; - -module_param(pc_debug, int, 0644); - -#define debug(skt, lvl, fmt, arg...) do { \ - if (pc_debug > (lvl)) \ - printk(KERN_DEBUG "skt%u: %s: " fmt, \ - (skt)->nr, __func__ , ## arg); \ -} while (0) - -#else -#define debug(skt, lvl, fmt, arg...) do { } while (0) -#endif - -#define to_sa1100_socket(x) container_of(x, struct sa1100_pcmcia_socket, socket) - -/* - * sa1100_pcmcia_default_mecr_timing - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * - * Calculate MECR clock wait states for given CPU clock - * speed and command wait state. This function can be over- - * written by a board specific version. - * - * The default is to simply calculate the BS values as specified in - * the INTEL SA1100 development manual - * "Expansion Memory (PCMCIA) Configuration Register (MECR)" - * that's section 10.2.5 in _my_ version of the manual ;) - */ -static unsigned int -sa1100_pcmcia_default_mecr_timing(struct sa1100_pcmcia_socket *skt, - unsigned int cpu_speed, - unsigned int cmd_time) -{ - return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed); -} - -static unsigned short -calc_speed(unsigned short *spds, int num, unsigned short dflt) -{ - unsigned short speed = 0; - int i; - - for (i = 0; i < num; i++) - if (speed < spds[i]) - speed = spds[i]; - if (speed == 0) - speed = dflt; - - return speed; -} - -/* sa1100_pcmcia_set_mecr() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * - * set MECR value for socket based on this sockets - * io, mem and attribute space access speed. - * Call board specific BS value calculation to allow boards - * to tweak the BS values. - */ -static int -sa1100_pcmcia_set_mecr(struct sa1100_pcmcia_socket *skt, unsigned int cpu_clock) -{ - u32 mecr, old_mecr; - unsigned long flags; - unsigned short speed; - unsigned int bs_io, bs_mem, bs_attr; - - speed = calc_speed(skt->spd_io, MAX_IO_WIN, SA1100_PCMCIA_IO_ACCESS); - bs_io = skt->ops->socket_get_timing(skt, cpu_clock, speed); - - speed = calc_speed(skt->spd_mem, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS); - bs_mem = skt->ops->socket_get_timing(skt, cpu_clock, speed); - - speed = calc_speed(skt->spd_attr, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS); - bs_attr = skt->ops->socket_get_timing(skt, cpu_clock, speed); - - local_irq_save(flags); - - old_mecr = mecr = MECR; - MECR_FAST_SET(mecr, skt->nr, 0); - MECR_BSIO_SET(mecr, skt->nr, bs_io); - MECR_BSA_SET(mecr, skt->nr, bs_attr); - MECR_BSM_SET(mecr, skt->nr, bs_mem); - if (old_mecr != mecr) - MECR = mecr; - - local_irq_restore(flags); - - debug(skt, 2, "FAST %X BSM %X BSA %X BSIO %X\n", - MECR_FAST_GET(mecr, skt->nr), - MECR_BSM_GET(mecr, skt->nr), MECR_BSA_GET(mecr, skt->nr), - MECR_BSIO_GET(mecr, skt->nr)); - - return 0; -} - -static unsigned int sa1100_pcmcia_skt_state(struct sa1100_pcmcia_socket *skt) -{ - struct pcmcia_state state; - unsigned int stat; - - memset(&state, 0, sizeof(struct pcmcia_state)); - - skt->ops->socket_state(skt, &state); - - stat = state.detect ? SS_DETECT : 0; - stat |= state.ready ? SS_READY : 0; - stat |= state.wrprot ? SS_WRPROT : 0; - stat |= state.vs_3v ? SS_3VCARD : 0; - stat |= state.vs_Xv ? SS_XVCARD : 0; - - /* The power status of individual sockets is not available - * explicitly from the hardware, so we just remember the state - * and regurgitate it upon request: - */ - stat |= skt->cs_state.Vcc ? SS_POWERON : 0; - - if (skt->cs_state.flags & SS_IOCARD) - stat |= state.bvd1 ? SS_STSCHG : 0; - else { - if (state.bvd1 == 0) - stat |= SS_BATDEAD; - else if (state.bvd2 == 0) - stat |= SS_BATWARN; - } - return stat; -} - -/* - * sa1100_pcmcia_config_skt - * ^^^^^^^^^^^^^^^^^^^^^^^^ - * - * Convert PCMCIA socket state to our socket configure structure. - */ -static int -sa1100_pcmcia_config_skt(struct sa1100_pcmcia_socket *skt, socket_state_t *state) -{ - int ret; - - ret = skt->ops->configure_socket(skt, state); - if (ret == 0) { - /* - * This really needs a better solution. The IRQ - * may or may not be claimed by the driver. - */ - if (skt->irq_state != 1 && state->io_irq) { - skt->irq_state = 1; - set_irq_type(skt->irq, IRQT_FALLING); - } else if (skt->irq_state == 1 && state->io_irq == 0) { - skt->irq_state = 0; - set_irq_type(skt->irq, IRQT_NOEDGE); - } - - skt->cs_state = *state; - } - - if (ret < 0) - printk(KERN_ERR "sa1100_pcmcia: unable to configure " - "socket %d\n", skt->nr); - - return ret; -} - -/* sa1100_pcmcia_sock_init() - * ^^^^^^^^^^^^^^^^^^^^^^^^^ - * - * (Re-)Initialise the socket, turning on status interrupts - * and PCMCIA bus. This must wait for power to stabilise - * so that the card status signals report correctly. - * - * Returns: 0 - */ -static int sa1100_pcmcia_sock_init(struct pcmcia_socket *sock) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - - debug(skt, 2, "initializing socket\n"); - - skt->ops->socket_init(skt); - return 0; -} - - -/* - * sa1100_pcmcia_suspend() - * ^^^^^^^^^^^^^^^^^^^^^^^ - * - * Remove power on the socket, disable IRQs from the card. - * Turn off status interrupts, and disable the PCMCIA bus. - * - * Returns: 0 - */ -static int sa1100_pcmcia_suspend(struct pcmcia_socket *sock) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - int ret; - - debug(skt, 2, "suspending socket\n"); - - ret = sa1100_pcmcia_config_skt(skt, &dead_socket); - if (ret == 0) - skt->ops->socket_suspend(skt); - - return ret; -} - -static spinlock_t status_lock = SPIN_LOCK_UNLOCKED; - -/* sa1100_check_status() - * ^^^^^^^^^^^^^^^^^^^^^ - */ -static void sa1100_check_status(struct sa1100_pcmcia_socket *skt) -{ - unsigned int events; - - debug(skt, 4, "entering PCMCIA monitoring thread\n"); - - do { - unsigned int status; - unsigned long flags; - - status = sa1100_pcmcia_skt_state(skt); - - spin_lock_irqsave(&status_lock, flags); - events = (status ^ skt->status) & skt->cs_state.csc_mask; - skt->status = status; - spin_unlock_irqrestore(&status_lock, flags); - - debug(skt, 4, "events: %s%s%s%s%s%s\n", - events == 0 ? "" : "", - events & SS_DETECT ? "DETECT " : "", - events & SS_READY ? "READY " : "", - events & SS_BATDEAD ? "BATDEAD " : "", - events & SS_BATWARN ? "BATWARN " : "", - events & SS_STSCHG ? "STSCHG " : ""); - - if (events) - pcmcia_parse_events(&skt->socket, events); - } while (events); -} - -/* sa1100_pcmcia_poll_event() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Let's poll for events in addition to IRQs since IRQ only is unreliable... - */ -static void sa1100_pcmcia_poll_event(unsigned long dummy) -{ - struct sa1100_pcmcia_socket *skt = (struct sa1100_pcmcia_socket *)dummy; - debug(skt, 4, "polling for events\n"); - - mod_timer(&skt->poll_timer, jiffies + SA1100_PCMCIA_POLL_PERIOD); - - sa1100_check_status(skt); -} - - -/* sa1100_pcmcia_interrupt() - * ^^^^^^^^^^^^^^^^^^^^^^^^^ - * Service routine for socket driver interrupts (requested by the - * low-level PCMCIA init() operation via sa1100_pcmcia_thread()). - * The actual interrupt-servicing work is performed by - * sa1100_pcmcia_thread(), largely because the Card Services event- - * handling code performs scheduling operations which cannot be - * executed from within an interrupt context. - */ -static irqreturn_t sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs) -{ - struct sa1100_pcmcia_socket *skt = dev; - - debug(skt, 3, "servicing IRQ %d\n", irq); - - sa1100_check_status(skt); - - return IRQ_HANDLED; -} - - -/* sa1100_pcmcia_get_status() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the get_status() operation for the in-kernel PCMCIA - * service (formerly SS_GetStatus in Card Services). Essentially just - * fills in bits in `status' according to internal driver state or - * the value of the voltage detect chipselect register. - * - * As a debugging note, during card startup, the PCMCIA core issues - * three set_socket() commands in a row the first with RESET deasserted, - * the second with RESET asserted, and the last with RESET deasserted - * again. Following the third set_socket(), a get_status() command will - * be issued. The kernel is looking for the SS_READY flag (see - * setup_socket(), reset_socket(), and unreset_socket() in cs.c). - * - * Returns: 0 - */ -static int -sa1100_pcmcia_get_status(struct pcmcia_socket *sock, unsigned int *status) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - - skt->status = sa1100_pcmcia_skt_state(skt); - *status = skt->status; - - return 0; -} - - -/* sa1100_pcmcia_get_socket() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the get_socket() operation for the in-kernel PCMCIA - * service (formerly SS_GetSocket in Card Services). Not a very - * exciting routine. - * - * Returns: 0 - */ -static int -sa1100_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - - debug(skt, 2, "\n"); - - *state = skt->cs_state; - - return 0; -} - -/* sa1100_pcmcia_set_socket() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the set_socket() operation for the in-kernel PCMCIA - * service (formerly SS_SetSocket in Card Services). We more or - * less punt all of this work and let the kernel handle the details - * of power configuration, reset, &c. We also record the value of - * `state' in order to regurgitate it to the PCMCIA core later. - * - * Returns: 0 - */ -static int -sa1100_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - - debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n", - (state->csc_mask==0)?" ":"", - (state->csc_mask&SS_DETECT)?"DETECT ":"", - (state->csc_mask&SS_READY)?"READY ":"", - (state->csc_mask&SS_BATDEAD)?"BATDEAD ":"", - (state->csc_mask&SS_BATWARN)?"BATWARN ":"", - (state->csc_mask&SS_STSCHG)?"STSCHG ":"", - (state->flags==0)?" ":"", - (state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"", - (state->flags&SS_IOCARD)?"IOCARD ":"", - (state->flags&SS_RESET)?"RESET ":"", - (state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"", - (state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"", - state->Vcc, state->Vpp, state->io_irq); - - return sa1100_pcmcia_config_skt(skt, state); -} /* sa1100_pcmcia_set_socket() */ - - -/* sa1100_pcmcia_set_io_map() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the set_io_map() operation for the in-kernel PCMCIA - * service (formerly SS_SetIOMap in Card Services). We configure - * the map speed as requested, but override the address ranges - * supplied by Card Services. - * - * Returns: 0 on success, -1 on error - */ -static int -sa1100_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - unsigned short speed = map->speed; - - debug(skt, 2, "map %u speed %u start 0x%08x stop 0x%08x\n", - map->map, map->speed, map->start, map->stop); - debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", - (map->flags==0)?"":"", - (map->flags&MAP_ACTIVE)?"ACTIVE ":"", - (map->flags&MAP_16BIT)?"16BIT ":"", - (map->flags&MAP_AUTOSZ)?"AUTOSZ ":"", - (map->flags&MAP_0WS)?"0WS ":"", - (map->flags&MAP_WRPROT)?"WRPROT ":"", - (map->flags&MAP_USE_WAIT)?"USE_WAIT ":"", - (map->flags&MAP_PREFETCH)?"PREFETCH ":""); - - if (map->map >= MAX_IO_WIN) { - printk(KERN_ERR "%s(): map (%d) out of range\n", __FUNCTION__, - map->map); - return -1; - } - - if (map->flags & MAP_ACTIVE) { - if (speed == 0) - speed = SA1100_PCMCIA_IO_ACCESS; - } else { - speed = 0; - } - - skt->spd_io[map->map] = speed; - sa1100_pcmcia_set_mecr(skt, cpufreq_get(0)); - - if (map->stop == 1) - map->stop = PAGE_SIZE-1; - - map->stop -= map->start; - map->stop += (unsigned long)skt->virt_io; - map->start = (unsigned long)skt->virt_io; - - return 0; -} /* sa1100_pcmcia_set_io_map() */ - - -/* sa1100_pcmcia_set_mem_map() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the set_mem_map() operation for the in-kernel PCMCIA - * service (formerly SS_SetMemMap in Card Services). We configure - * the map speed as requested, but override the address ranges - * supplied by Card Services. - * - * Returns: 0 on success, -1 on error - */ -static int -sa1100_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map) -{ - struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock); - struct resource *res; - unsigned short speed = map->speed; - - debug(skt, 2, "map %u speed %u card_start %08x\n", - map->map, map->speed, map->card_start); - debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", - (map->flags==0)?"":"", - (map->flags&MAP_ACTIVE)?"ACTIVE ":"", - (map->flags&MAP_16BIT)?"16BIT ":"", - (map->flags&MAP_AUTOSZ)?"AUTOSZ ":"", - (map->flags&MAP_0WS)?"0WS ":"", - (map->flags&MAP_WRPROT)?"WRPROT ":"", - (map->flags&MAP_ATTRIB)?"ATTRIB ":"", - (map->flags&MAP_USE_WAIT)?"USE_WAIT ":""); - - if (map->map >= MAX_WIN) - return -EINVAL; - - if (map->flags & MAP_ACTIVE) { - if (speed == 0) - speed = 300; - } else { - speed = 0; - } - - if (map->flags & MAP_ATTRIB) { - res = &skt->res_attr; - skt->spd_attr[map->map] = speed; - skt->spd_mem[map->map] = 0; - } else { - res = &skt->res_mem; - skt->spd_attr[map->map] = 0; - skt->spd_mem[map->map] = speed; - } - - sa1100_pcmcia_set_mecr(skt, cpufreq_get(0)); - - map->sys_stop -= map->sys_start; - map->sys_stop += res->start + map->card_start; - map->sys_start = res->start + map->card_start; - - return 0; -} - -struct bittbl { - unsigned int mask; - const char *name; -}; - -static struct bittbl status_bits[] = { - { SS_WRPROT, "SS_WRPROT" }, - { SS_BATDEAD, "SS_BATDEAD" }, - { SS_BATWARN, "SS_BATWARN" }, - { SS_READY, "SS_READY" }, - { SS_DETECT, "SS_DETECT" }, - { SS_POWERON, "SS_POWERON" }, - { SS_STSCHG, "SS_STSCHG" }, - { SS_3VCARD, "SS_3VCARD" }, - { SS_XVCARD, "SS_XVCARD" }, -}; - -static struct bittbl conf_bits[] = { - { SS_PWR_AUTO, "SS_PWR_AUTO" }, - { SS_IOCARD, "SS_IOCARD" }, - { SS_RESET, "SS_RESET" }, - { SS_DMA_MODE, "SS_DMA_MODE" }, - { SS_SPKR_ENA, "SS_SPKR_ENA" }, - { SS_OUTPUT_ENA, "SS_OUTPUT_ENA" }, -}; - -static void -dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, int sz) -{ - char *b = *p; - int i; - - b += sprintf(b, "%-9s:", prefix); - for (i = 0; i < sz; i++) - if (val & bits[i].mask) - b += sprintf(b, " %s", bits[i].name); - *b++ = '\n'; - *p = b; -} - -/* show_status() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Implements the /sys/class/pcmcia_socket/??/status file. - * - * Returns: the number of characters added to the buffer - */ -static ssize_t show_status(struct class_device *class_dev, char *buf) -{ - struct sa1100_pcmcia_socket *skt = container_of(class_dev, - struct sa1100_pcmcia_socket, socket.dev); - unsigned int clock = cpufreq_get(0); - unsigned long mecr = MECR; - char *p = buf; - - p+=sprintf(p, "slot : %d\n", skt->nr); - - dump_bits(&p, "status", skt->status, - status_bits, ARRAY_SIZE(status_bits)); - dump_bits(&p, "csc_mask", skt->cs_state.csc_mask, - status_bits, ARRAY_SIZE(status_bits)); - dump_bits(&p, "cs_flags", skt->cs_state.flags, - conf_bits, ARRAY_SIZE(conf_bits)); - - p+=sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc); - p+=sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp); - p+=sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq, skt->irq); - - p+=sprintf(p, "I/O : %u (%u)\n", - calc_speed(skt->spd_io, MAX_IO_WIN, SA1100_PCMCIA_IO_ACCESS), - sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr))); - - p+=sprintf(p, "attribute: %u (%u)\n", - calc_speed(skt->spd_attr, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS), - sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr))); - - p+=sprintf(p, "common : %u (%u)\n", - calc_speed(skt->spd_mem, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS), - sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr))); - - return p-buf; -} -static CLASS_DEVICE_ATTR(status, S_IRUGO, show_status, NULL); - - -static struct pccard_operations sa11xx_pcmcia_operations = { - .init = sa1100_pcmcia_sock_init, - .suspend = sa1100_pcmcia_suspend, - .get_status = sa1100_pcmcia_get_status, - .get_socket = sa1100_pcmcia_get_socket, - .set_socket = sa1100_pcmcia_set_socket, - .set_io_map = sa1100_pcmcia_set_io_map, - .set_mem_map = sa1100_pcmcia_set_mem_map, -}; - -int sa11xx_request_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr) -{ - int i, res = 0; - - for (i = 0; i < nr; i++) { - if (irqs[i].sock != skt->nr) - continue; - res = request_irq(irqs[i].irq, sa1100_pcmcia_interrupt, - SA_INTERRUPT, irqs[i].str, skt); - if (res) - break; - set_irq_type(irqs[i].irq, IRQT_NOEDGE); - } - - if (res) { - printk(KERN_ERR "PCMCIA: request for IRQ%d failed (%d)\n", - irqs[i].irq, res); - - while (i--) - if (irqs[i].sock == skt->nr) - free_irq(irqs[i].irq, skt); - } - return res; -} -EXPORT_SYMBOL(sa11xx_request_irqs); - -void sa11xx_free_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr) -{ - int i; - - for (i = 0; i < nr; i++) - if (irqs[i].sock == skt->nr) - free_irq(irqs[i].irq, skt); -} -EXPORT_SYMBOL(sa11xx_free_irqs); - -void sa11xx_disable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr) -{ - int i; - - for (i = 0; i < nr; i++) - if (irqs[i].sock == skt->nr) - set_irq_type(irqs[i].irq, IRQT_NOEDGE); -} -EXPORT_SYMBOL(sa11xx_disable_irqs); - -void sa11xx_enable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr) -{ - int i; - - for (i = 0; i < nr; i++) - if (irqs[i].sock == skt->nr) { - set_irq_type(irqs[i].irq, IRQT_RISING); - set_irq_type(irqs[i].irq, IRQT_BOTHEDGE); - } -} -EXPORT_SYMBOL(sa11xx_enable_irqs); - -static LIST_HEAD(sa1100_sockets); -static DECLARE_MUTEX(sa1100_sockets_lock); - -static const char *skt_names[] = { - "PCMCIA socket 0", - "PCMCIA socket 1", -}; - -struct skt_dev_info { - int nskt; - struct sa1100_pcmcia_socket skt[0]; -}; - -#define SKT_DEV_INFO_SIZE(n) \ - (sizeof(struct skt_dev_info) + (n)*sizeof(struct sa1100_pcmcia_socket)) - -int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr) -{ - struct skt_dev_info *sinfo; - unsigned int cpu_clock; - int ret, i; - - /* - * set default MECR calculation if the board specific - * code did not specify one... - */ - if (!ops->socket_get_timing) - ops->socket_get_timing = sa1100_pcmcia_default_mecr_timing; - - down(&sa1100_sockets_lock); - - sinfo = kmalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL); - if (!sinfo) { - ret = -ENOMEM; - goto out; - } - - memset(sinfo, 0, SKT_DEV_INFO_SIZE(nr)); - sinfo->nskt = nr; - - cpu_clock = cpufreq_get(0); - - /* - * Initialise the per-socket structure. - */ - for (i = 0; i < nr; i++) { - struct sa1100_pcmcia_socket *skt = &sinfo->skt[i]; - - skt->socket.ops = &sa11xx_pcmcia_operations; - skt->socket.owner = ops->owner; - skt->socket.dev.dev = dev; - - init_timer(&skt->poll_timer); - skt->poll_timer.function = sa1100_pcmcia_poll_event; - skt->poll_timer.data = (unsigned long)skt; - skt->poll_timer.expires = jiffies + SA1100_PCMCIA_POLL_PERIOD; - - skt->nr = first + i; - skt->irq = NO_IRQ; - skt->dev = dev; - skt->ops = ops; - - skt->res_skt.start = _PCMCIA(skt->nr); - skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; - skt->res_skt.name = skt_names[skt->nr]; - skt->res_skt.flags = IORESOURCE_MEM; - - ret = request_resource(&iomem_resource, &skt->res_skt); - if (ret) - goto out_err_1; - - skt->res_io.start = _PCMCIAIO(skt->nr); - skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1; - skt->res_io.name = "io"; - skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY; - - ret = request_resource(&skt->res_skt, &skt->res_io); - if (ret) - goto out_err_2; - - skt->res_mem.start = _PCMCIAMem(skt->nr); - skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1; - skt->res_mem.name = "memory"; - skt->res_mem.flags = IORESOURCE_MEM; - - ret = request_resource(&skt->res_skt, &skt->res_mem); - if (ret) - goto out_err_3; - - skt->res_attr.start = _PCMCIAAttr(skt->nr); - skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1; - skt->res_attr.name = "attribute"; - skt->res_attr.flags = IORESOURCE_MEM; - - ret = request_resource(&skt->res_skt, &skt->res_attr); - if (ret) - goto out_err_4; - - skt->virt_io = ioremap(skt->res_io.start, 0x10000); - if (skt->virt_io == NULL) { - ret = -ENOMEM; - goto out_err_5; - } - - list_add(&skt->node, &sa1100_sockets); - - /* - * We initialize the MECR to default values here, because - * we are not guaranteed to see a SetIOMap operation at - * runtime. - */ - sa1100_pcmcia_set_mecr(skt, cpu_clock); - - ret = ops->hw_init(skt); - if (ret) - goto out_err_6; - - skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD; - skt->socket.irq_mask = 0; - skt->socket.map_size = PAGE_SIZE; - skt->socket.pci_irq = skt->irq; - skt->socket.io_offset = (unsigned long)skt->virt_io; - - skt->status = sa1100_pcmcia_skt_state(skt); - - ret = pcmcia_register_socket(&skt->socket); - if (ret) - goto out_err_7; - - WARN_ON(skt->socket.sock != i); - - add_timer(&skt->poll_timer); - - class_device_create_file(&skt->socket.dev, &class_device_attr_status); - } - - dev_set_drvdata(dev, sinfo); - ret = 0; - goto out; - - do { - struct sa1100_pcmcia_socket *skt = &sinfo->skt[i]; - - del_timer_sync(&skt->poll_timer); - pcmcia_unregister_socket(&skt->socket); - - out_err_7: - flush_scheduled_work(); - - ops->hw_shutdown(skt); - out_err_6: - list_del(&skt->node); - iounmap(skt->virt_io); - out_err_5: - release_resource(&skt->res_attr); - out_err_4: - release_resource(&skt->res_mem); - out_err_3: - release_resource(&skt->res_io); - out_err_2: - release_resource(&skt->res_skt); - out_err_1: - i--; - } while (i > 0); - - kfree(sinfo); - - out: - up(&sa1100_sockets_lock); - return ret; -} -EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe); - -int sa11xx_drv_pcmcia_remove(struct device *dev) -{ - struct skt_dev_info *sinfo = dev_get_drvdata(dev); - int i; - - dev_set_drvdata(dev, NULL); - - down(&sa1100_sockets_lock); - for (i = 0; i < sinfo->nskt; i++) { - struct sa1100_pcmcia_socket *skt = &sinfo->skt[i]; - - del_timer_sync(&skt->poll_timer); - - pcmcia_unregister_socket(&skt->socket); - - flush_scheduled_work(); - - skt->ops->hw_shutdown(skt); - - sa1100_pcmcia_config_skt(skt, &dead_socket); - - list_del(&skt->node); - iounmap(skt->virt_io); - skt->virt_io = NULL; - release_resource(&skt->res_attr); - release_resource(&skt->res_mem); - release_resource(&skt->res_io); - release_resource(&skt->res_skt); - } - up(&sa1100_sockets_lock); - - kfree(sinfo); - - return 0; -} -EXPORT_SYMBOL(sa11xx_drv_pcmcia_remove); - -#ifdef CONFIG_CPU_FREQ - -/* sa1100_pcmcia_update_mecr() - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * When sa1100_pcmcia_notifier() decides that a MECR adjustment (due - * to a core clock frequency change) is needed, this routine establishes - * new BS_xx values consistent with the clock speed `clock'. - */ -static void sa1100_pcmcia_update_mecr(unsigned int clock) -{ - struct sa1100_pcmcia_socket *skt; - - down(&sa1100_sockets_lock); - list_for_each_entry(skt, &sa1100_sockets, node) - sa1100_pcmcia_set_mecr(skt, clock); - up(&sa1100_sockets_lock); -} - -/* sa1100_pcmcia_notifier() - * ^^^^^^^^^^^^^^^^^^^^^^^^ - * When changing the processor core clock frequency, it is necessary - * to adjust the MECR timings accordingly. We've recorded the timings - * requested by Card Services, so this is just a matter of finding - * out what our current speed is, and then recomputing the new MECR - * values. - * - * Returns: 0 on success, -1 on error - */ -static int -sa1100_pcmcia_notifier(struct notifier_block *nb, unsigned long val, - void *data) -{ - struct cpufreq_freqs *freqs = data; - - switch (val) { - case CPUFREQ_PRECHANGE: - if (freqs->new > freqs->old) - sa1100_pcmcia_update_mecr(freqs->new); - break; - - case CPUFREQ_POSTCHANGE: - if (freqs->new < freqs->old) - sa1100_pcmcia_update_mecr(freqs->new); - break; - } - - return 0; -} - -static struct notifier_block sa1100_pcmcia_notifier_block = { - .notifier_call = sa1100_pcmcia_notifier -}; - -static int __init sa11xx_pcmcia_init(void) -{ - int ret; - - printk(KERN_INFO "SA11xx PCMCIA\n"); - - ret = cpufreq_register_notifier(&sa1100_pcmcia_notifier_block, - CPUFREQ_TRANSITION_NOTIFIER); - if (ret < 0) - printk(KERN_ERR "Unable to register CPU frequency change " - "notifier (%d)\n", ret); - - return ret; -} -module_init(sa11xx_pcmcia_init); - -static void __exit sa11xx_pcmcia_exit(void) -{ - cpufreq_unregister_notifier(&sa1100_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER); -} - -module_exit(sa11xx_pcmcia_exit); -#endif - -MODULE_AUTHOR("John Dorsey "); -MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11xx core socket driver"); -MODULE_LICENSE("Dual MPL/GPL"); diff -Nru a/drivers/pcmcia/sa11xx_core.h b/drivers/pcmcia/sa11xx_core.h --- a/drivers/pcmcia/sa11xx_core.h Tue May 18 23:38:08 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,121 +0,0 @@ -/* - * linux/include/asm/arch/pcmcia.h - * - * Copyright (C) 2000 John G Dorsey - * - * This file contains definitions for the low-level SA-1100 kernel PCMCIA - * interface. Please see linux/Documentation/arm/SA1100/PCMCIA for details. - */ -#ifndef _ASM_ARCH_PCMCIA -#define _ASM_ARCH_PCMCIA - -/* include the world */ -#include -#include -#include -#include -#include -#include -#include "cs_internal.h" - -struct device; - -/* Ideally, we'd support up to MAX_SOCK sockets, but the SA-1100 only - * has support for two. This shows up in lots of hardwired ways, such - * as the fact that MECR only has enough bits to configure two sockets. - * Since it's so entrenched in the hardware, limiting the software - * in this way doesn't seem too terrible. - */ -#define SA1100_PCMCIA_MAX_SOCK (2) - -struct pcmcia_state { - unsigned detect: 1, - ready: 1, - bvd1: 1, - bvd2: 1, - wrprot: 1, - vs_3v: 1, - vs_Xv: 1; -}; - -/* - * This structure encapsulates per-socket state which we might need to - * use when responding to a Card Services query of some kind. - */ -struct sa1100_pcmcia_socket { - struct pcmcia_socket socket; - - /* - * Info from low level handler - */ - struct device *dev; - unsigned int nr; - unsigned int irq; - - /* - * Core PCMCIA state - */ - struct pcmcia_low_level *ops; - - unsigned int status; - socket_state_t cs_state; - - unsigned short spd_io[MAX_IO_WIN]; - unsigned short spd_mem[MAX_WIN]; - unsigned short spd_attr[MAX_WIN]; - - struct resource res_skt; - struct resource res_io; - struct resource res_mem; - struct resource res_attr; - void *virt_io; - - unsigned int irq_state; - - struct timer_list poll_timer; - struct list_head node; -}; - -struct pcmcia_low_level { - struct module *owner; - - int (*hw_init)(struct sa1100_pcmcia_socket *); - void (*hw_shutdown)(struct sa1100_pcmcia_socket *); - - void (*socket_state)(struct sa1100_pcmcia_socket *, struct pcmcia_state *); - int (*configure_socket)(struct sa1100_pcmcia_socket *, const socket_state_t *); - - /* - * Enable card status IRQs on (re-)initialisation. This can - * be called at initialisation, power management event, or - * pcmcia event. - */ - void (*socket_init)(struct sa1100_pcmcia_socket *); - - /* - * Disable card status IRQs and PCMCIA bus on suspend. - */ - void (*socket_suspend)(struct sa1100_pcmcia_socket *); - - /* - * Calculate MECR timing clock wait states - */ - unsigned int (*socket_get_timing)(struct sa1100_pcmcia_socket *, - unsigned int cpu_speed, unsigned int cmd_time); -}; - -struct pcmcia_irqs { - int sock; - int irq; - const char *str; -}; - -int sa11xx_request_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); -void sa11xx_free_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); -void sa11xx_disable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); -void sa11xx_enable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); - -extern int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr); -extern int sa11xx_drv_pcmcia_remove(struct device *dev); - -#endif diff -Nru a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/soc_common.c Tue May 18 23:38:06 2004 @@ -0,0 +1,774 @@ +/*====================================================================== + + Common support code for the PCMCIA control functionality of + integrated SOCs like the SA-11x0 and PXA2xx microprocessors. + + The contents of this file are subject to the Mozilla Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The initial developer of the original code is John G. Dorsey + . Portions created by John G. Dorsey are + Copyright (C) 1999 John G. Dorsey. All Rights Reserved. + + Alternatively, the contents of this file may be used under the + terms of the GNU Public License version 2 (the "GPL"), in which + case the provisions of the GPL are applicable instead of the + above. If you wish to allow the use of your version of this file + only under the terms of the GPL and not to allow others to use + your version of this file under the MPL, indicate your decision + by deleting the provisions above and replace them with the notice + and other provisions required by the GPL. If you do not delete + the provisions above, a recipient may use your version of this + file under either the MPL or the GPL. + +======================================================================*/ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "soc_common.h" + +#ifdef DEBUG + +static int pc_debug; +module_param(pc_debug, int, 0644); + +void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func, + int lvl, const char *fmt, ...) +{ + va_list args; + if (pc_debug > lvl) { + printk(KERN_DEBUG "skt%u: %s: ", skt->nr, func); + va_start(args, fmt); + printk(fmt, args); + va_end(args); + } +} + +#endif + +#define to_soc_pcmcia_socket(x) container_of(x, struct soc_pcmcia_socket, socket) + +static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt) +{ + struct pcmcia_state state; + unsigned int stat; + + memset(&state, 0, sizeof(struct pcmcia_state)); + + skt->ops->socket_state(skt, &state); + + stat = state.detect ? SS_DETECT : 0; + stat |= state.ready ? SS_READY : 0; + stat |= state.wrprot ? SS_WRPROT : 0; + stat |= state.vs_3v ? SS_3VCARD : 0; + stat |= state.vs_Xv ? SS_XVCARD : 0; + + /* The power status of individual sockets is not available + * explicitly from the hardware, so we just remember the state + * and regurgitate it upon request: + */ + stat |= skt->cs_state.Vcc ? SS_POWERON : 0; + + if (skt->cs_state.flags & SS_IOCARD) + stat |= state.bvd1 ? SS_STSCHG : 0; + else { + if (state.bvd1 == 0) + stat |= SS_BATDEAD; + else if (state.bvd2 == 0) + stat |= SS_BATWARN; + } + return stat; +} + +/* + * soc_common_pcmcia_config_skt + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * Convert PCMCIA socket state to our socket configure structure. + */ +static int +soc_common_pcmcia_config_skt(struct soc_pcmcia_socket *skt, socket_state_t *state) +{ + int ret; + + ret = skt->ops->configure_socket(skt, state); + if (ret == 0) { + /* + * This really needs a better solution. The IRQ + * may or may not be claimed by the driver. + */ + if (skt->irq_state != 1 && state->io_irq) { + skt->irq_state = 1; + set_irq_type(skt->irq, IRQT_FALLING); + } else if (skt->irq_state == 1 && state->io_irq == 0) { + skt->irq_state = 0; + set_irq_type(skt->irq, IRQT_NOEDGE); + } + + skt->cs_state = *state; + } + + if (ret < 0) + printk(KERN_ERR "soc_common_pcmcia: unable to configure " + "socket %d\n", skt->nr); + + return ret; +} + +/* soc_common_pcmcia_sock_init() + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * (Re-)Initialise the socket, turning on status interrupts + * and PCMCIA bus. This must wait for power to stabilise + * so that the card status signals report correctly. + * + * Returns: 0 + */ +static int soc_common_pcmcia_sock_init(struct pcmcia_socket *sock) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + + debug(skt, 2, "initializing socket\n"); + + skt->ops->socket_init(skt); + return 0; +} + + +/* + * soc_common_pcmcia_suspend() + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * Remove power on the socket, disable IRQs from the card. + * Turn off status interrupts, and disable the PCMCIA bus. + * + * Returns: 0 + */ +static int soc_common_pcmcia_suspend(struct pcmcia_socket *sock) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + int ret; + + debug(skt, 2, "suspending socket\n"); + + ret = soc_common_pcmcia_config_skt(skt, &dead_socket); + if (ret == 0) + skt->ops->socket_suspend(skt); + + return ret; +} + +static spinlock_t status_lock = SPIN_LOCK_UNLOCKED; + +static void soc_common_check_status(struct soc_pcmcia_socket *skt) +{ + unsigned int events; + + debug(skt, 4, "entering PCMCIA monitoring thread\n"); + + do { + unsigned int status; + unsigned long flags; + + status = soc_common_pcmcia_skt_state(skt); + + spin_lock_irqsave(&status_lock, flags); + events = (status ^ skt->status) & skt->cs_state.csc_mask; + skt->status = status; + spin_unlock_irqrestore(&status_lock, flags); + + debug(skt, 4, "events: %s%s%s%s%s%s\n", + events == 0 ? "" : "", + events & SS_DETECT ? "DETECT " : "", + events & SS_READY ? "READY " : "", + events & SS_BATDEAD ? "BATDEAD " : "", + events & SS_BATWARN ? "BATWARN " : "", + events & SS_STSCHG ? "STSCHG " : ""); + + if (events) + pcmcia_parse_events(&skt->socket, events); + } while (events); +} + +/* Let's poll for events in addition to IRQs since IRQ only is unreliable... */ +static void soc_common_pcmcia_poll_event(unsigned long dummy) +{ + struct soc_pcmcia_socket *skt = (struct soc_pcmcia_socket *)dummy; + debug(skt, 4, "polling for events\n"); + + mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD); + + soc_common_check_status(skt); +} + + +/* + * Service routine for socket driver interrupts (requested by the + * low-level PCMCIA init() operation via soc_common_pcmcia_thread()). + * The actual interrupt-servicing work is performed by + * soc_common_pcmcia_thread(), largely because the Card Services event- + * handling code performs scheduling operations which cannot be + * executed from within an interrupt context. + */ +static irqreturn_t soc_common_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs) +{ + struct soc_pcmcia_socket *skt = dev; + + debug(skt, 3, "servicing IRQ %d\n", irq); + + soc_common_check_status(skt); + + return IRQ_HANDLED; +} + + +/* + * Implements the get_status() operation for the in-kernel PCMCIA + * service (formerly SS_GetStatus in Card Services). Essentially just + * fills in bits in `status' according to internal driver state or + * the value of the voltage detect chipselect register. + * + * As a debugging note, during card startup, the PCMCIA core issues + * three set_socket() commands in a row the first with RESET deasserted, + * the second with RESET asserted, and the last with RESET deasserted + * again. Following the third set_socket(), a get_status() command will + * be issued. The kernel is looking for the SS_READY flag (see + * setup_socket(), reset_socket(), and unreset_socket() in cs.c). + * + * Returns: 0 + */ +static int +soc_common_pcmcia_get_status(struct pcmcia_socket *sock, unsigned int *status) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + + skt->status = soc_common_pcmcia_skt_state(skt); + *status = skt->status; + + return 0; +} + + +/* + * Implements the get_socket() operation for the in-kernel PCMCIA + * service (formerly SS_GetSocket in Card Services). Not a very + * exciting routine. + * + * Returns: 0 + */ +static int +soc_common_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + + debug(skt, 2, "\n"); + + *state = skt->cs_state; + + return 0; +} + +/* + * Implements the set_socket() operation for the in-kernel PCMCIA + * service (formerly SS_SetSocket in Card Services). We more or + * less punt all of this work and let the kernel handle the details + * of power configuration, reset, &c. We also record the value of + * `state' in order to regurgitate it to the PCMCIA core later. + * + * Returns: 0 + */ +static int +soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + + debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n", + (state->csc_mask==0)?" ":"", + (state->csc_mask&SS_DETECT)?"DETECT ":"", + (state->csc_mask&SS_READY)?"READY ":"", + (state->csc_mask&SS_BATDEAD)?"BATDEAD ":"", + (state->csc_mask&SS_BATWARN)?"BATWARN ":"", + (state->csc_mask&SS_STSCHG)?"STSCHG ":"", + (state->flags==0)?" ":"", + (state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"", + (state->flags&SS_IOCARD)?"IOCARD ":"", + (state->flags&SS_RESET)?"RESET ":"", + (state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"", + (state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"", + state->Vcc, state->Vpp, state->io_irq); + + return soc_common_pcmcia_config_skt(skt, state); +} + + +/* + * Implements the set_io_map() operation for the in-kernel PCMCIA + * service (formerly SS_SetIOMap in Card Services). We configure + * the map speed as requested, but override the address ranges + * supplied by Card Services. + * + * Returns: 0 on success, -1 on error + */ +static int +soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + unsigned short speed = map->speed; + + debug(skt, 2, "map %u speed %u start 0x%08x stop 0x%08x\n", + map->map, map->speed, map->start, map->stop); + debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", + (map->flags==0)?"":"", + (map->flags&MAP_ACTIVE)?"ACTIVE ":"", + (map->flags&MAP_16BIT)?"16BIT ":"", + (map->flags&MAP_AUTOSZ)?"AUTOSZ ":"", + (map->flags&MAP_0WS)?"0WS ":"", + (map->flags&MAP_WRPROT)?"WRPROT ":"", + (map->flags&MAP_USE_WAIT)?"USE_WAIT ":"", + (map->flags&MAP_PREFETCH)?"PREFETCH ":""); + + if (map->map >= MAX_IO_WIN) { + printk(KERN_ERR "%s(): map (%d) out of range\n", __FUNCTION__, + map->map); + return -1; + } + + if (map->flags & MAP_ACTIVE) { + if (speed == 0) + speed = SOC_PCMCIA_IO_ACCESS; + } else { + speed = 0; + } + + skt->spd_io[map->map] = speed; + skt->ops->set_timing(skt); + + if (map->stop == 1) + map->stop = PAGE_SIZE-1; + + map->stop -= map->start; + map->stop += (unsigned long)skt->virt_io; + map->start = (unsigned long)skt->virt_io; + + return 0; +} + + +/* + * Implements the set_mem_map() operation for the in-kernel PCMCIA + * service (formerly SS_SetMemMap in Card Services). We configure + * the map speed as requested, but override the address ranges + * supplied by Card Services. + * + * Returns: 0 on success, -1 on error + */ +static int +soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map) +{ + struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); + struct resource *res; + unsigned short speed = map->speed; + + debug(skt, 2, "map %u speed %u card_start %08x\n", + map->map, map->speed, map->card_start); + debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", + (map->flags==0)?"":"", + (map->flags&MAP_ACTIVE)?"ACTIVE ":"", + (map->flags&MAP_16BIT)?"16BIT ":"", + (map->flags&MAP_AUTOSZ)?"AUTOSZ ":"", + (map->flags&MAP_0WS)?"0WS ":"", + (map->flags&MAP_WRPROT)?"WRPROT ":"", + (map->flags&MAP_ATTRIB)?"ATTRIB ":"", + (map->flags&MAP_USE_WAIT)?"USE_WAIT ":""); + + if (map->map >= MAX_WIN) + return -EINVAL; + + if (map->flags & MAP_ACTIVE) { + if (speed == 0) + speed = 300; + } else { + speed = 0; + } + + if (map->flags & MAP_ATTRIB) { + res = &skt->res_attr; + skt->spd_attr[map->map] = speed; + skt->spd_mem[map->map] = 0; + } else { + res = &skt->res_mem; + skt->spd_attr[map->map] = 0; + skt->spd_mem[map->map] = speed; + } + + skt->ops->set_timing(skt); + + map->sys_stop -= map->sys_start; + map->sys_stop += res->start + map->card_start; + map->sys_start = res->start + map->card_start; + + return 0; +} + +struct bittbl { + unsigned int mask; + const char *name; +}; + +static struct bittbl status_bits[] = { + { SS_WRPROT, "SS_WRPROT" }, + { SS_BATDEAD, "SS_BATDEAD" }, + { SS_BATWARN, "SS_BATWARN" }, + { SS_READY, "SS_READY" }, + { SS_DETECT, "SS_DETECT" }, + { SS_POWERON, "SS_POWERON" }, + { SS_STSCHG, "SS_STSCHG" }, + { SS_3VCARD, "SS_3VCARD" }, + { SS_XVCARD, "SS_XVCARD" }, +}; + +static struct bittbl conf_bits[] = { + { SS_PWR_AUTO, "SS_PWR_AUTO" }, + { SS_IOCARD, "SS_IOCARD" }, + { SS_RESET, "SS_RESET" }, + { SS_DMA_MODE, "SS_DMA_MODE" }, + { SS_SPKR_ENA, "SS_SPKR_ENA" }, + { SS_OUTPUT_ENA, "SS_OUTPUT_ENA" }, +}; + +static void +dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, int sz) +{ + char *b = *p; + int i; + + b += sprintf(b, "%-9s:", prefix); + for (i = 0; i < sz; i++) + if (val & bits[i].mask) + b += sprintf(b, " %s", bits[i].name); + *b++ = '\n'; + *p = b; +} + +/* + * Implements the /sys/class/pcmcia_socket/??/status file. + * + * Returns: the number of characters added to the buffer + */ +static ssize_t show_status(struct class_device *class_dev, char *buf) +{ + struct soc_pcmcia_socket *skt = + container_of(class_dev, struct soc_pcmcia_socket, socket.dev); + char *p = buf; + + p+=sprintf(p, "slot : %d\n", skt->nr); + + dump_bits(&p, "status", skt->status, + status_bits, ARRAY_SIZE(status_bits)); + dump_bits(&p, "csc_mask", skt->cs_state.csc_mask, + status_bits, ARRAY_SIZE(status_bits)); + dump_bits(&p, "cs_flags", skt->cs_state.flags, + conf_bits, ARRAY_SIZE(conf_bits)); + + p+=sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc); + p+=sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp); + p+=sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq, skt->irq); + if (skt->ops->show_timing) + p+=skt->ops->show_timing(skt, p); + + return p-buf; +} +static CLASS_DEVICE_ATTR(status, S_IRUGO, show_status, NULL); + + +static struct pccard_operations soc_common_pcmcia_operations = { + .init = soc_common_pcmcia_sock_init, + .suspend = soc_common_pcmcia_suspend, + .get_status = soc_common_pcmcia_get_status, + .get_socket = soc_common_pcmcia_get_socket, + .set_socket = soc_common_pcmcia_set_socket, + .set_io_map = soc_common_pcmcia_set_io_map, + .set_mem_map = soc_common_pcmcia_set_mem_map, +}; + + +int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, + struct pcmcia_irqs *irqs, int nr) +{ + int i, res = 0; + + for (i = 0; i < nr; i++) { + if (irqs[i].sock != skt->nr) + continue; + res = request_irq(irqs[i].irq, soc_common_pcmcia_interrupt, + SA_INTERRUPT, irqs[i].str, skt); + if (res) + break; + set_irq_type(irqs[i].irq, IRQT_NOEDGE); + } + + if (res) { + printk(KERN_ERR "PCMCIA: request for IRQ%d failed (%d)\n", + irqs[i].irq, res); + + while (i--) + if (irqs[i].sock == skt->nr) + free_irq(irqs[i].irq, skt); + } + return res; +} +EXPORT_SYMBOL(soc_pcmcia_request_irqs); + +void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt, + struct pcmcia_irqs *irqs, int nr) +{ + int i; + + for (i = 0; i < nr; i++) + if (irqs[i].sock == skt->nr) + free_irq(irqs[i].irq, skt); +} +EXPORT_SYMBOL(soc_pcmcia_free_irqs); + +void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt, + struct pcmcia_irqs *irqs, int nr) +{ + int i; + + for (i = 0; i < nr; i++) + if (irqs[i].sock == skt->nr) + set_irq_type(irqs[i].irq, IRQT_NOEDGE); +} +EXPORT_SYMBOL(soc_pcmcia_disable_irqs); + +void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, + struct pcmcia_irqs *irqs, int nr) +{ + int i; + + for (i = 0; i < nr; i++) + if (irqs[i].sock == skt->nr) { + set_irq_type(irqs[i].irq, IRQT_RISING); + set_irq_type(irqs[i].irq, IRQT_BOTHEDGE); + } +} +EXPORT_SYMBOL(soc_pcmcia_enable_irqs); + + +LIST_HEAD(soc_pcmcia_sockets); +DECLARE_MUTEX(soc_pcmcia_sockets_lock); + +static const char *skt_names[] = { + "PCMCIA socket 0", + "PCMCIA socket 1", +}; + +struct skt_dev_info { + int nskt; + struct soc_pcmcia_socket skt[0]; +}; + +#define SKT_DEV_INFO_SIZE(n) \ + (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket)) + +int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr) +{ + struct skt_dev_info *sinfo; + int ret, i; + + down(&soc_pcmcia_sockets_lock); + + sinfo = kmalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL); + if (!sinfo) { + ret = -ENOMEM; + goto out; + } + + memset(sinfo, 0, SKT_DEV_INFO_SIZE(nr)); + sinfo->nskt = nr; + + /* + * Initialise the per-socket structure. + */ + for (i = 0; i < nr; i++) { + struct soc_pcmcia_socket *skt = &sinfo->skt[i]; + + skt->socket.ops = &soc_common_pcmcia_operations; + skt->socket.owner = ops->owner; + skt->socket.dev.dev = dev; + + init_timer(&skt->poll_timer); + skt->poll_timer.function = soc_common_pcmcia_poll_event; + skt->poll_timer.data = (unsigned long)skt; + skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD; + + skt->nr = first + i; + skt->irq = NO_IRQ; + skt->dev = dev; + skt->ops = ops; + + skt->res_skt.start = _PCMCIA(skt->nr); + skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; + skt->res_skt.name = skt_names[skt->nr]; + skt->res_skt.flags = IORESOURCE_MEM; + + ret = request_resource(&iomem_resource, &skt->res_skt); + if (ret) + goto out_err_1; + + skt->res_io.start = _PCMCIAIO(skt->nr); + skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1; + skt->res_io.name = "io"; + skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY; + + ret = request_resource(&skt->res_skt, &skt->res_io); + if (ret) + goto out_err_2; + + skt->res_mem.start = _PCMCIAMem(skt->nr); + skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1; + skt->res_mem.name = "memory"; + skt->res_mem.flags = IORESOURCE_MEM; + + ret = request_resource(&skt->res_skt, &skt->res_mem); + if (ret) + goto out_err_3; + + skt->res_attr.start = _PCMCIAAttr(skt->nr); + skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1; + skt->res_attr.name = "attribute"; + skt->res_attr.flags = IORESOURCE_MEM; + + ret = request_resource(&skt->res_skt, &skt->res_attr); + if (ret) + goto out_err_4; + + skt->virt_io = ioremap(skt->res_io.start, 0x10000); + if (skt->virt_io == NULL) { + ret = -ENOMEM; + goto out_err_5; + } + + list_add(&skt->node, &soc_pcmcia_sockets); + + /* + * We initialize default socket timing here, because + * we are not guaranteed to see a SetIOMap operation at + * runtime. + */ + ops->set_timing(skt); + + ret = ops->hw_init(skt); + if (ret) + goto out_err_6; + + skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD; + skt->socket.irq_mask = 0; + skt->socket.map_size = PAGE_SIZE; + skt->socket.pci_irq = skt->irq; + skt->socket.io_offset = (unsigned long)skt->virt_io; + + skt->status = soc_common_pcmcia_skt_state(skt); + + ret = pcmcia_register_socket(&skt->socket); + if (ret) + goto out_err_7; + + WARN_ON(skt->socket.sock != i); + + add_timer(&skt->poll_timer); + + class_device_create_file(&skt->socket.dev, &class_device_attr_status); + } + + dev_set_drvdata(dev, sinfo); + ret = 0; + goto out; + + do { + struct soc_pcmcia_socket *skt = &sinfo->skt[i]; + + del_timer_sync(&skt->poll_timer); + pcmcia_unregister_socket(&skt->socket); + + out_err_7: + flush_scheduled_work(); + + ops->hw_shutdown(skt); + out_err_6: + list_del(&skt->node); + iounmap(skt->virt_io); + out_err_5: + release_resource(&skt->res_attr); + out_err_4: + release_resource(&skt->res_mem); + out_err_3: + release_resource(&skt->res_io); + out_err_2: + release_resource(&skt->res_skt); + out_err_1: + i--; + } while (i > 0); + + kfree(sinfo); + + out: + up(&soc_pcmcia_sockets_lock); + return ret; +} + +int soc_common_drv_pcmcia_remove(struct device *dev) +{ + struct skt_dev_info *sinfo = dev_get_drvdata(dev); + int i; + + dev_set_drvdata(dev, NULL); + + down(&soc_pcmcia_sockets_lock); + for (i = 0; i < sinfo->nskt; i++) { + struct soc_pcmcia_socket *skt = &sinfo->skt[i]; + + del_timer_sync(&skt->poll_timer); + + pcmcia_unregister_socket(&skt->socket); + + flush_scheduled_work(); + + skt->ops->hw_shutdown(skt); + + soc_common_pcmcia_config_skt(skt, &dead_socket); + + list_del(&skt->node); + iounmap(skt->virt_io); + skt->virt_io = NULL; + release_resource(&skt->res_attr); + release_resource(&skt->res_mem); + release_resource(&skt->res_io); + release_resource(&skt->res_skt); + } + up(&soc_pcmcia_sockets_lock); + + kfree(sinfo); + + return 0; +} diff -Nru a/drivers/pcmcia/soc_common.h b/drivers/pcmcia/soc_common.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/pcmcia/soc_common.h Tue May 18 23:38:08 2004 @@ -0,0 +1,179 @@ +/* + * linux/drivers/pcmcia/soc_common.h + * + * Copyright (C) 2000 John G Dorsey + * + * This file contains definitions for the PCMCIA support code common to + * integrated SOCs like the SA-11x0 and PXA2xx microprocessors. + */ +#ifndef _ASM_ARCH_PCMCIA +#define _ASM_ARCH_PCMCIA + +/* include the world */ +#include +#include +#include +#include +#include +#include +#include "cs_internal.h" + + +struct device; +struct pcmcia_low_level; + +/* + * This structure encapsulates per-socket state which we might need to + * use when responding to a Card Services query of some kind. + */ +struct soc_pcmcia_socket { + struct pcmcia_socket socket; + + /* + * Info from low level handler + */ + struct device *dev; + unsigned int nr; + unsigned int irq; + + /* + * Core PCMCIA state + */ + struct pcmcia_low_level *ops; + + unsigned int status; + socket_state_t cs_state; + + unsigned short spd_io[MAX_IO_WIN]; + unsigned short spd_mem[MAX_WIN]; + unsigned short spd_attr[MAX_WIN]; + + struct resource res_skt; + struct resource res_io; + struct resource res_mem; + struct resource res_attr; + void *virt_io; + + unsigned int irq_state; + + struct timer_list poll_timer; + struct list_head node; +}; + +struct pcmcia_state { + unsigned detect: 1, + ready: 1, + bvd1: 1, + bvd2: 1, + wrprot: 1, + vs_3v: 1, + vs_Xv: 1; +}; + +struct pcmcia_low_level { + struct module *owner; + + /* first socket in system */ + int first; + /* nr of sockets */ + int nr; + + int (*hw_init)(struct soc_pcmcia_socket *); + void (*hw_shutdown)(struct soc_pcmcia_socket *); + + void (*socket_state)(struct soc_pcmcia_socket *, struct pcmcia_state *); + int (*configure_socket)(struct soc_pcmcia_socket *, const socket_state_t *); + + /* + * Enable card status IRQs on (re-)initialisation. This can + * be called at initialisation, power management event, or + * pcmcia event. + */ + void (*socket_init)(struct soc_pcmcia_socket *); + + /* + * Disable card status IRQs and PCMCIA bus on suspend. + */ + void (*socket_suspend)(struct soc_pcmcia_socket *); + + /* + * Hardware specific timing routines. + * If provided, the get_timing routine overrides the SOC default. + */ + unsigned int (*get_timing)(struct soc_pcmcia_socket *, unsigned int, unsigned int); + int (*set_timing)(struct soc_pcmcia_socket *); + int (*show_timing)(struct soc_pcmcia_socket *, char *); +}; + + +struct pcmcia_irqs { + int sock; + int irq; + const char *str; +}; + +extern int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); +extern void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); +extern void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); +extern void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr); + + +extern struct list_head soc_pcmcia_sockets; +extern struct semaphore soc_pcmcia_sockets_lock; + +extern int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr); +extern int soc_common_drv_pcmcia_remove(struct device *dev); + + +#ifdef DEBUG + +extern void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func, + int lvl, const char *fmt, ...); + +#define debug(skt, lvl, fmt, arg...) \ + soc_pcmcia_debug(skt, __func__, lvl, fmt , ## arg) + +#else +#define debug(skt, lvl, fmt, arg...) do { } while (0) +#endif + + +/* + * The PC Card Standard, Release 7, section 4.13.4, says that twIORD + * has a minimum value of 165ns. Section 4.13.5 says that twIOWR has + * a minimum value of 165ns, as well. Section 4.7.2 (describing + * common and attribute memory write timing) says that twWE has a + * minimum value of 150ns for a 250ns cycle time (for 5V operation; + * see section 4.7.4), or 300ns for a 600ns cycle time (for 3.3V + * operation, also section 4.7.4). Section 4.7.3 says that taOE + * has a maximum value of 150ns for a 300ns cycle time (for 5V + * operation), or 300ns for a 600ns cycle time (for 3.3V operation). + * + * When configuring memory maps, Card Services appears to adopt the policy + * that a memory access time of "0" means "use the default." The default + * PCMCIA I/O command width time is 165ns. The default PCMCIA 5V attribute + * and memory command width time is 150ns; the PCMCIA 3.3V attribute and + * memory command width time is 300ns. + */ +#define SOC_PCMCIA_IO_ACCESS (165) +#define SOC_PCMCIA_5V_MEM_ACCESS (150) +#define SOC_PCMCIA_3V_MEM_ACCESS (300) +#define SOC_PCMCIA_ATTR_MEM_ACCESS (300) + +/* + * The socket driver actually works nicely in interrupt-driven form, + * so the (relatively infrequent) polling is "just to be sure." + */ +#define SOC_PCMCIA_POLL_PERIOD (2*HZ) + + +/* I/O pins replacing memory pins + * (PCMCIA System Architecture, 2nd ed., by Don Anderson, p.75) + * + * These signals change meaning when going from memory-only to + * memory-or-I/O interface: + */ +#define iostschg bvd1 +#define iospkr bvd2 + +#endif diff -Nru a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c --- a/drivers/pcmcia/tcic.c Tue May 18 23:38:07 2004 +++ b/drivers/pcmcia/tcic.c Tue May 18 23:38:07 2004 @@ -60,7 +60,7 @@ static int pc_debug; module_param(pc_debug, int, 0644); -static const char *version = +static const char version[] = "tcic.c 1.111 2000/02/15 04:13:12 (David Hinds)"; #define debug(lvl, fmt, arg...) do { \ diff -Nru a/drivers/s390/Kconfig b/drivers/s390/Kconfig --- a/drivers/s390/Kconfig Tue May 18 23:38:09 2004 +++ b/drivers/s390/Kconfig Tue May 18 23:38:09 2004 @@ -54,17 +54,28 @@ comment "S/390 character device drivers" config TN3270 - tristate "Support for locally attached 3270 tubes" + tristate "Support for locally attached 3270 terminals" help - Include support for IBM 3270 line-mode terminals. + Include support for IBM 3270 terminals. + +config TN3270_TTY + tristate "Support for tty input/output on 3270 terminals" + depends on TN3270 + help + Include support for using an IBM 3270 terminal as a Linux tty. + +config TN3270_FS + tristate "Support for fullscreen applications on 3270 terminals" + depends on TN3270 + help + Include support for fullscreen applications on an IBM 3270 terminal. config TN3270_CONSOLE - bool "Support for console on 3270 line mode terminal" - depends on TN3270=y + bool "Support for console on 3270 terminal" + depends on TN3270=y && TN3270_TTY=y help - Include support for using an IBM 3270 line-mode terminal as a Linux - system console. Available only if 3270 support is compiled in - statically. + Include support for using an IBM 3270 terminal as a Linux system + console. Available only if 3270 support is compiled in statically. config TN3215 bool "Support for 3215 line mode terminal" diff -Nru a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c --- a/drivers/s390/block/dasd.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/block/dasd.c Tue May 18 23:38:07 2004 @@ -7,7 +7,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 * - * $Revision: 1.139 $ + * $Revision: 1.141 $ */ #include @@ -751,16 +751,16 @@ break; case -EBUSY: DBF_DEV_EVENT(DBF_ERR, device, "%s", - "device busy, retry later"); + "start_IO: device busy, retry later"); break; case -ETIMEDOUT: DBF_DEV_EVENT(DBF_ERR, device, "%s", - "request timeout - terminated"); + "start_IO: request timeout, retry later"); + break; case -ENODEV: case -EIO: - cqr->status = DASD_CQR_FAILED; - cqr->stopclk = cqr->startclk; - dasd_schedule_bh(device); + DBF_DEV_EVENT(DBF_ERR, device, "%s", + "start_IO: device gone, retry"); break; default: DEV_MESSAGE(KERN_ERR, device, @@ -1008,8 +1008,9 @@ if (device->discipline->start_IO(next) == 0) expires = next->expires; else - MESSAGE(KERN_WARNING, "%s", - "Interrupt fastpath failed!"); + DEV_MESSAGE(KERN_DEBUG, device, "%s", + "Interrupt fastpath " + "failed!"); } } } else { /* error */ @@ -1018,8 +1019,8 @@ if (cqr->dstat) memcpy(cqr->dstat, irb, sizeof (struct irb)); else - MESSAGE(KERN_ERR, "%s", - "no memory for dstat...ignoring"); + DEV_MESSAGE(KERN_ERR, device, "%s", + "no memory for dstat...ignoring"); #ifdef ERP_DEBUG /* dump sense data */ dasd_log_sense(cqr, irb); diff -Nru a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c --- a/drivers/s390/block/dasd_eckd.c Tue May 18 23:38:05 2004 +++ b/drivers/s390/block/dasd_eckd.c Tue May 18 23:38:05 2004 @@ -7,7 +7,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 * - * $Revision: 1.54 $ + * $Revision: 1.55 $ */ #include @@ -1070,7 +1070,7 @@ cqr->device = device; cqr->expires = 5 * 60 * HZ; /* 5 minutes */ cqr->lpm = LPM_ANYPATH; - cqr->retries = 2; + cqr->retries = 256; cqr->buildclk = get_clock(); cqr->status = DASD_CQR_FILLED; return cqr; diff -Nru a/drivers/s390/block/dasd_erp.c b/drivers/s390/block/dasd_erp.c --- a/drivers/s390/block/dasd_erp.c Tue May 18 23:38:05 2004 +++ b/drivers/s390/block/dasd_erp.c Tue May 18 23:38:05 2004 @@ -7,7 +7,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 * - * $Revision: 1.10 $ + * $Revision: 1.11 $ */ #include @@ -67,7 +67,8 @@ } strncpy((char *) &cqr->magic, magic, 4); ASCEBC((char *) &cqr->magic, 4); - atomic_inc(&device->ref_count); + set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); + dasd_get_device(device); return cqr; } diff -Nru a/drivers/s390/char/Makefile b/drivers/s390/char/Makefile --- a/drivers/s390/char/Makefile Tue May 18 23:38:07 2004 +++ b/drivers/s390/char/Makefile Tue May 18 23:38:07 2004 @@ -4,9 +4,10 @@ obj-y += ctrlchar.o keyboard.o defkeymap.o -tub3270-objs := raw3270.o tty3270.o fs3270.o -obj-$(CONFIG_TN3270) += tub3270.o +obj-$(CONFIG_TN3270) += raw3270.o obj-$(CONFIG_TN3270_CONSOLE) += con3270.o +obj-$(CONFIG_TN3270_TTY) += tty3270.o +obj-$(CONFIG_TN3270_FS) += fs3270.o obj-$(CONFIG_TN3215) += con3215.o diff -Nru a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c --- a/drivers/s390/char/raw3270.c Tue May 18 23:38:08 2004 +++ b/drivers/s390/char/raw3270.c Tue May 18 23:38:08 2004 @@ -47,11 +47,11 @@ #define RAW3270_FLAGS_14BITADDR 0 /* 14-bit buffer addresses */ #define RAW3270_FLAGS_BUSY 1 /* Device busy, leave it alone */ #define RAW3270_FLAGS_ATTN 2 /* Device sent an ATTN interrupt */ -#define RAW3270_FLAGS_SHUTDOWN 4 /* Device is in offline processing */ +#define RAW3270_FLAGS_READY 4 /* Device is useable by views */ #define RAW3270_FLAGS_CONSOLE 8 /* Device is the console. */ -/* Lock to protect global data of raw3270 (devices, views, etc). */ -static spinlock_t raw3270_lock = SPIN_LOCK_UNLOCKED; +/* Semaphore to protect global data of raw3270 (devices, views, etc). */ +static DECLARE_MUTEX(raw3270_sem); /* List of 3270 devices. */ static struct list_head raw3270_devices = LIST_HEAD_INIT(raw3270_devices); @@ -308,7 +308,7 @@ rp = view->dev; if (!rp || rp->view != view) rc = -EACCES; - else if (test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) + else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags)) rc = -ENODEV; else rc = __raw3270_start(rp, view, rq); @@ -603,7 +603,6 @@ { static const unsigned char wbuf[] = { 0x00, 0x07, 0x01, 0xff, 0x03, 0x00, 0x81 }; - unsigned long flags; struct raw3270_ua *uap; unsigned short count; int rc; @@ -638,6 +637,8 @@ /* Wait for attention interrupt. */ #ifdef CONFIG_TN3270_CONSOLE if (raw3270_registered == 0) { + unsigned long flags; + spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); while (!test_and_clear_bit(RAW3270_FLAGS_ATTN, &rp->flags)) wait_cons_dev(); @@ -764,7 +765,7 @@ * Add device to list and find the smallest unused minor * number for it. */ - spin_lock(&raw3270_lock); + down(&raw3270_sem); /* Keep the list sorted. */ minor = 0; rp->minor = -1; @@ -781,7 +782,7 @@ rp->minor = minor; list_add_tail(&rp->list, &raw3270_devices); } - spin_unlock(&raw3270_lock); + up(&raw3270_sem); /* No free minor number? Then give up. */ if (rp->minor == -1) return -EUSERS; @@ -811,6 +812,7 @@ raw3270_reset_device(rp); raw3270_size_device(rp); raw3270_reset_device(rp); + set_bit(RAW3270_FLAGS_READY, &rp->flags); return rp; } @@ -872,7 +874,7 @@ spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); if (rp->view == view) rc = 0; - else if (test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) + else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags)) rc = -ENODEV; else { oldview = 0; @@ -921,7 +923,7 @@ list_del_init(&view->list); list_add_tail(&view->list, &rp->view_list); /* Try to activate another view. */ - if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) { + if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) { list_for_each_entry(view, &rp->view_list, list) if (view->fn->activate(view) == 0) { rp->view = view; @@ -942,13 +944,13 @@ struct raw3270 *rp; int rc; - spin_lock(&raw3270_lock); + down(&raw3270_sem); rc = -ENODEV; list_for_each_entry(rp, &raw3270_devices, list) { if (rp->minor != minor) continue; spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); - if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) { + if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) { atomic_set(&view->ref_count, 2); view->dev = rp; view->fn = fn; @@ -963,7 +965,7 @@ spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); break; } - spin_unlock(&raw3270_lock); + up(&raw3270_sem); return rc; } @@ -977,25 +979,26 @@ struct raw3270_view *view, *tmp; unsigned long flags; - spin_lock(&raw3270_lock); + down(&raw3270_sem); view = ERR_PTR(-ENODEV); list_for_each_entry(rp, &raw3270_devices, list) { if (rp->minor != minor) continue; spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); - if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) { + if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) { + view = ERR_PTR(-ENOENT); list_for_each_entry(tmp, &rp->view_list, list) { if (tmp->fn == fn) { raw3270_get_view(tmp); view = tmp; + break; } } - } else - view = ERR_PTR(-ENOENT); + } spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); break; } - spin_unlock(&raw3270_lock); + up(&raw3270_sem); return view; } @@ -1007,6 +1010,7 @@ { unsigned long flags; struct raw3270 *rp; + struct raw3270_view *nv; rp = view->dev; spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); @@ -1015,17 +1019,18 @@ rp->view = 0; } list_del_init(&view->list); - if (!rp->view && !test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) { + if (!rp->view && test_bit(RAW3270_FLAGS_READY, &rp->flags)) { /* Try to activate another view. */ - list_for_each_entry(view, &rp->view_list, list) - if (view->fn->activate(view) == 0) { - rp->view = view; + list_for_each_entry(nv, &rp->view_list, list) { + if (nv->fn->activate(view) == 0) { + rp->view = nv; break; } + } } spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); /* Wait for reference counter to drop to zero. */ - atomic_dec(&view->ref_count); + atomic_sub(2, &view->ref_count); wait_event(raw3270_wait_queue, atomic_read(&view->ref_count) == 0); if (view->fn->free) view->fn->free(view); @@ -1040,9 +1045,9 @@ struct ccw_device *cdev; /* Remove from device chain. */ - spin_lock(&raw3270_lock); + down(&raw3270_sem); list_del_init(&rp->list); - spin_unlock(&raw3270_lock); + up(&raw3270_sem); /* Disconnect from ccw_device. */ cdev = rp->cdev; @@ -1109,8 +1114,48 @@ sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group); } -/* Hackish. A notifier chain would be cleaner. */ -extern void tty3270_notifier(int index, int active); +/* + * Notifier for device addition/removal + */ +struct raw3270_notifier { + struct list_head list; + void (*notifier)(int, int); +}; + +static struct list_head raw3270_notifier = LIST_HEAD_INIT(raw3270_notifier); + +int raw3270_register_notifier(void (*notifier)(int, int)) +{ + struct raw3270_notifier *np; + struct raw3270 *rp; + + np = kmalloc(sizeof(struct raw3270_notifier), GFP_KERNEL); + if (!np) + return -ENOMEM; + np->notifier = notifier; + down(&raw3270_sem); + list_add_tail(&np->list, &raw3270_notifier); + list_for_each_entry(rp, &raw3270_devices, list) { + get_device(&rp->cdev->dev); + notifier(rp->minor, 1); + } + up(&raw3270_sem); + return 0; +} + +void raw3270_unregister_notifier(void (*notifier)(int, int)) +{ + struct raw3270_notifier *np; + + down(&raw3270_sem); + list_for_each_entry(np, &raw3270_notifier, list) + if (np->notifier == notifier) { + list_del(&np->list); + kfree(np); + break; + } + up(&raw3270_sem); +} /* * Set 3270 device online. @@ -1119,6 +1164,7 @@ raw3270_set_online (struct ccw_device *cdev) { struct raw3270 *rp; + struct raw3270_notifier *np; rp = raw3270_create_device(cdev); if (IS_ERR(rp)) @@ -1127,7 +1173,11 @@ raw3270_size_device(rp); raw3270_reset_device(rp); raw3270_create_attributes(rp); - tty3270_notifier(rp->minor, 1); + set_bit(RAW3270_FLAGS_READY, &rp->flags); + down(&raw3270_sem); + list_for_each_entry(np, &raw3270_notifier, list) + np->notifier(rp->minor, 1); + up(&raw3270_sem); return 0; } @@ -1140,9 +1190,10 @@ unsigned long flags; struct raw3270 *rp; struct raw3270_view *v; + struct raw3270_notifier *np; rp = cdev->dev.driver_data; - set_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags); + clear_bit(RAW3270_FLAGS_READY, &rp->flags); sysfs_remove_group(&cdev->dev.kobj, &raw3270_attr_group); @@ -1162,7 +1213,10 @@ } spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags); - tty3270_notifier(rp->minor, 0); + down(&raw3270_sem); + list_for_each_entry(np, &raw3270_notifier, list) + np->notifier(rp->minor, 0); + up(&raw3270_sem); /* Reset 3270 device. */ raw3270_reset_device(rp); @@ -1210,7 +1264,7 @@ .set_offline = &raw3270_set_offline, }; -int +static int raw3270_init(void) { struct raw3270 *rp; @@ -1222,18 +1276,17 @@ rc = ccw_driver_register(&raw3270_ccw_driver); if (rc == 0) { /* Create attributes for early (= console) device. */ - spin_lock(&raw3270_lock); + down(&raw3270_sem); list_for_each_entry(rp, &raw3270_devices, list) { get_device(&rp->cdev->dev); raw3270_create_attributes(rp); - tty3270_notifier(rp->minor, 1); } - spin_unlock(&raw3270_lock); + up(&raw3270_sem); } return rc; } -void +static void raw3270_exit(void) { ccw_driver_unregister(&raw3270_ccw_driver); @@ -1241,8 +1294,9 @@ MODULE_LICENSE("GPL"); -EXPORT_SYMBOL(raw3270_init); -EXPORT_SYMBOL(raw3270_exit); +module_init(raw3270_init); +module_exit(raw3270_exit); + EXPORT_SYMBOL(raw3270_request_alloc); EXPORT_SYMBOL(raw3270_request_free); EXPORT_SYMBOL(raw3270_request_reset); @@ -1258,3 +1312,6 @@ EXPORT_SYMBOL(raw3270_deactivate_view); EXPORT_SYMBOL(raw3270_start); EXPORT_SYMBOL(raw3270_start_irq); +EXPORT_SYMBOL(raw3270_register_notifier); +EXPORT_SYMBOL(raw3270_unregister_notifier); +EXPORT_SYMBOL(raw3270_wait_queue); diff -Nru a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h --- a/drivers/s390/char/raw3270.h Tue May 18 23:38:08 2004 +++ b/drivers/s390/char/raw3270.h Tue May 18 23:38:08 2004 @@ -78,9 +78,6 @@ #define RAW3270_MAXDEVS 256 -int raw3270_init(void); -void raw3270_exit(void); - /* For TUBGETMOD and TUBSETMOD. Should include. */ struct raw3270_iocb { short model; @@ -189,6 +186,10 @@ struct raw3270 *raw3270_setup_console(struct ccw_device *cdev); void raw3270_wait_cons_dev(struct raw3270 *); + +/* Notifier for device addition/removal */ +int raw3270_register_notifier(void (*notifier)(int, int)); +void raw3270_unregister_notifier(void (*notifier)(int, int)); /* * Little memory allocator for string objects. diff -Nru a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c --- a/drivers/s390/char/tty3270.c Tue May 18 23:38:06 2004 +++ b/drivers/s390/char/tty3270.c Tue May 18 23:38:06 2004 @@ -35,6 +35,7 @@ #define TTY3270_STRING_PAGES 5 struct tty_driver *tty3270_driver; +static int tty3270_max_index; struct raw3270_fn tty3270_fn; @@ -836,6 +837,22 @@ tty3270_free_view((struct tty3270 *) view); } +/* + * Delayed freeing of tty3270 views. + */ +static void +tty3270_del_views(void) +{ + struct tty3270 *tp; + int i; + + for (i = 0; i < tty3270_max_index; i++) { + tp = (struct tty3270 *) raw3270_find_view(&tty3270_fn, i); + if (!IS_ERR(tp)) + raw3270_del_view(&tp->view); + } +} + struct raw3270_fn tty3270_fn = { .activate = tty3270_activate, .deactivate = tty3270_deactivate, @@ -867,6 +884,12 @@ tp->inattr = TF_INPUT; return 0; } + if (tty3270_max_index < tty->index + 1) + tty3270_max_index = tty->index + 1; + + /* Quick exit if there is no device for tty->index. */ + if (PTR_ERR(tp) == -ENODEV) + return -ENODEV; /* Allocate tty3270 structure on first open. */ tp = tty3270_alloc_view(); @@ -1778,9 +1801,6 @@ struct tty_driver *driver; int ret; - ret = raw3270_init(); - if (ret) - return ret; driver = alloc_tty_driver(256); if (!driver) return -ENOMEM; @@ -1807,6 +1827,14 @@ return ret; } tty3270_driver = driver; + ret = raw3270_register_notifier(tty3270_notifier); + if (ret) { + printk(KERN_ERR "tty3270 notifier registration failed " + "with %d\n", ret); + put_tty_driver(driver); + return ret; + + } return 0; } @@ -1815,10 +1843,11 @@ { struct tty_driver *driver; + raw3270_unregister_notifier(tty3270_notifier); driver = tty3270_driver; tty3270_driver = 0; tty_unregister_driver(driver); - raw3270_exit(); + tty3270_del_views(); } MODULE_LICENSE("GPL"); diff -Nru a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c --- a/drivers/s390/cio/css.c Tue May 18 23:38:05 2004 +++ b/drivers/s390/cio/css.c Tue May 18 23:38:05 2004 @@ -1,7 +1,7 @@ /* * drivers/s390/cio/css.c * driver for channel subsystem - * $Revision: 1.73 $ + * $Revision: 1.74 $ * * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -218,12 +218,21 @@ * We don't notify the driver since we have to throw the device * away in any case. */ - device_unregister(&sch->dev); - /* Reset intparm to zeroes. */ - sch->schib.pmcw.intparm = 0; - cio_modify(sch); - put_device(&sch->dev); - ret = css_probe_device(irq); + if (!disc) { + device_unregister(&sch->dev); + /* Reset intparm to zeroes. */ + sch->schib.pmcw.intparm = 0; + cio_modify(sch); + put_device(&sch->dev); + ret = css_probe_device(irq); + } else { + /* + * We can't immediately deregister the disconnected + * device since it might block. + */ + device_trigger_reprobe(sch); + ret = 0; + } break; case CIO_OPER: if (disc) diff -Nru a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c --- a/drivers/s390/cio/device.c Tue May 18 23:38:08 2004 +++ b/drivers/s390/cio/device.c Tue May 18 23:38:08 2004 @@ -1,7 +1,7 @@ /* * drivers/s390/cio/device.c * bus driver for ccw devices - * $Revision: 1.115 $ + * $Revision: 1.117 $ * * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -26,6 +26,7 @@ #include "cio.h" #include "css.h" #include "device.h" +#include "ioasm.h" /******************* bus type handling ***********************/ @@ -499,20 +500,93 @@ return ret; } -void -ccw_device_do_unreg_rereg(void *data) +static struct ccw_device * +get_disc_ccwdev_by_devno(unsigned int devno, struct ccw_device *sibling) { + struct ccw_device *cdev; + struct list_head *entry; struct device *dev; - dev = (struct device *)data; - device_remove_files(dev); - device_del(dev); - if (device_add(dev)) { + if (!get_bus(&ccw_bus_type)) + return NULL; + down_read(&ccw_bus_type.subsys.rwsem); + cdev = NULL; + list_for_each(entry, &ccw_bus_type.devices.list) { + dev = get_device(container_of(entry, + struct device, bus_list)); + if (!dev) + continue; + cdev = to_ccwdev(dev); + if ((cdev->private->state == DEV_STATE_DISCONNECTED) && + (cdev->private->devno == devno) && + (!strncmp(cdev->dev.bus_id, sibling->dev.bus_id, 4))) { + cdev->private->state = DEV_STATE_NOT_OPER; + break; + } put_device(dev); + cdev = NULL; + } + up_read(&ccw_bus_type.subsys.rwsem); + put_bus(&ccw_bus_type); + + return cdev; +} + +void +ccw_device_do_unreg_rereg(void *data) +{ + struct ccw_device *cdev; + struct subchannel *sch; + int need_rename; + + cdev = (struct ccw_device *)data; + sch = to_subchannel(cdev->dev.parent); + if (cdev->private->devno != sch->schib.pmcw.dev) { + /* + * The device number has changed. This is usually only when + * a device has been detached under VM and then re-appeared + * on another subchannel because of a different attachment + * order than before. Ideally, we should should just switch + * subchannels, but unfortunately, this is not possible with + * the current implementation. + * Instead, we search for the old subchannel for this device + * number and deregister so there are no collisions with the + * newly registered ccw_device. + * FIXME: Find another solution so the block layer doesn't + * get possibly sick... + */ + struct ccw_device *other_cdev; + + need_rename = 1; + other_cdev = get_disc_ccwdev_by_devno(sch->schib.pmcw.dev, + cdev); + if (other_cdev) { + struct subchannel *other_sch; + + other_sch = to_subchannel(other_cdev->dev.parent); + if (get_device(&other_sch->dev)) { + stsch(other_sch->irq, &other_sch->schib); + if (other_sch->schib.pmcw.dnv) { + other_sch->schib.pmcw.intparm = 0; + cio_modify(other_sch); + } + device_unregister(&other_sch->dev); + } + } + cdev->private->devno = sch->schib.pmcw.dev; + } else + need_rename = 0; + device_remove_files(&cdev->dev); + device_del(&cdev->dev); + if (need_rename) + snprintf (cdev->dev.bus_id, BUS_ID_SIZE, "0.0.%04x", + sch->schib.pmcw.dev); + if (device_add(&cdev->dev)) { + put_device(&cdev->dev); return; } - if (device_add_files(dev)) - device_unregister(dev); + if (device_add_files(&cdev->dev)) + device_unregister(&cdev->dev); } static void diff -Nru a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c --- a/drivers/s390/cio/device_fsm.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/cio/device_fsm.c Tue May 18 23:38:07 2004 @@ -152,14 +152,15 @@ /* * Check if cu type and device type still match. If * not, it is certainly another device and we have to - * de- and re-register. + * de- and re-register. Also check here for non-matching devno. */ if (cdev->id.cu_type != cdev->private->senseid.cu_type || cdev->id.cu_model != cdev->private->senseid.cu_model || cdev->id.dev_type != cdev->private->senseid.dev_type || - cdev->id.dev_model != cdev->private->senseid.dev_model) { + cdev->id.dev_model != cdev->private->senseid.dev_model || + cdev->private->devno != sch->schib.pmcw.dev) { PREPARE_WORK(&cdev->private->kick_work, - ccw_device_do_unreg_rereg, (void *)&cdev->dev); + ccw_device_do_unreg_rereg, (void *)cdev); queue_work(ccw_device_work, &cdev->private->kick_work); return; } @@ -295,7 +296,7 @@ sch->driver->notify(&sch->dev, CIO_OPER) : 0; if (!ret) /* Driver doesn't want device back. */ - ccw_device_do_unreg_rereg((void *)&cdev->dev); + ccw_device_do_unreg_rereg((void *)cdev); else wake_up(&cdev->private->wait_q); } @@ -476,6 +477,8 @@ { cdev->private->flags.doverify = 0; switch (err) { + case -EOPNOTSUPP: /* path grouping not supported, just set online. */ + cdev->private->options.pgroup = 0; case 0: ccw_device_done(cdev, DEV_STATE_ONLINE); break; diff -Nru a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c --- a/drivers/s390/cio/device_pgid.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/cio/device_pgid.c Tue May 18 23:38:07 2004 @@ -338,6 +338,10 @@ * One of those strange devices which claim to be able * to do multipathing but not for Set Path Group ID. */ + if (cdev->private->flags.pgid_single) { + ccw_device_verify_done(cdev, -EOPNOTSUPP); + break; + } cdev->private->flags.pgid_single = 1; /* fall through. */ case -EAGAIN: /* Try again. */ diff -Nru a/drivers/s390/net/iucv.c b/drivers/s390/net/iucv.c --- a/drivers/s390/net/iucv.c Tue May 18 23:38:05 2004 +++ b/drivers/s390/net/iucv.c Tue May 18 23:38:05 2004 @@ -1,5 +1,5 @@ /* - * $Id: iucv.c,v 1.28 2004/04/15 06:34:58 braunu Exp $ + * $Id: iucv.c,v 1.30 2004/05/13 09:21:23 braunu Exp $ * * IUCV network driver * @@ -29,7 +29,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.28 $ + * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.30 $ * */ @@ -98,7 +98,7 @@ __u8 res3[24]; } iucv_GeneralInterrupt; -static iucv_GeneralInterrupt *iucv_external_int_buffer; +static iucv_GeneralInterrupt *iucv_external_int_buffer = NULL; /* Spin Lock declaration */ @@ -351,7 +351,7 @@ static void iucv_banner(void) { - char vbuf[] = "$Revision: 1.28 $"; + char vbuf[] = "$Revision: 1.30 $"; char *version = vbuf; if ((version = strchr(version, ':'))) { @@ -403,6 +403,7 @@ "%s: Could not allocate external interrupt buffer\n", __FUNCTION__); s390_root_dev_unregister(iucv_root); + bus_unregister(&iucv_bus); return -ENOMEM; } memset(iucv_external_int_buffer, 0, sizeof(iucv_GeneralInterrupt)); @@ -416,6 +417,7 @@ kfree(iucv_external_int_buffer); iucv_external_int_buffer = NULL; s390_root_dev_unregister(iucv_root); + bus_unregister(&iucv_bus); return -ENOMEM; } memset(iucv_param_pool, 0, sizeof(iucv_param) * PARAM_POOL_SIZE); @@ -441,10 +443,14 @@ iucv_exit(void) { iucv_retrieve_buffer(); - if (iucv_external_int_buffer) + if (iucv_external_int_buffer) { kfree(iucv_external_int_buffer); - if (iucv_param_pool) + iucv_external_int_buffer = NULL; + } + if (iucv_param_pool) { kfree(iucv_param_pool); + iucv_param_pool = NULL; + } s390_root_dev_unregister(iucv_root); bus_unregister(&iucv_bus); printk(KERN_INFO "IUCV lowlevel driver unloaded\n"); diff -Nru a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c --- a/drivers/s390/net/lcs.c Tue May 18 23:38:05 2004 +++ b/drivers/s390/net/lcs.c Tue May 18 23:38:05 2004 @@ -11,7 +11,7 @@ * Frank Pavlic (pavlic@de.ibm.com) and * Martin Schwidefsky * - * $Revision: 1.74 $ $Date: 2004/04/05 00:01:04 $ + * $Revision: 1.80 $ $Date: 2004/05/13 08:22:06 $ * * 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 @@ -58,7 +58,7 @@ /** * initialization string for output */ -#define VERSION_LCS_C "$Revision: 1.74 $" +#define VERSION_LCS_C "$Revision: 1.80 $" static char version[] __initdata = "LCS driver ("VERSION_LCS_C "/" VERSION_LCS_H ")"; static char debug_buffer[255]; @@ -99,9 +99,9 @@ return -ENOMEM; } debug_register_view(lcs_dbf_setup, &debug_hex_ascii_view); - debug_set_level(lcs_dbf_setup, 5); + debug_set_level(lcs_dbf_setup, 2); debug_register_view(lcs_dbf_trace, &debug_hex_ascii_view); - debug_set_level(lcs_dbf_trace, 5); + debug_set_level(lcs_dbf_trace, 2); return 0; } @@ -338,6 +338,7 @@ (void *)lcs_start_kernel_thread,card); card->thread_mask = 0; spin_lock_init(&card->lock); + spin_lock_init(&card->ipm_lock); #ifdef CONFIG_IP_MULTICAST INIT_LIST_HEAD(&card->ipm_list); #endif @@ -935,18 +936,14 @@ /** * set or del multicast address on LCS card */ -static int -lcs_fix_multicast_list(void *data) +static void +lcs_fix_multicast_list(struct lcs_card *card) { struct list_head *l, *n; struct lcs_ipm_list *ipm; - struct lcs_card *card; - card = (struct lcs_card *) data; - - daemonize("fixipm"); LCS_DBF_TEXT(4,trace, "fixipm"); - spin_lock(&card->lock); + spin_lock(&card->ipm_lock); list_for_each_safe(l, n, &card->ipm_list) { ipm = list_entry(l, struct lcs_ipm_list, list); switch (ipm->ipm_state) { @@ -968,8 +965,7 @@ } if (card->state == DEV_STATE_UP) netif_wake_queue(card->dev); - spin_unlock(&card->lock); - return 0; + spin_unlock(&card->ipm_lock); } /** @@ -988,28 +984,30 @@ /** * function called by net device to handle multicast address relevant things */ -static void -lcs_set_multicast_list(struct net_device *dev) +static int +lcs_register_mc_addresses(void *data) { + struct lcs_card *card; char buf[MAX_ADDR_LEN]; struct list_head *l; struct ip_mc_list *im4; struct in_device *in4_dev; struct lcs_ipm_list *ipm, *tmp; - struct lcs_card *card; - LCS_DBF_TEXT(4, trace, "setmulti"); - in4_dev = in_dev_get(dev); + daemonize("regipm"); + LCS_DBF_TEXT(4, trace, "regmulti"); + + card = (struct lcs_card *) data; + in4_dev = in_dev_get(card->dev); if (in4_dev == NULL) - return; + return 0; read_lock(&in4_dev->lock); - card = (struct lcs_card *) dev->priv; - spin_lock(&card->lock); + spin_lock(&card->ipm_lock); /* Check for multicast addresses to be removed. */ list_for_each(l, &card->ipm_list) { ipm = list_entry(l, struct lcs_ipm_list, list); for (im4 = in4_dev->mc_list; im4 != NULL; im4 = im4->next) { - lcs_get_mac_for_ipm(im4->multiaddr, buf, dev); + lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev); if (memcmp(buf, &ipm->ipm.mac_addr, LCS_MAC_LENGTH) == 0 && ipm->ipm.ip_addr == im4->multiaddr) @@ -1020,7 +1018,7 @@ } /* Check for multicast addresses to be added. */ for (im4 = in4_dev->mc_list; im4; im4 = im4->next) { - lcs_get_mac_for_ipm(im4->multiaddr, buf, dev); + lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev); ipm = NULL; list_for_each(l, &card->ipm_list) { tmp = list_entry(l, struct lcs_ipm_list, list); @@ -1046,14 +1044,56 @@ ipm->ipm_state = LCS_IPM_STATE_SET_REQUIRED; list_add(&ipm->list, &card->ipm_list); } - spin_unlock(&card->lock); + spin_unlock(&card->ipm_lock); read_unlock(&in4_dev->lock); - set_bit(3, &card->thread_mask); - schedule_work(&card->kernel_thread_starter); + lcs_fix_multicast_list(card); + in_dev_put(in4_dev); + return 0; +} +/** + * function called by net device to + * handle multicast address relevant things + */ +static void +lcs_set_multicast_list(struct net_device *dev) +{ + struct lcs_card *card; + + LCS_DBF_TEXT(4, trace, "setmulti"); + card = (struct lcs_card *) dev->priv; + set_bit(3, &card->thread_mask); + schedule_work(&card->kernel_thread_starter); } #endif /* CONFIG_IP_MULTICAST */ +static long +lcs_check_irb_error(struct ccw_device *cdev, struct irb *irb) +{ + if (!IS_ERR(irb)) + return 0; + + switch (PTR_ERR(irb)) { + case -EIO: + PRINT_WARN("i/o-error on device %s\n", cdev->dev.bus_id); + LCS_DBF_TEXT(2, trace, "ckirberr"); + LCS_DBF_TEXT_(2, trace, " rc%d", -EIO); + break; + case -ETIMEDOUT: + PRINT_WARN("timeout on device %s\n", cdev->dev.bus_id); + LCS_DBF_TEXT(2, trace, "ckirberr"); + LCS_DBF_TEXT_(2, trace, " rc%d", -ETIMEDOUT); + break; + default: + PRINT_WARN("unknown error %ld on device %s\n", PTR_ERR(irb), + cdev->dev.bus_id); + LCS_DBF_TEXT(2, trace, "ckirberr"); + LCS_DBF_TEXT(2, trace, " rc???"); + } + return PTR_ERR(irb); +} + + /** * IRQ Handler for LCS channels */ @@ -1064,6 +1104,9 @@ struct lcs_channel *channel; int index; + if (lcs_check_irb_error(cdev, irb)) + return; + card = CARD_FROM_DEV(cdev); if (card->read.ccwdev == cdev) channel = &card->read; @@ -1513,7 +1556,7 @@ kernel_thread(lcs_lgw_stoplan_thread, (void *) card, SIGCHLD); #ifdef CONFIG_IP_MULTICAST if (test_and_clear_bit(3, &card->thread_mask)) - kernel_thread(lcs_fix_multicast_list, (void *) card, SIGCHLD); + kernel_thread(lcs_register_mc_addresses, (void *) card, SIGCHLD); #endif } @@ -1903,7 +1946,7 @@ goto out; memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH); #ifdef CONFIG_IP_MULTICAST - if (lcs_check_multicast_support(card)) + if (!lcs_check_multicast_support(card)) card->dev->set_multicast_list = lcs_set_multicast_list; #endif netif_stop_queue(card->dev); diff -Nru a/drivers/s390/net/lcs.h b/drivers/s390/net/lcs.h --- a/drivers/s390/net/lcs.h Tue May 18 23:38:08 2004 +++ b/drivers/s390/net/lcs.h Tue May 18 23:38:08 2004 @@ -6,7 +6,7 @@ #include #include -#define VERSION_LCS_H "$Revision: 1.15 $" +#define VERSION_LCS_H "$Revision: 1.16 $" #define LCS_DBF_TEXT(level, name, text) \ do { \ @@ -273,6 +273,7 @@ */ struct lcs_card { spinlock_t lock; + spinlock_t ipm_lock; enum lcs_dev_states state; struct net_device *dev; struct net_device_stats stats; diff -Nru a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c --- a/drivers/s390/net/netiucv.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/net/netiucv.c Tue May 18 23:38:07 2004 @@ -1,5 +1,5 @@ /* - * $Id: netiucv.c,v 1.51 2004/04/23 08:11:21 mschwide Exp $ + * $Id: netiucv.c,v 1.53 2004/05/07 14:29:37 mschwide Exp $ * * IUCV network driver * @@ -30,7 +30,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * RELEASE-TAG: IUCV network driver $Revision: 1.51 $ + * RELEASE-TAG: IUCV network driver $Revision: 1.53 $ * */ @@ -60,6 +60,7 @@ #include #include #include +#include #include "iucv.h" #include "fsm.h" @@ -113,9 +114,6 @@ */ static struct iucv_connection *connections; -/* Keep track of interfaces. */ -static int ifno; - /** * Representation of event-data for the * connection state machine. @@ -549,7 +547,7 @@ iucv_MessagePending *eib = (iucv_MessagePending *)ev->data; struct netiucv_priv *privptr = (struct netiucv_priv *)conn->netdev->priv; - __u16 msglen = eib->ln1msg2.ipbfln1f; + __u32 msglen = eib->ln1msg2.ipbfln1f; int rc; pr_debug("%s() called\n", __FUNCTION__); @@ -571,6 +569,7 @@ conn->rx_buff->data, msglen, NULL, NULL, NULL); if (rc != 0 || msglen < 5) { privptr->stats.rx_errors++; + printk(KERN_INFO "iucv_receive returned %08x\n", rc); return; } netiucv_unpack_skb(conn, conn->rx_buff); @@ -647,7 +646,7 @@ fsm_newstate(fi, CONN_STATE_IDLE); if (privptr) privptr->stats.tx_errors += txpackets; - printk(KERN_DEBUG "iucv_send returned %08x\n", + printk(KERN_INFO "iucv_send returned %08x\n", rc); } else { if (privptr) { @@ -770,7 +769,7 @@ struct iucv_event *ev = (struct iucv_event *)arg; struct iucv_connection *conn = ev->conn; __u16 msglimit; - int rc; + int rc, len; __u8 iucvMagic[16] = { 0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 @@ -778,7 +777,10 @@ pr_debug("%s() called\n", __FUNCTION__); - memcpy(iucvMagic, conn->netdev->name, IFNAMSIZ); + len = (IFNAMSIZ < sizeof(conn->netdev->name)) ? + IFNAMSIZ : sizeof(conn->netdev->name); + memcpy(iucvMagic, conn->netdev->name, len); + ASCEBC (iucvMagic, len); if (conn->handle == 0) { conn->handle = iucv_register_program(iucvMagic, conn->userid, mask, @@ -992,6 +994,7 @@ dev_action_connup(fsm_instance *fi, int event, void *arg) { struct net_device *dev = (struct net_device *)arg; + struct netiucv_priv *privptr = dev->priv; pr_debug("%s() called\n", __FUNCTION__); @@ -999,8 +1002,8 @@ case DEV_STATE_STARTWAIT: fsm_newstate(fi, DEV_STATE_RUNNING); printk(KERN_INFO - "%s: connected with remote side\n", - dev->name); + "%s: connected with remote side %s\n", + dev->name, privptr->conn->userid); break; case DEV_STATE_STOPWAIT: printk(KERN_INFO @@ -1140,7 +1143,7 @@ skb_pull(skb, NETIUCV_HDRLEN); skb_trim(skb, skb->len - NETIUCV_HDRLEN); } - printk(KERN_DEBUG "iucv_send returned %08x\n", + printk(KERN_INFO "iucv_send returned %08x\n", rc); } else { if (copied) @@ -1612,7 +1615,7 @@ } static int -netiucv_register_device(struct net_device *ndev, int ifno) +netiucv_register_device(struct net_device *ndev) { struct netiucv_priv *priv = ndev->priv; struct device *dev = kmalloc(sizeof(struct device), GFP_KERNEL); @@ -1623,7 +1626,7 @@ if (dev) { memset(dev, 0, sizeof(struct device)); - snprintf(dev->bus_id, BUS_ID_SIZE, "netiucv%x", ifno); + snprintf(dev->bus_id, BUS_ID_SIZE, "net%s", ndev->name); dev->bus = &iucv_bus; dev->parent = iucv_root; /* @@ -1801,16 +1804,15 @@ * Allocate and initialize everything of a net device. */ static struct net_device * -netiucv_init_netdevice(int ifno, char *username) +netiucv_init_netdevice(char *username) { struct netiucv_priv *privptr; struct net_device *dev; - dev = alloc_netdev(sizeof(struct netiucv_priv), "", + dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d", netiucv_setup_netdevice); if (!dev) return NULL; - sprintf(dev->name, "iucv%d", ifno); privptr = (struct netiucv_priv *)dev->priv; privptr->fsm = init_fsm("netiucvdev", dev_state_names, @@ -1861,7 +1863,7 @@ while (i<9) username[i++] = ' '; username[9] = '\0'; - dev = netiucv_init_netdevice(ifno, username); + dev = netiucv_init_netdevice(username); if (!dev) { printk(KERN_WARNING "netiucv: Could not allocate network device structure " @@ -1869,16 +1871,18 @@ return -ENODEV; } - if ((ret = netiucv_register_device(dev, ifno))) - goto out_free_ndev; - /* sysfs magic */ - SET_NETDEV_DEV(dev, (struct device*)((struct netiucv_priv*)dev->priv)->dev); if ((ret = register_netdev(dev))) { - netiucv_unregister_device((struct device*)((struct netiucv_priv*)dev->priv)->dev); goto out_free_ndev; } + + if ((ret = netiucv_register_device(dev))) { + unregister_netdev(dev); + goto out_free_ndev; + } + + /* sysfs magic */ + SET_NETDEV_DEV(dev, (struct device*)((struct netiucv_priv*)dev->priv)->dev); printk(KERN_INFO "%s: '%s'\n", dev->name, netiucv_printname(username)); - ifno++; return count; @@ -1891,6 +1895,61 @@ DRIVER_ATTR(connection, 0200, NULL, conn_write); +static ssize_t +remove_write (struct device_driver *drv, const char *buf, size_t count) +{ + struct iucv_connection **clist = &connections; + struct net_device *ndev; + struct netiucv_priv *priv; + struct device *dev; + char name[IFNAMSIZ]; + char *p; + int i; + + pr_debug("%s() called\n", __FUNCTION__); + + if (count >= IFNAMSIZ) + count = IFNAMSIZ-1; + + for (i=0, p=(char *)buf; inetdev; + priv = (struct netiucv_priv*)ndev->priv; + dev = priv->dev; + + if (strncmp(name, ndev->name, count)) { + clist = &((*clist)->next); + continue; + } + if (ndev->flags & (IFF_UP | IFF_RUNNING)) { + printk(KERN_WARNING + "netiucv: net device %s active with peer %s\n", + ndev->name, priv->conn->userid); + printk(KERN_WARNING + "netiucv: %s cannot be removed\n", + ndev->name); + return -EBUSY; + } + unregister_netdev(ndev); + netiucv_unregister_device(dev); + return count; + } + printk(KERN_WARNING + "netiucv: net device %s unknown\n", name); + return -EINVAL; +} + +DRIVER_ATTR(remove, 0200, NULL, remove_write); + static struct device_driver netiucv_driver = { .name = "netiucv", .bus = &iucv_bus, @@ -1899,7 +1958,7 @@ static void netiucv_banner(void) { - char vbuf[] = "$Revision: 1.51 $"; + char vbuf[] = "$Revision: 1.53 $"; char *version = vbuf; if ((version = strchr(version, ':'))) { @@ -1924,6 +1983,7 @@ } driver_remove_file(&netiucv_driver, &driver_attr_connection); + driver_remove_file(&netiucv_driver, &driver_attr_remove); driver_unregister(&netiucv_driver); printk(KERN_INFO "NETIUCV driver unloaded\n"); @@ -1943,10 +2003,10 @@ /* Add entry for specifying connections. */ ret = driver_create_file(&netiucv_driver, &driver_attr_connection); - - if (ret == 0) + if (ret == 0) { + ret = driver_create_file(&netiucv_driver, &driver_attr_remove); netiucv_banner(); - else { + } else { printk(KERN_ERR "NETIUCV: failed to add driver attribute.\n"); driver_unregister(&netiucv_driver); } diff -Nru a/drivers/s390/net/qeth.h b/drivers/s390/net/qeth.h --- a/drivers/s390/net/qeth.h Tue May 18 23:38:05 2004 +++ b/drivers/s390/net/qeth.h Tue May 18 23:38:05 2004 @@ -23,7 +23,7 @@ #include "qeth_mpc.h" -#define VERSION_QETH_H "$Revision: 1.102 $" +#define VERSION_QETH_H "$Revision: 1.107 $" #ifdef CONFIG_QETH_IPV6 #define QETH_VERSION_IPV6 ":IPv6" @@ -186,6 +186,8 @@ __u64 outbound_start_time; unsigned int outbound_cnt; unsigned int outbound_time; + unsigned int inbound_do_qdio; + unsigned int outbound_do_qdio; }; #endif /* CONFIG_QETH_PERF_STATS */ @@ -279,7 +281,7 @@ #define QETH_IN_BUF_COUNT_MAX 128 #define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12) #define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \ - ((card)->qdio.in_buf_pool.buf_count / 4) + ((card)->qdio.in_buf_pool.buf_count / 2) /* buffers we have to be behind before we get a PCI */ #define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1) @@ -606,6 +608,7 @@ wait_queue_head_t wait_q; int (*callback)(struct qeth_card *,struct qeth_reply *,unsigned long); int seqno; + unsigned long offset; int received; int rc; void *param; @@ -613,8 +616,10 @@ atomic_t refcnt; }; -struct qeth_card_info { +#define QETH_BROADCAST_WITH_ECHO 1 +#define QETH_BROADCAST_WITHOUT_ECHO 2 +struct qeth_card_info { char if_name[IF_NAME_LEN]; unsigned short unit_addr2; unsigned short cula; @@ -646,7 +651,6 @@ enum qeth_checksum_types checksum_type; int broadcast_mode; int macaddr_mode; - int enable_takeover; int fake_broadcast; int add_hhlen; int fake_ll; diff -Nru a/drivers/s390/net/qeth_fs.h b/drivers/s390/net/qeth_fs.h --- a/drivers/s390/net/qeth_fs.h Tue May 18 23:38:06 2004 +++ b/drivers/s390/net/qeth_fs.h Tue May 18 23:38:06 2004 @@ -12,6 +12,11 @@ #ifndef __QETH_FS_H__ #define __QETH_FS_H__ +#define VERSION_QETH_FS_H "$Revision: 1.8 $" + +extern const char *VERSION_QETH_PROC_C; +extern const char *VERSION_QETH_SYS_C; + #ifdef CONFIG_PROC_FS extern int qeth_create_procfs_entries(void); diff -Nru a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c --- a/drivers/s390/net/qeth_main.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/net/qeth_main.c Tue May 18 23:38:07 2004 @@ -1,6 +1,6 @@ /* * - * linux/drivers/s390/net/qeth_main.c ($Revision: 1.89 $) + * linux/drivers/s390/net/qeth_main.c ($Revision: 1.107 $) * * Linux on zSeries OSA Express and HiperSockets support * @@ -12,7 +12,7 @@ * Frank Pavlic (pavlic@de.ibm.com) and * Thomas Spatzier * - * $Revision: 1.89 $ $Date: 2004/04/27 16:27:26 $ + * $Revision: 1.107 $ $Date: 2004/05/13 16:07:59 $ * * 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 @@ -78,10 +78,9 @@ #include "qeth_mpc.h" #include "qeth_fs.h" -#define VERSION_QETH_C "$Revision: 1.89 $" -static const char *version = "qeth S/390 OSA-Express driver (" - VERSION_QETH_C "/" VERSION_QETH_H "/" VERSION_QETH_MPC_H - QETH_VERSION_IPV6 QETH_VERSION_VLAN ")"; +#define VERSION_QETH_C "$Revision: 1.107 $" +static const char *version = "qeth S/390 OSA-Express driver"; + /** * Debug Facility Stuff */ @@ -105,8 +104,6 @@ static void qeth_send_control_data_cb(struct qeth_channel *, struct qeth_cmd_buffer *); -static atomic_t qeth_hsi_count; - /** * here we go with function implementation */ @@ -154,6 +151,10 @@ static int qeth_set_online(struct ccwgroup_device *); + +static struct qeth_ipaddr * +qeth_get_addr_buffer(enum qeth_prot_versions); + /** * free channel command buffers */ @@ -478,8 +479,6 @@ card->use_hard_stop = 1; qeth_set_offline(cgdev); } - if (card->info.type == QETH_CARD_TYPE_IQD) - atomic_dec(&qeth_hsi_count); /* remove form our internal list */ write_lock_irqsave(&qeth_card_list.rwlock, flags); list_del(&card->list); @@ -700,7 +699,7 @@ qeth_set_ip_addr_list(struct qeth_card *card) { struct list_head failed_todos; - struct qeth_ipaddr *todo, *addr, *tmp; + struct qeth_ipaddr *todo, *addr; unsigned long flags; int rc; @@ -709,9 +708,10 @@ INIT_LIST_HEAD(&failed_todos); -process_todos: spin_lock_irqsave(&card->ip_lock, flags); - list_for_each_entry_safe(todo, tmp, &card->ip_tbd_list, entry) { + while (!list_empty(&card->ip_tbd_list)) { + todo = list_entry(card->ip_tbd_list.next, + struct qeth_ipaddr, entry); list_del_init(&todo->entry); rc = __qeth_ref_ip_on_card(card, todo, &addr); if (rc == 0) { @@ -721,28 +721,24 @@ /* new entry to be added to on-card list */ spin_unlock_irqrestore(&card->ip_lock, flags); rc = qeth_register_addr_entry(card, todo); - if (!rc){ - spin_lock_irqsave(&card->ip_lock, flags); + spin_lock_irqsave(&card->ip_lock, flags); + if (!rc) list_add_tail(&todo->entry, &card->ip_list); - spin_unlock_irqrestore(&card->ip_lock, flags); - } else + else list_add_tail(&todo->entry, &failed_todos); - goto process_todos; } else if (rc == -1) { /* on-card entry to be removed */ list_del_init(&addr->entry); spin_unlock_irqrestore(&card->ip_lock, flags); rc = qeth_deregister_addr_entry(card, addr); + spin_lock_irqsave(&card->ip_lock, flags); if (!rc) { kfree(addr); kfree(todo); } else { - spin_lock_irqsave(&card->ip_lock, flags); list_add_tail(&addr->entry, &card->ip_list); list_add_tail(&todo->entry, &failed_todos); - spin_unlock_irqrestore(&card->ip_lock, flags); } - goto process_todos; } } spin_unlock_irqrestore(&card->ip_lock, flags); @@ -937,7 +933,6 @@ card->options.checksum_type = QETH_CHECKSUM_DEFAULT; card->options.broadcast_mode = QETH_TR_BROADCAST_ALLRINGS; card->options.macaddr_mode = QETH_TR_MACADDR_NONCANONICAL; - card->options.enable_takeover = 1; card->options.fake_broadcast = 0; card->options.add_hhlen = DEFAULT_ADD_HHLEN; card->options.fake_ll = 0; @@ -998,10 +993,6 @@ if ((CARD_RDEV(card)->id.dev_type == known_devices[i][2]) && (CARD_RDEV(card)->id.dev_model == known_devices[i][3])) { card->info.type = known_devices[i][4]; - if (card->options.enable_takeover) - card->info.func_level = known_devices[i][6]; - else - card->info.func_level = known_devices[i][7]; card->qdio.no_out_queues = known_devices[i][8]; card->info.is_multicast_different = known_devices[i][9]; return 0; @@ -1627,10 +1618,13 @@ spin_unlock_irqrestore(&card->lock, flags); keep_reply = 0; if (reply->callback != NULL) { - if (cmd) + if (cmd) { + reply->offset = (__u16)((char*)cmd - + (char *)iob->data); keep_reply = reply->callback(card, reply, (unsigned long)cmd); + } else keep_reply = reply->callback(card, reply, @@ -1703,7 +1697,10 @@ init_timer(&timer); timer.function = qeth_cmd_timeout; timer.data = (unsigned long) reply; - timer.expires = jiffies + QETH_TIMEOUT; + if (IS_IPA(iob->data)) + timer.expires = jiffies + QETH_IPA_TIMEOUT; + else + timer.expires = jiffies + QETH_TIMEOUT; init_waitqueue_head(&reply->wait_q); spin_lock_irqsave(&card->lock, flags); list_add_tail(&reply->list, &card->cmd_waiter_list); @@ -1743,12 +1740,10 @@ (struct qeth_card *,struct qeth_reply*, unsigned long), void *reply_param) { - struct qeth_ipa_cmd *cmd; int rc; QETH_DBF_TEXT(trace,4,"sendipa"); - cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE); memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data), &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); @@ -2227,12 +2222,14 @@ while((skb = qeth_get_next_skb(card, buf->buffer, &element, &offset, &hdr))){ qeth_rebuild_skb(card, skb, hdr); - -#ifdef CONFIG_QETH_PERF_STATS - card->perf_stats.inbound_time += qeth_get_micros() - - card->perf_stats.inbound_start_time; - card->perf_stats.inbound_cnt++; -#endif + if (((*(int *)0xff0)==1) && + (skb->pkt_type == PACKET_BROADCAST)) + qeth_hex_dump(skb->data, 100); + /* is device UP ? */ + if (!(card->dev->flags & IFF_UP)){ + dev_kfree_skb_irq(skb); + continue; + } skb->dev = card->dev; rxrc = netif_rx(skb); card->dev->last_rx = jiffies; @@ -2330,6 +2327,9 @@ * 'index') un-requeued -> this buffer is the first buffer that * will be requeued the next time */ +#ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.inbound_do_qdio++; +#endif rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, queue->next_buf_to_init, count, NULL); @@ -2369,6 +2369,7 @@ card = (struct qeth_card *) card_ptr; net_dev = card->dev; #ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.inbound_cnt++; card->perf_stats.inbound_start_time = qeth_get_micros(); #endif if (status & QDIO_STATUS_LOOK_FOR_ERROR) { @@ -2391,6 +2392,10 @@ qeth_put_buffer_pool_entry(card, buffer->pool_entry); qeth_queue_input_buffer(card, index); } +#ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.inbound_time += qeth_get_micros() - + card->perf_stats.inbound_start_time; +#endif } static inline int @@ -2479,6 +2484,9 @@ } queue->card->dev->trans_start = jiffies; +#ifdef CONFIG_QETH_PERF_STATS + queue->card->perf_stats.outbound_do_qdio++; +#endif if (under_int) rc = do_QDIO(CARD_DDEV(queue->card), QDIO_FLAG_SYNC_OUTPUT | QDIO_FLAG_UNDER_INTERRUPT, @@ -2497,7 +2505,6 @@ } #ifdef CONFIG_QETH_PERF_STATS queue->card->perf_stats.bufs_sent += count; - queue->card->perf_stats.outbound_cnt++; #endif } @@ -2850,6 +2857,9 @@ for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i) qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]); card->qdio.in_q->next_buf_to_init = card->qdio.in_buf_pool.buf_count - 1; +#ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.inbound_do_qdio++; +#endif rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0, card->qdio.in_buf_pool.buf_count - 1, NULL); if (rc) { @@ -3134,20 +3144,6 @@ return rc; } -static void -qeth_set_device_name(struct qeth_card *card) -{ - char buf[IF_NAME_LEN]; - - memset(buf, 0, IF_NAME_LEN); - if (card->info.type == QETH_CARD_TYPE_IQD) { - sprintf(buf,"hsi%d", atomic_read(&qeth_hsi_count)); - atomic_inc(&qeth_hsi_count); - memcpy(card->dev->name,buf,IF_NAME_LEN); - } - -} - static struct net_device * qeth_get_netdevice(enum qeth_card_types type, enum qeth_link_types linktype) { @@ -3167,6 +3163,8 @@ } break; case QETH_CARD_TYPE_IQD: + dev = alloc_netdev(0, "hsi%d", ether_setup); + break; default: dev = alloc_etherdev(0); } @@ -3200,6 +3198,7 @@ return -EBUSY; } #ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.outbound_cnt++; card->perf_stats.outbound_start_time = qeth_get_micros(); #endif /* @@ -3210,6 +3209,10 @@ if (!(rc = qeth_send_packet(card, skb))) netif_wake_queue(dev); +#ifdef CONFIG_QETH_PERF_STATS + card->perf_stats.outbound_time += qeth_get_micros() - + card->perf_stats.outbound_start_time; +#endif return rc; } @@ -3556,7 +3559,6 @@ int first_lap = 1; QETH_DBF_TEXT(trace, 6, "qdfillbf"); - buffer = buf->buffer; atomic_inc(&skb->users); skb_queue_tail(&buf->skb_list, skb); @@ -3710,10 +3712,6 @@ if (!rc){ card->stats.tx_packets++; card->stats.tx_bytes += skb->len; -#ifdef CONFIG_QETH_PERF_STATS - card->perf_stats.outbound_time += qeth_get_micros() - - card->perf_stats.outbound_start_time; -#endif } return rc; } @@ -3859,9 +3857,9 @@ if (rc) { tmp = rc; PRINT_WARN("Could not set number of ARP entries on %s: " - "%s (0x%x)\n", + "%s (0x%x/%d)\n", card->info.if_name, qeth_arp_get_error_cause(&rc), - tmp); + tmp, tmp); } return rc; } @@ -3870,7 +3868,7 @@ qeth_arp_query_cb(struct qeth_card *card, struct qeth_reply *reply, unsigned long data) { - struct qeth_ipa_arp_cmd *cmd; + struct qeth_ipa_cmd *cmd; struct qeth_arp_query_data *qdata; struct qeth_arp_query_info *qinfo; int entry_size; @@ -3879,17 +3877,17 @@ QETH_DBF_TEXT(trace,4,"arpquecb"); qinfo = (struct qeth_arp_query_info *) reply->param; - cmd = (struct qeth_ipa_arp_cmd *) data; - if (cmd->ihdr.return_code) { - QETH_DBF_TEXT_(trace,4,"qaer1%i", cmd->ihdr.return_code); + cmd = (struct qeth_ipa_cmd *) data; + if (cmd->hdr.return_code) { + QETH_DBF_TEXT_(trace,4,"qaer1%i", cmd->hdr.return_code); return 0; } - if (cmd->shdr.return_code) { - cmd->ihdr.return_code = cmd->shdr.return_code; - QETH_DBF_TEXT_(trace,4,"qaer2%i", cmd->ihdr.return_code); + if (cmd->data.setassparms.hdr.return_code) { + cmd->hdr.return_code = cmd->data.setassparms.hdr.return_code; + QETH_DBF_TEXT_(trace,4,"qaer2%i", cmd->hdr.return_code); return 0; } - qdata = &cmd->data.query_arp; + qdata = &cmd->data.setassparms.data.query_arp; switch(qdata->reply_bits){ case 5: entry_size = sizeof(struct qeth_arp_qi_entry5); @@ -3906,20 +3904,21 @@ if ((qinfo->udata_len - qinfo->udata_offset) < qdata->no_entries * entry_size){ QETH_DBF_TEXT_(trace, 4, "qaer3%i", -ENOMEM); - cmd->ihdr.return_code = -ENOMEM; + cmd->hdr.return_code = -ENOMEM; goto out_error; } - QETH_DBF_TEXT_(trace, 4, "anore%i", cmd->shdr.number_of_replies); - QETH_DBF_TEXT_(trace, 4, "aseqn%i", cmd->shdr.seq_no); + QETH_DBF_TEXT_(trace, 4, "anore%i", + cmd->data.setassparms.hdr.number_of_replies); + QETH_DBF_TEXT_(trace, 4, "aseqn%i", cmd->data.setassparms.hdr.seq_no); QETH_DBF_TEXT_(trace, 4, "anoen%i", qdata->no_entries); - for (i = 0; i < qdata->no_entries; ++i){ - memcpy(qinfo->udata + qinfo->udata_offset, - qdata->data + i*entry_size, entry_size); - qinfo->no_entries++; - qinfo->udata_offset += entry_size; - } + /*copy entries to user buffer*/ + memcpy(qinfo->udata + qinfo->udata_offset, + (char *)&qdata->data, qdata->no_entries*entry_size); + qinfo->no_entries += qdata->no_entries; + qinfo->udata_offset += (qdata->no_entries*entry_size); /* check if all replies received ... */ - if (cmd->shdr.seq_no < cmd->shdr.number_of_replies) + if (cmd->data.setassparms.hdr.seq_no < + cmd->data.setassparms.hdr.number_of_replies) return 1; memcpy(qinfo->udata, &qinfo->no_entries, 4); memcpy(qinfo->udata + QETH_QARP_MASK_OFFSET,&qdata->reply_bits,2); @@ -3930,70 +3929,32 @@ return 0; } -static struct qeth_cmd_buffer * -qeth_get_ipacmd_buffer(struct qeth_card *, enum qeth_ipa_cmds, - enum qeth_prot_versions); - -struct qeth_cmd_buffer * -qeth_get_ipa_arp_cmd_buffer(struct qeth_card *card, u16 cmd_code, - u32 data_len, enum qeth_prot_versions proto) -{ - struct qeth_cmd_buffer *iob; - struct qeth_ipa_arp_cmd *cmd; - u16 s1, s2; - - QETH_DBF_TEXT(trace,4,"getarpcm"); - iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETASSPARMS, proto); - - memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE); - - if ((IPA_PDU_HEADER_SIZE + QETH_ARP_CMD_BASE_LEN + data_len) > 256) { - /* adjust sizes in IPA_PDU_HEADER */ - s1 = (u32) IPA_PDU_HEADER_SIZE + QETH_ARP_CMD_BASE_LEN + - data_len; - s2 = (u32) QETH_ARP_CMD_BASE_LEN + data_len; - memcpy(QETH_IPA_PDU_LEN_TOTAL(iob->data), &s1, 2); - memcpy(QETH_IPA_PDU_LEN_PDU1(iob->data), &s2, 2); - memcpy(QETH_IPA_PDU_LEN_PDU2(iob->data), &s2, 2); - memcpy(QETH_IPA_PDU_LEN_PDU3(iob->data), &s2, 2); - } - - cmd = (struct qeth_ipa_arp_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); - cmd->shdr.assist_no = IPA_ARP_PROCESSING; - cmd->shdr.length = 8 + data_len; - cmd->shdr.command_code = cmd_code; - cmd->shdr.return_code = 0; - cmd->shdr.seq_no = 0; - - return iob; -} - static int qeth_send_ipa_arp_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, - char *data, int data_len, - int (*reply_cb) - (struct qeth_card *,struct qeth_reply*, unsigned long), + int len, int (*reply_cb) + (struct qeth_card *, + struct qeth_reply*, unsigned long), void *reply_param) { int rc; QETH_DBF_TEXT(trace,4,"sendarp"); - memcpy(QETH_IPA_ARP_DATA_POS(iob->data), data, data_len); + memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE); memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data), &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); - - rc = qeth_send_control_data(card, IPA_PDU_HEADER_SIZE + - QETH_ARP_CMD_BASE_LEN + data_len, iob, + rc = qeth_send_control_data(card, IPA_PDU_HEADER_SIZE + len, iob, reply_cb, reply_param); return rc; } +static struct qeth_cmd_buffer * +qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs, + __u16, __u16, enum qeth_prot_versions); static int qeth_arp_query(struct qeth_card *card, char *udata) { struct qeth_cmd_buffer *iob; - struct qeth_arp_query_data *qdata; struct qeth_arp_query_info qinfo = {0, }; int tmp; int rc; @@ -4008,40 +3969,33 @@ */ if (card->info.guestlan) return -EOPNOTSUPP; - if (!qeth_is_supported(card,IPA_ARP_PROCESSING)) { + if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/ + IPA_ARP_PROCESSING)) { PRINT_WARN("ARP processing not supported " "on %s!\n", card->info.if_name); return -EOPNOTSUPP; } - /* get size of userspace mem area */ + if (copy_from_user(&qinfo.udata_len, udata, 4)) return -EFAULT; if (!(qinfo.udata = kmalloc(qinfo.udata_len, GFP_KERNEL))) return -ENOMEM; memset(qinfo.udata, 0, qinfo.udata_len); qinfo.udata_offset = QETH_QARP_ENTRIES_OFFSET; - /* alloc mem area for the actual query */ - if (!(qdata = kmalloc(sizeof(struct qeth_arp_query_data), - GFP_KERNEL))){ - kfree(qinfo.udata); - return -ENOMEM; - } - memset(qdata, 0, sizeof(struct qeth_arp_query_data)); - /* do not give sizeof(struct qeth_arp_query_data) to next command; - * this would cause the IPA PDU size to be set to a value of > 256 - * and this is to much for HiperSockets */ - iob = qeth_get_ipa_arp_cmd_buffer(card, IPA_CMD_ASS_ARP_QUERY_INFO, - 0, QETH_PROT_IPV4); + iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, + IPA_CMD_ASS_ARP_QUERY_INFO, + sizeof(int),QETH_PROT_IPV4); + rc = qeth_send_ipa_arp_cmd(card, iob, - (char *) qdata, - sizeof(struct qeth_arp_query_data), + QETH_SETASS_BASE_LEN+QETH_ARP_CMD_LEN, qeth_arp_query_cb, (void *)&qinfo); if (rc) { tmp = rc; - PRINT_WARN("Error while querying ARP cache on %s: %s (0x%x)\n", + PRINT_WARN("Error while querying ARP cache on %s: %s " + "(0x%x/%d)\n", card->info.if_name, qeth_arp_get_error_cause(&rc), - tmp); + tmp, tmp); copy_to_user(udata, qinfo.udata, 4); } else { copy_to_user(udata, qinfo.udata, qinfo.udata_len); @@ -4054,10 +4008,6 @@ qeth_default_setassparms_cb(struct qeth_card *, struct qeth_reply *, unsigned long); -static struct qeth_cmd_buffer * -qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs, - __u16, __u16, enum qeth_prot_versions); - static int qeth_send_setassparms(struct qeth_card *, struct qeth_cmd_buffer *, __u16, long, @@ -4101,9 +4051,9 @@ tmp = rc; qeth_ipaddr4_to_string((u8 *)entry->ipaddr, buf); PRINT_WARN("Could not add ARP entry for address %s on %s: " - "%s (0x%x)\n", + "%s (0x%x/%d)\n", buf, card->info.if_name, - qeth_arp_get_error_cause(&rc), tmp); + qeth_arp_get_error_cause(&rc), tmp, tmp); } return rc; } @@ -4144,9 +4094,9 @@ memset(buf, 0, 16); qeth_ipaddr4_to_string((u8 *)entry->ipaddr, buf); PRINT_WARN("Could not delete ARP entry for address %s on %s: " - "%s (0x%x)\n", + "%s (0x%x/%d)\n", buf, card->info.if_name, - qeth_arp_get_error_cause(&rc), tmp); + qeth_arp_get_error_cause(&rc), tmp, tmp); } return rc; } @@ -4165,7 +4115,7 @@ * funcs flags); since all zeros is no valueable information, * we say EOPNOTSUPP for all ARP functions */ - if (card->info.guestlan) + if (card->info.guestlan || (card->info.type == QETH_CARD_TYPE_IQD)) return -EOPNOTSUPP; if (!qeth_is_supported(card,IPA_ARP_PROCESSING)) { PRINT_WARN("ARP processing not supported " @@ -4176,9 +4126,9 @@ IPA_CMD_ASS_ARP_FLUSH_CACHE, 0); if (rc){ tmp = rc; - PRINT_WARN("Could not flush ARP cache on %s: %s (0x%x)\n", + PRINT_WARN("Could not flush ARP cache on %s: %s (0x%x/%d)\n", card->info.if_name, qeth_arp_get_error_cause(&rc), - tmp); + tmp, tmp); } return rc; } @@ -4198,7 +4148,6 @@ return -ENODEV; switch (cmd){ - case SIOCDEVPRIVATE: case SIOC_QETH_ARP_SET_NO_ENTRIES: if (!capable(CAP_NET_ADMIN)){ rc = -EPERM; @@ -4206,7 +4155,6 @@ } rc = qeth_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue); break; - case SIOCDEVPRIVATE+1: case SIOC_QETH_ARP_QUERY_INFO: if (!capable(CAP_NET_ADMIN)){ rc = -EPERM; @@ -4214,7 +4162,6 @@ } rc = qeth_arp_query(card, rq->ifr_ifru.ifru_data); break; - case SIOCDEVPRIVATE+2: case SIOC_QETH_ARP_ADD_ENTRY: if (!capable(CAP_NET_ADMIN)){ rc = -EPERM; @@ -4226,7 +4173,6 @@ else rc = qeth_arp_add_entry(card, &arp_entry); break; - case SIOCDEVPRIVATE+3: case SIOC_QETH_ARP_REMOVE_ENTRY: if (!capable(CAP_NET_ADMIN)){ rc = -EPERM; @@ -4238,7 +4184,6 @@ else rc = qeth_arp_remove_entry(card, &arp_entry); break; - case SIOCDEVPRIVATE+4: case SIOC_QETH_ARP_FLUSH_CACHE: if (!capable(CAP_NET_ADMIN)){ rc = -EPERM; @@ -4246,10 +4191,8 @@ } rc = qeth_arp_flush_cache(card); break; - case SIOCDEVPRIVATE+5: case SIOC_QETH_ADP_SET_SNMP_CONTROL: break; - case SIOCDEVPRIVATE+6: case SIOC_QETH_GET_CARD_TYPE: break; case SIOCGMIIPHY: @@ -4282,6 +4225,8 @@ default: rc = -EOPNOTSUPP; } + if (rc) + QETH_DBF_TEXT_(trace, 2, "ioce%d", rc); return rc; } @@ -4325,27 +4270,124 @@ qeth_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { struct qeth_card *card; + unsigned long flags; QETH_DBF_TEXT(trace,4,"vlanreg"); card = (struct qeth_card *) dev->priv; - spin_lock_irq(&card->vlanlock); + spin_lock_irqsave(&card->vlanlock, flags); card->vlangrp = grp; - spin_unlock_irq(&card->vlanlock); + spin_unlock_irqrestore(&card->vlanlock, flags); +} + +static inline void +qeth_free_vlan_buffer(struct qeth_card *card, struct qeth_qdio_out_buffer *buf, + unsigned short vid) +{ + int i; + struct sk_buff *skb; + struct sk_buff_head tmp_list; + + skb_queue_head_init(&tmp_list); + for(i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i){ + while ((skb = skb_dequeue(&buf->skb_list))){ + if (vlan_tx_tag_present(skb) && + (vlan_tx_tag_get(skb) == vid)) { + atomic_dec(&skb->users); + dev_kfree_skb(skb); + } else + skb_queue_tail(&tmp_list, skb); + } + } + while ((skb = skb_dequeue(&tmp_list))) + skb_queue_tail(&buf->skb_list, skb); +} + +static void +qeth_free_vlan_skbs(struct qeth_card *card, unsigned short vid) +{ + int i, j; + + QETH_DBF_TEXT(trace, 4, "frvlskbs"); + for (i = 0; i < card->qdio.no_out_queues; ++i){ + for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) + qeth_free_vlan_buffer(card, &card->qdio. + out_qs[i]->bufs[j], vid); + } +} + +static void +qeth_free_vlan_addresses4(struct qeth_card *card, unsigned short vid) +{ + struct in_device *in_dev; + struct in_ifaddr *ifa; + struct qeth_ipaddr *addr; + + QETH_DBF_TEXT(trace, 4, "frvaddr4"); + if (!card->vlangrp) + return; + in_dev = in_dev_get(card->vlangrp->vlan_devices[vid]); + if (!in_dev) + return; + for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next){ + addr = qeth_get_addr_buffer(QETH_PROT_IPV4); + if (addr){ + addr->u.a4.addr = ifa->ifa_address; + addr->u.a4.mask = ifa->ifa_mask; + addr->type = QETH_IP_TYPE_NORMAL; + if (!qeth_delete_ip(card, addr)) + kfree(addr); + } + } + in_dev_put(in_dev); +} + +static void +qeth_free_vlan_addresses6(struct qeth_card *card, unsigned short vid) +{ + struct inet6_dev *in6_dev; + struct inet6_ifaddr *ifa; + struct qeth_ipaddr *addr; + + QETH_DBF_TEXT(trace, 4, "frvaddr6"); + if (!card->vlangrp) + return; + in6_dev = in6_dev_get(card->vlangrp->vlan_devices[vid]); + if (!in6_dev) + return; + for (ifa = in6_dev->addr_list; ifa; ifa = ifa->lst_next){ + addr = qeth_get_addr_buffer(QETH_PROT_IPV6); + if (addr){ + memcpy(&addr->u.a6.addr, &ifa->addr, + sizeof(struct in6_addr)); + addr->u.a6.pfxlen = ifa->prefix_len; + addr->type = QETH_IP_TYPE_NORMAL; + if (!qeth_delete_ip(card, addr)) + kfree(addr); + } + } + in6_dev_put(in6_dev); } static void qeth_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) { struct qeth_card *card; + unsigned long flags; QETH_DBF_TEXT(trace,4,"vlkilvid"); card = (struct qeth_card *) dev->priv; - spin_lock_irq(&card->vlanlock); + /* free all skbs for the vlan device */ + qeth_free_vlan_skbs(card, vid); + spin_lock_irqsave(&card->vlanlock, flags); + /* unregister IP addresses of vlan device */ + qeth_free_vlan_addresses4(card, vid); + qeth_free_vlan_addresses6(card, vid); if (card->vlangrp) card->vlangrp->vlan_devices[vid] = NULL; - spin_unlock_irq(&card->vlanlock); + spin_unlock_irqrestore(&card->vlanlock, flags); + qeth_set_thread_start_bit(card, QETH_SET_IP_THREAD); /* delete mc addresses for this vlan dev */ qeth_set_thread_start_bit(card, QETH_SET_MC_THREAD); schedule_work(&card->kernel_thread_starter); @@ -4401,10 +4443,6 @@ memset(addr,0,sizeof(struct qeth_ipaddr)); addr->type = QETH_IP_TYPE_NORMAL; addr->proto = prot; - addr->is_multicast = 0; - addr->users = 0; - addr->set_flags = 0; - addr->del_flags = 0; return addr; } @@ -4811,6 +4849,26 @@ return 0; } +static void +qeth_init_func_level(struct qeth_card *card) +{ + if (card->ipato.enabled) { + if (card->info.type == QETH_CARD_TYPE_IQD) + card->info.func_level = + QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT; + else + card->info.func_level = + QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT; + } else { + if (card->info.type == QETH_CARD_TYPE_IQD) + card->info.func_level = + QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT; + else + card->info.func_level = + QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT; + } +} + /** * hardsetup card, initialize MPC and QDIO stuff */ @@ -4848,6 +4906,7 @@ return rc; } qeth_init_tokens(card); + qeth_init_func_level(card); rc = qeth_idx_activate_channel(&card->read, qeth_idx_read_cb); if (rc == -ERESTARTSYS) { QETH_DBF_TEXT(setup, 2, "break2"); @@ -4885,7 +4944,6 @@ QETH_DBF_TEXT_(setup, 2, "6err%d", rc); goto out; } - qeth_set_device_name(card); card->dev->priv = card; card->dev->type = qeth_get_arphdr_type(card->info.type, card->info.link_type); @@ -4898,7 +4956,7 @@ } static struct qeth_cmd_buffer * -qeth_get_adapter_cmd(struct qeth_card *card, __u32 command) +qeth_get_adapter_cmd(struct qeth_card *card, __u32 command, __u32 cmdlen) { struct qeth_cmd_buffer *iob; struct qeth_ipa_cmd *cmd; @@ -4906,11 +4964,10 @@ iob = qeth_get_ipacmd_buffer(card,IPA_CMD_SETADAPTERPARMS, QETH_PROT_IPV4); cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); - cmd->data.setadapterparms.cmdlength = - sizeof(struct qeth_ipacmd_setadpparms); - cmd->data.setadapterparms.command_code = command; - cmd->data.setadapterparms.frames_used_total = 1; - cmd->data.setadapterparms.frame_seq_no = 1; + cmd->data.setadapterparms.hdr.cmdlength = cmdlen; + cmd->data.setadapterparms.hdr.command_code = command; + cmd->data.setadapterparms.hdr.used_total = 1; + cmd->data.setadapterparms.hdr.seq_no = 1; return iob; } @@ -4952,7 +5009,7 @@ cmd = (struct qeth_ipa_cmd *) data; if (cmd->hdr.return_code == 0) - cmd->hdr.return_code = cmd->data.setadapterparms.return_code; + cmd->hdr.return_code = cmd->data.setadapterparms.hdr.return_code; return 0; } @@ -4980,7 +5037,8 @@ struct qeth_cmd_buffer *iob; QETH_DBF_TEXT(trace,3,"queryadp"); - iob = qeth_get_adapter_cmd(card,IPA_SETADP_QUERY_COMMANDS_SUPPORTED); + iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_COMMANDS_SUPPORTED, + sizeof(struct qeth_ipacmd_setadpparms)); rc = qeth_send_ipa_cmd(card, iob, qeth_query_setadapterparms_cb, NULL); return rc; } @@ -5010,7 +5068,8 @@ QETH_DBF_TEXT(trace,4,"chgmac"); - iob = qeth_get_adapter_cmd(card,IPA_SETADP_ALTER_MAC_ADDRESS); + iob = qeth_get_adapter_cmd(card,IPA_SETADP_ALTER_MAC_ADDRESS, + sizeof(struct qeth_ipacmd_setadpparms)); cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); cmd->data.setadapterparms.data.change_addr.cmd = CHANGE_ADDR_READ_MAC; cmd->data.setadapterparms.data.change_addr.addr_size = OSA_ADDR_LEN; @@ -5030,7 +5089,8 @@ QETH_DBF_TEXT(trace,4,"adpmode"); - iob = qeth_get_adapter_cmd(card, command); + iob = qeth_get_adapter_cmd(card, command, + sizeof(struct qeth_ipacmd_setadpparms)); cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); cmd->data.setadapterparms.data.mode = mode; rc = qeth_send_ipa_cmd(card, iob, qeth_default_setadapterparms_cb, @@ -5459,18 +5519,20 @@ int rc; QETH_DBF_TEXT(trace,3,"stbrdcst"); + card->info.broadcast_capable = 0; if (!qeth_is_supported(card, IPA_FILTERING)) { PRINT_WARN("Broadcast not supported on %s\n", card->info.if_name); - return -EOPNOTSUPP; + rc = -EOPNOTSUPP; + goto out; } rc = qeth_send_simple_setassparms(card, IPA_FILTERING, IPA_CMD_ASS_START, 0); if (rc) { - PRINT_WARN("Could not enable broadcasting " + PRINT_WARN("Could not enable broadcasting filtering " "on %s: 0x%x\n", card->info.if_name, rc); - return rc; + goto out; } rc = qeth_send_simple_setassparms(card, IPA_FILTERING, @@ -5478,12 +5540,24 @@ if (rc) { PRINT_WARN("Could not set up broadcast filtering on %s: 0x%x\n", card->info.if_name, rc); - return rc; + goto out; } + card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO; PRINT_INFO("Broadcast enabled \n"); - card->dev->flags |= IFF_BROADCAST; - card->info.broadcast_capable = 1; - return 0; + rc = qeth_send_simple_setassparms(card, IPA_FILTERING, + IPA_CMD_ASS_ENABLE, 1); + if (rc) { + PRINT_WARN("Could not set up broadcast echo filtering on " + "%s: 0x%x\n", card->info.if_name, rc); + goto out; + } + card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO; +out: + if (card->info.broadcast_capable) + card->dev->flags |= IFF_BROADCAST; + else + card->dev->flags &= ~IFF_BROADCAST; + return rc; } static int @@ -5781,7 +5855,6 @@ qeth_clear_ip_list(struct qeth_card *card, int clean, int recover) { struct qeth_ipaddr *addr, *tmp; - int first_run = 1; unsigned long flags; QETH_DBF_TEXT(trace,4,"clearip"); @@ -5791,29 +5864,21 @@ list_del(&addr->entry); kfree(addr); } -again: - if (first_run) - first_run = 0; - else - spin_lock_irqsave(&card->ip_lock, flags); - list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) { + while (!list_empty(&card->ip_list)) { + addr = list_entry(card->ip_list.next, + struct qeth_ipaddr, entry); list_del_init(&addr->entry); - if (clean){ + if (clean) { spin_unlock_irqrestore(&card->ip_lock, flags); qeth_deregister_addr_entry(card, addr); + spin_lock_irqsave(&card->ip_lock, flags); } - if (!recover || addr->is_multicast) + if (!recover || addr->is_multicast) { kfree(addr); - else { - if (clean) - spin_lock_irqsave(&card->ip_lock, flags); - list_add_tail(&addr->entry, &card->ip_tbd_list); - if (clean) { - spin_unlock_irqrestore(&card->ip_lock, flags); - goto again; - } + continue; } + list_add_tail(&addr->entry, &card->ip_tbd_list); } spin_unlock_irqrestore(&card->ip_lock, flags); } @@ -6775,12 +6840,16 @@ int rc=0; qeth_eyecatcher(); - printk(KERN_INFO "qeth: loading %s\n",version); + PRINT_INFO("loading %s (%s/%s/%s/%s/%s/%s/%s %s %s)\n", + version, VERSION_QETH_C, VERSION_QETH_H, + VERSION_QETH_MPC_H, VERSION_QETH_MPC_C, + VERSION_QETH_FS_H, VERSION_QETH_PROC_C, + VERSION_QETH_SYS_C, QETH_VERSION_IPV6, + QETH_VERSION_VLAN); INIT_LIST_HEAD(&qeth_card_list.list); rwlock_init(&qeth_card_list.rwlock); - atomic_set(&qeth_hsi_count, 0); if (qeth_register_dbf_views()) goto out_err; if (qeth_sysfs_register()) diff -Nru a/drivers/s390/net/qeth_mpc.c b/drivers/s390/net/qeth_mpc.c --- a/drivers/s390/net/qeth_mpc.c Tue May 18 23:38:08 2004 +++ b/drivers/s390/net/qeth_mpc.c Tue May 18 23:38:08 2004 @@ -11,6 +11,8 @@ #include #include "qeth_mpc.h" +const char *VERSION_QETH_MPC_C = "$Revision: 1.11 $"; + unsigned char IDX_ACTIVATE_READ[]={ 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00, 0x19,0x01,0x01,0x80, 0x00,0x00,0x00,0x00, @@ -129,8 +131,7 @@ 0x00,0x00,0x00,0x14, 0x00,0x00, (IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))/256, (IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))%256, - 0x10,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00, + 0x10,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0xc1,0x03,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x24, sizeof(struct qeth_ipa_cmd)/256, diff -Nru a/drivers/s390/net/qeth_mpc.h b/drivers/s390/net/qeth_mpc.h --- a/drivers/s390/net/qeth_mpc.h Tue May 18 23:38:07 2004 +++ b/drivers/s390/net/qeth_mpc.h Tue May 18 23:38:07 2004 @@ -14,7 +14,9 @@ #include -#define VERSION_QETH_MPC_H "$Revision: 1.27 $" +#define VERSION_QETH_MPC_H "$Revision: 1.34 $" + +extern const char *VERSION_QETH_MPC_C; #define IPA_PDU_HEADER_SIZE 0x40 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) @@ -33,6 +35,7 @@ #define OSA_ADDR_LEN 6 #define QETH_TIMEOUT (10 * HZ) +#define QETH_IPA_TIMEOUT (45 * HZ) #define QETH_IDX_COMMAND_SEQNO -1 #define SR_INFO_LEN 16 @@ -245,12 +248,28 @@ __u8 seq_no; } __attribute__((packed)); +struct qeth_arp_query_data { + __u16 request_bits; + __u16 reply_bits; + __u32 no_entries; + char data; +} __attribute__((packed)); + +/* used as parameter for arp_query reply */ +struct qeth_arp_query_info { + __u32 udata_len; + __u32 udata_offset; + __u32 no_entries; + char *udata; +}; + /* SETASSPARMS IPA Command: */ struct qeth_ipacmd_setassparms { struct qeth_ipacmd_setassparms_hdr hdr; union { __u32 flags_32bit; struct qeth_arp_cache_entry add_arp_entry; + struct qeth_arp_query_data query_arp; __u8 ip[16]; } data; } __attribute__ ((packed)); @@ -277,16 +296,20 @@ __u8 addr[OSA_ADDR_LEN]; } __attribute__ ((packed)); -struct qeth_ipacmd_setadpparms { +struct qeth_ipacmd_setadpparms_hdr { __u32 supp_hw_cmds; __u32 reserved1; __u16 cmdlength; __u16 reserved2; __u32 command_code; __u16 return_code; - __u8 frames_used_total; - __u8 frame_seq_no; + __u8 used_total; + __u8 seq_no; __u32 reserved3; +} __attribute__ ((packed)); + +struct qeth_ipacmd_setadpparms { + struct qeth_ipacmd_setadpparms_hdr hdr; union { struct qeth_query_cmds_supp query_cmds_supp; struct qeth_change_addr change_addr; @@ -357,36 +380,16 @@ QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008, }; -#define QETH_QARP_DATA_SIZE 3968 -struct qeth_arp_query_data { - __u16 request_bits; - __u16 reply_bits; - __u32 no_entries; - char data[QETH_QARP_DATA_SIZE]; -} __attribute__((packed)); - -/* used as parameter for arp_query reply */ -struct qeth_arp_query_info { - __u32 udata_len; - __u32 udata_offset; - __u32 no_entries; - char *udata; -}; - -#define IPA_ARP_CMD_LEN (IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_arp_cmd)) -#define QETH_ARP_CMD_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ +#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ sizeof(struct qeth_ipacmd_setassparms_hdr)) #define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \ - QETH_ARP_CMD_BASE_LEN) -struct qeth_ipa_arp_cmd { - struct qeth_ipacmd_hdr ihdr; - struct qeth_ipacmd_setassparms_hdr shdr; - union { - struct qeth_arp_query_data query_arp; - } data; -} __attribute__((packed)); - + QETH_SETASS_BASE_LEN) +#define QETH_SETADP_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ + sizeof(struct qeth_ipacmd_setadpparms_hdr)) +#define QETH_SNMP_SETADP_CMDLENGTH 16 +#define QETH_ARP_DATA_SIZE 3968 +#define QETH_ARP_CMD_LEN (QETH_ARP_DATA_SIZE + 8) /* Helper functions */ #define IS_IPA_REPLY(cmd) (cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST) diff -Nru a/drivers/s390/net/qeth_proc.c b/drivers/s390/net/qeth_proc.c --- a/drivers/s390/net/qeth_proc.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/net/qeth_proc.c Tue May 18 23:38:07 2004 @@ -1,6 +1,6 @@ /* * - * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.5 $) + * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.9 $) * * Linux on zSeries OSA Express and HiperSockets support * This file contains code related to procfs. @@ -21,6 +21,8 @@ #include "qeth_mpc.h" #include "qeth_fs.h" +const char *VERSION_QETH_PROC_C = "$Revision: 1.9 $"; + /***** /proc/qeth *****/ #define QETH_PROCFILE_NAME "qeth" static struct proc_dir_entry *qeth_procfile; @@ -91,13 +93,19 @@ return "pri"; else if (routing_type == SECONDARY_ROUTER) return "sec"; - else if (routing_type == MULTICAST_ROUTER) + else if (routing_type == MULTICAST_ROUTER) { + if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) + return "mc+"; return "mc"; - else if (routing_type == PRIMARY_CONNECTOR) + } else if (routing_type == PRIMARY_CONNECTOR) { + if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) + return "p+c"; return "p.c"; - else if (routing_type == SECONDARY_CONNECTOR) + } else if (routing_type == SECONDARY_CONNECTOR) { + if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) + return "s+c"; return "s.c"; - else if (routing_type == NO_ROUTER) + } else if (routing_type == NO_ROUTER) return "no"; else return "unk"; @@ -244,14 +252,18 @@ : 0 ); seq_printf(s, " Inbound time (in us) : %i\n" - " Inbound cnt : %i\n" + " Inbound count : %i\n" + " Inboud do_QDIO count : %i\n" " Outbound time (in us, incl QDIO) : %i\n" - " Outbound cnt : %i\n" + " Outbound count : %i\n" + " Outbound do_QDIO count : %i\n" " Watermarks L/H : %i/%i\n\n", card->perf_stats.inbound_time, card->perf_stats.inbound_cnt, + card->perf_stats.inbound_do_qdio, card->perf_stats.outbound_time, card->perf_stats.outbound_cnt, + card->perf_stats.outbound_do_qdio, QETH_LOW_WATERMARK_PACK, QETH_HIGH_WATERMARK_PACK ); diff -Nru a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c --- a/drivers/s390/net/qeth_sys.c Tue May 18 23:38:07 2004 +++ b/drivers/s390/net/qeth_sys.c Tue May 18 23:38:07 2004 @@ -1,6 +1,6 @@ /* * - * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.24 $) + * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.29 $) * * Linux on zSeries OSA Express and HiperSockets support * This file contains code related to sysfs. @@ -20,6 +20,8 @@ #include "qeth_mpc.h" #include "qeth_fs.h" +const char *VERSION_QETH_SYS_C = "$Revision: 1.29 $"; + /*****************************************************************************/ /* */ /* /sys-fs stuff UNDER DEVELOPMENT !!! */ @@ -736,6 +738,10 @@ if (!card) return -EINVAL; + + if ((card->state != CARD_STATE_DOWN) && + (card->state != CARD_STATE_RECOVER)) + return -EPERM; tmp = strsep((char **) &buf, "\n"); if (!strcmp(tmp, "toggle")){ diff -Nru a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c --- a/drivers/s390/scsi/zfcp_ccw.c Tue May 18 23:38:06 2004 +++ b/drivers/s390/scsi/zfcp_ccw.c Tue May 18 23:38:06 2004 @@ -26,7 +26,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#define ZFCP_CCW_C_REVISION "$Revision: 1.52 $" +#define ZFCP_CCW_C_REVISION "$Revision: 1.54 $" #include #include @@ -232,14 +232,19 @@ case CIO_GONE: ZFCP_LOG_NORMAL("adapter %s: device gone\n", zfcp_get_busid_by_adapter(adapter)); + debug_text_event(adapter->erp_dbf,1,"dev_gone"); + zfcp_erp_adapter_shutdown(adapter, 0); break; case CIO_NO_PATH: ZFCP_LOG_NORMAL("adapter %s: no path\n", zfcp_get_busid_by_adapter(adapter)); + debug_text_event(adapter->erp_dbf,1,"no_path"); + zfcp_erp_adapter_shutdown(adapter, 0); break; case CIO_OPER: ZFCP_LOG_NORMAL("adapter %s: operational again\n", zfcp_get_busid_by_adapter(adapter)); + debug_text_event(adapter->erp_dbf,1,"dev_oper"); zfcp_erp_modify_adapter_status(adapter, ZFCP_STATUS_COMMON_RUNNING, ZFCP_SET); @@ -247,6 +252,7 @@ ZFCP_STATUS_COMMON_ERP_FAILED); break; } + zfcp_erp_wait(adapter); up(&zfcp_data.config_sema); return 1; } diff -Nru a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c --- a/drivers/s390/scsi/zfcp_erp.c Tue May 18 23:38:06 2004 +++ b/drivers/s390/scsi/zfcp_erp.c Tue May 18 23:38:06 2004 @@ -31,7 +31,7 @@ #define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP /* this drivers version (do not edit !!! generated and updated by cvs) */ -#define ZFCP_ERP_REVISION "$Revision: 1.51 $" +#define ZFCP_ERP_REVISION "$Revision: 1.52 $" #include "zfcp_ext.h" @@ -2540,6 +2540,7 @@ atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, &adapter->status); ZFCP_LOG_DEBUG("Doing exchange config data\n"); + zfcp_erp_action_to_running(erp_action); zfcp_erp_timeout_init(erp_action); if (zfcp_fsf_exchange_config_data(erp_action)) { retval = ZFCP_ERP_FAILED; @@ -2566,7 +2567,7 @@ * _must_ be the one belonging to the 'exchange config * data' request. */ - down_interruptible(&adapter->erp_ready_sem); + down(&adapter->erp_ready_sem); if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) { ZFCP_LOG_INFO("error: exchange of configuration data " "for adapter %s timed out\n", diff -Nru a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c --- a/drivers/s390/scsi/zfcp_fsf.c Tue May 18 23:38:08 2004 +++ b/drivers/s390/scsi/zfcp_fsf.c Tue May 18 23:38:08 2004 @@ -29,7 +29,7 @@ */ /* this drivers version (do not edit !!! generated and updated by cvs) */ -#define ZFCP_FSF_C_REVISION "$Revision: 1.45 $" +#define ZFCP_FSF_C_REVISION "$Revision: 1.46 $" #include "zfcp_ext.h" @@ -412,7 +412,7 @@ fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, &(adapter->status)); - debug_text_event(adapter->erp_dbf, 4, "prot_con_init"); + debug_text_event(adapter->erp_dbf, 3, "prot_con_init"); break; case FSF_PROT_DUPLICATE_REQUEST_ID: diff -Nru a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c --- a/drivers/scsi/3w-xxxx.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/3w-xxxx.c Tue May 18 23:38:09 2004 @@ -1,12 +1,12 @@ /* 3w-xxxx.c -- 3ware Storage Controller device driver for Linux. - Written By: Adam Radford + Written By: Adam Radford Modifications By: Joel Jacobson Arnaldo Carvalho de Melo Brad Strand - Copyright (C) 1999-2003 3ware Inc. + Copyright (C) 1999-2004 3ware Inc. Kernel compatiblity By: Andre Hedrick Non-Copyright (C) 2000 Andre Hedrick @@ -47,10 +47,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Bugs/Comments/Suggestions should be mailed to: - linux@3ware.com + linuxraid@amcc.com For more information, goto: - http://www.3ware.com + http://www.amcc.com History ------- @@ -179,6 +179,11 @@ 1.02.00.036 - Increase character ioctl timeout to 60 seconds. 1.02.00.037 - Fix tw_ioctl() to handle all non-data ATA passthru cmds for 'smartmontools' support. + 1.26.00.038 - Roll driver minor version to 26 to denote kernel 2.6. + Add support for cmds_per_lun module parameter. + 1.26.00.039 - Fix bug in tw_chrdev_ioctl() polling code. + Fix data_buffer_length usage in tw_chrdev_ioctl(). + Update contact information. */ #include @@ -205,6 +210,7 @@ #include #include #include +#include #include #include @@ -242,10 +248,15 @@ }; /* Globals */ -char *tw_driver_version="1.02.00.037"; +char *tw_driver_version="1.26.00.039"; TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT]; int tw_device_extension_count = 0; static int twe_major = -1; +static int cmds_per_lun; + +/* Module parameters */ +module_param(cmds_per_lun, int, 0); +MODULE_PARM_DESC(cmds_per_lun, "Maximum commands per LUN"); /* Functions */ @@ -683,7 +694,7 @@ break; case TW_OP_AEN_LISTEN: dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): caught TW_AEN_LISTEN.\n"); - memset(tw_ioctl->data_buffer, 0, tw_ioctl->data_buffer_length); + memset(tw_ioctl->data_buffer, 0, data_buffer_length); spin_lock_irqsave(tw_dev->host->host_lock, flags); if (tw_dev->aen_head == tw_dev->aen_tail) { @@ -738,7 +749,7 @@ timeout = TW_IOCTL_CHRDEV_TIMEOUT*HZ; /* Now wait for the command to complete */ - wait_event_interruptible_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout); + timeout = wait_event_interruptible_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout); /* Check if we timed out, got a signal, or didn't get an interrupt */ @@ -777,7 +788,7 @@ } /* Now copy the response to userspace */ - error = copy_to_user((void *)arg, tw_ioctl, sizeof(TW_New_Ioctl) + tw_ioctl->data_buffer_length - 1); + error = copy_to_user((void *)arg, tw_ioctl, sizeof(TW_New_Ioctl) + data_buffer_length - 1); if (error == 0) retval = 0; out2: @@ -1141,14 +1152,6 @@ /* Set card status as online */ tw_dev->online = 1; -#ifdef CONFIG_3W_XXXX_CMD_PER_LUN - tw_host->cmd_per_lun = CONFIG_3W_XXXX_CMD_PER_LUN; - if (tw_host->cmd_per_lun > TW_MAX_CMDS_PER_LUN) - tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN; -#else - /* Use SHT cmd_per_lun here */ - tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN; -#endif tw_dev->free_head = TW_Q_START; tw_dev->free_tail = TW_Q_START; tw_dev->free_wrap = TW_Q_LENGTH - 1; @@ -3386,13 +3389,13 @@ dprintk(KERN_WARNING "3w-xxxx: tw_slave_configure()\n"); -#ifdef CONFIG_3W_XXXX_CMD_PER_LUN - max_cmds = CONFIG_3W_XXXX_CMD_PER_LUN; - if (max_cmds > TW_MAX_CMDS_PER_LUN) + if (cmds_per_lun) { + max_cmds = cmds_per_lun; + if (max_cmds > TW_MAX_CMDS_PER_LUN) + max_cmds = TW_MAX_CMDS_PER_LUN; + } else { max_cmds = TW_MAX_CMDS_PER_LUN; -#else - max_cmds = TW_MAX_CMDS_PER_LUN; -#endif + } scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, max_cmds); return 0; @@ -3488,6 +3491,7 @@ .eh_abort_handler = tw_scsi_eh_abort, .eh_host_reset_handler = tw_scsi_eh_reset, .bios_param = tw_scsi_biosparam, + .slave_configure = tw_slave_configure, .can_queue = TW_Q_LENGTH-2, .this_id = -1, .sg_tablesize = TW_MAX_SGL_LENGTH, diff -Nru a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h --- a/drivers/scsi/3w-xxxx.h Tue May 18 23:38:06 2004 +++ b/drivers/scsi/3w-xxxx.h Tue May 18 23:38:06 2004 @@ -1,12 +1,12 @@ /* 3w-xxxx.h -- 3ware Storage Controller device driver for Linux. - Written By: Adam Radford + Written By: Adam Radford Modifications By: Joel Jacobson Arnaldo Carvalho de Melo Brad Strand - Copyright (C) 1999-2003 3ware Inc. + Copyright (C) 1999-2004 3ware Inc. Kernel compatiblity By: Andre Hedrick Non-Copyright (C) 2000 Andre Hedrick @@ -45,10 +45,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Bugs/Comments/Suggestions should be mailed to: - linux@3ware.com + linuxraid@amcc.com For more information, goto: - http://www.3ware.com + http://www.amcc.com */ #ifndef _3W_XXXX_H diff -Nru a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig --- a/drivers/scsi/Kconfig Tue May 18 23:38:09 2004 +++ b/drivers/scsi/Kconfig Tue May 18 23:38:09 2004 @@ -434,10 +434,18 @@ If unsure, say N. config SCSI_SATA_PROMISE - tristate "Promise SATA support" + tristate "Promise SATA TX2/TX4 support" + depends on SCSI_SATA && PCI + help + This option enables support for Promise Serial ATA TX2/TX4. + + If unsure, say N. + +config SCSI_SATA_SX4 + tristate "Promise SATA SX4 support" depends on SCSI_SATA && PCI && EXPERIMENTAL help - This option enables support for Promise Serial ATA. + This option enables support for Promise Serial ATA SX4. If unsure, say N. @@ -979,6 +987,31 @@ the card. This is significantly slower then using memory mapped IO. Most people should answer N. +config SCSI_IPR + tristate "IBM Power Linux RAID adapter support" + depends on PCI && SCSI + select FW_LOADER + ---help--- + This driver supports the IBM Power Linux family RAID adapters. + This includes IBM pSeries 5712, 5703, 5709, and 570A, as well + as IBM iSeries 5702, 5703, 5709, and 570A. + +config SCSI_IPR_TRACE + bool "enable driver internal trace" + depends on SCSI_IPR + help + If you say Y here, the driver will trace all commands issued + to the adapter. Performance impact is minimal. Trace can be + dumped using /sys/bus/class/scsi_host/hostXX/trace. + +config SCSI_IPR_DUMP + bool "enable adapter dump support" + depends on SCSI_IPR + help + If you say Y here, the driver will support adapter crash dump. + If you enable this support, the iprdump daemon can be used + to capture adapter failure analysis information. + config SCSI_ZALON tristate "Zalon SCSI support" depends on GSC && SCSI @@ -1100,7 +1133,7 @@ config SCSI_MCA_53C9X tristate "NCR MCA 53C9x SCSI support" - depends on MCA && SCSI && BROKEN_ON_SMP + depends on MCA_LEGACY && SCSI && BROKEN_ON_SMP help Some MicroChannel machines, notably the NCR 35xx line, use a SCSI controller based on the NCR 53C94. This driver will allow use of @@ -1703,8 +1736,17 @@ # bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI config ZFCP - tristate "IBM z900 OpenFCP/SCSI support" + tristate "FCP host bus adapter driver for IBM eServer zSeries" depends on ARCH_S390 && SCSI + help + If you want to access SCSI devices attached to your IBM eServer + zSeries by means of Fibre Channel interfaces say Y. + For details please refer to the documentation provided by IBM at + + + This driver is also available as a module. This module will be + called zfcp. If you want to compile it as a module, say M here + and read Documentation/modules.txt. endmenu diff -Nru a/drivers/scsi/Makefile b/drivers/scsi/Makefile --- a/drivers/scsi/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/scsi/Makefile Tue May 18 23:38:08 2004 @@ -75,7 +75,8 @@ obj-$(CONFIG_SCSI_NCR_D700) += 53c700.o NCR_D700.o obj-$(CONFIG_SCSI_NCR_Q720) += NCR_Q720_mod.o obj-$(CONFIG_SCSI_SYM53C416) += sym53c416.o -obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas.o +obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o +obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o obj-$(CONFIG_SCSI_QLOGIC_1280) += qla1280.o @@ -117,6 +118,7 @@ obj-$(CONFIG_SCSI_CPQFCTS) += cpqfc.o obj-$(CONFIG_SCSI_LASI700) += 53c700.o lasi700.o obj-$(CONFIG_SCSI_NSP32) += nsp32.o +obj-$(CONFIG_SCSI_IPR) += ipr.o obj-$(CONFIG_SCSI_SATA_SVW) += libata.o sata_svw.o obj-$(CONFIG_SCSI_ATA_PIIX) += libata.o ata_piix.o obj-$(CONFIG_SCSI_SATA_PROMISE) += libata.o sata_promise.o @@ -124,6 +126,7 @@ obj-$(CONFIG_SCSI_SATA_VIA) += libata.o sata_via.o obj-$(CONFIG_SCSI_SATA_VITESSE) += libata.o sata_vsc.o obj-$(CONFIG_SCSI_SATA_SIS) += libata.o sata_sis.o +obj-$(CONFIG_SCSI_SATA_SX4) += libata.o sata_sx4.o obj-$(CONFIG_ARM) += arm/ diff -Nru a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c --- a/drivers/scsi/aacraid/linit.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/aacraid/linit.c Tue May 18 23:38:06 2004 @@ -381,13 +381,15 @@ } } spin_unlock_irqrestore(&dev->list_lock, flags); + if (active) + break; - /* - * We can exit If all the commands are complete - */ - if (active == 0) - return SUCCESS; } + /* + * We can exit If all the commands are complete + */ + if (active == 0) + return SUCCESS; spin_unlock_irq(host->host_lock); scsi_sleep(HZ); spin_lock_irq(host->host_lock); diff -Nru a/drivers/scsi/aic7xxx/aic7770_osm.c b/drivers/scsi/aic7xxx/aic7770_osm.c --- a/drivers/scsi/aic7xxx/aic7770_osm.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/aic7xxx/aic7770_osm.c Tue May 18 23:38:08 2004 @@ -73,7 +73,7 @@ static int aic7770_linux_config(struct aic7770_identity *entry, aic7770_dev_t dev, u_int eisaBase); -void +int ahc_linux_eisa_init(void) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) @@ -82,7 +82,7 @@ int i; if (aic7xxx_probe_eisa_vl == 0) - return; + return -ENODEV; /* * Linux requires the EISA IDs to be specified in @@ -93,7 +93,7 @@ (ahc_num_aic7770_devs + 1), M_DEVBUF, M_NOWAIT); if (aic7770_driver.id_table == NULL) - return; + return -ENOMEM; for (eid = (struct eisa_device_id *)aic7770_driver.id_table, id = aic7770_ident_table, i = 0; @@ -109,15 +109,16 @@ } eid->sig[0] = 0; - eisa_driver_register(&aic7770_driver); + return eisa_driver_register(&aic7770_driver); #else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) */ struct aic7770_identity *entry; u_int slot; u_int eisaBase; u_int i; + int ret = -ENODEV; if (aic7xxx_probe_eisa_vl == 0) - return; + return ret; eisaBase = 0x1000 + AHC_EISA_SLOT_OFFSET; for (slot = 1; slot < NUMSLOTS; eisaBase+=0x1000, slot++) { @@ -146,24 +147,22 @@ continue; /* no EISA card in slot */ entry = aic7770_find_device(eisa_id); - if (entry != NULL) + if (entry != NULL) { aic7770_linux_config(entry, NULL, eisaBase); + ret = 0; + } } + return ret; #endif } void ahc_linux_eisa_exit(void) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) - if (aic7xxx_probe_eisa_vl == 0) - return; - - if (aic7770_driver.id_table != NULL) { + if(aic7xxx_probe_eisa_vl != 0 && aic7770_driver.id_table != NULL) { eisa_driver_unregister(&aic7770_driver); free(aic7770_driver.id_table, M_DEVBUF); } -#endif } static int diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c --- a/drivers/scsi/aic7xxx/aic79xx_osm.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/aic7xxx/aic79xx_osm.c Tue May 18 23:38:07 2004 @@ -2591,6 +2591,7 @@ sprintf(current->comm, "ahd_dv_%d", ahd->unit); #else daemonize("ahd_dv_%d", ahd->unit); + current->flags |= PF_FREEZE; #endif unlock_kernel(); diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c Tue May 18 23:38:05 2004 @@ -843,7 +843,8 @@ ahc_linux_detect(Scsi_Host_Template *template) { struct ahc_softc *ahc; - int found; + int found = 0; + int eisa_err, pci_err; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* @@ -891,28 +892,29 @@ */ ahc_list_lockinit(); -#ifdef CONFIG_PCI - ahc_linux_pci_init(); -#endif + pci_err = ahc_linux_pci_init(); + eisa_err = ahc_linux_eisa_init(); + + if(pci_err && eisa_err) + goto out; -#ifdef CONFIG_EISA - ahc_linux_eisa_init(); -#endif /* * Register with the SCSI layer all * controllers we've found. */ - found = 0; TAILQ_FOREACH(ahc, &ahc_tailq, links) { if (ahc_linux_register_host(ahc, template) == 0) found++; } +out: + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) spin_lock_irq(&io_request_lock); #endif aic7xxx_detect_complete++; + return (found); } @@ -1534,6 +1536,7 @@ /* Still equal. Sort by BIOS address, ioport, or bus/slot/func. */ switch (rvalue) { +#ifdef CONFIG_PCI case AHC_PCI: { char primary_channel; @@ -1566,6 +1569,7 @@ value = 1; break; } +#endif case AHC_EISA: if ((rahc->flags & AHC_BIOS_ENABLED) != 0) { value = rahc->platform_data->bios_address @@ -2296,6 +2300,7 @@ sprintf(current->comm, "ahc_dv_%d", ahc->unit); #else daemonize("ahc_dv_%d", ahc->unit); + current->flags |= PF_FREEZE; #endif unlock_kernel(); @@ -3969,11 +3974,10 @@ } static void -ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev) +__ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev) { struct ahc_linux_target *targ; - del_timer_sync(&dev->timer); targ = dev->target; targ->devices[dev->lun] = NULL; free(dev, M_DEVBUF); @@ -3983,6 +3987,13 @@ ahc_linux_free_target(ahc, targ); } +static void +ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev) +{ + del_timer_sync(&dev->timer); + __ahc_linux_free_device(ahc, dev); +} + void ahc_send_async(struct ahc_softc *ahc, char channel, u_int target, u_int lun, ac_code code, void *arg) @@ -4693,7 +4704,7 @@ ahc_linux_run_device_queue(ahc, dev); if (TAILQ_EMPTY(&dev->busyq) && dev->active == 0) - ahc_linux_free_device(ahc, dev); + __ahc_linux_free_device(ahc, dev); ahc_unlock(ahc, &s); } @@ -5067,11 +5078,17 @@ } } +static void ahc_linux_exit(void); + static int __init ahc_linux_init(void) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) - return (ahc_linux_detect(&aic7xxx_driver_template) ? 0 : -ENODEV); + int rc = ahc_linux_detect(&aic7xxx_driver_template); + if (rc) + return rc; + ahc_linux_exit(); + return -ENODEV; #else scsi_register_module(MODULE_SCSI_HA, &aic7xxx_driver_template); if (aic7xxx_driver_template.present == 0) { @@ -5084,7 +5101,7 @@ #endif } -static void __exit +static void ahc_linux_exit(void) { struct ahc_softc *ahc; @@ -5111,12 +5128,8 @@ */ scsi_unregister_module(MODULE_SCSI_HA, &aic7xxx_driver_template); #endif -#ifdef CONFIG_PCI ahc_linux_pci_exit(); -#endif -#ifdef CONFIG_EISA ahc_linux_eisa_exit(); -#endif } module_init(ahc_linux_init); diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h --- a/drivers/scsi/aic7xxx/aic7xxx_osm.h Tue May 18 23:38:06 2004 +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h Tue May 18 23:38:06 2004 @@ -840,11 +840,17 @@ #ifdef CONFIG_EISA extern uint32_t aic7xxx_probe_eisa_vl; -void ahc_linux_eisa_init(void); +int ahc_linux_eisa_init(void); void ahc_linux_eisa_exit(void); int aic7770_map_registers(struct ahc_softc *ahc, u_int port); int aic7770_map_int(struct ahc_softc *ahc, u_int irq); +#else +static inline int ahc_linux_eisa_init(void) { + return -ENODEV; +} +static inline void ahc_linux_eisa_exit(void) { +} #endif /******************************* PCI Routines *********************************/ @@ -931,6 +937,12 @@ ahc_get_pci_bus(ahc_dev_softc_t pci) { return (pci->bus->number); +} +#else +static inline int ahc_linux_pci_init(void) { + return -ENODEV; +} +static inline void ahc_linux_pci_exit(void) { } #endif diff -Nru a/drivers/scsi/aic7xxx_old/aic7xxx_proc.c b/drivers/scsi/aic7xxx_old/aic7xxx_proc.c --- a/drivers/scsi/aic7xxx_old/aic7xxx_proc.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/aic7xxx_old/aic7xxx_proc.c Tue May 18 23:38:09 2004 @@ -319,13 +319,13 @@ aic_dev->r_total+aic_dev->w_total, aic_dev->r_total, aic_dev->w_total); size += sprintf(BLS, "%s\n", HDRB); size += sprintf(BLS, " Reads:"); - for (i = 0; i < NUMBER(aic_dev->r_bins); i++) + for (i = 0; i < ARRAY_SIZE(aic_dev->r_bins); i++) { size += sprintf(BLS, " %10ld", aic_dev->r_bins[i]); } size += sprintf(BLS, "\n"); size += sprintf(BLS, " Writes:"); - for (i = 0; i < NUMBER(aic_dev->w_bins); i++) + for (i = 0; i < ARRAY_SIZE(aic_dev->w_bins); i++) { size += sprintf(BLS, " %10ld", aic_dev->w_bins[i]); } @@ -347,7 +347,7 @@ else { *start = buffer; - length = MIN(length, size - offset); + length = min_t(int, length, size - offset); memcpy(buffer, &aic7xxx_buffer[offset], length); } diff -Nru a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c --- a/drivers/scsi/aic7xxx_old.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/aic7xxx_old.c Tue May 18 23:38:06 2004 @@ -254,9 +254,6 @@ #define AIC7XXX_C_VERSION "5.2.6" -#define NUMBER(arr) (sizeof(arr) / sizeof(arr[0])) -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) #define ALL_TARGETS -1 #define ALL_CHANNELS -1 #define ALL_LUNS -1 @@ -1376,7 +1373,7 @@ while ((p = strsep(&s, ",.")) != NULL) { - for (i = 0; i < NUMBER(options); i++) + for (i = 0; i < ARRAY_SIZE(options); i++) { n = strlen(options[i].name); if (!strncmp(options[i].name, p, n)) @@ -1423,7 +1420,7 @@ else if (instance >= 0) instance++; if ( (device >= MAX_TARGETS) || - (instance >= NUMBER(aic7xxx_tag_info)) ) + (instance >= ARRAY_SIZE(aic7xxx_tag_info)) ) done = TRUE; tok++; if (!done) @@ -1447,7 +1444,7 @@ } } if ( (instance >= 0) && (device >= 0) && - (instance < NUMBER(aic7xxx_tag_info)) && + (instance < ARRAY_SIZE(aic7xxx_tag_info)) && (device < MAX_TARGETS) ) aic7xxx_tag_info[instance].tag_commands[device] = simple_strtoul(tok, NULL, 0) & 0xff; @@ -1658,7 +1655,7 @@ { int end_addr; - end_addr = MIN(address, skip_addr); + end_addr = min_t(int, address, skip_addr); address_offset += end_addr - i; i = skip_addr; } @@ -1884,7 +1881,7 @@ if(!(p->features & AHC_ULTRA3)) { *options = 0; - maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2); + maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2); } break; case MSG_EXT_PPR_OPTION_DT_CRC_QUICK: @@ -1892,7 +1889,7 @@ if(!(p->features & AHC_ULTRA3)) { *options = 0; - maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2); + maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2); } else { @@ -1916,7 +1913,7 @@ break; default: *options = 0; - maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2); + maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2); break; } syncrate = &aic7xxx_syncrates[maxsync]; @@ -2057,7 +2054,7 @@ else maxoffset = MAX_OFFSET_8BIT; } - *offset = MIN(*offset, maxoffset); + *offset = min(*offset, maxoffset); } /*+F************************************************************************* @@ -2570,7 +2567,7 @@ break; } } - scb_count = MIN( (i-1), p->scb_data->maxscbs - p->scb_data->numscbs); + scb_count = min( (i-1), p->scb_data->maxscbs - p->scb_data->numscbs); scb_ap = (struct aic7xxx_scb *)kmalloc(sizeof (struct aic7xxx_scb) * scb_count + sizeof(struct aic7xxx_scb_dma), GFP_ATOMIC); if (scb_ap == NULL) @@ -5042,7 +5039,7 @@ if(p->user[tindex].offset) { aic_dev->needsdtr_copy = 1; - aic_dev->goal.period = MAX(10,p->user[tindex].period); + aic_dev->goal.period = max_t(unsigned char, 10,p->user[tindex].period); if(p->features & AHC_ULTRA2) { aic_dev->goal.offset = MAX_OFFSET_ULTRA2; @@ -5086,8 +5083,8 @@ * the device isn't allowed to send values greater than the ones * we first sent to it. */ - new_period = MAX(period, aic_dev->goal.period); - new_offset = MIN(offset, aic_dev->goal.offset); + new_period = max_t(unsigned int, period, aic_dev->goal.period); + new_offset = min_t(unsigned int, offset, aic_dev->goal.offset); } /* @@ -5208,7 +5205,7 @@ if(p->user[tindex].offset) { aic_dev->needsdtr_copy = 1; - aic_dev->goal.period = MAX(10,p->user[tindex].period); + aic_dev->goal.period = max_t(unsigned char, 10, p->user[tindex].period); if(p->features & AHC_ULTRA2) { aic_dev->goal.offset = MAX_OFFSET_ULTRA2; @@ -6413,7 +6410,7 @@ unsigned char errno = aic_inb(p, ERROR); printk(KERN_ERR "(scsi%d) BRKADRINT error(0x%x):\n", p->host_no, errno); - for (i = 0; i < NUMBER(hard_error); i++) + for (i = 0; i < ARRAY_SIZE(hard_error); i++) { if (errno & hard_error[i].errno) { @@ -6562,7 +6559,7 @@ else { aic_dev->needsdtr = aic_dev->needsdtr_copy = 1; - aic_dev->goal.period = MAX(10, aic_dev->goal.period); + aic_dev->goal.period = max_t(unsigned char, 10, aic_dev->goal.period); aic_dev->goal.options = 0; } } @@ -6673,7 +6670,7 @@ } else { - if (p->instance >= NUMBER(aic7xxx_tag_info)) + if (p->instance >= ARRAY_SIZE(aic7xxx_tag_info)) { static int print_warning = TRUE; if(print_warning) @@ -6850,7 +6847,7 @@ buf[i] = inb(base + i); } - for (i = 0; i < NUMBER(AIC7xxx); i++) + for (i = 0; i < ARRAY_SIZE(AIC7xxx); i++) { /* * Signature match on enabled card? @@ -9199,7 +9196,7 @@ unsigned int devconfig, i, oldverbose; struct pci_dev *pdev = NULL; - for (i = 0; i < NUMBER(aic_pdevs); i++) + for (i = 0; i < ARRAY_SIZE(aic_pdevs); i++) { pdev = NULL; while ((pdev = pci_find_device(aic_pdevs[i].vendor_id, @@ -9678,7 +9675,9 @@ found++; continue; skip_pci_controller: +#ifdef CONFIG_PCI pci_release_regions(temp_p->pdev); +#endif kfree(temp_p); } /* Found an Adaptec PCI device. */ else /* Well, we found one, but we couldn't get any memory */ @@ -9698,7 +9697,7 @@ * EISA/VL-bus card signature probe. */ slot = MINSLOT; - while ( (slot <= MAXSLOT) && + while ( (slot <= MAXSLOT) && !(aic7xxx_no_probe) ) { base = SLOTBASE(slot) + MINREG; @@ -10097,7 +10096,7 @@ int i; left = found; - for (i=0; ipdev) release_region(p->base, MAXREG - MINREG); +#ifdef CONFIG_PCI else pci_release_regions(p->pdev); +#endif prev = NULL; next = first_aic7xxx; while(next != NULL) diff -Nru a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c --- a/drivers/scsi/ata_piix.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/ata_piix.c Tue May 18 23:38:07 2004 @@ -2,6 +2,10 @@ ata_piix.c - Intel PATA/SATA controllers + Maintained by: Jeff Garzik + Please ALWAYS copy linux-ide@vger.kernel.org + on emails. + Copyright 2003-2004 Red Hat Inc Copyright 2003-2004 Jeff Garzik @@ -132,6 +136,7 @@ .phy_reset = piix_pata_phy_reset, + .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, @@ -154,6 +159,7 @@ .phy_reset = piix_sata_phy_reset, + .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, diff -Nru a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c --- a/drivers/scsi/hosts.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/hosts.c Tue May 18 23:38:05 2004 @@ -345,7 +345,7 @@ } /** - * *scsi_host_get - inc a Scsi_Host ref count + * scsi_host_get - inc a Scsi_Host ref count * @shost: Pointer to Scsi_Host to inc. **/ struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost) @@ -357,7 +357,7 @@ } /** - * *scsi_host_put - dec a Scsi_Host ref count + * scsi_host_put - dec a Scsi_Host ref count * @shost: Pointer to Scsi_Host to dec. **/ void scsi_host_put(struct Scsi_Host *shost) diff -Nru a/drivers/scsi/imm.c b/drivers/scsi/imm.c --- a/drivers/scsi/imm.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/imm.c Tue May 18 23:38:09 2004 @@ -12,6 +12,18 @@ */ #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include /* The following #define is to avoid a clash with hosts.c */ #define IMM_PROBE_SPP 0x0001 @@ -20,22 +32,13 @@ #define IMM_PROBE_EPP17 0x0100 #define IMM_PROBE_EPP19 0x0200 -#include -#include -#include -#include -#include -#include -#include -#include "scsi.h" -#include "hosts.h" typedef struct { struct pardevice *dev; /* Parport device entry */ int base; /* Actual port address */ int base_hi; /* Hi Base address for ECP-ISA chipset */ int mode; /* Transfer mode */ - Scsi_Cmnd *cur_cmd; /* Current queued command */ + struct scsi_cmnd *cur_cmd; /* Current queued command */ struct work_struct imm_tq; /* Polling interrupt stuff */ unsigned long jstart; /* Jiffies at start */ unsigned failed:1; /* Failure flag */ @@ -613,7 +616,7 @@ return device_check(dev); } -static inline int imm_send_command(Scsi_Cmnd *cmd) +static inline int imm_send_command(struct scsi_cmnd *cmd) { imm_struct *dev = imm_dev(cmd->device->host); int k; @@ -633,7 +636,7 @@ * The driver appears to remain stable if we speed up the parallel port * i/o in this function, but not elsewhere. */ -static int imm_completion(Scsi_Cmnd *cmd) +static int imm_completion(struct scsi_cmnd *cmd) { /* Return codes: * -1 Error @@ -736,7 +739,7 @@ static void imm_interrupt(void *data) { imm_struct *dev = (imm_struct *) data; - Scsi_Cmnd *cmd = dev->cur_cmd; + struct scsi_cmnd *cmd = dev->cur_cmd; struct Scsi_Host *host = cmd->device->host; unsigned long flags; @@ -796,7 +799,7 @@ return; } -static int imm_engine(imm_struct *dev, Scsi_Cmnd *cmd) +static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd) { unsigned short ppb = dev->base; unsigned char l = 0, h = 0; @@ -937,7 +940,8 @@ return 0; } -static int imm_queuecommand(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)) +static int imm_queuecommand(struct scsi_cmnd *cmd, + void (*done)(struct scsi_cmnd *)) { imm_struct *dev = imm_dev(cmd->device->host); @@ -980,7 +984,7 @@ return 0; } -static int imm_abort(Scsi_Cmnd *cmd) +static int imm_abort(struct scsi_cmnd *cmd) { imm_struct *dev = imm_dev(cmd->device->host); /* @@ -1012,7 +1016,7 @@ w_ctr(base, 0x04); } -static int imm_reset(Scsi_Cmnd *cmd) +static int imm_reset(struct scsi_cmnd *cmd) { imm_struct *dev = imm_dev(cmd->device->host); @@ -1114,7 +1118,7 @@ return -ENODEV; } -static Scsi_Host_Template imm_template = { +static struct scsi_host_template imm_template = { .module = THIS_MODULE, .proc_name = "imm", .proc_info = imm_proc_info, diff -Nru a/drivers/scsi/imm.h b/drivers/scsi/imm.h --- a/drivers/scsi/imm.h Tue May 18 23:38:05 2004 +++ b/drivers/scsi/imm.h Tue May 18 23:38:05 2004 @@ -139,6 +139,6 @@ #define w_ctr(x,y) outb(y, (x)+2) #endif -static int imm_engine(imm_struct *, Scsi_Cmnd *); +static int imm_engine(imm_struct *, struct scsi_cmnd *); #endif /* _IMM_H */ diff -Nru a/drivers/scsi/ini9100u.c b/drivers/scsi/ini9100u.c --- a/drivers/scsi/ini9100u.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/ini9100u.c Tue May 18 23:38:06 2004 @@ -106,6 +106,8 @@ * - Changed the assumption that HZ = 100 * 10/17/03 mc - v1.04 * - added new DMA API support + * 06/01/04 jmd - v1.04a + * - Re-add reset_bus support **************************************************************************/ #define CVT_LINUX_VERSION(V,P,S) (V * 65536 + P * 256 + S) @@ -149,6 +151,7 @@ .queuecommand = i91u_queue, // .abort = i91u_abort, // .reset = i91u_reset, + .eh_bus_reset_handler = i91u_bus_reset, .bios_param = i91u_biosparam, .can_queue = 1, .this_id = 1, @@ -161,7 +164,7 @@ char *i91uCopyright = "Copyright (C) 1996-98"; char *i91uInitioName = "by Initio Corporation"; char *i91uProductName = "INI-9X00U/UW"; -char *i91uVersion = "v1.04"; +char *i91uVersion = "v1.04a"; #define TULSZ(sz) (sizeof(sz) / sizeof(sz[0])) #define TUL_RDWORD(x,y) (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) )) @@ -548,6 +551,15 @@ return tul_reset_scsi_bus(pHCB); else return tul_device_reset(pHCB, (ULONG) SCpnt, SCpnt->device->id, reset_flags); +} + +int i91u_bus_reset(Scsi_Cmnd * SCpnt) +{ + HCS *pHCB; + + pHCB = (HCS *) SCpnt->device->host->base; + tul_reset_scsi(pHCB, 0); + return SUCCESS; } /* diff -Nru a/drivers/scsi/ini9100u.h b/drivers/scsi/ini9100u.h --- a/drivers/scsi/ini9100u.h Tue May 18 23:38:07 2004 +++ b/drivers/scsi/ini9100u.h Tue May 18 23:38:07 2004 @@ -82,10 +82,11 @@ extern int i91u_queue(Scsi_Cmnd *, void (*done) (Scsi_Cmnd *)); extern int i91u_abort(Scsi_Cmnd *); extern int i91u_reset(Scsi_Cmnd *, unsigned int); +extern int i91u_bus_reset(Scsi_Cmnd *); extern int i91u_biosparam(struct scsi_device *, struct block_device *, sector_t, int *); -#define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.03g" +#define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.04a" #define VIRT_TO_BUS(i) (unsigned int) virt_to_bus((void *)(i)) #define ULONG unsigned long diff -Nru a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/ipr.c Tue May 18 23:38:09 2004 @@ -0,0 +1,6012 @@ +/* + * ipr.c -- driver for IBM Power Linux RAID adapters + * + * Written By: Brian King, IBM Corporation + * + * Copyright (C) 2003, 2004 IBM Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* + * Notes: + * + * This driver is used to control the following SCSI adapters: + * + * IBM iSeries: 5702, 5703, 2780, 5709, 570A, 570B + * + * IBM pSeries: PCI-X Dual Channel Ultra 320 SCSI RAID Adapter + * PCI-X Dual Channel Ultra 320 SCSI Adapter + * PCI-X Dual Channel Ultra 320 SCSI RAID Enablement Card + * Embedded SCSI adapter on p615 and p655 systems + * + * Supported Hardware Features: + * - Ultra 320 SCSI controller + * - PCI-X host interface + * - Embedded PowerPC RISC Processor and Hardware XOR DMA Engine + * - Non-Volatile Write Cache + * - Supports attachment of non-RAID disks, tape, and optical devices + * - RAID Levels 0, 5, 10 + * - Hot spare + * - Background Parity Checking + * - Background Data Scrubbing + * - Ability to increase the capacity of an existing RAID 5 disk array + * by adding disks + * + * Driver Features: + * - Tagged command queuing + * - Adapter microcode download + * - PCI hot plug + * - SCSI device hot plug + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ipr.h" + +/* + * Global Data + */ +static struct list_head ipr_ioa_head = LIST_HEAD_INIT(ipr_ioa_head); +static unsigned int ipr_log_level = IPR_DEFAULT_LOG_LEVEL; +static unsigned int ipr_max_speed = 1; +static int ipr_testmode = 0; +static spinlock_t ipr_driver_lock = SPIN_LOCK_UNLOCKED; + +/* This table describes the differences between DMA controller chips */ +static const struct ipr_chip_cfg_t ipr_chip_cfg[] = { + { /* Gemstone */ + .mailbox = 0x0042C, + .cache_line_size = 0x20, + { + .set_interrupt_mask_reg = 0x0022C, + .clr_interrupt_mask_reg = 0x00230, + .sense_interrupt_mask_reg = 0x0022C, + .clr_interrupt_reg = 0x00228, + .sense_interrupt_reg = 0x00224, + .ioarrin_reg = 0x00404, + .sense_uproc_interrupt_reg = 0x00214, + .set_uproc_interrupt_reg = 0x00214, + .clr_uproc_interrupt_reg = 0x00218 + } + }, + { /* Snipe */ + .mailbox = 0x0052C, + .cache_line_size = 0x20, + { + .set_interrupt_mask_reg = 0x00288, + .clr_interrupt_mask_reg = 0x0028C, + .sense_interrupt_mask_reg = 0x00288, + .clr_interrupt_reg = 0x00284, + .sense_interrupt_reg = 0x00280, + .ioarrin_reg = 0x00504, + .sense_uproc_interrupt_reg = 0x00290, + .set_uproc_interrupt_reg = 0x00290, + .clr_uproc_interrupt_reg = 0x00294 + } + }, +}; + +static int ipr_max_bus_speeds [] = { + IPR_80MBs_SCSI_RATE, IPR_U160_SCSI_RATE, IPR_U320_SCSI_RATE +}; + +MODULE_AUTHOR("Brian King "); +MODULE_DESCRIPTION("IBM Power RAID SCSI Adapter Driver"); +module_param_named(max_speed, ipr_max_speed, uint, 0); +MODULE_PARM_DESC(max_speed, "Maximum bus speed (0-2). Default: 1=U160. Speeds: 0=80 MB/s, 1=U160, 2=U320"); +module_param_named(log_level, ipr_log_level, uint, 0); +MODULE_PARM_DESC(log_level, "Set to 0 - 4 for increasing verbosity of device driver"); +module_param_named(testmode, ipr_testmode, int, 0); +MODULE_PARM_DESC(testmode, "DANGEROUS!!! Allows unsupported configurations"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(IPR_DRIVER_VERSION); + +static const char *ipr_gpdd_dev_end_states[] = { + "Command complete", + "Terminated by host", + "Terminated by device reset", + "Terminated by bus reset", + "Unknown", + "Command not started" +}; + +static const char *ipr_gpdd_dev_bus_phases[] = { + "Bus free", + "Arbitration", + "Selection", + "Message out", + "Command", + "Message in", + "Data out", + "Data in", + "Status", + "Reselection", + "Unknown" +}; + +/* A constant array of IOASCs/URCs/Error Messages */ +static const +struct ipr_error_table_t ipr_error_table[] = { + {0x00000000, 1, 1, + "8155: An unknown error was received"}, + {0x00330000, 0, 0, + "Soft underlength error"}, + {0x005A0000, 0, 0, + "Command to be cancelled not found"}, + {0x00808000, 0, 0, + "Qualified success"}, + {0x01080000, 1, 1, + "FFFE: Soft device bus error recovered by the IOA"}, + {0x01170600, 0, 1, + "FFF9: Device sector reassign successful"}, + {0x01170900, 0, 1, + "FFF7: Media error recovered by device rewrite procedures"}, + {0x01180200, 0, 1, + "7001: IOA sector reassignment successful"}, + {0x01180500, 0, 1, + "FFF9: Soft media error. Sector reassignment recommended"}, + {0x01180600, 0, 1, + "FFF7: Media error recovered by IOA rewrite procedures"}, + {0x01418000, 0, 1, + "FF3D: Soft PCI bus error recovered by the IOA"}, + {0x01440000, 1, 1, + "FFF6: Device hardware error recovered by the IOA"}, + {0x01448100, 0, 1, + "FFF6: Device hardware error recovered by the device"}, + {0x01448200, 1, 1, + "FF3D: Soft IOA error recovered by the IOA"}, + {0x01448300, 0, 1, + "FFFA: Undefined device response recovered by the IOA"}, + {0x014A0000, 1, 1, + "FFF6: Device bus error, message or command phase"}, + {0x015D0000, 0, 1, + "FFF6: Failure prediction threshold exceeded"}, + {0x015D9200, 0, 1, + "8009: Impending cache battery pack failure"}, + {0x02040400, 0, 0, + "34FF: Disk device format in progress"}, + {0x023F0000, 0, 0, + "Synchronization required"}, + {0x024E0000, 0, 0, + "No ready, IOA shutdown"}, + {0x02670100, 0, 1, + "3020: Storage subsystem configuration error"}, + {0x03110B00, 0, 0, + "FFF5: Medium error, data unreadable, recommend reassign"}, + {0x03110C00, 0, 0, + "7000: Medium error, data unreadable, do not reassign"}, + {0x03310000, 0, 1, + "FFF3: Disk media format bad"}, + {0x04050000, 0, 1, + "3002: Addressed device failed to respond to selection"}, + {0x04080000, 1, 1, + "3100: Device bus error"}, + {0x04080100, 0, 1, + "3109: IOA timed out a device command"}, + {0x04088000, 0, 0, + "3120: SCSI bus is not operational"}, + {0x04118000, 0, 1, + "9000: IOA reserved area data check"}, + {0x04118100, 0, 1, + "9001: IOA reserved area invalid data pattern"}, + {0x04118200, 0, 1, + "9002: IOA reserved area LRC error"}, + {0x04320000, 0, 1, + "102E: Out of alternate sectors for disk storage"}, + {0x04330000, 1, 1, + "FFF4: Data transfer underlength error"}, + {0x04338000, 1, 1, + "FFF4: Data transfer overlength error"}, + {0x043E0100, 0, 1, + "3400: Logical unit failure"}, + {0x04408500, 0, 1, + "FFF4: Device microcode is corrupt"}, + {0x04418000, 1, 1, + "8150: PCI bus error"}, + {0x04430000, 1, 0, + "Unsupported device bus message received"}, + {0x04440000, 1, 1, + "FFF4: Disk device problem"}, + {0x04448200, 1, 1, + "8150: Permanent IOA failure"}, + {0x04448300, 0, 1, + "3010: Disk device returned wrong response to IOA"}, + {0x04448400, 0, 1, + "8151: IOA microcode error"}, + {0x04448500, 0, 0, + "Device bus status error"}, + {0x04448600, 0, 1, + "8157: IOA error requiring IOA reset to recover"}, + {0x04490000, 0, 0, + "Message reject received from the device"}, + {0x04449200, 0, 1, + "8008: A permanent cache battery pack failure occurred"}, + {0x0444A000, 0, 1, + "9090: Disk unit has been modified after the last known status"}, + {0x0444A200, 0, 1, + "9081: IOA detected device error"}, + {0x0444A300, 0, 1, + "9082: IOA detected device error"}, + {0x044A0000, 1, 1, + "3110: Device bus error, message or command phase"}, + {0x04670400, 0, 1, + "9091: Incorrect hardware configuration change has been detected"}, + {0x046E0000, 0, 1, + "FFF4: Command to logical unit failed"}, + {0x05240000, 1, 0, + "Illegal request, invalid request type or request packet"}, + {0x05250000, 0, 0, + "Illegal request, invalid resource handle"}, + {0x05260000, 0, 0, + "Illegal request, invalid field in parameter list"}, + {0x05260100, 0, 0, + "Illegal request, parameter not supported"}, + {0x05260200, 0, 0, + "Illegal request, parameter value invalid"}, + {0x052C0000, 0, 0, + "Illegal request, command sequence error"}, + {0x06040500, 0, 1, + "9031: Array protection temporarily suspended, protection resuming"}, + {0x06040600, 0, 1, + "9040: Array protection temporarily suspended, protection resuming"}, + {0x06290000, 0, 1, + "FFFB: SCSI bus was reset"}, + {0x06290500, 0, 0, + "FFFE: SCSI bus transition to single ended"}, + {0x06290600, 0, 0, + "FFFE: SCSI bus transition to LVD"}, + {0x06298000, 0, 1, + "FFFB: SCSI bus was reset by another initiator"}, + {0x063F0300, 0, 1, + "3029: A device replacement has occurred"}, + {0x064C8000, 0, 1, + "9051: IOA cache data exists for a missing or failed device"}, + {0x06670100, 0, 1, + "9025: Disk unit is not supported at its physical location"}, + {0x06670600, 0, 1, + "3020: IOA detected a SCSI bus configuration error"}, + {0x06678000, 0, 1, + "3150: SCSI bus configuration error"}, + {0x06690200, 0, 1, + "9041: Array protection temporarily suspended"}, + {0x066B0200, 0, 1, + "9030: Array no longer protected due to missing or failed disk unit"}, + {0x07270000, 0, 0, + "Failure due to other device"}, + {0x07278000, 0, 1, + "9008: IOA does not support functions expected by devices"}, + {0x07278100, 0, 1, + "9010: Cache data associated with attached devices cannot be found"}, + {0x07278200, 0, 1, + "9011: Cache data belongs to devices other than those attached"}, + {0x07278400, 0, 1, + "9020: Array missing 2 or more devices with only 1 device present"}, + {0x07278500, 0, 1, + "9021: Array missing 2 or more devices with 2 or more devices present"}, + {0x07278600, 0, 1, + "9022: Exposed array is missing a required device"}, + {0x07278700, 0, 1, + "9023: Array member(s) not at required physical locations"}, + {0x07278800, 0, 1, + "9024: Array not functional due to present hardware configuration"}, + {0x07278900, 0, 1, + "9026: Array not functional due to present hardware configuration"}, + {0x07278A00, 0, 1, + "9027: Array is missing a device and parity is out of sync"}, + {0x07278B00, 0, 1, + "9028: Maximum number of arrays already exist"}, + {0x07278C00, 0, 1, + "9050: Required cache data cannot be located for a disk unit"}, + {0x07278D00, 0, 1, + "9052: Cache data exists for a device that has been modified"}, + {0x07278F00, 0, 1, + "9054: IOA resources not available due to previous problems"}, + {0x07279100, 0, 1, + "9092: Disk unit requires initialization before use"}, + {0x07279200, 0, 1, + "9029: Incorrect hardware configuration change has been detected"}, + {0x07279600, 0, 1, + "9060: One or more disk pairs are missing from an array"}, + {0x07279700, 0, 1, + "9061: One or more disks are missing from an array"}, + {0x07279800, 0, 1, + "9062: One or more disks are missing from an array"}, + {0x07279900, 0, 1, + "9063: Maximum number of functional arrays has been exceeded"}, + {0x0B260000, 0, 0, + "Aborted command, invalid descriptor"}, + {0x0B5A0000, 0, 0, + "Command terminated by host"} +}; + +static const struct ipr_ses_table_entry ipr_ses_table[] = { + { "2104-DL1 ", "XXXXXXXXXXXXXXXX", 80 }, + { "2104-TL1 ", "XXXXXXXXXXXXXXXX", 80 }, + { "HSBP07M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 7 slot */ + { "HSBP05M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 5 slot */ + { "HSBP05M S U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Bowtie */ + { "HSBP06E ASU2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* MartinFenning */ + { "2104-DU3 ", "XXXXXXXXXXXXXXXX", 160 }, + { "2104-TU3 ", "XXXXXXXXXXXXXXXX", 160 }, + { "HSBP04C RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 }, + { "HSBP06E RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 }, + { "St V1S2 ", "XXXXXXXXXXXXXXXX", 160 }, + { "HSBPD4M PU3SCSI", "XXXXXXX*XXXXXXXX", 160 }, + { "VSBPD1H U3SCSI", "XXXXXXX*XXXXXXXX", 160 } +}; + +/* + * Function Prototypes + */ +static int ipr_reset_alert(struct ipr_cmnd *); +static void ipr_process_ccn(struct ipr_cmnd *); +static void ipr_process_error(struct ipr_cmnd *); +static void ipr_reset_ioa_job(struct ipr_cmnd *); +static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *, + enum ipr_shutdown_type); + +#ifdef CONFIG_SCSI_IPR_TRACE +/** + * ipr_trc_hook - Add a trace entry to the driver trace + * @ipr_cmd: ipr command struct + * @type: trace type + * @add_data: additional data + * + * Return value: + * none + **/ +static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd, + u8 type, u32 add_data) +{ + struct ipr_trace_entry *trace_entry; + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + trace_entry = &ioa_cfg->trace[ioa_cfg->trace_index++]; + trace_entry->time = jiffies; + trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0]; + trace_entry->type = type; + trace_entry->cmd_index = ipr_cmd->cmd_index; + trace_entry->res_handle = ipr_cmd->ioarcb.res_handle; + trace_entry->add_data = add_data; +} +#else +#define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0) +#endif + +/** + * ipr_reinit_ipr_cmnd - Re-initialize an IPR Cmnd block for reuse + * @ipr_cmd: ipr command struct + * + * Return value: + * none + **/ +static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; + + memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); + ioarcb->write_data_transfer_length = 0; + ioarcb->read_data_transfer_length = 0; + ioarcb->write_ioadl_len = 0; + ioarcb->read_ioadl_len = 0; + ioasa->ioasc = 0; + ioasa->residual_data_len = 0; + + ipr_cmd->scsi_cmd = NULL; + ipr_cmd->sense_buffer[0] = 0; + ipr_cmd->dma_use_sg = 0; +} + +/** + * ipr_init_ipr_cmnd - Initialize an IPR Cmnd block + * @ipr_cmd: ipr command struct + * + * Return value: + * none + **/ +static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd) +{ + ipr_reinit_ipr_cmnd(ipr_cmd); + ipr_cmd->scratch = 0; + init_timer(&ipr_cmd->timer); +} + +/** + * ipr_get_free_ipr_cmnd - Get a free IPR Cmnd block + * @ioa_cfg: ioa config struct + * + * Return value: + * pointer to ipr command struct + **/ +static +struct ipr_cmnd *ipr_get_free_ipr_cmnd(struct ipr_ioa_cfg *ioa_cfg) +{ + struct ipr_cmnd *ipr_cmd; + + ipr_cmd = list_entry(ioa_cfg->free_q.next, struct ipr_cmnd, queue); + list_del(&ipr_cmd->queue); + ipr_init_ipr_cmnd(ipr_cmd); + + return ipr_cmd; +} + +/** + * ipr_unmap_sglist - Unmap scatterlist if mapped + * @ioa_cfg: ioa config struct + * @ipr_cmd: ipr command struct + * + * Return value: + * nothing + **/ +static void ipr_unmap_sglist(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_cmnd *ipr_cmd) +{ + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + + if (ipr_cmd->dma_use_sg) { + if (scsi_cmd->use_sg > 0) { + pci_unmap_sg(ioa_cfg->pdev, scsi_cmd->request_buffer, + scsi_cmd->use_sg, + scsi_cmd->sc_data_direction); + } else { + pci_unmap_single(ioa_cfg->pdev, ipr_cmd->dma_handle, + scsi_cmd->request_bufflen, + scsi_cmd->sc_data_direction); + } + } +} + +/** + * ipr_mask_and_clear_interrupts - Mask all and clear specified interrupts + * @ioa_cfg: ioa config struct + * @clr_ints: interrupts to clear + * + * This function masks all interrupts on the adapter, then clears the + * interrupts specified in the mask + * + * Return value: + * none + **/ +static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg, + u32 clr_ints) +{ + volatile u32 int_reg; + + /* Stop new interrupts */ + ioa_cfg->allow_interrupts = 0; + + /* Set interrupt mask to stop all new interrupts */ + writel(~0, ioa_cfg->regs.set_interrupt_mask_reg); + + /* Clear any pending interrupts */ + writel(clr_ints, ioa_cfg->regs.clr_interrupt_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_reg); +} + +/** + * ipr_save_pcix_cmd_reg - Save PCI-X command register + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / -EIO on failure + **/ +static int ipr_save_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg) +{ + int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX); + + if (pcix_cmd_reg == 0) { + dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n"); + return -EIO; + } + + if (pci_read_config_word(ioa_cfg->pdev, pcix_cmd_reg, + &ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) { + dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n"); + return -EIO; + } + + ioa_cfg->saved_pcix_cmd_reg |= PCI_X_CMD_DPERR_E | PCI_X_CMD_ERO; + return 0; +} + +/** + * ipr_set_pcix_cmd_reg - Setup PCI-X command register + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / -EIO on failure + **/ +static int ipr_set_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg) +{ + int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX); + + if (pcix_cmd_reg) { + if (pci_write_config_word(ioa_cfg->pdev, pcix_cmd_reg, + ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) { + dev_err(&ioa_cfg->pdev->dev, "Failed to setup PCI-X command register\n"); + return -EIO; + } + } else { + dev_err(&ioa_cfg->pdev->dev, + "Failed to setup PCI-X command register\n"); + return -EIO; + } + + return 0; +} + +/** + * ipr_scsi_eh_done - mid-layer done function for aborted ops + * @ipr_cmd: ipr command struct + * + * This function is invoked by the interrupt handler for + * ops generated by the SCSI mid-layer which are being aborted. + * + * Return value: + * none + **/ +static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + + scsi_cmd->result |= (DID_ERROR << 16); + + ipr_unmap_sglist(ioa_cfg, ipr_cmd); + scsi_cmd->scsi_done(scsi_cmd); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); +} + +/** + * ipr_fail_all_ops - Fails all outstanding ops. + * @ioa_cfg: ioa config struct + * + * This function fails all outstanding ops. + * + * Return value: + * none + **/ +static void ipr_fail_all_ops(struct ipr_ioa_cfg *ioa_cfg) +{ + struct ipr_cmnd *ipr_cmd, *temp; + + ENTER; + list_for_each_entry_safe(ipr_cmd, temp, &ioa_cfg->pending_q, queue) { + list_del(&ipr_cmd->queue); + + ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_IOA_WAS_RESET); + ipr_cmd->ioasa.ilid = cpu_to_be32(IPR_DRIVER_ILID); + + if (ipr_cmd->scsi_cmd) + ipr_cmd->done = ipr_scsi_eh_done; + + ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, IPR_IOASC_IOA_WAS_RESET); + del_timer(&ipr_cmd->timer); + ipr_cmd->done(ipr_cmd); + } + + LEAVE; +} + +/** + * ipr_do_req - Send driver initiated requests. + * @ipr_cmd: ipr command struct + * @done: done function + * @timeout_func: timeout function + * @timeout: timeout value + * + * This function sends the specified command to the adapter with the + * timeout given. The done function is invoked on command completion. + * + * Return value: + * none + **/ +static void ipr_do_req(struct ipr_cmnd *ipr_cmd, + void (*done) (struct ipr_cmnd *), + void (*timeout_func) (struct ipr_cmnd *), u32 timeout) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q); + + ipr_cmd->done = done; + + ipr_cmd->timer.data = (unsigned long) ipr_cmd; + ipr_cmd->timer.expires = jiffies + timeout; + ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func; + + add_timer(&ipr_cmd->timer); + + ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0); + + mb(); + writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr), + ioa_cfg->regs.ioarrin_reg); +} + +/** + * ipr_internal_cmd_done - Op done function for an internally generated op. + * @ipr_cmd: ipr command struct + * + * This function is the op done function for an internally generated, + * blocking op. It simply wakes the sleeping thread. + * + * Return value: + * none + **/ +static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd) +{ + if (ipr_cmd->sibling) + ipr_cmd->sibling = NULL; + else + complete(&ipr_cmd->completion); +} + +/** + * ipr_send_blocking_cmd - Send command and sleep on its completion. + * @ipr_cmd: ipr command struct + * @timeout_func: function to invoke if command times out + * @timeout: timeout + * + * Return value: + * none + **/ +static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd, + void (*timeout_func) (struct ipr_cmnd *ipr_cmd), + u32 timeout) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + init_completion(&ipr_cmd->completion); + ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout); + + spin_unlock_irq(ioa_cfg->host->host_lock); + wait_for_completion(&ipr_cmd->completion); + spin_lock_irq(ioa_cfg->host->host_lock); +} + +/** + * ipr_send_hcam - Send an HCAM to the adapter. + * @ioa_cfg: ioa config struct + * @type: HCAM type + * @hostrcb: hostrcb struct + * + * This function will send a Host Controlled Async command to the adapter. + * If HCAMs are currently not allowed to be issued to the adapter, it will + * place the hostrcb on the free queue. + * + * Return value: + * none + **/ +static void ipr_send_hcam(struct ipr_ioa_cfg *ioa_cfg, u8 type, + struct ipr_hostrcb *hostrcb) +{ + struct ipr_cmnd *ipr_cmd; + struct ipr_ioarcb *ioarcb; + + if (ioa_cfg->allow_cmds) { + ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q); + list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q); + + ipr_cmd->hostrcb = hostrcb; + ioarcb = &ipr_cmd->ioarcb; + + ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM; + ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC; + ioarcb->cmd_pkt.cdb[1] = type; + ioarcb->cmd_pkt.cdb[7] = (IPR_HOSTRCB_SZ >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[8] = IPR_HOSTRCB_SZ & 0xff; + + ioarcb->read_data_transfer_length = cpu_to_be32(IPR_HOSTRCB_SZ); + ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ipr_cmd->ioadl[0].flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | IPR_HOSTRCB_SZ); + ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma); + + if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE) + ipr_cmd->done = ipr_process_ccn; + else + ipr_cmd->done = ipr_process_error; + + ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR); + + mb(); + writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr), + ioa_cfg->regs.ioarrin_reg); + } else { + list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q); + } +} + +/** + * ipr_init_res_entry - Initialize a resource entry struct. + * @res: resource entry struct + * + * Return value: + * none + **/ +static void ipr_init_res_entry(struct ipr_resource_entry *res) +{ + res->needs_sync_complete = 1; + res->in_erp = 0; + res->add_to_ml = 0; + res->del_from_ml = 0; + res->resetting_device = 0; + res->tcq_active = 0; + res->qdepth = IPR_MAX_CMD_PER_LUN; + res->sdev = NULL; +} + +/** + * ipr_handle_config_change - Handle a config change from the adapter + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb + * + * Return value: + * none + **/ +static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + struct ipr_resource_entry *res = NULL; + struct ipr_config_table_entry *cfgte; + u32 is_ndn = 1; + + cfgte = &hostrcb->ccn.cfgte; + + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr, + sizeof(cfgte->res_addr))) { + is_ndn = 0; + break; + } + } + + if (is_ndn) { + if (list_empty(&ioa_cfg->free_res_q)) { + ipr_send_hcam(ioa_cfg, + IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, + hostrcb); + return; + } + + res = list_entry(ioa_cfg->free_res_q.next, + struct ipr_resource_entry, queue); + + list_del(&res->queue); + ipr_init_res_entry(res); + list_add_tail(&res->queue, &ioa_cfg->used_res_q); + } + + memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry)); + + if (hostrcb->notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { + if (res->sdev) { + res->sdev->hostdata = NULL; + res->del_from_ml = 1; + if (ioa_cfg->allow_ml_add_del) + schedule_work(&ioa_cfg->work_q); + } else + list_move_tail(&res->queue, &ioa_cfg->free_res_q); + } else if (!res->sdev) { + res->add_to_ml = 1; + if (ioa_cfg->allow_ml_add_del) + schedule_work(&ioa_cfg->work_q); + } + + ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb); +} + +/** + * ipr_process_ccn - Op done function for a CCN. + * @ipr_cmd: ipr command struct + * + * This function is the op done function for a configuration + * change notification host controlled async from the adapter. + * + * Return value: + * none + **/ +static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb; + u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + list_del(&hostrcb->queue); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + + if (ioasc) { + if (ioasc != IPR_IOASC_IOA_WAS_RESET) + dev_err(&ioa_cfg->pdev->dev, + "Host RCB failed with IOASC: 0x%08X\n", ioasc); + + ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb); + } else { + ipr_handle_config_change(ioa_cfg, hostrcb); + } +} + +/** + * ipr_log_vpd - Log the passed VPD to the error log. + * @vpids: vendor/product id struct + * @serial_num: serial number string + * + * Return value: + * none + **/ +static void ipr_log_vpd(struct ipr_std_inq_vpids *vpids, u8 *serial_num) +{ + char buffer[max_t(int, sizeof(struct ipr_std_inq_vpids), + IPR_SERIAL_NUM_LEN) + 1]; + + memcpy(buffer, vpids, sizeof(struct ipr_std_inq_vpids)); + buffer[sizeof(struct ipr_std_inq_vpids)] = '\0'; + ipr_err("Vendor/Product ID: %s\n", buffer); + + memcpy(buffer, serial_num, IPR_SERIAL_NUM_LEN); + buffer[IPR_SERIAL_NUM_LEN] = '\0'; + ipr_err(" Serial Number: %s\n", buffer); +} + +/** + * ipr_log_cache_error - Log a cache error. + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb struct + * + * Return value: + * none + **/ +static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + struct ipr_hostrcb_type_02_error *error = &hostrcb->error.type_02_error; + + ipr_err("-----Current Configuration-----\n"); + ipr_err("Cache Directory Card Information:\n"); + ipr_log_vpd(&error->ioa_vpids, error->ioa_sn); + ipr_err("Adapter Card Information:\n"); + ipr_log_vpd(&error->cfc_vpids, error->cfc_sn); + + ipr_err("-----Expected Configuration-----\n"); + ipr_err("Cache Directory Card Information:\n"); + ipr_log_vpd(&error->ioa_last_attached_to_cfc_vpids, + error->ioa_last_attached_to_cfc_sn); + ipr_err("Adapter Card Information:\n"); + ipr_log_vpd(&error->cfc_last_attached_to_ioa_vpids, + error->cfc_last_attached_to_ioa_sn); + + ipr_err("Additional IOA Data: %08X %08X %08X\n", + be32_to_cpu(error->ioa_data[0]), + be32_to_cpu(error->ioa_data[1]), + be32_to_cpu(error->ioa_data[2])); +} + +/** + * ipr_log_config_error - Log a configuration error. + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb struct + * + * Return value: + * none + **/ +static void ipr_log_config_error(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + int errors_logged, i; + struct ipr_hostrcb_device_data_entry *dev_entry; + + errors_logged = be32_to_cpu(hostrcb->error.type_03_error.errors_logged); + + ipr_err("Device Errors Detected/Logged: %d/%d\n", + be32_to_cpu(hostrcb->error.type_03_error.errors_detected), + errors_logged); + + dev_entry = hostrcb->error.type_03_error.dev_entry; + + for (i = 0; i < errors_logged; i++, dev_entry++) { + ipr_err_separator; + + if (dev_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) { + ipr_err("Device %d: missing\n", i + 1); + } else { + ipr_err("Device %d: %d:%d:%d:%d\n", i + 1, + ioa_cfg->host->host_no, dev_entry->dev_res_addr.bus, + dev_entry->dev_res_addr.target, dev_entry->dev_res_addr.lun); + } + ipr_log_vpd(&dev_entry->dev_vpids, dev_entry->dev_sn); + + ipr_err("-----New Device Information-----\n"); + ipr_log_vpd(&dev_entry->new_dev_vpids, dev_entry->new_dev_sn); + + ipr_err("Cache Directory Card Information:\n"); + ipr_log_vpd(&dev_entry->ioa_last_with_dev_vpids, + dev_entry->ioa_last_with_dev_sn); + + ipr_err("Adapter Card Information:\n"); + ipr_log_vpd(&dev_entry->cfc_last_with_dev_vpids, + dev_entry->cfc_last_with_dev_sn); + + ipr_err("Additional IOA Data: %08X %08X %08X %08X %08X\n", + be32_to_cpu(dev_entry->ioa_data[0]), + be32_to_cpu(dev_entry->ioa_data[1]), + be32_to_cpu(dev_entry->ioa_data[2]), + be32_to_cpu(dev_entry->ioa_data[3]), + be32_to_cpu(dev_entry->ioa_data[4])); + } +} + +/** + * ipr_log_array_error - Log an array configuration error. + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb struct + * + * Return value: + * none + **/ +static void ipr_log_array_error(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + int i; + struct ipr_hostrcb_type_04_error *error; + struct ipr_hostrcb_array_data_entry *array_entry; + u8 zero_sn[IPR_SERIAL_NUM_LEN]; + + memset(zero_sn, '0', IPR_SERIAL_NUM_LEN); + + error = &hostrcb->error.type_04_error; + + ipr_err_separator; + + ipr_err("RAID %s Array Configuration: %d:%d:%d:%d\n", + error->protection_level, + ioa_cfg->host->host_no, + error->last_func_vset_res_addr.bus, + error->last_func_vset_res_addr.target, + error->last_func_vset_res_addr.lun); + + ipr_err_separator; + + array_entry = error->array_member; + + for (i = 0; i < 18; i++) { + if (!memcmp(array_entry->serial_num, zero_sn, IPR_SERIAL_NUM_LEN)) + continue; + + if (error->exposed_mode_adn == i) { + ipr_err("Exposed Array Member %d:\n", i); + } else { + ipr_err("Array Member %d:\n", i); + } + + ipr_log_vpd(&array_entry->vpids, array_entry->serial_num); + + if (array_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) { + ipr_err("Current Location: unknown\n"); + } else { + ipr_err("Current Location: %d:%d:%d:%d\n", + ioa_cfg->host->host_no, + array_entry->dev_res_addr.bus, + array_entry->dev_res_addr.target, + array_entry->dev_res_addr.lun); + } + + if (array_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) { + ipr_err("Expected Location: unknown\n"); + } else { + ipr_err("Expected Location: %d:%d:%d:%d\n", + ioa_cfg->host->host_no, + array_entry->expected_dev_res_addr.bus, + array_entry->expected_dev_res_addr.target, + array_entry->expected_dev_res_addr.lun); + } + + ipr_err_separator; + + if (i == 9) + array_entry = error->array_member2; + else + array_entry++; + } +} + +/** + * ipr_log_generic_error - Log an adapter error. + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb struct + * + * Return value: + * none + **/ +static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + int i; + int ioa_data_len = be32_to_cpu(hostrcb->length); + + if (ioa_data_len == 0) + return; + + ipr_err("IOA Error Data:\n"); + ipr_err("Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F\n"); + + for (i = 0; i < ioa_data_len / 4; i += 4) { + ipr_err("%08X: %08X %08X %08X %08X\n", i*4, + be32_to_cpu(hostrcb->raw.data[i]), + be32_to_cpu(hostrcb->raw.data[i+1]), + be32_to_cpu(hostrcb->raw.data[i+2]), + be32_to_cpu(hostrcb->raw.data[i+3])); + } +} + +/** + * ipr_get_error - Find the specfied IOASC in the ipr_error_table. + * @ioasc: IOASC + * + * This function will return the index of into the ipr_error_table + * for the specified IOASC. If the IOASC is not in the table, + * 0 will be returned, which points to the entry used for unknown errors. + * + * Return value: + * index into the ipr_error_table + **/ +static u32 ipr_get_error(u32 ioasc) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(ipr_error_table); i++) + if (ipr_error_table[i].ioasc == ioasc) + return i; + + return 0; +} + +/** + * ipr_handle_log_data - Log an adapter error. + * @ioa_cfg: ioa config struct + * @hostrcb: hostrcb struct + * + * This function logs an adapter error to the system. + * + * Return value: + * none + **/ +static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_hostrcb *hostrcb) +{ + u32 ioasc; + int error_index; + + if (hostrcb->notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY) + return; + + if (hostrcb->notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST) + dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n"); + + ioasc = be32_to_cpu(hostrcb->error.failing_dev_ioasc); + + if (ioasc == IPR_IOASC_BUS_WAS_RESET || + ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) { + /* Tell the midlayer we had a bus reset so it will handle the UA properly */ + scsi_report_bus_reset(ioa_cfg->host, + hostrcb->error.failing_dev_res_addr.bus); + } + + error_index = ipr_get_error(ioasc); + + if (!ipr_error_table[error_index].log_hcam) + return; + + if (ipr_is_device(&hostrcb->error.failing_dev_res_addr)) { + ipr_res_err(ioa_cfg, hostrcb->error.failing_dev_res_addr, + "%s\n", ipr_error_table[error_index].error); + } else { + dev_err(&ioa_cfg->pdev->dev, "%s\n", + ipr_error_table[error_index].error); + } + + /* Set indication we have logged an error */ + ioa_cfg->errors_logged++; + + if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) + return; + + switch (hostrcb->overlay_id) { + case IPR_HOST_RCB_OVERLAY_ID_1: + ipr_log_generic_error(ioa_cfg, hostrcb); + break; + case IPR_HOST_RCB_OVERLAY_ID_2: + ipr_log_cache_error(ioa_cfg, hostrcb); + break; + case IPR_HOST_RCB_OVERLAY_ID_3: + ipr_log_config_error(ioa_cfg, hostrcb); + break; + case IPR_HOST_RCB_OVERLAY_ID_4: + case IPR_HOST_RCB_OVERLAY_ID_6: + ipr_log_array_error(ioa_cfg, hostrcb); + break; + case IPR_HOST_RCB_OVERLAY_ID_DEFAULT: + ipr_log_generic_error(ioa_cfg, hostrcb); + break; + default: + dev_err(&ioa_cfg->pdev->dev, + "Unknown error received. Overlay ID: %d\n", + hostrcb->overlay_id); + break; + } +} + +/** + * ipr_process_error - Op done function for an adapter error log. + * @ipr_cmd: ipr command struct + * + * This function is the op done function for an error log host + * controlled async from the adapter. It will log the error and + * send the HCAM back to the adapter. + * + * Return value: + * none + **/ +static void ipr_process_error(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb; + u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + list_del(&hostrcb->queue); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + + if (!ioasc) { + ipr_handle_log_data(ioa_cfg, hostrcb); + } else if (ioasc != IPR_IOASC_IOA_WAS_RESET) { + dev_err(&ioa_cfg->pdev->dev, + "Host RCB failed with IOASC: 0x%08X\n", ioasc); + } + + ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb); +} + +/** + * ipr_timeout - An internally generated op has timed out. + * @ipr_cmd: ipr command struct + * + * This function blocks host requests and initiates an + * adapter reset. + * + * Return value: + * none + **/ +static void ipr_timeout(struct ipr_cmnd *ipr_cmd) +{ + unsigned long lock_flags = 0; + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + ENTER; + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + ioa_cfg->errors_logged++; + dev_err(&ioa_cfg->pdev->dev, + "Adapter being reset due to command timeout.\n"); + + if (WAIT_FOR_DUMP == ioa_cfg->sdt_state) + ioa_cfg->sdt_state = GET_DUMP; + + if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE); + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + LEAVE; +} + +/** + * ipr_reset_reload - Reset/Reload the IOA + * @ioa_cfg: ioa config struct + * @shutdown_type: shutdown type + * + * This function resets the adapter and re-initializes it. + * This function assumes that all new host commands have been stopped. + * Return value: + * SUCCESS / FAILED + **/ +static int ipr_reset_reload(struct ipr_ioa_cfg *ioa_cfg, + enum ipr_shutdown_type shutdown_type) +{ + if (!ioa_cfg->in_reset_reload) + ipr_initiate_ioa_reset(ioa_cfg, shutdown_type); + + spin_unlock_irq(ioa_cfg->host->host_lock); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + spin_lock_irq(ioa_cfg->host->host_lock); + + /* If we got hit with a host reset while we were already resetting + the adapter for some reason, and the reset failed. */ + if (ioa_cfg->ioa_is_dead) { + ipr_trace; + return FAILED; + } + + return SUCCESS; +} + +/** + * ipr_find_ses_entry - Find matching SES in SES table + * @res: resource entry struct of SES + * + * Return value: + * pointer to SES table entry / NULL on failure + **/ +static const struct ipr_ses_table_entry * +ipr_find_ses_entry(struct ipr_resource_entry *res) +{ + int i, j, matches; + const struct ipr_ses_table_entry *ste = ipr_ses_table; + + for (i = 0; i < ARRAY_SIZE(ipr_ses_table); i++, ste++) { + for (j = 0, matches = 0; j < IPR_PROD_ID_LEN; j++) { + if (ste->compare_product_id_byte[j] == 'X') { + if (res->cfgte.std_inq_data.vpids.product_id[j] == ste->product_id[j]) + matches++; + else + break; + } else + matches++; + } + + if (matches == IPR_PROD_ID_LEN) + return ste; + } + + return NULL; +} + +/** + * ipr_get_max_scsi_speed - Determine max SCSI speed for a given bus + * @ioa_cfg: ioa config struct + * @bus: SCSI bus + * @bus_width: bus width + * + * Return value: + * SCSI bus speed in units of 100KHz, 1600 is 160 MHz + * For a 2-byte wide SCSI bus, the maximum transfer speed is + * twice the maximum transfer rate (e.g. for a wide enabled bus, + * max 160MHz = max 320MB/sec). + **/ +static u32 ipr_get_max_scsi_speed(struct ipr_ioa_cfg *ioa_cfg, u8 bus, u8 bus_width) +{ + struct ipr_resource_entry *res; + const struct ipr_ses_table_entry *ste; + u32 max_xfer_rate = IPR_MAX_SCSI_RATE(bus_width); + + /* Loop through each config table entry in the config table buffer */ + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (!(IPR_IS_SES_DEVICE(res->cfgte.std_inq_data))) + continue; + + if (bus != res->cfgte.res_addr.bus) + continue; + + if (!(ste = ipr_find_ses_entry(res))) + continue; + + max_xfer_rate = (ste->max_bus_speed_limit * 10) / (bus_width / 8); + } + + return max_xfer_rate; +} + +/** + * ipr_wait_iodbg_ack - Wait for an IODEBUG ACK from the IOA + * @ioa_cfg: ioa config struct + * @max_delay: max delay in micro-seconds to wait + * + * Waits for an IODEBUG ACK from the IOA, doing busy looping. + * + * Return value: + * 0 on success / other on failure + **/ +static int ipr_wait_iodbg_ack(struct ipr_ioa_cfg *ioa_cfg, int max_delay) +{ + volatile u32 pcii_reg; + int delay = 1; + + /* Read interrupt reg until IOA signals IO Debug Acknowledge */ + while (delay < max_delay) { + pcii_reg = readl(ioa_cfg->regs.sense_interrupt_reg); + + if (pcii_reg & IPR_PCII_IO_DEBUG_ACKNOWLEDGE) + return 0; + + /* udelay cannot be used if delay is more than a few milliseconds */ + if ((delay / 1000) > MAX_UDELAY_MS) + mdelay(delay / 1000); + else + udelay(delay); + + delay += delay; + } + return -EIO; +} + +/** + * ipr_get_ldump_data_section - Dump IOA memory + * @ioa_cfg: ioa config struct + * @start_addr: adapter address to dump + * @dest: destination kernel buffer + * @length_in_words: length to dump in 4 byte words + * + * Return value: + * 0 on success / -EIO on failure + **/ +static int ipr_get_ldump_data_section(struct ipr_ioa_cfg *ioa_cfg, + u32 start_addr, + u32 *dest, u32 length_in_words) +{ + volatile u32 temp_pcii_reg; + int i, delay = 0; + + /* Write IOA interrupt reg starting LDUMP state */ + writel((IPR_UPROCI_RESET_ALERT | IPR_UPROCI_IO_DEBUG_ALERT), + ioa_cfg->regs.set_uproc_interrupt_reg); + + /* Wait for IO debug acknowledge */ + if (ipr_wait_iodbg_ack(ioa_cfg, + IPR_LDUMP_MAX_LONG_ACK_DELAY_IN_USEC)) { + dev_err(&ioa_cfg->pdev->dev, + "IOA dump long data transfer timeout\n"); + return -EIO; + } + + /* Signal LDUMP interlocked - clear IO debug ack */ + writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE, + ioa_cfg->regs.clr_interrupt_reg); + + /* Write Mailbox with starting address */ + writel(start_addr, ioa_cfg->ioa_mailbox); + + /* Signal address valid - clear IOA Reset alert */ + writel(IPR_UPROCI_RESET_ALERT, + ioa_cfg->regs.clr_uproc_interrupt_reg); + + for (i = 0; i < length_in_words; i++) { + /* Wait for IO debug acknowledge */ + if (ipr_wait_iodbg_ack(ioa_cfg, + IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC)) { + dev_err(&ioa_cfg->pdev->dev, + "IOA dump short data transfer timeout\n"); + return -EIO; + } + + /* Read data from mailbox and increment destination pointer */ + *dest = cpu_to_be32(readl(ioa_cfg->ioa_mailbox)); + dest++; + + /* For all but the last word of data, signal data received */ + if (i < (length_in_words - 1)) { + /* Signal dump data received - Clear IO debug Ack */ + writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE, + ioa_cfg->regs.clr_interrupt_reg); + } + } + + /* Signal end of block transfer. Set reset alert then clear IO debug ack */ + writel(IPR_UPROCI_RESET_ALERT, + ioa_cfg->regs.set_uproc_interrupt_reg); + + writel(IPR_UPROCI_IO_DEBUG_ALERT, + ioa_cfg->regs.clr_uproc_interrupt_reg); + + /* Signal dump data received - Clear IO debug Ack */ + writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE, + ioa_cfg->regs.clr_interrupt_reg); + + /* Wait for IOA to signal LDUMP exit - IOA reset alert will be cleared */ + while (delay < IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC) { + temp_pcii_reg = + readl(ioa_cfg->regs.sense_uproc_interrupt_reg); + + if (!(temp_pcii_reg & IPR_UPROCI_RESET_ALERT)) + return 0; + + udelay(10); + delay += 10; + } + + return 0; +} + +#ifdef CONFIG_SCSI_IPR_DUMP +/** + * ipr_sdt_copy - Copy Smart Dump Table to kernel buffer + * @ioa_cfg: ioa config struct + * @pci_address: adapter address + * @length: length of data to copy + * + * Copy data from PCI adapter to kernel buffer. + * Note: length MUST be a 4 byte multiple + * Return value: + * 0 on success / other on failure + **/ +static int ipr_sdt_copy(struct ipr_ioa_cfg *ioa_cfg, + unsigned long pci_address, u32 length) +{ + int bytes_copied = 0; + int cur_len, rc, rem_len, rem_page_len; + u32 *page; + unsigned long lock_flags = 0; + struct ipr_ioa_dump *ioa_dump = &ioa_cfg->dump->ioa_dump; + + while (bytes_copied < length && + (ioa_dump->hdr.len + bytes_copied) < IPR_MAX_IOA_DUMP_SIZE) { + if (ioa_dump->page_offset >= PAGE_SIZE || + ioa_dump->page_offset == 0) { + page = (u32 *)__get_free_page(GFP_ATOMIC); + + if (!page) { + ipr_trace; + return bytes_copied; + } + + ioa_dump->page_offset = 0; + ioa_dump->ioa_data[ioa_dump->next_page_index] = page; + ioa_dump->next_page_index++; + } else + page = ioa_dump->ioa_data[ioa_dump->next_page_index - 1]; + + rem_len = length - bytes_copied; + rem_page_len = PAGE_SIZE - ioa_dump->page_offset; + cur_len = min(rem_len, rem_page_len); + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + if (ioa_cfg->sdt_state == ABORT_DUMP) { + rc = -EIO; + } else { + rc = ipr_get_ldump_data_section(ioa_cfg, + pci_address + bytes_copied, + &page[ioa_dump->page_offset / 4], + (cur_len / sizeof(u32))); + } + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + if (!rc) { + ioa_dump->page_offset += cur_len; + bytes_copied += cur_len; + } else { + ipr_trace; + break; + } + schedule(); + } + + return bytes_copied; +} + +/** + * ipr_init_dump_entry_hdr - Initialize a dump entry header. + * @hdr: dump entry header struct + * + * Return value: + * nothing + **/ +static void ipr_init_dump_entry_hdr(struct ipr_dump_entry_header *hdr) +{ + hdr->eye_catcher = IPR_DUMP_EYE_CATCHER; + hdr->num_elems = 1; + hdr->offset = sizeof(*hdr); + hdr->status = IPR_DUMP_STATUS_SUCCESS; +} + +/** + * ipr_dump_ioa_type_data - Fill in the adapter type in the dump. + * @ioa_cfg: ioa config struct + * @driver_dump: driver dump struct + * + * Return value: + * nothing + **/ +static void ipr_dump_ioa_type_data(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_driver_dump *driver_dump) +{ + struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data; + + ipr_init_dump_entry_hdr(&driver_dump->ioa_type_entry.hdr); + driver_dump->ioa_type_entry.hdr.len = + sizeof(struct ipr_dump_ioa_type_entry) - + sizeof(struct ipr_dump_entry_header); + driver_dump->ioa_type_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY; + driver_dump->ioa_type_entry.hdr.id = IPR_DUMP_DRIVER_TYPE_ID; + driver_dump->ioa_type_entry.type = ioa_cfg->type; + driver_dump->ioa_type_entry.fw_version = (ucode_vpd->major_release << 24) | + (ucode_vpd->card_type << 16) | (ucode_vpd->minor_release[0] << 8) | + ucode_vpd->minor_release[1]; + driver_dump->hdr.num_entries++; +} + +/** + * ipr_dump_version_data - Fill in the driver version in the dump. + * @ioa_cfg: ioa config struct + * @driver_dump: driver dump struct + * + * Return value: + * nothing + **/ +static void ipr_dump_version_data(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_driver_dump *driver_dump) +{ + ipr_init_dump_entry_hdr(&driver_dump->version_entry.hdr); + driver_dump->version_entry.hdr.len = + sizeof(struct ipr_dump_version_entry) - + sizeof(struct ipr_dump_entry_header); + driver_dump->version_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII; + driver_dump->version_entry.hdr.id = IPR_DUMP_DRIVER_VERSION_ID; + strcpy(driver_dump->version_entry.version, IPR_DRIVER_VERSION); + driver_dump->hdr.num_entries++; +} + +/** + * ipr_dump_trace_data - Fill in the IOA trace in the dump. + * @ioa_cfg: ioa config struct + * @driver_dump: driver dump struct + * + * Return value: + * nothing + **/ +static void ipr_dump_trace_data(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_driver_dump *driver_dump) +{ + ipr_init_dump_entry_hdr(&driver_dump->trace_entry.hdr); + driver_dump->trace_entry.hdr.len = + sizeof(struct ipr_dump_trace_entry) - + sizeof(struct ipr_dump_entry_header); + driver_dump->trace_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY; + driver_dump->trace_entry.hdr.id = IPR_DUMP_TRACE_ID; + memcpy(driver_dump->trace_entry.trace, ioa_cfg->trace, IPR_TRACE_SIZE); + driver_dump->hdr.num_entries++; +} + +/** + * ipr_dump_location_data - Fill in the IOA location in the dump. + * @ioa_cfg: ioa config struct + * @driver_dump: driver dump struct + * + * Return value: + * nothing + **/ +static void ipr_dump_location_data(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_driver_dump *driver_dump) +{ + ipr_init_dump_entry_hdr(&driver_dump->location_entry.hdr); + driver_dump->location_entry.hdr.len = + sizeof(struct ipr_dump_location_entry) - + sizeof(struct ipr_dump_entry_header); + driver_dump->location_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII; + driver_dump->location_entry.hdr.id = IPR_DUMP_LOCATION_ID; + strcpy(driver_dump->location_entry.location, ioa_cfg->pdev->dev.bus_id); + driver_dump->hdr.num_entries++; +} + +/** + * ipr_get_ioa_dump - Perform a dump of the driver and adapter. + * @ioa_cfg: ioa config struct + * @dump: dump struct + * + * Return value: + * nothing + **/ +static void ipr_get_ioa_dump(struct ipr_ioa_cfg *ioa_cfg, struct ipr_dump *dump) +{ + unsigned long start_addr, sdt_word; + unsigned long lock_flags = 0; + struct ipr_driver_dump *driver_dump = &dump->driver_dump; + struct ipr_ioa_dump *ioa_dump = &dump->ioa_dump; + u32 num_entries, start_off, end_off; + u32 bytes_to_copy, bytes_copied, rc; + struct ipr_sdt *sdt; + int i; + + ENTER; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + if (ioa_cfg->sdt_state != GET_DUMP) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + + start_addr = readl(ioa_cfg->ioa_mailbox); + + if (!ipr_sdt_is_fmt2(start_addr)) { + dev_err(&ioa_cfg->pdev->dev, + "Invalid dump table format: %lx\n", start_addr); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + + dev_err(&ioa_cfg->pdev->dev, "Dump of IOA initiated\n"); + + driver_dump->hdr.eye_catcher = IPR_DUMP_EYE_CATCHER; + + /* Initialize the overall dump header */ + driver_dump->hdr.len = sizeof(struct ipr_driver_dump); + driver_dump->hdr.num_entries = 1; + driver_dump->hdr.first_entry_offset = sizeof(struct ipr_dump_header); + driver_dump->hdr.status = IPR_DUMP_STATUS_SUCCESS; + driver_dump->hdr.os = IPR_DUMP_OS_LINUX; + driver_dump->hdr.driver_name = IPR_DUMP_DRIVER_NAME; + + ipr_dump_version_data(ioa_cfg, driver_dump); + ipr_dump_location_data(ioa_cfg, driver_dump); + ipr_dump_ioa_type_data(ioa_cfg, driver_dump); + ipr_dump_trace_data(ioa_cfg, driver_dump); + + /* Update dump_header */ + driver_dump->hdr.len += sizeof(struct ipr_dump_entry_header); + + /* IOA Dump entry */ + ipr_init_dump_entry_hdr(&ioa_dump->hdr); + ioa_dump->format = IPR_SDT_FMT2; + ioa_dump->hdr.len = 0; + ioa_dump->hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY; + ioa_dump->hdr.id = IPR_DUMP_IOA_DUMP_ID; + + /* First entries in sdt are actually a list of dump addresses and + lengths to gather the real dump data. sdt represents the pointer + to the ioa generated dump table. Dump data will be extracted based + on entries in this table */ + sdt = &ioa_dump->sdt; + + rc = ipr_get_ldump_data_section(ioa_cfg, start_addr, (u32 *)sdt, + sizeof(struct ipr_sdt) / sizeof(u32)); + + /* Smart Dump table is ready to use and the first entry is valid */ + if (rc || (be32_to_cpu(sdt->hdr.state) != IPR_FMT2_SDT_READY_TO_USE)) { + dev_err(&ioa_cfg->pdev->dev, + "Dump of IOA failed. Dump table not valid: %d, %X.\n", + rc, be32_to_cpu(sdt->hdr.state)); + driver_dump->hdr.status = IPR_DUMP_STATUS_FAILED; + ioa_cfg->sdt_state = DUMP_OBTAINED; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + + num_entries = be32_to_cpu(sdt->hdr.num_entries_used); + + if (num_entries > IPR_NUM_SDT_ENTRIES) + num_entries = IPR_NUM_SDT_ENTRIES; + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + for (i = 0; i < num_entries; i++) { + if (ioa_dump->hdr.len > IPR_MAX_IOA_DUMP_SIZE) { + driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS; + break; + } + + if (sdt->entry[i].flags & IPR_SDT_VALID_ENTRY) { + sdt_word = be32_to_cpu(sdt->entry[i].bar_str_offset); + start_off = sdt_word & IPR_FMT2_MBX_ADDR_MASK; + end_off = be32_to_cpu(sdt->entry[i].end_offset); + + if (ipr_sdt_is_fmt2(sdt_word) && sdt_word) { + bytes_to_copy = end_off - start_off; + if (bytes_to_copy > IPR_MAX_IOA_DUMP_SIZE) { + sdt->entry[i].flags &= ~IPR_SDT_VALID_ENTRY; + continue; + } + + /* Copy data from adapter to driver buffers */ + bytes_copied = ipr_sdt_copy(ioa_cfg, sdt_word, + bytes_to_copy); + + ioa_dump->hdr.len += bytes_copied; + + if (bytes_copied != bytes_to_copy) { + driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS; + break; + } + } + } + } + + dev_err(&ioa_cfg->pdev->dev, "Dump of IOA completed.\n"); + + /* Update dump_header */ + driver_dump->hdr.len += ioa_dump->hdr.len; + wmb(); + ioa_cfg->sdt_state = DUMP_OBTAINED; + LEAVE; +} + +#else +#define ipr_get_ioa_dump(ioa_cfg, dump) do { } while(0) +#endif + +/** + * ipr_worker_thread - Worker thread + * @data: ioa config struct + * + * Called at task level from a work thread. This function takes care + * of adding and removing device from the mid-layer as configuration + * changes are detected by the adapter. + * + * Return value: + * nothing + **/ +static void ipr_worker_thread(void *data) +{ + unsigned long lock_flags; + struct ipr_resource_entry *res; + struct scsi_device *sdev; + struct ipr_dump *dump; + struct ipr_ioa_cfg *ioa_cfg = data; + u8 bus, target, lun; + int did_work; + + ENTER; + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + if (ioa_cfg->sdt_state == GET_DUMP) { + dump = ioa_cfg->dump; + if (!dump || !kobject_get(&dump->kobj)) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + ipr_get_ioa_dump(ioa_cfg, dump); + kobject_put(&dump->kobj); + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + if (ioa_cfg->sdt_state == DUMP_OBTAINED) + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + +restart: + do { + did_work = 0; + if (!ioa_cfg->allow_cmds || !ioa_cfg->allow_ml_add_del) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (res->del_from_ml && res->sdev) { + did_work = 1; + sdev = res->sdev; + if (!scsi_device_get(sdev)) { + res->sdev = NULL; + list_move_tail(&res->queue, &ioa_cfg->free_res_q); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + scsi_remove_device(sdev); + scsi_device_put(sdev); + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + } + break; + } + } + } while(did_work); + + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (res->add_to_ml) { + bus = res->cfgte.res_addr.bus; + target = res->cfgte.res_addr.target; + lun = res->cfgte.res_addr.lun; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + scsi_add_device(ioa_cfg->host, bus, target, lun); + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + goto restart; + } + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + LEAVE; +} + +#ifdef CONFIG_SCSI_IPR_TRACE +/** + * ipr_read_trace - Dump the adapter trace + * @kobj: kobject struct + * @buf: buffer + * @off: offset + * @count: buffer size + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_read_trace(struct kobject *kobj, char *buf, + loff_t off, size_t count) +{ + struct class_device *cdev = container_of(kobj,struct class_device,kobj); + struct Scsi_Host *shost = class_to_shost(cdev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + unsigned long lock_flags = 0; + int size = IPR_TRACE_SIZE; + char *src = (char *)ioa_cfg->trace; + + if (off > size) + return 0; + if (off + count > size) { + size -= off; + count = size; + } + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + memcpy(buf, &src[off], count); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return count; +} + +static struct bin_attribute ipr_trace_attr = { + .attr = { + .name = "trace", + .mode = S_IRUGO, + }, + .size = 0, + .read = ipr_read_trace, +}; +#endif + +/** + * ipr_show_fw_version - Show the firmware version + * @class_dev: class device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_show_fw_version(struct class_device *class_dev, char *buf) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data; + unsigned long lock_flags = 0; + int len; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + len = snprintf(buf, PAGE_SIZE, "%02X%02X%02X%02X\n", + ucode_vpd->major_release, ucode_vpd->card_type, + ucode_vpd->minor_release[0], + ucode_vpd->minor_release[1]); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return len; +} + +static struct class_device_attribute ipr_fw_version_attr = { + .attr = { + .name = "fw_version", + .mode = S_IRUGO, + }, + .show = ipr_show_fw_version, +}; + +/** + * ipr_show_log_level - Show the adapter's error logging level + * @class_dev: class device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_show_log_level(struct class_device *class_dev, char *buf) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + unsigned long lock_flags = 0; + int len; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + len = snprintf(buf, PAGE_SIZE, "%d\n", ioa_cfg->log_level); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return len; +} + +/** + * ipr_store_log_level - Change the adapter's error logging level + * @class_dev: class device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_store_log_level(struct class_device *class_dev, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + unsigned long lock_flags = 0; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + ioa_cfg->log_level = simple_strtoul(buf, NULL, 10); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return strlen(buf); +} + +static struct class_device_attribute ipr_log_level_attr = { + .attr = { + .name = "log_level", + .mode = S_IRUGO | S_IWUSR, + }, + .show = ipr_show_log_level, + .store = ipr_store_log_level +}; + +/** + * ipr_store_diagnostics - IOA Diagnostics interface + * @class_dev: class_device struct + * @buf: buffer + * @count: buffer size + * + * This function will reset the adapter and wait a reasonable + * amount of time for any errors that the adapter might log. + * + * Return value: + * count on success / other on failure + **/ +static ssize_t ipr_store_diagnostics(struct class_device *class_dev, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + unsigned long lock_flags = 0; + int rc = count; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + ioa_cfg->errors_logged = 0; + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL); + + if (ioa_cfg->in_reset_reload) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + + /* Wait for a second for any errors to be logged */ + schedule_timeout(HZ); + } else { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return -EIO; + } + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + if (ioa_cfg->in_reset_reload || ioa_cfg->errors_logged) + rc = -EIO; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + return rc; +} + +static struct class_device_attribute ipr_diagnostics_attr = { + .attr = { + .name = "run_diagnostics", + .mode = S_IWUSR, + }, + .store = ipr_store_diagnostics +}; + +/** + * ipr_store_reset_adapter - Reset the adapter + * @class_dev: class_device struct + * @buf: buffer + * @count: buffer size + * + * This function will reset the adapter. + * + * Return value: + * count on success / other on failure + **/ +static ssize_t ipr_store_reset_adapter(struct class_device *class_dev, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + unsigned long lock_flags; + int result = count; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + if (!ioa_cfg->in_reset_reload) + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + + return result; +} + +static struct class_device_attribute ipr_ioa_reset_attr = { + .attr = { + .name = "reset_host", + .mode = S_IWUSR, + }, + .store = ipr_store_reset_adapter +}; + +/** + * ipr_alloc_ucode_buffer - Allocates a microcode download buffer + * @buf_len: buffer length + * + * Allocates a DMA'able buffer in chunks and assembles a scatter/gather + * list to use for microcode download + * + * Return value: + * pointer to sglist / NULL on failure + **/ +static struct ipr_sglist *ipr_alloc_ucode_buffer(int buf_len) +{ + int sg_size, order, bsize_elem, num_elem, i, j; + struct ipr_sglist *sglist; + struct scatterlist *scatterlist; + struct page *page; + + /* Get the minimum size per scatter/gather element */ + sg_size = buf_len / (IPR_MAX_SGLIST - 1); + + /* Get the actual size per element */ + order = get_order(sg_size); + + /* Determine the actual number of bytes per element */ + bsize_elem = PAGE_SIZE * (1 << order); + + /* Determine the actual number of sg entries needed */ + if (buf_len % bsize_elem) + num_elem = (buf_len / bsize_elem) + 1; + else + num_elem = buf_len / bsize_elem; + + /* Allocate a scatter/gather list for the DMA */ + sglist = kmalloc(sizeof(struct ipr_sglist) + + (sizeof(struct scatterlist) * (num_elem - 1)), + GFP_KERNEL); + + if (sglist == NULL) { + ipr_trace; + return NULL; + } + + memset(sglist, 0, sizeof(struct ipr_sglist) + + (sizeof(struct scatterlist) * (num_elem - 1))); + + scatterlist = sglist->scatterlist; + + sglist->order = order; + sglist->num_sg = num_elem; + + /* Allocate a bunch of sg elements */ + for (i = 0; i < num_elem; i++) { + page = alloc_pages(GFP_KERNEL, order); + if (!page) { + ipr_trace; + + /* Free up what we already allocated */ + for (j = i - 1; j >= 0; j--) + __free_pages(scatterlist[j].page, order); + kfree(sglist); + return NULL; + } + + scatterlist[i].page = page; + } + + return sglist; +} + +/** + * ipr_free_ucode_buffer - Frees a microcode download buffer + * @p_dnld: scatter/gather list pointer + * + * Free a DMA'able ucode download buffer previously allocated with + * ipr_alloc_ucode_buffer + * + * Return value: + * nothing + **/ +static void ipr_free_ucode_buffer(struct ipr_sglist *sglist) +{ + int i; + + for (i = 0; i < sglist->num_sg; i++) + __free_pages(sglist->scatterlist[i].page, sglist->order); + + kfree(sglist); +} + +/** + * ipr_copy_ucode_buffer - Copy user buffer to kernel buffer + * @sglist: scatter/gather list pointer + * @buffer: buffer pointer + * @len: buffer length + * + * Copy a microcode image from a user buffer into a buffer allocated by + * ipr_alloc_ucode_buffer + * + * Return value: + * 0 on success / other on failure + **/ +static int ipr_copy_ucode_buffer(struct ipr_sglist *sglist, + u8 *buffer, u32 len) +{ + int bsize_elem, i, result = 0; + struct scatterlist *scatterlist; + void *kaddr; + + /* Determine the actual number of bytes per element */ + bsize_elem = PAGE_SIZE * (1 << sglist->order); + + scatterlist = sglist->scatterlist; + + for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) { + kaddr = kmap(scatterlist[i].page); + memcpy(kaddr, buffer, bsize_elem); + kunmap(scatterlist[i].page); + + scatterlist[i].length = bsize_elem; + + if (result != 0) { + ipr_trace; + return result; + } + } + + if (len % bsize_elem) { + kaddr = kmap(scatterlist[i].page); + memcpy(kaddr, buffer, len % bsize_elem); + kunmap(scatterlist[i].page); + + scatterlist[i].length = len % bsize_elem; + } + + sglist->buffer_len = len; + return result; +} + +/** + * ipr_map_ucode_buffer - Map a microcode download buffer + * @ipr_cmd: ipr command struct + * @sglist: scatter/gather list + * @len: total length of download buffer + * + * Maps a microcode download scatter/gather list for DMA and + * builds the IOADL. + * + * Return value: + * 0 on success / -EIO on failure + **/ +static int ipr_map_ucode_buffer(struct ipr_cmnd *ipr_cmd, + struct ipr_sglist *sglist, int len) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + struct scatterlist *scatterlist = sglist->scatterlist; + int i; + + ipr_cmd->dma_use_sg = pci_map_sg(ioa_cfg->pdev, scatterlist, + sglist->num_sg, DMA_TO_DEVICE); + + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ; + ioarcb->write_data_transfer_length = cpu_to_be32(len); + ioarcb->write_ioadl_len = + cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); + + for (i = 0; i < ipr_cmd->dma_use_sg; i++) { + ioadl[i].flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_WRITE | sg_dma_len(&scatterlist[i])); + ioadl[i].address = + cpu_to_be32(sg_dma_address(&scatterlist[i])); + } + + if (likely(ipr_cmd->dma_use_sg)) { + ioadl[i-1].flags_and_data_len |= + cpu_to_be32(IPR_IOADL_FLAGS_LAST); + } + else { + dev_err(&ioa_cfg->pdev->dev, "pci_map_sg failed!\n"); + return -EIO; + } + + return 0; +} + +/** + * ipr_store_update_fw - Update the firmware on the adapter + * @class_dev: class_device struct + * @buf: buffer + * @count: buffer size + * + * This function will update the firmware on the adapter. + * + * Return value: + * count on success / other on failure + **/ +static ssize_t ipr_store_update_fw(struct class_device *class_dev, + const char *buf, size_t count) +{ + struct Scsi_Host *shost = class_to_shost(class_dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + struct ipr_ucode_image_header *image_hdr; + const struct firmware *fw_entry; + struct ipr_sglist *sglist; + unsigned long lock_flags; + char fname[100]; + char *src; + int len, result, dnld_size; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + len = snprintf(fname, 99, "%s", buf); + fname[len-1] = '\0'; + + if(request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) { + dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname); + return -EIO; + } + + image_hdr = (struct ipr_ucode_image_header *)fw_entry->data; + + if (be32_to_cpu(image_hdr->header_length) > fw_entry->size || + (ioa_cfg->vpd_cbs->page3_data.card_type && + ioa_cfg->vpd_cbs->page3_data.card_type != image_hdr->card_type)) { + dev_err(&ioa_cfg->pdev->dev, "Invalid microcode buffer\n"); + release_firmware(fw_entry); + return -EINVAL; + } + + src = (u8 *)image_hdr + be32_to_cpu(image_hdr->header_length); + dnld_size = fw_entry->size - be32_to_cpu(image_hdr->header_length); + sglist = ipr_alloc_ucode_buffer(dnld_size); + + if (!sglist) { + dev_err(&ioa_cfg->pdev->dev, "Microcode buffer allocation failed\n"); + release_firmware(fw_entry); + return -ENOMEM; + } + + result = ipr_copy_ucode_buffer(sglist, src, dnld_size); + + if (result) { + dev_err(&ioa_cfg->pdev->dev, + "Microcode buffer copy to DMA buffer failed\n"); + ipr_free_ucode_buffer(sglist); + release_firmware(fw_entry); + return result; + } + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + if (ioa_cfg->ucode_sglist) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + dev_err(&ioa_cfg->pdev->dev, + "Microcode download already in progress\n"); + ipr_free_ucode_buffer(sglist); + release_firmware(fw_entry); + return -EIO; + } + + ioa_cfg->ucode_sglist = sglist; + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + ioa_cfg->ucode_sglist = NULL; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + ipr_free_ucode_buffer(sglist); + release_firmware(fw_entry); + + return count; +} + +static struct class_device_attribute ipr_update_fw_attr = { + .attr = { + .name = "update_fw", + .mode = S_IWUSR, + }, + .store = ipr_store_update_fw +}; + +static struct class_device_attribute *ipr_ioa_attrs[] = { + &ipr_fw_version_attr, + &ipr_log_level_attr, + &ipr_diagnostics_attr, + &ipr_ioa_reset_attr, + &ipr_update_fw_attr, + NULL, +}; + +#ifdef CONFIG_SCSI_IPR_DUMP +/** + * ipr_read_dump - Dump the adapter + * @kobj: kobject struct + * @buf: buffer + * @off: offset + * @count: buffer size + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_read_dump(struct kobject *kobj, char *buf, + loff_t off, size_t count) +{ + struct class_device *cdev = container_of(kobj,struct class_device,kobj); + struct Scsi_Host *shost = class_to_shost(cdev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + struct ipr_dump *dump; + unsigned long lock_flags = 0; + char *src; + int len; + size_t rc = count; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + dump = ioa_cfg->dump; + + if (ioa_cfg->sdt_state != DUMP_OBTAINED || !dump || !kobject_get(&dump->kobj)) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return 0; + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + if (off > dump->driver_dump.hdr.len) { + kobject_put(&dump->kobj); + return 0; + } + + if (off + count > dump->driver_dump.hdr.len) { + count = dump->driver_dump.hdr.len - off; + rc = count; + } + + if (count && off < sizeof(dump->driver_dump)) { + if (off + count > sizeof(dump->driver_dump)) + len = sizeof(dump->driver_dump) - off; + else + len = count; + src = (u8 *)&dump->driver_dump + off; + memcpy(buf, src, len); + buf += len; + off += len; + count -= len; + } + + off -= sizeof(dump->driver_dump); + + if (count && off < offsetof(struct ipr_ioa_dump, ioa_data)) { + if (off + count > offsetof(struct ipr_ioa_dump, ioa_data)) + len = offsetof(struct ipr_ioa_dump, ioa_data) - off; + else + len = count; + src = (u8 *)&dump->ioa_dump + off; + memcpy(buf, src, len); + buf += len; + off += len; + count -= len; + } + + off -= offsetof(struct ipr_ioa_dump, ioa_data); + + while (count) { + if ((off & PAGE_MASK) != ((off + count) & PAGE_MASK)) + len = PAGE_ALIGN(off) - off; + else + len = count; + src = (u8 *)dump->ioa_dump.ioa_data[(off & PAGE_MASK) >> PAGE_SHIFT]; + src += off & ~PAGE_MASK; + memcpy(buf, src, len); + buf += len; + off += len; + count -= len; + } + + kobject_put(&dump->kobj); + return rc; +} + +/** + * ipr_release_dump - Free adapter dump memory + * @kobj: kobject struct + * + * Return value: + * nothing + **/ +static void ipr_release_dump(struct kobject *kobj) +{ + struct ipr_dump *dump = container_of(kobj,struct ipr_dump,kobj); + struct ipr_ioa_cfg *ioa_cfg = dump->ioa_cfg; + unsigned long lock_flags = 0; + int i; + + ENTER; + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + ioa_cfg->dump = NULL; + ioa_cfg->sdt_state = INACTIVE; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + for (i = 0; i < dump->ioa_dump.next_page_index; i++) + free_page((unsigned long) dump->ioa_dump.ioa_data[i]); + + kfree(dump); + LEAVE; +} + +static struct kobj_type ipr_dump_kobj_type = { + .release = ipr_release_dump, +}; + +/** + * ipr_alloc_dump - Prepare for adapter dump + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / other on failure + **/ +static int ipr_alloc_dump(struct ipr_ioa_cfg *ioa_cfg) +{ + struct ipr_dump *dump; + unsigned long lock_flags = 0; + + ENTER; + dump = kmalloc(sizeof(struct ipr_dump), GFP_KERNEL); + + if (!dump) { + ipr_err("Dump memory allocation failed\n"); + return -ENOMEM; + } + + memset(dump, 0, sizeof(struct ipr_dump)); + kobject_init(&dump->kobj); + dump->kobj.ktype = &ipr_dump_kobj_type; + dump->ioa_cfg = ioa_cfg; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + if (INACTIVE != ioa_cfg->sdt_state) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + kfree(dump); + return 0; + } + + ioa_cfg->dump = dump; + ioa_cfg->sdt_state = WAIT_FOR_DUMP; + if (ioa_cfg->ioa_is_dead && !ioa_cfg->dump_taken) { + ioa_cfg->dump_taken = 1; + schedule_work(&ioa_cfg->work_q); + } + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + LEAVE; + return 0; +} + +/** + * ipr_free_dump - Free adapter dump memory + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / other on failure + **/ +static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg) +{ + struct ipr_dump *dump; + unsigned long lock_flags = 0; + + ENTER; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + dump = ioa_cfg->dump; + if (!dump) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return 0; + } + + ioa_cfg->dump = NULL; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + kobject_put(&dump->kobj); + + LEAVE; + return 0; +} + +/** + * ipr_write_dump - Setup dump state of adapter + * @kobj: kobject struct + * @buf: buffer + * @off: offset + * @count: buffer size + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_write_dump(struct kobject *kobj, char *buf, + loff_t off, size_t count) +{ + struct class_device *cdev = container_of(kobj,struct class_device,kobj); + struct Scsi_Host *shost = class_to_shost(cdev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; + int rc; + + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + if (buf[0] == '1') + rc = ipr_alloc_dump(ioa_cfg); + else if (buf[0] == '0') + rc = ipr_free_dump(ioa_cfg); + else + return -EINVAL; + + if (rc) + return rc; + else + return count; +} + +static struct bin_attribute ipr_dump_attr = { + .attr = { + .name = "dump", + .mode = S_IRUSR | S_IWUSR, + }, + .size = 0, + .read = ipr_read_dump, + .write = ipr_write_dump +}; +#else +static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg) { return 0; }; +#endif + +/** + * ipr_store_queue_depth - Change the device's queue depth + * @dev: device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_store_queue_depth(struct device *dev, + const char *buf, size_t count) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata; + struct ipr_resource_entry *res; + int qdepth = simple_strtoul(buf, NULL, 10); + int tagged = 0; + unsigned long lock_flags = 0; + ssize_t len = -ENXIO; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + res = (struct ipr_resource_entry *)sdev->hostdata; + if (res) { + res->qdepth = qdepth; + + if (ipr_is_gscsi(res) && res->tcq_active) + tagged = MSG_ORDERED_TAG; + + len = strlen(buf); + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + scsi_adjust_queue_depth(sdev, tagged, qdepth); + return len; +} + +static struct device_attribute ipr_queue_depth_attr = { + .attr = { + .name = "queue_depth", + .mode = S_IRUSR | S_IWUSR, + }, + .store = ipr_store_queue_depth +}; + +/** + * ipr_show_tcq_enable - Show if the device is enabled for tcqing + * @dev: device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_show_tcq_enable(struct device *dev, char *buf) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata; + struct ipr_resource_entry *res; + unsigned long lock_flags = 0; + ssize_t len = -ENXIO; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + res = (struct ipr_resource_entry *)sdev->hostdata; + if (res) + len = snprintf(buf, PAGE_SIZE, "%d\n", res->tcq_active); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return len; +} + +/** + * ipr_store_tcq_enable - Change the device's TCQing state + * @dev: device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_store_tcq_enable(struct device *dev, + const char *buf, size_t count) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata; + struct ipr_resource_entry *res; + unsigned long lock_flags = 0; + int tcq_active = simple_strtoul(buf, NULL, 10); + int qdepth = IPR_MAX_CMD_PER_LUN; + int tagged = 0; + ssize_t len = -ENXIO; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + res = (struct ipr_resource_entry *)sdev->hostdata; + + if (res) { + res->tcq_active = 0; + qdepth = res->qdepth; + + if (ipr_is_gscsi(res) && sdev->tagged_supported) { + if (tcq_active) { + tagged = MSG_ORDERED_TAG; + res->tcq_active = 1; + } + + len = strlen(buf); + } else if (tcq_active) { + len = -EINVAL; + } + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + scsi_adjust_queue_depth(sdev, tagged, qdepth); + return len; +} + +static struct device_attribute ipr_tcqing_attr = { + .attr = { + .name = "tcq_enable", + .mode = S_IRUSR | S_IWUSR, + }, + .store = ipr_store_tcq_enable, + .show = ipr_show_tcq_enable +}; + +/** + * ipr_show_adapter_handle - Show the adapter's resource handle for this device + * @dev: device struct + * @buf: buffer + * + * Return value: + * number of bytes printed to buffer + **/ +static ssize_t ipr_show_adapter_handle(struct device *dev, char *buf) +{ + struct scsi_device *sdev = to_scsi_device(dev); + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata; + struct ipr_resource_entry *res; + unsigned long lock_flags = 0; + ssize_t len = -ENXIO; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + res = (struct ipr_resource_entry *)sdev->hostdata; + if (res) + len = snprintf(buf, PAGE_SIZE, "%08X\n", res->cfgte.res_handle); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return len; +} + +static struct device_attribute ipr_adapter_handle_attr = { + .attr = { + .name = "adapter_handle", + .mode = S_IRUSR, + }, + .show = ipr_show_adapter_handle +}; + +static struct device_attribute *ipr_dev_attrs[] = { + &ipr_queue_depth_attr, + &ipr_tcqing_attr, + &ipr_adapter_handle_attr, + NULL, +}; + +/** + * ipr_biosparam - Return the HSC mapping + * @sdev: scsi device struct + * @block_device: block device pointer + * @capacity: capacity of the device + * @parm: Array containing returned HSC values. + * + * This function generates the HSC parms that fdisk uses. + * We want to make sure we return something that places partitions + * on 4k boundaries for best performance with the IOA. + * + * Return value: + * 0 on success + **/ +static int ipr_biosparam(struct scsi_device *sdev, + struct block_device *block_device, + sector_t capacity, int *parm) +{ + int heads, sectors, cylinders; + + heads = 128; + sectors = 32; + + cylinders = capacity; + sector_div(cylinders, (128 * 32)); + + /* return result */ + parm[0] = heads; + parm[1] = sectors; + parm[2] = cylinders; + + return 0; +} + +/** + * ipr_slave_destroy - Unconfigure a SCSI device + * @sdev: scsi device struct + * + * Return value: + * nothing + **/ +static void ipr_slave_destroy(struct scsi_device *sdev) +{ + struct ipr_resource_entry *res; + struct ipr_ioa_cfg *ioa_cfg; + unsigned long lock_flags = 0; + + ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + res = (struct ipr_resource_entry *) sdev->hostdata; + if (res) { + sdev->hostdata = NULL; + res->sdev = NULL; + } + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); +} + +/** + * ipr_slave_configure - Configure a SCSI device + * @sdev: scsi device struct + * + * This function configures the specified scsi device. + * + * Return value: + * 0 on success + **/ +static int ipr_slave_configure(struct scsi_device *sdev) +{ + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata; + struct ipr_resource_entry *res; + unsigned long lock_flags = 0; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + res = sdev->hostdata; + if (res) { + if (ipr_is_af_dasd_device(res)) + sdev->type = TYPE_RAID; + if (ipr_is_af_dasd_device(res) || ipr_is_ioa_resource(res)) + sdev->scsi_level = 4; + if (ipr_is_vset_device(res)) + sdev->timeout = IPR_VSET_RW_TIMEOUT; + + sdev->allow_restart = 1; + scsi_adjust_queue_depth(sdev, 0, res->qdepth); + } + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return 0; +} + +/** + * ipr_slave_alloc - Prepare for commands to a device. + * @sdev: scsi device struct + * + * This function saves a pointer to the resource entry + * in the scsi device struct if the device exists. We + * can then use this pointer in ipr_queuecommand when + * handling new commands. + * + * Return value: + * 0 on success + **/ +static int ipr_slave_alloc(struct scsi_device *sdev) +{ + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata; + struct ipr_resource_entry *res; + unsigned long lock_flags; + + sdev->hostdata = NULL; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if ((res->cfgte.res_addr.bus == sdev->channel) && + (res->cfgte.res_addr.target == sdev->id) && + (res->cfgte.res_addr.lun == sdev->lun)) { + res->sdev = sdev; + res->add_to_ml = 0; + sdev->hostdata = res; + res->needs_sync_complete = 1; + break; + } + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + + return 0; +} + +/** + * ipr_eh_host_reset - Reset the host adapter + * @scsi_cmd: scsi command struct + * + * Return value: + * SUCCESS / FAILED + **/ +static int ipr_eh_host_reset(struct scsi_cmnd * scsi_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg; + int rc; + + ENTER; + ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata; + + dev_err(&ioa_cfg->pdev->dev, + "Adapter being reset as a result of error recovery.\n"); + + if (WAIT_FOR_DUMP == ioa_cfg->sdt_state) + ioa_cfg->sdt_state = GET_DUMP; + + rc = ipr_reset_reload(ioa_cfg, IPR_SHUTDOWN_ABBREV); + + LEAVE; + return rc; +} + +/** + * ipr_eh_dev_reset - Reset the device + * @scsi_cmd: scsi command struct + * + * This function issues a device reset to the affected device. + * A LUN reset will be sent to the device first. If that does + * not work, a target reset will be sent. + * + * Return value: + * SUCCESS / FAILED + **/ +static int ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd) +{ + struct ipr_cmnd *ipr_cmd; + struct ipr_ioa_cfg *ioa_cfg; + struct ipr_resource_entry *res; + struct ipr_cmd_pkt *cmd_pkt; + u32 ioasc; + + ENTER; + ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata; + res = scsi_cmd->device->hostdata; + + if (!res || (!ipr_is_gscsi(res) && !ipr_is_vset_device(res))) + return FAILED; + + /* + * If we are currently going through reset/reload, return failed. This will force the + * mid-layer to call ipr_eh_host_reset, which will then go to sleep and wait for the + * reset to complete + */ + if (ioa_cfg->in_reset_reload) + return FAILED; + if (ioa_cfg->ioa_is_dead) + return FAILED; + + list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) { + if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) { + if (ipr_cmd->scsi_cmd) + ipr_cmd->done = ipr_scsi_eh_done; + } + } + + res->resetting_device = 1; + + ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + + ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle; + cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; + cmd_pkt->request_type = IPR_RQTYPE_IOACMD; + cmd_pkt->cdb[0] = IPR_RESET_DEVICE; + + ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); + + ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + res->resetting_device = 0; + + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + + LEAVE; + return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS); +} + +/** + * ipr_bus_reset_done - Op done function for bus reset. + * @ipr_cmd: ipr command struct + * + * This function is the op done function for a bus reset + * + * Return value: + * none + **/ +static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_resource_entry *res; + + ENTER; + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (!memcmp(&res->cfgte.res_handle, &ipr_cmd->ioarcb.res_handle, + sizeof(res->cfgte.res_handle))) { + scsi_report_bus_reset(ioa_cfg->host, res->cfgte.res_addr.bus); + break; + } + } + + /* + * If abort has not completed, indicate the reset has, else call the + * abort's done function to wake the sleeping eh thread + */ + if (ipr_cmd->sibling->sibling) + ipr_cmd->sibling->sibling = NULL; + else + ipr_cmd->sibling->done(ipr_cmd->sibling); + + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + LEAVE; +} + +/** + * ipr_abort_timeout - An abort task has timed out + * @ipr_cmd: ipr command struct + * + * This function handles when an abort task times out. If this + * happens we issue a bus reset since we have resources tied + * up that must be freed before returning to the midlayer. + * + * Return value: + * none + **/ +static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_cmnd *reset_cmd; + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_cmd_pkt *cmd_pkt; + unsigned long lock_flags = 0; + + ENTER; + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return; + } + + reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + ipr_cmd->sibling = reset_cmd; + reset_cmd->sibling = ipr_cmd; + reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle; + cmd_pkt = &reset_cmd->ioarcb.cmd_pkt; + cmd_pkt->request_type = IPR_RQTYPE_IOACMD; + cmd_pkt->cdb[0] = IPR_RESET_DEVICE; + cmd_pkt->cdb[2] = IPR_RESET_TYPE_SELECT | IPR_BUS_RESET; + + ipr_do_req(reset_cmd, ipr_bus_reset_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + LEAVE; +} + +/** + * ipr_cancel_op - Cancel specified op + * @scsi_cmd: scsi command struct + * + * This function cancels specified op. + * + * Return value: + * SUCCESS / FAILED + **/ +static int ipr_cancel_op(struct scsi_cmnd * scsi_cmd) +{ + struct ipr_cmnd *ipr_cmd; + struct ipr_ioa_cfg *ioa_cfg; + struct ipr_resource_entry *res; + struct ipr_cmd_pkt *cmd_pkt; + u32 ioasc, ioarcb_addr; + int op_found = 0; + + ENTER; + ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata; + res = scsi_cmd->device->hostdata; + + if (!res || (!ipr_is_gscsi(res) && !ipr_is_vset_device(res))) + return FAILED; + + list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) { + if (ipr_cmd->scsi_cmd == scsi_cmd) { + ipr_cmd->done = ipr_scsi_eh_done; + op_found = 1; + break; + } + } + + if (!op_found) + return SUCCESS; + + ioarcb_addr = be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr); + + ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle; + cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; + cmd_pkt->request_type = IPR_RQTYPE_IOACMD; + cmd_pkt->cdb[0] = IPR_ABORT_TASK; + cmd_pkt->cdb[2] = (ioarcb_addr >> 24) & 0xff; + cmd_pkt->cdb[3] = (ioarcb_addr >> 16) & 0xff; + cmd_pkt->cdb[4] = (ioarcb_addr >> 8) & 0xff; + cmd_pkt->cdb[5] = ioarcb_addr & 0xff; + + ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_ABORT_TASK_TIMEOUT); + ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + /* + * If the abort task timed out and we sent a bus reset, we will get + * one the following responses to the abort + */ + if (ioasc == IPR_IOASC_BUS_WAS_RESET || ioasc == IPR_IOASC_SYNC_REQUIRED) { + ioasc = 0; + ipr_trace; + } + + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + res->needs_sync_complete = 1; + + LEAVE; + return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS); +} + +/** + * ipr_eh_abort - Abort a single op + * @scsi_cmd: scsi command struct + * + * Return value: + * SUCCESS / FAILED + **/ +static int ipr_eh_abort(struct scsi_cmnd * scsi_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg; + + ENTER; + ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata; + + /* If we are currently going through reset/reload, return failed. This will force the + mid-layer to call ipr_eh_host_reset, which will then go to sleep and wait for the + reset to complete */ + if (ioa_cfg->in_reset_reload) + return FAILED; + if (ioa_cfg->ioa_is_dead) + return FAILED; + if (!scsi_cmd->device->hostdata) + return FAILED; + + LEAVE; + return ipr_cancel_op(scsi_cmd); +} + +/** + * ipr_handle_other_interrupt - Handle "other" interrupts + * @ioa_cfg: ioa config struct + * @int_reg: interrupt register + * + * Return value: + * IRQ_NONE / IRQ_HANDLED + **/ +static irqreturn_t ipr_handle_other_interrupt(struct ipr_ioa_cfg *ioa_cfg, + volatile u32 int_reg) +{ + irqreturn_t rc = IRQ_HANDLED; + + if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) { + /* Mask the interrupt */ + writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.set_interrupt_mask_reg); + + /* Clear the interrupt */ + writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.clr_interrupt_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_reg); + + del_timer(&ioa_cfg->reset_cmd->timer); + ipr_reset_ioa_job(ioa_cfg->reset_cmd); + } else { + if (int_reg & IPR_PCII_IOA_UNIT_CHECKED) + ioa_cfg->ioa_unit_checked = 1; + else + dev_err(&ioa_cfg->pdev->dev, + "Permanent IOA failure. 0x%08X\n", int_reg); + + if (WAIT_FOR_DUMP == ioa_cfg->sdt_state) + ioa_cfg->sdt_state = GET_DUMP; + + ipr_mask_and_clear_interrupts(ioa_cfg, ~0); + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE); + } + + return rc; +} + +/** + * ipr_isr - Interrupt service routine + * @irq: irq number + * @devp: pointer to ioa config struct + * @regs: pt_regs struct + * + * Return value: + * IRQ_NONE / IRQ_HANDLED + **/ +static irqreturn_t ipr_isr(int irq, void *devp, struct pt_regs *regs) +{ + struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)devp; + unsigned long lock_flags = 0; + volatile u32 int_reg, int_mask_reg; + u32 ioasc; + u16 cmd_index; + struct ipr_cmnd *ipr_cmd; + irqreturn_t rc = IRQ_NONE; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + /* If interrupts are disabled, ignore the interrupt */ + if (!ioa_cfg->allow_interrupts) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return IRQ_NONE; + } + + int_mask_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg; + + /* If an interrupt on the adapter did not occur, ignore it */ + if (unlikely((int_reg & IPR_PCII_OPER_INTERRUPTS) == 0)) { + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return IRQ_NONE; + } + + while (1) { + ipr_cmd = NULL; + + while ((be32_to_cpu(*ioa_cfg->hrrq_curr) & IPR_HRRQ_TOGGLE_BIT) == + ioa_cfg->toggle_bit) { + + cmd_index = (be32_to_cpu(*ioa_cfg->hrrq_curr) & + IPR_HRRQ_REQ_RESP_HANDLE_MASK) >> IPR_HRRQ_REQ_RESP_HANDLE_SHIFT; + + if (unlikely(cmd_index >= IPR_NUM_CMD_BLKS)) { + ioa_cfg->errors_logged++; + dev_err(&ioa_cfg->pdev->dev, "Invalid response handle from IOA\n"); + + if (WAIT_FOR_DUMP == ioa_cfg->sdt_state) + ioa_cfg->sdt_state = GET_DUMP; + + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return IRQ_HANDLED; + } + + ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index]; + + ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc); + + list_del(&ipr_cmd->queue); + del_timer(&ipr_cmd->timer); + ipr_cmd->done(ipr_cmd); + + rc = IRQ_HANDLED; + + if (ioa_cfg->hrrq_curr < ioa_cfg->hrrq_end) { + ioa_cfg->hrrq_curr++; + } else { + ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start; + ioa_cfg->toggle_bit ^= 1u; + } + } + + if (ipr_cmd != NULL) { + /* Clear the PCI interrupt */ + writel(IPR_PCII_HRRQ_UPDATED, ioa_cfg->regs.clr_interrupt_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg; + } else + break; + } + + if (unlikely(rc == IRQ_NONE)) + rc = ipr_handle_other_interrupt(ioa_cfg, int_reg); + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + return rc; +} + +/** + * ipr_build_ioadl - Build a scatter/gather list and map the buffer + * @ioa_cfg: ioa config struct + * @ipr_cmd: ipr command struct + * + * Return value: + * 0 on success / -1 on failure + **/ +static int ipr_build_ioadl(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_cmnd *ipr_cmd) +{ + int i; + struct scatterlist *sglist; + u32 length; + u32 ioadl_flags = 0; + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + + length = scsi_cmd->request_bufflen; + + if (length == 0) + return 0; + + if (scsi_cmd->use_sg) { + ipr_cmd->dma_use_sg = pci_map_sg(ioa_cfg->pdev, + scsi_cmd->request_buffer, + scsi_cmd->use_sg, + scsi_cmd->sc_data_direction); + + if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) { + ioadl_flags = IPR_IOADL_FLAGS_WRITE; + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ; + ioarcb->write_data_transfer_length = cpu_to_be32(length); + ioarcb->write_ioadl_len = + cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); + } else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) { + ioadl_flags = IPR_IOADL_FLAGS_READ; + ioarcb->read_data_transfer_length = cpu_to_be32(length); + ioarcb->read_ioadl_len = + cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg); + } + + sglist = scsi_cmd->request_buffer; + + for (i = 0; i < ipr_cmd->dma_use_sg; i++) { + ioadl[i].flags_and_data_len = + cpu_to_be32(ioadl_flags | sg_dma_len(&sglist[i])); + ioadl[i].address = + cpu_to_be32(sg_dma_address(&sglist[i])); + } + + if (likely(ipr_cmd->dma_use_sg)) { + ioadl[i-1].flags_and_data_len |= + cpu_to_be32(IPR_IOADL_FLAGS_LAST); + return 0; + } else + dev_err(&ioa_cfg->pdev->dev, "pci_map_sg failed!\n"); + } else { + if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) { + ioadl_flags = IPR_IOADL_FLAGS_WRITE; + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ; + ioarcb->write_data_transfer_length = cpu_to_be32(length); + ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + } else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) { + ioadl_flags = IPR_IOADL_FLAGS_READ; + ioarcb->read_data_transfer_length = cpu_to_be32(length); + ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + } + + ipr_cmd->dma_handle = pci_map_single(ioa_cfg->pdev, + scsi_cmd->request_buffer, length, + scsi_cmd->sc_data_direction); + + if (likely(!pci_dma_mapping_error(ipr_cmd->dma_handle))) { + ipr_cmd->dma_use_sg = 1; + ioadl[0].flags_and_data_len = + cpu_to_be32(ioadl_flags | length | IPR_IOADL_FLAGS_LAST); + ioadl[0].address = cpu_to_be32(ipr_cmd->dma_handle); + return 0; + } else + dev_err(&ioa_cfg->pdev->dev, "pci_map_single failed!\n"); + } + + return -1; +} + +/** + * ipr_get_task_attributes - Translate SPI Q-Tag to task attributes + * @scsi_cmd: scsi command struct + * + * Return value: + * task attributes + **/ +static u8 ipr_get_task_attributes(struct scsi_cmnd *scsi_cmd) +{ + u8 tag[2]; + u8 rc = IPR_FLAGS_LO_UNTAGGED_TASK; + + if (scsi_populate_tag_msg(scsi_cmd, tag)) { + switch (tag[0]) { + case MSG_SIMPLE_TAG: + rc = IPR_FLAGS_LO_SIMPLE_TASK; + break; + case MSG_HEAD_TAG: + rc = IPR_FLAGS_LO_HEAD_OF_Q_TASK; + break; + case MSG_ORDERED_TAG: + rc = IPR_FLAGS_LO_ORDERED_TASK; + break; + }; + } + + return rc; +} + +/** + * ipr_erp_done - Process completion of ERP for a device + * @ipr_cmd: ipr command struct + * + * This function copies the sense buffer into the scsi_cmd + * struct and pushes the scsi_done function. + * + * Return value: + * nothing + **/ +static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) +{ + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + struct ipr_resource_entry *res = scsi_cmd->device->hostdata; + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + if (IPR_IOASC_SENSE_KEY(ioasc) > 0) { + scsi_cmd->result |= (DID_ERROR << 16); + ipr_sdev_err(scsi_cmd->device, + "Request Sense failed with IOASC: 0x%08X\n", ioasc); + } else { + memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer, + SCSI_SENSE_BUFFERSIZE); + } + + if (res) + res->needs_sync_complete = 1; + ipr_unmap_sglist(ioa_cfg, ipr_cmd); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + scsi_cmd->scsi_done(scsi_cmd); +} + +/** + * ipr_reinit_ipr_cmnd_for_erp - Re-initialize a cmnd block to be used for ERP + * @ipr_cmd: ipr command struct + * + * Return value: + * none + **/ +static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioarcb *ioarcb; + struct ipr_ioasa *ioasa; + + ioarcb = &ipr_cmd->ioarcb; + ioasa = &ipr_cmd->ioasa; + + memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); + ioarcb->write_data_transfer_length = 0; + ioarcb->read_data_transfer_length = 0; + ioarcb->write_ioadl_len = 0; + ioarcb->read_ioadl_len = 0; + ioasa->ioasc = 0; + ioasa->residual_data_len = 0; +} + +/** + * ipr_erp_request_sense - Send request sense to a device + * @ipr_cmd: ipr command struct + * + * This function sends a request sense to a device as a result + * of a check condition. + * + * Return value: + * nothing + **/ +static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; + + ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); + + cmd_pkt->request_type = IPR_RQTYPE_SCSICDB; + cmd_pkt->cdb[0] = REQUEST_SENSE; + cmd_pkt->cdb[4] = SCSI_SENSE_BUFFERSIZE; + cmd_pkt->flags_hi |= IPR_FLAGS_HI_SYNC_OVERRIDE; + cmd_pkt->flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK; + cmd_pkt->timeout = cpu_to_be16(IPR_REQUEST_SENSE_TIMEOUT / HZ); + + ipr_cmd->ioadl[0].flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | SCSI_SENSE_BUFFERSIZE); + ipr_cmd->ioadl[0].address = + cpu_to_be32(ipr_cmd->sense_buffer_dma); + + ipr_cmd->ioarcb.read_ioadl_len = + cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ipr_cmd->ioarcb.read_data_transfer_length = + cpu_to_be32(SCSI_SENSE_BUFFERSIZE); + + ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout, + IPR_REQUEST_SENSE_TIMEOUT * 2); +} + +/** + * ipr_erp_cancel_all - Send cancel all to a device + * @ipr_cmd: ipr command struct + * + * This function sends a cancel all to a device to clear the + * queue. If we are running TCQ on the device, QERR is set to 1, + * which means all outstanding ops have been dropped on the floor. + * Cancel all will return them to us. + * + * Return value: + * nothing + **/ +static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd) +{ + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + struct ipr_resource_entry *res = scsi_cmd->device->hostdata; + struct ipr_cmd_pkt *cmd_pkt; + + res->in_erp = 1; + + ipr_reinit_ipr_cmnd_for_erp(ipr_cmd); + + cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt; + cmd_pkt->request_type = IPR_RQTYPE_IOACMD; + cmd_pkt->cdb[0] = IPR_CANCEL_ALL_REQUESTS; + + ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout, + IPR_CANCEL_ALL_TIMEOUT); +} + +/** + * ipr_dump_ioasa - Dump contents of IOASA + * @ioa_cfg: ioa config struct + * @ipr_cmd: ipr command struct + * + * This function is invoked by the interrupt handler when ops + * fail. It will log the IOASA if appropriate. Only called + * for GPDD ops. + * + * Return value: + * none + **/ +static void ipr_dump_ioasa(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_cmnd *ipr_cmd) +{ + int i; + u16 data_len; + u32 ioasc; + struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; + u32 *ioasa_data = (u32 *)ioasa; + int error_index; + + ioasc = be32_to_cpu(ioasa->ioasc) & IPR_IOASC_IOASC_MASK; + + if (0 == ioasc) + return; + + if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) + return; + + error_index = ipr_get_error(ioasc); + + if (ioa_cfg->log_level < IPR_MAX_LOG_LEVEL) { + /* Don't log an error if the IOA already logged one */ + if (ioasa->ilid != 0) + return; + + if (ipr_error_table[error_index].log_ioasa == 0) + return; + } + + ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n", + ipr_error_table[error_index].error); + + if ((ioasa->gpdd.device_end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) && + (ioasa->gpdd.device_bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) { + ipr_sdev_err(ipr_cmd->scsi_cmd->device, + "Device End state: %s Phase: %s\n", + ipr_gpdd_dev_end_states[ioasa->gpdd.device_end_state], + ipr_gpdd_dev_bus_phases[ioasa->gpdd.device_bus_phase]); + } + + if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len)) + data_len = sizeof(struct ipr_ioasa); + else + data_len = be16_to_cpu(ioasa->ret_stat_len); + + ipr_err("IOASA Dump:\n"); + + for (i = 0; i < data_len / 4; i += 4) { + ipr_err("%08X: %08X %08X %08X %08X\n", i*4, + be32_to_cpu(ioasa_data[i]), + be32_to_cpu(ioasa_data[i+1]), + be32_to_cpu(ioasa_data[i+2]), + be32_to_cpu(ioasa_data[i+3])); + } +} + +/** + * ipr_gen_sense - Generate SCSI sense data from an IOASA + * @ioasa: IOASA + * @sense_buf: sense data buffer + * + * Return value: + * none + **/ +static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd) +{ + u32 failing_lba; + u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer; + struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata; + struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; + u32 ioasc = be32_to_cpu(ioasa->ioasc); + + memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE); + + if (ioasc >= IPR_FIRST_DRIVER_IOASC) + return; + + ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION; + + if (ipr_is_vset_device(res) && + ioasc == IPR_IOASC_MED_DO_NOT_REALLOC && + ioasa->vset.failing_lba_hi != 0) { + sense_buf[0] = 0x72; + sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc); + sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc); + sense_buf[3] = IPR_IOASC_SENSE_QUAL(ioasc); + + sense_buf[7] = 12; + sense_buf[8] = 0; + sense_buf[9] = 0x0A; + sense_buf[10] = 0x80; + + failing_lba = be32_to_cpu(ioasa->vset.failing_lba_hi); + + sense_buf[12] = (failing_lba & 0xff000000) >> 24; + sense_buf[13] = (failing_lba & 0x00ff0000) >> 16; + sense_buf[14] = (failing_lba & 0x0000ff00) >> 8; + sense_buf[15] = failing_lba & 0x000000ff; + + failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo); + + sense_buf[16] = (failing_lba & 0xff000000) >> 24; + sense_buf[17] = (failing_lba & 0x00ff0000) >> 16; + sense_buf[18] = (failing_lba & 0x0000ff00) >> 8; + sense_buf[19] = failing_lba & 0x000000ff; + } else { + sense_buf[0] = 0x70; + sense_buf[2] = IPR_IOASC_SENSE_KEY(ioasc); + sense_buf[12] = IPR_IOASC_SENSE_CODE(ioasc); + sense_buf[13] = IPR_IOASC_SENSE_QUAL(ioasc); + + /* Illegal request */ + if ((IPR_IOASC_SENSE_KEY(ioasc) == 0x05) && + (be32_to_cpu(ioasa->ioasc_specific) & IPR_FIELD_POINTER_VALID)) { + sense_buf[7] = 10; /* additional length */ + + /* IOARCB was in error */ + if (IPR_IOASC_SENSE_CODE(ioasc) == 0x24) + sense_buf[15] = 0xC0; + else /* Parameter data was invalid */ + sense_buf[15] = 0x80; + + sense_buf[16] = + ((IPR_FIELD_POINTER_MASK & + be32_to_cpu(ioasa->ioasc_specific)) >> 8) & 0xff; + sense_buf[17] = + (IPR_FIELD_POINTER_MASK & + be32_to_cpu(ioasa->ioasc_specific)) & 0xff; + } else { + if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) { + if (ipr_is_vset_device(res)) + failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo); + else + failing_lba = be32_to_cpu(ioasa->dasd.failing_lba); + + sense_buf[0] |= 0x80; /* Or in the Valid bit */ + sense_buf[3] = (failing_lba & 0xff000000) >> 24; + sense_buf[4] = (failing_lba & 0x00ff0000) >> 16; + sense_buf[5] = (failing_lba & 0x0000ff00) >> 8; + sense_buf[6] = failing_lba & 0x000000ff; + } + + sense_buf[7] = 6; /* additional length */ + } + } +} + +/** + * ipr_erp_start - Process an error response for a SCSI op + * @ioa_cfg: ioa config struct + * @ipr_cmd: ipr command struct + * + * This function determines whether or not to initiate ERP + * on the affected device. + * + * Return value: + * nothing + **/ +static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_cmnd *ipr_cmd) +{ + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + struct ipr_resource_entry *res = scsi_cmd->device->hostdata; + u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + if (!res) { + ipr_scsi_eh_done(ipr_cmd); + return; + } + + if (ipr_is_gscsi(res)) + ipr_dump_ioasa(ioa_cfg, ipr_cmd); + else + ipr_gen_sense(ipr_cmd); + + switch (ioasc & IPR_IOASC_IOASC_MASK) { + case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST: + scsi_cmd->result |= (DID_ERROR << 16); + break; + case IPR_IOASC_IR_RESOURCE_HANDLE: + scsi_cmd->result |= (DID_NO_CONNECT << 16); + break; + case IPR_IOASC_HW_SEL_TIMEOUT: + scsi_cmd->result |= (DID_NO_CONNECT << 16); + res->needs_sync_complete = 1; + break; + case IPR_IOASC_SYNC_REQUIRED: + if (!res->in_erp) + res->needs_sync_complete = 1; + scsi_cmd->result |= (DID_IMM_RETRY << 16); + break; + case IPR_IOASC_MED_DO_NOT_REALLOC: /* prevent retries */ + scsi_cmd->result |= (DID_PASSTHROUGH << 16); + break; + case IPR_IOASC_BUS_WAS_RESET: + case IPR_IOASC_BUS_WAS_RESET_BY_OTHER: + /* + * Report the bus reset and ask for a retry. The device + * will give CC/UA the next command. + */ + if (!res->resetting_device) + scsi_report_bus_reset(ioa_cfg->host, scsi_cmd->device->channel); + scsi_cmd->result |= (DID_ERROR << 16); + res->needs_sync_complete = 1; + break; + case IPR_IOASC_HW_DEV_BUS_STATUS: + scsi_cmd->result |= IPR_IOASC_SENSE_STATUS(ioasc); + if (IPR_IOASC_SENSE_STATUS(ioasc) == SAM_STAT_CHECK_CONDITION) { + ipr_erp_cancel_all(ipr_cmd); + return; + } + break; + case IPR_IOASC_NR_INIT_CMD_REQUIRED: + break; + default: + scsi_cmd->result |= (DID_ERROR << 16); + if (!ipr_is_vset_device(res)) + res->needs_sync_complete = 1; + break; + } + + ipr_unmap_sglist(ioa_cfg, ipr_cmd); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + scsi_cmd->scsi_done(scsi_cmd); +} + +/** + * ipr_scsi_done - mid-layer done function + * @ipr_cmd: ipr command struct + * + * This function is invoked by the interrupt handler for + * ops generated by the SCSI mid-layer + * + * Return value: + * none + **/ +static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; + u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + scsi_cmd->resid = be32_to_cpu(ipr_cmd->ioasa.residual_data_len); + + if (likely(IPR_IOASC_SENSE_KEY(ioasc) == 0)) { + ipr_unmap_sglist(ioa_cfg, ipr_cmd); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + scsi_cmd->scsi_done(scsi_cmd); + } else + ipr_erp_start(ioa_cfg, ipr_cmd); +} + +/** + * ipr_save_ioafp_mode_select - Save adapters mode select data + * @ioa_cfg: ioa config struct + * @scsi_cmd: scsi command struct + * + * This function saves mode select data for the adapter to + * use following an adapter reset. + * + * Return value: + * 0 on success / SCSI_MLQUEUE_HOST_BUSY on failure + **/ +static int ipr_save_ioafp_mode_select(struct ipr_ioa_cfg *ioa_cfg, + struct scsi_cmnd *scsi_cmd) +{ + if (!ioa_cfg->saved_mode_pages) { + ioa_cfg->saved_mode_pages = kmalloc(sizeof(struct ipr_mode_pages), + GFP_ATOMIC); + if (!ioa_cfg->saved_mode_pages) { + dev_err(&ioa_cfg->pdev->dev, + "IOA mode select buffer allocation failed\n"); + return SCSI_MLQUEUE_HOST_BUSY; + } + } + + memcpy(ioa_cfg->saved_mode_pages, scsi_cmd->buffer, scsi_cmd->cmnd[4]); + ioa_cfg->saved_mode_page_len = scsi_cmd->cmnd[4]; + return 0; +} + +/** + * ipr_queuecommand - Queue a mid-layer request + * @scsi_cmd: scsi command struct + * @done: done function + * + * This function queues a request generated by the mid-layer. + * + * Return value: + * 0 on success + * SCSI_MLQUEUE_DEVICE_BUSY if device is busy + * SCSI_MLQUEUE_HOST_BUSY if host is busy + **/ +static int ipr_queuecommand(struct scsi_cmnd *scsi_cmd, + void (*done) (struct scsi_cmnd *)) +{ + struct ipr_ioa_cfg *ioa_cfg; + struct ipr_resource_entry *res; + struct ipr_ioarcb *ioarcb; + struct ipr_cmnd *ipr_cmd; + int rc = 0; + + scsi_cmd->scsi_done = done; + ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata; + res = scsi_cmd->device->hostdata; + scsi_cmd->result = (DID_OK << 16); + + /* + * We are currently blocking all devices due to a host reset + * We have told the host to stop giving us new requests, but + * ERP ops don't count. FIXME + */ + if (unlikely(!ioa_cfg->allow_cmds)) + return SCSI_MLQUEUE_HOST_BUSY; + + /* + * FIXME - Create scsi_set_host_offline interface + * and the ioa_is_dead check can be removed + */ + if (unlikely(ioa_cfg->ioa_is_dead || !res)) { + memset(scsi_cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); + scsi_cmd->result = (DID_NO_CONNECT << 16); + scsi_cmd->scsi_done(scsi_cmd); + return 0; + } + + ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + ioarcb = &ipr_cmd->ioarcb; + list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q); + + memcpy(ioarcb->cmd_pkt.cdb, scsi_cmd->cmnd, scsi_cmd->cmd_len); + ipr_cmd->scsi_cmd = scsi_cmd; + ioarcb->res_handle = res->cfgte.res_handle; + ipr_cmd->done = ipr_scsi_done; + ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_PHYS_LOC(res->cfgte.res_addr)); + + if (ipr_is_gscsi(res) || ipr_is_vset_device(res)) { + if (scsi_cmd->underflow == 0) + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK; + + if (res->needs_sync_complete) { + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_SYNC_COMPLETE; + res->needs_sync_complete = 0; + } + + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC; + ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_DELAY_AFTER_RST; + ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_ALIGNED_BFR; + ioarcb->cmd_pkt.flags_lo |= ipr_get_task_attributes(scsi_cmd); + } + + if (!ipr_is_gscsi(res) && scsi_cmd->cmnd[0] >= 0xC0) + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD; + + if (ipr_is_ioa_resource(res) && scsi_cmd->cmnd[0] == MODE_SELECT) + rc = ipr_save_ioafp_mode_select(ioa_cfg, scsi_cmd); + + if (likely(rc == 0)) + rc = ipr_build_ioadl(ioa_cfg, ipr_cmd); + + if (likely(rc == 0)) { + mb(); + writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr), + ioa_cfg->regs.ioarrin_reg); + } else { + list_move_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + return SCSI_MLQUEUE_HOST_BUSY; + } + + return 0; +} + +/** + * ipr_info - Get information about the card/driver + * @scsi_host: scsi host struct + * + * Return value: + * pointer to buffer with description string + **/ +static const char * ipr_ioa_info(struct Scsi_Host *host) +{ + static char buffer[512]; + struct ipr_ioa_cfg *ioa_cfg; + unsigned long lock_flags = 0; + + ioa_cfg = (struct ipr_ioa_cfg *) host->hostdata; + + spin_lock_irqsave(host->host_lock, lock_flags); + sprintf(buffer, "IBM %X Storage Adapter", ioa_cfg->type); + spin_unlock_irqrestore(host->host_lock, lock_flags); + + return buffer; +} + +static struct scsi_host_template driver_template = { + .module = THIS_MODULE, + .name = "IPR", + .info = ipr_ioa_info, + .queuecommand = ipr_queuecommand, + .eh_abort_handler = ipr_eh_abort, + .eh_device_reset_handler = ipr_eh_dev_reset, + .eh_host_reset_handler = ipr_eh_host_reset, + .slave_alloc = ipr_slave_alloc, + .slave_configure = ipr_slave_configure, + .slave_destroy = ipr_slave_destroy, + .bios_param = ipr_biosparam, + .can_queue = IPR_MAX_COMMANDS, + .this_id = -1, + .sg_tablesize = IPR_MAX_SGLIST, + .max_sectors = IPR_MAX_SECTORS, + .cmd_per_lun = IPR_MAX_CMD_PER_LUN, + .use_clustering = ENABLE_CLUSTERING, + .shost_attrs = ipr_ioa_attrs, + .sdev_attrs = ipr_dev_attrs, + .proc_name = IPR_NAME +}; + +#ifdef CONFIG_PPC_PSERIES +static const u16 ipr_blocked_processors[] = { + PV_NORTHSTAR, + PV_PULSAR, + PV_POWER4, + PV_ICESTAR, + PV_SSTAR, + PV_POWER4p, + PV_630, + PV_630p +}; + +/** + * ipr_invalid_adapter - Determine if this adapter is supported on this hardware + * @ioa_cfg: ioa cfg struct + * + * Adapters that use Gemstone revision < 3.1 do not work reliably on + * certain pSeries hardware. This function determines if the given + * adapter is in one of these confgurations or not. + * + * Return value: + * 1 if adapter is not supported / 0 if adapter is supported + **/ +static int ipr_invalid_adapter(struct ipr_ioa_cfg *ioa_cfg) +{ + u8 rev_id; + int i; + + if (ioa_cfg->type == 0x5702) { + if (pci_read_config_byte(ioa_cfg->pdev, PCI_REVISION_ID, + &rev_id) == PCIBIOS_SUCCESSFUL) { + if (rev_id < 4) { + for (i = 0; i < ARRAY_SIZE(ipr_blocked_processors); i++){ + if (__is_processor(ipr_blocked_processors[i])) + return 1; + } + } + } + } + return 0; +} +#else +#define ipr_invalid_adapter(ioa_cfg) 0 +#endif + +/** + * ipr_ioa_bringdown_done - IOA bring down completion. + * @ipr_cmd: ipr command struct + * + * This function processes the completion of an adapter bring down. + * It wakes any reset sleepers. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + ENTER; + ioa_cfg->in_reset_reload = 0; + ioa_cfg->reset_retries = 0; + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + wake_up_all(&ioa_cfg->reset_wait_q); + + spin_unlock_irq(ioa_cfg->host->host_lock); + scsi_unblock_requests(ioa_cfg->host); + spin_lock_irq(ioa_cfg->host->host_lock); + LEAVE; + + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_ioa_reset_done - IOA reset completion. + * @ipr_cmd: ipr command struct + * + * This function processes the completion of an adapter reset. + * It schedules any necessary mid-layer add/removes and + * wakes any reset sleepers. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_resource_entry *res; + struct ipr_hostrcb *hostrcb, *temp; + int i = 0; + + ENTER; + ioa_cfg->in_reset_reload = 0; + ioa_cfg->allow_cmds = 1; + ioa_cfg->reset_cmd = NULL; + + list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { + if (ioa_cfg->allow_ml_add_del && (res->add_to_ml || res->del_from_ml)) { + ipr_trace; + schedule_work(&ioa_cfg->work_q); + break; + } + } + + list_for_each_entry_safe(hostrcb, temp, &ioa_cfg->hostrcb_free_q, queue) { + list_del(&hostrcb->queue); + if (i++ < IPR_NUM_LOG_HCAMS) + ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb); + else + ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb); + } + + dev_info(&ioa_cfg->pdev->dev, "IOA initialized.\n"); + + ioa_cfg->reset_retries = 0; + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + wake_up_all(&ioa_cfg->reset_wait_q); + + spin_unlock_irq(ioa_cfg->host->host_lock); + scsi_unblock_requests(ioa_cfg->host); + spin_lock_irq(ioa_cfg->host->host_lock); + + if (!ioa_cfg->allow_cmds) + scsi_block_requests(ioa_cfg->host); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_set_sup_dev_dflt - Initialize a Set Supported Device buffer + * @supported_dev: supported device struct + * @vpids: vendor product id struct + * + * Return value: + * none + **/ +static void ipr_set_sup_dev_dflt(struct ipr_supported_device *supported_dev, + struct ipr_std_inq_vpids *vpids) +{ + memset(supported_dev, 0, sizeof(struct ipr_supported_device)); + memcpy(&supported_dev->vpids, vpids, sizeof(struct ipr_std_inq_vpids)); + supported_dev->num_records = 1; + supported_dev->data_length = + cpu_to_be16(sizeof(struct ipr_supported_device)); + supported_dev->reserved = 0; +} + +/** + * ipr_set_supported_devs - Send Set Supported Devices for a device + * @ipr_cmd: ipr command struct + * + * This function send a Set Supported Devices to the adapter + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev; + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_resource_entry *res = ipr_cmd->res; + + ipr_cmd->job_step = ipr_ioa_reset_done; + + list_for_each_entry_continue(res, &ioa_cfg->used_res_q, queue) { + if (!ipr_is_af_dasd_device(res)) + continue; + + ipr_cmd->res = res; + ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids); + + ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ; + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD; + + ioarcb->cmd_pkt.cdb[0] = IPR_SET_SUPPORTED_DEVICES; + ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_supported_device) >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_supported_device) & 0xff; + + ioadl->flags_and_data_len = cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST | + sizeof(struct ipr_supported_device)); + ioadl->address = cpu_to_be32(ioa_cfg->vpd_cbs_dma + + offsetof(struct ipr_misc_cbs, supp_dev)); + ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ioarcb->write_data_transfer_length = + cpu_to_be32(sizeof(struct ipr_supported_device)); + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, + IPR_SET_SUP_DEVICE_TIMEOUT); + + ipr_cmd->job_step = ipr_set_supported_devs; + return IPR_RC_JOB_RETURN; + } + + return IPR_RC_JOB_CONTINUE; +} + +/** + * ipr_get_mode_page - Locate specified mode page + * @mode_pages: mode page buffer + * @page_code: page code to find + * @len: minimum required length for mode page + * + * Return value: + * pointer to mode page / NULL on failure + **/ +static void *ipr_get_mode_page(struct ipr_mode_pages *mode_pages, + u32 page_code, u32 len) +{ + struct ipr_mode_page_hdr *mode_hdr; + u32 page_length; + u32 length; + + if (!mode_pages || (mode_pages->hdr.length == 0)) + return NULL; + + length = (mode_pages->hdr.length + 1) - 4 - mode_pages->hdr.block_desc_len; + mode_hdr = (struct ipr_mode_page_hdr *) + (mode_pages->data + mode_pages->hdr.block_desc_len); + + while (length) { + if (IPR_GET_MODE_PAGE_CODE(mode_hdr) == page_code) { + if (mode_hdr->page_length >= (len - sizeof(struct ipr_mode_page_hdr))) + return mode_hdr; + break; + } else { + page_length = (sizeof(struct ipr_mode_page_hdr) + + mode_hdr->page_length); + length -= page_length; + mode_hdr = (struct ipr_mode_page_hdr *) + ((unsigned long)mode_hdr + page_length); + } + } + return NULL; +} + +/** + * ipr_check_term_power - Check for term power errors + * @ioa_cfg: ioa config struct + * @mode_pages: IOAFP mode pages buffer + * + * Check the IOAFP's mode page 28 for term power errors + * + * Return value: + * nothing + **/ +static void ipr_check_term_power(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_mode_pages *mode_pages) +{ + int i; + int entry_length; + struct ipr_dev_bus_entry *bus; + struct ipr_mode_page28 *mode_page; + + mode_page = ipr_get_mode_page(mode_pages, 0x28, + sizeof(struct ipr_mode_page28)); + + entry_length = mode_page->entry_length; + + bus = mode_page->bus; + + for (i = 0; i < mode_page->num_entries; i++) { + if (bus->flags & IPR_SCSI_ATTR_NO_TERM_PWR) { + dev_err(&ioa_cfg->pdev->dev, + "Term power is absent on scsi bus %d\n", + bus->res_addr.bus); + } + + bus = (struct ipr_dev_bus_entry *)((char *)bus + entry_length); + } +} + +/** + * ipr_scsi_bus_speed_limit - Limit the SCSI speed based on SES table + * @ioa_cfg: ioa config struct + * + * Looks through the config table checking for SES devices. If + * the SES device is in the SES table indicating a maximum SCSI + * bus speed, the speed is limited for the bus. + * + * Return value: + * none + **/ +static void ipr_scsi_bus_speed_limit(struct ipr_ioa_cfg *ioa_cfg) +{ + u32 max_xfer_rate; + int i; + + for (i = 0; i < IPR_MAX_NUM_BUSES; i++) { + max_xfer_rate = ipr_get_max_scsi_speed(ioa_cfg, i, + ioa_cfg->bus_attr[i].bus_width); + + if (max_xfer_rate < ioa_cfg->bus_attr[i].max_xfer_rate) + ioa_cfg->bus_attr[i].max_xfer_rate = max_xfer_rate; + } +} + +/** + * ipr_modify_ioafp_mode_page_28 - Modify IOAFP Mode Page 28 + * @ioa_cfg: ioa config struct + * @mode_pages: mode page 28 buffer + * + * Updates mode page 28 based on driver configuration + * + * Return value: + * none + **/ +static void ipr_modify_ioafp_mode_page_28(struct ipr_ioa_cfg *ioa_cfg, + struct ipr_mode_pages *mode_pages) +{ + int i, entry_length; + struct ipr_dev_bus_entry *bus; + struct ipr_bus_attributes *bus_attr; + struct ipr_mode_page28 *mode_page; + + mode_page = ipr_get_mode_page(mode_pages, 0x28, + sizeof(struct ipr_mode_page28)); + + entry_length = mode_page->entry_length; + + /* Loop for each device bus entry */ + for (i = 0, bus = mode_page->bus; + i < mode_page->num_entries; + i++, bus = (struct ipr_dev_bus_entry *)((u8 *)bus + entry_length)) { + if (bus->res_addr.bus > IPR_MAX_NUM_BUSES) { + dev_err(&ioa_cfg->pdev->dev, + "Invalid resource address reported: 0x%08X\n", + IPR_GET_PHYS_LOC(bus->res_addr)); + continue; + } + + bus_attr = &ioa_cfg->bus_attr[i]; + bus->extended_reset_delay = IPR_EXTENDED_RESET_DELAY; + bus->bus_width = bus_attr->bus_width; + bus->max_xfer_rate = cpu_to_be32(bus_attr->max_xfer_rate); + bus->flags &= ~IPR_SCSI_ATTR_QAS_MASK; + if (bus_attr->qas_enabled) + bus->flags |= IPR_SCSI_ATTR_ENABLE_QAS; + else + bus->flags |= IPR_SCSI_ATTR_DISABLE_QAS; + } +} + +/** + * ipr_build_mode_select - Build a mode select command + * @ipr_cmd: ipr command struct + * @res_handle: resource handle to send command to + * @parm: Byte 2 of Mode Sense command + * @dma_addr: DMA buffer address + * @xfer_len: data transfer length + * + * Return value: + * none + **/ +static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd, + u32 res_handle, u8 parm, u32 dma_addr, + u8 xfer_len) +{ + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + + ioarcb->res_handle = res_handle; + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; + ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ; + ioarcb->cmd_pkt.cdb[0] = MODE_SELECT; + ioarcb->cmd_pkt.cdb[1] = parm; + ioarcb->cmd_pkt.cdb[4] = xfer_len; + + ioadl->flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST | xfer_len); + ioadl->address = cpu_to_be32(dma_addr); + ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ioarcb->write_data_transfer_length = cpu_to_be32(xfer_len); +} + +/** + * ipr_ioafp_mode_select_page28 - Issue Mode Select Page 28 to IOA + * @ipr_cmd: ipr command struct + * + * This function sets up the SCSI bus attributes and sends + * a Mode Select for Page 28 to activate them. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_mode_pages *mode_pages = &ioa_cfg->vpd_cbs->mode_pages; + int length; + + ENTER; + if (ioa_cfg->saved_mode_pages) { + memcpy(mode_pages, ioa_cfg->saved_mode_pages, + ioa_cfg->saved_mode_page_len); + length = ioa_cfg->saved_mode_page_len; + } else { + ipr_scsi_bus_speed_limit(ioa_cfg); + ipr_check_term_power(ioa_cfg, mode_pages); + ipr_modify_ioafp_mode_page_28(ioa_cfg, mode_pages); + length = mode_pages->hdr.length + 1; + mode_pages->hdr.length = 0; + } + + ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11, + ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, mode_pages), + length); + + ipr_cmd->job_step = ipr_set_supported_devs; + ipr_cmd->res = list_entry(ioa_cfg->used_res_q.next, + struct ipr_resource_entry, queue); + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_build_mode_sense - Builds a mode sense command + * @ipr_cmd: ipr command struct + * @res: resource entry struct + * @parm: Byte 2 of mode sense command + * @dma_addr: DMA address of mode sense buffer + * @xfer_len: Size of DMA buffer + * + * Return value: + * none + **/ +static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd, + u32 res_handle, + u8 parm, u32 dma_addr, u8 xfer_len) +{ + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + + ioarcb->res_handle = res_handle; + ioarcb->cmd_pkt.cdb[0] = MODE_SENSE; + ioarcb->cmd_pkt.cdb[2] = parm; + ioarcb->cmd_pkt.cdb[4] = xfer_len; + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; + + ioadl->flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len); + ioadl->address = cpu_to_be32(dma_addr); + ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len); +} + +/** + * ipr_ioafp_mode_sense_page28 - Issue Mode Sense Page 28 to IOA + * @ipr_cmd: ipr command struct + * + * This function send a Page 28 mode sense to the IOA to + * retrieve SCSI bus attributes. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + ENTER; + ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), + 0x28, ioa_cfg->vpd_cbs_dma + + offsetof(struct ipr_misc_cbs, mode_pages), + sizeof(struct ipr_mode_pages)); + + ipr_cmd->job_step = ipr_ioafp_mode_select_page28; + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_init_res_table - Initialize the resource table + * @ipr_cmd: ipr command struct + * + * This function looks through the existing resource table, comparing + * it with the config table. This function will take care of old/new + * devices and schedule adding/removing them from the mid-layer + * as appropriate. + * + * Return value: + * IPR_RC_JOB_CONTINUE + **/ +static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_resource_entry *res, *temp; + struct ipr_config_table_entry *cfgte; + int found, i; + LIST_HEAD(old_res); + + ENTER; + if (ioa_cfg->cfg_table->hdr.flags & IPR_UCODE_DOWNLOAD_REQ) + dev_err(&ioa_cfg->pdev->dev, "Microcode download required\n"); + + list_for_each_entry_safe(res, temp, &ioa_cfg->used_res_q, queue) + list_move_tail(&res->queue, &old_res); + + for (i = 0; i < ioa_cfg->cfg_table->hdr.num_entries; i++) { + cfgte = &ioa_cfg->cfg_table->dev[i]; + found = 0; + + list_for_each_entry_safe(res, temp, &old_res, queue) { + if (!memcmp(&res->cfgte.res_addr, + &cfgte->res_addr, sizeof(cfgte->res_addr))) { + list_move_tail(&res->queue, &ioa_cfg->used_res_q); + found = 1; + break; + } + } + + if (!found) { + if (list_empty(&ioa_cfg->free_res_q)) { + dev_err(&ioa_cfg->pdev->dev, "Too many devices attached\n"); + break; + } + + found = 1; + res = list_entry(ioa_cfg->free_res_q.next, + struct ipr_resource_entry, queue); + list_move_tail(&res->queue, &ioa_cfg->used_res_q); + ipr_init_res_entry(res); + res->add_to_ml = 1; + } + + if (found) + memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry)); + } + + list_for_each_entry_safe(res, temp, &old_res, queue) { + if (res->sdev) { + res->del_from_ml = 1; + list_move_tail(&res->queue, &ioa_cfg->used_res_q); + } else { + list_move_tail(&res->queue, &ioa_cfg->free_res_q); + } + } + + ipr_cmd->job_step = ipr_ioafp_mode_sense_page28; + + LEAVE; + return IPR_RC_JOB_CONTINUE; +} + +/** + * ipr_ioafp_query_ioa_cfg - Send a Query IOA Config to the adapter. + * @ipr_cmd: ipr command struct + * + * This function sends a Query IOA Configuration command + * to the adapter to retrieve the IOA configuration table. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data; + + ENTER; + dev_info(&ioa_cfg->pdev->dev, "Adapter firmware version: %02X%02X%02X%02X\n", + ucode_vpd->major_release, ucode_vpd->card_type, + ucode_vpd->minor_release[0], ucode_vpd->minor_release[1]); + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD; + ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + + ioarcb->cmd_pkt.cdb[0] = IPR_QUERY_IOA_CONFIG; + ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_config_table) >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_config_table) & 0xff; + + ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ioarcb->read_data_transfer_length = + cpu_to_be32(sizeof(struct ipr_config_table)); + + ioadl->address = cpu_to_be32(ioa_cfg->cfg_table_dma); + ioadl->flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(struct ipr_config_table)); + + ipr_cmd->job_step = ipr_init_res_table; + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_ioafp_inquiry - Send an Inquiry to the adapter. + * @ipr_cmd: ipr command struct + * + * This utility function sends an inquiry to the adapter. + * + * Return value: + * none + **/ +static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page, + u32 dma_addr, u8 xfer_len) +{ + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; + + ENTER; + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; + ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + + ioarcb->cmd_pkt.cdb[0] = INQUIRY; + ioarcb->cmd_pkt.cdb[1] = flags; + ioarcb->cmd_pkt.cdb[2] = page; + ioarcb->cmd_pkt.cdb[4] = xfer_len; + + ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc)); + ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len); + + ioadl->address = cpu_to_be32(dma_addr); + ioadl->flags_and_data_len = + cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len); + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); + LEAVE; +} + +/** + * ipr_ioafp_page3_inquiry - Send a Page 3 Inquiry to the adapter. + * @ipr_cmd: ipr command struct + * + * This function sends a Page 3 inquiry to the adapter + * to retrieve software VPD information. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + char type[5]; + + ENTER; + + /* Grab the type out of the VPD and store it away */ + memcpy(type, ioa_cfg->vpd_cbs->ioa_vpd.std_inq_data.vpids.product_id, 4); + type[4] = '\0'; + ioa_cfg->type = simple_strtoul((char *)type, NULL, 16); + + ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg; + + ipr_ioafp_inquiry(ipr_cmd, 1, 3, + ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, page3_data), + sizeof(struct ipr_inquiry_page3)); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_ioafp_std_inquiry - Send a Standard Inquiry to the adapter. + * @ipr_cmd: ipr command struct + * + * This function sends a standard inquiry to the adapter. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + ENTER; + ipr_cmd->job_step = ipr_ioafp_page3_inquiry; + + ipr_ioafp_inquiry(ipr_cmd, 0, 0, + ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, ioa_vpd), + sizeof(struct ipr_ioa_vpd)); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_ioafp_indentify_hrrq - Send Identify Host RRQ. + * @ipr_cmd: ipr command struct + * + * This function send an Identify Host Request Response Queue + * command to establish the HRRQ with the adapter. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_ioafp_indentify_hrrq(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; + + ENTER; + dev_info(&ioa_cfg->pdev->dev, "Starting IOA initialization sequence.\n"); + + ioarcb->cmd_pkt.cdb[0] = IPR_ID_HOST_RR_Q; + ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + + ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD; + ioarcb->cmd_pkt.cdb[2] = + ((u32) ioa_cfg->host_rrq_dma >> 24) & 0xff; + ioarcb->cmd_pkt.cdb[3] = + ((u32) ioa_cfg->host_rrq_dma >> 16) & 0xff; + ioarcb->cmd_pkt.cdb[4] = + ((u32) ioa_cfg->host_rrq_dma >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[5] = + ((u32) ioa_cfg->host_rrq_dma) & 0xff; + ioarcb->cmd_pkt.cdb[7] = + ((sizeof(u32) * IPR_NUM_CMD_BLKS) >> 8) & 0xff; + ioarcb->cmd_pkt.cdb[8] = + (sizeof(u32) * IPR_NUM_CMD_BLKS) & 0xff; + + ipr_cmd->job_step = ipr_ioafp_std_inquiry; + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_reset_timer_done - Adapter reset timer function + * @ipr_cmd: ipr command struct + * + * Description: This function is used in adapter reset processing + * for timing events. If the reset_cmd pointer in the IOA + * config struct is not this adapter's we are doing nested + * resets and fail_all_ops will take care of freeing the + * command block. + * + * Return value: + * none + **/ +static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + unsigned long lock_flags = 0; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + + if (ioa_cfg->reset_cmd == ipr_cmd) { + list_del(&ipr_cmd->queue); + ipr_cmd->done(ipr_cmd); + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); +} + +/** + * ipr_reset_start_timer - Start a timer for adapter reset job + * @ipr_cmd: ipr command struct + * @timeout: timeout value + * + * Description: This function is used in adapter reset processing + * for timing events. If the reset_cmd pointer in the IOA + * config struct is not this adapter's we are doing nested + * resets and fail_all_ops will take care of freeing the + * command block. + * + * Return value: + * none + **/ +static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, + unsigned long timeout) +{ + list_add_tail(&ipr_cmd->queue, &ipr_cmd->ioa_cfg->pending_q); + ipr_cmd->done = ipr_reset_ioa_job; + + ipr_cmd->timer.data = (unsigned long) ipr_cmd; + ipr_cmd->timer.expires = jiffies + timeout; + ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done; + add_timer(&ipr_cmd->timer); +} + +/** + * ipr_init_ioa_mem - Initialize ioa_cfg control block + * @ioa_cfg: ioa cfg struct + * + * Return value: + * nothing + **/ +static void ipr_init_ioa_mem(struct ipr_ioa_cfg *ioa_cfg) +{ + memset(ioa_cfg->host_rrq, 0, sizeof(u32) * IPR_NUM_CMD_BLKS); + + /* Initialize Host RRQ pointers */ + ioa_cfg->hrrq_start = ioa_cfg->host_rrq; + ioa_cfg->hrrq_end = &ioa_cfg->host_rrq[IPR_NUM_CMD_BLKS - 1]; + ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start; + ioa_cfg->toggle_bit = 1; + + /* Zero out config table */ + memset(ioa_cfg->cfg_table, 0, sizeof(struct ipr_config_table)); +} + +/** + * ipr_reset_enable_ioa - Enable the IOA following a reset. + * @ipr_cmd: ipr command struct + * + * This function reinitializes some control blocks and + * enables destructive diagnostics on the adapter. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + volatile u32 int_reg; + + ENTER; + ipr_cmd->job_step = ipr_ioafp_indentify_hrrq; + ipr_init_ioa_mem(ioa_cfg); + + ioa_cfg->allow_interrupts = 1; + int_reg = readl(ioa_cfg->regs.sense_interrupt_reg); + + if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) { + writel((IPR_PCII_ERROR_INTERRUPTS | IPR_PCII_HRRQ_UPDATED), + ioa_cfg->regs.clr_interrupt_mask_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg); + return IPR_RC_JOB_CONTINUE; + } + + /* Enable destructive diagnostics on IOA */ + writel(IPR_DOORBELL, ioa_cfg->regs.set_uproc_interrupt_reg); + + writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg); + int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg); + + dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n"); + + ipr_cmd->timer.data = (unsigned long) ipr_cmd; + ipr_cmd->timer.expires = jiffies + IPR_OPERATIONAL_TIMEOUT; + ipr_cmd->timer.function = (void (*)(unsigned long))ipr_timeout; + add_timer(&ipr_cmd->timer); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_reset_wait_for_dump - Wait for a dump to timeout. + * @ipr_cmd: ipr command struct + * + * This function is invoked when an adapter dump has run out + * of processing time. + * + * Return value: + * IPR_RC_JOB_CONTINUE + **/ +static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + if (ioa_cfg->sdt_state == GET_DUMP) + ioa_cfg->sdt_state = ABORT_DUMP; + + ipr_cmd->job_step = ipr_reset_alert; + + return IPR_RC_JOB_CONTINUE; +} + +/** + * ipr_unit_check_no_data - Log a unit check/no data error log + * @ioa_cfg: ioa config struct + * + * Logs an error indicating the adapter unit checked, but for some + * reason, we were unable to fetch the unit check buffer. + * + * Return value: + * nothing + **/ +static void ipr_unit_check_no_data(struct ipr_ioa_cfg *ioa_cfg) +{ + ioa_cfg->errors_logged++; + dev_err(&ioa_cfg->pdev->dev, "IOA unit check with no data\n"); +} + +/** + * ipr_get_unit_check_buffer - Get the unit check buffer from the IOA + * @ioa_cfg: ioa config struct + * + * Fetches the unit check buffer from the adapter by clocking the data + * through the mailbox register. + * + * Return value: + * nothing + **/ +static void ipr_get_unit_check_buffer(struct ipr_ioa_cfg *ioa_cfg) +{ + unsigned long mailbox; + struct ipr_hostrcb *hostrcb; + struct ipr_uc_sdt sdt; + int rc, length; + + mailbox = readl(ioa_cfg->ioa_mailbox); + + if (!ipr_sdt_is_fmt2(mailbox)) { + ipr_unit_check_no_data(ioa_cfg); + return; + } + + memset(&sdt, 0, sizeof(struct ipr_uc_sdt)); + rc = ipr_get_ldump_data_section(ioa_cfg, mailbox, (u32 *) &sdt, + (sizeof(struct ipr_uc_sdt)) / sizeof(u32)); + + if (rc || (be32_to_cpu(sdt.hdr.state) != IPR_FMT2_SDT_READY_TO_USE) || + !(sdt.entry[0].flags & IPR_SDT_VALID_ENTRY)) { + ipr_unit_check_no_data(ioa_cfg); + return; + } + + /* Find length of the first sdt entry (UC buffer) */ + length = (be32_to_cpu(sdt.entry[0].end_offset) - + be32_to_cpu(sdt.entry[0].bar_str_offset)) & IPR_FMT2_MBX_ADDR_MASK; + + hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next, + struct ipr_hostrcb, queue); + list_del(&hostrcb->queue); + memset(hostrcb, 0, IPR_HOSTRCB_SZ); + + rc = ipr_get_ldump_data_section(ioa_cfg, + be32_to_cpu(sdt.entry[0].bar_str_offset), + (u32 *)hostrcb, + min(length, (int)IPR_HOSTRCB_SZ) / sizeof(u32)); + + if (!rc) + ipr_handle_log_data(ioa_cfg, hostrcb); + else + ipr_unit_check_no_data(ioa_cfg); + + list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q); +} + +/** + * ipr_reset_restore_cfg_space - Restore PCI config space. + * @ipr_cmd: ipr command struct + * + * Description: This function restores the saved PCI config space of + * the adapter, fails all outstanding ops back to the callers, and + * fetches the dump/unit check if applicable to this reset. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + int rc; + + ENTER; + rc = pci_restore_state(ioa_cfg->pdev, ioa_cfg->pci_cfg_buf); + + if (rc != PCIBIOS_SUCCESSFUL) { + ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); + return IPR_RC_JOB_CONTINUE; + } + + if (ipr_set_pcix_cmd_reg(ioa_cfg)) { + ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); + return IPR_RC_JOB_CONTINUE; + } + + ipr_fail_all_ops(ioa_cfg); + + if (ioa_cfg->ioa_unit_checked) { + ioa_cfg->ioa_unit_checked = 0; + ipr_get_unit_check_buffer(ioa_cfg); + ipr_cmd->job_step = ipr_reset_alert; + ipr_reset_start_timer(ipr_cmd, 0); + return IPR_RC_JOB_RETURN; + } + + if (ioa_cfg->in_ioa_bringdown) { + ipr_cmd->job_step = ipr_ioa_bringdown_done; + } else { + ipr_cmd->job_step = ipr_reset_enable_ioa; + + if (GET_DUMP == ioa_cfg->sdt_state) { + ipr_reset_start_timer(ipr_cmd, IPR_DUMP_TIMEOUT); + ipr_cmd->job_step = ipr_reset_wait_for_dump; + schedule_work(&ioa_cfg->work_q); + return IPR_RC_JOB_RETURN; + } + } + + ENTER; + return IPR_RC_JOB_CONTINUE; +} + +/** + * ipr_reset_start_bist - Run BIST on the adapter. + * @ipr_cmd: ipr command struct + * + * Description: This function runs BIST on the adapter, then delays 2 seconds. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + int rc; + + ENTER; + rc = pci_write_config_byte(ioa_cfg->pdev, PCI_BIST, PCI_BIST_START); + + if (rc != PCIBIOS_SUCCESSFUL) { + ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); + rc = IPR_RC_JOB_CONTINUE; + } else { + ipr_cmd->job_step = ipr_reset_restore_cfg_space; + ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT); + rc = IPR_RC_JOB_RETURN; + } + + LEAVE; + return rc; +} + +/** + * ipr_reset_allowed - Query whether or not IOA can be reset + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 if reset not allowed / non-zero if reset is allowed + **/ +static int ipr_reset_allowed(struct ipr_ioa_cfg *ioa_cfg) +{ + volatile u32 temp_reg; + + temp_reg = readl(ioa_cfg->regs.sense_interrupt_reg); + return ((temp_reg & IPR_PCII_CRITICAL_OPERATION) == 0); +} + +/** + * ipr_reset_wait_to_start_bist - Wait for permission to reset IOA. + * @ipr_cmd: ipr command struct + * + * Description: This function waits for adapter permission to run BIST, + * then runs BIST. If the adapter does not give permission after a + * reasonable time, we will reset the adapter anyway. The impact of + * resetting the adapter without warning the adapter is the risk of + * losing the persistent error log on the adapter. If the adapter is + * reset while it is writing to the flash on the adapter, the flash + * segment will have bad ECC and be zeroed. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + int rc = IPR_RC_JOB_RETURN; + + if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->time_left) { + ipr_cmd->time_left -= IPR_CHECK_FOR_RESET_TIMEOUT; + ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); + } else { + ipr_cmd->job_step = ipr_reset_start_bist; + rc = IPR_RC_JOB_CONTINUE; + } + + return rc; +} + +/** + * ipr_reset_alert_part2 - Alert the adapter of a pending reset + * @ipr_cmd: ipr command struct + * + * Description: This function alerts the adapter that it will be reset. + * If memory space is not currently enabled, proceed directly + * to running BIST on the adapter. The timer must always be started + * so we guarantee we do not run BIST from ipr_isr. + * + * Return value: + * IPR_RC_JOB_RETURN + **/ +static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + u16 cmd_reg; + int rc; + + ENTER; + rc = pci_read_config_word(ioa_cfg->pdev, PCI_COMMAND, &cmd_reg); + + if ((rc == PCIBIOS_SUCCESSFUL) && (cmd_reg & PCI_COMMAND_MEMORY)) { + ipr_mask_and_clear_interrupts(ioa_cfg, ~0); + writel(IPR_UPROCI_RESET_ALERT, ioa_cfg->regs.set_uproc_interrupt_reg); + ipr_cmd->job_step = ipr_reset_wait_to_start_bist; + } else { + ipr_cmd->job_step = ipr_reset_start_bist; + } + + ipr_cmd->time_left = IPR_WAIT_FOR_RESET_TIMEOUT; + ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_reset_ucode_download_done - Microcode download completion + * @ipr_cmd: ipr command struct + * + * Description: This function unmaps the microcode download buffer. + * + * Return value: + * IPR_RC_JOB_CONTINUE + **/ +static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_sglist *sglist = ioa_cfg->ucode_sglist; + + pci_unmap_sg(ioa_cfg->pdev, sglist->scatterlist, + sglist->num_sg, DMA_TO_DEVICE); + + ipr_cmd->job_step = ipr_reset_alert; + return IPR_RC_JOB_CONTINUE; +} + +/** + * ipr_reset_ucode_download - Download microcode to the adapter + * @ipr_cmd: ipr command struct + * + * Description: This function checks to see if it there is microcode + * to download to the adapter. If there is, a download is performed. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + struct ipr_sglist *sglist = ioa_cfg->ucode_sglist; + + ENTER; + ipr_cmd->job_step = ipr_reset_alert; + + if (!sglist) + return IPR_RC_JOB_CONTINUE; + + ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB; + ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER; + ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE; + ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16; + ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8; + ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff; + + if (ipr_map_ucode_buffer(ipr_cmd, sglist, sglist->buffer_len)) { + dev_err(&ioa_cfg->pdev->dev, + "Failed to map microcode download buffer\n"); + return IPR_RC_JOB_CONTINUE; + } + + ipr_cmd->job_step = ipr_reset_ucode_download_done; + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, + IPR_WRITE_BUFFER_TIMEOUT); + + LEAVE; + return IPR_RC_JOB_RETURN; +} + +/** + * ipr_reset_shutdown_ioa - Shutdown the adapter + * @ipr_cmd: ipr command struct + * + * Description: This function issues an adapter shutdown of the + * specified type to the specified adapter as part of the + * adapter reset job. + * + * Return value: + * IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN + **/ +static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd) +{ + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + enum ipr_shutdown_type shutdown_type = ipr_cmd->shutdown_type; + unsigned long timeout; + int rc = IPR_RC_JOB_CONTINUE; + + ENTER; + if (shutdown_type != IPR_SHUTDOWN_NONE && !ioa_cfg->ioa_is_dead) { + ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE); + ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD; + ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN; + ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type; + + if (shutdown_type == IPR_SHUTDOWN_ABBREV) + timeout = IPR_ABBREV_SHUTDOWN_TIMEOUT; + else if (shutdown_type == IPR_SHUTDOWN_PREPARE_FOR_NORMAL) + timeout = IPR_INTERNAL_TIMEOUT; + else + timeout = IPR_SHUTDOWN_TIMEOUT; + + ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout); + + rc = IPR_RC_JOB_RETURN; + ipr_cmd->job_step = ipr_reset_ucode_download; + } else + ipr_cmd->job_step = ipr_reset_alert; + + LEAVE; + return rc; +} + +/** + * ipr_reset_ioa_job - Adapter reset job + * @ipr_cmd: ipr command struct + * + * Description: This function is the job router for the adapter reset job. + * + * Return value: + * none + **/ +static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd) +{ + u32 rc, ioasc; + unsigned long scratch = ipr_cmd->scratch; + struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; + + do { + ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); + + if (ioa_cfg->reset_cmd != ipr_cmd) { + /* + * We are doing nested adapter resets and this is + * not the current reset job. + */ + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + return; + } + + if (IPR_IOASC_SENSE_KEY(ioasc)) { + dev_err(&ioa_cfg->pdev->dev, + "0x%02X failed with IOASC: 0x%08X\n", + ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc); + + ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE); + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + return; + } + + ipr_reinit_ipr_cmnd(ipr_cmd); + ipr_cmd->scratch = scratch; + rc = ipr_cmd->job_step(ipr_cmd); + } while(rc == IPR_RC_JOB_CONTINUE); +} + +/** + * _ipr_initiate_ioa_reset - Initiate an adapter reset + * @ioa_cfg: ioa config struct + * @job_step: first job step of reset job + * @shutdown_type: shutdown type + * + * Description: This function will initiate the reset of the given adapter + * starting at the selected job step. + * If the caller needs to wait on the completion of the reset, + * the caller must sleep on the reset_wait_q. + * + * Return value: + * none + **/ +static void _ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg, + int (*job_step) (struct ipr_cmnd *), + enum ipr_shutdown_type shutdown_type) +{ + struct ipr_cmnd *ipr_cmd; + + ioa_cfg->in_reset_reload = 1; + ioa_cfg->allow_cmds = 0; + scsi_block_requests(ioa_cfg->host); + + ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); + ioa_cfg->reset_cmd = ipr_cmd; + ipr_cmd->job_step = job_step; + ipr_cmd->shutdown_type = shutdown_type; + + ipr_reset_ioa_job(ipr_cmd); +} + +/** + * ipr_initiate_ioa_reset - Initiate an adapter reset + * @ioa_cfg: ioa config struct + * @shutdown_type: shutdown type + * + * Description: This function will initiate the reset of the given adapter. + * If the caller needs to wait on the completion of the reset, + * the caller must sleep on the reset_wait_q. + * + * Return value: + * none + **/ +static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg, + enum ipr_shutdown_type shutdown_type) +{ + if (ioa_cfg->ioa_is_dead) + return; + + if (ioa_cfg->in_reset_reload && ioa_cfg->sdt_state == GET_DUMP) + ioa_cfg->sdt_state = ABORT_DUMP; + + if (ioa_cfg->reset_retries++ > IPR_NUM_RESET_RELOAD_RETRIES) { + dev_err(&ioa_cfg->pdev->dev, + "IOA taken offline - error recovery failed\n"); + + ioa_cfg->reset_retries = 0; + ioa_cfg->ioa_is_dead = 1; + + if (ioa_cfg->in_ioa_bringdown) { + ioa_cfg->reset_cmd = NULL; + ioa_cfg->in_reset_reload = 0; + ipr_fail_all_ops(ioa_cfg); + wake_up_all(&ioa_cfg->reset_wait_q); + + spin_unlock_irq(ioa_cfg->host->host_lock); + scsi_unblock_requests(ioa_cfg->host); + spin_lock_irq(ioa_cfg->host->host_lock); + return; + } else { + ioa_cfg->in_ioa_bringdown = 1; + shutdown_type = IPR_SHUTDOWN_NONE; + } + } + + _ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_shutdown_ioa, + shutdown_type); +} + +/** + * ipr_probe_ioa_part2 - Initializes IOAs found in ipr_probe_ioa(..) + * @ioa_cfg: ioa cfg struct + * + * Description: This is the second phase of adapter intialization + * This function takes care of initilizing the adapter to the point + * where it can accept new commands. + + * Return value: + * 0 on sucess / -EIO on failure + **/ +static int __devinit ipr_probe_ioa_part2(struct ipr_ioa_cfg *ioa_cfg) +{ + int rc = 0; + unsigned long host_lock_flags = 0; + + ENTER; + spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); + dev_dbg(&ioa_cfg->pdev->dev, "ioa_cfg adx: 0x%p\n", ioa_cfg); + _ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_enable_ioa, IPR_SHUTDOWN_NONE); + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); + + if (ioa_cfg->ioa_is_dead) { + rc = -EIO; + } else if (ipr_invalid_adapter(ioa_cfg)) { + if (!ipr_testmode) + rc = -EIO; + + dev_err(&ioa_cfg->pdev->dev, + "Adapter not supported in this hardware configuration.\n"); + } + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); + + LEAVE; + return rc; +} + +/** + * ipr_free_cmd_blks - Frees command blocks allocated for an adapter + * @ioa_cfg: ioa config struct + * + * Return value: + * none + **/ +static void ipr_free_cmd_blks(struct ipr_ioa_cfg *ioa_cfg) +{ + int i; + + for (i = 0; i < IPR_NUM_CMD_BLKS; i++) { + if (ioa_cfg->ipr_cmnd_list[i]) + pci_pool_free(ioa_cfg->ipr_cmd_pool, + ioa_cfg->ipr_cmnd_list[i], + ioa_cfg->ipr_cmnd_list_dma[i]); + + ioa_cfg->ipr_cmnd_list[i] = NULL; + } + + if (ioa_cfg->ipr_cmd_pool) + pci_pool_destroy (ioa_cfg->ipr_cmd_pool); + + ioa_cfg->ipr_cmd_pool = NULL; +} + +/** + * ipr_free_mem - Frees memory allocated for an adapter + * @ioa_cfg: ioa cfg struct + * + * Return value: + * nothing + **/ +static void ipr_free_mem(struct ipr_ioa_cfg *ioa_cfg) +{ + int i; + + kfree(ioa_cfg->res_entries); + pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_misc_cbs), + ioa_cfg->vpd_cbs, ioa_cfg->vpd_cbs_dma); + ipr_free_cmd_blks(ioa_cfg); + pci_free_consistent(ioa_cfg->pdev, sizeof(u32) * IPR_NUM_CMD_BLKS, + ioa_cfg->host_rrq, ioa_cfg->host_rrq_dma); + pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_config_table), + ioa_cfg->cfg_table, + ioa_cfg->cfg_table_dma); + + for (i = 0; i < IPR_NUM_HCAMS; i++) { + pci_free_consistent(ioa_cfg->pdev, + sizeof(struct ipr_hostrcb), + ioa_cfg->hostrcb[i], + ioa_cfg->hostrcb_dma[i]); + } + + ipr_free_dump(ioa_cfg); + kfree(ioa_cfg->saved_mode_pages); + kfree(ioa_cfg->trace); +} + +/** + * ipr_free_all_resources - Free all allocated resources for an adapter. + * @ipr_cmd: ipr command struct + * + * This function frees all allocated resources for the + * specified adapter. + * + * Return value: + * none + **/ +static void ipr_free_all_resources(struct ipr_ioa_cfg *ioa_cfg) +{ + ENTER; + free_irq(ioa_cfg->pdev->irq, ioa_cfg); + iounmap((void *) ioa_cfg->hdw_dma_regs); + release_mem_region(ioa_cfg->hdw_dma_regs_pci, + pci_resource_len(ioa_cfg->pdev, 0)); + ipr_free_mem(ioa_cfg); + scsi_host_put(ioa_cfg->host); + LEAVE; +} + +/** + * ipr_alloc_cmd_blks - Allocate command blocks for an adapter + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / -ENOMEM on allocation failure + **/ +static int __devinit ipr_alloc_cmd_blks(struct ipr_ioa_cfg *ioa_cfg) +{ + struct ipr_cmnd *ipr_cmd; + struct ipr_ioarcb *ioarcb; + u32 dma_addr; + int i; + + ioa_cfg->ipr_cmd_pool = pci_pool_create (IPR_NAME, ioa_cfg->pdev, + sizeof(struct ipr_cmnd), 8, 0); + + if (!ioa_cfg->ipr_cmd_pool) + return -ENOMEM; + + for (i = 0; i < IPR_NUM_CMD_BLKS; i++) { + ipr_cmd = pci_pool_alloc (ioa_cfg->ipr_cmd_pool, SLAB_KERNEL, &dma_addr); + + if (!ipr_cmd) { + ipr_free_cmd_blks(ioa_cfg); + return -ENOMEM; + } + + memset(ipr_cmd, 0, sizeof(*ipr_cmd)); + ioa_cfg->ipr_cmnd_list[i] = ipr_cmd; + ioa_cfg->ipr_cmnd_list_dma[i] = dma_addr; + + ioarcb = &ipr_cmd->ioarcb; + ioarcb->ioarcb_host_pci_addr = cpu_to_be32(dma_addr); + ioarcb->host_response_handle = cpu_to_be32(i << 2); + ioarcb->write_ioadl_addr = + cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioadl)); + ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; + ioarcb->ioasa_host_pci_addr = + cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioasa)); + ioarcb->ioasa_len = cpu_to_be16(sizeof(struct ipr_ioasa)); + ipr_cmd->cmd_index = i; + ipr_cmd->ioa_cfg = ioa_cfg; + ipr_cmd->sense_buffer_dma = dma_addr + + offsetof(struct ipr_cmnd, sense_buffer); + + list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q); + } + + return 0; +} + +/** + * ipr_alloc_mem - Allocate memory for an adapter + * @ioa_cfg: ioa config struct + * + * Return value: + * 0 on success / non-zero for error + **/ +static int __devinit ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg) +{ + int i; + + ENTER; + ioa_cfg->res_entries = kmalloc(sizeof(struct ipr_resource_entry) * + IPR_MAX_PHYSICAL_DEVS, GFP_KERNEL); + + if (!ioa_cfg->res_entries) + goto cleanup; + + memset(ioa_cfg->res_entries, 0, + sizeof(struct ipr_resource_entry) * IPR_MAX_PHYSICAL_DEVS); + + for (i = 0; i < IPR_MAX_PHYSICAL_DEVS; i++) + list_add_tail(&ioa_cfg->res_entries[i].queue, &ioa_cfg->free_res_q); + + ioa_cfg->vpd_cbs = pci_alloc_consistent(ioa_cfg->pdev, + sizeof(struct ipr_misc_cbs), + &ioa_cfg->vpd_cbs_dma); + + if (!ioa_cfg->vpd_cbs) + goto cleanup; + + if (ipr_alloc_cmd_blks(ioa_cfg)) + goto cleanup; + + ioa_cfg->host_rrq = pci_alloc_consistent(ioa_cfg->pdev, + sizeof(u32) * IPR_NUM_CMD_BLKS, + &ioa_cfg->host_rrq_dma); + + if (!ioa_cfg->host_rrq) + goto cleanup; + + ioa_cfg->cfg_table = pci_alloc_consistent(ioa_cfg->pdev, + sizeof(struct ipr_config_table), + &ioa_cfg->cfg_table_dma); + + if (!ioa_cfg->cfg_table) + goto cleanup; + + for (i = 0; i < IPR_NUM_HCAMS; i++) { + ioa_cfg->hostrcb[i] = pci_alloc_consistent(ioa_cfg->pdev, + sizeof(struct ipr_hostrcb), + &ioa_cfg->hostrcb_dma[i]); + + if (!ioa_cfg->hostrcb[i]) + goto cleanup; + + memset(ioa_cfg->hostrcb[i], 0, sizeof(struct ipr_hostrcb)); + ioa_cfg->hostrcb[i]->hostrcb_dma = ioa_cfg->hostrcb_dma[i]; + list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q); + } + + ioa_cfg->trace = kmalloc(sizeof(struct ipr_trace_entry) * + IPR_NUM_TRACE_ENTRIES, GFP_KERNEL); + + if (!ioa_cfg->trace) + goto cleanup; + + memset(ioa_cfg->trace, 0, + sizeof(struct ipr_trace_entry) * IPR_NUM_TRACE_ENTRIES); + + LEAVE; + return 0; + +cleanup: + ipr_free_mem(ioa_cfg); + + LEAVE; + return -ENOMEM; +} + +/** + * ipr_initialize_bus_attr - Initialize SCSI bus attributes to default values + * @ioa_cfg: ioa config struct + * + * Return value: + * none + **/ +static void __devinit ipr_initialize_bus_attr(struct ipr_ioa_cfg *ioa_cfg) +{ + int i; + + for (i = 0; i < IPR_MAX_NUM_BUSES; i++) { + ioa_cfg->bus_attr[i].bus = i; + ioa_cfg->bus_attr[i].qas_enabled = 0; + ioa_cfg->bus_attr[i].bus_width = IPR_DEFAULT_BUS_WIDTH; + if (ipr_max_speed < ARRAY_SIZE(ipr_max_bus_speeds)) + ioa_cfg->bus_attr[i].max_xfer_rate = ipr_max_bus_speeds[ipr_max_speed]; + else + ioa_cfg->bus_attr[i].max_xfer_rate = IPR_U160_SCSI_RATE; + } +} + +/** + * ipr_init_ioa_cfg - Initialize IOA config struct + * @ioa_cfg: ioa config struct + * @host: scsi host struct + * @pdev: PCI dev struct + * + * Return value: + * none + **/ +static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, + struct Scsi_Host *host, struct pci_dev *pdev) +{ + ioa_cfg->host = host; + ioa_cfg->pdev = pdev; + ioa_cfg->log_level = ipr_log_level; + sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER); + sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL); + sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL); + sprintf(ioa_cfg->ipr_pending_label, IPR_PENDQ_LABEL); + sprintf(ioa_cfg->cfg_table_start, IPR_CFG_TBL_START); + sprintf(ioa_cfg->resource_table_label, IPR_RES_TABLE_LABEL); + sprintf(ioa_cfg->ipr_hcam_label, IPR_HCAM_LABEL); + sprintf(ioa_cfg->ipr_cmd_label, IPR_CMD_LABEL); + + INIT_LIST_HEAD(&ioa_cfg->free_q); + INIT_LIST_HEAD(&ioa_cfg->pending_q); + INIT_LIST_HEAD(&ioa_cfg->hostrcb_free_q); + INIT_LIST_HEAD(&ioa_cfg->hostrcb_pending_q); + INIT_LIST_HEAD(&ioa_cfg->free_res_q); + INIT_LIST_HEAD(&ioa_cfg->used_res_q); + INIT_WORK(&ioa_cfg->work_q, ipr_worker_thread, ioa_cfg); + init_waitqueue_head(&ioa_cfg->reset_wait_q); + ioa_cfg->sdt_state = INACTIVE; + + ipr_initialize_bus_attr(ioa_cfg); + + host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS; + host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET; + host->max_channel = IPR_MAX_BUS_TO_SCAN; + host->unique_id = host->host_no; + host->max_cmd_len = IPR_MAX_CDB_LEN; + pci_set_drvdata(pdev, ioa_cfg); + + memcpy(&ioa_cfg->regs, &ioa_cfg->chip_cfg->regs, sizeof(ioa_cfg->regs)); + + ioa_cfg->regs.set_interrupt_mask_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.clr_interrupt_mask_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.sense_interrupt_mask_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.clr_interrupt_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.sense_interrupt_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.ioarrin_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.sense_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.set_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs; + ioa_cfg->regs.clr_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs; +} + +/** + * ipr_probe_ioa - Allocates memory and does first stage of initialization + * @pdev: PCI device struct + * @dev_id: PCI device id struct + * + * Return value: + * 0 on success / non-zero on failure + **/ +static int __devinit ipr_probe_ioa(struct pci_dev *pdev, + const struct pci_device_id *dev_id) +{ + struct ipr_ioa_cfg *ioa_cfg; + struct Scsi_Host *host; + unsigned long ipr_regs, ipr_regs_pci; + u32 rc = PCIBIOS_SUCCESSFUL; + + ENTER; + + if ((rc = pci_enable_device(pdev))) { + dev_err(&pdev->dev, "Cannot enable adapter\n"); + return rc; + } + + dev_info(&pdev->dev, "Found IOA with IRQ: %d\n", pdev->irq); + + host = scsi_host_alloc(&driver_template, sizeof(*ioa_cfg)); + + if (!host) { + dev_err(&pdev->dev, "call to scsi_host_alloc failed!\n"); + return -ENOMEM; + } + + ioa_cfg = (struct ipr_ioa_cfg *)host->hostdata; + memset(ioa_cfg, 0, sizeof(struct ipr_ioa_cfg)); + + ioa_cfg->chip_cfg = (const struct ipr_chip_cfg_t *)dev_id->driver_data; + + ipr_regs_pci = pci_resource_start(pdev, 0); + + if (!request_mem_region(ipr_regs_pci, + pci_resource_len(pdev, 0), IPR_NAME)) { + dev_err(&pdev->dev, + "Couldn't register memory range of registers\n"); + scsi_host_put(host); + return -ENOMEM; + } + + ipr_regs = (unsigned long)ioremap(ipr_regs_pci, + pci_resource_len(pdev, 0)); + + if (!ipr_regs) { + dev_err(&pdev->dev, + "Couldn't map memory range of registers\n"); + release_mem_region(ipr_regs_pci, pci_resource_len(pdev, 0)); + scsi_host_put(host); + return -ENOMEM; + } + + ioa_cfg->hdw_dma_regs = ipr_regs; + ioa_cfg->hdw_dma_regs_pci = ipr_regs_pci; + ioa_cfg->ioa_mailbox = ioa_cfg->chip_cfg->mailbox + ipr_regs; + + ipr_init_ioa_cfg(ioa_cfg, host, pdev); + + pci_set_master(pdev); + rc = pci_set_dma_mask(pdev, 0xffffffff); + + if (rc != PCIBIOS_SUCCESSFUL) { + dev_err(&pdev->dev, "Failed to set PCI DMA mask\n"); + rc = -EIO; + goto cleanup_nomem; + } + + rc = pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, + ioa_cfg->chip_cfg->cache_line_size); + + if (rc != PCIBIOS_SUCCESSFUL) { + dev_err(&pdev->dev, "Write of cache line size failed\n"); + rc = -EIO; + goto cleanup_nomem; + } + + /* Save away PCI config space for use following IOA reset */ + rc = pci_save_state(pdev, ioa_cfg->pci_cfg_buf); + + if (rc != PCIBIOS_SUCCESSFUL) { + dev_err(&pdev->dev, "Failed to save PCI config space\n"); + rc = -EIO; + goto cleanup_nomem; + } + + if ((rc = ipr_save_pcix_cmd_reg(ioa_cfg))) + goto cleanup_nomem; + + if ((rc = ipr_set_pcix_cmd_reg(ioa_cfg))) + goto cleanup_nomem; + + if ((rc = ipr_alloc_mem(ioa_cfg))) + goto cleanup; + + ipr_mask_and_clear_interrupts(ioa_cfg, ~IPR_PCII_IOA_TRANS_TO_OPER); + rc = request_irq(pdev->irq, ipr_isr, SA_SHIRQ, IPR_NAME, ioa_cfg); + + if (rc) { + dev_err(&pdev->dev, "Couldn't register IRQ %d! rc=%d\n", + pdev->irq, rc); + goto cleanup_nolog; + } + + spin_lock(&ipr_driver_lock); + list_add_tail(&ioa_cfg->queue, &ipr_ioa_head); + spin_unlock(&ipr_driver_lock); + + LEAVE; + return 0; + +cleanup: + dev_err(&pdev->dev, "Couldn't allocate enough memory for device driver!\n"); +cleanup_nolog: + ipr_free_mem(ioa_cfg); +cleanup_nomem: + iounmap((void *) ipr_regs); + release_mem_region(ipr_regs_pci, pci_resource_len(pdev, 0)); + scsi_host_put(host); + + return rc; +} + +/** + * ipr_scan_vsets - Scans for VSET devices + * @ioa_cfg: ioa config struct + * + * Description: Since the VSET resources do not follow SAM in that we can have + * sparse LUNs with no LUN 0, we have to scan for these ourselves. + * + * Return value: + * none + **/ +static void ipr_scan_vsets(struct ipr_ioa_cfg *ioa_cfg) +{ + int target, lun; + + for (target = 0; target < IPR_MAX_NUM_TARGETS_PER_BUS; target++) + for (lun = 0; lun < IPR_MAX_NUM_VSET_LUNS_PER_TARGET; lun++ ) + scsi_add_device(ioa_cfg->host, IPR_VSET_BUS, target, lun); +} + +/** + * ipr_initiate_ioa_bringdown - Bring down an adapter + * @ioa_cfg: ioa config struct + * @shutdown_type: shutdown type + * + * Description: This function will initiate bringing down the adapter. + * This consists of issuing an IOA shutdown to the adapter + * to flush the cache, and running BIST. + * If the caller needs to wait on the completion of the reset, + * the caller must sleep on the reset_wait_q. + * + * Return value: + * none + **/ +static void ipr_initiate_ioa_bringdown(struct ipr_ioa_cfg *ioa_cfg, + enum ipr_shutdown_type shutdown_type) +{ + ENTER; + if (ioa_cfg->sdt_state == WAIT_FOR_DUMP) + ioa_cfg->sdt_state = ABORT_DUMP; + ioa_cfg->reset_retries = 0; + ioa_cfg->in_ioa_bringdown = 1; + ipr_initiate_ioa_reset(ioa_cfg, shutdown_type); + LEAVE; +} + +/** + * __ipr_remove - Remove a single adapter + * @pdev: pci device struct + * + * Adapter hot plug remove entry point. + * + * Return value: + * none + **/ +static void __ipr_remove(struct pci_dev *pdev) +{ + unsigned long host_lock_flags = 0; + struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev); + ENTER; + + spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); + ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL); + + spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); + spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); + + spin_lock(&ipr_driver_lock); + list_del(&ioa_cfg->queue); + spin_unlock(&ipr_driver_lock); + + if (ioa_cfg->sdt_state == ABORT_DUMP) + ioa_cfg->sdt_state = WAIT_FOR_DUMP; + spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); + + ipr_free_all_resources(ioa_cfg); + + LEAVE; +} + +/** + * ipr_remove - IOA hot plug remove entry point + * @pdev: pci device struct + * + * Adapter hot plug remove entry point. + * + * Return value: + * none + **/ +static void ipr_remove(struct pci_dev *pdev) +{ + struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev); + + ENTER; + + ioa_cfg->allow_cmds = 0; + flush_scheduled_work(); + ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj, + &ipr_trace_attr); + ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj, + &ipr_dump_attr); + scsi_remove_host(ioa_cfg->host); + + __ipr_remove(pdev); + + LEAVE; +} + +/** + * ipr_probe - Adapter hot plug add entry point + * + * Return value: + * 0 on success / non-zero on failure + **/ +static int __devinit ipr_probe(struct pci_dev *pdev, + const struct pci_device_id *dev_id) +{ + struct ipr_ioa_cfg *ioa_cfg; + int rc; + + rc = ipr_probe_ioa(pdev, dev_id); + + if (rc) + return rc; + + ioa_cfg = pci_get_drvdata(pdev); + rc = ipr_probe_ioa_part2(ioa_cfg); + + if (rc) { + __ipr_remove(pdev); + return rc; + } + + rc = scsi_add_host(ioa_cfg->host, &pdev->dev); + + if (rc) { + __ipr_remove(pdev); + return rc; + } + + rc = ipr_create_trace_file(&ioa_cfg->host->shost_classdev.kobj, + &ipr_trace_attr); + + if (rc) { + scsi_remove_host(ioa_cfg->host); + __ipr_remove(pdev); + return rc; + } + + rc = ipr_create_dump_file(&ioa_cfg->host->shost_classdev.kobj, + &ipr_dump_attr); + + if (rc) { + ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj, + &ipr_trace_attr); + scsi_remove_host(ioa_cfg->host); + __ipr_remove(pdev); + return rc; + } + + scsi_scan_host(ioa_cfg->host); + ipr_scan_vsets(ioa_cfg); + scsi_add_device(ioa_cfg->host, IPR_IOA_BUS, IPR_IOA_TARGET, IPR_IOA_LUN); + ioa_cfg->allow_ml_add_del = 1; + schedule_work(&ioa_cfg->work_q); + return 0; +} + +/** + * ipr_shutdown - Shutdown handler. + * @dev: device struct + * + * This function is invoked upon system shutdown/reboot. It will issue + * an adapter shutdown to the adapter to flush the write cache. + * + * Return value: + * none + **/ +static void ipr_shutdown(struct device *dev) +{ + struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(to_pci_dev(dev)); + unsigned long lock_flags = 0; + + spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); + ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL); + spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); + wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); +} + +static struct pci_device_id ipr_pci_table[] __devinitdata = { + { PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5702, + 0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] }, + { PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572E, + 0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] }, + { PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5703, + 0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] }, + { PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573D, + 0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] }, + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE, + PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, + 0, 0, (kernel_ulong_t)&ipr_chip_cfg[1] }, + { } +}; +MODULE_DEVICE_TABLE(pci, ipr_pci_table); + +static struct pci_driver ipr_driver = { + .name = IPR_NAME, + .id_table = ipr_pci_table, + .probe = ipr_probe, + .remove = ipr_remove, + .driver = { + .shutdown = ipr_shutdown, + }, +}; + +/** + * ipr_init - Module entry point + * + * Return value: + * 0 on success / non-zero on failure + **/ +static int __init ipr_init(void) +{ + ipr_info("IBM Power RAID SCSI Device Driver version: %s %s\n", + IPR_DRIVER_VERSION, IPR_DRIVER_DATE); + + pci_register_driver(&ipr_driver); + + return 0; +} + +/** + * ipr_exit - Module unload + * + * Module unload entry point. + * + * Return value: + * none + **/ +static void __exit ipr_exit(void) +{ + pci_unregister_driver(&ipr_driver); +} + +module_init(ipr_init); +module_exit(ipr_exit); diff -Nru a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/ipr.h Tue May 18 23:38:09 2004 @@ -0,0 +1,1251 @@ +/* + * ipr.h -- driver for IBM Power Linux RAID adapters + * + * Written By: Brian King, IBM Corporation + * + * Copyright (C) 2003, 2004 IBM Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef _IPR_H +#define _IPR_H + +#include +#include +#include +#include +#include +#ifdef CONFIG_KDB +#include +#endif + +/* + * Literals + */ +#define IPR_DRIVER_VERSION "2.0.6" +#define IPR_DRIVER_DATE "(May 3, 2004)" + +/* + * IPR_DBG_TRACE: Setting this to 1 will turn on some general function tracing + * resulting in a bunch of extra debugging printks to the console + * + * IPR_DEBUG: Setting this to 1 will turn on some error path tracing. + * Enables the ipr_trace macro. + */ +#ifdef IPR_DEBUG_ALL +#define IPR_DEBUG 1 +#define IPR_DBG_TRACE 1 +#else +#define IPR_DEBUG 0 +#define IPR_DBG_TRACE 0 +#endif + +/* + * IPR_MAX_CMD_PER_LUN: This defines the maximum number of outstanding + * ops per device for devices not running tagged command queuing. + * This can be adjusted at runtime through sysfs device attributes. + */ +#define IPR_MAX_CMD_PER_LUN 6 + +/* + * IPR_NUM_BASE_CMD_BLKS: This defines the maximum number of + * ops the mid-layer can send to the adapter. + */ +#define IPR_NUM_BASE_CMD_BLKS 100 + +#define IPR_SUBS_DEV_ID_2780 0x0264 +#define IPR_SUBS_DEV_ID_5702 0x0266 +#define IPR_SUBS_DEV_ID_5703 0x0278 +#define IPR_SUBS_DEV_ID_572E 0x02D3 +#define IPR_SUBS_DEV_ID_573D 0x02D4 + +#define IPR_NAME "ipr" + +/* + * Return codes + */ +#define IPR_RC_JOB_CONTINUE 1 +#define IPR_RC_JOB_RETURN 2 + +/* + * IOASCs + */ +#define IPR_IOASC_NR_INIT_CMD_REQUIRED 0x02040200 +#define IPR_IOASC_SYNC_REQUIRED 0x023f0000 +#define IPR_IOASC_MED_DO_NOT_REALLOC 0x03110C00 +#define IPR_IOASC_HW_SEL_TIMEOUT 0x04050000 +#define IPR_IOASC_HW_DEV_BUS_STATUS 0x04448500 +#define IPR_IOASC_IOASC_MASK 0xFFFFFF00 +#define IPR_IOASC_SCSI_STATUS_MASK 0x000000FF +#define IPR_IOASC_IR_RESOURCE_HANDLE 0x05250000 +#define IPR_IOASC_BUS_WAS_RESET 0x06290000 +#define IPR_IOASC_BUS_WAS_RESET_BY_OTHER 0x06298000 +#define IPR_IOASC_ABORTED_CMD_TERM_BY_HOST 0x0B5A0000 + +#define IPR_FIRST_DRIVER_IOASC 0x10000000 +#define IPR_IOASC_IOA_WAS_RESET 0x10000001 +#define IPR_IOASC_PCI_ACCESS_ERROR 0x10000002 + +#define IPR_NUM_LOG_HCAMS 2 +#define IPR_NUM_CFG_CHG_HCAMS 2 +#define IPR_NUM_HCAMS (IPR_NUM_LOG_HCAMS + IPR_NUM_CFG_CHG_HCAMS) +#define IPR_MAX_NUM_TARGETS_PER_BUS 0x10 +#define IPR_MAX_NUM_LUNS_PER_TARGET 256 +#define IPR_MAX_NUM_VSET_LUNS_PER_TARGET 8 +#define IPR_VSET_BUS 0xff +#define IPR_IOA_BUS 0xff +#define IPR_IOA_TARGET 0xff +#define IPR_IOA_LUN 0xff +#define IPR_MAX_NUM_BUSES 4 +#define IPR_MAX_BUS_TO_SCAN IPR_MAX_NUM_BUSES + +#define IPR_NUM_RESET_RELOAD_RETRIES 3 + +/* We need resources for HCAMS, IOA reset, IOA bringdown, and ERP */ +#define IPR_NUM_INTERNAL_CMD_BLKS (IPR_NUM_HCAMS + \ + ((IPR_NUM_RESET_RELOAD_RETRIES + 1) * 2) + 3) + +#define IPR_MAX_COMMANDS IPR_NUM_BASE_CMD_BLKS +#define IPR_NUM_CMD_BLKS (IPR_NUM_BASE_CMD_BLKS + \ + IPR_NUM_INTERNAL_CMD_BLKS) + +#define IPR_MAX_PHYSICAL_DEVS 192 + +#define IPR_MAX_SGLIST 64 +#define IPR_MAX_SECTORS 512 +#define IPR_MAX_CDB_LEN 16 + +#define IPR_DEFAULT_BUS_WIDTH 16 +#define IPR_80MBs_SCSI_RATE ((80 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8)) +#define IPR_U160_SCSI_RATE ((160 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8)) +#define IPR_U320_SCSI_RATE ((320 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8)) +#define IPR_MAX_SCSI_RATE(width) ((320 * 10) / ((width) / 8)) + +#define IPR_IOA_RES_HANDLE 0xffffffff +#define IPR_IOA_RES_ADDR 0x00ffffff + +/* + * Adapter Commands + */ +#define IPR_RESET_DEVICE 0xC3 +#define IPR_RESET_TYPE_SELECT 0x80 +#define IPR_LUN_RESET 0x40 +#define IPR_TARGET_RESET 0x20 +#define IPR_BUS_RESET 0x10 +#define IPR_ID_HOST_RR_Q 0xC4 +#define IPR_QUERY_IOA_CONFIG 0xC5 +#define IPR_ABORT_TASK 0xC7 +#define IPR_CANCEL_ALL_REQUESTS 0xCE +#define IPR_HOST_CONTROLLED_ASYNC 0xCF +#define IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE 0x01 +#define IPR_HCAM_CDB_OP_CODE_LOG_DATA 0x02 +#define IPR_SET_SUPPORTED_DEVICES 0xFB +#define IPR_IOA_SHUTDOWN 0xF7 +#define IPR_WR_BUF_DOWNLOAD_AND_SAVE 0x05 + +/* + * Timeouts + */ +#define IPR_SHUTDOWN_TIMEOUT (10 * 60 * HZ) +#define IPR_VSET_RW_TIMEOUT (2 * 60 * HZ) +#define IPR_ABBREV_SHUTDOWN_TIMEOUT (10 * HZ) +#define IPR_DEVICE_RESET_TIMEOUT (30 * HZ) +#define IPR_CANCEL_ALL_TIMEOUT (30 * HZ) +#define IPR_ABORT_TASK_TIMEOUT (30 * HZ) +#define IPR_INTERNAL_TIMEOUT (30 * HZ) +#define IPR_WRITE_BUFFER_TIMEOUT (10 * 60 * HZ) +#define IPR_SET_SUP_DEVICE_TIMEOUT (2 * 60 * HZ) +#define IPR_REQUEST_SENSE_TIMEOUT (10 * HZ) +#define IPR_OPERATIONAL_TIMEOUT (5 * 60 * HZ) +#define IPR_WAIT_FOR_RESET_TIMEOUT (2 * HZ) +#define IPR_CHECK_FOR_RESET_TIMEOUT (HZ / 10) +#define IPR_WAIT_FOR_BIST_TIMEOUT (2 * HZ) +#define IPR_DUMP_TIMEOUT (15 * HZ) + +/* + * SCSI Literals + */ +#define IPR_VENDOR_ID_LEN 8 +#define IPR_PROD_ID_LEN 16 +#define IPR_SERIAL_NUM_LEN 8 + +/* + * Hardware literals + */ +#define IPR_FMT2_MBX_ADDR_MASK 0x0fffffff +#define IPR_FMT2_MBX_BAR_SEL_MASK 0xf0000000 +#define IPR_FMT2_MKR_BAR_SEL_SHIFT 28 +#define IPR_GET_FMT2_BAR_SEL(mbx) \ +(((mbx) & IPR_FMT2_MBX_BAR_SEL_MASK) >> IPR_FMT2_MKR_BAR_SEL_SHIFT) +#define IPR_SDT_FMT2_BAR0_SEL 0x0 +#define IPR_SDT_FMT2_BAR1_SEL 0x1 +#define IPR_SDT_FMT2_BAR2_SEL 0x2 +#define IPR_SDT_FMT2_BAR3_SEL 0x3 +#define IPR_SDT_FMT2_BAR4_SEL 0x4 +#define IPR_SDT_FMT2_BAR5_SEL 0x5 +#define IPR_SDT_FMT2_EXP_ROM_SEL 0x8 +#define IPR_FMT2_SDT_READY_TO_USE 0xC4D4E3F2 +#define IPR_DOORBELL 0x82800000 + +#define IPR_PCII_IOA_TRANS_TO_OPER (0x80000000 >> 0) +#define IPR_PCII_IOARCB_XFER_FAILED (0x80000000 >> 3) +#define IPR_PCII_IOA_UNIT_CHECKED (0x80000000 >> 4) +#define IPR_PCII_NO_HOST_RRQ (0x80000000 >> 5) +#define IPR_PCII_CRITICAL_OPERATION (0x80000000 >> 6) +#define IPR_PCII_IO_DEBUG_ACKNOWLEDGE (0x80000000 >> 7) +#define IPR_PCII_IOARRIN_LOST (0x80000000 >> 27) +#define IPR_PCII_MMIO_ERROR (0x80000000 >> 28) +#define IPR_PCII_PROC_ERR_STATE (0x80000000 >> 29) +#define IPR_PCII_HRRQ_UPDATED (0x80000000 >> 30) +#define IPR_PCII_CORE_ISSUED_RST_REQ (0x80000000 >> 31) + +#define IPR_PCII_ERROR_INTERRUPTS \ +(IPR_PCII_IOARCB_XFER_FAILED | IPR_PCII_IOA_UNIT_CHECKED | \ +IPR_PCII_NO_HOST_RRQ | IPR_PCII_IOARRIN_LOST | IPR_PCII_MMIO_ERROR) + +#define IPR_PCII_OPER_INTERRUPTS \ +(IPR_PCII_ERROR_INTERRUPTS | IPR_PCII_HRRQ_UPDATED | IPR_PCII_IOA_TRANS_TO_OPER) + +#define IPR_UPROCI_RESET_ALERT (0x80000000 >> 7) +#define IPR_UPROCI_IO_DEBUG_ALERT (0x80000000 >> 9) + +#define IPR_LDUMP_MAX_LONG_ACK_DELAY_IN_USEC 200000 /* 200 ms */ +#define IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC 200000 /* 200 ms */ + +/* + * Dump literals + */ +#define IPR_MAX_IOA_DUMP_SIZE (4 * 1024 * 1024) +#define IPR_NUM_SDT_ENTRIES 511 +#define IPR_MAX_NUM_DUMP_PAGES ((IPR_MAX_IOA_DUMP_SIZE / PAGE_SIZE) + 1) + +/* + * Misc literals + */ +#define IPR_NUM_IOADL_ENTRIES IPR_MAX_SGLIST + +/* + * Adapter interface types + */ + +struct ipr_res_addr { + u8 reserved; + u8 bus; + u8 target; + u8 lun; +#define IPR_GET_PHYS_LOC(res_addr) \ + (((res_addr).bus << 16) | ((res_addr).target << 8) | (res_addr).lun) +}__attribute__((packed, aligned (4))); + +struct ipr_std_inq_vpids { + u8 vendor_id[IPR_VENDOR_ID_LEN]; + u8 product_id[IPR_PROD_ID_LEN]; +}__attribute__((packed)); + +struct ipr_std_inq_data { + u8 peri_qual_dev_type; +#define IPR_STD_INQ_PERI_QUAL(peri) ((peri) >> 5) +#define IPR_STD_INQ_PERI_DEV_TYPE(peri) ((peri) & 0x1F) + + u8 removeable_medium_rsvd; +#define IPR_STD_INQ_REMOVEABLE_MEDIUM 0x80 + +#define IPR_IS_DASD_DEVICE(std_inq) \ +((IPR_STD_INQ_PERI_DEV_TYPE((std_inq).peri_qual_dev_type) == TYPE_DISK) && \ +!(((std_inq).removeable_medium_rsvd) & IPR_STD_INQ_REMOVEABLE_MEDIUM)) + +#define IPR_IS_SES_DEVICE(std_inq) \ +(IPR_STD_INQ_PERI_DEV_TYPE((std_inq).peri_qual_dev_type) == TYPE_ENCLOSURE) + + u8 version; + u8 aen_naca_fmt; + u8 additional_len; + u8 sccs_rsvd; + u8 bq_enc_multi; + u8 sync_cmdq_flags; + + struct ipr_std_inq_vpids vpids; + + u8 ros_rsvd_ram_rsvd[4]; + + u8 serial_num[IPR_SERIAL_NUM_LEN]; +}__attribute__ ((packed)); + +struct ipr_config_table_entry { + u8 service_level; + u8 array_id; + u8 flags; +#define IPR_IS_IOA_RESOURCE 0x80 +#define IPR_IS_ARRAY_MEMBER 0x20 +#define IPR_IS_HOT_SPARE 0x10 + + u8 rsvd_subtype; +#define IPR_RES_SUBTYPE(res) (((res)->cfgte.rsvd_subtype) & 0x0f) +#define IPR_SUBTYPE_AF_DASD 0 +#define IPR_SUBTYPE_GENERIC_SCSI 1 +#define IPR_SUBTYPE_VOLUME_SET 2 + + struct ipr_res_addr res_addr; + u32 res_handle; + u32 reserved4[2]; + struct ipr_std_inq_data std_inq_data; +}__attribute__ ((packed, aligned (4))); + +struct ipr_config_table_hdr { + u8 num_entries; + u8 flags; +#define IPR_UCODE_DOWNLOAD_REQ 0x10 + u16 reserved; +}__attribute__((packed, aligned (4))); + +struct ipr_config_table { + struct ipr_config_table_hdr hdr; + struct ipr_config_table_entry dev[IPR_MAX_PHYSICAL_DEVS]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_cfg_ch_not { + struct ipr_config_table_entry cfgte; + u8 reserved[936]; +}__attribute__((packed, aligned (4))); + +struct ipr_supported_device { + u16 data_length; + u8 reserved; + u8 num_records; + struct ipr_std_inq_vpids vpids; + u8 reserved2[16]; +}__attribute__((packed, aligned (4))); + +/* Command packet structure */ +struct ipr_cmd_pkt { + u16 reserved; /* Reserved by IOA */ + u8 request_type; +#define IPR_RQTYPE_SCSICDB 0x00 +#define IPR_RQTYPE_IOACMD 0x01 +#define IPR_RQTYPE_HCAM 0x02 + + u8 luntar_luntrn; + + u8 flags_hi; +#define IPR_FLAGS_HI_WRITE_NOT_READ 0x80 +#define IPR_FLAGS_HI_NO_ULEN_CHK 0x20 +#define IPR_FLAGS_HI_SYNC_OVERRIDE 0x10 +#define IPR_FLAGS_HI_SYNC_COMPLETE 0x08 +#define IPR_FLAGS_HI_NO_LINK_DESC 0x04 + + u8 flags_lo; +#define IPR_FLAGS_LO_ALIGNED_BFR 0x20 +#define IPR_FLAGS_LO_DELAY_AFTER_RST 0x10 +#define IPR_FLAGS_LO_UNTAGGED_TASK 0x00 +#define IPR_FLAGS_LO_SIMPLE_TASK 0x02 +#define IPR_FLAGS_LO_ORDERED_TASK 0x04 +#define IPR_FLAGS_LO_HEAD_OF_Q_TASK 0x06 +#define IPR_FLAGS_LO_ACA_TASK 0x08 + + u8 cdb[16]; + u16 timeout; +}__attribute__ ((packed, aligned(4))); + +/* IOA Request Control Block 128 bytes */ +struct ipr_ioarcb { + u32 ioarcb_host_pci_addr; + u32 reserved; + u32 res_handle; + u32 host_response_handle; + u32 reserved1; + u32 reserved2; + u32 reserved3; + + u32 write_data_transfer_length; + u32 read_data_transfer_length; + u32 write_ioadl_addr; + u32 write_ioadl_len; + u32 read_ioadl_addr; + u32 read_ioadl_len; + + u32 ioasa_host_pci_addr; + u16 ioasa_len; + u16 reserved4; + + struct ipr_cmd_pkt cmd_pkt; + + u32 add_cmd_parms_len; + u32 add_cmd_parms[10]; +}__attribute__((packed, aligned (4))); + +struct ipr_ioadl_desc { + u32 flags_and_data_len; +#define IPR_IOADL_FLAGS_MASK 0xff000000 +#define IPR_IOADL_GET_FLAGS(x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK) +#define IPR_IOADL_DATA_LEN_MASK 0x00ffffff +#define IPR_IOADL_GET_DATA_LEN(x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK) +#define IPR_IOADL_FLAGS_READ 0x48000000 +#define IPR_IOADL_FLAGS_READ_LAST 0x49000000 +#define IPR_IOADL_FLAGS_WRITE 0x68000000 +#define IPR_IOADL_FLAGS_WRITE_LAST 0x69000000 +#define IPR_IOADL_FLAGS_LAST 0x01000000 + + u32 address; +}__attribute__((packed, aligned (8))); + +struct ipr_ioasa_vset { + u32 failing_lba_hi; + u32 failing_lba_lo; + u32 ioa_data[22]; +}__attribute__((packed, aligned (4))); + +struct ipr_ioasa_af_dasd { + u32 failing_lba; +}__attribute__((packed, aligned (4))); + +struct ipr_ioasa_gpdd { + u8 device_end_state; + u8 device_bus_phase; + u16 reserved; + u32 ioa_data[23]; +}__attribute__((packed, aligned (4))); + +struct ipr_ioasa_raw { + u32 ioa_data[24]; +}__attribute__((packed, aligned (4))); + +struct ipr_ioasa { + u32 ioasc; +#define IPR_IOASC_SENSE_KEY(ioasc) ((ioasc) >> 24) +#define IPR_IOASC_SENSE_CODE(ioasc) (((ioasc) & 0x00ff0000) >> 16) +#define IPR_IOASC_SENSE_QUAL(ioasc) (((ioasc) & 0x0000ff00) >> 8) +#define IPR_IOASC_SENSE_STATUS(ioasc) ((ioasc) & 0x000000ff) + + u16 ret_stat_len; /* Length of the returned IOASA */ + + u16 avail_stat_len; /* Total Length of status available. */ + + u32 residual_data_len; /* number of bytes in the host data */ + /* buffers that were not used by the IOARCB command. */ + + u32 ilid; +#define IPR_NO_ILID 0 +#define IPR_DRIVER_ILID 0xffffffff + + u32 fd_ioasc; + + u32 fd_phys_locator; + + u32 fd_res_handle; + + u32 ioasc_specific; /* status code specific field */ +#define IPR_IOASC_SPECIFIC_MASK 0x00ffffff +#define IPR_FIELD_POINTER_VALID (0x80000000 >> 8) +#define IPR_FIELD_POINTER_MASK 0x0000ffff + + union { + struct ipr_ioasa_vset vset; + struct ipr_ioasa_af_dasd dasd; + struct ipr_ioasa_gpdd gpdd; + struct ipr_ioasa_raw raw; + }; +}__attribute__((packed, aligned (4))); + +struct ipr_mode_parm_hdr { + u8 length; + u8 medium_type; + u8 device_spec_parms; + u8 block_desc_len; +}__attribute__((packed)); + +struct ipr_mode_pages { + struct ipr_mode_parm_hdr hdr; + u8 data[255 - sizeof(struct ipr_mode_parm_hdr)]; +}__attribute__((packed)); + +struct ipr_mode_page_hdr { + u8 ps_page_code; +#define IPR_MODE_PAGE_PS 0x80 +#define IPR_GET_MODE_PAGE_CODE(hdr) ((hdr)->ps_page_code & 0x3F) + u8 page_length; +}__attribute__ ((packed)); + +struct ipr_dev_bus_entry { + struct ipr_res_addr res_addr; + u8 flags; +#define IPR_SCSI_ATTR_ENABLE_QAS 0x80 +#define IPR_SCSI_ATTR_DISABLE_QAS 0x40 +#define IPR_SCSI_ATTR_QAS_MASK 0xC0 +#define IPR_SCSI_ATTR_ENABLE_TM 0x20 +#define IPR_SCSI_ATTR_NO_TERM_PWR 0x10 +#define IPR_SCSI_ATTR_TM_SUPPORTED 0x08 +#define IPR_SCSI_ATTR_LVD_TO_SE_NOT_ALLOWED 0x04 + + u8 scsi_id; + u8 bus_width; + u8 extended_reset_delay; +#define IPR_EXTENDED_RESET_DELAY 7 + + u32 max_xfer_rate; + + u8 spinup_delay; + u8 reserved3; + u16 reserved4; +}__attribute__((packed, aligned (4))); + +struct ipr_mode_page28 { + struct ipr_mode_page_hdr hdr; + u8 num_entries; + u8 entry_length; + struct ipr_dev_bus_entry bus[0]; +}__attribute__((packed)); + +struct ipr_ioa_vpd { + struct ipr_std_inq_data std_inq_data; + u8 ascii_part_num[12]; + u8 reserved[40]; + u8 ascii_plant_code[4]; +}__attribute__((packed)); + +struct ipr_inquiry_page3 { + u8 peri_qual_dev_type; + u8 page_code; + u8 reserved1; + u8 page_length; + u8 ascii_len; + u8 reserved2[3]; + u8 load_id[4]; + u8 major_release; + u8 card_type; + u8 minor_release[2]; + u8 ptf_number[4]; + u8 patch_number[4]; +}__attribute__((packed)); + +struct ipr_hostrcb_device_data_entry { + struct ipr_std_inq_vpids dev_vpids; + u8 dev_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_res_addr dev_res_addr; + struct ipr_std_inq_vpids new_dev_vpids; + u8 new_dev_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids ioa_last_with_dev_vpids; + u8 ioa_last_with_dev_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids cfc_last_with_dev_vpids; + u8 cfc_last_with_dev_sn[IPR_SERIAL_NUM_LEN]; + u32 ioa_data[5]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_array_data_entry { + struct ipr_std_inq_vpids vpids; + u8 serial_num[IPR_SERIAL_NUM_LEN]; + struct ipr_res_addr expected_dev_res_addr; + struct ipr_res_addr dev_res_addr; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_type_ff_error { + u32 ioa_data[246]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_type_01_error { + u32 seek_counter; + u32 read_counter; + u8 sense_data[32]; + u32 ioa_data[236]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_type_02_error { + struct ipr_std_inq_vpids ioa_vpids; + u8 ioa_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids cfc_vpids; + u8 cfc_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids ioa_last_attached_to_cfc_vpids; + u8 ioa_last_attached_to_cfc_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids cfc_last_attached_to_ioa_vpids; + u8 cfc_last_attached_to_ioa_sn[IPR_SERIAL_NUM_LEN]; + u32 ioa_data[3]; + u8 reserved[844]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_type_03_error { + struct ipr_std_inq_vpids ioa_vpids; + u8 ioa_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids cfc_vpids; + u8 cfc_sn[IPR_SERIAL_NUM_LEN]; + u32 errors_detected; + u32 errors_logged; + u8 ioa_data[12]; + struct ipr_hostrcb_device_data_entry dev_entry[3]; + u8 reserved[444]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_type_04_error { + struct ipr_std_inq_vpids ioa_vpids; + u8 ioa_sn[IPR_SERIAL_NUM_LEN]; + struct ipr_std_inq_vpids cfc_vpids; + u8 cfc_sn[IPR_SERIAL_NUM_LEN]; + u8 ioa_data[12]; + struct ipr_hostrcb_array_data_entry array_member[10]; + u32 exposed_mode_adn; + u32 array_id; + struct ipr_std_inq_vpids incomp_dev_vpids; + u8 incomp_dev_sn[IPR_SERIAL_NUM_LEN]; + u32 ioa_data2; + struct ipr_hostrcb_array_data_entry array_member2[8]; + struct ipr_res_addr last_func_vset_res_addr; + u8 vset_serial_num[IPR_SERIAL_NUM_LEN]; + u8 protection_level[8]; + u8 reserved[124]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_error { + u32 failing_dev_ioasc; + struct ipr_res_addr failing_dev_res_addr; + u32 failing_dev_res_handle; + u32 prc; + union { + struct ipr_hostrcb_type_ff_error type_ff_error; + struct ipr_hostrcb_type_01_error type_01_error; + struct ipr_hostrcb_type_02_error type_02_error; + struct ipr_hostrcb_type_03_error type_03_error; + struct ipr_hostrcb_type_04_error type_04_error; + }; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb_raw { + u32 data[sizeof(struct ipr_hostrcb_error)/sizeof(u32)]; +}__attribute__((packed, aligned (4))); + +struct ipr_hostrcb { + u8 op_code; +#define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE 0xE1 +#define IPR_HOST_RCB_OP_CODE_LOG_DATA 0xE2 + + u8 notify_type; +#define IPR_HOST_RCB_NOTIF_TYPE_EXISTING_CHANGED 0x00 +#define IPR_HOST_RCB_NOTIF_TYPE_NEW_ENTRY 0x01 +#define IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY 0x02 +#define IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY 0x10 +#define IPR_HOST_RCB_NOTIF_TYPE_INFORMATION_ENTRY 0x11 + + u8 notifications_lost; +#define IPR_HOST_RCB_NO_NOTIFICATIONS_LOST 0 +#define IPR_HOST_RCB_NOTIFICATIONS_LOST 0x80 + + u8 flags; +#define IPR_HOSTRCB_INTERNAL_OPER 0x80 +#define IPR_HOSTRCB_ERR_RESP_SENT 0x40 + + u8 overlay_id; +#define IPR_HOST_RCB_OVERLAY_ID_1 0x01 +#define IPR_HOST_RCB_OVERLAY_ID_2 0x02 +#define IPR_HOST_RCB_OVERLAY_ID_3 0x03 +#define IPR_HOST_RCB_OVERLAY_ID_4 0x04 +#define IPR_HOST_RCB_OVERLAY_ID_6 0x06 +#define IPR_HOST_RCB_OVERLAY_ID_DEFAULT 0xFF + + u8 reserved1[3]; + u32 ilid; + u32 time_since_last_ioa_reset; + u32 reserved2; + u32 length; + + union { + struct ipr_hostrcb_error error; + struct ipr_hostrcb_cfg_ch_not ccn; + struct ipr_hostrcb_raw raw; + }; + + /* Driver added data */ + u32 hostrcb_dma; + struct list_head queue; +}__attribute__((packed, aligned (4))); + +#define IPR_HOSTRCB_SZ offsetof(struct ipr_hostrcb, hostrcb_dma) + +/* IPR smart dump table structures */ +struct ipr_sdt_entry { + u32 bar_str_offset; + u32 end_offset; + u8 entry_byte; + u8 reserved[3]; + + u8 flags; +#define IPR_SDT_ENDIAN 0x80 +#define IPR_SDT_VALID_ENTRY 0x20 + + u8 resv; + u16 priority; +}__attribute__((packed, aligned (4))); + +struct ipr_sdt_header { + u32 state; + u32 num_entries; + u32 num_entries_used; + u32 dump_size; +}__attribute__((packed, aligned (4))); + +struct ipr_sdt { + struct ipr_sdt_header hdr; + struct ipr_sdt_entry entry[IPR_NUM_SDT_ENTRIES]; +}__attribute__((packed, aligned (4))); + +struct ipr_uc_sdt { + struct ipr_sdt_header hdr; + struct ipr_sdt_entry entry[1]; +}__attribute__((packed, aligned (4))); + +/* + * Driver types + */ +struct ipr_bus_attributes { + u8 bus; + u8 qas_enabled; + u8 bus_width; + u8 reserved; + u32 max_xfer_rate; +}; + +struct ipr_resource_entry { + struct ipr_config_table_entry cfgte; + u8 needs_sync_complete:1; + u8 in_erp:1; + u8 add_to_ml:1; + u8 del_from_ml:1; + u8 resetting_device:1; + u8 tcq_active:1; + + int qdepth; + struct scsi_device *sdev; + struct list_head queue; +}; + +struct ipr_resource_hdr { + u16 num_entries; + u16 reserved; +}; + +struct ipr_resource_table { + struct ipr_resource_hdr hdr; + struct ipr_resource_entry dev[IPR_MAX_PHYSICAL_DEVS]; +}; + +struct ipr_misc_cbs { + struct ipr_ioa_vpd ioa_vpd; + struct ipr_inquiry_page3 page3_data; + struct ipr_mode_pages mode_pages; + struct ipr_supported_device supp_dev; +}; + +struct ipr_interrupts { + unsigned long set_interrupt_mask_reg; + unsigned long clr_interrupt_mask_reg; + unsigned long sense_interrupt_mask_reg; + unsigned long clr_interrupt_reg; + + unsigned long sense_interrupt_reg; + unsigned long ioarrin_reg; + unsigned long sense_uproc_interrupt_reg; + unsigned long set_uproc_interrupt_reg; + unsigned long clr_uproc_interrupt_reg; +}; + +struct ipr_chip_cfg_t { + u32 mailbox; + u8 cache_line_size; + struct ipr_interrupts regs; +}; + +enum ipr_shutdown_type { + IPR_SHUTDOWN_NORMAL = 0x00, + IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 0x40, + IPR_SHUTDOWN_ABBREV = 0x80, + IPR_SHUTDOWN_NONE = 0x100 +}; + +struct ipr_trace_entry { + u32 time; + + u8 op_code; + u8 type; +#define IPR_TRACE_START 0x00 +#define IPR_TRACE_FINISH 0xff + u16 cmd_index; + + u32 res_handle; + union { + u32 ioasc; + u32 add_data; + u32 res_addr; + }; +}; + +struct ipr_sglist { + u32 order; + u32 num_sg; + u32 buffer_len; + struct scatterlist scatterlist[1]; +}; + +enum ipr_sdt_state { + INACTIVE, + WAIT_FOR_DUMP, + GET_DUMP, + ABORT_DUMP, + DUMP_OBTAINED +}; + +/* Per-controller data */ +struct ipr_ioa_cfg { + char eye_catcher[8]; +#define IPR_EYECATCHER "iprcfg" + + struct list_head queue; + + u8 allow_interrupts:1; + u8 in_reset_reload:1; + u8 in_ioa_bringdown:1; + u8 ioa_unit_checked:1; + u8 ioa_is_dead:1; + u8 dump_taken:1; + u8 allow_cmds:1; + u8 allow_ml_add_del:1; + + u16 type; /* CCIN of the card */ + + u8 log_level; +#define IPR_MAX_LOG_LEVEL 4 +#define IPR_DEFAULT_LOG_LEVEL 2 + +#define IPR_NUM_TRACE_INDEX_BITS 8 +#define IPR_NUM_TRACE_ENTRIES (1 << IPR_NUM_TRACE_INDEX_BITS) +#define IPR_TRACE_SIZE (sizeof(struct ipr_trace_entry) * IPR_NUM_TRACE_ENTRIES) + char trace_start[8]; +#define IPR_TRACE_START_LABEL "trace" + struct ipr_trace_entry *trace; + u32 trace_index:IPR_NUM_TRACE_INDEX_BITS; + + /* + * Queue for free command blocks + */ + char ipr_free_label[8]; +#define IPR_FREEQ_LABEL "free-q" + struct list_head free_q; + + /* + * Queue for command blocks outstanding to the adapter + */ + char ipr_pending_label[8]; +#define IPR_PENDQ_LABEL "pend-q" + struct list_head pending_q; + + char cfg_table_start[8]; +#define IPR_CFG_TBL_START "cfg" + struct ipr_config_table *cfg_table; + u32 cfg_table_dma; + + char resource_table_label[8]; +#define IPR_RES_TABLE_LABEL "res_tbl" + struct ipr_resource_entry *res_entries; + struct list_head free_res_q; + struct list_head used_res_q; + + char ipr_hcam_label[8]; +#define IPR_HCAM_LABEL "hcams" + struct ipr_hostrcb *hostrcb[IPR_NUM_HCAMS]; + u32 hostrcb_dma[IPR_NUM_HCAMS]; + struct list_head hostrcb_free_q; + struct list_head hostrcb_pending_q; + + u32 *host_rrq; + u32 host_rrq_dma; +#define IPR_HRRQ_REQ_RESP_HANDLE_MASK 0xfffffffc +#define IPR_HRRQ_RESP_BIT_SET 0x00000002 +#define IPR_HRRQ_TOGGLE_BIT 0x00000001 +#define IPR_HRRQ_REQ_RESP_HANDLE_SHIFT 2 + volatile u32 *hrrq_start; + volatile u32 *hrrq_end; + volatile u32 *hrrq_curr; + volatile u32 toggle_bit; + + struct ipr_bus_attributes bus_attr[IPR_MAX_NUM_BUSES]; + + const struct ipr_chip_cfg_t *chip_cfg; + + unsigned long hdw_dma_regs; /* iomapped PCI memory space */ + unsigned long hdw_dma_regs_pci; /* raw PCI memory space */ + unsigned long ioa_mailbox; + struct ipr_interrupts regs; + + u32 pci_cfg_buf[64]; + u16 saved_pcix_cmd_reg; + u16 reset_retries; + + u32 errors_logged; + + struct Scsi_Host *host; + struct pci_dev *pdev; + struct ipr_sglist *ucode_sglist; + struct ipr_mode_pages *saved_mode_pages; + u8 saved_mode_page_len; + + struct work_struct work_q; + + wait_queue_head_t reset_wait_q; + + struct ipr_dump *dump; + enum ipr_sdt_state sdt_state; + + struct ipr_misc_cbs *vpd_cbs; + u32 vpd_cbs_dma; + + struct pci_pool *ipr_cmd_pool; + + struct ipr_cmnd *reset_cmd; + + char ipr_cmd_label[8]; +#define IPR_CMD_LABEL "ipr_cmnd" + struct ipr_cmnd *ipr_cmnd_list[IPR_NUM_CMD_BLKS]; + u32 ipr_cmnd_list_dma[IPR_NUM_CMD_BLKS]; +}; + +struct ipr_cmnd { + struct ipr_ioarcb ioarcb; + struct ipr_ioasa ioasa; + struct ipr_ioadl_desc ioadl[IPR_NUM_IOADL_ENTRIES]; + struct list_head queue; + struct scsi_cmnd *scsi_cmd; + struct completion completion; + struct timer_list timer; + void (*done) (struct ipr_cmnd *); + int (*job_step) (struct ipr_cmnd *); + u16 cmd_index; + u8 sense_buffer[SCSI_SENSE_BUFFERSIZE]; + dma_addr_t sense_buffer_dma; + unsigned short dma_use_sg; + dma_addr_t dma_handle; + union { + enum ipr_shutdown_type shutdown_type; + struct ipr_hostrcb *hostrcb; + unsigned long time_left; + unsigned long scratch; + struct ipr_resource_entry *res; + struct ipr_cmnd *sibling; + }; + + struct ipr_ioa_cfg *ioa_cfg; +}; + +struct ipr_ses_table_entry { + char product_id[17]; + char compare_product_id_byte[17]; + u32 max_bus_speed_limit; /* MB/sec limit for this backplane */ +}; + +struct ipr_dump_header { + u32 eye_catcher; +#define IPR_DUMP_EYE_CATCHER 0xC5D4E3F2 + u32 len; + u32 num_entries; + u32 first_entry_offset; + u32 status; +#define IPR_DUMP_STATUS_SUCCESS 0 +#define IPR_DUMP_STATUS_QUAL_SUCCESS 2 +#define IPR_DUMP_STATUS_FAILED 0xffffffff + u32 os; +#define IPR_DUMP_OS_LINUX 0x4C4E5558 + u32 driver_name; +#define IPR_DUMP_DRIVER_NAME 0x49505232 +}__attribute__((packed, aligned (4))); + +struct ipr_dump_entry_header { + u32 eye_catcher; +#define IPR_DUMP_EYE_CATCHER 0xC5D4E3F2 + u32 len; + u32 num_elems; + u32 offset; + u32 data_type; +#define IPR_DUMP_DATA_TYPE_ASCII 0x41534349 +#define IPR_DUMP_DATA_TYPE_BINARY 0x42494E41 + u32 id; +#define IPR_DUMP_IOA_DUMP_ID 0x494F4131 +#define IPR_DUMP_LOCATION_ID 0x4C4F4341 +#define IPR_DUMP_TRACE_ID 0x54524143 +#define IPR_DUMP_DRIVER_VERSION_ID 0x44525652 +#define IPR_DUMP_DRIVER_TYPE_ID 0x54595045 +#define IPR_DUMP_IOA_CTRL_BLK 0x494F4342 +#define IPR_DUMP_PEND_OPS 0x414F5053 + u32 status; +}__attribute__((packed, aligned (4))); + +struct ipr_dump_location_entry { + struct ipr_dump_entry_header hdr; + u8 location[BUS_ID_SIZE]; +}__attribute__((packed)); + +struct ipr_dump_trace_entry { + struct ipr_dump_entry_header hdr; + u32 trace[IPR_TRACE_SIZE / sizeof(u32)]; +}__attribute__((packed, aligned (4))); + +struct ipr_dump_version_entry { + struct ipr_dump_entry_header hdr; + u8 version[sizeof(IPR_DRIVER_VERSION)]; +}; + +struct ipr_dump_ioa_type_entry { + struct ipr_dump_entry_header hdr; + u32 type; + u32 fw_version; +}; + +struct ipr_driver_dump { + struct ipr_dump_header hdr; + struct ipr_dump_version_entry version_entry; + struct ipr_dump_location_entry location_entry; + struct ipr_dump_ioa_type_entry ioa_type_entry; + struct ipr_dump_trace_entry trace_entry; +}__attribute__((packed)); + +struct ipr_ioa_dump { + struct ipr_dump_entry_header hdr; + struct ipr_sdt sdt; + u32 *ioa_data[IPR_MAX_NUM_DUMP_PAGES]; + u32 reserved; + u32 next_page_index; + u32 page_offset; + u32 format; +#define IPR_SDT_FMT2 2 +#define IPR_SDT_UNKNOWN 3 +}__attribute__((packed, aligned (4))); + +struct ipr_dump { + struct kobject kobj; + struct ipr_ioa_cfg *ioa_cfg; + struct ipr_driver_dump driver_dump; + struct ipr_ioa_dump ioa_dump; +}; + +struct ipr_error_table_t { + u32 ioasc; + int log_ioasa; + int log_hcam; + char *error; +}; + +struct ipr_software_inq_lid_info { + u32 load_id; + u32 timestamp[3]; +}__attribute__((packed, aligned (4))); + +struct ipr_ucode_image_header { + u32 header_length; + u32 lid_table_offset; + u8 major_release; + u8 card_type; + u8 minor_release[2]; + u8 reserved[20]; + char eyecatcher[16]; + u32 num_lids; + struct ipr_software_inq_lid_info lid[1]; +}__attribute__((packed, aligned (4))); + +/* + * Macros + */ +#if IPR_DEBUG +#define IPR_DBG_CMD(CMD) do { CMD; } while (0) +#else +#define IPR_DBG_CMD(CMD) +#endif + +#define ipr_breakpoint_data KERN_ERR IPR_NAME\ +": %s: %s: Line: %d ioa_cfg: %p\n", __FILE__, \ +__FUNCTION__, __LINE__, ioa_cfg + +#if defined(CONFIG_KDB) && !defined(CONFIG_PPC_ISERIES) +#define ipr_breakpoint {printk(ipr_breakpoint_data); KDB_ENTER();} +#define ipr_breakpoint_or_die {printk(ipr_breakpoint_data); KDB_ENTER();} +#else +#define ipr_breakpoint +#define ipr_breakpoint_or_die panic(ipr_breakpoint_data) +#endif + +#ifdef CONFIG_SCSI_IPR_TRACE +#define ipr_create_trace_file(kobj, attr) sysfs_create_bin_file(kobj, attr) +#define ipr_remove_trace_file(kobj, attr) sysfs_remove_bin_file(kobj, attr) +#else +#define ipr_create_trace_file(kobj, attr) 0 +#define ipr_remove_trace_file(kobj, attr) do { } while(0) +#endif + +#ifdef CONFIG_SCSI_IPR_DUMP +#define ipr_create_dump_file(kobj, attr) sysfs_create_bin_file(kobj, attr) +#define ipr_remove_dump_file(kobj, attr) sysfs_remove_bin_file(kobj, attr) +#else +#define ipr_create_dump_file(kobj, attr) 0 +#define ipr_remove_dump_file(kobj, attr) do { } while(0) +#endif + +/* + * Error logging macros + */ +#define ipr_err(...) printk(KERN_ERR IPR_NAME ": "__VA_ARGS__) +#define ipr_info(...) printk(KERN_INFO IPR_NAME ": "__VA_ARGS__) +#define ipr_crit(...) printk(KERN_CRIT IPR_NAME ": "__VA_ARGS__) +#define ipr_warn(...) printk(KERN_WARNING IPR_NAME": "__VA_ARGS__) +#define ipr_dbg(...) IPR_DBG_CMD(printk(KERN_INFO IPR_NAME ": "__VA_ARGS__)) + +#define ipr_sdev_printk(level, sdev, fmt, ...) \ + printk(level IPR_NAME ": %d:%d:%d:%d: " fmt, sdev->host->host_no, \ + sdev->channel, sdev->id, sdev->lun, ##__VA_ARGS__) + +#define ipr_sdev_err(sdev, fmt, ...) \ + ipr_sdev_printk(KERN_ERR, sdev, fmt, ##__VA_ARGS__) + +#define ipr_sdev_info(sdev, fmt, ...) \ + ipr_sdev_printk(KERN_INFO, sdev, fmt, ##__VA_ARGS__) + +#define ipr_sdev_dbg(sdev, fmt, ...) \ + IPR_DBG_CMD(ipr_sdev_printk(KERN_INFO, sdev, fmt, ##__VA_ARGS__)) + +#define ipr_res_printk(level, ioa_cfg, res, fmt, ...) \ + printk(level IPR_NAME ": %d:%d:%d:%d: " fmt, ioa_cfg->host->host_no, \ + res.bus, res.target, res.lun, ##__VA_ARGS__) + +#define ipr_res_err(ioa_cfg, res, fmt, ...) \ + ipr_res_printk(KERN_ERR, ioa_cfg, res, fmt, ##__VA_ARGS__) +#define ipr_res_dbg(ioa_cfg, res, fmt, ...) \ + IPR_DBG_CMD(ipr_res_printk(KERN_INFO, ioa_cfg, res, fmt, ##__VA_ARGS__)) + +#define ipr_trace ipr_dbg("%s: %s: Line: %d\n",\ + __FILE__, __FUNCTION__, __LINE__) + +#if IPR_DBG_TRACE +#define ENTER printk(KERN_INFO IPR_NAME": Entering %s\n", __FUNCTION__) +#define LEAVE printk(KERN_INFO IPR_NAME": Leaving %s\n", __FUNCTION__) +#else +#define ENTER +#define LEAVE +#endif + +#define ipr_err_separator \ +ipr_err("----------------------------------------------------------\n") + + +/* + * Inlines + */ + +/** + * ipr_is_ioa_resource - Determine if a resource is the IOA + * @res: resource entry struct + * + * Return value: + * 1 if IOA / 0 if not IOA + **/ +static inline int ipr_is_ioa_resource(struct ipr_resource_entry *res) +{ + return (res->cfgte.flags & IPR_IS_IOA_RESOURCE) ? 1 : 0; +} + +/** + * ipr_is_af_dasd_device - Determine if a resource is an AF DASD + * @res: resource entry struct + * + * Return value: + * 1 if AF DASD / 0 if not AF DASD + **/ +static inline int ipr_is_af_dasd_device(struct ipr_resource_entry *res) +{ + if (IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data) && + !ipr_is_ioa_resource(res) && + IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_AF_DASD) + return 1; + else + return 0; +} + +/** + * ipr_is_vset_device - Determine if a resource is a VSET + * @res: resource entry struct + * + * Return value: + * 1 if VSET / 0 if not VSET + **/ +static inline int ipr_is_vset_device(struct ipr_resource_entry *res) +{ + if (IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data) && + !ipr_is_ioa_resource(res) && + IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_VOLUME_SET) + return 1; + else + return 0; +} + +/** + * ipr_is_gscsi - Determine if a resource is a generic scsi resource + * @res: resource entry struct + * + * Return value: + * 1 if GSCSI / 0 if not GSCSI + **/ +static inline int ipr_is_gscsi(struct ipr_resource_entry *res) +{ + if (!ipr_is_ioa_resource(res) && + IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_GENERIC_SCSI) + return 1; + else + return 0; +} + +/** + * ipr_is_device - Determine if resource address is that of a device + * @res_addr: resource address struct + * + * Return value: + * 1 if AF / 0 if not AF + **/ +static inline int ipr_is_device(struct ipr_res_addr *res_addr) +{ + if ((res_addr->bus < IPR_MAX_NUM_BUSES) && + (res_addr->target < IPR_MAX_NUM_TARGETS_PER_BUS)) + return 1; + + return 0; +} + +/** + * ipr_sdt_is_fmt2 - Determine if a SDT address is in format 2 + * @sdt_word: SDT address + * + * Return value: + * 1 if format 2 / 0 if not + **/ +static inline int ipr_sdt_is_fmt2(u32 sdt_word) +{ + u32 bar_sel = IPR_GET_FMT2_BAR_SEL(sdt_word); + + switch (bar_sel) { + case IPR_SDT_FMT2_BAR0_SEL: + case IPR_SDT_FMT2_BAR1_SEL: + case IPR_SDT_FMT2_BAR2_SEL: + case IPR_SDT_FMT2_BAR3_SEL: + case IPR_SDT_FMT2_BAR4_SEL: + case IPR_SDT_FMT2_BAR5_SEL: + case IPR_SDT_FMT2_EXP_ROM_SEL: + return 1; + }; + + return 0; +} + +#endif diff -Nru a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c --- a/drivers/scsi/libata-core.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/libata-core.c Tue May 18 23:38:05 2004 @@ -34,7 +34,9 @@ #include #include #include +#include #include +#include #include #include "scsi.h" #include "hosts.h" @@ -44,23 +46,20 @@ #include "libata.h" -static void atapi_cdb_send(struct ata_port *ap); static unsigned int ata_busy_sleep (struct ata_port *ap, unsigned long tmout_pat, unsigned long tmout); static void __ata_dev_select (struct ata_port *ap, unsigned int device); -#if 0 /* to be used eventually */ -static void ata_qc_push (struct ata_queued_cmd *qc, unsigned int append); -#endif -static void ata_dma_complete(struct ata_port *ap, u8 host_stat, - unsigned int done_late); +static void ata_dma_complete(struct ata_queued_cmd *qc, u8 host_stat); static void ata_host_set_pio(struct ata_port *ap); static void ata_host_set_udma(struct ata_port *ap); static void ata_dev_set_pio(struct ata_port *ap, unsigned int device); static void ata_dev_set_udma(struct ata_port *ap, unsigned int device); static void ata_set_mode(struct ata_port *ap); +static int ata_qc_issue_prot(struct ata_queued_cmd *qc); static unsigned int ata_unique_id = 1; +static struct workqueue_struct *ata_wq; MODULE_AUTHOR("Jeff Garzik"); MODULE_DESCRIPTION("Library module for ATA devices"); @@ -74,13 +73,6 @@ "THR_IDLE", "THR_PROBE_SUCCESS", "THR_PROBE_START", - "THR_PIO_POLL", - "THR_PIO_TMOUT", - "THR_PIO", - "THR_PIO_LAST", - "THR_PIO_LAST_POLL", - "THR_PIO_ERR", - "THR_PACKET", }; /** @@ -105,23 +97,6 @@ } /** - * msleep - sleep for a number of milliseconds - * @msecs: number of milliseconds to sleep - * - * Issues schedule_timeout call for the specified number - * of milliseconds. - * - * LOCKING: - * None. - */ - -static void msleep(unsigned long msecs) -{ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(msecs_to_jiffies(msecs) + 1); -} - -/** * ata_tf_load_pio - send taskfile registers to host controller * @ioaddr: set of IO ports to which output is sent * @tf: ATA taskfile register set @@ -315,8 +290,6 @@ static void ata_tf_to_host(struct ata_port *ap, struct ata_taskfile *tf) { - init_MUTEX_LOCKED(&ap->sem); - ap->ops->tf_load(ap, tf); ata_exec(ap, tf); @@ -337,8 +310,6 @@ void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf) { - init_MUTEX_LOCKED(&ap->sem); - ap->ops->tf_load(ap, tf); ap->ops->exec_command(ap, tf); } @@ -440,6 +411,77 @@ } /** + * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure + * @tf: Taskfile to convert + * @fis: Buffer into which data will output + * + * Converts a standard ATA taskfile to a Serial ATA + * FIS structure (Register - Host to Device). + * + * LOCKING: + * Inherited from caller. + */ + +void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp) +{ + fis[0] = 0x27; /* Register - Host to Device FIS */ + fis[1] = (pmp & 0xf) | (1 << 7); /* Port multiplier number, + bit 7 indicates Command FIS */ + fis[2] = tf->command; + fis[3] = tf->feature; + + fis[4] = tf->lbal; + fis[5] = tf->lbam; + fis[6] = tf->lbah; + fis[7] = tf->device; + + fis[8] = tf->hob_lbal; + fis[9] = tf->hob_lbam; + fis[10] = tf->hob_lbah; + fis[11] = tf->hob_feature; + + fis[12] = tf->nsect; + fis[13] = tf->hob_nsect; + fis[14] = 0; + fis[15] = tf->ctl; + + fis[16] = 0; + fis[17] = 0; + fis[18] = 0; + fis[19] = 0; +} + +/** + * ata_tf_from_fis - Convert SATA FIS to ATA taskfile + * @fis: Buffer from which data will be input + * @tf: Taskfile to output + * + * Converts a standard ATA taskfile to a Serial ATA + * FIS structure (Register - Host to Device). + * + * LOCKING: + * Inherited from caller. + */ + +void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf) +{ + tf->command = fis[2]; /* status */ + tf->feature = fis[3]; /* error */ + + tf->lbal = fis[4]; + tf->lbam = fis[5]; + tf->lbah = fis[6]; + tf->device = fis[7]; + + tf->hob_lbal = fis[8]; + tf->hob_lbam = fis[9]; + tf->hob_lbah = fis[10]; + + tf->nsect = fis[12]; + tf->hob_nsect = fis[13]; +} + +/** * ata_prot_to_cmd - determine which read/write opcodes to use * @protocol: ATA_PROT_xxx taskfile protocol * @lba48: true is lba48 is present @@ -759,7 +801,7 @@ * @dev: Device whose IDENTIFY DEVICE results we will examine * @s: string into which data is output * @ofs: offset into identify device page - * @len: length of string to return + * @len: length of string to return. must be an even number. * * The strings in the IDENTIFY DEVICE page are broken up into * 16-bit chunks. Run through the string, and output each @@ -789,29 +831,6 @@ } /** - * ata_dev_parse_strings - Store useful IDENTIFY DEVICE page strings - * @dev: Device whose IDENTIFY DEVICE page info we use - * - * We store 'vendor' and 'product' strings read from the device, - * for later use in the SCSI simulator's INQUIRY data. - * - * Set these strings here, in the case of 'product', using - * data read from the ATA IDENTIFY DEVICE page. - * - * LOCKING: - * caller. - */ - -static void ata_dev_parse_strings(struct ata_device *dev) -{ - assert (dev->class == ATA_DEV_ATA); - memcpy(dev->vendor, "ATA ", 8); - - ata_dev_id_string(dev, dev->product, ATA_ID_PROD_OFS, - sizeof(dev->product)); -} - -/** * __ata_dev_select - Select device 0/1 on ATA bus * @ap: ATA channel to manipulate * @device: ATA device (numbered from zero) to select @@ -1068,8 +1087,6 @@ ata_dump_id(dev); - ata_dev_parse_strings(dev); - /* ATA-specific feature tests */ if (dev->class == ATA_DEV_ATA) { if (!ata_id_is_ata(dev)) /* sanity check */ @@ -1096,11 +1113,11 @@ ap->host->max_cmd_len = 16; /* print device info to dmesg */ - printk(KERN_INFO "ata%u: dev %u ATA, max %s, %Lu sectors%s\n", + printk(KERN_INFO "ata%u: dev %u ATA, max %s, %Lu sectors:%s\n", ap->id, device, ata_udma_string(udma_modes), (unsigned long long)dev->n_sectors, - dev->flags & ATA_DFLAG_LBA48 ? " (lba48)" : ""); + dev->flags & ATA_DFLAG_LBA48 ? " lba48" : ""); } /* ATAPI-specific feature tests */ @@ -1928,20 +1945,20 @@ static unsigned long ata_pio_poll(struct ata_port *ap) { u8 status; - unsigned int poll_state = THR_UNKNOWN; - unsigned int reg_state = THR_UNKNOWN; - const unsigned int tmout_state = THR_PIO_TMOUT; - - switch (ap->thr_state) { - case THR_PIO: - case THR_PIO_POLL: - poll_state = THR_PIO_POLL; - reg_state = THR_PIO; - break; - case THR_PIO_LAST: - case THR_PIO_LAST_POLL: - poll_state = THR_PIO_LAST_POLL; - reg_state = THR_PIO_LAST; + unsigned int poll_state = PIO_ST_UNKNOWN; + unsigned int reg_state = PIO_ST_UNKNOWN; + const unsigned int tmout_state = PIO_ST_TMOUT; + + switch (ap->pio_task_state) { + case PIO_ST: + case PIO_ST_POLL: + poll_state = PIO_ST_POLL; + reg_state = PIO_ST; + break; + case PIO_ST_LAST: + case PIO_ST_LAST_POLL: + poll_state = PIO_ST_LAST_POLL; + reg_state = PIO_ST_LAST; break; default: BUG(); @@ -1950,39 +1967,19 @@ status = ata_chk_status(ap); if (status & ATA_BUSY) { - if (time_after(jiffies, ap->thr_timeout)) { - ap->thr_state = tmout_state; + if (time_after(jiffies, ap->pio_task_timeout)) { + ap->pio_task_state = tmout_state; return 0; } - ap->thr_state = poll_state; + ap->pio_task_state = poll_state; return ATA_SHORT_PAUSE; } - ap->thr_state = reg_state; + ap->pio_task_state = reg_state; return 0; } /** - * ata_pio_start - - * @qc: - * - * LOCKING: - * spin_lock_irqsave(host_set lock) - */ - -static void ata_pio_start (struct ata_queued_cmd *qc) -{ - struct ata_port *ap = qc->ap; - - assert(qc->tf.protocol == ATA_PROT_PIO); - - qc->flags |= ATA_QCFLAG_POLL; - qc->tf.ctl |= ATA_NIEN; /* disable interrupts */ - ata_tf_to_host_nolock(ap, &qc->tf); - ata_thread_wake(ap, THR_PIO); -} - -/** * ata_pio_complete - * @ap: * @@ -1992,7 +1989,6 @@ static void ata_pio_complete (struct ata_port *ap) { struct ata_queued_cmd *qc; - unsigned long flags; u8 drv_stat; /* @@ -2001,35 +1997,33 @@ * a chk-status or two. If not, the drive is probably seeking * or something. Snooze for a couple msecs, then * chk-status again. If still busy, fall back to - * THR_PIO_POLL state. + * PIO_ST_POLL state. */ drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10); if (drv_stat & (ATA_BUSY | ATA_DRQ)) { msleep(2); drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10); if (drv_stat & (ATA_BUSY | ATA_DRQ)) { - ap->thr_state = THR_PIO_LAST_POLL; - ap->thr_timeout = jiffies + ATA_TMOUT_PIO; + ap->pio_task_state = PIO_ST_LAST_POLL; + ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO; return; } } drv_stat = ata_wait_idle(ap); if (drv_stat & (ATA_BUSY | ATA_DRQ)) { - ap->thr_state = THR_PIO_ERR; + ap->pio_task_state = PIO_ST_ERR; return; } qc = ata_qc_from_tag(ap, ap->active_tag); assert(qc != NULL); - spin_lock_irqsave(&ap->host_set->lock, flags); - ap->thr_state = THR_IDLE; - spin_unlock_irqrestore(&ap->host_set->lock, flags); + ap->pio_task_state = PIO_ST_IDLE; ata_irq_on(ap); - ata_qc_complete(qc, drv_stat, 0); + ata_qc_complete(qc, drv_stat); } /** @@ -2053,22 +2047,22 @@ * a chk-status or two. If not, the drive is probably seeking * or something. Snooze for a couple msecs, then * chk-status again. If still busy, fall back to - * THR_PIO_POLL state. + * PIO_ST_POLL state. */ status = ata_busy_wait(ap, ATA_BUSY, 5); if (status & ATA_BUSY) { msleep(2); status = ata_busy_wait(ap, ATA_BUSY, 10); if (status & ATA_BUSY) { - ap->thr_state = THR_PIO_POLL; - ap->thr_timeout = jiffies + ATA_TMOUT_PIO; + ap->pio_task_state = PIO_ST_POLL; + ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO; return; } } /* handle BSY=0, DRQ=0 as error */ if ((status & ATA_DRQ) == 0) { - ap->thr_state = THR_PIO_ERR; + ap->pio_task_state = PIO_ST_ERR; return; } @@ -2079,7 +2073,7 @@ sg = qc->sg; if (qc->cursect == (qc->nsect - 1)) - ap->thr_state = THR_PIO_LAST; + ap->pio_task_state = PIO_ST_LAST; buf = kmap(sg[qc->cursg].page) + sg[qc->cursg].offset + (qc->cursg_ofs * ATA_SECT_SIZE); @@ -2107,20 +2101,48 @@ kunmap(sg[qc->cursg].page); } -#if 0 /* to be used eventually */ -/** - * ata_eng_schedule - run an iteration of the pio/dma/whatever engine - * @ap: port on which activity will occur - * @eng: instance of engine - * - * LOCKING: - * spin_lock_irqsave(host_set lock) - */ -static void ata_eng_schedule (struct ata_port *ap, struct ata_engine *eng) +static void ata_pio_task(void *_data) { - /* FIXME */ + struct ata_port *ap = _data; + unsigned long timeout = 0; + + switch (ap->pio_task_state) { + case PIO_ST: + ata_pio_sector(ap); + break; + + case PIO_ST_LAST: + ata_pio_complete(ap); + break; + + case PIO_ST_POLL: + case PIO_ST_LAST_POLL: + timeout = ata_pio_poll(ap); + break; + + case PIO_ST_TMOUT: + printk(KERN_ERR "ata%d: FIXME: PIO_ST_TMOUT\n", /* FIXME */ + ap->id); + timeout = 11 * HZ; + break; + + case PIO_ST_ERR: + printk(KERN_ERR "ata%d: FIXME: PIO_ST_ERR\n", /* FIXME */ + ap->id); + timeout = 11 * HZ; + break; + } + + if ((ap->pio_task_state != PIO_ST_IDLE) && + (ap->pio_task_state != PIO_ST_TMOUT) && + (ap->pio_task_state != PIO_ST_ERR)) { + if (timeout) + queue_delayed_work(ata_wq, &ap->pio_task, + timeout); + else + queue_work(ata_wq, &ap->pio_task); + } } -#endif /** * ata_eng_timeout - Handle timeout of queued command @@ -2174,7 +2196,7 @@ printk(KERN_ERR "ata%u: DMA timeout, stat 0x%x\n", ap->id, host_stat); - ata_dma_complete(ap, host_stat, 1); + ata_dma_complete(qc, host_stat); break; case ATA_PROT_NODATA: @@ -2183,7 +2205,7 @@ printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n", ap->id, qc->tf.command, drv_stat); - ata_qc_complete(qc, drv_stat, 1); + ata_qc_complete(qc, drv_stat); break; default: @@ -2192,7 +2214,7 @@ printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n", ap->id, qc->tf.command, drv_stat); - ata_qc_complete(qc, drv_stat, 1); + ata_qc_complete(qc, drv_stat); break; } @@ -2246,8 +2268,7 @@ qc->ap = ap; qc->dev = dev; qc->cursect = qc->cursg = qc->cursg_ofs = 0; - INIT_LIST_HEAD(&qc->node); - init_MUTEX_LOCKED(&qc->sem); + qc->nsect = 0; ata_tf_init(ap, &qc->tf, dev->devno); @@ -2264,13 +2285,12 @@ * ata_qc_complete - * @qc: * @drv_stat: - * @done_late: * * LOCKING: * */ -void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late) +void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat) { struct ata_port *ap = qc->ap; struct scsi_cmnd *cmd = qc->scsicmd; @@ -2284,7 +2304,7 @@ if (cmd) { if (unlikely(drv_stat & (ATA_ERR | ATA_BUSY | ATA_DRQ))) { - if (qc->flags & ATA_QCFLAG_ATAPI) + if (is_atapi_taskfile(&qc->tf)) cmd->result = SAM_STAT_CHECK_CONDITION; else ata_to_sense_error(qc); @@ -2304,89 +2324,124 @@ do_clear = 1; } - up(&qc->sem); + if (qc->waiting) + complete(qc->waiting); if (likely(do_clear)) clear_bit(tag, &ap->qactive); } -#if 0 /* to be used eventually */ /** - * ata_qc_push - - * @qc: - * @append: + * ata_qc_issue - issue taskfile to device + * @qc: command to issue to device + * + * Prepare an ATA command to submission to device. + * This includes mapping the data into a DMA-able + * area, filling in the S/G table, and finally + * writing the taskfile to hardware, starting the command. * * LOCKING: * spin_lock_irqsave(host_set lock) + * + * RETURNS: + * Zero on success, negative on error. */ -static void ata_qc_push (struct ata_queued_cmd *qc, unsigned int append) + +int ata_qc_issue(struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; - struct ata_engine *eng = &ap->eng; + struct scsi_cmnd *cmd = qc->scsicmd; - if (likely(append)) - list_add_tail(&qc->node, &eng->q); - else - list_add(&qc->node, &eng->q); + if (qc->flags & ATA_QCFLAG_SG) { + /* set up SG table */ + if (cmd->use_sg) { + if (ata_sg_setup(qc)) + goto err_out; + } else { + if (ata_sg_setup_one(qc)) + goto err_out; + } + + ap->ops->fill_sg(qc); + } + + qc->ap->active_tag = qc->tag; + qc->flags |= ATA_QCFLAG_ACTIVE; - if (!test_and_set_bit(ATA_EFLG_ACTIVE, &eng->flags)) - ata_eng_schedule(ap, eng); + return ata_qc_issue_prot(qc); + +err_out: + return -1; } -#endif /** - * ata_qc_issue - - * @qc: + * ata_qc_issue_prot - issue taskfile to device in proto-dependent manner + * @qc: command to issue to device + * + * Using various libata functions and hooks, this function + * starts an ATA command. ATA commands are grouped into + * classes called "protocols", and issuing each type of protocol + * is slightly different. * * LOCKING: + * spin_lock_irqsave(host_set lock) * * RETURNS: - * + * Zero on success, negative on error. */ -int ata_qc_issue(struct ata_queued_cmd *qc) + +static int ata_qc_issue_prot(struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; - struct scsi_cmnd *cmd = qc->scsicmd; - unsigned int dma = qc->flags & ATA_QCFLAG_DMA; ata_dev_select(ap, qc->dev->devno, 1, 0); - /* set up SG table */ - if (cmd->use_sg) { - if (ata_sg_setup(qc)) - goto err_out; - } else { - if (ata_sg_setup_one(qc)) - goto err_out; - } + switch (qc->tf.protocol) { + case ATA_PROT_NODATA: + ata_tf_to_host_nolock(ap, &qc->tf); + break; - ap->ops->fill_sg(qc); + case ATA_PROT_DMA: + ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ + ap->ops->bmdma_setup(qc); /* set up bmdma */ + ap->ops->bmdma_start(qc); /* initiate bmdma */ + break; - qc->ap->active_tag = qc->tag; - qc->flags |= ATA_QCFLAG_ACTIVE; + case ATA_PROT_PIO: /* load tf registers, initiate polling pio */ + ata_qc_set_polling(qc); + ata_tf_to_host_nolock(ap, &qc->tf); + ap->pio_task_state = PIO_ST; + queue_work(ata_wq, &ap->pio_task); + break; - if (likely(dma)) { - ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ - ap->ops->bmdma_start(qc); /* initiate bmdma */ - } else - /* load tf registers, initiate polling pio */ - ata_pio_start(qc); + case ATA_PROT_ATAPI: + ata_tf_to_host_nolock(ap, &qc->tf); + queue_work(ata_wq, &ap->packet_task); + break; - return 0; + case ATA_PROT_ATAPI_DMA: + ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ + ap->ops->bmdma_setup(qc); /* set up bmdma */ + queue_work(ata_wq, &ap->packet_task); + break; -err_out: - return -1; + default: + WARN_ON(1); + return -1; + } + + return 0; } /** - * ata_bmdma_start_mmio - - * @qc: + * ata_bmdma_setup_mmio - Set up PCI IDE BMDMA transaction (MMIO) + * @qc: Info associated with this ATA transaction. * * LOCKING: * spin_lock_irqsave(host_set lock) */ -void ata_bmdma_start_mmio (struct ata_queued_cmd *qc) +void ata_bmdma_setup_mmio (struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); @@ -2410,8 +2465,24 @@ /* issue r/w command */ ap->ops->exec_command(ap, &qc->tf); +} + +/** + * ata_bmdma_start_mmio - Start a PCI IDE BMDMA transaction (MMIO) + * @qc: Info associated with this ATA transaction. + * + * LOCKING: + * spin_lock_irqsave(host_set lock) + */ + +void ata_bmdma_start_mmio (struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + void *mmio = (void *) ap->ioaddr.bmdma_addr; + u8 dmactl; /* start host DMA transaction */ + dmactl = readb(mmio + ATA_DMA_CMD); writeb(dmactl | ATA_DMA_START, mmio + ATA_DMA_CMD); /* Strictly, one may wish to issue a readb() here, to @@ -2428,14 +2499,14 @@ } /** - * ata_bmdma_start_pio - - * @qc: + * ata_bmdma_setup_pio - Set up PCI IDE BMDMA transaction (PIO) + * @qc: Info associated with this ATA transaction. * * LOCKING: * spin_lock_irqsave(host_set lock) */ -void ata_bmdma_start_pio (struct ata_queued_cmd *qc) +void ata_bmdma_setup_pio (struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); @@ -2458,24 +2529,38 @@ /* issue r/w command */ ap->ops->exec_command(ap, &qc->tf); +} + +/** + * ata_bmdma_start_pio - Start a PCI IDE BMDMA transaction (PIO) + * @qc: Info associated with this ATA transaction. + * + * LOCKING: + * spin_lock_irqsave(host_set lock) + */ + +void ata_bmdma_start_pio (struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + u8 dmactl; /* start host DMA transaction */ + dmactl = inb(ap->ioaddr.bmdma_addr + ATA_DMA_CMD); outb(dmactl | ATA_DMA_START, ap->ioaddr.bmdma_addr + ATA_DMA_CMD); } /** * ata_dma_complete - - * @ap: + * @qc: * @host_stat: - * @done_late: * * LOCKING: */ -static void ata_dma_complete(struct ata_port *ap, u8 host_stat, - unsigned int done_late) +static void ata_dma_complete(struct ata_queued_cmd *qc, u8 host_stat) { + struct ata_port *ap = qc->ap; VPRINTK("ENTER\n"); if (ap->flags & ATA_FLAG_MMIO) { @@ -2506,8 +2591,7 @@ ap->id, (u32) host_stat, (u32) ata_chk_status(ap)); /* get drive status; clear intr; complete txn */ - ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag), - ata_wait_idle(ap), done_late); + ata_qc_complete(qc, ata_wait_idle(ap)); } /** @@ -2533,7 +2617,10 @@ unsigned int handled = 0; switch (qc->tf.protocol) { + + /* BMDMA completion */ case ATA_PROT_DMA: + case ATA_PROT_ATAPI_DMA: if (ap->flags & ATA_FLAG_MMIO) { void *mmio = (void *) ap->ioaddr.bmdma_addr; host_stat = readb(mmio + ATA_DMA_STATUS); @@ -2546,14 +2633,23 @@ break; } - ata_dma_complete(ap, host_stat, 0); + ata_dma_complete(qc, host_stat); handled = 1; break; - case ATA_PROT_NODATA: /* command completion, but no data xfer */ + /* command completion, but no data xfer */ + /* FIXME: a shared interrupt _will_ cause a non-data command + * to be completed prematurely, with an error. + * + * This doesn't matter right now, since we aren't sending + * non-data commands down this pipe except in development + * situations. + */ + case ATA_PROT_ATAPI: + case ATA_PROT_NODATA: status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status); - ata_qc_complete(qc, status, 0); + ata_qc_complete(qc, status); handled = 1; break; @@ -2603,7 +2699,7 @@ struct ata_queued_cmd *qc; qc = ata_qc_from_tag(ap, ap->active_tag); - if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0)) + if (qc && (!(qc->tf.ctl & ATA_NIEN))) handled += ata_host_intr(ap, qc); } } @@ -2614,36 +2710,6 @@ } /** - * ata_thread_wake - - * @ap: - * @thr_state: - * - * LOCKING: - * spin_lock_irqsave(host_set lock) - */ - -void ata_thread_wake(struct ata_port *ap, unsigned int thr_state) -{ - assert(ap->thr_state == THR_IDLE); - ap->thr_state = thr_state; - up(&ap->thr_sem); -} - -/** - * ata_thread_timer - - * @opaque: - * - * LOCKING: - */ - -static void ata_thread_timer(unsigned long opaque) -{ - struct ata_port *ap = (struct ata_port *) opaque; - - up(&ap->thr_sem); -} - -/** * ata_thread_iter - * @ap: * @@ -2666,7 +2732,6 @@ break; case THR_PROBE_START: - down(&ap->sem); ap->thr_state = THR_PORT_RESET; break; @@ -2685,40 +2750,8 @@ break; case THR_AWAIT_DEATH: - timeout = -1; - break; - case THR_IDLE: - timeout = 30 * HZ; - break; - - case THR_PIO: - ata_pio_sector(ap); - break; - - case THR_PIO_LAST: - ata_pio_complete(ap); - break; - - case THR_PIO_POLL: - case THR_PIO_LAST_POLL: - timeout = ata_pio_poll(ap); - break; - - case THR_PIO_TMOUT: - printk(KERN_ERR "ata%d: FIXME: THR_PIO_TMOUT\n", /* FIXME */ - ap->id); - timeout = 11 * HZ; - break; - - case THR_PIO_ERR: - printk(KERN_ERR "ata%d: FIXME: THR_PIO_ERR\n", /* FIXME */ - ap->id); - timeout = 11 * HZ; - break; - - case THR_PACKET: - atapi_cdb_send(ap); + timeout = -1; break; default: @@ -2733,86 +2766,8 @@ } /** - * ata_thread - - * @data: - * - * LOCKING: - * - * RETURNS: - * - */ - -static int ata_thread (void *data) -{ - struct ata_port *ap = data; - long timeout; - - daemonize ("katad-%u", ap->id); - allow_signal(SIGTERM); - - while (1) { - cond_resched(); - - timeout = ata_thread_iter(ap); - - if (signal_pending (current)) - flush_signals(current); - - if (current->flags & PF_FREEZE) - refrigerator(PF_FREEZE); - - - if ((timeout < 0) || (ap->time_to_die)) - break; - - /* note sleeping for full timeout not guaranteed (that's ok) */ - if (timeout) { - mod_timer(&ap->thr_timer, jiffies + timeout); - down_interruptible(&ap->thr_sem); - - if (signal_pending (current)) - flush_signals(current); - - if (ap->time_to_die) - break; - } - } - - printk(KERN_DEBUG "ata%u: thread exiting\n", ap->id); - ap->thr_pid = -1; - del_timer_sync(&ap->thr_timer); - complete_and_exit (&ap->thr_exited, 0); -} - -/** - * ata_thread_kill - kill per-port kernel thread - * @ap: port those thread is to be killed - * - * LOCKING: - * - */ - -static int ata_thread_kill(struct ata_port *ap) -{ - int ret = 0; - - if (ap->thr_pid >= 0) { - ap->time_to_die = 1; - wmb(); - ret = kill_proc(ap->thr_pid, SIGTERM, 1); - if (ret) - printk(KERN_ERR "ata%d: unable to kill kernel thread\n", - ap->id); - else - wait_for_completion(&ap->thr_exited); - } - - return ret; -} - -/** - * atapi_cdb_send - Write CDB bytes to hardware - * @ap: Port to which ATAPI device is attached. + * atapi_packet_task - Write CDB bytes to hardware + * @_data: Port to which ATAPI device is attached. * * When device has indicated its readiness to accept * a CDB, this function is called. Send the CDB. @@ -2824,8 +2779,9 @@ * Kernel thread context (may sleep) */ -static void atapi_cdb_send(struct ata_port *ap) +static void atapi_packet_task(void *_data) { + struct ata_port *ap = _data; struct ata_queued_cmd *qc; u8 status; @@ -2850,30 +2806,24 @@ qc->scsicmd->cmnd, ap->host->max_cmd_len / 4); /* if we are DMA'ing, irq handler takes over from here */ - if (qc->tf.feature == ATAPI_PKT_DMA) - goto out; + if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) + ap->ops->bmdma_start(qc); /* initiate bmdma */ - /* sleep-wait for BSY to clear */ - DPRINTK("busy wait 2\n"); - if (ata_busy_sleep(ap, ATA_TMOUT_CDB_QUICK, ATA_TMOUT_CDB)) - goto err_out; - - /* wait for BSY,DRQ to clear */ - status = ata_wait_idle(ap); - if (status & (ATA_BUSY | ATA_DRQ)) - goto err_out; + /* non-data commands are also handled via irq */ + else if (qc->scsicmd->sc_data_direction == SCSI_DATA_NONE) { + /* do nothing */ + } - /* transaction completed, indicate such to scsi stack */ - ata_qc_complete(qc, status, 0); - ata_irq_on(ap); + /* PIO commands are handled by polling */ + else { + ap->pio_task_state = PIO_ST; + queue_work(ata_wq, &ap->pio_task); + } -out: - ap->thr_state = THR_IDLE; return; err_out: - ata_qc_complete(qc, ATA_ERR, 0); - goto out; + ata_qc_complete(qc, ATA_ERR); } int ata_port_start (struct ata_port *ap) @@ -2883,7 +2833,7 @@ ap->prd = pci_alloc_consistent(pdev, ATA_PRD_TBL_SZ, &ap->prd_dma); if (!ap->prd) return -ENOMEM; - + DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd, (unsigned long long) ap->prd_dma); return 0; @@ -2896,6 +2846,21 @@ pci_free_consistent(pdev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma); } +static void ata_probe_task(void *_data) +{ + struct ata_port *ap = _data; + long timeout; + + timeout = ata_thread_iter(ap); + if (timeout < 0) + return; + + if (timeout > 0) + queue_delayed_work(ata_wq, &ap->probe_task, timeout); + else + queue_work(ata_wq, &ap->probe_task); +} + /** * ata_host_remove - * @ap: @@ -2913,8 +2878,6 @@ if (do_unregister) scsi_remove_host(sh); - ata_thread_kill(ap); /* FIXME: check return val */ - ap->ops->port_stop(ap); } @@ -2958,21 +2921,14 @@ ap->active_tag = ATA_TAG_POISON; ap->last_ctl = 0xFF; - /* ata_engine init */ - ap->eng.flags = 0; - INIT_LIST_HEAD(&ap->eng.q); + INIT_WORK(&ap->packet_task, atapi_packet_task, ap); + INIT_WORK(&ap->pio_task, ata_pio_task, ap); + INIT_WORK(&ap->probe_task, ata_probe_task, ap); for (i = 0; i < ATA_MAX_DEVICES; i++) ap->device[i].devno = i; - init_completion(&ap->thr_exited); init_MUTEX_LOCKED(&ap->probe_sem); - init_MUTEX_LOCKED(&ap->sem); - init_MUTEX_LOCKED(&ap->thr_sem); - - init_timer(&ap->thr_timer); - ap->thr_timer.function = ata_thread_timer; - ap->thr_timer.data = (unsigned long) ap; #ifdef ATA_IRQ_TRAP ap->stats.unhandled_irq = 1; @@ -3015,18 +2971,8 @@ if (rc) goto err_out; - ap->thr_pid = kernel_thread(ata_thread, ap, CLONE_FS | CLONE_FILES); - if (ap->thr_pid < 0) { - printk(KERN_ERR "ata%d: unable to start kernel thread\n", - ap->id); - goto err_out_free; - } - return ap; -err_out_free: - ap->ops->port_stop(ap); - err_out: scsi_host_put(host); return NULL; @@ -3106,7 +3052,7 @@ ap = host_set->ports[i]; DPRINTK("ata%u: probe begin\n", ap->id); - up(&ap->sem); /* start probe */ + queue_work(ata_wq, &ap->probe_task); /* start probe */ DPRINTK("ata%u: probe-wait begin\n", ap->id); down(&ap->probe_sem); /* wait for end */ @@ -3489,11 +3435,21 @@ static int __init ata_init(void) { + ata_wq = create_workqueue("ata"); + if (!ata_wq) + return -ENOMEM; + printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); return 0; } +static void __exit ata_exit(void) +{ + destroy_workqueue(ata_wq); +} + module_init(ata_init); +module_exit(ata_exit); /* * libata is essentially a library of internal helper functions for @@ -3512,6 +3468,8 @@ EXPORT_SYMBOL_GPL(ata_tf_load_mmio); EXPORT_SYMBOL_GPL(ata_tf_read_pio); EXPORT_SYMBOL_GPL(ata_tf_read_mmio); +EXPORT_SYMBOL_GPL(ata_tf_to_fis); +EXPORT_SYMBOL_GPL(ata_tf_from_fis); EXPORT_SYMBOL_GPL(ata_check_status_pio); EXPORT_SYMBOL_GPL(ata_check_status_mmio); EXPORT_SYMBOL_GPL(ata_exec_command_pio); @@ -3520,7 +3478,9 @@ EXPORT_SYMBOL_GPL(ata_port_stop); EXPORT_SYMBOL_GPL(ata_interrupt); EXPORT_SYMBOL_GPL(ata_fill_sg); +EXPORT_SYMBOL_GPL(ata_bmdma_setup_pio); EXPORT_SYMBOL_GPL(ata_bmdma_start_pio); +EXPORT_SYMBOL_GPL(ata_bmdma_setup_mmio); EXPORT_SYMBOL_GPL(ata_bmdma_start_mmio); EXPORT_SYMBOL_GPL(ata_port_probe); EXPORT_SYMBOL_GPL(sata_phy_reset); @@ -3533,3 +3493,4 @@ EXPORT_SYMBOL_GPL(ata_scsi_slave_config); EXPORT_SYMBOL_GPL(ata_scsi_release); EXPORT_SYMBOL_GPL(ata_host_intr); +EXPORT_SYMBOL_GPL(ata_dev_id_string); diff -Nru a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c --- a/drivers/scsi/libata-scsi.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/libata-scsi.c Tue May 18 23:38:06 2004 @@ -46,8 +46,8 @@ * @geom: location to which geometry will be output * * Generic bios head/sector/cylinder calculator - * used by sd. Most BIOSes nowadays expect a XXX/255/16 (CHS) - * mapping. Some situations may arise where the disk is not + * used by sd. Most BIOSes nowadays expect a XXX/255/16 (CHS) + * mapping. Some situations may arise where the disk is not * bootable if this is not used. * * LOCKING: @@ -57,7 +57,7 @@ * Zero. */ int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev, - sector_t capacity, int geom[]) + sector_t capacity, int geom[]) { geom[0] = 255; geom[1] = 63; @@ -167,8 +167,27 @@ { sdev->use_10_for_rw = 1; sdev->use_10_for_ms = 1; + blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD); + if (sdev->id < ATA_MAX_DEVICES) { + struct ata_port *ap; + struct ata_device *dev; + + ap = (struct ata_port *) &sdev->host->hostdata[0]; + dev = &ap->device[sdev->id]; + + /* TODO: 1024 is an arbitrary number, not the + * hardware maximum. This should be increased to + * 65534 when Jens Axboe's patch for dynamically + * determining max_sectors is merged. + */ + if (dev->flags & ATA_DFLAG_LBA48) { + sdev->host->max_sectors = 2048; + blk_queue_max_sectors(sdev->request_queue, 2048); + } + } + return 0; /* scsi layer doesn't check return value, sigh */ } @@ -343,19 +362,20 @@ VPRINTK("ENTER\n"); - if (unlikely(cmd->request_bufflen < 1)) { - printk(KERN_WARNING "ata%u(%u): empty request buffer\n", - ap->id, dev->devno); - goto err_out; - } - qc = ata_scsi_qc_new(ap, dev, cmd, done); if (!qc) return; if (cmd->sc_data_direction == SCSI_DATA_READ || - cmd->sc_data_direction == SCSI_DATA_WRITE) + cmd->sc_data_direction == SCSI_DATA_WRITE) { + if (unlikely(cmd->request_bufflen < 1)) { + printk(KERN_WARNING "ata%u(%u): WARNING: zero len r/w req\n", + ap->id, dev->devno); + goto err_out; + } + qc->flags |= ATA_QCFLAG_SG; /* data is present; dma-map it */ + } if (xlat_func(qc, scsicmd)) goto err_out; @@ -478,7 +498,9 @@ unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf, unsigned int buflen) { - const u8 hdr[] = { + struct ata_device *dev = args->dev; + + u8 hdr[] = { TYPE_DISK, 0, 0x5, /* claim SPC-3 version compatibility */ @@ -486,14 +508,20 @@ 96 - 4 }; + /* set scsi removeable (RMB) bit per ata bit */ + if (ata_id_removeable(dev)) + hdr[1] |= (1 << 7); + VPRINTK("ENTER\n"); memcpy(rbuf, hdr, sizeof(hdr)); if (buflen > 36) { - memcpy(&rbuf[8], args->dev->vendor, 8); - memcpy(&rbuf[16], args->dev->product, 16); - memcpy(&rbuf[32], DRV_VERSION, 4); + memcpy(&rbuf[8], "ATA ", 8); + ata_dev_id_string(dev, &rbuf[16], ATA_ID_PROD_OFS, 16); + ata_dev_id_string(dev, &rbuf[32], ATA_ID_FW_REV_OFS, 4); + if (rbuf[32] == 0 || rbuf[32] == ' ') + memcpy(&rbuf[32], "n/a ", 4); } if (buflen > 63) { @@ -667,9 +695,17 @@ static unsigned int ata_msense_caching(struct ata_device *dev, u8 **ptr_io, const u8 *last) { - u8 page[7] = { 0xf, 0, 0x10, 0, 0x8, 0xa, 0 }; - if (dev->flags & ATA_DFLAG_WCACHE) - page[6] = 0x4; + u8 page[] = { + 0x8, /* page code */ + 0x12, /* page length */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 zeroes */ + 0, 0, 0, 0, 0, 0, 0, 0 /* 8 zeroes */ + }; + + if (ata_id_wcache_enabled(dev)) + page[2] |= (1 << 2); /* write cache enable */ + if (!ata_id_rahead_enabled(dev)) + page[12] |= (1 << 5); /* disable read ahead */ ata_msense_push(ptr_io, last, page, sizeof(page)); return sizeof(page); @@ -696,6 +732,31 @@ } /** + * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page + * @dev: Device associated with this MODE SENSE command + * @ptr_io: (input/output) Location to store more output data + * @last: End of output data buffer + * + * Generate a generic MODE SENSE r/w error recovery page. + * + * LOCKING: + * None. + */ + +static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last) +{ + const u8 page[] = { + 0x1, /* page code */ + 0xa, /* page length */ + (1 << 7) | (1 << 6), /* note auto r/w reallocation */ + 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 9 zeroes */ + }; + + ata_msense_push(ptr_io, last, page, sizeof(page)); + return sizeof(page); +} + +/** * ata_scsiop_mode_sense - Simulate MODE SENSE 6, 10 commands * @args: Port / device / SCSI command of interest. * @rbuf: Response buffer, to which simulated SCSI cmd output is sent. @@ -734,6 +795,10 @@ last = rbuf + buflen - 1; switch(scsicmd[2] & 0x3f) { + case 0x01: /* r/w error recovery */ + output_len += ata_msense_rw_recovery(&p, last); + break; + case 0x08: /* caching */ output_len += ata_msense_caching(dev, &p, last); break; @@ -744,6 +809,7 @@ } case 0x3f: /* all pages */ + output_len += ata_msense_rw_recovery(&p, last); output_len += ata_msense_caching(dev, &p, last); output_len += ata_msense_ctl_mode(&p, last); break; @@ -784,20 +850,23 @@ VPRINTK("ENTER\n"); - n_sectors--; /* one off */ + n_sectors--; /* ATA TotalUserSectors - 1 */ tmp = n_sectors; /* note: truncates, if lba48 */ if (args->cmd->cmnd[0] == READ_CAPACITY) { + /* sector count, 32-bit */ rbuf[0] = tmp >> (8 * 3); rbuf[1] = tmp >> (8 * 2); rbuf[2] = tmp >> (8 * 1); rbuf[3] = tmp; + /* sector size */ tmp = ATA_SECT_SIZE; rbuf[6] = tmp >> 8; rbuf[7] = tmp; } else { + /* sector count, 64-bit */ rbuf[2] = n_sectors >> (8 * 7); rbuf[3] = n_sectors >> (8 * 6); rbuf[4] = n_sectors >> (8 * 5); @@ -807,6 +876,7 @@ rbuf[8] = tmp >> (8 * 1); rbuf[9] = tmp; + /* sector size */ tmp = ATA_SECT_SIZE; rbuf[12] = tmp >> 8; rbuf[13] = tmp; @@ -866,56 +936,20 @@ } /** - * atapi_scsi_queuecmd - Send CDB to ATAPI device - * @ap: Port to which ATAPI device is attached. - * @dev: Target device for CDB. - * @cmd: SCSI command being sent to device. - * @done: SCSI command completion function. - * - * Sends CDB to ATAPI device. If the Linux SCSI layer sends a - * non-data command, then this function handles the command - * directly, via polling. Otherwise, the bmdma engine is started. + * atapi_xlat - Initialize PACKET taskfile + * @qc: command structure to be initialized + * @scsicmd: SCSI CDB associated with this PACKET command * * LOCKING: * spin_lock_irqsave(host_set lock) + * + * RETURNS: + * Zero on success, non-zero on failure. */ -static void atapi_scsi_queuecmd(struct ata_port *ap, struct ata_device *dev, - struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) +static unsigned int atapi_xlat(struct ata_queued_cmd *qc, u8 *scsicmd) { - struct ata_queued_cmd *qc; - u8 *scsicmd = cmd->cmnd, status; - unsigned int doing_dma = 0; - - VPRINTK("ENTER, drv_stat = 0x%x\n", ata_chk_status(ap)); - - if (cmd->sc_data_direction == SCSI_DATA_UNKNOWN) { - DPRINTK("unknown data, scsicmd 0x%x\n", scsicmd[0]); - ata_bad_cdb(cmd, done); - return; - } - - switch(scsicmd[0]) { - case READ_6: - case WRITE_6: - case MODE_SELECT: - case MODE_SENSE: - DPRINTK("read6/write6/modesel/modesense trap\n"); - ata_bad_scsiop(cmd, done); - return; - - default: - /* do nothing */ - break; - } - - qc = ata_scsi_qc_new(ap, dev, cmd, done); - if (!qc) { - printk(KERN_ERR "ata%u: command queue empty\n", ap->id); - return; - } - - qc->flags |= ATA_QCFLAG_ATAPI; + struct scsi_cmnd *cmd = qc->scsicmd; qc->tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; if (cmd->sc_data_direction == SCSI_DATA_WRITE) { @@ -925,52 +959,30 @@ qc->tf.command = ATA_CMD_PACKET; - /* set up SG table */ - if (cmd->sc_data_direction == SCSI_DATA_NONE) { - ap->active_tag = qc->tag; - qc->flags |= ATA_QCFLAG_ACTIVE | ATA_QCFLAG_POLL; + /* no data - interrupt-driven */ + if (cmd->sc_data_direction == SCSI_DATA_NONE) qc->tf.protocol = ATA_PROT_ATAPI; - ata_dev_select(ap, dev->devno, 1, 0); + /* PIO data xfer - polling */ + else if ((qc->flags & ATA_QCFLAG_DMA) == 0) { + ata_qc_set_polling(qc); + qc->tf.protocol = ATA_PROT_ATAPI; + qc->tf.lbam = (8 * 1024) & 0xff; + qc->tf.lbah = (8 * 1024) >> 8; - DPRINTK("direction: none\n"); - qc->tf.ctl |= ATA_NIEN; /* disable interrupts */ - ata_tf_to_host_nolock(ap, &qc->tf); + /* DMA data xfer - interrupt-driven */ } else { - qc->flags |= ATA_QCFLAG_SG; /* data is present; dma-map it */ - qc->tf.feature = ATAPI_PKT_DMA; qc->tf.protocol = ATA_PROT_ATAPI_DMA; + qc->tf.feature |= ATAPI_PKT_DMA; - doing_dma = 1; - - /* select device, send command to hardware */ - if (ata_qc_issue(qc)) - goto err_out; - } - - status = ata_busy_wait(ap, ATA_BUSY, 1000); - if (status & ATA_BUSY) { - ata_thread_wake(ap, THR_PACKET); - return; +#ifdef ATAPI_ENABLE_DMADIR + /* some SATA bridges need us to indicate data xfer direction */ + if (cmd->sc_data_direction != SCSI_DATA_WRITE) + qc->tf.feature |= ATAPI_DMADIR; +#endif } - if ((status & ATA_DRQ) == 0) - goto err_out; - /* FIXME: mmio-ize */ - DPRINTK("writing cdb\n"); - outsl(ap->ioaddr.data_addr, scsicmd, ap->host->max_cmd_len / 4); - - if (!doing_dma) - ata_thread_wake(ap, THR_PACKET); - - VPRINTK("EXIT\n"); - return; - -err_out: - if (!doing_dma) - ata_irq_on(ap); /* re-enable interrupts */ - ata_bad_cdb(cmd, done); - DPRINTK("EXIT - badcmd\n"); + return 0; } /** @@ -1109,7 +1121,7 @@ else ata_scsi_simulate(ap, dev, cmd, done); } else - atapi_scsi_queuecmd(ap, dev, cmd, done); + ata_scsi_translate(ap, dev, cmd, done, atapi_xlat); out_unlock: return 0; @@ -1142,7 +1154,11 @@ args.done = done; switch(scsicmd[0]) { - case TEST_UNIT_READY: /* FIXME: correct? */ + /* no-op's, complete with success */ + case REZERO_UNIT: + case SEEK_6: + case SEEK_10: + case TEST_UNIT_READY: case FORMAT_UNIT: /* FIXME: correct? */ case SEND_DIAGNOSTIC: /* FIXME: correct? */ ata_scsi_rbuf_fill(&args, ata_scsiop_noop); diff -Nru a/drivers/scsi/libata.h b/drivers/scsi/libata.h --- a/drivers/scsi/libata.h Tue May 18 23:38:06 2004 +++ b/drivers/scsi/libata.h Tue May 18 23:38:06 2004 @@ -35,17 +35,13 @@ void (*done)(struct scsi_cmnd *); }; - /* libata-core.c */ -extern void ata_dev_id_string(struct ata_device *dev, unsigned char *s, - unsigned int ofs, unsigned int len); extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, struct ata_device *dev); extern int ata_qc_issue(struct ata_queued_cmd *qc); extern void ata_dev_select(struct ata_port *ap, unsigned int device, unsigned int wait, unsigned int can_sleep); extern void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf); -extern void ata_thread_wake(struct ata_port *ap, unsigned int thr_state); /* libata-scsi.c */ diff -Nru a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c --- a/drivers/scsi/megaraid.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/megaraid.c Tue May 18 23:38:05 2004 @@ -4606,6 +4606,7 @@ if (pci_enable_device(pdev)) goto out; + pci_set_master(pdev); pci_bus = pdev->bus->number; pci_dev_func = pdev->devfn; diff -Nru a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c --- a/drivers/scsi/ncr53c8xx.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/ncr53c8xx.c Tue May 18 23:38:06 2004 @@ -307,7 +307,7 @@ ** The maximum number of segments a transfer is split into. ** We support up to 127 segments for both read and write. ** The data scripts are broken into 2 sub-scripts. -** 80 (MAX_SCATTERL) segments are moved from a sub-script +** 80 (MAX_SCATTERL) segments are moved from a sub-script ** in on-chip RAM. This makes data transfers shorter than ** 80k (assuming 1k fs) as fast as possible. */ @@ -4542,7 +4542,7 @@ /* ** command */ - memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf))); + memcpy(cp->cdb_buf, cmd->cmnd, min_t(int, cmd->cmd_len, sizeof(cp->cdb_buf))); cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, cdb_buf[0])); cp->phys.cmd.size = cpu_to_scr(cmd->cmd_len); @@ -5172,7 +5172,7 @@ ** Copy back sense data to caller's buffer. */ memcpy(cmd->sense_buffer, cp->sense_buf, - MIN(sizeof(cmd->sense_buffer), sizeof(cp->sense_buf))); + min(sizeof(cmd->sense_buffer), sizeof(cp->sense_buf))); if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) { u_char * p = (u_char*) & cmd->sense_buffer; diff -Nru a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c --- a/drivers/scsi/nsp32.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/nsp32.c Tue May 18 23:38:06 2004 @@ -859,7 +859,7 @@ * or current nexus is not existed, unexpected * reselection is occurred. Send reject message. */ - if (newid >= NUMBER(data->lunt) || newlun >= NUMBER(data->lunt[0])) { + if (newid >= ARRAY_SIZE(data->lunt) || newlun >= ARRAY_SIZE(data->lunt[0])) { nsp32_msg(KERN_WARNING, "unknown id/lun"); return FALSE; } else if(data->lunt[newid][newlun].SCpnt == NULL) { @@ -1568,7 +1568,7 @@ SPRINTF("SDTR status\n"); - for(id = 0; id < NUMBER(data->target); id++) { + for (id = 0; id < ARRAY_SIZE(data->target); id++) { SPRINTF("id %d: ", id); @@ -1610,7 +1610,7 @@ } - thislength = MIN(thislength, length); + thislength = min(thislength, length); *start = buffer + offset; return thislength; @@ -2753,17 +2753,17 @@ case CLOCK_4: /* If data->clock is CLOCK_4, then select 40M sync table. */ data->synct = nsp32_sync_table_40M; - data->syncnum = NUMBER(nsp32_sync_table_40M); + data->syncnum = ARRAY_SIZE(nsp32_sync_table_40M); break; case CLOCK_2: /* If data->clock is CLOCK_2, then select 20M sync table. */ data->synct = nsp32_sync_table_20M; - data->syncnum = NUMBER(nsp32_sync_table_20M); + data->syncnum = ARRAY_SIZE(nsp32_sync_table_20M); break; case PCICLK: /* If data->clock is PCICLK, then select pci sync table. */ data->synct = nsp32_sync_table_pci; - data->syncnum = NUMBER(nsp32_sync_table_pci); + data->syncnum = ARRAY_SIZE(nsp32_sync_table_pci); break; default: nsp32_msg(KERN_WARNING, @@ -2771,7 +2771,7 @@ /* Use default value CLOCK_4 */ data->clock = CLOCK_4; data->synct = nsp32_sync_table_40M; - data->syncnum = NUMBER(nsp32_sync_table_40M); + data->syncnum = ARRAY_SIZE(nsp32_sync_table_40M); } /* @@ -2805,9 +2805,9 @@ goto free_autoparam; } - for (i = 0; i < NUMBER(data->lunt); i++) { - for (j = 0; j < NUMBER(data->lunt[0]); j++) { - int offset = i * NUMBER(data->lunt[0]) + j; + for (i = 0; i < ARRAY_SIZE(data->lunt); i++) { + for (j = 0; j < ARRAY_SIZE(data->lunt[0]); j++) { + int offset = i * ARRAY_SIZE(data->lunt[0]) + j; nsp32_lunt tmp = { .SCpnt = NULL, .save_datp = 0, @@ -2825,7 +2825,7 @@ /* * setup target */ - for (i = 0; i < NUMBER(data->target); i++) { + for (i = 0; i < ARRAY_SIZE(data->target); i++) { nsp32_target *target = &(data->target[i]); target->limit_entry = 0; @@ -3021,7 +3021,7 @@ * fall back to asynchronous transfer mode * initialize SDTR negotiation flag */ - for (i = 0; i < NUMBER(data->target); i++) { + for (i = 0; i < ARRAY_SIZE(data->target); i++) { nsp32_target *target = &data->target[i]; target->sync_flag = 0; diff -Nru a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h --- a/drivers/scsi/nsp32.h Tue May 18 23:38:05 2004 +++ b/drivers/scsi/nsp32.h Tue May 18 23:38:05 2004 @@ -70,11 +70,7 @@ /* * MACRO */ -#define NUMBER(arr) ((int) (sizeof(arr) / sizeof(arr[0]))) #define BIT(x) (1UL << (x)) -#ifndef MIN -# define MIN(a,b) ((a) > (b) ? (b) : (a)) -#endif /* * BASIC Definitions diff -Nru a/drivers/scsi/pcmcia/Kconfig b/drivers/scsi/pcmcia/Kconfig --- a/drivers/scsi/pcmcia/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/scsi/pcmcia/Kconfig Tue May 18 23:38:08 2004 @@ -69,4 +69,14 @@ To compile this driver as a module, choose M here: the module will be called qlogic_cs. +config PCMCIA_SYM53C500 + tristate "Symbios 53c500 PCMCIA support" + depends on m + help + Say Y here if you have a New Media Bus Toaster or other PCMCIA + SCSI adapter based on the Symbios 53c500 controller. + + To compile this driver as a module, choose M here: the + module will be called sym53c500_cs. + endmenu diff -Nru a/drivers/scsi/pcmcia/Makefile b/drivers/scsi/pcmcia/Makefile --- a/drivers/scsi/pcmcia/Makefile Tue May 18 23:38:07 2004 +++ b/drivers/scsi/pcmcia/Makefile Tue May 18 23:38:07 2004 @@ -6,7 +6,8 @@ obj-$(CONFIG_PCMCIA_FDOMAIN) += fdomain_cs.o obj-$(CONFIG_PCMCIA_AHA152X) += aha152x_cs.o obj-$(CONFIG_PCMCIA_NINJA_SCSI) += nsp_cs.o +obj-$(CONFIG_PCMCIA_SYM53C500) += sym53c500_cs.o aha152x_cs-objs := aha152x_stub.o aha152x_core.o fdomain_cs-objs := fdomain_stub.o fdomain_core.o -qlogic_cs-objs := qlogic_stub.o qlogic_core.o +qlogic_cs-objs := qlogic_stub.o diff -Nru a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c --- a/drivers/scsi/pcmcia/nsp_cs.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/pcmcia/nsp_cs.c Tue May 18 23:38:09 2004 @@ -315,7 +315,7 @@ int i; /* setup sync data */ - for ( i = 0; i < NUMBER(data->Sync); i++ ) { + for ( i = 0; i < ARRAY_SIZE(data->Sync); i++ ) { data->Sync[i] = tmp_sync; } } @@ -600,7 +600,7 @@ unsigned int base = SCpnt->device->host->io_port; nsp_hw_data *data = (nsp_hw_data *)SCpnt->device->host->hostdata; char *buf = data->MsgBuffer; - int len = MIN(MSGBUF_SIZE, data->MsgLen); + int len = min(MSGBUF_SIZE, data->MsgLen); int ptr; int ret; @@ -774,7 +774,7 @@ continue; } - res = MIN(res, SCpnt->SCp.this_residual); + res = min(res, SCpnt->SCp.this_residual); switch (data->TransferMode) { case MODE_IO32: @@ -868,7 +868,7 @@ continue; } - res = MIN(SCpnt->SCp.this_residual, WFIFO_CRIT); + res = min(SCpnt->SCp.this_residual, WFIFO_CRIT); //nsp_dbg(NSP_DEBUG_DATA_IO, "ptr=0x%p this=0x%x res=0x%x", SCpnt->SCp.ptr, SCpnt->SCp.this_residual, res); switch (data->TransferMode) { @@ -1490,7 +1490,7 @@ spin_unlock_irqrestore(&(data->Lock), flags); SPRINTF("SDTR status\n"); - for(id = 0; id < NUMBER(data->Sync); id++) { + for(id = 0; id < ARRAY_SIZE(data->Sync); id++) { SPRINTF("id %d: ", id); @@ -1534,7 +1534,7 @@ } - thislength = MIN(thislength, length); + thislength = min(thislength, length); *start = buffer + offset; return thislength; diff -Nru a/drivers/scsi/pcmcia/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h --- a/drivers/scsi/pcmcia/nsp_cs.h Tue May 18 23:38:06 2004 +++ b/drivers/scsi/pcmcia/nsp_cs.h Tue May 18 23:38:06 2004 @@ -26,9 +26,7 @@ /************************************ * Some useful macros... */ -#define NUMBER(arr) ((int) (sizeof(arr) / sizeof(arr[0]))) /* from XtNumber() in /usr/X11R6/include/X11/Intrinsic.h */ #define BIT(x) (1L << (x)) -#define MIN(a,b) ((a) > (b) ? (b) : (a)) /* SCSI initiator must be ID 7 */ #define NSP_INITIATOR_ID 7 diff -Nru a/drivers/scsi/pcmcia/qlogic_core.c b/drivers/scsi/pcmcia/qlogic_core.c --- a/drivers/scsi/pcmcia/qlogic_core.c Tue May 18 23:38:09 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,2 +0,0 @@ -#define PCMCIA 1 -#include "qlogicfas.c" diff -Nru a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c --- a/drivers/scsi/pcmcia/qlogic_stub.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/pcmcia/qlogic_stub.c Tue May 18 23:38:07 2004 @@ -47,7 +47,7 @@ #include "scsi.h" #include "hosts.h" -#include "../qlogicfas.h" +#include "../qlogicfas408.h" #include #include @@ -56,13 +56,13 @@ #include #include +/* Set the following to 2 to use normal interrupt (active high/totempole- + * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open + * drain + */ +#define INT_TYPE 0 -extern Scsi_Host_Template qlogicfas_driver_template; -extern void qlogicfas_preset(int port, int irq); -extern int qlogicfas_bus_reset(Scsi_Cmnd *); -extern irqreturn_t do_ql_ihandl(int irq, void *dev_id, struct pt_regs *regs); - -static char *qlogic_name = "qlogic_cs"; +static char qlogic_name[] = "qlogic_cs"; #ifdef PCMCIA_DEBUG static int pc_debug = PCMCIA_DEBUG; @@ -73,6 +73,24 @@ #define DEBUG(n, args...) #endif +static Scsi_Host_Template qlogicfas_driver_template = { + .module = THIS_MODULE, + .name = qlogic_name, + .proc_name = qlogic_name, + .info = qlogicfas408_info, + .queuecommand = qlogicfas408_queuecommand, + .eh_abort_handler = qlogicfas408_abort, + .eh_bus_reset_handler = qlogicfas408_bus_reset, + .eh_device_reset_handler= qlogicfas408_device_reset, + .eh_host_reset_handler = qlogicfas408_host_reset, + .bios_param = qlogicfas408_biosparam, + .can_queue = 1, + .this_id = -1, + .sg_tablesize = SG_ALL, + .cmd_per_lun = 1, + .use_clustering = DISABLE_CLUSTERING, +}; + /*====================================================================*/ /* Parameters that can be set with 'insmod' */ @@ -110,29 +128,17 @@ int qltyp; /* type of chip */ int qinitid; struct Scsi_Host *shost; /* registered host structure */ - qlogicfas_priv_t priv; + struct qlogicfas408_priv *priv; - qltyp = inb(qbase + 0xe) & 0xf8; + qltyp = qlogicfas408_get_chip_type(qbase, INT_TYPE); qinitid = host->this_id; if (qinitid < 0) qinitid = 7; /* if no ID, use 7 */ - outb(1, qbase + 8); /* set for PIO pseudo DMA */ - REG0; - outb(0x40 | qlcfg8 | qinitid, qbase + 8); /* (ini) bus id, disable scsi rst */ - outb(qlcfg5, qbase + 5); /* select timer */ - outb(qlcfg9, qbase + 9); /* prescaler */ - -#if QL_RESET_AT_START - outb(3, qbase + 3); - REG1; - /* FIXME: timeout */ - while (inb(qbase + 0xf) & 4) - cpu_relax(); - REG0; -#endif + + qlogicfas408_setup(qbase, qinitid, INT_TYPE); host->name = qlogic_name; - shost = scsi_host_alloc(host, sizeof(struct qlogicfas_priv)); + shost = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv)); if (!shost) goto err; shost->io_port = qbase; @@ -141,12 +147,14 @@ if (qlirq != -1) shost->irq = qlirq; - priv = (qlogicfas_priv_t)&(shost->hostdata[0]); + priv = get_priv_by_host(shost); priv->qlirq = qlirq; priv->qbase = qbase; priv->qinitid = qinitid; + priv->shost = shost; + priv->int_type = INT_TYPE; - if (request_irq(qlirq, do_ql_ihandl, 0, qlogic_name, shost)) + if (request_irq(qlirq, qlogicfas408_ihandl, 0, qlogic_name, shost)) goto free_scsi_host; sprintf(priv->qinfo, @@ -307,9 +315,6 @@ outb(0x04, link->io.BasePort1 + 0xd); } - qlogicfas_driver_template.name = qlogic_name; - qlogicfas_driver_template.proc_name = qlogic_name; - /* The KXL-810AN has a bigger IO port window */ if (link->io.NumPorts1 == 32) host = qlogic_detect(&qlogicfas_driver_template, link, @@ -402,7 +407,7 @@ outb(0x04, link->io.BasePort1 + 0xd); } /* Ugggglllyyyy!!! */ - qlogicfas_bus_reset(NULL); + qlogicfas408_bus_reset(NULL); } break; } diff -Nru a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/pcmcia/sym53c500_cs.c Tue May 18 23:38:09 2004 @@ -0,0 +1,1042 @@ +/* +* sym53c500_cs.c Bob Tracy (rct@frus.com) +* +* A rewrite of the pcmcia-cs add-on driver for newer (circa 1997) +* New Media Bus Toaster PCMCIA SCSI cards using the Symbios Logic +* 53c500 controller: intended for use with 2.6 and later kernels. +* The pcmcia-cs add-on version of this driver is not supported +* beyond 2.4. It consisted of three files with history/copyright +* information as follows: +* +* SYM53C500.h +* Bob Tracy (rct@frus.com) +* Original by Tom Corner (tcorner@via.at). +* Adapted from NCR53c406a.h which is Copyrighted (C) 1994 +* Normunds Saumanis (normunds@rx.tech.swh.lv) +* +* SYM53C500.c +* Bob Tracy (rct@frus.com) +* Original driver by Tom Corner (tcorner@via.at) was adapted +* from NCR53c406a.c which is Copyrighted (C) 1994, 1995, 1996 +* Normunds Saumanis (normunds@fi.ibm.com) +* +* sym53c500.c +* Bob Tracy (rct@frus.com) +* Original by Tom Corner (tcorner@via.at) was adapted from a +* driver for the Qlogic SCSI card written by +* David Hinds (dhinds@allegro.stanford.edu). +* +* 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 SYM53C500_DEBUG 0 +#define VERBOSE_SYM53C500_DEBUG 0 + +/* +* Set this to 0 if you encounter kernel lockups while transferring +* data in PIO mode. Note this can be changed via "sysfs". +*/ +#define USE_FAST_PIO 1 + +/* =============== End of user configurable parameters ============== */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* ================================================================== */ + +#ifdef PCMCIA_DEBUG +static int pc_debug = PCMCIA_DEBUG; +module_param(pc_debug, int, 0); +#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) +static char *version = +"sym53c500_cs.c 0.9b 2004/05/10 (Bob Tracy)"; +#else +#define DEBUG(n, args...) +#endif + +/* ================================================================== */ + +/* Parameters that can be set with 'insmod' */ + +/* Bit map of interrupts to choose from */ +static unsigned int irq_mask = 0xdeb8; /* 3, 6, 7, 9-12, 14, 15 */ +static int irq_list[4] = { -1 }; +static int num_irqs = 1; + +module_param(irq_mask, int, 0); +MODULE_PARM_DESC(irq_mask, "IRQ mask bits (default: 0xdeb8)"); +module_param_array(irq_list, int, num_irqs, 0); +MODULE_PARM_DESC(irq_list, "Comma-separated list of up to 4 IRQs to try (default: auto select)."); + +/* ================================================================== */ + +#define SYNC_MODE 0 /* Synchronous transfer mode */ + +/* Default configuration */ +#define C1_IMG 0x07 /* ID=7 */ +#define C2_IMG 0x48 /* FE SCSI2 */ +#define C3_IMG 0x20 /* CDB */ +#define C4_IMG 0x04 /* ANE */ +#define C5_IMG 0xa4 /* ? changed from b6= AA PI SIE POL */ +#define C7_IMG 0x80 /* added for SYM53C500 t. corner */ + +/* Hardware Registers: offsets from io_port (base) */ + +/* Control Register Set 0 */ +#define TC_LSB 0x00 /* transfer counter lsb */ +#define TC_MSB 0x01 /* transfer counter msb */ +#define SCSI_FIFO 0x02 /* scsi fifo register */ +#define CMD_REG 0x03 /* command register */ +#define STAT_REG 0x04 /* status register */ +#define DEST_ID 0x04 /* selection/reselection bus id */ +#define INT_REG 0x05 /* interrupt status register */ +#define SRTIMOUT 0x05 /* select/reselect timeout reg */ +#define SEQ_REG 0x06 /* sequence step register */ +#define SYNCPRD 0x06 /* synchronous transfer period */ +#define FIFO_FLAGS 0x07 /* indicates # of bytes in fifo */ +#define SYNCOFF 0x07 /* synchronous offset register */ +#define CONFIG1 0x08 /* configuration register */ +#define CLKCONV 0x09 /* clock conversion register */ +/* #define TESTREG 0x0A */ /* test mode register */ +#define CONFIG2 0x0B /* configuration 2 register */ +#define CONFIG3 0x0C /* configuration 3 register */ +#define CONFIG4 0x0D /* configuration 4 register */ +#define TC_HIGH 0x0E /* transfer counter high */ +/* #define FIFO_BOTTOM 0x0F */ /* reserve FIFO byte register */ + +/* Control Register Set 1 */ +/* #define JUMPER_SENSE 0x00 */ /* jumper sense port reg (r/w) */ +/* #define SRAM_PTR 0x01 */ /* SRAM address pointer reg (r/w) */ +/* #define SRAM_DATA 0x02 */ /* SRAM data register (r/w) */ +#define PIO_FIFO 0x04 /* PIO FIFO registers (r/w) */ +/* #define PIO_FIFO1 0x05 */ /* */ +/* #define PIO_FIFO2 0x06 */ /* */ +/* #define PIO_FIFO3 0x07 */ /* */ +#define PIO_STATUS 0x08 /* PIO status (r/w) */ +/* #define ATA_CMD 0x09 */ /* ATA command/status reg (r/w) */ +/* #define ATA_ERR 0x0A */ /* ATA features/error reg (r/w) */ +#define PIO_FLAG 0x0B /* PIO flag interrupt enable (r/w) */ +#define CONFIG5 0x09 /* configuration 5 register */ +/* #define SIGNATURE 0x0E */ /* signature register (r) */ +/* #define CONFIG6 0x0F */ /* configuration 6 register (r) */ +#define CONFIG7 0x0d + +/* select register set 0 */ +#define REG0(x) (outb(C4_IMG, (x) + CONFIG4)) +/* select register set 1 */ +#define REG1(x) outb(C7_IMG, (x) + CONFIG7); outb(C5_IMG, (x) + CONFIG5) + +#if SYM53C500_DEBUG +#define DEB(x) x +#else +#define DEB(x) +#endif + +#if VERBOSE_SYM53C500_DEBUG +#define VDEB(x) x +#else +#define VDEB(x) +#endif + +#define LOAD_DMA_COUNT(x, count) \ + outb(count & 0xff, (x) + TC_LSB); \ + outb((count >> 8) & 0xff, (x) + TC_MSB); \ + outb((count >> 16) & 0xff, (x) + TC_HIGH); + +/* Chip commands */ +#define DMA_OP 0x80 + +#define SCSI_NOP 0x00 +#define FLUSH_FIFO 0x01 +#define CHIP_RESET 0x02 +#define SCSI_RESET 0x03 +#define RESELECT 0x40 +#define SELECT_NO_ATN 0x41 +#define SELECT_ATN 0x42 +#define SELECT_ATN_STOP 0x43 +#define ENABLE_SEL 0x44 +#define DISABLE_SEL 0x45 +#define SELECT_ATN3 0x46 +#define RESELECT3 0x47 +#define TRANSFER_INFO 0x10 +#define INIT_CMD_COMPLETE 0x11 +#define MSG_ACCEPT 0x12 +#define TRANSFER_PAD 0x18 +#define SET_ATN 0x1a +#define RESET_ATN 0x1b +#define SEND_MSG 0x20 +#define SEND_STATUS 0x21 +#define SEND_DATA 0x22 +#define DISCONN_SEQ 0x23 +#define TERMINATE_SEQ 0x24 +#define TARG_CMD_COMPLETE 0x25 +#define DISCONN 0x27 +#define RECV_MSG 0x28 +#define RECV_CMD 0x29 +#define RECV_DATA 0x2a +#define RECV_CMD_SEQ 0x2b +#define TARGET_ABORT_DMA 0x04 + +/* ================================================================== */ + +struct scsi_info_t { + dev_link_t link; + dev_node_t node; + struct Scsi_Host *host; + unsigned short manf_id; +}; + +/* +* Repository for per-instance host data. +*/ +struct sym53c500_data { + struct scsi_cmnd *current_SC; + int fast_pio; +}; + +enum Phase { + idle, + data_out, + data_in, + command_ph, + status_ph, + message_out, + message_in +}; + +/* ================================================================== */ + +/* +* Global (within this module) variables other than +* sym53c500_driver_template (the scsi_host_template). +*/ +static dev_link_t *dev_list; +static dev_info_t dev_info = "sym53c500_cs"; + +/* ================================================================== */ + +static void +chip_init(int io_port) +{ + REG1(io_port); + outb(0x01, io_port + PIO_STATUS); + outb(0x00, io_port + PIO_FLAG); + + outb(C4_IMG, io_port + CONFIG4); /* REG0(io_port); */ + outb(C3_IMG, io_port + CONFIG3); + outb(C2_IMG, io_port + CONFIG2); + outb(C1_IMG, io_port + CONFIG1); + + outb(0x05, io_port + CLKCONV); /* clock conversion factor */ + outb(0x9C, io_port + SRTIMOUT); /* Selection timeout */ + outb(0x05, io_port + SYNCPRD); /* Synchronous transfer period */ + outb(SYNC_MODE, io_port + SYNCOFF); /* synchronous mode */ +} + +static void +SYM53C500_int_host_reset(int io_port) +{ + outb(C4_IMG, io_port + CONFIG4); /* REG0(io_port); */ + outb(CHIP_RESET, io_port + CMD_REG); + outb(SCSI_NOP, io_port + CMD_REG); /* required after reset */ + outb(SCSI_RESET, io_port + CMD_REG); + chip_init(io_port); +} + +static __inline__ int +SYM53C500_pio_read(int fast_pio, int base, unsigned char *request, unsigned int reqlen) +{ + int i; + int len; /* current scsi fifo size */ + + REG1(base); + while (reqlen) { + i = inb(base + PIO_STATUS); + /* VDEB(printk("pio_status=%x\n", i)); */ + if (i & 0x80) + return 0; + + switch (i & 0x1e) { + default: + case 0x10: /* fifo empty */ + len = 0; + break; + case 0x0: + len = 1; + break; + case 0x8: /* fifo 1/3 full */ + len = 42; + break; + case 0xc: /* fifo 2/3 full */ + len = 84; + break; + case 0xe: /* fifo full */ + len = 128; + break; + } + + if ((i & 0x40) && len == 0) { /* fifo empty and interrupt occurred */ + return 0; + } + + if (len) { + if (len > reqlen) + len = reqlen; + + if (fast_pio && len > 3) { + insl(base + PIO_FIFO, request, len >> 2); + request += len & 0xfc; + reqlen -= len & 0xfc; + } else { + while (len--) { + *request++ = inb(base + PIO_FIFO); + reqlen--; + } + } + } + } + return 0; +} + +static __inline__ int +SYM53C500_pio_write(int fast_pio, int base, unsigned char *request, unsigned int reqlen) +{ + int i = 0; + int len; /* current scsi fifo size */ + + REG1(base); + while (reqlen && !(i & 0x40)) { + i = inb(base + PIO_STATUS); + /* VDEB(printk("pio_status=%x\n", i)); */ + if (i & 0x80) /* error */ + return 0; + + switch (i & 0x1e) { + case 0x10: + len = 128; + break; + case 0x0: + len = 84; + break; + case 0x8: + len = 42; + break; + case 0xc: + len = 1; + break; + default: + case 0xe: + len = 0; + break; + } + + if (len) { + if (len > reqlen) + len = reqlen; + + if (fast_pio && len > 3) { + outsl(base + PIO_FIFO, request, len >> 2); + request += len & 0xfc; + reqlen -= len & 0xfc; + } else { + while (len--) { + outb(*request++, base + PIO_FIFO); + reqlen--; + } + } + } + } + return 0; +} + +static irqreturn_t +SYM53C500_intr(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned long flags; + struct Scsi_Host *dev = dev_id; + DEB(unsigned char fifo_size;) + DEB(unsigned char seq_reg;) + unsigned char status, int_reg; + unsigned char pio_status; + struct scatterlist *sglist; + unsigned int sgcount; + int port_base = dev->io_port; + struct sym53c500_data *data = + (struct sym53c500_data *)dev->hostdata; + struct scsi_cmnd *curSC = data->current_SC; + int fast_pio = data->fast_pio; + + spin_lock_irqsave(dev->host_lock, flags); + + VDEB(printk("SYM53C500_intr called\n")); + + REG1(port_base); + pio_status = inb(port_base + PIO_STATUS); + REG0(port_base); + status = inb(port_base + STAT_REG); + DEB(seq_reg = inb(port_base + SEQ_REG)); + int_reg = inb(port_base + INT_REG); + DEB(fifo_size = inb(port_base + FIFO_FLAGS) & 0x1f); + +#if SYM53C500_DEBUG + printk("status=%02x, seq_reg=%02x, int_reg=%02x, fifo_size=%02x", + status, seq_reg, int_reg, fifo_size); + printk(", pio=%02x\n", pio_status); +#endif /* SYM53C500_DEBUG */ + + if (int_reg & 0x80) { /* SCSI reset intr */ + DEB(printk("SYM53C500: reset intr received\n")); + curSC->result = DID_RESET << 16; + goto idle_out; + } + + if (pio_status & 0x80) { + printk("SYM53C500: Warning: PIO error!\n"); + curSC->result = DID_ERROR << 16; + goto idle_out; + } + + if (status & 0x20) { /* Parity error */ + printk("SYM53C500: Warning: parity error!\n"); + curSC->result = DID_PARITY << 16; + goto idle_out; + } + + if (status & 0x40) { /* Gross error */ + printk("SYM53C500: Warning: gross error!\n"); + curSC->result = DID_ERROR << 16; + goto idle_out; + } + + if (int_reg & 0x20) { /* Disconnect */ + DEB(printk("SYM53C500: disconnect intr received\n")); + if (curSC->SCp.phase != message_in) { /* Unexpected disconnect */ + curSC->result = DID_NO_CONNECT << 16; + } else { /* Command complete, return status and message */ + curSC->result = (curSC->SCp.Status & 0xff) + | ((curSC->SCp.Message & 0xff) << 8) | (DID_OK << 16); + } + goto idle_out; + } + + switch (status & 0x07) { /* scsi phase */ + case 0x00: /* DATA-OUT */ + if (int_reg & 0x10) { /* Target requesting info transfer */ + curSC->SCp.phase = data_out; + VDEB(printk("SYM53C500: Data-Out phase\n")); + outb(FLUSH_FIFO, port_base + CMD_REG); + LOAD_DMA_COUNT(port_base, curSC->request_bufflen); /* Max transfer size */ + outb(TRANSFER_INFO | DMA_OP, port_base + CMD_REG); + if (!curSC->use_sg) /* Don't use scatter-gather */ + SYM53C500_pio_write(fast_pio, port_base, curSC->request_buffer, curSC->request_bufflen); + else { /* use scatter-gather */ + sgcount = curSC->use_sg; + sglist = curSC->request_buffer; + while (sgcount--) { + SYM53C500_pio_write(fast_pio, port_base, page_address(sglist->page) + sglist->offset, sglist->length); + sglist++; + } + } + REG0(port_base); + } + break; + + case 0x01: /* DATA-IN */ + if (int_reg & 0x10) { /* Target requesting info transfer */ + curSC->SCp.phase = data_in; + VDEB(printk("SYM53C500: Data-In phase\n")); + outb(FLUSH_FIFO, port_base + CMD_REG); + LOAD_DMA_COUNT(port_base, curSC->request_bufflen); /* Max transfer size */ + outb(TRANSFER_INFO | DMA_OP, port_base + CMD_REG); + if (!curSC->use_sg) /* Don't use scatter-gather */ + SYM53C500_pio_read(fast_pio, port_base, curSC->request_buffer, curSC->request_bufflen); + else { /* Use scatter-gather */ + sgcount = curSC->use_sg; + sglist = curSC->request_buffer; + while (sgcount--) { + SYM53C500_pio_read(fast_pio, port_base, page_address(sglist->page) + sglist->offset, sglist->length); + sglist++; + } + } + REG0(port_base); + } + break; + + case 0x02: /* COMMAND */ + curSC->SCp.phase = command_ph; + printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n"); + break; + + case 0x03: /* STATUS */ + curSC->SCp.phase = status_ph; + VDEB(printk("SYM53C500: Status phase\n")); + outb(FLUSH_FIFO, port_base + CMD_REG); + outb(INIT_CMD_COMPLETE, port_base + CMD_REG); + break; + + case 0x04: /* Reserved */ + case 0x05: /* Reserved */ + printk("SYM53C500: WARNING: Reserved phase!!!\n"); + break; + + case 0x06: /* MESSAGE-OUT */ + DEB(printk("SYM53C500: Message-Out phase\n")); + curSC->SCp.phase = message_out; + outb(SET_ATN, port_base + CMD_REG); /* Reject the message */ + outb(MSG_ACCEPT, port_base + CMD_REG); + break; + + case 0x07: /* MESSAGE-IN */ + VDEB(printk("SYM53C500: Message-In phase\n")); + curSC->SCp.phase = message_in; + + curSC->SCp.Status = inb(port_base + SCSI_FIFO); + curSC->SCp.Message = inb(port_base + SCSI_FIFO); + + VDEB(printk("SCSI FIFO size=%d\n", inb(port_base + FIFO_FLAGS) & 0x1f)); + DEB(printk("Status = %02x Message = %02x\n", curSC->SCp.Status, curSC->SCp.Message)); + + if (curSC->SCp.Message == SAVE_POINTERS || curSC->SCp.Message == DISCONNECT) { + outb(SET_ATN, port_base + CMD_REG); /* Reject message */ + DEB(printk("Discarding SAVE_POINTERS message\n")); + } + outb(MSG_ACCEPT, port_base + CMD_REG); + break; + } +out: + spin_unlock_irqrestore(dev->host_lock, flags); + return IRQ_HANDLED; + +idle_out: + curSC->SCp.phase = idle; + curSC->scsi_done(curSC); + goto out; +} + +static void +SYM53C500_release(dev_link_t *link) +{ + struct scsi_info_t *info = link->priv; + struct Scsi_Host *shost = info->host; + + DEBUG(0, "SYM53C500_release(0x%p)\n", link); + + /* + * Do this before releasing/freeing resources. + */ + scsi_remove_host(shost); + + /* + * Interrupts getting hosed on card removal. Try + * the following code, mostly from qlogicfas.c. + */ + if (shost->irq) + free_irq(shost->irq, shost); + if (shost->dma_channel != 0xff) + free_dma(shost->dma_channel); + if (shost->io_port && shost->n_io_port) + release_region(shost->io_port, shost->n_io_port); + + link->dev = NULL; + + pcmcia_release_configuration(link->handle); + pcmcia_release_io(link->handle, &link->io); + pcmcia_release_irq(link->handle, &link->irq); + + link->state &= ~DEV_CONFIG; + + scsi_host_put(shost); +} /* SYM53C500_release */ + +static const char* +SYM53C500_info(struct Scsi_Host *SChost) +{ + static char info_msg[256]; + struct sym53c500_data *data = + (struct sym53c500_data *)SChost->hostdata; + + DEB(printk("SYM53C500_info called\n")); + (void)snprintf(info_msg, sizeof(info_msg), + "SYM53C500 at 0x%lx, IRQ %d, %s PIO mode.", + SChost->io_port, SChost->irq, data->fast_pio ? "fast" : "slow"); + return (info_msg); +} + +static int +SYM53C500_queue(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) +{ + int i; + int port_base = SCpnt->device->host->io_port; + struct sym53c500_data *data = + (struct sym53c500_data *)SCpnt->device->host->hostdata; + + VDEB(printk("SYM53C500_queue called\n")); + + DEB(printk("cmd=%02x, cmd_len=%02x, target=%02x, lun=%02x, bufflen=%d\n", + SCpnt->cmnd[0], SCpnt->cmd_len, SCpnt->device->id, + SCpnt->device->lun, SCpnt->request_bufflen)); + + VDEB(for (i = 0; i < SCpnt->cmd_len; i++) + printk("cmd[%d]=%02x ", i, SCpnt->cmnd[i])); + VDEB(printk("\n")); + + data->current_SC = SCpnt; + data->current_SC->scsi_done = done; + data->current_SC->SCp.phase = command_ph; + data->current_SC->SCp.Status = 0; + data->current_SC->SCp.Message = 0; + + /* We are locked here already by the mid layer */ + REG0(port_base); + outb(SCpnt->device->id, port_base + DEST_ID); /* set destination */ + outb(FLUSH_FIFO, port_base + CMD_REG); /* reset the fifos */ + + for (i = 0; i < SCpnt->cmd_len; i++) { + outb(SCpnt->cmnd[i], port_base + SCSI_FIFO); + } + outb(SELECT_NO_ATN, port_base + CMD_REG); + + return 0; +} + +static int +SYM53C500_host_reset(struct scsi_cmnd *SCpnt) +{ + int port_base = SCpnt->device->host->io_port; + + DEB(printk("SYM53C500_host_reset called\n")); + SYM53C500_int_host_reset(port_base); + + return SUCCESS; +} + +static int +SYM53C500_biosparm(struct scsi_device *disk, + struct block_device *dev, + sector_t capacity, int *info_array) +{ + int size; + + DEB(printk("SYM53C500_biosparm called\n")); + + size = capacity; + info_array[0] = 64; /* heads */ + info_array[1] = 32; /* sectors */ + info_array[2] = size >> 11; /* cylinders */ + if (info_array[2] > 1024) { /* big disk */ + info_array[0] = 255; + info_array[1] = 63; + info_array[2] = size / (255 * 63); + } + return 0; +} + +static ssize_t +SYM53C500_show_pio(struct class_device *cdev, char *buf) +{ + struct Scsi_Host *SHp = class_to_shost(cdev); + struct sym53c500_data *data = + (struct sym53c500_data *)SHp->hostdata; + + return snprintf(buf, 4, "%d\n", data->fast_pio); +} + +static ssize_t +SYM53C500_store_pio(struct class_device *cdev, const char *buf, size_t count) +{ + int pio; + struct Scsi_Host *SHp = class_to_shost(cdev); + struct sym53c500_data *data = + (struct sym53c500_data *)SHp->hostdata; + + pio = simple_strtoul(buf, NULL, 0); + if (pio == 0 || pio == 1) { + data->fast_pio = pio; + return count; + } + else + return -EINVAL; +} + +/* +* SCSI HBA device attributes we want to +* make available via sysfs. +*/ +static struct class_device_attribute SYM53C500_pio_attr = { + .attr = { + .name = "fast_pio", + .mode = (S_IRUGO | S_IWUSR), + }, + .show = SYM53C500_show_pio, + .store = SYM53C500_store_pio, +}; + +static struct class_device_attribute *SYM53C500_shost_attrs[] = { + &SYM53C500_pio_attr, + NULL, +}; + +/* +* scsi_host_template initializer +*/ +static struct scsi_host_template sym53c500_driver_template = { + .module = THIS_MODULE, + .name = "SYM53C500", + .info = SYM53C500_info, + .queuecommand = SYM53C500_queue, + .eh_host_reset_handler = SYM53C500_host_reset, + .bios_param = SYM53C500_biosparm, + .proc_name = "SYM53C500", + .can_queue = 1, + .this_id = 7, + .sg_tablesize = 32, + .cmd_per_lun = 1, + .use_clustering = ENABLE_CLUSTERING, + .shost_attrs = SYM53C500_shost_attrs +}; + +#define CS_CHECK(fn, ret) \ +do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) + +static void +SYM53C500_config(dev_link_t *link) +{ + client_handle_t handle = link->handle; + struct scsi_info_t *info = link->priv; + tuple_t tuple; + cisparse_t parse; + int i, last_ret, last_fn; + int irq_level, port_base; + unsigned short tuple_data[32]; + struct Scsi_Host *host; + struct scsi_host_template *tpnt = &sym53c500_driver_template; + struct sym53c500_data *data; + + DEBUG(0, "SYM53C500_config(0x%p)\n", link); + + tuple.TupleData = (cisdata_t *)tuple_data; + tuple.TupleDataMax = 64; + tuple.TupleOffset = 0; + tuple.DesiredTuple = CISTPL_CONFIG; + CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple)); + CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple)); + CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse)); + link->conf.ConfigBase = parse.config.base; + + tuple.DesiredTuple = CISTPL_MANFID; + if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) && + (pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS)) + info->manf_id = le16_to_cpu(tuple.TupleData[0]); + + /* Configure card */ + link->state |= DEV_CONFIG; + + tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; + CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple)); + while (1) { + if (pcmcia_get_tuple_data(handle, &tuple) != 0 || + pcmcia_parse_tuple(handle, &tuple, &parse) != 0) + goto next_entry; + link->conf.ConfigIndex = parse.cftable_entry.index; + link->io.BasePort1 = parse.cftable_entry.io.win[0].base; + link->io.NumPorts1 = parse.cftable_entry.io.win[0].len; + + if (link->io.BasePort1 != 0) { + i = pcmcia_request_io(handle, &link->io); + if (i == CS_SUCCESS) + break; + } +next_entry: + CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple)); + } + + CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq)); + CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf)); + + /* + * That's the trouble with copying liberally from another driver. + * Some things probably aren't relevant, and I suspect this entire + * section dealing with manufacturer IDs can be scrapped. --rct + */ + if ((info->manf_id == MANFID_MACNICA) || + (info->manf_id == MANFID_PIONEER) || + (info->manf_id == 0x0098)) { + /* set ATAcmd */ + outb(0xb4, link->io.BasePort1 + 0xd); + outb(0x24, link->io.BasePort1 + 0x9); + outb(0x04, link->io.BasePort1 + 0xd); + } + + /* + * irq_level == 0 implies tpnt->can_queue == 0, which + * is not supported in 2.6. Thus, only irq_level > 0 + * will be allowed. + * + * Possible port_base values are as follows: + * + * 0x130, 0x230, 0x280, 0x290, + * 0x320, 0x330, 0x340, 0x350 + */ + port_base = link->io.BasePort1; + irq_level = link->irq.AssignedIRQ; + + DEB(printk("SYM53C500: port_base=0x%x, irq=%d, fast_pio=%d\n", + port_base, irq_level, USE_FAST_PIO);) + + chip_init(port_base); + + host = scsi_host_alloc(tpnt, sizeof(struct sym53c500_data)); + if (!host) { + printk("SYM53C500: Unable to register host, giving up.\n"); + goto err_release; + } + + data = (struct sym53c500_data *)host->hostdata; + + if (irq_level > 0) { + if (request_irq(irq_level, SYM53C500_intr, 0, "SYM53C500", host)) { + printk("SYM53C500: unable to allocate IRQ %d\n", irq_level); + goto err_free_scsi; + } + DEB(printk("SYM53C500: allocated IRQ %d\n", irq_level)); + } else if (irq_level == 0) { + DEB(printk("SYM53C500: No interrupts detected\n")); + goto err_free_scsi; + } else { + DEB(printk("SYM53C500: Shouldn't get here!\n")); + goto err_free_scsi; + } + + host->unique_id = port_base; + host->irq = irq_level; + host->io_port = port_base; + host->n_io_port = 0x10; + host->dma_channel = -1; + + /* + * Note fast_pio is set to USE_FAST_PIO by + * default, but can be changed via "sysfs". + */ + data->fast_pio = USE_FAST_PIO; + + sprintf(info->node.dev_name, "scsi%d", host->host_no); + link->dev = &info->node; + info->host = host; + + if (scsi_add_host(host, NULL)) + goto err_free_irq; + + scsi_scan_host(host); + + goto out; /* SUCCESS */ + +err_free_irq: + free_irq(irq_level, host); +err_free_scsi: + scsi_host_put(host); +err_release: + release_region(port_base, 0x10); + printk(KERN_INFO "sym53c500_cs: no SCSI devices found\n"); + +out: + link->state &= ~DEV_CONFIG_PENDING; + return; + +cs_failed: + cs_error(link->handle, last_fn, last_ret); + SYM53C500_release(link); + return; +} /* SYM53C500_config */ + +static int +SYM53C500_event(event_t event, int priority, event_callback_args_t *args) +{ + dev_link_t *link = args->client_data; + struct scsi_info_t *info = link->priv; + + DEBUG(1, "SYM53C500_event(0x%06x)\n", event); + + switch (event) { + case CS_EVENT_CARD_REMOVAL: + link->state &= ~DEV_PRESENT; + if (link->state & DEV_CONFIG) + SYM53C500_release(link); + break; + case CS_EVENT_CARD_INSERTION: + link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; + SYM53C500_config(link); + break; + case CS_EVENT_PM_SUSPEND: + link->state |= DEV_SUSPEND; + /* Fall through... */ + case CS_EVENT_RESET_PHYSICAL: + if (link->state & DEV_CONFIG) + pcmcia_release_configuration(link->handle); + break; + case CS_EVENT_PM_RESUME: + link->state &= ~DEV_SUSPEND; + /* Fall through... */ + case CS_EVENT_CARD_RESET: + if (link->state & DEV_CONFIG) { + pcmcia_request_configuration(link->handle, &link->conf); + /* See earlier comment about manufacturer IDs. */ + if ((info->manf_id == MANFID_MACNICA) || + (info->manf_id == MANFID_PIONEER) || + (info->manf_id == 0x0098)) { + outb(0x80, link->io.BasePort1 + 0xd); + outb(0x24, link->io.BasePort1 + 0x9); + outb(0x04, link->io.BasePort1 + 0xd); + } + /* + * If things don't work after a "resume", + * this is a good place to start looking. + */ + SYM53C500_int_host_reset(link->io.BasePort1); + } + break; + } + return 0; +} /* SYM53C500_event */ + +static void +SYM53C500_detach(dev_link_t *link) +{ + dev_link_t **linkp; + + DEBUG(0, "SYM53C500_detach(0x%p)\n", link); + + /* Locate device structure */ + for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) + if (*linkp == link) + break; + if (*linkp == NULL) + return; + + if (link->state & DEV_CONFIG) + SYM53C500_release(link); + + if (link->handle) + pcmcia_deregister_client(link->handle); + + /* Unlink device structure, free bits. */ + *linkp = link->next; + kfree(link->priv); + link->priv = NULL; +} /* SYM53C500_detach */ + +static dev_link_t * +SYM53C500_attach(void) +{ + struct scsi_info_t *info; + client_reg_t client_reg; + dev_link_t *link; + int i, ret; + + DEBUG(0, "SYM53C500_attach()\n"); + + /* Create new SCSI device */ + info = kmalloc(sizeof(*info), GFP_KERNEL); + if (!info) + return NULL; + memset(info, 0, sizeof(*info)); + link = &info->link; + link->priv = info; + link->io.NumPorts1 = 16; + link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; + link->io.IOAddrLines = 10; + link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; + link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; + if (irq_list[0] == -1) + link->irq.IRQInfo2 = irq_mask; + else + for (i = 0; i < 4; i++) + link->irq.IRQInfo2 |= 1 << irq_list[i]; + link->conf.Attributes = CONF_ENABLE_IRQ; + link->conf.Vcc = 50; + link->conf.IntType = INT_MEMORY_AND_IO; + link->conf.Present = PRESENT_OPTION; + + /* Register with Card Services */ + link->next = dev_list; + dev_list = link; + client_reg.dev_info = &dev_info; + client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE; + client_reg.event_handler = &SYM53C500_event; + client_reg.EventMask = CS_EVENT_RESET_REQUEST | CS_EVENT_CARD_RESET | + CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL | + CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME; + client_reg.Version = 0x0210; + client_reg.event_callback_args.client_data = link; + ret = pcmcia_register_client(&link->handle, &client_reg); + if (ret != 0) { + cs_error(link->handle, RegisterClient, ret); + SYM53C500_detach(link); + return NULL; + } + + return link; +} /* SYM53C500_attach */ + +MODULE_AUTHOR("Bob Tracy "); +MODULE_DESCRIPTION("SYM53C500 PCMCIA SCSI driver"); +MODULE_LICENSE("GPL"); + +static struct pcmcia_driver sym53c500_cs_driver = { + .owner = THIS_MODULE, + .drv = { + .name = "sym53c500_cs", + }, + .attach = SYM53C500_attach, + .detach = SYM53C500_detach, +}; + +static int __init +init_sym53c500_cs(void) +{ + return pcmcia_register_driver(&sym53c500_cs_driver); +} + +static void __exit +exit_sym53c500_cs(void) +{ + pcmcia_unregister_driver(&sym53c500_cs_driver); +} + +module_init(init_sym53c500_cs); +module_exit(exit_sym53c500_cs); diff -Nru a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c --- a/drivers/scsi/ppa.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/ppa.c Tue May 18 23:38:08 2004 @@ -15,18 +15,23 @@ #include #include #include -#include #include #include -#include "scsi.h" -#include "hosts.h" +#include + +#include +#include +#include +#include + + static void ppa_reset_pulse(unsigned int base); typedef struct { struct pardevice *dev; /* Parport device entry */ int base; /* Actual port address */ int mode; /* Transfer mode */ - Scsi_Cmnd *cur_cmd; /* Current queued command */ + struct scsi_cmnd *cur_cmd; /* Current queued command */ struct work_struct ppa_tq; /* Polling interrupt stuff */ unsigned long jstart; /* Jiffies at start */ unsigned long recon_tmo; /* How many usecs to wait for reconnection (6th bit) */ @@ -501,7 +506,7 @@ return device_check(dev); } -static inline int ppa_send_command(Scsi_Cmnd *cmd) +static inline int ppa_send_command(struct scsi_cmnd *cmd) { ppa_struct *dev = ppa_dev(cmd->device->host); int k; @@ -522,7 +527,7 @@ * The driver appears to remain stable if we speed up the parallel port * i/o in this function, but not elsewhere. */ -static int ppa_completion(Scsi_Cmnd *cmd) +static int ppa_completion(struct scsi_cmnd *cmd) { /* Return codes: * -1 Error @@ -626,7 +631,7 @@ static void ppa_interrupt(void *data) { ppa_struct *dev = (ppa_struct *) data; - Scsi_Cmnd *cmd = dev->cur_cmd; + struct scsi_cmnd *cmd = dev->cur_cmd; if (!cmd) { printk("PPA: bug in ppa_interrupt\n"); @@ -682,7 +687,7 @@ cmd->scsi_done(cmd); } -static int ppa_engine(ppa_struct *dev, Scsi_Cmnd *cmd) +static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd) { unsigned short ppb = dev->base; unsigned char l = 0, h = 0; @@ -802,7 +807,8 @@ return 0; } -static int ppa_queuecommand(Scsi_Cmnd *cmd, void (*done) (Scsi_Cmnd *)) +static int ppa_queuecommand(struct scsi_cmnd *cmd, + void (*done) (struct scsi_cmnd *)) { ppa_struct *dev = ppa_dev(cmd->device->host); @@ -847,7 +853,7 @@ return 0; } -static int ppa_abort(Scsi_Cmnd *cmd) +static int ppa_abort(struct scsi_cmnd *cmd) { ppa_struct *dev = ppa_dev(cmd->device->host); /* @@ -875,7 +881,7 @@ w_ctr(base, 0xc); } -static int ppa_reset(Scsi_Cmnd *cmd) +static int ppa_reset(struct scsi_cmnd *cmd) { ppa_struct *dev = ppa_dev(cmd->device->host); @@ -974,7 +980,7 @@ return -ENODEV; } -static Scsi_Host_Template ppa_template = { +static struct scsi_host_template ppa_template = { .module = THIS_MODULE, .proc_name = "ppa", .proc_info = ppa_proc_info, diff -Nru a/drivers/scsi/ppa.h b/drivers/scsi/ppa.h --- a/drivers/scsi/ppa.h Tue May 18 23:38:08 2004 +++ b/drivers/scsi/ppa.h Tue May 18 23:38:08 2004 @@ -146,6 +146,6 @@ #define w_ctr(x,y) outb(y, (x)+2) #endif -static int ppa_engine(ppa_struct *, Scsi_Cmnd *); +static int ppa_engine(ppa_struct *, struct scsi_cmnd *); #endif /* _PPA_H */ diff -Nru a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c --- a/drivers/scsi/qla1280.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla1280.c Tue May 18 23:38:09 2004 @@ -3371,6 +3371,7 @@ sp->flags |= SRB_SENT; ha->actthreads++; WRT_REG_WORD(®->mailbox4, ha->req_ring_index); + (void) RD_REG_WORD(®->mailbox4); /* PCI posted write flush */ out: if (status) @@ -3639,6 +3640,7 @@ sp->flags |= SRB_SENT; ha->actthreads++; WRT_REG_WORD(®->mailbox4, ha->req_ring_index); + (void) RD_REG_WORD(®->mailbox4); /* PCI posted write flush */ out: if (status) @@ -3750,6 +3752,7 @@ /* Set chip new ring index. */ WRT_REG_WORD(®->mailbox4, ha->req_ring_index); + (void) RD_REG_WORD(®->mailbox4); /* PCI posted write flush */ LEAVE("qla1280_isp_cmd"); } @@ -3788,7 +3791,7 @@ /* Check for mailbox interrupt. */ - mailbox[0] = RD_REG_WORD(®->semaphore); + mailbox[0] = RD_REG_WORD_dmasync(®->semaphore); if (mailbox[0] & BIT_0) { /* Get mailbox data. */ diff -Nru a/drivers/scsi/qla1280.h b/drivers/scsi/qla1280.h --- a/drivers/scsi/qla1280.h Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla1280.h Tue May 18 23:38:09 2004 @@ -57,7 +57,8 @@ #define BIT_31 0x80000000 #if MEMORY_MAPPED_IO -#define RD_REG_WORD(addr) readw(addr) +#define RD_REG_WORD(addr) readw_relaxed(addr) +#define RD_REG_WORD_dmasync(addr) readw(addr) #define WRT_REG_WORD(addr, data) writew(data, addr) #else /* MEMORY_MAPPED_IO */ #define RD_REG_WORD(addr) inw((unsigned long)addr) diff -Nru a/drivers/scsi/qla2xxx/ql2300_fw.c b/drivers/scsi/qla2xxx/ql2300_fw.c --- a/drivers/scsi/qla2xxx/ql2300_fw.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/qla2xxx/ql2300_fw.c Tue May 18 23:38:07 2004 @@ -18,7 +18,7 @@ *************************************************************************/ /* - * Firmware Version 3.02.26 (08:42 Mar 11, 2004) + * Firmware Version 3.02.28 (13:56 Apr 03, 2004) */ #ifdef UNIQUE_FW_NAME @@ -28,15 +28,15 @@ #endif #ifdef UNIQUE_FW_NAME -unsigned char fw2300ipx_version_str[] = {3, 2,26}; +unsigned char fw2300ipx_version_str[] = {3, 2,28}; #else -unsigned char firmware_version[] = {3, 2,26}; +unsigned char firmware_version[] = {3, 2,28}; #endif #ifdef UNIQUE_FW_NAME -#define fw2300ipx_VERSION_STRING "3.02.26" +#define fw2300ipx_VERSION_STRING "3.02.28" #else -#define FW_VERSION_STRING "3.02.26" +#define FW_VERSION_STRING "3.02.28" #endif #ifdef UNIQUE_FW_NAME @@ -50,12 +50,12 @@ #else unsigned short risc_code01[] = { #endif - 0x0470, 0x0000, 0x0000, 0xe9a6, 0x0000, 0x0003, 0x0002, 0x001a, + 0x0470, 0x0000, 0x0000, 0xe9c7, 0x0000, 0x0003, 0x0002, 0x001c, 0x0137, 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, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9, + 0x332e, 0x3032, 0x2e32, 0x3820, 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, @@ -78,98 +78,98 @@ 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f17, 0x080c, - 0x6029, 0x080c, 0xaddd, 0x080c, 0x10ce, 0x080c, 0x12ed, 0x080c, - 0x1ba4, 0x080c, 0x0d69, 0x080c, 0x1053, 0x080c, 0x341e, 0x080c, - 0x76ac, 0x080c, 0x698e, 0x080c, 0x86cd, 0x080c, 0x8401, 0x080c, - 0x2478, 0x080c, 0x8f6f, 0x080c, 0x7d76, 0x080c, 0x22b1, 0x080c, + 0x6028, 0x080c, 0xadf7, 0x080c, 0x10ce, 0x080c, 0x12ed, 0x080c, + 0x1ba4, 0x080c, 0x0d69, 0x080c, 0x1053, 0x080c, 0x3425, 0x080c, + 0x76b8, 0x080c, 0x6996, 0x080c, 0x86f6, 0x080c, 0x842a, 0x080c, + 0x2478, 0x080c, 0x8f98, 0x080c, 0x7d82, 0x080c, 0x22b1, 0x080c, 0x23e5, 0x080c, 0x246d, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, - 0x1178, 0x080c, 0x4bca, 0x080c, 0x3445, 0x080c, 0x771d, 0x080c, - 0x6ecf, 0x080c, 0x87ab, 0x080c, 0x842a, 0x080c, 0x2c93, 0x0c58, + 0x1178, 0x080c, 0x4bc9, 0x080c, 0x344c, 0x080c, 0x7729, 0x080c, + 0x6ed7, 0x080c, 0x87d4, 0x080c, 0x8453, 0x080c, 0x2c93, 0x0c58, 0x000b, 0x0c78, 0x0944, 0x0945, 0x0ae7, 0x0942, 0x0bae, 0x0d68, 0x0d68, 0x0d68, 0x080c, 0x0dd5, 0x0005, 0x0126, 0x00f6, 0x2091, - 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x56df, + 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x56de, 0x1130, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x080c, - 0x73b0, 0x0150, 0x080c, 0x73d3, 0x15a0, 0x2079, 0x0100, 0x7828, - 0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x72e2, 0x7000, 0x9086, + 0x73bc, 0x0150, 0x080c, 0x73df, 0x15a0, 0x2079, 0x0100, 0x7828, + 0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x72ee, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x7098, 0x9086, 0x0028, 0x1904, 0x0aba, - 0x080c, 0x83f9, 0x080c, 0x83eb, 0x2001, 0x0161, 0x2003, 0x0001, + 0x080c, 0x8422, 0x080c, 0x8414, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, - 0x2011, 0x7246, 0x080c, 0x84ca, 0x2011, 0x7239, 0x080c, 0x85a4, - 0x2011, 0x5e84, 0x080c, 0x84ca, 0x2011, 0x8030, 0x901e, 0x7396, - 0x04d0, 0x080c, 0x5731, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, - 0x0aba, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x2011, 0x7246, 0x080c, - 0x84ca, 0x2011, 0x7239, 0x080c, 0x85a4, 0x2001, 0x0265, 0x2001, + 0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, + 0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x8030, 0x901e, 0x7396, + 0x04d0, 0x080c, 0x5730, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, + 0x0aba, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x7252, 0x080c, + 0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x19a6, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, - 0x5fd1, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c, - 0x73b8, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, + 0x5fd0, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c, + 0x73c4, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011, 0x8010, 0x73d8, 0x2001, 0x19a7, 0x2003, 0x0001, 0x080c, - 0x2b59, 0x080c, 0x4b05, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c, - 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa503, 0x2011, 0x0004, - 0x080c, 0xcb2b, 0x080c, 0x6823, 0x080c, 0x73b0, 0x1120, 0x080c, - 0x2b9d, 0x02e0, 0x0400, 0x080c, 0x5fd8, 0x0140, 0x7097, 0x0001, - 0x70d3, 0x0000, 0x080c, 0x58fe, 0x0804, 0x0aba, 0x080c, 0x56d0, + 0x2b59, 0x080c, 0x4b04, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c, + 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa51d, 0x2011, 0x0004, + 0x080c, 0xcb45, 0x080c, 0x6822, 0x080c, 0x73bc, 0x1120, 0x080c, + 0x2b9d, 0x02e0, 0x0400, 0x080c, 0x5fd7, 0x0140, 0x7097, 0x0001, + 0x70d3, 0x0000, 0x080c, 0x58fd, 0x0804, 0x0aba, 0x080c, 0x56cf, 0xd094, 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, - 0x56d4, 0xd0d4, 0x1118, 0x080c, 0x2b9d, 0x1270, 0x2011, 0x180c, - 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d4, 0xd0d4, 0x1db8, 0x2011, + 0x56d3, 0xd0d4, 0x1118, 0x080c, 0x2b9d, 0x1270, 0x2011, 0x180c, + 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d3, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, - 0x2012, 0x080c, 0x6962, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, - 0x2012, 0x080c, 0x6928, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, - 0x707f, 0x0000, 0x080c, 0x73b0, 0x1130, 0x70b0, 0x9005, 0x1168, - 0x080c, 0xcf67, 0x0050, 0x080c, 0xcf67, 0x70dc, 0xd09c, 0x1128, - 0x70b0, 0x9005, 0x0110, 0x080c, 0x5fae, 0x70e7, 0x0000, 0x70e3, + 0x2012, 0x080c, 0x696a, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, + 0x2012, 0x080c, 0x6930, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, + 0x707f, 0x0000, 0x080c, 0x73bc, 0x1130, 0x70b0, 0x9005, 0x1168, + 0x080c, 0xcf81, 0x0050, 0x080c, 0xcf81, 0x70dc, 0xd09c, 0x1128, + 0x70b0, 0x9005, 0x0110, 0x080c, 0x5fad, 0x70e7, 0x0000, 0x70e3, 0x0000, 0x70a7, 0x0000, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, - 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x73b0, 0x1178, 0x9016, + 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x73bc, 0x1178, 0x9016, 0x0016, 0x080c, 0x2956, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f, 0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d, 0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295, - 0x72de, 0x080c, 0x73b0, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, - 0x0001, 0x080c, 0xcb2b, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, + 0x72de, 0x080c, 0x73bc, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, + 0x0001, 0x080c, 0xcb45, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, - 0x782a, 0x00fe, 0x080c, 0x2f96, 0x2011, 0x0005, 0x080c, 0xa639, - 0x080c, 0x9664, 0x080c, 0x73b0, 0x0148, 0x00c6, 0x2061, 0x0100, + 0x782a, 0x00fe, 0x080c, 0x2f96, 0x2011, 0x0005, 0x080c, 0xa653, + 0x080c, 0x968d, 0x080c, 0x73bc, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2956, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, - 0x2011, 0x0005, 0x080c, 0xa639, 0x080c, 0x9664, 0x080c, 0x73b0, + 0x2011, 0x0005, 0x080c, 0xa653, 0x080c, 0x968d, 0x080c, 0x73bc, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2956, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, - 0x73b0, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, - 0x73b0, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, + 0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, + 0x73bc, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, - 0x32b4, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084, + 0x32bb, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084, 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bab, - 0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2f96, 0x080c, 0x9664, + 0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2f96, 0x080c, 0x968d, 0x0804, 0x0bab, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, - 0x0508, 0x080c, 0x3317, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0, - 0x080c, 0x3128, 0x080c, 0x9664, 0x70dc, 0xd094, 0x1904, 0x0bab, - 0x2011, 0x0001, 0x080c, 0xd216, 0x0110, 0x2011, 0x0003, 0x901e, - 0x080c, 0x3162, 0x080c, 0x9664, 0x0804, 0x0bab, 0x70e4, 0x9005, + 0x0508, 0x080c, 0x331e, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0, + 0x080c, 0x312b, 0x080c, 0x968d, 0x70dc, 0xd094, 0x1904, 0x0bab, + 0x2011, 0x0001, 0x080c, 0xd230, 0x0110, 0x2011, 0x0003, 0x901e, + 0x080c, 0x3165, 0x080c, 0x968d, 0x0804, 0x0bab, 0x70e4, 0x9005, 0x1904, 0x0bab, 0x70a8, 0x9005, 0x1904, 0x0bab, 0x70dc, 0xd0a4, - 0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x6928, 0x1904, 0x0bab, - 0x080c, 0x697b, 0x1904, 0x0bab, 0x080c, 0x6962, 0x01c0, 0x0156, - 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6600, 0x1118, + 0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x6930, 0x1904, 0x0bab, + 0x080c, 0x6983, 0x1904, 0x0bab, 0x080c, 0x696a, 0x01c0, 0x0156, + 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b44, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bab, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b3, 0x080c, 0x0f87, 0x2011, 0x19cd, 0x080c, 0x0f87, 0x7030, 0xc08c, 0x7032, - 0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x56df, 0x1130, 0x0026, + 0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x56de, 0x1130, 0x0026, 0x2011, 0x0040, 0x080c, 0x0edf, 0x002e, 0x9006, 0x080c, 0x27ea, - 0x080c, 0x3317, 0x0118, 0x080c, 0x4ca2, 0x0050, 0x0036, 0x0046, - 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e, - 0x00f6, 0x2079, 0x0100, 0x080c, 0x73d3, 0x0150, 0x080c, 0x73b0, + 0x080c, 0x331e, 0x0118, 0x080c, 0x4ca1, 0x0050, 0x0036, 0x0046, + 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e, + 0x00f6, 0x2079, 0x0100, 0x080c, 0x73df, 0x0150, 0x080c, 0x73bc, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, - 0x0000, 0x080c, 0xa639, 0x2011, 0x0000, 0x080c, 0xa643, 0x080c, - 0x9664, 0x080c, 0x9790, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, + 0x0000, 0x080c, 0xa653, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c, + 0x968d, 0x080c, 0x97b9, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, - 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f97, 0x7940, 0x918c, + 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x0c3b, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c, @@ -177,13 +177,13 @@ 0x080c, 0x2b6b, 0x00b8, 0x080c, 0x2c28, 0x1138, 0x9006, 0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0068, 0x080c, 0x2c30, 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2982, - 0x0804, 0x0d1a, 0x080c, 0x73c1, 0x0148, 0x080c, 0x73d3, 0x1118, - 0x080c, 0x76a7, 0x0050, 0x080c, 0x73b8, 0x0dd0, 0x080c, 0x76a2, - 0x080c, 0x7698, 0x080c, 0x72e2, 0x0058, 0x080c, 0x73b0, 0x0140, - 0x2009, 0x00f8, 0x080c, 0x5f97, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x73b0, 0x0138, + 0x0804, 0x0d1a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118, + 0x080c, 0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae, + 0x080c, 0x76a4, 0x080c, 0x72ee, 0x0058, 0x080c, 0x73bc, 0x0140, + 0x2009, 0x00f8, 0x080c, 0x5f96, 0x7843, 0x0090, 0x7843, 0x0010, + 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x73bc, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0d1f, 0x1f04, 0x0c1a, 0x0070, 0x7824, - 0x080c, 0x73ca, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800, + 0x080c, 0x73d6, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d1f, 0x2001, 0x0001, 0x080c, 0x27ea, 0x0804, 0x0d32, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c, 0x2c20, 0x1148, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, @@ -192,47 +192,47 @@ 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2982, 0x0804, 0x0d1a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2c38, 0x9085, 0x2000, - 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x8584, + 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x85ad, 0x1f04, 0x0c74, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, - 0x793a, 0x080c, 0x73c1, 0x0148, 0x080c, 0x73d3, 0x1118, 0x080c, - 0x76a7, 0x0050, 0x080c, 0x73b8, 0x0dd0, 0x080c, 0x76a2, 0x080c, - 0x7698, 0x080c, 0x72e2, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f97, + 0x793a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118, 0x080c, + 0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae, 0x080c, + 0x76a4, 0x080c, 0x72ee, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f96, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c9a, 0x7850, 0x9085, 0x1400, - 0x7852, 0x080c, 0x73b0, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, - 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8584, 0x7820, 0xd09c, - 0x1580, 0x080c, 0x73b0, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904, - 0x0d1f, 0x080c, 0x73d3, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421, + 0x7852, 0x080c, 0x73bc, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, + 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85ad, 0x7820, 0xd09c, + 0x1580, 0x080c, 0x73bc, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904, + 0x0d1f, 0x080c, 0x73df, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x9084, 0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004, 0xd0fc, 0x0110, 0x080c, 0x0d45, 0x8421, 0x1158, 0x1d04, 0x0cda, - 0x080c, 0x8584, 0x080c, 0x76a2, 0x080c, 0x7698, 0x7003, 0x0001, - 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x8584, 0x2009, + 0x080c, 0x85ad, 0x080c, 0x76ae, 0x080c, 0x76a4, 0x7003, 0x0001, + 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x85ad, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2c19, 0x7924, 0x080c, 0x2c38, 0xd19c, 0x0110, 0x080c, 0x2b59, 0x00d8, 0x080c, - 0x73c1, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7388, 0x7003, + 0x73cd, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7394, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x080c, - 0x73ca, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, + 0x73d6, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x27ea, 0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2, - 0x015e, 0x003e, 0x000e, 0x080c, 0x56df, 0x1110, 0x080c, 0x0e62, + 0x015e, 0x003e, 0x000e, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e62, 0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, - 0x0d0c, 0x8584, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x0d0c, 0x85ad, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, - 0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x3445, 0x00ee, 0x0005, + 0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x344c, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, - 0x600b, 0x001a, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, + 0x600b, 0x001c, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008, 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, - 0xcf67, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, + 0xcf81, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f, 0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, - 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6600, + 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x65ff, 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, @@ -251,7 +251,7 @@ 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a19, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, - 0x2003, 0x1001, 0x080c, 0x56df, 0x1110, 0x080c, 0x0e99, 0x0cd0, + 0x2003, 0x1001, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e99, 0x0cd0, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1827, 0x2f04, 0x8000, @@ -315,7 +315,7 @@ 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, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, + 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, @@ -380,15 +380,15 @@ 0x080c, 0x1108, 0x0005, 0x00de, 0x009e, 0x080c, 0x1108, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0dd5, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000, - 0xa897, 0x4002, 0x080c, 0x6c6d, 0xa09f, 0x0000, 0xa0a3, 0x0000, + 0xa897, 0x4002, 0x080c, 0x6c75, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x1031, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0dd5, 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, 0x10e9, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c, - 0x6c6d, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6, - 0x2060, 0x080c, 0xae47, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, + 0x6c75, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6, + 0x2060, 0x080c, 0xae61, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x1031, 0x7007, 0x0000, 0x080c, 0x1108, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x0096, 0x2001, @@ -397,12 +397,12 @@ 0x8000, 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x2900, 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x0096, 0x2001, 0x192e, 0x204c, 0xaa7c, - 0x009e, 0x080c, 0x89e3, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc, - 0x200a, 0x080c, 0x8856, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005, + 0x009e, 0x080c, 0x8a0c, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc, + 0x200a, 0x080c, 0x887f, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a62, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, - 0x03d0, 0x2061, 0xe9f7, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, + 0x03d0, 0x2061, 0xea18, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x1303, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0120, 0x7820, 0x080c, 0x1362, 0x0cc8, 0x2001, 0x1a63, 0x2003, @@ -411,13 +411,13 @@ 0x782b, 0x1a82, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a82, 0x602f, 0x1cd0, 0x2001, 0x181a, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, - 0x2090, 0x604f, 0x193c, 0x2001, 0x331e, 0xd0fc, 0x190c, 0x0dd5, - 0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x331e, 0x0020, - 0x9084, 0xc000, 0x783f, 0xb31e, 0x2001, 0x1927, 0x2004, 0x6042, + 0x2090, 0x2001, 0x3325, 0xd0fc, 0x190c, 0x0dd5, 0x2001, 0x0003, + 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3325, 0x0020, 0x9084, 0xc000, + 0x783f, 0xb325, 0x604f, 0x193c, 0x2001, 0x1927, 0x2004, 0x6042, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, 0x7808, 0xd09c, 0x01b8, - 0x7820, 0x0026, 0x2010, 0x080c, 0xcb09, 0x0180, 0x2260, 0x6000, + 0x7820, 0x0026, 0x2010, 0x080c, 0xcb23, 0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016, 0x6120, 0x9186, 0x0009, 0x0108, - 0x0020, 0x2009, 0x004c, 0x080c, 0xaec2, 0x001e, 0x002e, 0x0005, + 0x0020, 0x2009, 0x004c, 0x080c, 0xaedc, 0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070, 0x190c, 0x0dce, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0dd5, 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x13bb, @@ -426,18 +426,18 @@ 0x155b, 0x1566, 0x156d, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13e2, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bf, 0x13bd, 0x080c, 0x0dd5, 0x080c, 0x0dce, 0x080c, - 0x1578, 0x2009, 0x1a7b, 0x2104, 0x8000, 0x200a, 0x080c, 0x7e4a, - 0x080c, 0x1aa9, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xaec2, + 0x1578, 0x2009, 0x1a7b, 0x2104, 0x8000, 0x200a, 0x080c, 0x7e56, + 0x080c, 0x1aa9, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xaedc, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1578, 0x080c, 0x16bb, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x1578, 0x2060, 0x6014, 0x0096, 0x2048, - 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xaec2, 0x2001, + 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xaedc, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x157d, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1578, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, - 0xaec2, 0x0005, 0x080c, 0x1578, 0x080c, 0x0dd5, 0x080c, 0x1578, + 0xaedc, 0x0005, 0x080c, 0x1578, 0x080c, 0x0dd5, 0x080c, 0x1578, 0x080c, 0x14d4, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0904, 0x1487, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x148d, 0x7004, @@ -452,14 +452,14 @@ 0x0810, 0x7004, 0xc09d, 0x7006, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x14ed, 0x2001, 0x020d, 0x2003, 0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dd5, 0x6014, 0x2048, 0x78ab, - 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7e4a, 0x080c, 0x1aa9, - 0x080c, 0xcb1b, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, + 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7e56, 0x080c, 0x1aa9, + 0x080c, 0xcb35, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6020, - 0x9086, 0x0009, 0x1128, 0x2009, 0x004c, 0x080c, 0xaec2, 0x0048, + 0x9086, 0x0009, 0x1128, 0x2009, 0x004c, 0x080c, 0xaedc, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, - 0xcf00, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, - 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe9a0, 0xd5a4, 0x1118, 0x080c, - 0x157d, 0x0005, 0x080c, 0x7e4a, 0x080c, 0x1aa9, 0x0005, 0x781f, + 0xcf1a, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, + 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe9c1, 0xd5a4, 0x1118, 0x080c, + 0x157d, 0x0005, 0x080c, 0x7e56, 0x080c, 0x1aa9, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x15ee, 0x00fe, 0x007e, 0x006e, 0x001e, @@ -476,10 +476,10 @@ 0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, 0x157d, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x1313, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, - 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, 0x0053, 0x080c, 0xaec2, + 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, 0x0053, 0x080c, 0xaedc, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, 0x00d1, 0x0006, 0x7004, - 0xc09d, 0x7006, 0x000e, 0x080c, 0x8d40, 0x0005, 0x0089, 0x9005, - 0x0118, 0x080c, 0x8943, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009, + 0xc09d, 0x7006, 0x000e, 0x080c, 0x8d69, 0x0005, 0x0089, 0x9005, + 0x0118, 0x080c, 0x896c, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214, 0x080c, 0x15ee, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14d4, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005, @@ -488,7 +488,7 @@ 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x15e0, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005, - 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7e4a, 0x080c, + 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7e56, 0x080c, 0x1aa9, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, @@ -505,7 +505,7 @@ 0x0048, 0x9086, 0x0008, 0x1904, 0x1667, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a7d, - 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9079, 0x001e, 0x002e, + 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x90a2, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a7e, @@ -515,7 +515,7 @@ 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a66, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009, 0x1a7c, 0x2104, - 0x8000, 0x0208, 0x200a, 0x080c, 0xa2dd, 0x2009, 0x180c, 0x2104, + 0x8000, 0x0208, 0x200a, 0x080c, 0xa2f7, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1617, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1610, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0dd5, @@ -526,8 +526,8 @@ 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x171a, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x171a, 0x9c06, 0x15f0, 0x0126, 0x2091, 0x2600, 0x080c, - 0x7d91, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, - 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xcedb, + 0x7d9d, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xcef5, 0xab42, 0xac3e, 0x2001, 0x1869, 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x20b0, 0x1190, @@ -543,7 +543,7 @@ 0x9085, 0x0001, 0x0804, 0x18a1, 0xa87c, 0xd0ac, 0x0dc8, 0x0804, 0x17c5, 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x1830, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2, 0xaa3e, 0xaa42, 0x3e00, 0x9080, - 0x0008, 0x2004, 0x9080, 0x8f07, 0x2005, 0x9005, 0x090c, 0x0dd5, + 0x0008, 0x2004, 0x9080, 0x8f30, 0x2005, 0x9005, 0x090c, 0x0dd5, 0x2004, 0xa8ae, 0x0804, 0x1889, 0xa87c, 0xd0bc, 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x17c5, 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x1830, @@ -637,7 +637,7 @@ 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, 0xaec2, 0x0005, 0x0126, 0x00c6, + 0x601e, 0x2009, 0x0048, 0x0804, 0xaedc, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, @@ -648,17 +648,17 @@ 0x1d40, 0x080c, 0x1b45, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x1b32, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, - 0x00fe, 0x080c, 0x73b0, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, + 0x00fe, 0x080c, 0x73bc, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, - 0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7460, + 0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x746c, 0x006e, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2c44, 0x2009, 0x003c, 0x080c, 0x23d2, 0x2001, 0x015d, 0x2003, 0x0000, - 0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x83eb, 0x70a0, 0x70a2, + 0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x8414, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x1313, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, - 0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x73b0, 0x1108, 0x0005, + 0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x73bc, 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, @@ -770,13 +770,13 @@ 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dd5, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000, 0x7004, 0x0016, 0x080c, 0x1cbe, 0x001e, 0x2060, - 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0118, 0xa880, 0xc0bd, 0xa882, + 0x6014, 0x2048, 0x080c, 0xcb35, 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, 0xc74e, 0x00ce, + 0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xc768, 0x00ce, 0x2001, 0x19f6, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, - 0x23d2, 0x080c, 0xa7b2, 0x2011, 0x0000, 0x080c, 0xa643, 0x080c, - 0x9790, 0x002e, 0x0804, 0x1ff8, 0x0126, 0x2091, 0x2400, 0xa858, + 0x23d2, 0x080c, 0xa7cc, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c, + 0x97b9, 0x002e, 0x0804, 0x1ff8, 0x0126, 0x2091, 0x2400, 0xa858, 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1e71, 0x7000, 0x0002, 0x1ff8, 0x1ec6, 0x1f46, 0x1ff6, 0x8001, 0x7002, 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1f13, 0x080c, @@ -820,7 +820,7 @@ 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086, 0x0000, 0x0904, 0x2043, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, - 0x080c, 0xe9e9, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5, + 0x080c, 0xea0a, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5, 0x0016, 0x2009, 0x0040, 0x080c, 0x23d2, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c, 0xd0fc, 0x09a8, @@ -910,16 +910,16 @@ 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x23cf, 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x22f7, - 0x22ef, 0x7d91, 0x22ef, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x7d77, + 0x22ef, 0x7d9d, 0x22ef, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x7d83, 0x22ef, 0x22f3, 0x22ef, 0x22f1, 0x22ef, 0x22f1, 0x22ef, 0x080c, - 0x0dd5, 0x0031, 0x0020, 0x080c, 0x7d77, 0x080c, 0x7d91, 0x0005, - 0x0006, 0x0016, 0x0026, 0x080c, 0xe9e9, 0x7930, 0x9184, 0x0003, + 0x0dd5, 0x0031, 0x0020, 0x080c, 0x7d83, 0x080c, 0x7d9d, 0x0005, + 0x0006, 0x0016, 0x0026, 0x080c, 0xea0a, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5, 0x00c6, 0x2001, 0x19f6, 0x2064, - 0x080c, 0xc74e, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x23d2, + 0x080c, 0xc768, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x23d2, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, - 0x080c, 0x73b0, 0x1138, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c, - 0x72e2, 0x0010, 0x080c, 0x5eda, 0x080c, 0x7e40, 0x0041, 0x0018, + 0x080c, 0x73bc, 0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, + 0x72ee, 0x0010, 0x080c, 0x5ed9, 0x080c, 0x7e4c, 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, @@ -969,99 +969,99 @@ 0x0007, 0x0082, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0d70, 0x0c98, 0x0016, 0x2001, 0x188b, 0x200c, 0xd194, 0x001e, 0x0d30, 0x0c58, 0x24d4, 0x24ba, 0x24bd, 0x24c0, 0x24c5, 0x24c7, - 0x24cb, 0x24cf, 0x080c, 0x8fac, 0x00b8, 0x080c, 0x9079, 0x00a0, - 0x080c, 0x9079, 0x080c, 0x8fac, 0x0078, 0x0099, 0x0068, 0x080c, - 0x8fac, 0x0079, 0x0048, 0x080c, 0x9079, 0x0059, 0x0028, 0x080c, - 0x9079, 0x080c, 0x8fac, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, + 0x24cb, 0x24cf, 0x080c, 0x8fd5, 0x00b8, 0x080c, 0x90a2, 0x00a0, + 0x080c, 0x90a2, 0x080c, 0x8fd5, 0x0078, 0x0099, 0x0068, 0x080c, + 0x8fd5, 0x0079, 0x0048, 0x080c, 0x90a2, 0x0059, 0x0028, 0x080c, + 0x90a2, 0x080c, 0x8fd5, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, - 0x273c, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x73b0, 0x0904, 0x252f, - 0x080c, 0xd216, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024, - 0x9084, 0x1800, 0x0550, 0x080c, 0x73d3, 0x0118, 0x080c, 0x73c1, - 0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd216, 0x0168, - 0x080c, 0x73d3, 0x1150, 0x2001, 0x19a7, 0x2003, 0x0001, 0x6027, - 0x1800, 0x080c, 0x7246, 0x0804, 0x273f, 0x70a4, 0x9005, 0x1150, - 0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x7407, 0x00de, - 0x1904, 0x273f, 0x080c, 0x76a2, 0x0428, 0x080c, 0x73d3, 0x1590, - 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x76a2, 0x080c, - 0x7698, 0x080c, 0x601b, 0x080c, 0x72e2, 0x0804, 0x273c, 0xd1ac, + 0x273c, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x73bc, 0x0904, 0x252f, + 0x080c, 0xd230, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024, + 0x9084, 0x1800, 0x0550, 0x080c, 0x73df, 0x0118, 0x080c, 0x73cd, + 0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd230, 0x0168, + 0x080c, 0x73df, 0x1150, 0x2001, 0x19a7, 0x2003, 0x0001, 0x6027, + 0x1800, 0x080c, 0x7252, 0x0804, 0x273f, 0x70a4, 0x9005, 0x1150, + 0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x7413, 0x00de, + 0x1904, 0x273f, 0x080c, 0x76ae, 0x0428, 0x080c, 0x73df, 0x1590, + 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x76ae, 0x080c, + 0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0804, 0x273c, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, - 0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, 0x080c, 0x7585, - 0x0804, 0x273c, 0x080c, 0x769d, 0x0048, 0x2001, 0x197d, 0x2003, - 0x0002, 0x0020, 0x080c, 0x74ea, 0x0804, 0x273c, 0x080c, 0x7620, + 0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, 0x080c, 0x7591, + 0x0804, 0x273c, 0x080c, 0x76a9, 0x0048, 0x2001, 0x197d, 0x2003, + 0x0002, 0x0020, 0x080c, 0x74f6, 0x0804, 0x273c, 0x080c, 0x762c, 0x0804, 0x273c, 0x6220, 0xd1bc, 0x0138, 0xd2bc, 0x1904, 0x27af, 0xd2b4, 0x1904, 0x27c2, 0x0000, 0xd1ac, 0x0904, 0x2651, 0x0036, - 0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x73b0, 0x11c0, 0x6027, - 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x73ca, 0x1158, 0x080c, - 0x7698, 0x080c, 0x601b, 0x080c, 0x72e2, 0x003e, 0x002e, 0x000e, - 0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x7388, 0x0016, + 0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x73bc, 0x11c0, 0x6027, + 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6, 0x1158, 0x080c, + 0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x003e, 0x002e, 0x000e, + 0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x7394, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084, 0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, - 0x4b05, 0x003e, 0x080c, 0xd20f, 0x1904, 0x262e, 0x9196, 0xff00, + 0x4b04, 0x003e, 0x080c, 0xd229, 0x1904, 0x262e, 0x9196, 0xff00, 0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, - 0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3312, 0x0128, 0xc18d, - 0x7132, 0x080c, 0x6962, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, + 0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3319, 0x0128, 0xc18d, + 0x7132, 0x080c, 0x696a, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x262e, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x262e, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, - 0x8013, 0x080c, 0x4b05, 0x003e, 0x0804, 0x262e, 0x7038, 0xd08c, + 0x8013, 0x080c, 0x4b04, 0x003e, 0x0804, 0x262e, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x262e, 0xc1ad, - 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b05, 0x003e, + 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b04, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0, - 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x86b4, 0x2019, - 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe501, 0x00ce, 0x9484, - 0x00ff, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, - 0x9006, 0x2009, 0x000e, 0x080c, 0xe58d, 0x001e, 0x0016, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x3187, 0x001e, 0x0078, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6600, 0x1110, 0x080c, - 0x6035, 0x8108, 0x1f04, 0x2624, 0x00be, 0x015e, 0x00ce, 0x004e, - 0x080c, 0xadb8, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, + 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x86dd, 0x2019, + 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe522, 0x00ce, 0x9484, + 0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, + 0x9006, 0x2009, 0x000e, 0x080c, 0xe5ae, 0x001e, 0x0016, 0x2009, + 0x0002, 0x2019, 0x0004, 0x080c, 0x318a, 0x001e, 0x0078, 0x0156, + 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x65ff, 0x1110, 0x080c, + 0x6034, 0x8108, 0x1f04, 0x2624, 0x00be, 0x015e, 0x00ce, 0x004e, + 0x080c, 0xadd2, 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, 0x1826, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x273c, 0x0016, 0x6220, 0xd2b4, 0x0904, - 0x26d9, 0x080c, 0x8550, 0x080c, 0xa259, 0x6027, 0x0004, 0x00f6, + 0x26d9, 0x080c, 0x8579, 0x080c, 0xa273, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19f0, 0x2304, 0x907d, 0x0904, 0x26a8, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2cff, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2c19, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, - 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x080c, 0x955f, 0x080c, - 0x9664, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xae47, + 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x080c, 0x9588, 0x080c, + 0x968d, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xae61, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6028, 0x080c, - 0xd216, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, - 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa235, 0x0804, 0x273b, - 0x2061, 0x0100, 0x62c0, 0x080c, 0xac43, 0x2019, 0x19f0, 0x2304, - 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xaec2, 0x00ce, 0x0804, - 0x273b, 0xd2bc, 0x0904, 0x2722, 0x080c, 0x855d, 0x6014, 0x9084, + 0xd230, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, + 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa24f, 0x0804, 0x273b, + 0x2061, 0x0100, 0x62c0, 0x080c, 0xac5d, 0x2019, 0x19f0, 0x2304, + 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xaedc, 0x00ce, 0x0804, + 0x273b, 0xd2bc, 0x0904, 0x2722, 0x080c, 0x8586, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x00de, - 0x00c6, 0x2061, 0x19e7, 0x6044, 0x080c, 0xd216, 0x0120, 0x909a, + 0x00c6, 0x2061, 0x19e7, 0x6044, 0x080c, 0xd230, 0x0120, 0x909a, 0x0003, 0x1658, 0x0018, 0x909a, 0x00c8, 0x1638, 0x8000, 0x6046, - 0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x8555, + 0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x857e, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x0430, 0x9080, 0x0008, 0x2004, 0x9086, 0x0009, 0x0d98, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x00c8, 0x6027, 0x0004, 0x00b0, 0x0036, 0x2019, 0x0001, - 0x080c, 0xa59c, 0x003e, 0x2019, 0x19f6, 0x2304, 0x9065, 0x0150, + 0x080c, 0xa5b6, 0x003e, 0x2019, 0x19f6, 0x2304, 0x9065, 0x0150, 0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f, - 0x080c, 0xaec2, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27aa, 0x7038, + 0x080c, 0xaedc, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27aa, 0x7038, 0xd0ac, 0x1904, 0x2783, 0x0016, 0x0156, 0x6027, 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c, 0x2c38, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x2756, - 0x080c, 0x8584, 0x1f04, 0x2756, 0x6050, 0x9085, 0x0400, 0x9084, + 0x080c, 0x85ad, 0x1f04, 0x2756, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2764, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x276d, 0x080c, - 0x8584, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, + 0x85ad, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, 0x2c00, 0x1f04, 0x276d, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, - 0xadb8, 0x60e3, 0x0000, 0x080c, 0xe9c8, 0x080c, 0xe9e3, 0x080c, - 0x56d4, 0xd0fc, 0x1138, 0x080c, 0xd20f, 0x1120, 0x9085, 0x0001, - 0x080c, 0x73f7, 0x9006, 0x080c, 0x2cef, 0x2009, 0x0002, 0x080c, + 0xadd2, 0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x080c, + 0x56d3, 0xd0fc, 0x1138, 0x080c, 0xd229, 0x1120, 0x9085, 0x0001, + 0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2009, 0x0002, 0x080c, 0x2c3e, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x0bae, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0904, 0x255c, 0x0016, @@ -1075,33 +1075,33 @@ 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116, 0x05e8, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2c3e, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, - 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b05, 0x0438, 0x2001, + 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b04, 0x0438, 0x2001, 0x19a8, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, - 0x4b05, 0x080c, 0x56d4, 0xd0fc, 0x1188, 0x080c, 0xd20f, 0x1170, - 0x00c6, 0x080c, 0x28d2, 0x080c, 0xa503, 0x2061, 0x0100, 0x2019, - 0x0028, 0x2009, 0x0002, 0x080c, 0x3187, 0x00ce, 0x012e, 0x00fe, + 0x4b04, 0x080c, 0x56d3, 0xd0fc, 0x1188, 0x080c, 0xd229, 0x1170, + 0x00c6, 0x080c, 0x28d2, 0x080c, 0xa51d, 0x2061, 0x0100, 0x2019, + 0x0028, 0x2009, 0x0002, 0x080c, 0x318a, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011, 0x1820, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, - 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8095, 0x0048, 0x9584, - 0x00ff, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, - 0x0005, 0x9080, 0x331e, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, + 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x80be, 0x0048, 0x9584, + 0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, + 0x0005, 0x9080, 0x3325, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x2882, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, - 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xf195, 0x2005, 0x6856, + 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xf1b6, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2897, 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, 0x28c7, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, - 0x015e, 0x0005, 0x080c, 0x56d0, 0xd0c4, 0x0150, 0xd0a4, 0x0140, - 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xe58d, 0x004e, + 0x015e, 0x0005, 0x080c, 0x56cf, 0xd0c4, 0x0150, 0xd0a4, 0x0140, + 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xe5ae, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x293e, 0x080c, 0x2b9d, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, @@ -1110,9 +1110,9 @@ 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, 0x8f3f, 0x928c, + 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x8f68, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, - 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x73b0, 0x1118, 0x2009, + 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x73bc, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, @@ -1129,16 +1129,16 @@ 0x080c, 0x2bfb, 0x2001, 0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, - 0x8562, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a, + 0x858b, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001, 0x9006, 0x080c, 0x2b6b, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, - 0x001e, 0x2011, 0x2a0e, 0x080c, 0x8562, 0x0005, 0x080c, 0x0dd5, + 0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b, 0x0005, 0x080c, 0x0dd5, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2b6b, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990, - 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, 0x8562, + 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x0dd5, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1992, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dd5, @@ -1199,13 +1199,13 @@ 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2be6, - 0x080c, 0x8584, 0x1f04, 0x2be6, 0x7850, 0x9085, 0x0400, 0x9084, + 0x080c, 0x85ad, 0x1f04, 0x2be6, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2c38, 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, 0x2c0a, 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2c10, 0x00fe, 0x015e, 0x000e, - 0x0005, 0x1d04, 0x2c19, 0x080c, 0x8584, 0x1f04, 0x2c19, 0x0005, + 0x0005, 0x1d04, 0x2c19, 0x080c, 0x85ad, 0x1f04, 0x2c19, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, @@ -1232,13 +1232,13 @@ 0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, - 0x0026, 0x080c, 0x73ca, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, + 0x0026, 0x080c, 0x73d6, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, - 0x73ca, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, + 0x73d6, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x2f95, 0x2f95, 0x2db9, 0x2db9, 0x2dc5, 0x2dc5, 0x2dd1, 0x2dd1, 0x2ddf, 0x2ddf, 0x2deb, 0x2deb, 0x2df9, 0x2df9, 0x2e07, 0x2e07, 0x2e19, 0x2e19, 0x2e25, 0x2e25, 0x2e33, 0x2e33, 0x2e51, @@ -1317,1840 +1317,1841 @@ 0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x2481, 0x080c, 0x1380, 0x080c, 0x22d0, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, - 0x0026, 0x0046, 0x9026, 0x080c, 0x6928, 0x1904, 0x30a3, 0x72dc, + 0x0026, 0x0046, 0x9026, 0x080c, 0x6930, 0x1904, 0x30a6, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, - 0x1138, 0xd2bc, 0x1904, 0x30a3, 0x080c, 0x30a8, 0x0804, 0x30a3, - 0xd2cc, 0x1904, 0x30a3, 0x080c, 0x73b0, 0x1120, 0x70af, 0xffff, - 0x0804, 0x30a3, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804, 0x30a3, - 0x080c, 0x330d, 0x0160, 0x080c, 0xd216, 0x0128, 0x2001, 0x1818, - 0x203c, 0x0804, 0x3030, 0x70af, 0xffff, 0x0804, 0x30a3, 0x2001, - 0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x3030, 0xd28c, 0x1904, - 0x3030, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, + 0x1138, 0xd2bc, 0x1904, 0x30a6, 0x080c, 0x30ab, 0x0804, 0x30a6, + 0xd2cc, 0x1904, 0x30a6, 0x080c, 0x73bc, 0x1120, 0x70af, 0xffff, + 0x0804, 0x30a6, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804, 0x30a6, + 0x080c, 0x3314, 0x0160, 0x080c, 0xd230, 0x0128, 0x2001, 0x1818, + 0x203c, 0x0804, 0x3033, 0x70af, 0xffff, 0x0804, 0x30a6, 0x2001, + 0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x3033, 0xd28c, 0x1904, + 0x3033, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, - 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05b8, 0x908e, - 0x0000, 0x05a0, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x1598, - 0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, 0x0488, 0x900e, - 0x080c, 0x283e, 0x080c, 0x659f, 0x1520, 0x9006, 0xb8bb, 0x0520, - 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8958, 0x00ce, - 0x090c, 0x8cfc, 0xb8af, 0x0000, 0x080c, 0x696a, 0x1150, 0x7030, - 0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x30c1, 0x0148, - 0x0028, 0x080c, 0x31fd, 0x080c, 0x30ed, 0x0118, 0x8318, 0x0804, - 0x2fe0, 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x30a3, - 0x9780, 0x331e, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, - 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, - 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804, - 0x30a3, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x3098, 0xc484, - 0x080c, 0x6600, 0x0148, 0x080c, 0xd216, 0x1904, 0x3098, 0x080c, - 0x659f, 0x1904, 0x30a0, 0x0008, 0xc485, 0xb8bb, 0x0520, 0xb8ac, - 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8958, 0x00ce, 0x090c, - 0x8cfc, 0xb8af, 0x0000, 0x080c, 0x696a, 0x1130, 0x7030, 0xd08c, - 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, 0x0180, 0x080c, - 0x696a, 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x65c4, - 0x0028, 0x080c, 0x3289, 0x01a0, 0x080c, 0x32b4, 0x0088, 0x080c, - 0x31fd, 0x080c, 0xd216, 0x1160, 0x080c, 0x30ed, 0x0188, 0x0040, - 0x080c, 0xd216, 0x1118, 0x080c, 0x3289, 0x0110, 0x0451, 0x0140, - 0x001e, 0x8108, 0x015e, 0x1f04, 0x3049, 0x70af, 0xffff, 0x0018, - 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, - 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009, 0x007e, 0x080c, 0x659f, - 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x31fd, 0x04a9, - 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcf67, 0x001e, 0x00ce, - 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, - 0x9084, 0x00ff, 0xb842, 0x080c, 0xae95, 0x01d0, 0x2b00, 0x6012, - 0x080c, 0xcf90, 0x6023, 0x0001, 0x9006, 0x080c, 0x653c, 0x2001, - 0x0000, 0x080c, 0x6550, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, - 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c, 0xaec2, 0x9085, 0x0001, - 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, - 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, - 0xae95, 0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, - 0x9086, 0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, - 0x1110, 0x080c, 0x31bc, 0x080c, 0xcf90, 0x6023, 0x0001, 0x9006, - 0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550, 0x0126, 0x2091, - 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0002, 0x080c, - 0xaec2, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, - 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x659f, 0x1140, - 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70e3, 0xffff, - 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, - 0x080c, 0xadf1, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcf90, 0x6023, - 0x0001, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550, - 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, 0x012e, 0x2009, - 0x0002, 0x080c, 0xaec2, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, - 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, - 0x007f, 0x080c, 0x659f, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, - 0xb8cf, 0x0004, 0x080c, 0xadf1, 0x0170, 0x2b00, 0x6012, 0x6316, - 0x6023, 0x0001, 0x620a, 0x080c, 0xcf90, 0x2009, 0x0022, 0x080c, - 0xaec2, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, - 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x926d, - 0x080c, 0x91f2, 0x080c, 0xac8a, 0x080c, 0xbd5d, 0x3e08, 0x2130, - 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, - 0x900e, 0x0016, 0x080c, 0x6600, 0x1140, 0x9686, 0x0002, 0x1118, - 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6035, 0x001e, 0x8108, 0x1f04, - 0x31a1, 0x9686, 0x0001, 0x190c, 0x32e1, 0x00be, 0x002e, 0x003e, - 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, - 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, - 0x080c, 0x9262, 0x0076, 0x2039, 0x0000, 0x080c, 0x913f, 0x2c08, - 0x080c, 0xe2ca, 0x007e, 0x001e, 0xba10, 0xbb14, 0x080c, 0x6035, - 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, - 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, - 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110, - 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4, - 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802, - 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0036, 0x0026, 0x0016, - 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0088, 0x080c, - 0x56d0, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, - 0x2009, 0x002d, 0x080c, 0xe58d, 0x004e, 0x20a9, 0x0800, 0x9016, - 0x0026, 0x928e, 0x007e, 0x0904, 0x3269, 0x928e, 0x007f, 0x0904, - 0x3269, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, - 0x05c0, 0x8fff, 0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, - 0x04e9, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, - 0x0001, 0x080c, 0x6934, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, - 0x9262, 0x0076, 0x2039, 0x0000, 0x080c, 0x913f, 0x00b6, 0x00c6, - 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, - 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, - 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xe2ca, 0x001e, - 0x007e, 0x002e, 0x8210, 0x1f04, 0x3220, 0x015e, 0x001e, 0x002e, - 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, - 0x0016, 0x080c, 0x56d0, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, - 0x2220, 0x2009, 0x0029, 0x080c, 0xe58d, 0x001e, 0x002e, 0x004e, - 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8, - 0x080c, 0x6962, 0x11d0, 0x2100, 0x080c, 0x2871, 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, 0x1ab0, 0x001e, - 0x6112, 0x080c, 0x31bc, 0x001e, 0x080c, 0x65c4, 0x012e, 0x00ce, - 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa7ee, 0x080c, - 0xe8f6, 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, - 0x0005, 0x00c6, 0x00b6, 0x080c, 0x73b0, 0x1118, 0x20a9, 0x0800, - 0x0010, 0x20a9, 0x0782, 0x080c, 0x73b0, 0x1110, 0x900e, 0x0010, - 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, - 0x0110, 0xb800, 0xd0bc, 0x090c, 0x65c4, 0x8108, 0x1f04, 0x32f2, - 0x2061, 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, - 0x60b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, - 0xd0bc, 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, - 0x2011, 0x1867, 0x2214, 0xd2dc, 0x002e, 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, + 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e, + 0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0, + 0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, 0x04a0, 0x900e, + 0x080c, 0x283e, 0x080c, 0x659e, 0x1538, 0x9006, 0xb8bb, 0x0520, + 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8981, 0x00ce, + 0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972, 0x1168, 0x7030, + 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x681f, 0x0120, + 0x080c, 0x30c4, 0x0148, 0x0028, 0x080c, 0x3204, 0x080c, 0x30f0, + 0x0118, 0x8318, 0x0804, 0x2fe0, 0x73ae, 0x0010, 0x70af, 0xffff, + 0x003e, 0x0804, 0x30a6, 0x9780, 0x3325, 0x203d, 0x97bc, 0xff00, + 0x873f, 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e, + 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, + 0x70af, 0xffff, 0x0804, 0x30a6, 0x2700, 0x0156, 0x0016, 0x9106, + 0x0904, 0x309b, 0xc484, 0x080c, 0x65ff, 0x0148, 0x080c, 0xd230, + 0x1904, 0x309b, 0x080c, 0x659e, 0x1904, 0x30a3, 0x0008, 0xc485, + 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, + 0x8981, 0x00ce, 0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972, + 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294, + 0xd28c, 0x0180, 0x080c, 0x6972, 0x9082, 0x0006, 0x02e0, 0xd484, + 0x1118, 0x080c, 0x65c3, 0x0028, 0x080c, 0x3290, 0x01a0, 0x080c, + 0x32bb, 0x0088, 0x080c, 0x3204, 0x080c, 0xd230, 0x1160, 0x080c, + 0x30f0, 0x0188, 0x0040, 0x080c, 0xd230, 0x1118, 0x080c, 0x3290, + 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x304c, + 0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e, + 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009, + 0x007e, 0x080c, 0x659e, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, + 0x080c, 0x3204, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c, + 0xcf81, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, + 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xaeaf, + 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006, + 0x080c, 0x653b, 0x2001, 0x0000, 0x080c, 0x654f, 0x0126, 0x2091, + 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c, + 0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, + 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, + 0x00ff, 0xb842, 0x080c, 0xaeaf, 0x0548, 0x2b00, 0x6012, 0xb800, + 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084, + 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x31bf, 0x080c, 0xcfaa, + 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c, + 0x654f, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, + 0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de, + 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, + 0x080c, 0x659e, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, + 0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, + 0x0076, 0x00d6, 0x00c6, 0x080c, 0xae0b, 0x01d0, 0x2b00, 0x6012, + 0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001, + 0x0002, 0x080c, 0x654f, 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000, + 0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001, + 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, + 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x659e, 0x11b8, 0xb813, + 0x00ff, 0xb817, 0xfffd, 0xb8cf, 0x0004, 0x080c, 0xae0b, 0x0170, + 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xcfaa, + 0x2009, 0x0022, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00de, + 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, + 0x21f0, 0x080c, 0x9296, 0x080c, 0x921b, 0x080c, 0xaca4, 0x080c, + 0xbd77, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, + 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1140, + 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6034, + 0x001e, 0x8108, 0x1f04, 0x31a4, 0x9686, 0x0001, 0x190c, 0x32e8, + 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, + 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, + 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076, 0x2039, + 0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x001e, + 0xba10, 0xbb14, 0xbcc0, 0x080c, 0x6034, 0xba12, 0xbb16, 0xbcc2, + 0x00be, 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005, + 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, + 0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110, 0x8001, + 0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4, 0x9005, + 0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, + 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, + 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, + 0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, + 0x002d, 0x080c, 0xe5ae, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, + 0x007e, 0x0904, 0x326f, 0x928e, 0x007f, 0x0904, 0x326f, 0x928e, + 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, + 0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e, + 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, + 0x693c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076, + 0x2039, 0x0000, 0x080c, 0x9168, 0x00b6, 0x00c6, 0x0026, 0x2158, + 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, + 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, + 0x00be, 0x0016, 0x2c08, 0x080c, 0xe2eb, 0x001e, 0x007e, 0x002e, + 0x8210, 0x1f04, 0x3226, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, + 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, + 0x080c, 0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, + 0x2009, 0x0029, 0x080c, 0xe5ae, 0x001e, 0x002e, 0x004e, 0x0005, + 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8, 0x080c, + 0x696a, 0x11d0, 0x2100, 0x080c, 0x2871, 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, 0x1ab0, 0x001e, 0x6112, + 0x080c, 0x31bf, 0x001e, 0x080c, 0x65c3, 0x012e, 0x00ce, 0x001e, + 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa808, 0x080c, 0xe917, + 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005, + 0x00c6, 0x00b6, 0x080c, 0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010, + 0x20a9, 0x0782, 0x080c, 0x73bc, 0x1110, 0x900e, 0x0010, 0x2009, + 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, + 0xb800, 0xd0bc, 0x090c, 0x65c3, 0x8108, 0x1f04, 0x32f9, 0x2061, + 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3, + 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc, + 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, + 0x1867, 0x2214, 0xd2dc, 0x002e, 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, 0x8000, 0x2071, 0x189e, - 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, - 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, - 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706a, 0xa867, 0x0002, - 0xa8ab, 0xdcb0, 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706e, - 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, - 0x0002, 0x344d, 0x344e, 0x3461, 0x3475, 0x0005, 0x1004, 0x345e, - 0x0e04, 0x345e, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, - 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, - 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, - 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3549, 0x0005, 0x7018, - 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, - 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, - 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, - 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, - 0x1210, 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x3546, - 0x61d0, 0x0804, 0x34db, 0x351d, 0x3555, 0x355f, 0x3563, 0x356d, - 0x3573, 0x3577, 0x3587, 0x358a, 0x3594, 0x3599, 0x359e, 0x35a9, - 0x35b4, 0x35c3, 0x35d2, 0x35e0, 0x35f7, 0x3612, 0x3546, 0x36bb, - 0x36f9, 0x379f, 0x37b0, 0x37d3, 0x3546, 0x3546, 0x3546, 0x380b, - 0x3827, 0x3830, 0x385f, 0x3865, 0x3546, 0x38ab, 0x3546, 0x3546, - 0x3546, 0x3546, 0x3546, 0x38b6, 0x38bf, 0x38c7, 0x38c9, 0x3546, - 0x3546, 0x3546, 0x3546, 0x3546, 0x3546, 0x38f5, 0x3546, 0x3546, - 0x3546, 0x3546, 0x3546, 0x3912, 0x3973, 0x3546, 0x3546, 0x3546, - 0x3546, 0x3546, 0x3546, 0x0002, 0x399d, 0x39a0, 0x39ff, 0x3a18, - 0x3a48, 0x3ce6, 0x3546, 0x52a9, 0x3546, 0x3546, 0x3546, 0x3546, - 0x3546, 0x3546, 0x3546, 0x3546, 0x3594, 0x3599, 0x4207, 0x56f4, - 0x4225, 0x5338, 0x5389, 0x548c, 0x3546, 0x54ee, 0x552a, 0x555b, - 0x565f, 0x5588, 0x55df, 0x3546, 0x4229, 0x43f2, 0x4408, 0x442d, - 0x4492, 0x4506, 0x4526, 0x459d, 0x45f9, 0x4655, 0x4658, 0x467d, - 0x471a, 0x4780, 0x4788, 0x48ba, 0x4a2f, 0x4a63, 0x4cc7, 0x3546, - 0x4ce5, 0x4d91, 0x4e73, 0x4ecd, 0x3546, 0x4f82, 0x3546, 0x4fe8, - 0x5003, 0x4788, 0x5249, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, - 0x4ae1, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3527, 0x0010, 0x012e, - 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, - 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001, - 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, - 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, - 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, - 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4aee, 0x7883, - 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, - 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4af1, 0x7984, 0x7888, 0x2114, - 0x200a, 0x0804, 0x351d, 0x7984, 0x2114, 0x0804, 0x351d, 0x20e1, - 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, - 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x351d, 0x7884, - 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a, - 0x789b, 0x0137, 0x0804, 0x351d, 0x2039, 0x0001, 0x7d98, 0x7c9c, - 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, - 0x0040, 0x0210, 0x0804, 0x3552, 0x2138, 0x7d98, 0x7c9c, 0x0804, - 0x3559, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3552, 0x2138, - 0x7d98, 0x7c9c, 0x0804, 0x3567, 0x79a0, 0x9182, 0x0040, 0x0210, - 0x0804, 0x3552, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, - 0x4004, 0x0804, 0x351d, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, - 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x351d, - 0x0804, 0x354c, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3552, - 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x351d, - 0x2069, 0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3552, 0x8019, - 0x0904, 0x3552, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, - 0x9006, 0x685a, 0x685e, 0x080c, 0x76c9, 0x0804, 0x351d, 0x2069, - 0x1847, 0x7884, 0x7994, 0x911a, 0x1a04, 0x3552, 0x8019, 0x0904, - 0x3552, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, - 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d4, 0x012e, - 0x0804, 0x351d, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x354f, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, - 0x0001, 0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa5, 0x1120, 0x2009, - 0x0002, 0x0804, 0x354f, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, - 0xaf60, 0x080c, 0x4aee, 0x701f, 0x3636, 0x0005, 0xa864, 0x2008, - 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, - 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, - 0x1904, 0x354f, 0x810f, 0x918c, 0x00ff, 0x0904, 0x354f, 0x7112, - 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x4aa5, 0x1120, 0x2009, - 0x0002, 0x0804, 0x354f, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, - 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, - 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, - 0x4aee, 0x701f, 0x3674, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, - 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x354f, 0x0888, 0x7014, - 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, - 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618c, 0x0150, 0x0126, - 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b5, - 0x1128, 0x7007, 0x0003, 0x701f, 0x36a0, 0x0005, 0x080c, 0x6eb8, - 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, - 0x18a6, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, - 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, - 0xaf60, 0x0804, 0x4af1, 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, 0x1a19, 0x2004, - 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, - 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, - 0x0427, 0x81ff, 0x1904, 0x354f, 0x7984, 0x080c, 0x6600, 0x1904, - 0x3552, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x3552, - 0x7c88, 0x7d8c, 0x080c, 0x6763, 0x080c, 0x6732, 0x0000, 0x1518, - 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, - 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, - 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, - 0x9c02, 0x1a04, 0x354f, 0x0c30, 0x080c, 0xc74e, 0x012e, 0x0904, - 0x354f, 0x0804, 0x351d, 0x900e, 0x2001, 0x0005, 0x080c, 0x6eb8, - 0x0126, 0x2091, 0x8000, 0x080c, 0xce10, 0x080c, 0x6c79, 0x012e, - 0x0804, 0x351d, 0x00a6, 0x2950, 0xb198, 0x080c, 0x6600, 0x1904, - 0x378c, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, - 0xb5a0, 0x080c, 0x6763, 0x080c, 0x6732, 0x1520, 0x2061, 0x1cd0, - 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, - 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, - 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, - 0x000d, 0x12b0, 0x0c28, 0x080c, 0xc74e, 0x012e, 0x2009, 0x0003, - 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6eb8, 0x0126, - 0x2091, 0x8000, 0x080c, 0xce10, 0x080c, 0x6c6d, 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, 0x354f, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x66c7, - 0x0904, 0x354f, 0x080c, 0x6769, 0x0904, 0x354f, 0x0804, 0x451d, - 0x81ff, 0x1904, 0x354f, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, - 0x67f7, 0x0904, 0x354f, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6784, - 0x0904, 0x354f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552, 0x8003, - 0x800b, 0x810b, 0x9108, 0x080c, 0x84d8, 0x7984, 0xd184, 0x1904, - 0x351d, 0x0804, 0x451d, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, - 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, - 0x01f8, 0x2508, 0x080c, 0x6600, 0x11d8, 0x080c, 0x67f7, 0x1128, - 0x2009, 0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, - 0x080c, 0x6784, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, - 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d8, - 0x8529, 0x1ae0, 0x012e, 0x0804, 0x351d, 0x012e, 0x0804, 0x354f, - 0x012e, 0x0804, 0x3552, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, - 0x66c7, 0x0904, 0x354f, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, - 0x080c, 0x9262, 0x0076, 0x903e, 0x080c, 0x913f, 0x900e, 0x080c, - 0xe2ca, 0x007e, 0x00ce, 0x080c, 0x6763, 0x0804, 0x351d, 0x080c, - 0x4abc, 0x0904, 0x3552, 0x080c, 0x6763, 0x2208, 0x0804, 0x351d, - 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a, - 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, - 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, - 0x1f04, 0x3841, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, - 0x351d, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, - 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, - 0x1910, 0x6910, 0x62bc, 0x0804, 0x351d, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x354f, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e4, - 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x354f, 0x012e, 0x615c, - 0x9190, 0x331e, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, - 0x6280, 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, - 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, - 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, - 0x0002, 0x0068, 0x080c, 0x73b0, 0x1118, 0x2031, 0x0004, 0x0038, - 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x354f, 0x9036, 0x7e9a, - 0x7f9e, 0x0804, 0x351d, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, - 0x2001, 0x1987, 0x2004, 0x789a, 0x0804, 0x351d, 0x0126, 0x2091, - 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x351d, 0x080c, - 0x4ad8, 0x0904, 0x3552, 0xba44, 0xbb38, 0x0804, 0x351d, 0x080c, - 0x0dd5, 0x080c, 0x4ad8, 0x2110, 0x0904, 0x3552, 0xb804, 0x908c, - 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, - 0x2009, 0x0009, 0x1904, 0x354f, 0x0126, 0x2091, 0x8000, 0x2019, - 0x0005, 0x00c6, 0x9066, 0x080c, 0xa7ee, 0x080c, 0x9262, 0x0076, - 0x903e, 0x080c, 0x913f, 0x900e, 0x080c, 0xe2ca, 0x007e, 0x00ce, - 0xb807, 0x0407, 0x012e, 0x0804, 0x351d, 0x614c, 0x6250, 0x7884, - 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816, - 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, - 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a, - 0x0804, 0x351d, 0x0126, 0x2091, 0x8000, 0x7884, 0x603a, 0xd0c4, - 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, - 0x199e, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, - 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7884, 0xd0b4, - 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, 0x603e, 0x2011, - 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, - 0x918c, 0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, 0x0020, 0x0130, - 0x78b4, 0x6046, 0x9084, 0x0001, 0x090c, 0x4207, 0x6040, 0xd0cc, - 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x351d, - 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, - 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, - 0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, - 0x0904, 0x3552, 0x788c, 0x902d, 0x0904, 0x3552, 0x900e, 0x080c, - 0x6600, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, - 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x7888, - 0x900d, 0x0904, 0x3552, 0x788c, 0x9005, 0x0904, 0x3552, 0xba44, - 0xb946, 0xbb38, 0xb83a, 0x0804, 0x351d, 0x2011, 0xbc09, 0x0010, - 0x2011, 0xbc05, 0x080c, 0x56e4, 0x1904, 0x354f, 0x00c6, 0x2061, - 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, - 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x331e, - 0x210d, 0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, - 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, - 0x080c, 0xadf1, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, - 0x080c, 0x65a5, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, - 0x080c, 0x4aa5, 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, - 0xa868, 0xc0fd, 0xa86a, 0x701f, 0x39f8, 0x2900, 0x6016, 0x2009, - 0x0032, 0x080c, 0xaec2, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, - 0x0804, 0x354f, 0x00ce, 0x0804, 0x3552, 0x080c, 0xae47, 0x0cb0, - 0xa830, 0x9086, 0x0100, 0x0904, 0x354f, 0x0804, 0x351d, 0x2061, - 0x1a71, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, - 0x6208, 0x2061, 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, - 0x60bc, 0x78aa, 0x012e, 0x0804, 0x351d, 0x900e, 0x2110, 0x0c88, - 0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0, 0x0904, 0x354f, 0x0126, - 0x2091, 0x8000, 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, - 0x080c, 0x28a7, 0x080c, 0x58fe, 0x012e, 0x0804, 0x351d, 0x012e, - 0x0804, 0x3552, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, - 0x2070, 0x2061, 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, - 0x080c, 0x8f3f, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, - 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, - 0x0804, 0x351f, 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, - 0x9082, 0x00e1, 0x0288, 0x012e, 0x0804, 0x3552, 0x2001, 0x002a, - 0x2004, 0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, - 0x3552, 0x012e, 0x0804, 0x354f, 0x080c, 0xadb1, 0x0dd0, 0x7884, - 0xd0fc, 0x0904, 0x3ac3, 0x00c6, 0x080c, 0x4aa5, 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, 0x3c49, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, - 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, - 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x001b, 0x080c, 0x4aee, 0x701f, 0x3b86, 0x7023, - 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, - 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a32, 0x2001, 0x199f, - 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, - 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3cb8, - 0x080c, 0x3c77, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a66, - 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, - 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, - 0x00de, 0x2011, 0x0001, 0x080c, 0x404b, 0x008e, 0x00ee, 0x00fe, - 0x080c, 0x3f78, 0x080c, 0x3e7d, 0x05b8, 0x2001, 0x020b, 0x2004, - 0x9084, 0x0140, 0x1db8, 0x080c, 0x40bf, 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, - 0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, - 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3e87, 0x080c, 0x3c72, - 0x0058, 0x080c, 0x3c72, 0x080c, 0x3fe3, 0x080c, 0x3f6e, 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, 0x12ed, - 0x2009, 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, - 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, - 0x351d, 0x012e, 0x2021, 0x400c, 0x0804, 0x351f, 0x0016, 0x0026, - 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, - 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, - 0x0904, 0x3be2, 0x2048, 0x1f04, 0x3b96, 0x7068, 0x2040, 0xa28c, - 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, - 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, - 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4aee, 0x701f, 0x3b86, - 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, - 0x080c, 0x0f7c, 0x000e, 0x080c, 0x4af1, 0x701f, 0x3b86, 0x015e, - 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, - 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, - 0x701f, 0x3c47, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, - 0x2009, 0x007f, 0x080c, 0x659f, 0x0110, 0x9006, 0x0030, 0xb813, - 0x00ff, 0xb817, 0xfffd, 0x080c, 0xcfdf, 0x015e, 0x00de, 0x009e, - 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, - 0x354f, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, - 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c19, 0x7007, 0x0003, 0x0804, - 0x3bd7, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x351f, - 0x0076, 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, 0x0f7c, 0x000e, 0x080c, - 0x4af1, 0x007e, 0x701f, 0x3b86, 0x7023, 0x0001, 0x0005, 0x0804, - 0x351d, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, - 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, - 0x4aa5, 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, 0x199f, 0x2003, 0x0001, 0x0005, 0x00f6, - 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, 0x601a, - 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, 0xc1ac, - 0x6106, 0x080c, 0x4aa5, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, - 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, - 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, - 0x6036, 0x2009, 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, - 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, - 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0x00e6, 0x080c, 0x4aa5, 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, 0x2c30, 0x1130, 0x9006, 0x080c, - 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x7884, 0x9084, 0x0007, 0x0002, - 0x3d03, 0x3d0c, 0x3d15, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, - 0x012e, 0x0804, 0x3552, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, - 0x200a, 0x080c, 0x3ed1, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, - 0x4000, 0x200a, 0x080c, 0x3ed1, 0x0078, 0x080c, 0x73b0, 0x1128, - 0x012e, 0x2009, 0x0016, 0x0804, 0x354f, 0x81ff, 0x0128, 0x012e, - 0x2021, 0x400b, 0x0804, 0x351f, 0x0086, 0x0096, 0x00a6, 0x00b6, - 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a32, 0x2009, 0x0101, - 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, - 0x080c, 0x419a, 0x080c, 0x40ea, 0x903e, 0x2720, 0x00f6, 0x00e6, - 0x0086, 0x2940, 0x2071, 0x1a66, 0x2079, 0x0090, 0x00d6, 0x2069, - 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, - 0x00de, 0x2011, 0x0001, 0x080c, 0x404b, 0x080c, 0x2c38, 0x080c, - 0x2c38, 0x080c, 0x2c38, 0x080c, 0x2c38, 0x080c, 0x404b, 0x008e, - 0x00ee, 0x00fe, 0x080c, 0x3f78, 0x2009, 0x9c40, 0x8109, 0x11b0, - 0x080c, 0x3e87, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, - 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, - 0x008e, 0x2009, 0x0017, 0x080c, 0x354f, 0x0cf8, 0x2001, 0x020b, - 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, - 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, - 0x080c, 0x3f56, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3e87, - 0x0804, 0x3e34, 0x080c, 0x40bf, 0x080c, 0x3fe3, 0x080c, 0x3f39, - 0x080c, 0x3f6e, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, - 0x8b58, 0x080c, 0x3e87, 0x00fe, 0x0804, 0x3e34, 0x00fe, 0x080c, - 0x3e7d, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, - 0x2502, 0x080c, 0x3e87, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, - 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a62, 0x2004, - 0x9086, 0x0000, 0x1904, 0x3d84, 0x2001, 0x032f, 0x2003, 0x00f6, - 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3e34, 0x7884, - 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3e34, 0xa013, - 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, - 0x2001, 0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, - 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, - 0xa05a, 0x2009, 0x0040, 0x080c, 0x23d2, 0x2900, 0xa85a, 0xa813, - 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, - 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, - 0x1f04, 0x3e0b, 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, 0x3d3e, 0x001e, 0x00c6, 0x2001, 0x032a, - 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, - 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, - 0x2102, 0x080c, 0x12ed, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, - 0x01a0, 0x2009, 0x0028, 0x080c, 0x23d2, 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, 0x351d, - 0x012e, 0x2021, 0x400c, 0x0804, 0x351f, 0x9085, 0x0001, 0x1d04, - 0x3e86, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, - 0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, - 0x1a62, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x23d2, - 0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, - 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086, - 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, - 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, - 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x40bf, 0x7000, 0x9086, 0x0000, - 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, - 0x080c, 0x23d2, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, - 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, - 0x7936, 0x080c, 0x2887, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, - 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, - 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x3eec, 0x2091, 0x6000, - 0x1f04, 0x3eec, 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, 0x3f0c, 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, 0x2cef, 0x7827, 0x0020, - 0x7843, 0x0000, 0x9006, 0x080c, 0x2cef, 0x7827, 0x0048, 0x00fe, - 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a62, - 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, 0x19aa, 0x2004, 0x70e2, 0x080c, - 0x3c68, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, - 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, - 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, - 0x1818, 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, 0x0092, 0x7016, 0x080c, 0x40bf, 0x00f6, - 0x2071, 0x1a62, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, - 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, - 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, - 0x2011, 0x0011, 0x080c, 0x404b, 0x2011, 0x0001, 0x080c, 0x404b, - 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079, - 0x0320, 0x792c, 0xd1fc, 0x0904, 0x4048, 0x782b, 0x0002, 0x9026, - 0xd19c, 0x1904, 0x4044, 0x7000, 0x0002, 0x4048, 0x3ff9, 0x4029, - 0x4044, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, - 0x0001, 0x080c, 0x404b, 0x0904, 0x4048, 0x080c, 0x404b, 0x0804, - 0x4048, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, - 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, - 0x81ff, 0x0de8, 0x080c, 0x3f56, 0x2009, 0x0001, 0x00f6, 0x2079, - 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, - 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, - 0x1904, 0x3fed, 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, 0x0550, 0x8001, 0x0036, - 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, - 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, 0x9398, 0x4079, - 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, - 0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, - 0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, - 0x0005, 0x40b6, 0x40ad, 0x40a4, 0x409b, 0x4092, 0x4089, 0x4080, - 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, - 0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, - 0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, - 0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, - 0x00e6, 0x0086, 0x2071, 0x1a66, 0x2079, 0x0090, 0x792c, 0xd1fc, - 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x40e6, - 0x40d2, 0x40dd, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, - 0x080c, 0x404b, 0x190c, 0x404b, 0x0048, 0x8001, 0x7002, 0x782c, - 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x404b, 0x008e, 0x00ee, - 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, - 0x2001, 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, - 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, - 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, - 0x201c, 0x080c, 0x4aa5, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, - 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, - 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, - 0x080c, 0x4162, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa5, - 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, - 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, - 0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003, + 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, + 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c, + 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, + 0xdcb0, 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706e, 0xa867, + 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002, + 0x3454, 0x3455, 0x3468, 0x347c, 0x0005, 0x1004, 0x3465, 0x0e04, + 0x3465, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, + 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, + 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100, + 0x0128, 0x9086, 0x0200, 0x0904, 0x3550, 0x0005, 0x7018, 0x2048, + 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, + 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, + 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, + 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, + 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x354d, 0x61d0, + 0x0804, 0x34e2, 0x3524, 0x355c, 0x3566, 0x356a, 0x3574, 0x357a, + 0x357e, 0x358e, 0x3591, 0x359b, 0x35a0, 0x35a5, 0x35b0, 0x35bb, + 0x35ca, 0x35d9, 0x35e7, 0x35fe, 0x3619, 0x354d, 0x36c2, 0x3700, + 0x37a6, 0x37b7, 0x37da, 0x354d, 0x354d, 0x354d, 0x3812, 0x382e, + 0x3837, 0x3866, 0x386c, 0x354d, 0x38b2, 0x354d, 0x354d, 0x354d, + 0x354d, 0x354d, 0x38bd, 0x38c6, 0x38ce, 0x38d0, 0x354d, 0x354d, + 0x354d, 0x354d, 0x354d, 0x354d, 0x38fc, 0x354d, 0x354d, 0x354d, + 0x354d, 0x354d, 0x3919, 0x397a, 0x354d, 0x354d, 0x354d, 0x354d, + 0x354d, 0x354d, 0x0002, 0x39a4, 0x39a7, 0x3a06, 0x3a1f, 0x3a4f, + 0x3ced, 0x354d, 0x52a8, 0x354d, 0x354d, 0x354d, 0x354d, 0x354d, + 0x354d, 0x354d, 0x354d, 0x359b, 0x35a0, 0x420e, 0x56f3, 0x422c, + 0x5337, 0x5388, 0x548b, 0x354d, 0x54ed, 0x5529, 0x555a, 0x565e, + 0x5587, 0x55de, 0x354d, 0x4230, 0x43f1, 0x4407, 0x442c, 0x4491, + 0x4505, 0x4525, 0x459c, 0x45f8, 0x4654, 0x4657, 0x467c, 0x4719, + 0x477f, 0x4787, 0x48b9, 0x4a2e, 0x4a62, 0x4cc6, 0x354d, 0x4ce4, + 0x4d90, 0x4e72, 0x4ecc, 0x354d, 0x4f81, 0x354d, 0x4fe7, 0x5002, + 0x4787, 0x5248, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae0, + 0x0126, 0x2091, 0x8000, 0x0e04, 0x352e, 0x0010, 0x012e, 0x0cc0, + 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, + 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001, 0x2091, + 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, + 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, + 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, + 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4aed, 0x7883, 0x0004, + 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, + 0x7884, 0x7990, 0x0804, 0x4af0, 0x7984, 0x7888, 0x2114, 0x200a, + 0x0804, 0x3524, 0x7984, 0x2114, 0x0804, 0x3524, 0x20e1, 0x0000, + 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, + 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3524, 0x7884, 0x2060, + 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, + 0x0137, 0x0804, 0x3524, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, + 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, + 0x0210, 0x0804, 0x3559, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3560, + 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x2138, 0x7d98, + 0x7c9c, 0x0804, 0x356e, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, + 0x3559, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, + 0x0804, 0x3524, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, + 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3524, 0x0804, + 0x3553, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x21e0, + 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3524, 0x2069, + 0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904, + 0x3559, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, + 0x685a, 0x685e, 0x080c, 0x76d5, 0x0804, 0x3524, 0x2069, 0x1847, + 0x7884, 0x7994, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904, 0x3559, + 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, + 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69dc, 0x012e, 0x0804, + 0x3524, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3556, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, + 0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3556, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, + 0x080c, 0x4aed, 0x701f, 0x363d, 0x0005, 0xa864, 0x2008, 0x9084, + 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, + 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, + 0x3556, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3556, 0x7112, 0x7010, + 0x8001, 0x0560, 0x7012, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3556, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, + 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, + 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4aed, + 0x701f, 0x367b, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, + 0x0120, 0x9096, 0x000a, 0x1904, 0x3556, 0x0888, 0x7014, 0x2048, + 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, + 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618b, 0x0150, 0x0126, 0x2091, + 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b4, 0x1128, + 0x7007, 0x0003, 0x701f, 0x36a7, 0x0005, 0x080c, 0x6ec0, 0x0126, + 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6, + 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, + 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, + 0x0804, 0x4af0, 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, 0x1a19, 0x2004, 0x9005, + 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, + 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, + 0x81ff, 0x1904, 0x3556, 0x7984, 0x080c, 0x65ff, 0x1904, 0x3559, + 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x3559, 0x7c88, + 0x7d8c, 0x080c, 0x6762, 0x080c, 0x6731, 0x0000, 0x1518, 0x2061, + 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, + 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, + 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, + 0x1a04, 0x3556, 0x0c30, 0x080c, 0xc768, 0x012e, 0x0904, 0x3556, + 0x0804, 0x3524, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126, + 0x2091, 0x8000, 0x080c, 0xce2a, 0x080c, 0x6c81, 0x012e, 0x0804, + 0x3524, 0x00a6, 0x2950, 0xb198, 0x080c, 0x65ff, 0x1904, 0x3793, + 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, + 0x080c, 0x6762, 0x080c, 0x6731, 0x1520, 0x2061, 0x1cd0, 0x0126, + 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, + 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, + 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, + 0x12b0, 0x0c28, 0x080c, 0xc768, 0x012e, 0x2009, 0x0003, 0x0178, + 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126, 0x2091, + 0x8000, 0x080c, 0xce2a, 0x080c, 0x6c75, 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, + 0x3556, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6, 0x0904, + 0x3556, 0x080c, 0x6768, 0x0904, 0x3556, 0x0804, 0x451c, 0x81ff, + 0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x67f6, + 0x0904, 0x3556, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6783, 0x0904, + 0x3556, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x8003, 0x800b, + 0x810b, 0x9108, 0x080c, 0x8501, 0x7984, 0xd184, 0x1904, 0x3524, + 0x0804, 0x451c, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, + 0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, + 0x2508, 0x080c, 0x65ff, 0x11d8, 0x080c, 0x67f6, 0x1128, 0x2009, + 0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, + 0x6783, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, + 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8501, 0x8529, + 0x1ae0, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804, 0x3556, 0x012e, + 0x0804, 0x3559, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6, + 0x0904, 0x3556, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, + 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb, + 0x007e, 0x00ce, 0x080c, 0x6762, 0x0804, 0x3524, 0x080c, 0x4abb, + 0x0904, 0x3559, 0x080c, 0x6762, 0x2208, 0x0804, 0x3524, 0x0156, + 0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a, 0x1208, + 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, + 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, + 0x3848, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3524, + 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, + 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910, + 0x6910, 0x62bc, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001, + 0x0804, 0x3556, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e3, 0x0128, + 0x2009, 0x0007, 0x012e, 0x0804, 0x3556, 0x012e, 0x615c, 0x9190, + 0x3325, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280, + 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, + 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, + 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, + 0x0068, 0x080c, 0x73bc, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, + 0x0120, 0x2009, 0x0005, 0x0804, 0x3556, 0x9036, 0x7e9a, 0x7f9e, + 0x0804, 0x3524, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001, + 0x1987, 0x2004, 0x789a, 0x0804, 0x3524, 0x0126, 0x2091, 0x8000, + 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x3524, 0x080c, 0x4ad7, + 0x0904, 0x3559, 0xba44, 0xbb38, 0x0804, 0x3524, 0x080c, 0x0dd5, + 0x080c, 0x4ad7, 0x2110, 0x0904, 0x3559, 0xb804, 0x908c, 0x00ff, + 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, + 0x0009, 0x1904, 0x3556, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, + 0x00c6, 0x9066, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e, + 0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb, 0x007e, 0x00ce, 0xb807, + 0x0407, 0x012e, 0x0804, 0x3524, 0x614c, 0x6250, 0x7884, 0x604e, + 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816, 0x788c, + 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, + 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a, 0x0804, + 0x3524, 0x0126, 0x2091, 0x8000, 0x7884, 0x603a, 0xd0c4, 0x01a8, + 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e, + 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, + 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7884, 0xd0b4, 0x0120, + 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, 0x603e, 0x2011, 0x0114, + 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, + 0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, 0x0020, 0x0130, 0x78b4, + 0x6046, 0x9084, 0x0001, 0x090c, 0x420e, 0x6040, 0xd0cc, 0x0120, + 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3524, 0x00f6, + 0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, + 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, + 0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, + 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, + 0x3559, 0x788c, 0x902d, 0x0904, 0x3559, 0x900e, 0x080c, 0x65ff, + 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, + 0x8108, 0x0ca0, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x7888, 0x900d, + 0x0904, 0x3559, 0x788c, 0x9005, 0x0904, 0x3559, 0xba44, 0xb946, + 0xbb38, 0xb83a, 0x0804, 0x3524, 0x2011, 0xbc09, 0x0010, 0x2011, + 0xbc05, 0x080c, 0x56e3, 0x1904, 0x3556, 0x00c6, 0x2061, 0x0100, + 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, + 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3325, 0x210d, + 0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, + 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, + 0xae0b, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, + 0x65a4, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, + 0x4aa4, 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, + 0xc0fd, 0xa86a, 0x701f, 0x39ff, 0x2900, 0x6016, 0x2009, 0x0032, + 0x080c, 0xaedc, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, + 0x3556, 0x00ce, 0x0804, 0x3559, 0x080c, 0xae61, 0x0cb0, 0xa830, + 0x9086, 0x0100, 0x0904, 0x3556, 0x0804, 0x3524, 0x2061, 0x1a71, + 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, + 0x2061, 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, + 0x78aa, 0x012e, 0x0804, 0x3524, 0x900e, 0x2110, 0x0c88, 0x81ff, + 0x1904, 0x3556, 0x080c, 0x73bc, 0x0904, 0x3556, 0x0126, 0x2091, + 0x8000, 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, + 0x28a7, 0x080c, 0x58fd, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804, + 0x3559, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, + 0x2061, 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, + 0x8f68, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, + 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, + 0x3526, 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, + 0x00e1, 0x0288, 0x012e, 0x0804, 0x3559, 0x2001, 0x002a, 0x2004, + 0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3559, + 0x012e, 0x0804, 0x3556, 0x080c, 0xadcb, 0x0dd0, 0x7884, 0xd0fc, + 0x0904, 0x3aca, 0x00c6, 0x080c, 0x4aa4, 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, 0x3c50, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, + 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, + 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x7023, 0x0001, + 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2001, 0x199f, 0x2003, + 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, + 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3cbf, 0x080c, + 0x3c7e, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a66, 0x2079, + 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, + 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, + 0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe, 0x080c, + 0x3f7f, 0x080c, 0x3e84, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, + 0x0140, 0x1db8, 0x080c, 0x40c6, 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, 0x1820, + 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, + 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3e8e, 0x080c, 0x3c79, 0x0058, + 0x080c, 0x3c79, 0x080c, 0x3fea, 0x080c, 0x3f75, 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, 0x12ed, 0x2009, + 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, + 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3524, + 0x012e, 0x2021, 0x400c, 0x0804, 0x3526, 0x0016, 0x0026, 0x0036, + 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, + 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, + 0x3be9, 0x2048, 0x1f04, 0x3b9d, 0x7068, 0x2040, 0xa28c, 0xa390, + 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, + 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, + 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x00b0, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, + 0x0f7c, 0x000e, 0x080c, 0x4af0, 0x701f, 0x3b8d, 0x015e, 0x00de, + 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, + 0x3c4e, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, + 0x007f, 0x080c, 0x659e, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, + 0xb817, 0xfffd, 0x080c, 0xcff9, 0x015e, 0x00de, 0x009e, 0x008e, + 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x3556, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, + 0x00d6, 0x0156, 0x701f, 0x3c20, 0x7007, 0x0003, 0x0804, 0x3bde, + 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3526, 0x0076, + 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, 0x0f7c, 0x000e, 0x080c, 0x4af0, + 0x007e, 0x701f, 0x3b8d, 0x7023, 0x0001, 0x0005, 0x0804, 0x3524, + 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, + 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4aa4, + 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, 0x199f, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, + 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, 0x601a, 0x2061, + 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, + 0x080c, 0x4aa4, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, + 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084, - 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 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, 0x4aa5, 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, - 0x4aa5, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, + 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, + 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, + 0x080c, 0x4aa4, 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, 0x2c30, 0x1130, 0x9006, 0x080c, 0x2b88, + 0x9006, 0x080c, 0x2b6b, 0x7884, 0x9084, 0x0007, 0x0002, 0x3d0a, + 0x3d13, 0x3d1c, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x012e, + 0x0804, 0x3559, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, + 0x080c, 0x3ed8, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, + 0x200a, 0x080c, 0x3ed8, 0x0078, 0x080c, 0x73bc, 0x1128, 0x012e, + 0x2009, 0x0016, 0x0804, 0x3556, 0x81ff, 0x0128, 0x012e, 0x2021, + 0x400b, 0x0804, 0x3526, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2009, 0x0101, 0x210c, + 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, + 0x41a1, 0x080c, 0x40f1, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, + 0x2940, 0x2071, 0x1a66, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, + 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, + 0x2011, 0x0001, 0x080c, 0x4052, 0x080c, 0x2c38, 0x080c, 0x2c38, + 0x080c, 0x2c38, 0x080c, 0x2c38, 0x080c, 0x4052, 0x008e, 0x00ee, + 0x00fe, 0x080c, 0x3f7f, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, + 0x3e8e, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, + 0x2009, 0x0017, 0x080c, 0x3556, 0x0cf8, 0x2001, 0x020b, 0x2004, + 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, + 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, + 0x3f5d, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3e8e, 0x0804, + 0x3e3b, 0x080c, 0x40c6, 0x080c, 0x3fea, 0x080c, 0x3f40, 0x080c, + 0x3f75, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, + 0x080c, 0x3e8e, 0x00fe, 0x0804, 0x3e3b, 0x00fe, 0x080c, 0x3e84, + 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, + 0x080c, 0x3e8e, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, + 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a62, 0x2004, 0x9086, + 0x0000, 0x1904, 0x3d8b, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, + 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3e3b, 0x7884, 0xd0bc, + 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3e3b, 0xa013, 0x0019, + 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, + 0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, + 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, + 0x2009, 0x0040, 0x080c, 0x23d2, 0x2900, 0xa85a, 0xa813, 0x0019, + 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, + 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, + 0x3e12, 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, 0x3d45, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, + 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, + 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, + 0x080c, 0x12ed, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, + 0x2009, 0x0028, 0x080c, 0x23d2, 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, 0x3524, 0x012e, + 0x2021, 0x400c, 0x0804, 0x3526, 0x9085, 0x0001, 0x1d04, 0x3e8d, + 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, + 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a62, + 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x23d2, 0x2001, + 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, + 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086, 0x0000, + 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, + 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c, + 0xd0fc, 0x0d88, 0x080c, 0x40c6, 0x7000, 0x9086, 0x0000, 0x1d58, + 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, + 0x23d2, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, + 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936, + 0x080c, 0x2887, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, + 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, + 0x7852, 0x20a9, 0x0046, 0x1d04, 0x3ef3, 0x2091, 0x6000, 0x1f04, + 0x3ef3, 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, 0x3f13, 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, 0x2cef, 0x7827, 0x0020, 0x7843, + 0x0000, 0x9006, 0x080c, 0x2cef, 0x7827, 0x0048, 0x00fe, 0x0005, + 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a62, 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, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3c6f, + 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c, + 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, + 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818, + 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, 0x0092, 0x7016, 0x080c, 0x40c6, 0x00f6, 0x2071, + 0x1a62, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, + 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, + 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, + 0x0011, 0x080c, 0x4052, 0x2011, 0x0001, 0x080c, 0x4052, 0x00fe, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079, 0x0320, + 0x792c, 0xd1fc, 0x0904, 0x404f, 0x782b, 0x0002, 0x9026, 0xd19c, + 0x1904, 0x404b, 0x7000, 0x0002, 0x404f, 0x4000, 0x4030, 0x404b, + 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, + 0x080c, 0x4052, 0x0904, 0x404f, 0x080c, 0x4052, 0x0804, 0x404f, + 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, + 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, + 0x0de8, 0x080c, 0x3f5d, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, + 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, + 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, + 0x3ff4, 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, 0x0550, 0x8001, 0x0036, 0x0096, + 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, + 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, 0x9398, 0x4080, 0x231d, + 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, + 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, + 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, + 0x40bd, 0x40b4, 0x40ab, 0x40a2, 0x4099, 0x4090, 0x4087, 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, + 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, + 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, + 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, + 0x0086, 0x2071, 0x1a66, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, + 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x40ed, 0x40d9, + 0x40e4, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, + 0x4052, 0x190c, 0x4052, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, + 0x1d38, 0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe, + 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, + 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, + 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, + 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, + 0x080c, 0x4aa4, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, - 0x4162, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa5, 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, - 0x1a62, 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, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, - 0x9006, 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, - 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, - 0x0052, 0x0108, 0x0005, 0x0804, 0x351d, 0x7d98, 0x7c9c, 0x0804, - 0x3614, 0x080c, 0x56df, 0x1128, 0x3a00, 0x9084, 0x0010, 0x0904, - 0x3552, 0x080c, 0x73b0, 0x190c, 0x5fe0, 0x6040, 0x9084, 0x0020, - 0x0971, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4aee, 0x701f, 0x4249, - 0x0005, 0x080c, 0x56df, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, - 0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x3552, - 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3552, 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, 0x3552, 0x9288, 0x331e, 0x210d, 0x918c, 0x00ff, - 0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3552, - 0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, - 0x0006, 0x2009, 0x19b1, 0x9080, 0x297a, 0x2005, 0x200a, 0x000e, - 0x2009, 0x19b2, 0x9080, 0x297e, 0x2005, 0x200a, 0x6808, 0x908a, - 0x0100, 0x0a04, 0x3552, 0x908a, 0x0841, 0x1a04, 0x3552, 0x9084, - 0x0007, 0x1904, 0x3552, 0x680c, 0x9005, 0x0904, 0x3552, 0x6810, - 0x9005, 0x0904, 0x3552, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3552, - 0x8001, 0x0904, 0x3552, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3552, - 0x8001, 0x0904, 0x3552, 0x2009, 0x1981, 0x200b, 0x0000, 0x2001, - 0x1869, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, - 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e, - 0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x76c9, 0x080c, 0x69a0, - 0x080c, 0x69d4, 0x6808, 0x602a, 0x080c, 0x2344, 0x2009, 0x0170, - 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, - 0x080c, 0x28e1, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x43e0, - 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, 0x19b3, 0x20e9, 0x0001, - 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, - 0x080c, 0x85c6, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, - 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, - 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, - 0x7c7f, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, - 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, - 0x0010, 0x6003, 0x0001, 0x1f04, 0x433a, 0x00ce, 0x00c6, 0x2061, - 0x199c, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, - 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001, - 0x080c, 0x2b6b, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, - 0x9006, 0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0028, 0x9286, - 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, 0xd0ec, 0x0130, - 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, - 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, - 0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, - 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, - 0xaaaa, 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, - 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, - 0x080c, 0x73b0, 0x0128, 0x080c, 0x4fdc, 0x0110, 0x080c, 0x28a7, - 0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x43c8, 0x00e0, - 0x080c, 0x73b0, 0x1168, 0x2011, 0x7246, 0x080c, 0x84ca, 0x2011, - 0x7239, 0x080c, 0x85a4, 0x080c, 0x769d, 0x080c, 0x72e2, 0x0040, - 0x080c, 0x5eda, 0x0028, 0x6003, 0x0004, 0x2009, 0x43e0, 0x0020, - 0x080c, 0x68d5, 0x0804, 0x351d, 0x2001, 0x0170, 0x2004, 0x9084, - 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, - 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x354f, 0x2069, - 0x1847, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4af1, - 0x9006, 0x080c, 0x28a7, 0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0, - 0x11b0, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c, 0x3312, 0x0118, - 0x6130, 0xc18d, 0x6132, 0x080c, 0xd216, 0x0130, 0x080c, 0x73d3, - 0x1118, 0x080c, 0x7388, 0x0038, 0x080c, 0x72e2, 0x0020, 0x080c, - 0x5fe0, 0x080c, 0x5eda, 0x0804, 0x351d, 0x81ff, 0x1904, 0x354f, - 0x080c, 0x73b0, 0x1110, 0x0804, 0x354f, 0x6194, 0x81ff, 0x01a8, - 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, - 0x4af1, 0x701f, 0x351b, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, - 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, - 0x2019, 0xffff, 0x4304, 0x655c, 0x9588, 0x331e, 0x210d, 0x918c, - 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, - 0x080c, 0x6600, 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, 0x5f6b, - 0x0804, 0x443a, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x4aa5, - 0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x080c, 0x56d0, 0xd0b4, - 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, - 0x908e, 0x0080, 0x0508, 0x080c, 0x330d, 0x1148, 0xb800, 0xd08c, - 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, - 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcce4, 0x1120, 0x2009, - 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x44c8, 0x0005, - 0x080c, 0x4ad8, 0x0904, 0x3552, 0x20a9, 0x002b, 0xb8c4, 0x20e0, - 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, - 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, - 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x0070, 0x20a9, - 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, - 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7c, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af1, 0x81ff, 0x1904, - 0x354f, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x6772, 0x0904, - 0x354f, 0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, - 0x354f, 0xa974, 0xaa94, 0x0804, 0x351d, 0x080c, 0x56d8, 0x0904, - 0x351d, 0x701f, 0x4512, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, - 0x354f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552, 0x080c, 0x4ad8, - 0x0904, 0x3552, 0x080c, 0x696a, 0x0120, 0x080c, 0x6972, 0x1904, - 0x3552, 0x080c, 0x67f7, 0x0904, 0x354f, 0x2019, 0x0004, 0x900e, - 0x080c, 0x6784, 0x0904, 0x354f, 0x7984, 0x7a88, 0x04c9, 0x08a8, - 0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4ad6, 0x01e0, 0x080c, - 0x696a, 0x0118, 0x080c, 0x6972, 0x11b0, 0x080c, 0x67f7, 0x2009, - 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6784, - 0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, - 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x56d8, 0x0110, + 0x4169, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa4, 0xa813, + 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, + 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, + 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, + 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009, + 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, + 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 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, 0x4aa4, 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, 0x4aa4, + 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, + 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, + 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x4169, + 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa4, 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, 0x1a62, + 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, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, + 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006, + 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, + 0x0108, 0x0005, 0x0804, 0x3524, 0x7d98, 0x7c9c, 0x0804, 0x361b, + 0x080c, 0x73bc, 0x190c, 0x5fdf, 0x6040, 0x9084, 0x0020, 0x09b1, + 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0x2039, 0x0001, 0x080c, 0x4aed, 0x701f, 0x4248, 0x0005, + 0x080c, 0x56de, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, + 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x3559, 0x6804, + 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3559, 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, 0x3559, 0x9288, 0x3325, 0x210d, 0x918c, 0x00ff, 0x6166, + 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3559, 0x605e, + 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, + 0x2009, 0x19b1, 0x9080, 0x297a, 0x2005, 0x200a, 0x000e, 0x2009, + 0x19b2, 0x9080, 0x297e, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, + 0x0a04, 0x3559, 0x908a, 0x0841, 0x1a04, 0x3559, 0x9084, 0x0007, + 0x1904, 0x3559, 0x680c, 0x9005, 0x0904, 0x3559, 0x6810, 0x9005, + 0x0904, 0x3559, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3559, 0x8001, + 0x0904, 0x3559, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3559, 0x8001, + 0x0904, 0x3559, 0x2009, 0x1981, 0x200b, 0x0000, 0x2001, 0x1869, + 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a, + 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007, + 0x9084, 0x00ff, 0x6052, 0x080c, 0x76d5, 0x080c, 0x69a8, 0x080c, + 0x69dc, 0x6808, 0x602a, 0x080c, 0x2344, 0x2009, 0x0170, 0x200b, + 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, + 0x28e1, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x43df, 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, 0x19b3, 0x20e9, 0x0001, 0x4001, + 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c, + 0x85ef, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, + 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, + 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7c8b, + 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, + 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, + 0x6003, 0x0001, 0x1f04, 0x4339, 0x00ce, 0x00c6, 0x2061, 0x199c, + 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, + 0x0000, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001, 0x080c, + 0x2b6b, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, + 0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0028, 0x9286, 0x8000, + 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, 0xd0ec, 0x0130, 0x2011, + 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, + 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, + 0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, + 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, + 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6, + 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, + 0x73bc, 0x0128, 0x080c, 0x4fdb, 0x0110, 0x080c, 0x28a7, 0x60d4, + 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x43c7, 0x00e0, 0x080c, + 0x73bc, 0x1168, 0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245, + 0x080c, 0x85cd, 0x080c, 0x76a9, 0x080c, 0x72ee, 0x0040, 0x080c, + 0x5ed9, 0x0028, 0x6003, 0x0004, 0x2009, 0x43df, 0x0020, 0x080c, + 0x68d4, 0x0804, 0x3524, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, + 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, + 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x3556, 0x2069, 0x1847, + 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4af0, 0x9006, + 0x080c, 0x28a7, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x11b0, + 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x3319, 0x0118, 0x6130, + 0xc18d, 0x6132, 0x080c, 0xd230, 0x0130, 0x080c, 0x73df, 0x1118, + 0x080c, 0x7394, 0x0038, 0x080c, 0x72ee, 0x0020, 0x080c, 0x5fdf, + 0x080c, 0x5ed9, 0x0804, 0x3524, 0x81ff, 0x1904, 0x3556, 0x080c, + 0x73bc, 0x1110, 0x0804, 0x3556, 0x6194, 0x81ff, 0x01a8, 0x704f, + 0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x4af0, + 0x701f, 0x3522, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, + 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, + 0xffff, 0x4304, 0x655c, 0x9588, 0x3325, 0x210d, 0x918c, 0x00ff, + 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, + 0x65ff, 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, 0x5f6a, 0x0804, + 0x4439, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3556, 0x080c, 0x56cf, 0xd0b4, 0x0558, + 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, + 0x0080, 0x0508, 0x080c, 0x3314, 0x1148, 0xb800, 0xd08c, 0x11d8, + 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009, 0x0003, + 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x44c7, 0x0005, 0x080c, + 0x4ad7, 0x0904, 0x3559, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, + 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, + 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, + 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x0070, 0x20a9, 0x0004, + 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, + 0x000a, 0x2098, 0x080c, 0x0f7c, 0x8906, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af0, 0x81ff, 0x1904, 0x3556, + 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6771, 0x0904, 0x3556, + 0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x3556, + 0xa974, 0xaa94, 0x0804, 0x3524, 0x080c, 0x56d7, 0x0904, 0x3524, + 0x701f, 0x4511, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x3556, + 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x080c, 0x4ad7, 0x0904, + 0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559, + 0x080c, 0x67f6, 0x0904, 0x3556, 0x2019, 0x0004, 0x900e, 0x080c, + 0x6783, 0x0904, 0x3556, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, + 0x908a, 0x1000, 0x12f8, 0x080c, 0x4ad5, 0x01e0, 0x080c, 0x6972, + 0x0118, 0x080c, 0x697a, 0x11b0, 0x080c, 0x67f6, 0x2009, 0x0002, + 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6783, 0x2009, + 0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, + 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x56d7, 0x0110, 0x9006, + 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, + 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, + 0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, + 0x0005, 0x080c, 0x65ff, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, + 0x9108, 0x080c, 0x8501, 0x0005, 0x81ff, 0x1904, 0x3556, 0x798c, + 0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abb, 0x0904, + 0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559, + 0x080c, 0x66c6, 0x0904, 0x3556, 0x080c, 0x677a, 0x0904, 0x3556, + 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c, + 0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, + 0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170, + 0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x677a, 0x1170, + 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, + 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, - 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, - 0x1800, 0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, - 0x1ec8, 0x0005, 0x080c, 0x6600, 0x1138, 0x2200, 0x8003, 0x800b, - 0x810b, 0x9108, 0x080c, 0x84d8, 0x0005, 0x81ff, 0x1904, 0x354f, - 0x798c, 0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abc, - 0x0904, 0x3552, 0x080c, 0x696a, 0x0120, 0x080c, 0x6972, 0x1904, - 0x3552, 0x080c, 0x66c7, 0x0904, 0x354f, 0x080c, 0x677b, 0x0904, - 0x354f, 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x351d, 0x0804, - 0x451d, 0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, - 0x080c, 0x4ac9, 0x01a0, 0x080c, 0x696a, 0x0118, 0x080c, 0x6972, - 0x1170, 0x080c, 0x66c7, 0x2009, 0x0002, 0x0128, 0x080c, 0x677b, - 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d8, - 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, - 0x0005, 0x81ff, 0x1904, 0x354f, 0x798c, 0x2001, 0x197f, 0x918c, - 0x8000, 0x2102, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x696a, - 0x0120, 0x080c, 0x6972, 0x1904, 0x3552, 0x080c, 0x66c7, 0x0904, - 0x354f, 0x080c, 0x6769, 0x0904, 0x354f, 0x2001, 0x197f, 0x2004, - 0xd0fc, 0x1904, 0x351d, 0x0804, 0x451d, 0xa9a0, 0x2001, 0x197f, - 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac9, 0x01a0, 0x080c, - 0x696a, 0x0118, 0x080c, 0x6972, 0x1170, 0x080c, 0x66c7, 0x2009, - 0x0002, 0x0128, 0x080c, 0x6769, 0x1170, 0x2009, 0x0003, 0xa897, - 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, - 0xd0fc, 0x1128, 0x080c, 0x56d8, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x351d, - 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x56e4, 0x1904, 0x354f, - 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, 0x351d, 0x78a8, 0x909c, 0x0003, - 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x354f, 0x625c, 0x7884, - 0x9206, 0x1904, 0x46ca, 0x080c, 0x85b0, 0x2001, 0xfff4, 0x2009, - 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006, - 0x78a8, 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a7f, - 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, - 0x2003, 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, - 0x003e, 0x000e, 0x000e, 0x0804, 0x4af1, 0x000e, 0x2031, 0x0000, - 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, - 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, - 0x46ea, 0x0005, 0x81ff, 0x1904, 0x354f, 0x080c, 0x4ad8, 0x0904, - 0x3552, 0x080c, 0x696a, 0x1904, 0x354f, 0x00c6, 0x080c, 0x4aa5, - 0x00ce, 0x0904, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x7ea8, 0x080c, 0xcc8a, 0x0904, 0x354f, 0x7007, 0x0003, 0x701f, - 0x4704, 0x0005, 0x080c, 0x4207, 0x0006, 0x0036, 0x2001, 0x1a7f, - 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, - 0x2003, 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, - 0x003e, 0x000e, 0x0804, 0x351d, 0xa830, 0x9086, 0x0100, 0x0904, - 0x354f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x0804, 0x4af1, 0x9006, 0x080c, 0x28a7, 0x78a8, 0x9084, 0x00ff, - 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0, - 0x0110, 0x080c, 0x5fe0, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552, - 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3552, - 0x2100, 0x080c, 0x2871, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x2061, 0x19fa, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, - 0x6077, 0x0000, 0x080c, 0x73b0, 0x1158, 0x080c, 0x7698, 0x080c, - 0x601b, 0x9085, 0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x00d0, - 0x080c, 0xadb8, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, - 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, - 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f06, - 0x080c, 0x8562, 0x7984, 0x080c, 0x73b0, 0x1110, 0x2009, 0x00ff, - 0x7a88, 0x080c, 0x4580, 0x012e, 0x00ce, 0x002e, 0x0804, 0x351d, - 0x7984, 0x080c, 0x659f, 0x2b08, 0x1904, 0x3552, 0x0804, 0x351d, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x60dc, 0xd0ac, - 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x354f, 0x080c, - 0x4aa5, 0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x7984, 0x9192, - 0x0021, 0x1a04, 0x3552, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, - 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4aee, 0x701f, - 0x47b8, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x518e, 0x0005, - 0x2009, 0x0080, 0x080c, 0x6600, 0x1118, 0x080c, 0x696a, 0x0120, - 0x2021, 0x400a, 0x0804, 0x351f, 0x00d6, 0x0096, 0xa964, 0xaa6c, - 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, - 0x4851, 0x90be, 0x0112, 0x0904, 0x4851, 0x90be, 0x0113, 0x0904, - 0x4851, 0x90be, 0x0114, 0x0904, 0x4851, 0x90be, 0x0117, 0x0904, - 0x4851, 0x90be, 0x011a, 0x0904, 0x4851, 0x90be, 0x011c, 0x0904, - 0x4851, 0x90be, 0x0121, 0x0904, 0x4838, 0x90be, 0x0131, 0x0904, - 0x4838, 0x90be, 0x0171, 0x0904, 0x4851, 0x90be, 0x0173, 0x0904, - 0x4851, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, - 0x485c, 0x90be, 0x0212, 0x0904, 0x4845, 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, 0x3552, 0x7028, - 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, - 0x0007, 0x080c, 0x489a, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, - 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x489a, 0x00c8, - 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, - 0x20a9, 0x0001, 0x080c, 0x48a7, 0x00b8, 0x7028, 0x9080, 0x000e, - 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, - 0x48a7, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, - 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4aa5, 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, 0xcca5, - 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, - 0x4891, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, - 0x354f, 0xa820, 0x9086, 0x8001, 0x1904, 0x351d, 0x2009, 0x0004, - 0x0804, 0x354f, 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, 0x354f, - 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, - 0x354f, 0x7984, 0x78a8, 0x2040, 0x080c, 0xadb1, 0x1120, 0x9182, - 0x007f, 0x0a04, 0x3552, 0x9186, 0x00ff, 0x0904, 0x3552, 0x9182, - 0x0800, 0x1a04, 0x3552, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140, - 0x6080, 0x924e, 0x0904, 0x3552, 0x99cc, 0xff00, 0x0904, 0x3552, - 0x0126, 0x2091, 0x8000, 0x080c, 0x49b8, 0x0904, 0x4938, 0x0086, - 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, - 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, - 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, - 0xd88c, 0x1128, 0x080c, 0x696a, 0x0110, 0xc89d, 0x0438, 0x900e, - 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, - 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, - 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, - 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, - 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x351f, 0x000e, 0x00ce, - 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, - 0xae95, 0x0904, 0x498d, 0x2b00, 0x6012, 0x080c, 0xcf90, 0x2e58, - 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa5, 0x00ce, 0x2b70, 0x1158, - 0x080c, 0xae47, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, - 0x0002, 0x0804, 0x354f, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, - 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, - 0x1110, 0x080c, 0x31bc, 0x6023, 0x0001, 0x9006, 0x080c, 0x653c, - 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x6550, 0x2009, 0x0003, - 0x0030, 0x2001, 0x0002, 0x080c, 0x6550, 0x2009, 0x0002, 0x080c, - 0xaec2, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, - 0xb8cc, 0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, - 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, - 0x0003, 0x701f, 0x499c, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, - 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, - 0x562d, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x351d, 0x080c, 0x6820, - 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x351d, - 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a07, 0x902e, 0x080c, - 0xadb1, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, - 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, - 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a18, 0x2428, 0x94ce, 0x007f, - 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, - 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, - 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, - 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, - 0x080c, 0x690a, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x696a, - 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, - 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, - 0x86ff, 0x0918, 0x080c, 0xadb1, 0x1900, 0x2001, 0x4008, 0x0090, - 0x8420, 0x8e70, 0x1f04, 0x49ce, 0x85ff, 0x1130, 0x2001, 0x4009, - 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x659f, 0x1dd0, 0xbb12, - 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x4aa5, 0x1120, - 0x2009, 0x0002, 0x0804, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x7884, 0x9005, 0x0904, 0x3552, 0x9096, 0x00ff, 0x0120, - 0x9092, 0x0004, 0x1a04, 0x3552, 0x2010, 0x2918, 0x080c, 0x3162, - 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, - 0x4a5a, 0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x351d, 0x2009, - 0x0004, 0x0804, 0x354f, 0x7984, 0x080c, 0xadb1, 0x1120, 0x9182, - 0x007f, 0x0a04, 0x3552, 0x9186, 0x00ff, 0x0904, 0x3552, 0x9182, - 0x0800, 0x1a04, 0x3552, 0x2001, 0x9000, 0x080c, 0x5688, 0x1904, - 0x354f, 0x0804, 0x351d, 0xa998, 0x080c, 0xadb1, 0x1118, 0x9182, - 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, - 0x2001, 0x9000, 0x080c, 0x5688, 0x11a8, 0x0060, 0xa897, 0x4005, + 0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197f, 0x918c, 0x8000, + 0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120, + 0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556, + 0x080c, 0x6768, 0x0904, 0x3556, 0x2001, 0x197f, 0x2004, 0xd0fc, + 0x1904, 0x3524, 0x0804, 0x451c, 0xa9a0, 0x2001, 0x197f, 0x918c, + 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac8, 0x01a0, 0x080c, 0x6972, + 0x0118, 0x080c, 0x697a, 0x1170, 0x080c, 0x66c6, 0x2009, 0x0002, + 0x0128, 0x080c, 0x6768, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c, 0x0fff, 0x0198, - 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, - 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, - 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x6600, 0x1130, - 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, - 0x0005, 0xa998, 0x080c, 0x6600, 0x1130, 0xae9c, 0x9684, 0x3fff, - 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, - 0x7e84, 0x2608, 0x080c, 0x6600, 0x1108, 0x0008, 0x905e, 0x8bff, - 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, - 0x1031, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, - 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, - 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, - 0x7007, 0x0002, 0x701f, 0x351d, 0x0005, 0x00f6, 0x0126, 0x2091, - 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, - 0x0e04, 0x4b22, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, - 0x0804, 0x4b88, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, - 0x189e, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, - 0x7038, 0x2060, 0x080c, 0x0fff, 0x0904, 0x4b80, 0xa84b, 0x0000, - 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, - 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, - 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, - 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, - 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, - 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, - 0x0fff, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, - 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, - 0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0058, - 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, - 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4baa, - 0x4baa, 0x4bac, 0x4baa, 0x4baa, 0x4baa, 0x4bb0, 0x4baa, 0x4baa, - 0x4baa, 0x4bb4, 0x4baa, 0x4baa, 0x4baa, 0x4bb8, 0x4baa, 0x4baa, - 0x4baa, 0x4bbc, 0x4baa, 0x4baa, 0x4baa, 0x4bc0, 0x4baa, 0x4baa, - 0x4baa, 0x4bc5, 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898, - 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, - 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, - 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b83, 0xa2d6, 0xa3da, 0xa4de, - 0x0804, 0x4b83, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, - 0x4c5c, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5b, 0x00f6, 0x2079, - 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, - 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, - 0x1a0c, 0x0dd5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, - 0x1904, 0x4c5e, 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938, - 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, - 0xa04a, 0x0804, 0x4c5e, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, - 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, - 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x119b, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1031, 0x7048, - 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, - 0x080c, 0x1031, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, - 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, - 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, - 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, - 0x0dd5, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, - 0x0002, 0x9080, 0x2090, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, - 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, - 0x001b, 0x0002, 0x4c7d, 0x4c7d, 0x4c7f, 0x4c7d, 0x4c7d, 0x4c7d, - 0x4c84, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c89, 0x4c7d, 0x4c7d, 0x4c7d, - 0x4c8e, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c93, 0x4c7d, 0x4c7d, 0x4c7d, - 0x4c98, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c9d, 0x080c, 0x0dd5, 0xaa74, - 0xab78, 0xac7c, 0x0804, 0x4c09, 0xaa84, 0xab88, 0xac8c, 0x0804, - 0x4c09, 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c09, 0xaaa4, 0xaba8, - 0xacac, 0x0804, 0x4c09, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4c09, - 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c09, 0xaad4, 0xabd8, 0xacdc, - 0x0804, 0x4c09, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, - 0x007e, 0x080c, 0x6600, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, - 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b05, 0x00ce, 0x00be, - 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x56d0, 0xd0c4, - 0x0120, 0x2011, 0x8014, 0x080c, 0x4b05, 0x002e, 0x0005, 0x81ff, - 0x1904, 0x354f, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, - 0xc0ac, 0x6032, 0x080c, 0x73b0, 0x1158, 0x080c, 0x7698, 0x080c, - 0x601b, 0x9085, 0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x0010, - 0x080c, 0x5eda, 0x012e, 0x0804, 0x351d, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007, - 0x0804, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008, 0x0804, - 0x354f, 0x080c, 0x330d, 0x0128, 0x7984, 0x080c, 0x659f, 0x1904, - 0x3552, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x2b00, 0x7026, 0x080c, - 0x696a, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, - 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, - 0x351d, 0x080c, 0x4aa5, 0x0904, 0x354f, 0x9006, 0xa866, 0xa832, - 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd3e, 0x0904, 0x354f, 0x7888, - 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f, - 0x4d7e, 0x0005, 0x2061, 0x1800, 0x080c, 0x56e4, 0x2009, 0x0007, - 0x1578, 0x080c, 0x6962, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, - 0x330d, 0x0120, 0xa998, 0x080c, 0x659f, 0x1530, 0x080c, 0x4ad6, - 0x0518, 0x080c, 0x696a, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, - 0x900e, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xcd3e, 0x11e0, - 0xa89c, 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 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, 0x7024, 0x2058, 0x1110, 0x0804, 0x562d, 0x900e, 0x080c, - 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, - 0x351d, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007, 0x0804, 0x354f, - 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa5, 0x1120, - 0x2009, 0x0002, 0x0804, 0x354f, 0x900e, 0x2130, 0x7126, 0x7132, - 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, - 0x080c, 0x6600, 0x1904, 0x4e20, 0x080c, 0x696a, 0x0138, 0x080c, - 0x6972, 0x0120, 0x080c, 0x690a, 0x1904, 0x4e20, 0xd794, 0x1110, - 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, - 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, - 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a7, 0x0048, 0x20a9, - 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x48a7, - 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x696a, - 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x6820, 0x1108, - 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, - 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, 0x489a, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, - 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, - 0x8108, 0x080c, 0xadb1, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, - 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, - 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, - 0x0804, 0x4db0, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x351d, - 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, - 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, + 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc, + 0x1128, 0x080c, 0x56d7, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x3524, 0x080c, + 0x4ad7, 0x0904, 0x3559, 0x080c, 0x56e3, 0x1904, 0x3556, 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, 0x3524, 0x78a8, 0x909c, 0x0003, 0xd0b4, + 0x1148, 0x939a, 0x0003, 0x1a04, 0x3556, 0x625c, 0x7884, 0x9206, + 0x1904, 0x46c9, 0x080c, 0x85d9, 0x2001, 0xfff4, 0x2009, 0x000c, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006, 0x78a8, + 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c, + 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003, + 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e, + 0x000e, 0x000e, 0x0804, 0x4af0, 0x000e, 0x2031, 0x0000, 0x2061, + 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, + 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x46e9, + 0x0005, 0x81ff, 0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, + 0x080c, 0x6972, 0x1904, 0x3556, 0x00c6, 0x080c, 0x4aa4, 0x00ce, + 0x0904, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, + 0x080c, 0xcca4, 0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x4703, + 0x0005, 0x080c, 0x420e, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c, + 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003, + 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e, + 0x000e, 0x0804, 0x3524, 0xa830, 0x9086, 0x0100, 0x0904, 0x3556, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, + 0x4af0, 0x9006, 0x080c, 0x28a7, 0x78a8, 0x9084, 0x00ff, 0x9086, + 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x0110, + 0x080c, 0x5fdf, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x7984, + 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3559, 0x2100, + 0x080c, 0x2871, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, + 0x19fa, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, + 0x0000, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a, + 0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x00d0, 0x080c, + 0xadd2, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, + 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, + 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c, + 0x858b, 0x7984, 0x080c, 0x73bc, 0x1110, 0x2009, 0x00ff, 0x7a88, + 0x080c, 0x457f, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3524, 0x7984, + 0x080c, 0x659e, 0x2b08, 0x1904, 0x3559, 0x0804, 0x3524, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3556, 0x60dc, 0xd0ac, 0x1130, + 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556, 0x080c, 0x4aa4, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9192, 0x0021, + 0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, + 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4aed, 0x701f, 0x47b7, + 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x518d, 0x0005, 0x2009, + 0x0080, 0x080c, 0x65ff, 0x1118, 0x080c, 0x6972, 0x0120, 0x2021, + 0x400a, 0x0804, 0x3526, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, + 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4850, + 0x90be, 0x0112, 0x0904, 0x4850, 0x90be, 0x0113, 0x0904, 0x4850, + 0x90be, 0x0114, 0x0904, 0x4850, 0x90be, 0x0117, 0x0904, 0x4850, + 0x90be, 0x011a, 0x0904, 0x4850, 0x90be, 0x011c, 0x0904, 0x4850, + 0x90be, 0x0121, 0x0904, 0x4837, 0x90be, 0x0131, 0x0904, 0x4837, + 0x90be, 0x0171, 0x0904, 0x4850, 0x90be, 0x0173, 0x0904, 0x4850, + 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x485b, + 0x90be, 0x0212, 0x0904, 0x4844, 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, 0x3559, 0x7028, 0x9080, + 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, + 0x080c, 0x4899, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, + 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4899, 0x00c8, 0x7028, + 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, + 0x0001, 0x080c, 0x48a6, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, + 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a6, + 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, + 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4aa4, 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, 0xccbf, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4890, + 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3556, + 0xa820, 0x9086, 0x8001, 0x1904, 0x3524, 0x2009, 0x0004, 0x0804, + 0x3556, 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, 0x3556, 0x60dc, + 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556, + 0x7984, 0x78a8, 0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f, + 0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800, + 0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140, 0x6080, + 0x924e, 0x0904, 0x3559, 0x99cc, 0xff00, 0x0904, 0x3559, 0x0126, + 0x2091, 0x8000, 0x080c, 0x49b7, 0x0904, 0x4937, 0x0086, 0x90c6, + 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, 0xbb1c, + 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, 0xbb2c, + 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, 0xd88c, + 0x1128, 0x080c, 0x6972, 0x0110, 0xc89d, 0x0438, 0x900e, 0x080c, + 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e, + 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, + 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, + 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, + 0x000a, 0x2020, 0x012e, 0x0804, 0x3526, 0x000e, 0x00ce, 0x2b00, + 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xaeaf, + 0x0904, 0x498c, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2e58, 0x00ee, + 0x00e6, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x2b70, 0x1158, 0x080c, + 0xae61, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, + 0x0804, 0x3556, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, + 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, 0x1110, + 0x080c, 0x31bf, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0xd89c, + 0x0138, 0x2001, 0x0004, 0x080c, 0x654f, 0x2009, 0x0003, 0x0030, + 0x2001, 0x0002, 0x080c, 0x654f, 0x2009, 0x0002, 0x080c, 0xaedc, + 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8cc, + 0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, + 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, + 0x701f, 0x499b, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058, + 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, 0x562c, + 0x900e, 0xa868, 0xd0f4, 0x1904, 0x3524, 0x080c, 0x681f, 0x1108, + 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524, 0x00e6, + 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a06, 0x902e, 0x080c, 0xadcb, + 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, + 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8, + 0x2100, 0x9406, 0x1904, 0x4a17, 0x2428, 0x94ce, 0x007f, 0x1120, + 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, + 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058, + 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8, + 0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, 0x080c, + 0x6912, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x6972, 0x1540, + 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, + 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, + 0x0918, 0x080c, 0xadcb, 0x1900, 0x2001, 0x4008, 0x0090, 0x8420, + 0x8e70, 0x1f04, 0x49cd, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, + 0x2001, 0x0001, 0x0030, 0x080c, 0x659e, 0x1dd0, 0xbb12, 0xba16, + 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, + 0x7884, 0x9005, 0x0904, 0x3559, 0x9096, 0x00ff, 0x0120, 0x9092, + 0x0004, 0x1a04, 0x3559, 0x2010, 0x2918, 0x080c, 0x3165, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4a59, + 0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x3524, 0x2009, 0x0004, + 0x0804, 0x3556, 0x7984, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f, + 0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800, + 0x1a04, 0x3559, 0x2001, 0x9000, 0x080c, 0x5687, 0x1904, 0x3556, + 0x0804, 0x3524, 0xa998, 0x080c, 0xadcb, 0x1118, 0x9182, 0x007f, + 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, + 0x9000, 0x080c, 0x5687, 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, 0x0fff, 0x0198, 0x9006, + 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, + 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, + 0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x65ff, 0x1130, 0x7e88, + 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, + 0xa998, 0x080c, 0x65ff, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, + 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, + 0x2608, 0x080c, 0x65ff, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, + 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1031, + 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, + 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, - 0x0002, 0x701f, 0x4e5c, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, - 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, - 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4db0, 0x7124, - 0x810b, 0x0804, 0x351d, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, - 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3552, - 0x9502, 0x0a04, 0x3552, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, - 0x3552, 0x9502, 0x0a04, 0x3552, 0x9284, 0xff00, 0x8007, 0x90e2, - 0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x9284, 0x00ff, - 0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x9384, - 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04, - 0x3552, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502, - 0x0a04, 0x3552, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, - 0x3552, 0x9502, 0x0a04, 0x3552, 0x9484, 0x00ff, 0x90e2, 0x0020, - 0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x2061, 0x1989, 0x6102, - 0x6206, 0x630a, 0x640e, 0x0804, 0x351d, 0x080c, 0x4aa5, 0x0904, - 0x354f, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, - 0x9080, 0x0019, 0xaf60, 0x080c, 0x4aee, 0x701f, 0x4ee0, 0x0005, - 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, - 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, - 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, - 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, - 0x0904, 0x4f61, 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4f61, - 0x680c, 0x9005, 0x0904, 0x4f61, 0x9082, 0xff01, 0x1a04, 0x4f61, - 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f61, 0x6824, 0x2008, 0x9082, - 0x0008, 0x0a04, 0x4f61, 0x9182, 0x0400, 0x1a04, 0x4f61, 0x0056, - 0x2029, 0x0000, 0x080c, 0x8ad2, 0x005e, 0x6944, 0x6820, 0x9102, - 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c, - 0x9102, 0x0678, 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1018, - 0x2900, 0x0904, 0x4f7b, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6, - 0x2059, 0x0000, 0x080c, 0x898e, 0x00be, 0x00ee, 0x0558, 0x080c, - 0x86e8, 0x080c, 0x872e, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061, - 0x0100, 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a62, - 0x630a, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, - 0x351d, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3552, - 0x00e6, 0x2071, 0x1930, 0x080c, 0x8b63, 0x080c, 0x8b72, 0x080c, - 0x897d, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x1031, 0x2001, - 0x188a, 0x2003, 0x0000, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, - 0x0804, 0x354f, 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904, - 0x4fda, 0x080c, 0x8978, 0x0904, 0x4fda, 0x2001, 0x0101, 0x200c, - 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, - 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x897d, - 0x2001, 0x0035, 0x080c, 0x15ee, 0x00c6, 0x2061, 0x193c, 0x6004, - 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, - 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, 0x88b9, 0x0120, - 0x2f00, 0x080c, 0x8943, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091, - 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c, - 0x1031, 0x2001, 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003, - 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8b63, 0x080c, 0x8b72, - 0x00ee, 0x012e, 0x0804, 0x351d, 0x0006, 0x080c, 0x56d0, 0xd0cc, - 0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0xd0bc, 0x000e, 0x0005, - 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x351d, - 0x83ff, 0x1904, 0x3552, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3552, - 0x2019, 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x3552, 0x7986, - 0x6276, 0x0804, 0x351d, 0x080c, 0x56e4, 0x1904, 0x354f, 0x7c88, - 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa5, 0x0904, 0x354f, 0x900e, - 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, - 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, - 0x080c, 0x696a, 0x0118, 0x080c, 0x6972, 0x1148, 0x20a9, 0x0001, - 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, - 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, - 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208, - 0x0804, 0x351d, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, - 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, - 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e9, - 0x7007, 0x0002, 0x701f, 0x505d, 0x0005, 0x7030, 0x9005, 0x1178, - 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, - 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x501b, 0x7224, - 0x900e, 0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208, 0x0804, 0x351d, - 0x00f6, 0x00e6, 0x080c, 0x56e4, 0x2009, 0x0007, 0x1904, 0x50f0, - 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x50f0, - 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1018, 0x2009, - 0x0002, 0x0904, 0x50f0, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, - 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, - 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x696a, 0x0118, - 0x080c, 0x6972, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, - 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, - 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, - 0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208, 0x009e, 0xa897, 0x4000, - 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031, - 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, - 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, - 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, - 0xa09f, 0x50fc, 0x000e, 0xa0a2, 0x080c, 0x10e9, 0x9006, 0x0048, - 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, - 0x0dd5, 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, - 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, - 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, - 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, - 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, - 0x8f3f, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, - 0x1031, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6c79, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, - 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, - 0x696a, 0x0118, 0x080c, 0x6972, 0x1148, 0xb814, 0x20a9, 0x0001, + 0x0002, 0x701f, 0x3524, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, + 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04, + 0x4b21, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, + 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, + 0x4b87, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e, + 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, + 0x2060, 0x080c, 0x0fff, 0x0904, 0x4b7f, 0xa84b, 0x0000, 0x2900, + 0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0098, + 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210, + 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, + 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, + 0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x2060, + 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0fff, + 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, + 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, + 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0058, 0x2262, + 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, + 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4ba9, 0x4ba9, + 0x4bab, 0x4ba9, 0x4ba9, 0x4ba9, 0x4baf, 0x4ba9, 0x4ba9, 0x4ba9, + 0x4bb3, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bb7, 0x4ba9, 0x4ba9, 0x4ba9, + 0x4bbb, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bbf, 0x4ba9, 0x4ba9, 0x4ba9, + 0x4bc4, 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, + 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, + 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, + 0xa3ca, 0xa4ce, 0x0804, 0x4b82, 0xa2d6, 0xa3da, 0xa4de, 0x0804, + 0x4b82, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, 0x4c5b, + 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5a, 0x00f6, 0x2079, 0x0000, + 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, + 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, + 0x0dd5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, + 0x4c5d, 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938, 0x2040, + 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa04a, + 0x0804, 0x4c5d, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, + 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, + 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x119b, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1031, 0x7048, 0x8001, + 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, + 0x1031, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, + 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, + 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e, + 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0dd5, + 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, + 0x9080, 0x2090, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, + 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, + 0x0002, 0x4c7c, 0x4c7c, 0x4c7e, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c83, + 0x4c7c, 0x4c7c, 0x4c7c, 0x4c88, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c8d, + 0x4c7c, 0x4c7c, 0x4c7c, 0x4c92, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c97, + 0x4c7c, 0x4c7c, 0x4c7c, 0x4c9c, 0x080c, 0x0dd5, 0xaa74, 0xab78, + 0xac7c, 0x0804, 0x4c08, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4c08, + 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c08, 0xaaa4, 0xaba8, 0xacac, + 0x0804, 0x4c08, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4c08, 0xaac4, + 0xabc8, 0xaccc, 0x0804, 0x4c08, 0xaad4, 0xabd8, 0xacdc, 0x0804, + 0x4c08, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e, + 0x080c, 0x65ff, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019, + 0x0000, 0x2011, 0x801b, 0x080c, 0x4b04, 0x00ce, 0x00be, 0x003e, + 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x56cf, 0xd0c4, 0x0120, + 0x2011, 0x8014, 0x080c, 0x4b04, 0x002e, 0x0005, 0x81ff, 0x1904, + 0x3556, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, + 0x6032, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a, + 0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x0010, 0x080c, + 0x5ed9, 0x012e, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001, + 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, + 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3556, + 0x080c, 0x3314, 0x0128, 0x7984, 0x080c, 0x659e, 0x1904, 0x3559, + 0x080c, 0x4ad7, 0x0904, 0x3559, 0x2b00, 0x7026, 0x080c, 0x6972, + 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x681f, + 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524, + 0x080c, 0x4aa4, 0x0904, 0x3556, 0x9006, 0xa866, 0xa832, 0xa868, + 0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x0904, 0x3556, 0x7888, 0xd094, + 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f, 0x4d7d, + 0x0005, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1578, + 0x080c, 0x696a, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, 0x3314, + 0x0120, 0xa998, 0x080c, 0x659e, 0x1530, 0x080c, 0x4ad5, 0x0518, + 0x080c, 0x6972, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e, + 0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xcd58, 0x11e0, 0xa89c, + 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 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, + 0x7024, 0x2058, 0x1110, 0x0804, 0x562c, 0x900e, 0x080c, 0x681f, + 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524, + 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556, 0x7f84, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa4, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3556, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, + 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, + 0x65ff, 0x1904, 0x4e1f, 0x080c, 0x6972, 0x0138, 0x080c, 0x697a, + 0x0120, 0x080c, 0x6912, 0x1904, 0x4e1f, 0xd794, 0x1110, 0xd784, + 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x3400, + 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, + 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a6, 0x0048, 0x20a9, 0x0004, + 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x48a6, 0x9186, + 0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x6972, 0x90c2, + 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x681f, 0x1108, 0xc1fd, + 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, 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, + 0x4899, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, 0x0002, + 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, + 0x080c, 0xadcb, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, + 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, + 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, + 0x4daf, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3524, 0x7033, + 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b8, + 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, + 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, + 0x701f, 0x4e5b, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, + 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, + 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4daf, 0x7124, 0x810b, + 0x0804, 0x3524, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, + 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, + 0x0a04, 0x3559, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559, + 0x9502, 0x0a04, 0x3559, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, + 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9284, 0x00ff, 0x90e2, + 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9384, 0xff00, + 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, + 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, + 0x3559, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, + 0x9502, 0x0a04, 0x3559, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, + 0x3559, 0x9502, 0x0a04, 0x3559, 0x2061, 0x1989, 0x6102, 0x6206, + 0x630a, 0x640e, 0x0804, 0x3524, 0x080c, 0x4aa4, 0x0904, 0x3556, + 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, + 0x0019, 0xaf60, 0x080c, 0x4aed, 0x701f, 0x4edf, 0x0005, 0x2001, + 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, + 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, 0x9d84, + 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, 0x2069, + 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, 0x0904, + 0x4f60, 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4f60, 0x680c, + 0x9005, 0x0904, 0x4f60, 0x9082, 0xff01, 0x1a04, 0x4f60, 0x6810, + 0x9082, 0x005c, 0x0a04, 0x4f60, 0x6824, 0x2008, 0x9082, 0x0008, + 0x0a04, 0x4f60, 0x9182, 0x0400, 0x1a04, 0x4f60, 0x0056, 0x2029, + 0x0000, 0x080c, 0x8afb, 0x005e, 0x6944, 0x6820, 0x9102, 0x06c0, + 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c, 0x9102, + 0x0678, 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1018, 0x2900, + 0x0904, 0x4f7a, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6, 0x2059, + 0x0000, 0x080c, 0x89b7, 0x00be, 0x00ee, 0x0558, 0x080c, 0x8711, + 0x080c, 0x8757, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061, 0x0100, + 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a62, 0x630a, + 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3524, + 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3559, 0x00e6, + 0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x080c, 0x89a6, + 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x1031, 0x2001, 0x188a, + 0x2003, 0x0000, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, + 0x3556, 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904, 0x4fd9, + 0x080c, 0x89a1, 0x0904, 0x4fd9, 0x2001, 0x0101, 0x200c, 0x918c, + 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, + 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x89a6, 0x2001, + 0x0035, 0x080c, 0x15ee, 0x00c6, 0x2061, 0x193c, 0x6004, 0x6100, + 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, + 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, 0x88e2, 0x0120, 0x2f00, + 0x080c, 0x896c, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091, 0x8000, + 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c, 0x1031, + 0x2001, 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003, 0x0020, + 0x00e6, 0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x00ee, + 0x012e, 0x0804, 0x3524, 0x0006, 0x080c, 0x56cf, 0xd0cc, 0x000e, + 0x0005, 0x0006, 0x080c, 0x56d3, 0xd0bc, 0x000e, 0x0005, 0x6174, + 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3524, 0x83ff, + 0x1904, 0x3559, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3559, 0x2019, + 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x3559, 0x7986, 0x6276, + 0x0804, 0x3524, 0x080c, 0x56e3, 0x1904, 0x3556, 0x7c88, 0x7d84, + 0x7e98, 0x7f8c, 0x080c, 0x4aa4, 0x0904, 0x3556, 0x900e, 0x901e, + 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, + 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, + 0x6972, 0x0118, 0x080c, 0x697a, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, - 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, - 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, - 0x0dd5, 0x2148, 0x080c, 0x1031, 0x9006, 0x705e, 0x918d, 0x0001, - 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, - 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, - 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, - 0xa79a, 0x080c, 0x10e9, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, - 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, - 0x0118, 0x009e, 0x0804, 0x3552, 0xa884, 0xa988, 0x080c, 0x283e, - 0x1518, 0x080c, 0x659f, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, - 0x080c, 0x4aa5, 0x01c8, 0x080c, 0x4aa5, 0x01b0, 0x009e, 0xa867, - 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, - 0x080c, 0xccc5, 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, - 0x0003, 0x701f, 0x51c9, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, - 0x354f, 0x7124, 0x080c, 0x32b4, 0xa820, 0x9086, 0x8001, 0x1120, - 0x2009, 0x0004, 0x0804, 0x354f, 0x2900, 0x7022, 0xa804, 0x0096, - 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, - 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7c, 0xaa6c, 0xab70, 0xac74, - 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, - 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, - 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4af1, 0x97c6, - 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, - 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, - 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x5225, - 0x0005, 0x000e, 0x007e, 0x0804, 0x3552, 0x7020, 0x2048, 0xa804, - 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, - 0x20a9, 0x002a, 0x080c, 0x0f7c, 0x2100, 0x2238, 0x2061, 0x18b8, - 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, - 0x4af1, 0x81ff, 0x1904, 0x354f, 0x798c, 0x2001, 0x197e, 0x918c, - 0x8000, 0x2102, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x696a, - 0x0120, 0x080c, 0x6972, 0x1904, 0x3552, 0x080c, 0x66c7, 0x0904, - 0x354f, 0x0126, 0x2091, 0x8000, 0x080c, 0x678d, 0x012e, 0x0904, - 0x354f, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x351d, 0x0804, - 0x451d, 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102, - 0x080c, 0x4ac9, 0x01a0, 0x080c, 0x696a, 0x0118, 0x080c, 0x6972, - 0x1170, 0x080c, 0x66c7, 0x2009, 0x0002, 0x0128, 0x080c, 0x678d, - 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d8, - 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, - 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4492, 0x080c, - 0x4ad8, 0x0904, 0x3552, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002, - 0x0804, 0x354f, 0x080c, 0x696a, 0x0130, 0x908e, 0x0004, 0x0118, - 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, - 0xb802, 0x0028, 0x080c, 0x56d0, 0xd0b4, 0x0904, 0x44cc, 0x7884, - 0x908e, 0x007e, 0x0904, 0x44cc, 0x908e, 0x007f, 0x0904, 0x44cc, - 0x908e, 0x0080, 0x0904, 0x44cc, 0xb800, 0xd08c, 0x1904, 0x44cc, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcce4, 0x1120, - 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x52f1, - 0x0005, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x0804, 0x44cc, 0x080c, - 0x330d, 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, - 0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009, - 0x0007, 0x0804, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008, - 0x0804, 0x354f, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x44cc, - 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd3e, - 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, - 0x532a, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, - 0x0804, 0x562d, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x0804, 0x52c3, - 0x81ff, 0x2009, 0x0001, 0x1904, 0x354f, 0x080c, 0x56e4, 0x2009, - 0x0007, 0x1904, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008, - 0x0804, 0x354f, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x696a, - 0x2009, 0x0009, 0x1904, 0x354f, 0x080c, 0x4aa5, 0x2009, 0x0002, - 0x0904, 0x354f, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, - 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, - 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, - 0x3552, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcf91, 0x2009, - 0x0003, 0x0904, 0x354f, 0x7007, 0x0003, 0x701f, 0x5380, 0x0005, - 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x354f, 0x0804, - 0x351d, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, - 0x56e4, 0x1188, 0x2009, 0x0014, 0x0804, 0x354f, 0xd2dc, 0x1568, - 0x81ff, 0x2009, 0x0001, 0x1904, 0x354f, 0x080c, 0x56e4, 0x2009, - 0x0007, 0x1904, 0x354f, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, - 0x56ab, 0x0804, 0x351d, 0xd2fc, 0x0158, 0x080c, 0x4ad8, 0x0904, - 0x3552, 0x7984, 0x9284, 0x9000, 0x080c, 0x5688, 0x0804, 0x351d, - 0x080c, 0x4ad8, 0x0904, 0x3552, 0xb804, 0x9084, 0x00ff, 0x9086, - 0x0006, 0x2009, 0x0009, 0x1904, 0x5469, 0x080c, 0x4aa5, 0x2009, - 0x0002, 0x0904, 0x5469, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, - 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aee, 0x701f, - 0x53da, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, - 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3552, 0xa866, - 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ad8, 0x1110, 0x0804, - 0x3552, 0x2009, 0x0043, 0x080c, 0xcff9, 0x2009, 0x0003, 0x0904, - 0x5469, 0x7007, 0x0003, 0x701f, 0x53fe, 0x0005, 0xa830, 0x9086, - 0x0100, 0x2009, 0x0004, 0x0904, 0x5469, 0x7984, 0x7aa8, 0x9284, - 0x1000, 0x080c, 0x5688, 0x0804, 0x351d, 0x00c6, 0xaab0, 0x9284, - 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56e4, 0x1150, 0x2009, - 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, 0x56e4, 0x2009, 0x0007, - 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x56ab, 0x0050, - 0xd2fc, 0x0178, 0x080c, 0x4ad6, 0x0588, 0xa998, 0x9284, 0x9000, - 0x080c, 0x5688, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, - 0x0438, 0x080c, 0x4ad6, 0x0510, 0x080c, 0x696a, 0x2009, 0x0009, - 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, - 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad6, 0x1108, 0x0070, - 0x2009, 0x004b, 0x080c, 0xcff9, 0x2009, 0x0003, 0x0108, 0x0078, - 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, - 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, - 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x354f, 0x0016, 0x7984, 0x9284, - 0x1000, 0xc0fd, 0x080c, 0x5688, 0x001e, 0x1904, 0x354f, 0x0804, - 0x351d, 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, - 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5688, - 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007, 0x0804, - 0x354f, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6600, 0x1904, - 0x3552, 0x9186, 0x007f, 0x0138, 0x080c, 0x696a, 0x0120, 0x2009, - 0x0009, 0x0804, 0x354f, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002, - 0x0804, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, - 0x0100, 0x8007, 0xa80a, 0x080c, 0xccfe, 0x1120, 0x2009, 0x0003, - 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x54c7, 0x0005, 0xa808, - 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x354f, - 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, 0x4af1, 0x080c, 0x4aa5, - 0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x7984, 0x9194, 0xff00, - 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b3, 0x0040, - 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, 0x0804, 0x3552, - 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, - 0x0019, 0xaf60, 0x080c, 0x4aee, 0x701f, 0x5517, 0x0005, 0x2001, - 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, - 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, - 0x0804, 0x351d, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002, 0x0804, - 0x354f, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, - 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, - 0x19cd, 0x0010, 0x0804, 0x3552, 0xa85c, 0x9080, 0x0019, 0x20a0, - 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, + 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, + 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804, + 0x3524, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, + 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, + 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e9, 0x7007, + 0x0002, 0x701f, 0x505c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, + 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, + 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x501a, 0x7224, 0x900e, + 0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804, 0x3524, 0x00f6, + 0x00e6, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1904, 0x50ef, 0x2071, + 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x50ef, 0xac9c, + 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1018, 0x2009, 0x0002, + 0x0904, 0x50ef, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, + 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, + 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972, 0x0118, 0x080c, + 0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, + 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, + 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, + 0x0003, 0x080c, 0x8f68, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, + 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031, 0x9006, + 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, + 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058, + 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, + 0x50fb, 0x000e, 0xa0a2, 0x080c, 0x10e9, 0x9006, 0x0048, 0x009e, + 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, + 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0dd5, + 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, + 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, + 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, + 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, + 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68, + 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031, + 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6c81, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, + 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972, + 0x0118, 0x080c, 0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, + 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, + 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, + 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0dd5, + 0x2148, 0x080c, 0x1031, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, + 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, + 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, + 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, + 0x080c, 0x10e9, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, + 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, + 0x009e, 0x0804, 0x3559, 0xa884, 0xa988, 0x080c, 0x283e, 0x1518, + 0x080c, 0x659e, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, + 0x4aa4, 0x01c8, 0x080c, 0x4aa4, 0x01b0, 0x009e, 0xa867, 0x0000, + 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, + 0xccdf, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, + 0x701f, 0x51c8, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3556, + 0x7124, 0x080c, 0x32bb, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, + 0x0004, 0x0804, 0x3556, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, + 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, + 0x20a9, 0x002a, 0x080c, 0x0f7c, 0xaa6c, 0xab70, 0xac74, 0xad78, + 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, + 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, + 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4af0, 0x97c6, 0x7200, + 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8, + 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, + 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x5224, 0x0005, + 0x000e, 0x007e, 0x0804, 0x3559, 0x7020, 0x2048, 0xa804, 0x2048, + 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, + 0x002a, 0x080c, 0x0f7c, 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44, + 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x4af0, + 0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197e, 0x918c, 0x8000, + 0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120, + 0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556, + 0x0126, 0x2091, 0x8000, 0x080c, 0x678c, 0x012e, 0x0904, 0x3556, + 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c, + 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, + 0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170, + 0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x678c, 0x1170, + 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, + 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110, + 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, + 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4491, 0x080c, 0x4ad7, + 0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804, + 0x3556, 0x080c, 0x6972, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, + 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, + 0x0028, 0x080c, 0x56cf, 0xd0b4, 0x0904, 0x44cb, 0x7884, 0x908e, + 0x007e, 0x0904, 0x44cb, 0x908e, 0x007f, 0x0904, 0x44cb, 0x908e, + 0x0080, 0x0904, 0x44cb, 0xb800, 0xd08c, 0x1904, 0x44cb, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x52f0, 0x0005, + 0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x44cb, 0x080c, 0x3314, + 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009, + 0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, + 0x0804, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804, + 0x3556, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x44cb, 0x9006, + 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x5329, + 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, + 0x562c, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x52c2, 0x81ff, + 0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007, + 0x1904, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804, + 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x6972, 0x2009, + 0x0009, 0x1904, 0x3556, 0x080c, 0x4aa4, 0x2009, 0x0002, 0x0904, + 0x3556, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, + 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, + 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3559, + 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcfab, 0x2009, 0x0003, + 0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x537f, 0x0005, 0xa830, + 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3556, 0x0804, 0x3524, + 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x56e3, + 0x1188, 0x2009, 0x0014, 0x0804, 0x3556, 0xd2dc, 0x1568, 0x81ff, + 0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007, + 0x1904, 0x3556, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x56aa, + 0x0804, 0x3524, 0xd2fc, 0x0158, 0x080c, 0x4ad7, 0x0904, 0x3559, + 0x7984, 0x9284, 0x9000, 0x080c, 0x5687, 0x0804, 0x3524, 0x080c, + 0x4ad7, 0x0904, 0x3559, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, + 0x2009, 0x0009, 0x1904, 0x5468, 0x080c, 0x4aa4, 0x2009, 0x0002, + 0x0904, 0x5468, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aed, 0x701f, 0x53d9, + 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, + 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3559, 0xa866, 0xa832, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ad7, 0x1110, 0x0804, 0x3559, + 0x2009, 0x0043, 0x080c, 0xd013, 0x2009, 0x0003, 0x0904, 0x5468, + 0x7007, 0x0003, 0x701f, 0x53fd, 0x0005, 0xa830, 0x9086, 0x0100, + 0x2009, 0x0004, 0x0904, 0x5468, 0x7984, 0x7aa8, 0x9284, 0x1000, + 0x080c, 0x5687, 0x0804, 0x3524, 0x00c6, 0xaab0, 0x9284, 0xc000, + 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56e3, 0x1150, 0x2009, 0x0014, + 0x04f0, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x15b8, + 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x56aa, 0x0050, 0xd2fc, + 0x0178, 0x080c, 0x4ad5, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, + 0x5687, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, + 0x080c, 0x4ad5, 0x0510, 0x080c, 0x6972, 0x2009, 0x0009, 0x11b8, + 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, + 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad5, 0x1108, 0x0070, 0x2009, + 0x004b, 0x080c, 0xd013, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, + 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, + 0x7aa8, 0xd2dc, 0x0904, 0x3556, 0x0016, 0x7984, 0x9284, 0x1000, + 0xc0fd, 0x080c, 0x5687, 0x001e, 0x1904, 0x3556, 0x0804, 0x3524, + 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, + 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e, + 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556, + 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x65ff, 0x1904, 0x3559, + 0x9186, 0x007f, 0x0138, 0x080c, 0x6972, 0x0120, 0x2009, 0x0009, + 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804, + 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, + 0x8007, 0xa80a, 0x080c, 0xcd18, 0x1120, 0x2009, 0x0003, 0x0804, + 0x3556, 0x7007, 0x0003, 0x701f, 0x54c6, 0x0005, 0xa808, 0x8007, + 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 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, 0x4af0, 0x080c, 0x4aa4, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9194, 0xff00, 0x918c, + 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b3, 0x0040, 0x92c6, + 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, 0x0804, 0x3559, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, - 0xaf60, 0x0804, 0x4af1, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3552, - 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, - 0x2061, 0x19fa, 0x6142, 0x00ce, 0x012e, 0x0804, 0x351d, 0x00c6, - 0x080c, 0x73b0, 0x1160, 0x080c, 0x7698, 0x080c, 0x601b, 0x9085, - 0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x080c, 0x0dd5, 0x2061, - 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5eda, 0x00ce, 0x0005, - 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x354f, - 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062, - 0x080c, 0x2c20, 0x01a0, 0x080c, 0x2c28, 0x0188, 0x080c, 0x2c30, - 0x0170, 0x2162, 0x0804, 0x3552, 0x2061, 0x0100, 0x6038, 0x9086, - 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, - 0x9086, 0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, - 0x0026, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c, - 0xa643, 0x002e, 0x080c, 0xa526, 0x0036, 0x901e, 0x080c, 0xa59c, - 0x003e, 0x60e3, 0x0000, 0x080c, 0xe9c8, 0x080c, 0xe9e3, 0x9085, - 0x0001, 0x080c, 0x73f7, 0x9006, 0x080c, 0x2cef, 0x2001, 0x1800, - 0x2003, 0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x351d, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, - 0x2009, 0x0007, 0x0804, 0x354f, 0x7984, 0x7ea8, 0x96b4, 0x00ff, - 0x080c, 0x6600, 0x1904, 0x3552, 0x9186, 0x007f, 0x0138, 0x080c, - 0x696a, 0x0120, 0x2009, 0x0009, 0x0804, 0x354f, 0x080c, 0x4aa5, - 0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0xa867, 0x0000, 0xa868, - 0xc0fd, 0xa86a, 0x080c, 0xcd01, 0x1120, 0x2009, 0x0003, 0x0804, - 0x354f, 0x7007, 0x0003, 0x701f, 0x5616, 0x0005, 0xa830, 0x9086, - 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x354f, 0xa8e0, 0xa866, - 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4af1, 0xa898, 0x9086, 0x000d, - 0x1904, 0x354f, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, - 0x563a, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, - 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, - 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4ae1, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, - 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, - 0x2091, 0x8000, 0x00c6, 0x2061, 0x19fa, 0x7984, 0x6152, 0x614e, - 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, - 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, 0x1a08, 0x2044, 0x2001, - 0x1a0f, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, - 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x351d, - 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, - 0x0006, 0x080c, 0xcb68, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, - 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x6035, 0x080c, 0xadb1, - 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, 0x56b3, 0x015e, 0x012e, 0x0005, - 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, - 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, - 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, - 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, - 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, - 0x3552, 0x810c, 0x0016, 0x080c, 0x4aa5, 0x080c, 0x0f07, 0x2100, - 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4aee, - 0x701f, 0x570b, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, - 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, - 0x2071, 0x189e, 0x080c, 0x4af1, 0x701f, 0x571f, 0x0005, 0x2061, - 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f0f, - 0x002e, 0x001e, 0x080c, 0x0fbc, 0x9006, 0xa802, 0xa806, 0x0804, - 0x351d, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, - 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x58da, - 0x0068, 0xd08c, 0x0118, 0x080c, 0x57e3, 0x0040, 0xd094, 0x0118, - 0x080c, 0x57b3, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, - 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, - 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, 0x0120, 0x709b, 0x0000, - 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, - 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, - 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, - 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, - 0x00f7, 0x080c, 0x5f97, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, - 0x0140, 0x6042, 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, - 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, - 0x7097, 0x0000, 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e7d, - 0x080c, 0x8562, 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, - 0x705f, 0xffff, 0x7088, 0x9005, 0x1528, 0x2011, 0x5e7d, 0x080c, - 0x84ca, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, - 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57c9, 0x6242, 0x709b, - 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, - 0x0048, 0x6242, 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, - 0x6020, 0x0000, 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5, - 0x000b, 0x0005, 0x57ed, 0x583e, 0x58d9, 0x00f6, 0x0016, 0x6900, - 0x918c, 0x0800, 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, - 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, - 0x1f04, 0x57fc, 0x080c, 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e, - 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, - 0x0020, 0x080c, 0x5ffc, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, - 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, - 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xab07, 0x20e1, 0x0001, + 0xaf60, 0x080c, 0x4aed, 0x701f, 0x5516, 0x0005, 0x2001, 0x182e, + 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, + 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, + 0x3524, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804, 0x3556, + 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, + 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19cd, + 0x0010, 0x0804, 0x3559, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, + 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, + 0x0804, 0x4af0, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3559, 0x0126, + 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, + 0x19fa, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3524, 0x00c6, 0x080c, + 0x73bc, 0x1160, 0x080c, 0x76a4, 0x080c, 0x601a, 0x9085, 0x0001, + 0x080c, 0x7403, 0x080c, 0x72ee, 0x080c, 0x0dd5, 0x2061, 0x1800, + 0x6030, 0xc09d, 0x6032, 0x080c, 0x5ed9, 0x00ce, 0x0005, 0x00c6, + 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3556, 0x7884, + 0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062, 0x080c, + 0x2c20, 0x01a0, 0x080c, 0x2c28, 0x0188, 0x080c, 0x2c30, 0x0170, + 0x2162, 0x0804, 0x3559, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, + 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, + 0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, + 0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, + 0x002e, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e, + 0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x9085, 0x0001, + 0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2001, 0x1800, 0x2003, + 0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3524, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, + 0x0007, 0x0804, 0x3556, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, + 0x65ff, 0x1904, 0x3559, 0x9186, 0x007f, 0x0138, 0x080c, 0x6972, + 0x0120, 0x2009, 0x0009, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, + 0xa86a, 0x080c, 0xcd1b, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, + 0x7007, 0x0003, 0x701f, 0x5615, 0x0005, 0xa830, 0x9086, 0x0100, + 0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 0xa8e0, 0xa866, 0xa834, + 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0xaf60, 0x0804, 0x4af0, 0xa898, 0x9086, 0x000d, 0x1904, + 0x3556, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5639, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, + 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4ae0, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001, + 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, + 0x8000, 0x00c6, 0x2061, 0x19fa, 0x7984, 0x6152, 0x614e, 0x6057, + 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, + 0x6062, 0x788c, 0x605e, 0x2001, 0x1a08, 0x2044, 0x2001, 0x1a0f, + 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, + 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3524, 0x0126, + 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, + 0x080c, 0xcb82, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, + 0x2004, 0x905d, 0x0160, 0x080c, 0x6034, 0x080c, 0xadcb, 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, 0x56b2, 0x015e, 0x012e, 0x0005, 0x2001, + 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, 0x0006, + 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, + 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, + 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, 0x710a, + 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x3559, + 0x810c, 0x0016, 0x080c, 0x4aa4, 0x080c, 0x0f07, 0x2100, 0x2238, + 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4aed, 0x701f, + 0x570a, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, + 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, 0x2071, + 0x189e, 0x080c, 0x4af0, 0x701f, 0x571e, 0x0005, 0x2061, 0x18b8, + 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f0f, 0x002e, + 0x001e, 0x080c, 0x0fbc, 0x9006, 0xa802, 0xa806, 0x0804, 0x3524, + 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, + 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, + 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x58d9, 0x0068, + 0xd08c, 0x0118, 0x080c, 0x57e2, 0x0040, 0xd094, 0x0118, 0x080c, + 0x57b2, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, + 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, + 0x0006, 0x7098, 0x9005, 0x000e, 0x0120, 0x709b, 0x0000, 0x7093, + 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, + 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, + 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, + 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, + 0x080c, 0x5f96, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, + 0x6042, 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, 0x70c7, + 0x0000, 0x70df, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7097, + 0x0000, 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e7c, 0x080c, + 0x858b, 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, 0x705f, + 0xffff, 0x7088, 0x9005, 0x1528, 0x2011, 0x5e7c, 0x080c, 0x84f3, + 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, + 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57c8, 0x6242, 0x709b, 0x0000, + 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, + 0x6242, 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, 0x601f, + 0x0000, 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5, 0x000b, + 0x0005, 0x57ec, 0x583d, 0x58d8, 0x00f6, 0x0016, 0x6900, 0x918c, + 0x0800, 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, + 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, + 0x57fb, 0x080c, 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, + 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, + 0x080c, 0x5ffb, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, + 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, + 0x20a9, 0x0004, 0x4003, 0x080c, 0xab21, 0x20e1, 0x0001, 0x2099, + 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, + 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5ead, 0x00fe, 0x9006, + 0x7092, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, 0x7093, + 0x0000, 0x9025, 0x0904, 0x58b5, 0x6020, 0xd0b4, 0x1904, 0x58b3, + 0x71a0, 0x81ff, 0x0904, 0x58a1, 0x9486, 0x000c, 0x1904, 0x58ae, + 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ff4, 0x2011, 0x0260, + 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, + 0x1f04, 0x585a, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, + 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, 0x0002, + 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b, + 0x080c, 0x5ffb, 0x04c0, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7930, + 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, + 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ff4, 0x2011, + 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, + 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5895, 0x0078, 0x70a3, + 0x0000, 0x080c, 0x5ff4, 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, 0xab21, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, - 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5eae, 0x00fe, - 0x9006, 0x7092, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, - 0x7093, 0x0000, 0x9025, 0x0904, 0x58b6, 0x6020, 0xd0b4, 0x1904, - 0x58b4, 0x71a0, 0x81ff, 0x0904, 0x58a2, 0x9486, 0x000c, 0x1904, - 0x58af, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ff5, 0x2011, - 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, - 0x8318, 0x1f04, 0x585b, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, - 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, - 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c, - 0x8562, 0x080c, 0x5ffc, 0x04c0, 0x080c, 0x5ff5, 0x2079, 0x0260, - 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, - 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ff5, - 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, - 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5896, 0x0078, - 0x70a3, 0x0000, 0x080c, 0x5ff5, 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, 0xab07, 0x20e1, - 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, - 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f1, 0x2013, 0x0000, - 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa250, - 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b, - 0x0005, 0x590b, 0x591e, 0x5947, 0x5967, 0x598d, 0x59bc, 0x59e2, - 0x5a1a, 0x5a40, 0x5a6e, 0x5aa9, 0x5ae1, 0x5aff, 0x5b2a, 0x5b4c, - 0x5b67, 0x5b71, 0x5ba5, 0x5bcb, 0x5bfa, 0x5c20, 0x5c58, 0x5c9c, - 0x5cd9, 0x5cfa, 0x5d53, 0x5d75, 0x5da3, 0x5da3, 0x00c6, 0x2061, - 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, - 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, - 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, - 0x07d0, 0x2011, 0x5e84, 0x080c, 0x8562, 0x0005, 0x00f6, 0x7090, - 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, - 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, - 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, - 0x70c7, 0x0001, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x709b, 0x0010, - 0x080c, 0x5b71, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, - 0x709b, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e84, 0x080c, 0x84ca, - 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, - 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, - 0x595c, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x00fe, 0x0005, 0x00f6, - 0x7090, 0x9005, 0x0500, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, - 0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, - 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, - 0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, - 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, - 0x080c, 0x5ff5, 0x080c, 0x5fd8, 0x1170, 0x7084, 0x9005, 0x1158, - 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e31, - 0x0168, 0x080c, 0x5fae, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, - 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, - 0x080c, 0x5eae, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, - 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c, - 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, - 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, - 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x5fd1, - 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, 0x5f79, 0x2079, - 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x080c, - 0x5fd8, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, - 0x0180, 0x9180, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, - 0x0008, 0x080c, 0x5e31, 0x0180, 0x080c, 0x4fe2, 0x0110, 0x080c, - 0x28a7, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, - 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e84, - 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, - 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, - 0x709b, 0x0008, 0x0029, 0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005, - 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, - 0x1105, 0x7837, 0x0100, 0x080c, 0x5fd8, 0x1150, 0x7084, 0x9005, - 0x1138, 0x080c, 0x5da4, 0x1188, 0x9085, 0x0001, 0x080c, 0x28a7, - 0x20a9, 0x0008, 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x026e, + 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, + 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x08d8, + 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b, 0x0005, + 0x590a, 0x591d, 0x5946, 0x5966, 0x598c, 0x59bb, 0x59e1, 0x5a19, + 0x5a3f, 0x5a6d, 0x5aa8, 0x5ae0, 0x5afe, 0x5b29, 0x5b4b, 0x5b66, + 0x5b70, 0x5ba4, 0x5bca, 0x5bf9, 0x5c1f, 0x5c57, 0x5c9b, 0x5cd8, + 0x5cf9, 0x5d52, 0x5d74, 0x5da2, 0x5da2, 0x00c6, 0x2061, 0x1800, + 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, + 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, + 0x2061, 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, 0x07d0, + 0x2011, 0x5e83, 0x080c, 0x858b, 0x0005, 0x00f6, 0x7090, 0x9086, + 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5ff4, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, + 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, + 0x0001, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0010, 0x080c, + 0x5b70, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, + 0x0003, 0x6043, 0x0004, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x080c, + 0x5f78, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, + 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x595b, + 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090, + 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, + 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, + 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, + 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, 0x0010, + 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, 0x080c, + 0x5f78, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, + 0x5ff4, 0x080c, 0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, + 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168, + 0x080c, 0x5fad, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, - 0x5eae, 0x0010, 0x080c, 0x58fe, 0x00fe, 0x0005, 0x00f6, 0x7090, - 0x9005, 0x05a8, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014, - 0x1560, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, - 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, + 0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, + 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, + 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, + 0x0001, 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, + 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, 0x5f78, 0x2079, 0x0240, + 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7, + 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, + 0x9180, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, + 0x080c, 0x5e30, 0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7, + 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, + 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c, + 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, + 0x0008, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, + 0x709b, 0x0009, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1105, + 0x7837, 0x0100, 0x080c, 0x5fd7, 0x1150, 0x7084, 0x9005, 0x1138, + 0x080c, 0x5da3, 0x1188, 0x9085, 0x0001, 0x080c, 0x28a7, 0x20a9, + 0x0008, 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, + 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, + 0x0010, 0x080c, 0x58fd, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, + 0x05a8, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x1560, + 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, + 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, + 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, 0x709b, + 0x000e, 0x080c, 0x5b4b, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, + 0x00f6, 0x709b, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, + 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f78, 0x2079, + 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5fd7, 0x0118, + 0x2013, 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, 0x20a9, + 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, + 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, + 0x1f04, 0x5acd, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe, 0x0005, + 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, 0x5e83, 0x080c, 0x84f3, + 0x9086, 0x0084, 0x1178, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, 0x000c, + 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b, + 0x000d, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, + 0x0000, 0x080c, 0x5ff4, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, + 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, + 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, + 0x0260, 0x1f04, 0x5b11, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe, + 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83, 0x080c, + 0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, + 0x0001, 0x080c, 0x5f4a, 0x709b, 0x000e, 0x0029, 0x0010, 0x080c, + 0x5fd0, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x601f, 0x709b, + 0x000f, 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, + 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, + 0x07d0, 0x2011, 0x5e83, 0x080c, 0x84e7, 0x0005, 0x7090, 0x9005, + 0x0130, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0000, 0x0005, + 0x709b, 0x0011, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1, 0x0000, + 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, 0x9480, + 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, + 0x080c, 0x5fd7, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, 0x7080, + 0x9084, 0x00ff, 0x0160, 0x080c, 0x283e, 0x9186, 0x007e, 0x0138, + 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5e30, 0x60c3, + 0x0014, 0x080c, 0x5ead, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, + 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, + 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, 0x0000, + 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x5f86, 0x2079, + 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, + 0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, + 0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168, 0x080c, 0x5fad, + 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, + 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c, + 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, + 0x0014, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, + 0x709b, 0x0015, 0x080c, 0x5f86, 0x2079, 0x0240, 0x7833, 0x1104, + 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7, 0x11b8, 0x7084, + 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x3325, + 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5e30, + 0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7, 0x20a9, 0x0008, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6, + 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, + 0x0014, 0x15a8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, + 0x1168, 0x9085, 0x0001, 0x080c, 0x601f, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, - 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, - 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, - 0x709b, 0x000e, 0x080c, 0x5b4c, 0x0010, 0x080c, 0x5fd1, 0x00fe, - 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, - 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f79, - 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5fd8, - 0x0118, 0x2013, 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, - 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, - 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, - 0x0240, 0x1f04, 0x5ace, 0x60c3, 0x0084, 0x080c, 0x5eae, 0x00fe, - 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, 0x5e84, 0x080c, - 0x84ca, 0x9086, 0x0084, 0x1178, 0x080c, 0x5ff5, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, - 0x000c, 0x0029, 0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005, 0x00f6, - 0x709b, 0x000d, 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1107, - 0x7837, 0x0000, 0x080c, 0x5ff5, 0x20a9, 0x0040, 0x2011, 0x026e, - 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, - 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, - 0x2011, 0x0260, 0x1f04, 0x5b12, 0x60c3, 0x0084, 0x080c, 0x5eae, - 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e84, - 0x080c, 0x84ca, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff5, 0x2079, + 0x9085, 0x0001, 0x080c, 0x601f, 0x7097, 0x0000, 0x7a38, 0xd2f4, + 0x0110, 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, 0x7093, + 0x0000, 0x00fe, 0x0005, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1, + 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, + 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, + 0x024d, 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, 0x5fd7, + 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da3, 0x1188, 0x9085, + 0x0001, 0x080c, 0x28a7, 0x20a9, 0x0008, 0x080c, 0x5ff4, 0x20e1, + 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, + 0x60c3, 0x0014, 0x080c, 0x5ead, 0x0010, 0x080c, 0x58fd, 0x0005, + 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, 0x5e83, 0x080c, 0x84f3, + 0x9086, 0x0084, 0x1190, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, + 0x601f, 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, + 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, 0x5f86, 0x2079, 0x0240, + 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x2009, 0x026e, + 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, + 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, + 0x5d0c, 0x2039, 0x1c0e, 0x080c, 0x5fd7, 0x11e8, 0x2728, 0x2514, + 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, + 0x9205, 0x202a, 0x7060, 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, 0x5d3f, 0x60c3, 0x0084, 0x080c, 0x5ead, + 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83, + 0x080c, 0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, - 0x7097, 0x0001, 0x080c, 0x5f4b, 0x709b, 0x000e, 0x0029, 0x0010, - 0x080c, 0x5fd1, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x6020, - 0x709b, 0x000f, 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, - 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, - 0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c, 0x84be, 0x0005, 0x7090, - 0x9005, 0x0130, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x709b, 0x0000, - 0x0005, 0x709b, 0x0011, 0x080c, 0xab07, 0x080c, 0x5ff5, 0x20e1, - 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, - 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, - 0x4003, 0x080c, 0x5fd8, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, - 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, 0x283e, 0x9186, 0x007e, - 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5e31, - 0x60c3, 0x0014, 0x080c, 0x5eae, 0x0005, 0x00f6, 0x7090, 0x9005, - 0x0500, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, - 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, - 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x5f87, - 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ff5, - 0x080c, 0x5fd8, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, - 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e31, 0x0168, 0x080c, - 0x5fae, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, - 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e84, - 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, - 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, - 0x709b, 0x0014, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, - 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, - 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x080c, 0x5fd8, 0x11b8, - 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, - 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, - 0x5e31, 0x0180, 0x080c, 0x4fe2, 0x0110, 0x080c, 0x28a7, 0x20a9, - 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x00fe, 0x0005, - 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e84, 0x080c, 0x84ca, - 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, - 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x6020, 0x7a38, 0xd2fc, - 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, - 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, - 0x0001, 0x9085, 0x0001, 0x080c, 0x6020, 0x7097, 0x0000, 0x7a38, - 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, - 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, 0xab07, 0x080c, 0x5ff5, - 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, - 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, - 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, - 0x5fd8, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da4, 0x1188, - 0x9085, 0x0001, 0x080c, 0x28a7, 0x20a9, 0x0008, 0x080c, 0x5ff5, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, - 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x0010, 0x080c, 0x58fe, - 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, 0x5e84, 0x080c, - 0x84ca, 0x9086, 0x0084, 0x1190, 0x080c, 0x5ff5, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, - 0x080c, 0x6020, 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, - 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, 0x5f87, 0x2079, - 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x2009, - 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, - 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, - 0x1f04, 0x5d0d, 0x2039, 0x1c0e, 0x080c, 0x5fd8, 0x11e8, 0x2728, - 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, - 0x8007, 0x9205, 0x202a, 0x7060, 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, 0x5d40, 0x60c3, 0x0084, 0x080c, - 0x5eae, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, - 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff5, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, - 0x1140, 0x7097, 0x0001, 0x080c, 0x5f4b, 0x709b, 0x001a, 0x0029, - 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, - 0x6020, 0x709b, 0x001b, 0x080c, 0xab07, 0x080c, 0x5ff5, 0x2011, - 0x0260, 0x2009, 0x0240, 0x7490, 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, 0x5d8c, 0x60c3, 0x0084, - 0x080c, 0x5eae, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, - 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, - 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, - 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, - 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, - 0x8211, 0x1f04, 0x5dbe, 0x0804, 0x5e2d, 0x82ff, 0x1160, 0xd5d4, - 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, - 0x5e2d, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, - 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, - 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, - 0x5de4, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, - 0x5df6, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, - 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, - 0x5e05, 0x755e, 0x95c8, 0x331e, 0x292d, 0x95ac, 0x00ff, 0x7582, - 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, - 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 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, 0x715e, - 0x91a0, 0x331e, 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, - 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, 0x65ea, - 0x7087, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, - 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, - 0x2071, 0x0140, 0x080c, 0x5f3a, 0x080c, 0xa259, 0x7004, 0x9084, - 0x4000, 0x0110, 0x080c, 0x2cff, 0x0126, 0x2091, 0x8000, 0x2071, - 0x1826, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, - 0x080c, 0x5f97, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, - 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, - 0x8000, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, - 0x2012, 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa250, 0x6144, 0xd184, - 0x0120, 0x7198, 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, - 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c, - 0x8562, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0xadb8, 0x2009, 0x00f7, 0x080c, 0x5f97, 0x2061, 0x19fa, - 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, - 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, - 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f06, 0x080c, - 0x84be, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, - 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0xa259, - 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, - 0x080c, 0x73b8, 0x0188, 0x080c, 0x73d3, 0x1170, 0x080c, 0x76a2, - 0x0016, 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, - 0x769d, 0x080c, 0x72e2, 0x0050, 0x2009, 0x0001, 0x080c, 0x2c3e, - 0x2001, 0x0001, 0x080c, 0x27ea, 0x080c, 0x5eda, 0x012e, 0x000e, - 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, - 0x0036, 0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b05, - 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, - 0x1c80, 0x080c, 0x5ff5, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, - 0x20a9, 0x0020, 0x080c, 0x5fef, 0x2099, 0x0260, 0x20a1, 0x1c92, - 0x0051, 0x20a9, 0x000e, 0x080c, 0x5ff2, 0x2099, 0x0260, 0x20a1, - 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, - 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f6f, 0x002e, 0x001e, - 0x0005, 0x080c, 0xab07, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, - 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, - 0xab07, 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, - 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, - 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, - 0x1138, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, - 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, - 0x080c, 0x6966, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, - 0xe58d, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, - 0x900e, 0x080c, 0x3187, 0x080c, 0xd216, 0x0140, 0x0036, 0x2019, - 0xffff, 0x2021, 0x0007, 0x080c, 0x4cbc, 0x003e, 0x004e, 0x001e, - 0x0005, 0x080c, 0x5eda, 0x709b, 0x0000, 0x7093, 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, 0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, - 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, - 0x8108, 0x1f04, 0x602f, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, - 0x0136, 0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807, - 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x331e, 0x231d, 0x939c, - 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8c2, 0x080c, 0xadb1, 0x1120, - 0x9192, 0x007e, 0x1208, 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8, - 0xb9c8, 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, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, - 0x904d, 0x0110, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, 0x9006, - 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, - 0x9005, 0x0198, 0x00c6, 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, - 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8958, - 0x00ce, 0x090c, 0x8cfc, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, - 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, - 0x2091, 0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, - 0x1a04, 0x611d, 0x9182, 0x0800, 0x1a04, 0x6121, 0x2001, 0x180c, - 0x2004, 0x9084, 0x0003, 0x1904, 0x6127, 0x9188, 0x1000, 0x2104, - 0x905d, 0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, - 0xb8a4, 0x900d, 0x1904, 0x6139, 0xb850, 0x900d, 0x1148, 0xa802, - 0x2900, 0xb852, 0xb84e, 0x080c, 0x90e4, 0x9006, 0x012e, 0x0005, - 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, - 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, - 0x0498, 0x9082, 0x0006, 0x1290, 0x080c, 0xadb1, 0x1160, 0xb8a0, - 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 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, 0x696a, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, - 0x60d0, 0x080c, 0x679c, 0x0904, 0x60e9, 0x0804, 0x60d4, 0x00b6, - 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, - 0x2001, 0x196b, 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, - 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, 0x690a, 0x11d0, - 0x080c, 0xadf1, 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, - 0x0009, 0x600b, 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b, - 0x8000, 0x2009, 0x0043, 0x080c, 0xaec2, 0x9006, 0x00b0, 0x2001, - 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, - 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, - 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, - 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, - 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x6207, 0x9188, 0x1000, - 0x2104, 0x905d, 0x0904, 0x61df, 0xb8a0, 0x9086, 0x007f, 0x0178, - 0x080c, 0x6972, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, - 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x696a, 0x1598, 0xa87c, - 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, - 0x080c, 0xcb09, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x6209, - 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x6209, - 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xadf1, - 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, - 0x000a, 0x2009, 0x0003, 0x080c, 0xaec2, 0x9006, 0x0458, 0x2001, - 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xadb1, 0x1160, - 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 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, 0x629e, 0x6259, 0x6270, 0x629e, 0x629e, 0x629e, 0x629e, - 0x629e, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x659f, 0x0148, - 0x9046, 0xb810, 0x9306, 0x1904, 0x62a6, 0xb814, 0x9206, 0x15f0, - 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x49b8, 0x0150, 0x04b0, - 0x080c, 0x6600, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, - 0x1568, 0x080c, 0xadf1, 0x0530, 0x2b00, 0x6012, 0x080c, 0xcf90, - 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, - 0x0001, 0x1170, 0x080c, 0x31bc, 0x9006, 0x080c, 0x653c, 0x2001, - 0x0002, 0x080c, 0x6550, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, - 0x2009, 0x0003, 0x080c, 0xaec2, 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, 0x648d, 0x90c6, 0x0056, 0x0904, 0x6491, 0x90c6, 0x0066, - 0x0904, 0x6495, 0x90c6, 0x0067, 0x0904, 0x6499, 0x90c6, 0x0068, - 0x0904, 0x649d, 0x90c6, 0x0071, 0x0904, 0x64a1, 0x90c6, 0x0074, - 0x0904, 0x64a5, 0x90c6, 0x007c, 0x0904, 0x64a9, 0x90c6, 0x007e, - 0x0904, 0x64ad, 0x90c6, 0x0037, 0x0904, 0x64b1, 0x9016, 0x2079, - 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x6488, 0x9182, 0x0800, - 0x1a04, 0x6488, 0x080c, 0x6600, 0x1198, 0xb804, 0x9084, 0x00ff, - 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, - 0xadb1, 0x1904, 0x6471, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6471, - 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x63d1, - 0x90c6, 0x0064, 0x0904, 0x63fa, 0x2008, 0x0804, 0x6393, 0xa998, - 0xa8b0, 0x2040, 0x080c, 0xadb1, 0x1120, 0x9182, 0x007f, 0x0a04, - 0x6393, 0x9186, 0x00ff, 0x0904, 0x6393, 0x9182, 0x0800, 0x1a04, - 0x6393, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, 0x7880, 0x0096, - 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6393, 0x99cc, - 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x6393, 0x080c, - 0x49b8, 0x0904, 0x639d, 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, - 0x0006, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, - 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, - 0x0f7c, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, - 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, - 0x0f7c, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, - 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, - 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, - 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, - 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, - 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, - 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c, 0xadf1, 0x1130, - 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, - 0x080c, 0xcf90, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, - 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x31bc, - 0x012e, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550, - 0x2009, 0x0002, 0x080c, 0xaec2, 0xa8b0, 0xd094, 0x0118, 0xb8cc, - 0xc08d, 0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, - 0x0005, 0x080c, 0x56e4, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, - 0xaeb0, 0x080c, 0x6600, 0x1904, 0x638e, 0x9186, 0x007f, 0x0130, - 0x080c, 0x696a, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, - 0x0fff, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, - 0xa806, 0x080c, 0xcd01, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, - 0x0804, 0x6395, 0xa998, 0xaeb0, 0x080c, 0x6600, 0x1904, 0x638e, - 0x0096, 0x080c, 0x0fff, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, - 0x644e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, - 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, - 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7c, 0x009e, 0xa87b, - 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, - 0x56d0, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, - 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x696a, 0x0118, 0xa89b, - 0x0009, 0x0080, 0x080c, 0x56e4, 0x0118, 0xa89b, 0x0007, 0x0050, - 0x080c, 0xcce4, 0x1904, 0x63ca, 0x2009, 0x0003, 0x2001, 0x4005, - 0x0804, 0x6395, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x1243, 0x080c, 0xb360, 0x1904, 0x63ca, 0x2009, 0x0002, - 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x63cb, 0x2009, 0x180c, - 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, - 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x63cb, - 0x2001, 0x0029, 0x900e, 0x0804, 0x63cb, 0x080c, 0x3742, 0x0804, - 0x63cc, 0x080c, 0x540d, 0x0804, 0x63cc, 0x080c, 0x4548, 0x0804, - 0x63cc, 0x080c, 0x45c1, 0x0804, 0x63cc, 0x080c, 0x461d, 0x0804, - 0x63cc, 0x080c, 0x4a7b, 0x0804, 0x63cc, 0x080c, 0x4d32, 0x0804, - 0x63cc, 0x080c, 0x5078, 0x0804, 0x63cc, 0x080c, 0x5271, 0x0804, - 0x63cc, 0x080c, 0x3958, 0x0804, 0x63cc, 0x00b6, 0xa974, 0xae78, - 0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, - 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x696a, 0x1148, - 0x00e9, 0x080c, 0x672b, 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, 0x19e7, 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, - 0x6966, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, - 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, - 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e, - 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, - 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, - 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6962, 0x1138, 0x9284, 0x00ff, - 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, - 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, - 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, - 0x1000, 0x2204, 0x905d, 0x1188, 0x0096, 0x080c, 0x0fff, 0x2958, - 0x009e, 0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, - 0x9006, 0xb8a6, 0xb8ae, 0x080c, 0x6035, 0x9006, 0x0010, 0x9085, - 0x0001, 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, 0x1031, 0x00d6, 0x00c6, 0xb8bc, - 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, - 0xcb1b, 0x0110, 0x080c, 0x0fb1, 0x080c, 0xae47, 0x00ce, 0x0c88, - 0x00ce, 0x00de, 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, - 0x1041, 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, 0x73b0, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, - 0x080c, 0xadb1, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, - 0x2061, 0x1982, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, - 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, - 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, - 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, - 0xb8c4, 0x20e8, 0xb8c8, 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, 0xbbcc, - 0xc384, 0xba00, 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, - 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, - 0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, - 0xba02, 0xbbce, 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, 0x0dd5, - 0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0fff, 0x0170, - 0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x67bc, 0xa807, 0x0001, - 0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, - 0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, - 0x9005, 0x1150, 0x080c, 0x67cb, 0x1158, 0xa804, 0x908a, 0x0002, - 0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1031, 0xb8a7, 0x0000, - 0x009e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x90e4, - 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, 0xa678, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, - 0x0020, 0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, - 0x89ff, 0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, - 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcbd8, 0x0010, 0x9085, - 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcb7d, 0x0010, - 0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcbd5, - 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, - 0xcb9c, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, - 0x080c, 0xcc19, 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, + 0x7097, 0x0001, 0x080c, 0x5f4a, 0x709b, 0x001a, 0x0029, 0x0010, + 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x601f, + 0x709b, 0x001b, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x2011, 0x0260, + 0x2009, 0x0240, 0x7490, 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, 0x5d8b, 0x60c3, 0x0084, 0x080c, + 0x5ead, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, 0x252c, + 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, + 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, + 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, + 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, + 0x1f04, 0x5dbd, 0x0804, 0x5e2c, 0x82ff, 0x1160, 0xd5d4, 0x0120, + 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5e2c, + 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, + 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, + 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5de3, + 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5df5, + 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, + 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5e04, + 0x755e, 0x95c8, 0x3325, 0x292d, 0x95ac, 0x00ff, 0x7582, 0x6532, + 0x6536, 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, + 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 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, 0x715e, 0x91a0, + 0x3325, 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, + 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7087, + 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708b, + 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, + 0x0140, 0x080c, 0x5f39, 0x080c, 0xa273, 0x7004, 0x9084, 0x4000, + 0x0110, 0x080c, 0x2cff, 0x0126, 0x2091, 0x8000, 0x2071, 0x1826, + 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, + 0x5f96, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, + 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, + 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, + 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x6144, 0xd184, 0x0120, + 0x7198, 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, 0x2011, + 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b, + 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0xadd2, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x2061, 0x19fa, 0x900e, + 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, + 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, + 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c, 0x84e7, + 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, + 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0xa273, 0x2071, + 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x080c, + 0x73c4, 0x0188, 0x080c, 0x73df, 0x1170, 0x080c, 0x76ae, 0x0016, + 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x76a9, + 0x080c, 0x72ee, 0x0050, 0x2009, 0x0001, 0x080c, 0x2c3e, 0x2001, + 0x0001, 0x080c, 0x27ea, 0x080c, 0x5ed9, 0x012e, 0x000e, 0x00ee, + 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, + 0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b04, 0x003e, + 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, + 0x080c, 0x5ff4, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, + 0x0020, 0x080c, 0x5fee, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, + 0x20a9, 0x000e, 0x080c, 0x5ff1, 0x2099, 0x0260, 0x20a1, 0x1cb2, + 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, + 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f6e, 0x002e, 0x001e, 0x0005, + 0x080c, 0xab21, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, + 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xab21, + 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, + 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, + 0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, + 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, + 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, + 0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe5ae, + 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, + 0x080c, 0x318a, 0x080c, 0xd230, 0x0140, 0x0036, 0x2019, 0xffff, + 0x2021, 0x0007, 0x080c, 0x4cbb, 0x003e, 0x004e, 0x001e, 0x0005, + 0x080c, 0x5ed9, 0x709b, 0x0000, 0x7093, 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, + 0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, + 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, + 0x1f04, 0x602e, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, + 0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807, 0x0707, + 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3325, 0x231d, 0x939c, 0x00ff, + 0xbb16, 0x0016, 0x0026, 0xb8c2, 0x080c, 0xadcb, 0x1120, 0x9192, + 0x007e, 0x1208, 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, + 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, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, + 0x0110, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, + 0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, + 0x0198, 0x00c6, 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, + 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8981, 0x00ce, + 0x090c, 0x8d25, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, + 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, + 0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, + 0x611c, 0x9182, 0x0800, 0x1a04, 0x6120, 0x2001, 0x180c, 0x2004, + 0x9084, 0x0003, 0x1904, 0x6126, 0x9188, 0x1000, 0x2104, 0x905d, + 0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, + 0x900d, 0x1904, 0x6138, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, + 0xb852, 0xb84e, 0x080c, 0x910d, 0x9006, 0x012e, 0x0005, 0x00a6, + 0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, + 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, + 0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0, 0x9084, + 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 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, 0x6972, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60cf, + 0x080c, 0x679b, 0x0904, 0x60e8, 0x0804, 0x60d3, 0x00b6, 0x00e6, + 0x0126, 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, 0x2001, + 0x196b, 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, 0x9188, + 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, 0x6912, 0x11d0, 0x080c, + 0xae0b, 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0009, + 0x600b, 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b, 0x8000, + 0x2009, 0x0043, 0x080c, 0xaedc, 0x9006, 0x00b0, 0x2001, 0x0028, + 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, + 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, + 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, + 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, + 0xa974, 0x9182, 0x0800, 0x1a04, 0x6206, 0x9188, 0x1000, 0x2104, + 0x905d, 0x0904, 0x61de, 0xb8a0, 0x9086, 0x007f, 0x0178, 0x080c, + 0x697a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, + 0x908e, 0x0005, 0x0118, 0x080c, 0x6972, 0x1598, 0xa87c, 0xd0fc, + 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, + 0xcb23, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x6208, 0x6020, + 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x6208, 0x601a, + 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xae0b, 0x05e8, + 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, + 0x2009, 0x0003, 0x080c, 0xaedc, 0x9006, 0x0458, 0x2001, 0x0028, + 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0, + 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 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, + 0x629d, 0x6258, 0x626f, 0x629d, 0x629d, 0x629d, 0x629d, 0x629d, + 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x659e, 0x0148, 0x9046, + 0xb810, 0x9306, 0x1904, 0x62a5, 0xb814, 0x9206, 0x15f0, 0x0028, + 0xbb12, 0xba16, 0x0010, 0x080c, 0x49b7, 0x0150, 0x04b0, 0x080c, + 0x65ff, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, + 0x080c, 0xae0b, 0x0530, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2900, + 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001, + 0x1170, 0x080c, 0x31bf, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002, + 0x080c, 0x654f, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, + 0x0003, 0x080c, 0xaedc, 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, + 0x648c, 0x90c6, 0x0056, 0x0904, 0x6490, 0x90c6, 0x0066, 0x0904, + 0x6494, 0x90c6, 0x0067, 0x0904, 0x6498, 0x90c6, 0x0068, 0x0904, + 0x649c, 0x90c6, 0x0071, 0x0904, 0x64a0, 0x90c6, 0x0074, 0x0904, + 0x64a4, 0x90c6, 0x007c, 0x0904, 0x64a8, 0x90c6, 0x007e, 0x0904, + 0x64ac, 0x90c6, 0x0037, 0x0904, 0x64b0, 0x9016, 0x2079, 0x1800, + 0xa974, 0x9186, 0x00ff, 0x0904, 0x6487, 0x9182, 0x0800, 0x1a04, + 0x6487, 0x080c, 0x65ff, 0x1198, 0xb804, 0x9084, 0x00ff, 0x9082, + 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, 0xadcb, + 0x1904, 0x6470, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6470, 0xa894, + 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x63d0, 0x90c6, + 0x0064, 0x0904, 0x63f9, 0x2008, 0x0804, 0x6392, 0xa998, 0xa8b0, + 0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f, 0x0a04, 0x6392, + 0x9186, 0x00ff, 0x0904, 0x6392, 0x9182, 0x0800, 0x1a04, 0x6392, + 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, 0x7880, 0x0096, 0x924e, + 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6392, 0x99cc, 0xff00, + 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x6392, 0x080c, 0x49b7, + 0x0904, 0x639c, 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, 0x0006, + 0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, + 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7c, + 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, 0xabd4, + 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, 0x9005, + 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0, + 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009, + 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009, + 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001, + 0x0030, 0x900e, 0x0478, 0x000e, 0x080c, 0xae0b, 0x1130, 0x2001, + 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, 0x080c, + 0xcfaa, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, + 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x31bf, 0x012e, + 0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x2009, + 0x0002, 0x080c, 0xaedc, 0xa8b0, 0xd094, 0x0118, 0xb8cc, 0xc08d, + 0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, + 0x080c, 0x56e3, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, + 0x080c, 0x65ff, 0x1904, 0x638d, 0x9186, 0x007f, 0x0130, 0x080c, + 0x6972, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0fff, + 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, + 0x080c, 0xcd1b, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, + 0x6394, 0xa998, 0xaeb0, 0x080c, 0x65ff, 0x1904, 0x638d, 0x0096, + 0x080c, 0x0fff, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x644d, + 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8c4, + 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, + 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbc8, + 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7c, 0x009e, 0xa87b, 0x0000, + 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x56cf, + 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, + 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6972, 0x0118, 0xa89b, 0x0009, + 0x0080, 0x080c, 0x56e3, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, + 0xccfe, 0x1904, 0x63c9, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, + 0x6394, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, + 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, + 0x1243, 0x080c, 0xb37a, 0x1904, 0x63c9, 0x2009, 0x0002, 0x08e8, + 0x2001, 0x0028, 0x900e, 0x0804, 0x63ca, 0x2009, 0x180c, 0x210c, + 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, + 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x63ca, 0x2001, + 0x0029, 0x900e, 0x0804, 0x63ca, 0x080c, 0x3749, 0x0804, 0x63cb, + 0x080c, 0x540c, 0x0804, 0x63cb, 0x080c, 0x4547, 0x0804, 0x63cb, + 0x080c, 0x45c0, 0x0804, 0x63cb, 0x080c, 0x461c, 0x0804, 0x63cb, + 0x080c, 0x4a7a, 0x0804, 0x63cb, 0x080c, 0x4d31, 0x0804, 0x63cb, + 0x080c, 0x5077, 0x0804, 0x63cb, 0x080c, 0x5270, 0x0804, 0x63cb, + 0x080c, 0x395f, 0x0804, 0x63cb, 0x00b6, 0xa974, 0xae78, 0x9684, + 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188, + 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6972, 0x1148, 0x00e9, + 0x080c, 0x672a, 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, 0x19e7, 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, 0x696e, + 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, + 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, + 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e, 0x00ce, + 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, + 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, + 0xd0a4, 0x0150, 0x080c, 0x696a, 0x1138, 0x9284, 0x00ff, 0x9086, + 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, + 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, + 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, + 0x2204, 0x905d, 0x1188, 0x0096, 0x080c, 0x0fff, 0x2958, 0x009e, + 0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, + 0xb8a6, 0xb8ae, 0x080c, 0x6034, 0x9006, 0x0010, 0x9085, 0x0001, + 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, 0x1031, 0x00d6, 0x00c6, 0xb8bc, 0x2060, + 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xcb35, + 0x0110, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x0c88, 0x00ce, + 0x00de, 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x1041, + 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, 0x73bc, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, + 0xadcb, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, + 0x1982, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, + 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, + 0x0001, 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, + 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, + 0x20e8, 0xb8c8, 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, 0xbbcc, 0xc384, + 0xba00, 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, + 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, + 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, + 0xbbce, 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, 0x0dd5, 0x3c00, + 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, + 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0fff, 0x0170, 0x2900, + 0xb8a6, 0xa803, 0x0000, 0x080c, 0x67bb, 0xa807, 0x0001, 0xae12, + 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, + 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, + 0x1150, 0x080c, 0x67ca, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, + 0x8001, 0xa806, 0x0020, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, + 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x910d, 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, 0xa692, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, + 0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, + 0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, + 0x080c, 0x681f, 0x0128, 0x080c, 0xcbf2, 0x0010, 0x9085, 0x0001, + 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcb97, 0x0010, 0x9085, + 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbef, 0x0010, + 0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbb6, + 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, + 0xcc33, 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, 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, 0x0fff, - 0x0168, 0x2900, 0xb8a6, 0x080c, 0x67bc, 0xa803, 0x0001, 0xa807, - 0x0000, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, - 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, - 0x0000, 0x080c, 0x1031, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, - 0xb89c, 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x73b0, 0x01b0, - 0x71c4, 0x81ff, 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, - 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, - 0x7804, 0xd0a4, 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, - 0x080c, 0x6600, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, - 0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, - 0x001e, 0x8108, 0x1f04, 0x6847, 0x015e, 0x080c, 0x6928, 0x0120, - 0x2001, 0x1985, 0x200c, 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, - 0x0130, 0x2009, 0x07d0, 0x2011, 0x6872, 0x080c, 0x8562, 0x00fe, - 0x00be, 0x0005, 0x00b6, 0x2011, 0x6872, 0x080c, 0x84ca, 0x080c, - 0x6928, 0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, - 0xb902, 0x080c, 0x6966, 0x0130, 0x2009, 0x07d0, 0x2011, 0x6872, - 0x080c, 0x8562, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, - 0x7082, 0x080c, 0x2f96, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, - 0x007f, 0x900e, 0x0016, 0x080c, 0x6600, 0x1538, 0xb800, 0xd0ec, - 0x0520, 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, - 0xe58d, 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6962, 0x2001, - 0x0707, 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, - 0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x903e, 0x080c, 0x913f, - 0x900e, 0x080c, 0xe2ca, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, - 0x689a, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, - 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, - 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b, - 0x2b02, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6035, 0xb807, + 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, 0x0fff, 0x0168, + 0x2900, 0xb8a6, 0x080c, 0x67bb, 0xa803, 0x0001, 0xa807, 0x0000, + 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, + 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, + 0x080c, 0x1031, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, + 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x73bc, 0x01b0, 0x71c4, + 0x81ff, 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, + 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, + 0xd0a4, 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, + 0x65ff, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, + 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, + 0x8108, 0x1f04, 0x6846, 0x015e, 0x080c, 0x6930, 0x0120, 0x2001, + 0x1985, 0x200c, 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, + 0x2009, 0x07d0, 0x2011, 0x6871, 0x080c, 0x858b, 0x00fe, 0x00be, + 0x0005, 0x00b6, 0x2011, 0x6871, 0x080c, 0x84f3, 0x080c, 0x6930, + 0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, + 0x080c, 0x696e, 0x0130, 0x2009, 0x07d0, 0x2011, 0x6871, 0x080c, + 0x858b, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082, + 0x080c, 0x2f96, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, + 0x900e, 0x0016, 0x080c, 0x65ff, 0x1538, 0xb800, 0xd0ec, 0x0520, + 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe5ae, + 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x696a, 0x2001, 0x0707, + 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, + 0x0029, 0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e, + 0x080c, 0xe2eb, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x6899, + 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, + 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, 0x080c, + 0x1018, 0x090c, 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b, 0x2b02, + 0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c, 0xffc0, + 0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6034, 0xb807, 0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c, 0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000, 0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, @@ -3164,84 +3165,84 @@ 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0dd5, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc, 0x0138, - 0x2001, 0x1983, 0x200c, 0x2011, 0x6958, 0x080c, 0x8562, 0x0005, - 0x2011, 0x6958, 0x080c, 0x84ca, 0x2011, 0x1837, 0x2204, 0xc0cc, - 0x2012, 0x0005, 0x080c, 0x56d0, 0xd0ac, 0x0005, 0x080c, 0x56d0, + 0x2001, 0x1983, 0x200c, 0x2011, 0x6960, 0x080c, 0x858b, 0x0005, + 0x2011, 0x6960, 0x080c, 0x84f3, 0x2011, 0x1837, 0x2204, 0xc0cc, + 0x2012, 0x0005, 0x080c, 0x56cf, 0xd0ac, 0x0005, 0x080c, 0x56cf, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, - 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd216, 0x0158, + 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd230, 0x0158, 0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8cc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071, 0x1910, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000, 0x0005, - 0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x56d0, - 0xd0fc, 0x1140, 0x080c, 0x56d0, 0x900e, 0xd09c, 0x0108, 0x8108, + 0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x56cf, + 0xd0fc, 0x1140, 0x080c, 0x56cf, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007, 0x0002, - 0x69aa, 0x69aa, 0x69aa, 0x69aa, 0x69aa, 0x69c0, 0x69ce, 0x69aa, + 0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69c8, 0x69d6, 0x69b2, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, - 0x770a, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006, + 0x7716, 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, 0x1910, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0x00e6, - 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c7e, 0x9286, - 0x0003, 0x0904, 0x6b14, 0x9286, 0x0005, 0x0904, 0x6b14, 0x2071, - 0x1877, 0xa87c, 0x9005, 0x0904, 0x6a75, 0x7140, 0xa868, 0x9102, - 0x0a04, 0x6c7e, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001, - 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6e20, - 0x0e04, 0x6e8e, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082, + 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286, + 0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0x2071, + 0x1877, 0xa87c, 0x9005, 0x0904, 0x6a7d, 0x7140, 0xa868, 0x9102, + 0x0a04, 0x6c86, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001, + 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6e28, + 0x0e04, 0x6e96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082, 0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, 0x6af7, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, 0x6aff, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c, 0x1904, - 0x6c7e, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6a39, 0x00e6, - 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c7e, 0x9286, - 0x0003, 0x0904, 0x6b14, 0x9286, 0x0005, 0x0904, 0x6b14, 0xa84f, - 0x8022, 0xa853, 0x0018, 0x0804, 0x6adc, 0xa868, 0xd0fc, 0x11d8, - 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, 0x6c7e, - 0xa87c, 0xd0bc, 0x1904, 0x6c7e, 0xa978, 0xa874, 0x9105, 0x1904, - 0x6c7e, 0x2001, 0x1948, 0x2004, 0x0002, 0x6c7e, 0x6ad8, 0x6b14, - 0x6b14, 0x6c7e, 0x6b14, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, - 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6c7e, 0xa87c, - 0xd0cc, 0x0904, 0x6c7e, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, - 0x1904, 0x6c7e, 0x9186, 0x0003, 0x0904, 0x6b14, 0x9186, 0x0005, - 0x0904, 0x6b14, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, + 0x6c86, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6a41, 0x00e6, + 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286, + 0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0xa84f, + 0x8022, 0xa853, 0x0018, 0x0804, 0x6ae4, 0xa868, 0xd0fc, 0x11d8, + 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, 0x6c86, + 0xa87c, 0xd0bc, 0x1904, 0x6c86, 0xa978, 0xa874, 0x9105, 0x1904, + 0x6c86, 0x2001, 0x1948, 0x2004, 0x0002, 0x6c86, 0x6ae0, 0x6b1c, + 0x6b1c, 0x6c86, 0x6b1c, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, + 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6c86, 0xa87c, + 0xd0cc, 0x0904, 0x6c86, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, + 0x1904, 0x6c86, 0x9186, 0x0003, 0x0904, 0x6b1c, 0x9186, 0x0005, + 0x0904, 0x6b1c, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c, 0x9005, - 0x1904, 0x6e20, 0x0e04, 0x6e8e, 0x2071, 0x0000, 0xa84c, 0x7082, + 0x1904, 0x6e28, 0x0e04, 0x6e96, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, - 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x002e, + 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, - 0x6c03, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fda, 0x8004, 0x8004, - 0x8004, 0x9084, 0x0003, 0x0002, 0x6b32, 0x6c03, 0x6b57, 0x6b9e, + 0x6c0b, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2, 0x8004, 0x8004, + 0x8004, 0x9084, 0x0003, 0x0002, 0x6b3a, 0x6c0b, 0x6b5f, 0x6ba6, 0x080c, 0x0dd5, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0c10, 0x2071, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, - 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x19f0, + 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0800, 0x0096, 0x00e6, + 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0800, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, - 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6fda, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6fda, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, + 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6fe2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, @@ -3249,85 +3250,85 @@ 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, - 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00fe, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, - 0x900d, 0x1904, 0x6c58, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, + 0x900d, 0x1904, 0x6c60, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6fda, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6fda, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, + 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6fe2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, - 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, + 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, - 0x080c, 0x83eb, 0x00ee, 0x0804, 0x6c13, 0xa868, 0xd0fc, 0x1560, + 0x080c, 0x8414, 0x00ee, 0x0804, 0x6c1b, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fb1, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, - 0x9005, 0x1904, 0x6d9a, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fda, - 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c9d, 0x6d9a, - 0x6cb8, 0x6d29, 0x080c, 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900, + 0x9005, 0x1904, 0x6da2, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2, + 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6ca5, 0x6da2, + 0x6cc0, 0x6d31, 0x080c, 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, - 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0c60, - 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6d18, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c60, + 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6d20, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x19f0, 0x0e04, 0x6d0f, 0x7838, + 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0, 0x0e04, 0x6d17, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, - 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0804, - 0x6ccb, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x1d60, 0x00ee, - 0x0e04, 0x6d6d, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0804, + 0x6cd3, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, + 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, + 0x0e04, 0x6d75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6fda, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, + 0x6fe2, 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, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00fe, 0x002e, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, - 0x1904, 0x6e0b, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c, + 0x1904, 0x6e13, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c, 0x0d50, 0x782c, - 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x05c8, 0x00e6, 0x7824, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d50, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, - 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6fda, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6e04, 0x7838, 0x7938, + 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6e0c, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 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, - 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00ee, 0x0804, 0x6daa, + 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00ee, 0x0804, 0x6db2, 0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1128, 0x1e04, 0x6e4b, 0x002e, 0x00ee, 0x0005, + 0xa804, 0x900d, 0x1128, 0x1e04, 0x6e53, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, - 0x83eb, 0x0e04, 0x6e35, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, + 0x8414, 0x0e04, 0x6e3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, - 0x2071, 0x1910, 0x080c, 0x6fc6, 0x002e, 0x00ee, 0x0005, 0xa850, + 0x2071, 0x1910, 0x080c, 0x6fce, 0x002e, 0x00ee, 0x0005, 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, @@ -3336,23 +3337,23 @@ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x002e, 0x00ee, 0x0005, + 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 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, - 0x1910, 0x7004, 0x0002, 0x6ed9, 0x6eda, 0x6fc5, 0x6eda, 0x0dd5, - 0x6fc5, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6ee4, 0x6ee4, - 0x6f5e, 0x6f5f, 0x6ee4, 0x6f5f, 0x0126, 0x2091, 0x8000, 0x1e0c, - 0x6fe5, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x6f2f, - 0x0e04, 0x6f0d, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, + 0x1910, 0x7004, 0x0002, 0x6ee1, 0x6ee2, 0x6fcd, 0x6ee2, 0x0dd5, + 0x6fcd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6eec, 0x6eec, + 0x6f66, 0x6f67, 0x6eec, 0x6f67, 0x0126, 0x2091, 0x8000, 0x1e0c, + 0x6fed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x6f37, + 0x0e04, 0x6f15, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x119b, 0x2071, 0x1910, 0x080c, 0x6fc6, 0x012e, 0x0804, 0x6f5d, + 0x119b, 0x2071, 0x1910, 0x080c, 0x6fce, 0x012e, 0x0804, 0x6f65, 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001, - 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c, 0x2071, + 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x2071, 0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, @@ -3361,10 +3362,10 @@ 0x2008, 0x2069, 0x19fa, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1ac8, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, - 0x6838, 0x9106, 0x0190, 0x0e04, 0x6f91, 0x2069, 0x0000, 0x6837, + 0x6838, 0x9106, 0x0190, 0x0e04, 0x6f99, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2069, 0x19fa, 0x683f, - 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7056, + 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x705e, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, @@ -3373,7 +3374,7 @@ 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1031, 0x0005, - 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6fdc, 0x0006, 0x0016, + 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6fe4, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dde, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, @@ -3384,4153 +3385,4156 @@ 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, - 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6fda, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, + 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6fe2, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 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, - 0x119b, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, + 0x119b, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x1d70, 0x00d6, + 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x19fa, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1949, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x0029, 0x1a0c, 0x0dd5, 0x9082, 0x001d, 0x001b, 0x6027, - 0x1e00, 0x0005, 0x717a, 0x7104, 0x7120, 0x7148, 0x7169, 0x71a9, - 0x71bb, 0x7120, 0x7191, 0x70bf, 0x70ed, 0x70be, 0x0005, 0x00d6, + 0x1e00, 0x0005, 0x7186, 0x710c, 0x7128, 0x7152, 0x7175, 0x71b5, + 0x71c7, 0x7128, 0x719d, 0x70c7, 0x70f5, 0x70c6, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, - 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x74ea, + 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x74f6, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b, 0x0028, - 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7585, 0x6028, 0x9085, + 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7591, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, - 0x2cef, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7228, 0xd1d4, + 0x2cef, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7234, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020, 0x080c, - 0x7228, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, - 0x2001, 0x0088, 0x080c, 0x2cef, 0x6124, 0xd1cc, 0x11d8, 0xd1dc, - 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001, - 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73dc, 0x2001, 0x0080, 0x080c, - 0x2cef, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e, 0x0040, 0x709b, - 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, - 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73dc, 0x2001, - 0x0080, 0x080c, 0x2cef, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, - 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x709b, 0x0028, 0x0040, - 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, - 0x0005, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x6124, 0xd1dc, 0x1138, - 0xd1e4, 0x0138, 0x080c, 0x1ad3, 0x709b, 0x001e, 0x0010, 0x709b, - 0x001d, 0x0005, 0x080c, 0x72ab, 0x6124, 0xd1dc, 0x1188, 0x080c, - 0x7228, 0x0016, 0x080c, 0x1ad3, 0x001e, 0xd1d4, 0x1128, 0xd1e4, - 0x0138, 0x709b, 0x001e, 0x0020, 0x709b, 0x001f, 0x080c, 0x7228, - 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x000e, 0x6124, - 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, - 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x0021, - 0x0005, 0x080c, 0x72ab, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, - 0x709b, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2cef, - 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0158, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, - 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x0016, 0x00c6, - 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x2091, 0x8000, 0x080c, 0x73b0, 0x11d8, 0x2001, 0x180c, - 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, - 0x2c38, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2cef, - 0x080c, 0x7698, 0x080c, 0x601b, 0x0428, 0x6028, 0xc0cd, 0x602a, - 0x0408, 0x080c, 0x73ca, 0x0150, 0x080c, 0x73c1, 0x1138, 0x2001, - 0x0001, 0x080c, 0x27ea, 0x080c, 0x7388, 0x00a0, 0x080c, 0x72a8, - 0x0178, 0x2001, 0x0001, 0x080c, 0x27ea, 0x7098, 0x9086, 0x001e, - 0x0120, 0x7098, 0x9086, 0x0022, 0x1118, 0x709b, 0x0025, 0x0010, - 0x709b, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, - 0x0026, 0x2011, 0x7239, 0x080c, 0x85a4, 0x002e, 0x0016, 0x0026, - 0x2009, 0x0064, 0x2011, 0x7239, 0x080c, 0x859b, 0x002e, 0x001e, - 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0xa259, 0x2071, 0x1800, - 0x080c, 0x71d6, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, - 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0xa259, - 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, - 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, - 0x0002, 0x080c, 0xa643, 0x080c, 0xa526, 0x080c, 0x8550, 0x0036, - 0x901e, 0x080c, 0xa59c, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe9c8, - 0x080c, 0xe9e3, 0x2009, 0x0004, 0x080c, 0x2c3e, 0x080c, 0x2b59, - 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7239, - 0x080c, 0x85a4, 0x080c, 0x73ca, 0x0118, 0x9006, 0x080c, 0x2cef, - 0x080c, 0x0bae, 0x2001, 0x0001, 0x080c, 0x27ea, 0x012e, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, - 0x00e6, 0x2011, 0x7246, 0x2071, 0x19fa, 0x701c, 0x9206, 0x1118, - 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, - 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, - 0x0170, 0x2001, 0x00c0, 0x080c, 0x2cef, 0x0156, 0x20a9, 0x002d, - 0x1d04, 0x72b8, 0x2091, 0x6000, 0x1f04, 0x72b8, 0x015e, 0x0005, - 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x76a7, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, + 0x7234, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, + 0x2001, 0x0088, 0x080c, 0x2cef, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, + 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1ad3, + 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73e8, 0x2001, + 0x0080, 0x080c, 0x2cef, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e, + 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, + 0x001f, 0x0005, 0x080c, 0x1ad3, 0x60e3, 0x0001, 0x600c, 0xc0b4, + 0x600e, 0x080c, 0x73e8, 0x2001, 0x0080, 0x080c, 0x2cef, 0x6124, + 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, + 0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, 0x709b, + 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, + 0x2cef, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1ad3, + 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, 0x72b7, + 0x6124, 0xd1dc, 0x1188, 0x080c, 0x7234, 0x0016, 0x080c, 0x1ad3, + 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020, + 0x709b, 0x001f, 0x080c, 0x7234, 0x0005, 0x0006, 0x2001, 0x00a0, + 0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, + 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, + 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x72b7, 0x6124, + 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, + 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x0006, + 0x2001, 0x0090, 0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1178, + 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e, + 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, + 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, + 0x73bc, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, + 0x2102, 0x6027, 0x0200, 0x080c, 0x2c38, 0x6024, 0xd0cc, 0x0148, + 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a, + 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x73d6, 0x0150, + 0x080c, 0x73cd, 0x1138, 0x2001, 0x0001, 0x080c, 0x27ea, 0x080c, + 0x7394, 0x00a0, 0x080c, 0x72b4, 0x0178, 0x2001, 0x0001, 0x080c, + 0x27ea, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, 0x0022, + 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee, + 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x7245, 0x080c, + 0x85cd, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x7245, + 0x080c, 0x85c4, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, + 0x080c, 0xa273, 0x2071, 0x1800, 0x080c, 0x71e2, 0x001e, 0x00fe, + 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, + 0x00f6, 0x0126, 0x080c, 0xa273, 0x2061, 0x0100, 0x2069, 0x0140, + 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, + 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c, + 0xa540, 0x080c, 0x8579, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e, + 0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x2009, 0x0004, + 0x080c, 0x2c3e, 0x080c, 0x2b59, 0x2001, 0x1800, 0x2003, 0x0004, + 0x6027, 0x0008, 0x2011, 0x7245, 0x080c, 0x85cd, 0x080c, 0x73d6, + 0x0118, 0x9006, 0x080c, 0x2cef, 0x080c, 0x0bae, 0x2001, 0x0001, + 0x080c, 0x27ea, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, + 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x7252, 0x2071, + 0x19fa, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, + 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, + 0x9084, 0xfffe, 0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, 0x080c, + 0x2cef, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x72c4, 0x2091, 0x6000, + 0x1f04, 0x72c4, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x76b3, 0x2001, + 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, + 0x28b2, 0x9006, 0x080c, 0x2cef, 0x080c, 0x5ed9, 0x6027, 0xffff, + 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, + 0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, + 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7384, + 0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023, + 0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, + 0x0001, 0x080c, 0x28b2, 0x0026, 0x080c, 0xadd2, 0x002e, 0x7000, + 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, + 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, + 0x0150, 0x012e, 0x015e, 0x080c, 0xd230, 0x0118, 0x9006, 0x080c, + 0x2d19, 0x0804, 0x7390, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, + 0x080c, 0x2c38, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, + 0x2cef, 0x1f04, 0x732e, 0x080c, 0x7413, 0x012e, 0x015e, 0x080c, + 0x73cd, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085, + 0x0020, 0x6052, 0x080c, 0x7413, 0x9006, 0x8001, 0x1df0, 0x000e, + 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7413, 0x080c, + 0xd230, 0x0118, 0x9006, 0x080c, 0x2d19, 0x0016, 0x0026, 0x7000, + 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7252, 0x080c, + 0x858b, 0x002e, 0x001e, 0x080c, 0x840b, 0x7034, 0xc085, 0x7036, + 0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x70af, 0x080c, 0x73cd, + 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x76a9, + 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8422, 0x080c, + 0x8414, 0x080c, 0x76b3, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x9006, 0x080c, 0x2cef, - 0x080c, 0x5eda, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, - 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186, 0x0000, - 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, - 0x0003, 0x0158, 0x0804, 0x7378, 0x709b, 0x0022, 0x0040, 0x709b, - 0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3, - 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28b2, 0x0026, - 0x080c, 0xadb8, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, - 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, - 0xd216, 0x0118, 0x9006, 0x080c, 0x2d19, 0x0804, 0x7384, 0x6800, - 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2c38, 0x6904, 0xd1d4, - 0x1140, 0x2001, 0x0100, 0x080c, 0x2cef, 0x1f04, 0x7322, 0x080c, - 0x7407, 0x012e, 0x015e, 0x080c, 0x73c1, 0x01a8, 0x6044, 0x9005, - 0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x7407, - 0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, - 0x1110, 0x080c, 0x7407, 0x080c, 0xd216, 0x0118, 0x9006, 0x080c, - 0x2d19, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, - 0x00c8, 0x2011, 0x7246, 0x080c, 0x8562, 0x002e, 0x001e, 0x080c, - 0x83e2, 0x7034, 0xc085, 0x7036, 0x2001, 0x197d, 0x2003, 0x0004, - 0x080c, 0x70a7, 0x080c, 0x73c1, 0x0138, 0x6804, 0xd0d4, 0x1120, - 0xd0dc, 0x1100, 0x080c, 0x769d, 0x00ee, 0x00de, 0x00ce, 0x0005, + 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, + 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c, 0x2004, + 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3, 0x9084, + 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3, + 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, + 0x56d3, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, + 0x080c, 0x56d3, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, + 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, + 0x0020, 0x080c, 0x28d2, 0x900e, 0x0028, 0x080c, 0x696a, 0x1dc8, + 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x318a, 0x9006, 0x0019, + 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, + 0x080c, 0xd229, 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, 0x7428, 0x2091, 0x6000, 0x1f04, 0x7428, 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, 0x28b2, 0x2001, 0x00a0, + 0x0006, 0x080c, 0xd230, 0x000e, 0x0130, 0x080c, 0x2d0d, 0x9006, + 0x080c, 0x2d19, 0x0010, 0x080c, 0x2cef, 0x000e, 0x6052, 0x6050, + 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2bad, + 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x83f9, 0x080c, 0x83eb, 0x080c, 0x76a7, 0x2001, - 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, - 0x28b2, 0x9006, 0x080c, 0x2cef, 0x6043, 0x0090, 0x6043, 0x0010, - 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, - 0x0006, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, - 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, - 0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086, 0x0030, - 0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086, - 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, - 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, - 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x28d2, 0x900e, - 0x0028, 0x080c, 0x6962, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, - 0x080c, 0x3187, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, - 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xd20f, 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, 0x741c, 0x2091, 0x6000, - 0x1f04, 0x741c, 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, 0x28b2, 0x2001, 0x00a0, 0x0006, 0x080c, 0xd216, 0x000e, - 0x0130, 0x080c, 0x2d0d, 0x9006, 0x080c, 0x2d19, 0x0010, 0x080c, - 0x2cef, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, - 0x2079, 0x0100, 0x080c, 0x2bad, 0x00fe, 0x000e, 0x6052, 0x0005, - 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, - 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, - 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x74dc, - 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, - 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2cef, 0x20a9, - 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x7489, 0x2091, 0x6000, - 0x1f04, 0x7489, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, - 0x080c, 0xa643, 0x080c, 0xa526, 0x901e, 0x080c, 0xa59c, 0x2001, - 0x00a0, 0x080c, 0x2cef, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c, - 0xd216, 0x0110, 0x080c, 0x0d45, 0x9085, 0x0001, 0x0498, 0x86ff, - 0x1110, 0x080c, 0x1ad3, 0x60e3, 0x0000, 0x2001, 0x196d, 0x2004, - 0x080c, 0x28b2, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2cef, 0x20a9, - 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024, - 0x910c, 0x0138, 0x1d04, 0x74c1, 0x2091, 0x6000, 0x1f04, 0x74c1, - 0x0808, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4, 0x9005, 0x1118, - 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xd216, 0x0110, 0x080c, - 0x0d45, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, - 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, - 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, - 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, - 0x1128, 0x2069, 0x1a79, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, - 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x754f, - 0x2001, 0x0088, 0x080c, 0x2cef, 0x9006, 0x60e2, 0x6886, 0x080c, - 0x28b2, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, - 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069, - 0x198f, 0x7000, 0x206a, 0x709b, 0x0026, 0x7003, 0x0001, 0x20a9, - 0x0002, 0x1d04, 0x7531, 0x2091, 0x6000, 0x1f04, 0x7531, 0x0804, - 0x757d, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, - 0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00, - 0x11f0, 0x1d04, 0x753d, 0x2091, 0x6000, 0x1f04, 0x753d, 0x2011, - 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c, 0xa643, 0x080c, - 0xa526, 0x901e, 0x080c, 0xa59c, 0x2001, 0x00a0, 0x080c, 0x2cef, - 0x080c, 0x7698, 0x080c, 0x601b, 0x9085, 0x0001, 0x00b0, 0x2001, - 0x0080, 0x080c, 0x2cef, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, - 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, - 0x2004, 0x080c, 0x28b2, 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, 0xa639, - 0x2011, 0x0002, 0x080c, 0xa643, 0x080c, 0xa526, 0x901e, 0x080c, - 0xa59c, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, - 0x7698, 0x080c, 0x601b, 0x0804, 0x7618, 0x2001, 0x180c, 0x200c, - 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x722e, 0x2069, 0x0140, - 0x2001, 0x0080, 0x080c, 0x2cef, 0x60e3, 0x0000, 0x2069, 0x0200, - 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, - 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x198f, 0x7000, 0x206a, - 0x709b, 0x0027, 0x7003, 0x0001, 0x0804, 0x7618, 0x6027, 0x1e00, - 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x01c8, 0x9084, - 0x1c00, 0x11b0, 0x1d04, 0x75d6, 0x0006, 0x0016, 0x00c6, 0x00d6, - 0x00e6, 0x080c, 0x842a, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, - 0x00e6, 0x2071, 0x19fa, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x0500, - 0x0026, 0x2011, 0x7246, 0x080c, 0x84ca, 0x2011, 0x7239, 0x080c, - 0x85a4, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, - 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, - 0x080c, 0x28b2, 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, 0xd20f, 0x1904, 0x7686, 0x7130, - 0xd184, 0x1170, 0x080c, 0x3312, 0x0138, 0xc18d, 0x7132, 0x2011, - 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x7686, - 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, - 0x080c, 0xe501, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, - 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6600, 0x1170, - 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xe58d, 0x2009, - 0x0001, 0x2011, 0x0100, 0x080c, 0x86b4, 0x001e, 0x8108, 0x1f04, - 0x764f, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x3187, 0x001e, 0x0078, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6600, 0x1110, 0x080c, - 0x6035, 0x8108, 0x1f04, 0x767c, 0x00be, 0x015e, 0x080c, 0x1ad3, - 0x080c, 0xadb8, 0x60e3, 0x0000, 0x080c, 0x601b, 0x080c, 0x72e2, - 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, - 0x2001, 0x197d, 0x2003, 0x0001, 0x0005, 0x2001, 0x197d, 0x2003, - 0x0000, 0x0005, 0x2001, 0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, - 0x197c, 0x2003, 0x0000, 0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, - 0x7007, 0x0000, 0x080c, 0x1018, 0x090c, 0x0dd5, 0xa8ab, 0xdcb0, - 0x2900, 0x704e, 0x080c, 0x1018, 0x090c, 0x0dd5, 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, 0x18fa, 0x6807, 0x0001, 0x00de, 0x080c, 0x7c84, 0x9006, - 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, - 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, - 0x3e08, 0x1f04, 0x770e, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, - 0x18fa, 0x7004, 0x0002, 0x772d, 0x772e, 0x7765, 0x77c0, 0x78d0, - 0x772b, 0x772b, 0x78fa, 0x080c, 0x0dd5, 0x0005, 0x2079, 0x0040, - 0x782c, 0x908c, 0x0780, 0x190c, 0x7d66, 0xd0a4, 0x01f0, 0x7824, + 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, + 0xc1c5, 0x2102, 0x0804, 0x74e8, 0x2001, 0x180c, 0x200c, 0xc1c4, + 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, + 0x0090, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, + 0x1d04, 0x7495, 0x2091, 0x6000, 0x1f04, 0x7495, 0x2011, 0x0003, + 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c, 0xa540, + 0x901e, 0x080c, 0xa5b6, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, + 0x76a4, 0x080c, 0x601a, 0x080c, 0xd230, 0x0110, 0x080c, 0x0d45, + 0x9085, 0x0001, 0x0498, 0x86ff, 0x1110, 0x080c, 0x1ad3, 0x60e3, + 0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2, 0x2001, + 0x0080, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, + 0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x0138, 0x1d04, 0x74cd, + 0x2091, 0x6000, 0x1f04, 0x74cd, 0x0808, 0x6028, 0x9085, 0x1e00, + 0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, + 0x080c, 0xd230, 0x0110, 0x080c, 0x0d45, 0x9006, 0x00ee, 0x00de, + 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, + 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, + 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a79, 0x2d04, + 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, + 0x6884, 0x9005, 0x1904, 0x755b, 0x2001, 0x0088, 0x080c, 0x2cef, + 0x9006, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x2069, 0x0200, 0x6804, + 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, + 0x602a, 0x6027, 0x0400, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, + 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x753d, 0x2091, + 0x6000, 0x1f04, 0x753d, 0x0804, 0x7589, 0x2069, 0x0140, 0x20a9, + 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024, + 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x7549, 0x2091, + 0x6000, 0x1f04, 0x7549, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011, + 0x0002, 0x080c, 0xa65d, 0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6, + 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a, + 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2cef, 0x2069, + 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, + 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 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, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, + 0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6, 0x2069, 0x0140, 0x2001, + 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a, 0x0804, + 0x7624, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, + 0x080c, 0x723a, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2cef, + 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, + 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, + 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001, + 0x0804, 0x7624, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, + 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x75e2, + 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8453, 0x00ee, + 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19fa, 0x7018, + 0x00ee, 0x9005, 0x19f8, 0x0500, 0x0026, 0x2011, 0x7252, 0x080c, + 0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x002e, 0x2069, 0x0140, + 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, + 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 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, + 0xd229, 0x1904, 0x7692, 0x7130, 0xd184, 0x1170, 0x080c, 0x3319, + 0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, + 0x7030, 0xd08c, 0x0904, 0x7692, 0x2011, 0x1848, 0x220c, 0xd1a4, + 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe522, 0x0156, 0x00b6, + 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, + 0x0188, 0x080c, 0x65ff, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, + 0x000e, 0x080c, 0xe5ae, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, + 0x86dd, 0x001e, 0x8108, 0x1f04, 0x765b, 0x00be, 0x015e, 0x001e, + 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, + 0x318a, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, + 0x080c, 0x65ff, 0x1110, 0x080c, 0x6034, 0x8108, 0x1f04, 0x7688, + 0x00be, 0x015e, 0x080c, 0x1ad3, 0x080c, 0xadd2, 0x60e3, 0x0000, + 0x080c, 0x601a, 0x080c, 0x72ee, 0x00ee, 0x00ce, 0x004e, 0x003e, + 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, 0x0001, + 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, 0x197c, + 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, 0x0005, + 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1018, + 0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1018, + 0x090c, 0x0dd5, 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, 0x18fa, 0x6807, 0x0001, + 0x00de, 0x080c, 0x7c90, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, + 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, + 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x771a, 0x015e, + 0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7739, + 0x773a, 0x7771, 0x77cc, 0x78dc, 0x7737, 0x7737, 0x7906, 0x080c, + 0x0dd5, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, + 0x7d72, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, + 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, + 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, + 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c, + 0x77cc, 0x782c, 0xd09c, 0x090c, 0x7c90, 0x0005, 0x9082, 0x005a, + 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x7802, 0x0c90, 0x00e3, + 0x08f0, 0x0005, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7824, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x780e, 0x7802, + 0x79f7, 0x7802, 0x7802, 0x7802, 0x7824, 0x7802, 0x780e, 0x7a38, + 0x7a79, 0x7ac0, 0x7ad4, 0x7802, 0x7802, 0x7824, 0x780e, 0x7838, + 0x7802, 0x78b0, 0x7b7f, 0x7b9a, 0x7802, 0x7824, 0x7802, 0x7838, + 0x7802, 0x7802, 0x78a6, 0x7b9a, 0x7802, 0x7802, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x784c, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7d16, + 0x7802, 0x7cc0, 0x7802, 0x7cc0, 0x7802, 0x7861, 0x7802, 0x7802, + 0x7802, 0x7802, 0x7802, 0x7802, 0x2079, 0x0040, 0x7004, 0x9086, + 0x0003, 0x1198, 0x782c, 0x080c, 0x7cb9, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, - 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, - 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, - 0x9186, 0x0003, 0x19e8, 0x080c, 0x77c0, 0x782c, 0xd09c, 0x090c, - 0x7c84, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, - 0x080c, 0x77f6, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x77f6, 0x77f6, - 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x7818, 0x77f6, - 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, - 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, - 0x77f6, 0x77f6, 0x7802, 0x77f6, 0x79eb, 0x77f6, 0x77f6, 0x77f6, - 0x7818, 0x77f6, 0x7802, 0x7a2c, 0x7a6d, 0x7ab4, 0x7ac8, 0x77f6, - 0x77f6, 0x7818, 0x7802, 0x782c, 0x77f6, 0x78a4, 0x7b73, 0x7b8e, - 0x77f6, 0x7818, 0x77f6, 0x782c, 0x77f6, 0x77f6, 0x789a, 0x7b8e, - 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, - 0x77f6, 0x7840, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, - 0x77f6, 0x77f6, 0x77f6, 0x7d0a, 0x77f6, 0x7cb4, 0x77f6, 0x7cb4, - 0x77f6, 0x7855, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, - 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, - 0x7cad, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, - 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, - 0x00e9, 0x080c, 0x7c84, 0x0005, 0x77f6, 0x7802, 0x79d7, 0x77f6, - 0x7802, 0x77f6, 0x7802, 0x7802, 0x77f6, 0x7802, 0x79d7, 0x7802, - 0x7802, 0x7802, 0x7802, 0x7802, 0x77f6, 0x7802, 0x79d7, 0x77f6, - 0x77f6, 0x7802, 0x77f6, 0x77f6, 0x77f6, 0x7802, 0x00e6, 0x2071, - 0x18fa, 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, 0x6c79, 0x012e, 0x0005, - 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, - 0x0001, 0x0804, 0x7979, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, - 0x701a, 0x704b, 0x7979, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, - 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7994, 0x7007, - 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7994, 0x0005, - 0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x77fe, 0x8001, 0x1120, - 0x7007, 0x0001, 0x0804, 0x79b0, 0x7007, 0x0003, 0x7012, 0x2900, - 0x7016, 0x701a, 0x704b, 0x79b0, 0x0005, 0xa864, 0x8007, 0x9084, - 0x00ff, 0x9086, 0x0001, 0x1904, 0x77fe, 0x7007, 0x0001, 0x2009, - 0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a, - 0xa883, 0x0000, 0x080c, 0x62af, 0x1108, 0x0005, 0x0126, 0x2091, - 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x6c79, 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, 0x7ba5, 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, 0x7806, 0xaab4, 0x928a, - 0x0002, 0x1a04, 0x7806, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, - 0x0118, 0x2001, 0x7937, 0x0018, 0x9280, 0x792d, 0x2005, 0x7056, - 0x7010, 0x9015, 0x0904, 0x7918, 0x080c, 0x1018, 0x1118, 0x7007, - 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, - 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, - 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, - 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, - 0x080c, 0x10e9, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, - 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1031, - 0x7014, 0x2048, 0x0804, 0x7806, 0x7020, 0x2048, 0x7018, 0xa802, - 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78d0, - 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, - 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x001e, 0x0904, 0x7ba5, 0x0804, 0x7979, 0x792f, 0x7933, 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, 0x1834, 0x210c, 0x81ff, 0x1178, 0x080c, 0x60af, - 0x1108, 0x0005, 0x080c, 0x6eb8, 0x0126, 0x2091, 0x8000, 0x080c, - 0xce0a, 0x080c, 0x6c79, 0x012e, 0x0ca0, 0x080c, 0xd20f, 0x1d70, - 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff, - 0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000, 0x080c, 0x613f, - 0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, - 0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90, - 0x2009, 0x1834, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, - 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x6211, 0x1138, - 0x0005, 0x9006, 0xa87a, 0x080c, 0x618c, 0x1108, 0x0005, 0x0126, - 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6c79, 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, 0x6600, 0x11b8, 0x0066, 0xae80, - 0x080c, 0x6710, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, - 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6600, 0x1110, 0x080c, - 0x6810, 0x8108, 0x1f04, 0x7a14, 0x00ce, 0xa87c, 0xd084, 0x1120, - 0x080c, 0x1031, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6c79, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, - 0x0001, 0x080c, 0x6966, 0x0580, 0x2061, 0x1a71, 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, 0x7c6e, 0x012e, 0x0804, 0x7c68, 0x012e, - 0x0804, 0x7c62, 0x012e, 0x0804, 0x7c65, 0x0126, 0x2091, 0x8000, - 0x7007, 0x0001, 0x080c, 0x6966, 0x05e0, 0x2061, 0x1a71, 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, 0x7c6e, 0x012e, 0x0804, - 0x7c6b, 0x012e, 0x0804, 0x7c68, 0x0126, 0x2091, 0x8000, 0x7007, - 0x0001, 0x2061, 0x1a71, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, - 0x0220, 0x630a, 0x012e, 0x0804, 0x7c7c, 0x012e, 0x0804, 0x7c6b, - 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, - 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a71, 0x6000, 0x9084, 0xfcff, - 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, - 0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xae78, - 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110, - 0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0xaec2, 0xa988, 0x918c, - 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, - 0x080c, 0x86b4, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a71, - 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, - 0x012e, 0x00be, 0x0804, 0x7c6e, 0x00ce, 0x012e, 0x00be, 0x0804, - 0x7c68, 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, 0x6600, 0x1968, 0xb800, 0xc0e4, - 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, - 0x1986, 0x2004, 0x601a, 0x0804, 0x7b03, 0xa88c, 0x9065, 0x0960, - 0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150, - 0x080c, 0xae78, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xae78, 0x00ee, - 0x0804, 0x7b03, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, - 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, - 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, - 0x00ee, 0x0804, 0x7b03, 0x2061, 0x1a71, 0x6000, 0xd084, 0x0190, - 0xd08c, 0x1904, 0x7c7c, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, - 0x0220, 0x6206, 0x012e, 0x0804, 0x7c7c, 0x012e, 0xa883, 0x0016, - 0x0804, 0x7c75, 0xa883, 0x0007, 0x0804, 0x7c75, 0xa864, 0x8007, - 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, - 0x0005, 0x080c, 0x77fe, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, - 0x7016, 0x701a, 0x704b, 0x7ba5, 0x0005, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904, - 0x7c27, 0x6130, 0xd194, 0x1904, 0x7c51, 0xa878, 0x2070, 0x9e82, - 0x1cd0, 0x0a04, 0x7c1b, 0x6068, 0x9e02, 0x1a04, 0x7c1b, 0x7120, - 0x9186, 0x0006, 0x1904, 0x7c0d, 0x7010, 0x905d, 0x0904, 0x7c27, - 0xb800, 0xd0e4, 0x1904, 0x7c4b, 0x2061, 0x1a71, 0x6100, 0x9184, - 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7c54, - 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, - 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7c57, 0x080c, 0x56d0, 0xd09c, - 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x85d4, 0x012e, - 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, - 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7c57, 0x012e, 0x00ee, 0x00be, - 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7c75, - 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6600, - 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, - 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, - 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, - 0x56d4, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0, - 0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, - 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, - 0x9086, 0x0007, 0x1904, 0x7bb1, 0x7003, 0x0002, 0x0804, 0x7bb1, - 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, - 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, - 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xe115, 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, 0x6c79, 0x012e, 0x0005, 0x080c, 0x1031, 0x0005, 0x00d6, - 0x080c, 0x85cb, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, - 0x190c, 0x7d66, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea, - 0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e, - 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, - 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, - 0x190c, 0x7d66, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8, - 0x080c, 0xadf1, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0035, 0x1138, 0x6008, 0xc0fd, 0x600a, 0x2001, 0x196b, - 0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00, - 0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x283e, 0x1540, 0x00b6, - 0x080c, 0x6600, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001, - 0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110, - 0x2009, 0x0041, 0x080c, 0xaec2, 0x0005, 0xa87b, 0x0101, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x0005, 0xa87b, 0x002c, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x0005, 0xa87b, - 0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x080c, - 0xae47, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, - 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7d57, 0xa97c, - 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, - 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, - 0x080c, 0xadf1, 0x1118, 0x080c, 0xae95, 0x05a8, 0x6212, 0xa874, - 0x0002, 0x7d35, 0x7d3a, 0x7d3d, 0x7d43, 0x2019, 0x0002, 0x080c, - 0xe501, 0x0060, 0x080c, 0xe49d, 0x0048, 0x2019, 0x0002, 0xa980, - 0x080c, 0xe4b8, 0x0018, 0xa980, 0x080c, 0xe49d, 0x080c, 0xae47, - 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 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, 0x7d68, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, - 0x0dde, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, - 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, - 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x157d, 0x00fe, - 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, - 0x0005, 0x781c, 0xd08c, 0x0904, 0x7de8, 0x68c0, 0x90aa, 0x0005, - 0x0a04, 0x83e2, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484, - 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, - 0x0804, 0x7def, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, - 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, - 0x8100, 0x11c0, 0x080c, 0xe9a0, 0x080c, 0x82d7, 0x7817, 0x0140, - 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x8335, 0x19c0, 0xd5a4, - 0x0148, 0x0046, 0x0056, 0x080c, 0x7e4a, 0x080c, 0x2337, 0x005e, - 0x004e, 0x0020, 0x080c, 0xe9a0, 0x7817, 0x0140, 0x080c, 0x73b0, - 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x6893, 0x0000, - 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7e2b, - 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, 0x0005, 0x0002, - 0x7e01, 0x80f9, 0x7df8, 0x7df8, 0x7df8, 0x7df8, 0x7df8, 0x7df8, - 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, - 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, - 0x0fff, 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, - 0x1118, 0x080c, 0x5731, 0x0070, 0x080c, 0x7e6a, 0x0058, 0x9286, - 0x3000, 0x1118, 0x080c, 0x8034, 0x0028, 0x9286, 0x8000, 0x1110, - 0x080c, 0x8207, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, - 0x090c, 0x9664, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, - 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, - 0x2011, 0x8048, 0x2518, 0x080c, 0x4b05, 0x003e, 0x002e, 0x0005, - 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, - 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, - 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, - 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, - 0x2011, 0x8048, 0x080c, 0x4b05, 0x002e, 0x00fe, 0x005e, 0x004e, - 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, - 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8005, 0x9186, - 0x0023, 0x15c0, 0x080c, 0x829c, 0x0904, 0x8005, 0x6120, 0x9186, - 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, - 0x9186, 0x000a, 0x1904, 0x8005, 0x7124, 0x610a, 0x7030, 0x908e, - 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xaec2, 0x0804, 0x8005, - 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, - 0x080c, 0xaec2, 0x0804, 0x8005, 0x908e, 0x0100, 0x1904, 0x8005, - 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0016, 0x080c, 0xaec2, - 0x0804, 0x8005, 0x9186, 0x0022, 0x1904, 0x8005, 0x7030, 0x908e, - 0x0300, 0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, - 0x918c, 0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, - 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, - 0x2887, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x283e, - 0x695e, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, - 0x70b6, 0x00ee, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0017, - 0x0804, 0x7fd2, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, - 0x8005, 0x080c, 0x73b0, 0x0120, 0x2009, 0x001d, 0x0804, 0x7fd2, - 0x68dc, 0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x7fd2, 0x908e, - 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0018, - 0x0804, 0x7fd2, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, - 0x7fd2, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7fd2, - 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, - 0x001b, 0x0804, 0x7fd2, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, - 0x1904, 0x8005, 0x2009, 0x001c, 0x0804, 0x7fd2, 0x908e, 0x1300, - 0x1120, 0x2009, 0x0034, 0x0804, 0x7fd2, 0x908e, 0x1200, 0x1140, - 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0024, 0x0804, 0x7fd2, - 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, - 0x1810, 0x2004, 0xd09c, 0x0904, 0x7fd2, 0x080c, 0xd8ea, 0x1904, - 0x8005, 0x0804, 0x7fd0, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, - 0x2009, 0x002a, 0x0804, 0x7fd2, 0x908e, 0x0f00, 0x1120, 0x2009, - 0x0020, 0x0804, 0x7fd2, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205, - 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, - 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, - 0x4b05, 0x004e, 0x8108, 0x0f04, 0x7f86, 0x9186, 0x0280, 0x1d88, - 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, - 0x2009, 0x0023, 0x0804, 0x7fd2, 0x908e, 0x6000, 0x1120, 0x2009, - 0x003f, 0x0804, 0x7fd2, 0x908e, 0x5400, 0x1138, 0x080c, 0x8392, - 0x1904, 0x8005, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148, - 0x080c, 0x83ba, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042, - 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, 0x6838, 0xd0d4, 0x0110, - 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, - 0x080c, 0x283e, 0x1568, 0x080c, 0x659f, 0x1550, 0xbe12, 0xbd16, - 0x001e, 0x0016, 0xb8c0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, - 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, 0x9084, 0xff00, 0x1110, - 0x001e, 0x0098, 0x080c, 0xadf1, 0x01a8, 0x2b08, 0x6112, 0x6023, - 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, - 0x000a, 0x0016, 0x001e, 0x080c, 0xaec2, 0x00ce, 0x00be, 0x0005, - 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, - 0x8049, 0x080c, 0x4b05, 0x080c, 0xae95, 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, 0x910f, 0x08a0, 0x080c, 0x32dc, 0x1140, 0x7010, - 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, - 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, - 0x0033, 0x11e8, 0x080c, 0x829c, 0x0904, 0x8091, 0x7124, 0x610a, - 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0, 0x2009, - 0x0015, 0x080c, 0xaec2, 0x04a8, 0x908e, 0x0100, 0x1590, 0x7034, - 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xaec2, 0x0450, 0x9186, - 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, 0x0038, - 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, - 0x11b8, 0x080c, 0x659f, 0x11a0, 0xbe12, 0xbd16, 0x080c, 0xadf1, - 0x0178, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0004, 0x7120, - 0x610a, 0x001e, 0x080c, 0xaec2, 0x080c, 0x9664, 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, 0x80f3, - 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x80f3, 0x9596, - 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, 0x2019, - 0x1837, 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, 0x80c8, 0x82ff, 0x1118, 0x9085, 0x0001, - 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, 0x00be, - 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x0002, - 0x8110, 0x8110, 0x8110, 0x82ae, 0x8110, 0x8119, 0x8144, 0x81d2, - 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, - 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, - 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c, - 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02, 0x1290, - 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150, - 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, 0x0046, - 0x080c, 0xaec2, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, - 0x090c, 0x9664, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, - 0x0904, 0x81a8, 0x7110, 0xd1bc, 0x1904, 0x81a8, 0x7108, 0x700c, - 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0, 0x81ff, - 0x15a0, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, - 0x0080, 0x9106, 0x0904, 0x81a8, 0x080c, 0x659f, 0x1904, 0x81a8, - 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294, 0xff00, - 0x9286, 0x0600, 0x11a0, 0x080c, 0xadf1, 0x05e8, 0x2b08, 0x7028, - 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, - 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xdb44, 0x0408, 0x080c, - 0x696a, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x8095, 0x11c0, - 0x0898, 0x080c, 0xadf1, 0x2b08, 0x0198, 0x6112, 0x6023, 0x0004, - 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, 0x0010, - 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, - 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, - 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, - 0x2011, 0x8049, 0x080c, 0x4b05, 0x080c, 0xae95, 0x0d48, 0x2b08, - 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x6017, - 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90c7, 0x080c, - 0x9664, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020, 0x2060, - 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868, 0x9c02, + 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c90, 0x0005, + 0x7802, 0x780e, 0x79e3, 0x7802, 0x780e, 0x7802, 0x780e, 0x780e, + 0x7802, 0x780e, 0x79e3, 0x780e, 0x780e, 0x780e, 0x780e, 0x780e, + 0x7802, 0x780e, 0x79e3, 0x7802, 0x7802, 0x780e, 0x7802, 0x7802, + 0x7802, 0x780e, 0x00e6, 0x2071, 0x18fa, 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, 0x6c81, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, + 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7985, 0x7007, + 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7985, 0x0005, + 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, + 0x0001, 0x0804, 0x79a0, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, + 0x701a, 0x704b, 0x79a0, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, + 0x0904, 0x780a, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x79bc, + 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x79bc, + 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, + 0x780a, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8, + 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x62ae, + 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, + 0xa982, 0x080c, 0x6c81, 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, 0x7bb1, + 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, 0x7812, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7812, 0x82ff, + 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7943, 0x0018, + 0x9280, 0x7939, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7924, + 0x080c, 0x1018, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, + 0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, + 0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, + 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, + 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10e9, 0xa06c, 0x908e, + 0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, + 0x7020, 0x2048, 0x080c, 0x1031, 0x7014, 0x2048, 0x0804, 0x7812, + 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, + 0xa906, 0x711a, 0x0804, 0x78dc, 0x7014, 0x2048, 0x7007, 0x0001, + 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, + 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7bb1, 0x0804, + 0x7985, 0x793b, 0x793f, 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, 0x1834, 0x210c, + 0x81ff, 0x1178, 0x080c, 0x60ae, 0x1108, 0x0005, 0x080c, 0x6ec0, + 0x0126, 0x2091, 0x8000, 0x080c, 0xce24, 0x080c, 0x6c81, 0x012e, + 0x0ca0, 0x080c, 0xd229, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, + 0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188, + 0xa883, 0x0000, 0x080c, 0x613e, 0x1108, 0x0005, 0xa87a, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x0cb8, 0x2001, 0x0028, + 0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, 0x81ff, + 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, + 0x0120, 0x080c, 0x6210, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, + 0x618b, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, + 0x080c, 0x6c81, 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, + 0x65ff, 0x11b8, 0x0066, 0xae80, 0x080c, 0x670f, 0x006e, 0x0088, + 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, + 0x080c, 0x65ff, 0x1110, 0x080c, 0x680f, 0x8108, 0x1f04, 0x7a20, + 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1031, 0x00be, 0x0005, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x00be, 0x0005, + 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e, 0x0580, + 0x2061, 0x1a71, 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, 0x7c7a, + 0x012e, 0x0804, 0x7c74, 0x012e, 0x0804, 0x7c6e, 0x012e, 0x0804, + 0x7c71, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e, + 0x05e0, 0x2061, 0x1a71, 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, 0x7c7a, 0x012e, 0x0804, 0x7c77, 0x012e, 0x0804, 0x7c74, + 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a71, 0x6300, + 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, + 0x7c88, 0x012e, 0x0804, 0x7c77, 0x00b6, 0x0126, 0x00c6, 0x2091, + 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, + 0x1a71, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, + 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, 0x2004, + 0x9005, 0x0118, 0x080c, 0xae92, 0x0068, 0x6017, 0xf400, 0x605b, + 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041, + 0x080c, 0xaedc, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, + 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x86dd, 0x002e, 0xa87c, + 0xd0c4, 0x0148, 0x2061, 0x1a71, 0x6000, 0xd08c, 0x1120, 0x6008, + 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c7a, + 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c74, 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, + 0x65ff, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, + 0x09b8, 0x6007, 0x0024, 0x2001, 0x1986, 0x2004, 0x601a, 0x0804, + 0x7b0f, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, + 0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xae92, 0x8eff, 0x0118, + 0x2e60, 0x080c, 0xae92, 0x00ee, 0x0804, 0x7b0f, 0x6024, 0xc0dc, + 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, + 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, + 0x080c, 0x90f0, 0x080c, 0x968d, 0x00ee, 0x0804, 0x7b0f, 0x2061, + 0x1a71, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7c88, 0x0126, + 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, + 0x7c88, 0x012e, 0xa883, 0x0016, 0x0804, 0x7c81, 0xa883, 0x0007, + 0x0804, 0x7c81, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, + 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x780a, 0x0040, + 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7bb1, + 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, + 0x1800, 0x61d0, 0x81ff, 0x1904, 0x7c33, 0x6130, 0xd194, 0x1904, + 0x7c5d, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x7c27, 0x6068, + 0x9e02, 0x1a04, 0x7c27, 0x7120, 0x9186, 0x0006, 0x1904, 0x7c19, + 0x7010, 0x905d, 0x0904, 0x7c33, 0xb800, 0xd0e4, 0x1904, 0x7c57, + 0x2061, 0x1a71, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, + 0x7024, 0xd0dc, 0x1904, 0x7c60, 0xa883, 0x0000, 0xa803, 0x0000, + 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, + 0x7c63, 0x080c, 0x56cf, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, + 0x2e60, 0x080c, 0x85fd, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, + 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, + 0x7c63, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, + 0x0006, 0x00be, 0x0804, 0x7c81, 0xd184, 0x0db8, 0xd1c4, 0x1190, + 0x00a0, 0xa974, 0x080c, 0x65ff, 0x15d0, 0xb800, 0xd0e4, 0x15b8, + 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, + 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, + 0xa883, 0x0035, 0x0430, 0x080c, 0x56d3, 0xd0fc, 0x01e8, 0xa878, + 0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6068, 0x9e02, 0x12a8, 0x7120, + 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, + 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7bbd, + 0x7003, 0x0002, 0x0804, 0x7bbd, 0xa883, 0x0028, 0x0010, 0xa883, + 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, + 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, + 0x080c, 0xe134, 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, 0x6c81, 0x012e, 0x0005, + 0x080c, 0x1031, 0x0005, 0x00d6, 0x080c, 0x85f4, 0x00de, 0x0005, + 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, + 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7d72, 0xd09c, 0x11a8, + 0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, 0x70c2, + 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, + 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, + 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7d72, 0x000e, 0x0005, + 0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xae0b, 0x05d8, 0x2900, + 0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, 0x6008, + 0xc0fd, 0x600a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, 0x9084, + 0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, 0x00ff, + 0x080c, 0x283e, 0x1540, 0x00b6, 0x080c, 0x65ff, 0x2b00, 0x00be, + 0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, 0xaedc, + 0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, + 0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6c81, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x0005, 0x00d6, 0x00c6, + 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, + 0x0004, 0x1a04, 0x7d63, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, + 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, + 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xae0b, 0x1118, 0x080c, + 0xaeaf, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7d41, 0x7d46, 0x7d49, + 0x7d4f, 0x2019, 0x0002, 0x080c, 0xe522, 0x0060, 0x080c, 0xe4be, + 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe4d9, 0x0018, 0xa980, + 0x080c, 0xe4be, 0x080c, 0xae61, 0xa887, 0x0000, 0x0126, 0x2091, + 0x8000, 0x080c, 0x6c81, 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, 0x7d74, 0x0006, 0x0016, + 0x2001, 0x8003, 0x0006, 0x0804, 0x0dde, 0x2001, 0x1834, 0x2004, + 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, + 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, + 0x1120, 0x080c, 0x157d, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, + 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, + 0x7df4, 0x68c0, 0x90aa, 0x0005, 0x0a04, 0x840b, 0x7d44, 0x7c40, + 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, + 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7dfb, 0x7000, 0x9084, + 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, + 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe9c1, + 0x080c, 0x8300, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, + 0x080c, 0x835e, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, + 0x7e56, 0x080c, 0x2337, 0x005e, 0x004e, 0x0020, 0x080c, 0xe9c1, + 0x7817, 0x0140, 0x080c, 0x73bc, 0x0168, 0x2001, 0x0111, 0x2004, + 0xd08c, 0x0140, 0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, + 0x2003, 0x0000, 0x080c, 0x7e37, 0x2001, 0x19f0, 0x2004, 0x9005, + 0x090c, 0x968d, 0x0005, 0x0002, 0x7e0d, 0x8122, 0x7e04, 0x7e04, + 0x7e04, 0x7e04, 0x7e04, 0x7e04, 0x7817, 0x0140, 0x2001, 0x19f0, + 0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x7000, 0x908c, 0xff00, + 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286, 0x2000, + 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x5730, 0x0070, + 0x080c, 0x7e76, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x805d, + 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8230, 0x7817, 0x0140, + 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x2001, + 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, + 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, + 0x4b04, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, + 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, + 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, + 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, + 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b04, + 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, + 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, + 0x0023, 0x1904, 0x802e, 0x9186, 0x0023, 0x15c0, 0x080c, 0x82c5, + 0x0904, 0x802e, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004, + 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x802e, + 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, + 0x080c, 0xaedc, 0x0804, 0x802e, 0x908e, 0x0214, 0x0118, 0x908e, + 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0xaedc, 0x0804, 0x802e, + 0x908e, 0x0100, 0x1904, 0x802e, 0x7034, 0x9005, 0x1904, 0x802e, + 0x2009, 0x0016, 0x080c, 0xaedc, 0x0804, 0x802e, 0x9186, 0x0022, + 0x1904, 0x802e, 0x7030, 0x908e, 0x0300, 0x1580, 0x68dc, 0xd0a4, + 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff, 0x697e, 0x7004, + 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, + 0x00ff, 0x0016, 0x2008, 0x080c, 0x2887, 0x7932, 0x7936, 0x001e, + 0x000e, 0x00fe, 0x080c, 0x283e, 0x695e, 0x703c, 0x00e6, 0x2071, + 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee, 0x7034, 0x9005, + 0x1904, 0x802e, 0x2009, 0x0017, 0x0804, 0x7fde, 0x908e, 0x0400, + 0x1190, 0x7034, 0x9005, 0x1904, 0x802e, 0x080c, 0x73bc, 0x0120, + 0x2009, 0x001d, 0x0804, 0x7fde, 0x68dc, 0xc0a5, 0x68de, 0x2009, + 0x0030, 0x0804, 0x7fde, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, + 0x1904, 0x802e, 0x2009, 0x0018, 0x0804, 0x7fde, 0x908e, 0x2010, + 0x1120, 0x2009, 0x0019, 0x0804, 0x7fde, 0x908e, 0x2110, 0x1120, + 0x2009, 0x001a, 0x0804, 0x7fde, 0x908e, 0x5200, 0x1140, 0x7034, + 0x9005, 0x1904, 0x802e, 0x2009, 0x001b, 0x0804, 0x7fde, 0x908e, + 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e, 0x2009, 0x001c, + 0x0804, 0x7fde, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, + 0x7fde, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e, + 0x2009, 0x0024, 0x0804, 0x7fde, 0x908c, 0xff00, 0x918e, 0x2400, + 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, + 0x7fde, 0x080c, 0xd905, 0x1904, 0x802e, 0x0804, 0x7fdc, 0x908c, + 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7fde, + 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7fde, 0x908e, + 0x6104, 0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, + 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, + 0x8108, 0x0046, 0x2124, 0x080c, 0x4b04, 0x004e, 0x8108, 0x0f04, + 0x7f92, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, + 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x7fde, + 0x908e, 0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x7fde, 0x908e, + 0x5400, 0x1138, 0x080c, 0x83bb, 0x1904, 0x802e, 0x2009, 0x0046, + 0x04a8, 0x908e, 0x5500, 0x1148, 0x080c, 0x83e3, 0x1118, 0x2009, + 0x0041, 0x0460, 0x2009, 0x0042, 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, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x1904, 0x8031, + 0x080c, 0x659e, 0x1904, 0x8031, 0xbe12, 0xbd16, 0x001e, 0x0016, + 0x080c, 0x73bc, 0x01c0, 0x68dc, 0xd08c, 0x1148, 0x7000, 0x9084, + 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040, 0x687c, + 0x9606, 0x1148, 0x6880, 0x9506, 0x9084, 0xff00, 0x1120, 0x9584, + 0x00ff, 0xb8c2, 0x0080, 0xb8c0, 0x9005, 0x1168, 0x9186, 0x0046, + 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, 0x9084, 0xff00, + 0x1110, 0x001e, 0x0098, 0x080c, 0xae0b, 0x01a8, 0x2b08, 0x6112, + 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, + 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xaedc, 0x00ce, 0x00be, + 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, + 0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 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, 0x9138, 0x08a0, 0x080c, 0x32e3, 0x1140, + 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, + 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, + 0x9186, 0x0033, 0x11e8, 0x080c, 0x82c5, 0x0904, 0x80ba, 0x7124, + 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0, + 0x2009, 0x0015, 0x080c, 0xaedc, 0x04a8, 0x908e, 0x0100, 0x1590, + 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xaedc, 0x0450, + 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, + 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x283e, 0x11b8, 0x080c, 0x659e, 0x11a0, 0xbe12, 0xbd16, 0x080c, + 0xae0b, 0x0178, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004, + 0x7120, 0x610a, 0x001e, 0x080c, 0xaedc, 0x080c, 0x968d, 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, + 0x811c, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x811c, + 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, + 0x2019, 0x1837, 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, 0x80f1, 0x82ff, 0x1118, 0x9085, + 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, + 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, + 0x0002, 0x8139, 0x8139, 0x8139, 0x82d7, 0x8139, 0x8142, 0x816d, + 0x81fb, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, + 0x8139, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, + 0x968d, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, + 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, - 0x0045, 0x080c, 0xaec2, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, - 0x9005, 0x090c, 0x9664, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, - 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, - 0x32dc, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, - 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005, - 0x821e, 0x821f, 0x821e, 0x821e, 0x827e, 0x828d, 0x0005, 0x00b6, - 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x827c, 0x700c, - 0x7108, 0x080c, 0x283e, 0x1904, 0x827c, 0x080c, 0x659f, 0x1904, - 0x827c, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x696a, - 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x829c, 0x00ce, - 0x05d8, 0x080c, 0xadf1, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcf90, - 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xaec2, - 0x0458, 0x080c, 0x696a, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, - 0x6972, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xadf1, 0x2b08, - 0x01d8, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0005, 0x7120, 0x610a, - 0x2009, 0x0088, 0x080c, 0xaec2, 0x0078, 0x080c, 0xadf1, 0x2b08, - 0x0158, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0004, 0x7120, 0x610a, - 0x2009, 0x0001, 0x080c, 0xaec2, 0x00be, 0x0005, 0x7110, 0xd1bc, - 0x0158, 0x00d1, 0x0148, 0x080c, 0x81fd, 0x1130, 0x7124, 0x610a, - 0x2009, 0x0089, 0x080c, 0xaec2, 0x0005, 0x7110, 0xd1bc, 0x0158, - 0x0059, 0x0148, 0x080c, 0x81fd, 0x1130, 0x7124, 0x610a, 0x2009, - 0x008a, 0x080c, 0xaec2, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, - 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02, - 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, - 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0, 0x9c82, - 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, - 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106, - 0x1120, 0x2009, 0x0051, 0x080c, 0xaec2, 0x7817, 0x0140, 0x2001, - 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, 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, 0xadf1, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263, - 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x15a0, 0x080c, 0x659f, - 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, 0x080c, - 0xcf90, 0x080c, 0x0fff, 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, 0x910f, - 0x080c, 0x9664, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xae47, - 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, - 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x838c, - 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904, - 0x838e, 0x7030, 0x908e, 0x0400, 0x0904, 0x838e, 0x908e, 0x6000, - 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, - 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6928, - 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, - 0x1518, 0x6880, 0x69b0, 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, 0x829c, 0x0128, 0x6004, - 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, - 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, - 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, - 0x1805, 0x2011, 0x027a, 0x080c, 0xbdef, 0x1178, 0xd48c, 0x0148, - 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbdef, - 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, - 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, - 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, - 0x1805, 0x2011, 0x0272, 0x080c, 0xbdef, 0x1178, 0xd48c, 0x0148, - 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbdef, - 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, - 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, - 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084, - 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe, - 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, - 0x0005, 0x2071, 0x19fa, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, - 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x7026, - 0x702b, 0xa26f, 0x7032, 0x7037, 0xa2dd, 0x703f, 0xffff, 0x7042, - 0x7047, 0x556f, 0x704a, 0x705b, 0x856b, 0x080c, 0x1018, 0x090c, - 0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, - 0xdcb0, 0x0005, 0x2071, 0x19fa, 0x1d04, 0x84b9, 0x2091, 0x6000, - 0x700c, 0x8001, 0x700e, 0x1530, 0x2001, 0x013c, 0x2004, 0x9005, - 0x190c, 0x85b0, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00, - 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, - 0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, - 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, - 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, - 0xa3fe, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, - 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, - 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, - 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d, - 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, - 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, - 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, - 0x012e, 0x7004, 0x0002, 0x84e1, 0x84e2, 0x84fe, 0x00e6, 0x2071, - 0x19fa, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, - 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, 0x701c, 0x9206, - 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, - 0x00e6, 0x2071, 0x19fa, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, - 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x6600, 0x1168, 0xb888, - 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, - 0x080c, 0x9664, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, - 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, - 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042, - 0x1110, 0x080c, 0xce21, 0x6018, 0x9005, 0x0558, 0x8001, 0x601a, - 0x1540, 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, - 0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xcb1b, - 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, - 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, - 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c, - 0xc819, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a, 0x2004, - 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6, - 0x2071, 0x19fa, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, - 0x2001, 0x1a03, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, - 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a06, 0x2013, - 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x711a, 0x721e, 0x700b, - 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, - 0x2001, 0x1a08, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, - 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, - 0x10e9, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, - 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x842a, - 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, - 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x7172, 0x7276, - 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, - 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, - 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100, 0x60f0, - 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220, 0x8108, - 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x2061, - 0x1a71, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, - 0x9080, 0x1a71, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638, - 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a71, 0x6014, 0x00ce, 0x9005, - 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, - 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e, - 0x00c0, 0x0904, 0x865e, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8637, - 0x2009, 0x0006, 0x080c, 0x868b, 0x0005, 0x900e, 0x0c60, 0x2001, - 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, - 0x0003, 0x1904, 0x8685, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, - 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138, - 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xaec2, 0x0005, 0x87ff, - 0x1de8, 0x2009, 0x0042, 0x0804, 0xaec2, 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, 0x8685, - 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, - 0x080c, 0x1725, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, - 0x080c, 0xaec2, 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, 0xaec2, - 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, - 0xaec2, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, - 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, - 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcb1b, 0x0518, 0x6014, - 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, - 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a71, - 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, - 0x080c, 0x6ab4, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, - 0x85d4, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a71, - 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, - 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, - 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003, - 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c, - 0x1018, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab, - 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005, - 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e, - 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, - 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, - 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, - 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084, - 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104, - 0x9082, 0x0007, 0x2009, 0x1ac8, 0x200a, 0x000e, 0xc095, 0x7012, - 0x2008, 0x2001, 0x003b, 0x080c, 0x15ee, 0x9006, 0x2071, 0x193c, - 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126, - 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, - 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, - 0x1f04, 0x873e, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, - 0x0007, 0x00c6, 0x080c, 0xadf1, 0x6023, 0x0009, 0x6003, 0x0004, - 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x88c4, - 0x012e, 0x1f04, 0x874a, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, - 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, - 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, - 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, - 0x2029, 0x000a, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900, 0x6016, - 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, - 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, - 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, - 0x0fff, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, - 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, - 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004, - 0x004b, 0x700c, 0x0002, 0x87b6, 0x87af, 0x87af, 0x0005, 0x87c0, - 0x8821, 0x8821, 0x8821, 0x8822, 0x8833, 0x8833, 0x700c, 0x0cba, - 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0, - 0x79a0, 0x9106, 0x1904, 0x8814, 0x2001, 0x0005, 0x2004, 0xd0bc, - 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, - 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8862, - 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, - 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100, - 0x9202, 0x0e48, 0x080c, 0x89ae, 0x2200, 0x9102, 0x0208, 0x2208, - 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8ab7, - 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, - 0x2009, 0x1a18, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, - 0x080c, 0x1108, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, - 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, - 0x0005, 0x0005, 0x700c, 0x0002, 0x8827, 0x882a, 0x8829, 0x080c, - 0x87be, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, - 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, - 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, - 0x9006, 0x0068, 0x0006, 0x080c, 0x8ab7, 0x2100, 0xaa8c, 0x9210, - 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, - 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071, - 0x1923, 0x700c, 0x0002, 0x8860, 0x8860, 0x885e, 0x700f, 0x0001, - 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, - 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, - 0x88cd, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8914, - 0x00ee, 0x0178, 0x0096, 0x080c, 0x1018, 0x2900, 0x009e, 0x0148, - 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e, - 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, - 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, - 0x9d88, 0x2090, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8a3c, - 0x080c, 0x2048, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, - 0xa88a, 0x080c, 0x1725, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, - 0x2091, 0x8000, 0x080c, 0x8923, 0x012e, 0x008e, 0x00ce, 0x00de, - 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, - 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030, - 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, - 0x9b80, 0x8b96, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80, 0x8b8e, - 0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102, 0x0248, - 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, - 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, - 0x6856, 0x2011, 0x8026, 0x080c, 0x4b05, 0x684c, 0x0096, 0x904d, - 0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, - 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, - 0x080c, 0x4b05, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5, 0xa800, - 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, - 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, - 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0dd5, - 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5, 0x2069, - 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108, - 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003, - 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, - 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1031, 0x009e, 0xa8ab, - 0x0000, 0x080c, 0x0fb1, 0x080c, 0xae47, 0x00ce, 0x009e, 0x0005, - 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, - 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, - 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8cc9, 0x00be, - 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, - 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923, - 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112, - 0x2001, 0x003b, 0x080c, 0x15ee, 0x00ee, 0x0005, 0x0096, 0x00d6, - 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, - 0x7026, 0x702f, 0x0000, 0x080c, 0x8b16, 0x0170, 0x080c, 0x8b4b, - 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, - 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, - 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202, - 0x1618, 0x080c, 0x8b4b, 0x090c, 0x0dd5, 0x7018, 0x9005, 0x1160, - 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, - 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, - 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, - 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, - 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e, - 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, - 0x7104, 0x080c, 0x8ab7, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, - 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, - 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8ac0, - 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, - 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, - 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x89ae, - 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, - 0x7106, 0x2500, 0x9212, 0x1904, 0x89ed, 0x012e, 0x00ee, 0x014e, - 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x9580, 0x8b8e, 0x2005, 0x9075, 0x090c, 0x0dd5, - 0x080c, 0x8a92, 0x012e, 0x9580, 0x8b8a, 0x2005, 0x9075, 0x090c, - 0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, - 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, - 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, - 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8a7c, 0x8a7c, 0x8a7e, 0x8a7c, - 0x8a7e, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a84, 0x8a7c, - 0x8a84, 0x8a7c, 0x8a7c, 0x8a7c, 0x080c, 0x0dd5, 0x4104, 0x20a9, - 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, - 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, - 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, - 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, - 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, - 0x8b5a, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, - 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, - 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, - 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, - 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, - 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019, - 0x0001, 0x2031, 0x8b00, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, - 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084, - 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67, - 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002, - 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0, - 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128, - 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8, - 0x2031, 0x8b13, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046, - 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8b92, 0x2005, 0x9005, - 0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1018, 0x01d0, - 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1018, - 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, - 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, - 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, - 0x1031, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, - 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, - 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, - 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, - 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, - 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, - 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, - 0x009e, 0x0005, 0x1a64, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000, - 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, - 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, - 0x2071, 0x1877, 0x080c, 0x8cb4, 0xa067, 0x0023, 0x6010, 0x905d, - 0x0904, 0x8c89, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, - 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, - 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, - 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050, 0x2940, - 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x2090, 0x2c65, - 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0dd5, - 0x9082, 0x001b, 0x0002, 0x8bf6, 0x8bf6, 0x8bf8, 0x8bf6, 0x8bf6, - 0x8bf6, 0x8bfa, 0x8bf6, 0x8bf6, 0x8bf6, 0x8bfc, 0x8bf6, 0x8bf6, - 0x8bf6, 0x8bfe, 0x8bf6, 0x8bf6, 0x8bf6, 0x8c00, 0x8bf6, 0x8bf6, - 0x8bf6, 0x8c02, 0x8bf6, 0x8bf6, 0x8bf6, 0x8c04, 0x080c, 0x0dd5, - 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, - 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, - 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c28, 0x8c26, 0x8c26, - 0x8c26, 0x8c26, 0x8c26, 0x8c2a, 0x8c26, 0x8c26, 0x8c26, 0x8c26, - 0x8c26, 0x8c2c, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c2e, - 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c30, 0x080c, 0x0dd5, - 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, - 0xa1e0, 0x2600, 0x0002, 0x8c4c, 0x8c4e, 0x8c50, 0x8c52, 0x8c54, - 0x8c56, 0x8c58, 0x8c5a, 0x8c5c, 0x8c5e, 0x8c60, 0x8c62, 0x8c64, - 0x8c66, 0x8c68, 0x8c6a, 0x8c6c, 0x8c6e, 0x8c70, 0x8c72, 0x8c74, - 0x8c76, 0x8c78, 0x8c7a, 0x8c7c, 0x080c, 0x0dd5, 0xb9e2, 0x0468, - 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, - 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, - 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, - 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, - 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, - 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120, - 0x080c, 0x2048, 0x0804, 0x8bd0, 0x00ae, 0x00be, 0x00ce, 0x00ee, - 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, - 0x0804, 0x8bb2, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, - 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001, - 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, - 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b05, 0x004e, 0x003e, - 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, - 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130, - 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a, - 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, - 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, - 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000, - 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140, - 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068, 0x0cb0, - 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200, - 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6, - 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071, - 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8d09, - 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac, - 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b, - 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b, - 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5, 0x080c, - 0x1031, 0x080c, 0x88c4, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200, - 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, - 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x283e, 0x015e, - 0x11b0, 0x080c, 0x659f, 0x190c, 0x0dd5, 0x000e, 0x001e, 0xb912, - 0xb816, 0x080c, 0xadf1, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, - 0x2009, 0x0001, 0x080c, 0xaec2, 0x00be, 0x00ce, 0x0005, 0x000e, - 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, - 0x0013, 0x006e, 0x0005, 0x8d7b, 0x8d7b, 0x8d7b, 0x8d7d, 0x8dce, - 0x8d7b, 0x8d7b, 0x8d7b, 0x8e31, 0x8d7b, 0x8e6e, 0x8d7b, 0x8d7b, - 0x8d7b, 0x8d7b, 0x8d7b, 0x080c, 0x0dd5, 0x9182, 0x0040, 0x0002, - 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, - 0x8d90, 0x8d92, 0x8da7, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8dba, - 0x080c, 0x0dd5, 0x0096, 0x080c, 0x9614, 0x080c, 0x9790, 0x6114, - 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, - 0x00be, 0x080c, 0x6a7f, 0x080c, 0xae47, 0x009e, 0x0005, 0x080c, - 0x9614, 0x00d6, 0x6114, 0x080c, 0xcb1b, 0x0130, 0x0096, 0x6114, - 0x2148, 0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x080c, - 0x9790, 0x0005, 0x080c, 0x9614, 0x080c, 0x31bc, 0x6114, 0x0096, - 0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6c79, - 0x009e, 0x080c, 0xae47, 0x080c, 0x9790, 0x0005, 0x601b, 0x0000, - 0x9182, 0x0040, 0x0096, 0x0002, 0x8de9, 0x8de9, 0x8de9, 0x8de9, - 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8deb, 0x8de9, 0x8de9, 0x8de9, - 0x8e2d, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8df1, - 0x8de9, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, - 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8b9a, 0x0096, 0xa8a8, - 0x2048, 0x080c, 0x6a17, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, - 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cc9, 0x00be, 0xae88, 0x00b6, - 0x2059, 0x0000, 0x080c, 0x88cd, 0x00be, 0x01e0, 0x2071, 0x193c, - 0x080c, 0x8914, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946, - 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e, - 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x888b, 0x00fe, 0x00ee, - 0x009e, 0x0005, 0x080c, 0x88c4, 0x0cd0, 0x080c, 0x8edb, 0x009e, - 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e45, 0x8e45, 0x8e45, - 0x8e47, 0x8e45, 0x8e45, 0x8e45, 0x8e6c, 0x8e45, 0x8e45, 0x8e45, - 0x8e45, 0x8e45, 0x8e45, 0x8e45, 0x8e45, 0x080c, 0x0dd5, 0x6003, - 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, - 0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, - 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x2c10, - 0x080c, 0x1bad, 0x080c, 0x912c, 0x0126, 0x2091, 0x8000, 0x080c, - 0x9790, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x9614, - 0x080c, 0x9790, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, - 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6c79, 0x080c, 0xae47, - 0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, - 0x0013, 0x009e, 0x0005, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9d, 0x8eae, - 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, - 0x8e9b, 0x8e9b, 0x8e9b, 0x080c, 0x0dd5, 0x080c, 0xa7b2, 0x6114, - 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, - 0x00be, 0x080c, 0x6c79, 0x080c, 0xae47, 0x0005, 0x0461, 0x0005, - 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013, 0x009e, - 0x0005, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ecb, 0x8edb, 0x8ec9, 0x8ec9, - 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, - 0x8ec9, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e7, 0x703c, - 0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa59c, 0x080c, 0xa7b2, - 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000, 0x6014, - 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cc9, - 0x00be, 0x2071, 0x193c, 0x080c, 0x8914, 0x0160, 0x2001, 0x187f, - 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x888b, 0x00ee, - 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, 0x080c, - 0x1031, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x88c4, 0x0c80, 0x0000, + 0x0046, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, + 0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, + 0x0fff, 0x0904, 0x81d1, 0x7110, 0xd1bc, 0x1904, 0x81d1, 0x7108, + 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0, + 0x81ff, 0x15a0, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, + 0x2001, 0x0080, 0x9106, 0x0904, 0x81d1, 0x080c, 0x659e, 0x1904, + 0x81d1, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294, + 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0xae0b, 0x05e8, 0x2b08, + 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120, + 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xdb63, 0x0408, + 0x080c, 0x6972, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x80be, + 0x11c0, 0x0898, 0x080c, 0xae0b, 0x2b08, 0x0198, 0x6112, 0x6023, + 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, + 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, + 0x968d, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, + 0x968d, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, + 0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 0x0d48, + 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, + 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020, + 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868, + 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, + 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, + 0x2009, 0x0045, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0, + 0x2004, 0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x6120, 0x9186, + 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, + 0x080c, 0x32e3, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, + 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, + 0x0005, 0x8247, 0x8248, 0x8247, 0x8247, 0x82a7, 0x82b6, 0x0005, + 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x82a5, + 0x700c, 0x7108, 0x080c, 0x283e, 0x1904, 0x82a5, 0x080c, 0x659e, + 0x1904, 0x82a5, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, + 0x6972, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x82c5, + 0x00ce, 0x05d8, 0x080c, 0xae0b, 0x2b08, 0x05b8, 0x6112, 0x080c, + 0xcfaa, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, + 0xaedc, 0x0458, 0x080c, 0x6972, 0x0148, 0x9086, 0x0004, 0x0130, + 0x080c, 0x697a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xae0b, + 0x2b08, 0x01d8, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0005, 0x7120, + 0x610a, 0x2009, 0x0088, 0x080c, 0xaedc, 0x0078, 0x080c, 0xae0b, + 0x2b08, 0x0158, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004, 0x7120, + 0x610a, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x0005, 0x7110, + 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124, + 0x610a, 0x2009, 0x0089, 0x080c, 0xaedc, 0x0005, 0x7110, 0xd1bc, + 0x0158, 0x0059, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124, 0x610a, + 0x2009, 0x008a, 0x080c, 0xaedc, 0x0005, 0x7020, 0x2060, 0x9c84, + 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004, + 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, + 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0, + 0x9c82, 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, + 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, + 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0xaedc, 0x7817, 0x0140, + 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 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, 0xae0b, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x15a0, 0x080c, + 0x659e, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, + 0x080c, 0xcfaa, 0x080c, 0x0fff, 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, + 0x9138, 0x080c, 0x968d, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, + 0xae61, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, + 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, + 0x83b5, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, + 0x1904, 0x83b7, 0x7030, 0x908e, 0x0400, 0x0904, 0x83b7, 0x908e, + 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, + 0x2009, 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, + 0x6930, 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, + 0x9106, 0x1518, 0x6880, 0x69b0, 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, 0x82c5, 0x0128, + 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, + 0x0001, 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, + 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, + 0x2019, 0x1805, 0x2011, 0x027a, 0x080c, 0xbe09, 0x1178, 0xd48c, + 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, + 0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, + 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, + 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, + 0x2019, 0x1805, 0x2011, 0x0272, 0x080c, 0xbe09, 0x1178, 0xd48c, + 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, + 0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, + 0x004e, 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, + 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, + 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, + 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, + 0x00ee, 0x0005, 0x2071, 0x19fa, 0x7003, 0x0003, 0x700f, 0x0361, + 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000, + 0x7026, 0x702b, 0xa289, 0x7032, 0x7037, 0xa2f7, 0x703f, 0xffff, + 0x7042, 0x7047, 0x556e, 0x704a, 0x705b, 0x8594, 0x080c, 0x1018, + 0x090c, 0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, + 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19fa, 0x1d04, 0x84e2, 0x2091, + 0x6000, 0x700c, 0x8001, 0x700e, 0x1530, 0x2001, 0x013c, 0x2004, + 0x9005, 0x190c, 0x85d9, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, + 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, + 0x0000, 0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, + 0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, + 0x7044, 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, 0xa418, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, + 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, + 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, + 0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, + 0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, + 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, + 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, + 0x080f, 0x012e, 0x7004, 0x0002, 0x850a, 0x850b, 0x8527, 0x00e6, + 0x2071, 0x19fa, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, + 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, 0x701c, + 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, + 0x0005, 0x00e6, 0x2071, 0x19fa, 0xb888, 0x9102, 0x0208, 0xb98a, + 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x65ff, 0x1168, + 0xb888, 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, + 0x0016, 0x080c, 0x968d, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800, + 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, + 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001, + 0x6042, 0x1110, 0x080c, 0xce3b, 0x6018, 0x9005, 0x0558, 0x8001, + 0x601a, 0x1540, 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, + 0x0130, 0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, + 0xcb35, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, + 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, + 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, + 0x080c, 0xc833, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a, + 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, + 0x00e6, 0x2071, 0x19fa, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, + 0x0005, 0x2001, 0x1a03, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, + 0x19fa, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a06, + 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x711a, 0x721e, + 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, + 0x7056, 0x2001, 0x1a08, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, + 0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, + 0x080c, 0x10e9, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, + 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, + 0x8453, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, + 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x7172, + 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, + 0x19fa, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, + 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100, + 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220, + 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6, + 0x2061, 0x1a71, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, + 0x8003, 0x9080, 0x1a71, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, + 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a71, 0x6014, 0x00ce, + 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, + 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, + 0x918e, 0x00c0, 0x0904, 0x8687, 0xd0b4, 0x1168, 0xd0bc, 0x1904, + 0x8660, 0x2009, 0x0006, 0x080c, 0x86b4, 0x0005, 0x900e, 0x0c60, + 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, + 0x918e, 0x0003, 0x1904, 0x86ae, 0x908c, 0x2020, 0x918e, 0x2020, + 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, + 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xaedc, 0x0005, + 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0xaedc, 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, + 0x86ae, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, + 0x2c78, 0x080c, 0x1725, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, + 0x0042, 0x080c, 0xaedc, 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, + 0xaedc, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, + 0x080c, 0xaedc, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, + 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, + 0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcb35, 0x0518, + 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, + 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, + 0x1a71, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, + 0x00ce, 0x080c, 0x6abc, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, + 0x190c, 0x85fd, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, + 0x1a71, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, + 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, + 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, + 0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, + 0x080c, 0x1018, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001, + 0xa8ab, 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, + 0x0005, 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, + 0x721e, 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, + 0xa89a, 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, + 0x9005, 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, + 0x9210, 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, + 0xc084, 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, + 0x2104, 0x9082, 0x0007, 0x2009, 0x1ac8, 0x200a, 0x000e, 0xc095, + 0x7012, 0x2008, 0x2001, 0x003b, 0x080c, 0x15ee, 0x9006, 0x2071, + 0x193c, 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, + 0x0126, 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, + 0x0008, 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, + 0x0008, 0x1f04, 0x8767, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, + 0x20a9, 0x0007, 0x00c6, 0x080c, 0xae0b, 0x6023, 0x0009, 0x6003, + 0x0004, 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, + 0x88ed, 0x012e, 0x1f04, 0x8773, 0x9006, 0x00ce, 0x015e, 0x012e, + 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, + 0x0086, 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, + 0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, + 0x002c, 0x2029, 0x000a, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900, + 0x6016, 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, + 0xa8aa, 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, + 0xa89e, 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, + 0x080c, 0x0fff, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900, + 0xb806, 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, + 0x009e, 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, + 0x7004, 0x004b, 0x700c, 0x0002, 0x87df, 0x87d8, 0x87d8, 0x0005, + 0x87e9, 0x884a, 0x884a, 0x884a, 0x884b, 0x885c, 0x885c, 0x700c, + 0x0cba, 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, + 0x78a0, 0x79a0, 0x9106, 0x1904, 0x883d, 0x2001, 0x0005, 0x2004, + 0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, + 0x012e, 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, + 0x888b, 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, + 0x2009, 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, + 0x9100, 0x9202, 0x0e48, 0x080c, 0x89d7, 0x2200, 0x9102, 0x0208, + 0x2208, 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, + 0x8ae0, 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, + 0x8000, 0x2009, 0x1a18, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, + 0x012e, 0x080c, 0x1108, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, + 0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, + 0x012e, 0x0005, 0x0005, 0x700c, 0x0002, 0x8850, 0x8853, 0x8852, + 0x080c, 0x87e7, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, + 0xa974, 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, + 0x7018, 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, + 0xa892, 0x9006, 0x0068, 0x0006, 0x080c, 0x8ae0, 0x2100, 0xaa8c, + 0x9210, 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, + 0x009e, 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, + 0x2071, 0x1923, 0x700c, 0x0002, 0x8889, 0x8889, 0x8887, 0x700f, + 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, + 0x0508, 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, + 0x080c, 0x88f6, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, + 0x893d, 0x00ee, 0x0178, 0x0096, 0x080c, 0x1018, 0x2900, 0x009e, + 0x0148, 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, + 0x012e, 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, + 0x2940, 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, + 0x2068, 0x9d88, 0x2090, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, + 0x8a65, 0x080c, 0x2048, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, + 0x2004, 0xa88a, 0x080c, 0x1725, 0x781f, 0x0101, 0x7813, 0x0000, + 0x0126, 0x2091, 0x8000, 0x080c, 0x894c, 0x012e, 0x008e, 0x00ce, + 0x00de, 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, + 0x2001, 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, + 0x7030, 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, + 0x0026, 0x9b80, 0x8bbf, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80, + 0x8bb7, 0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102, + 0x0248, 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, + 0x00de, 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, + 0xc085, 0x6856, 0x2011, 0x8026, 0x080c, 0x4b04, 0x684c, 0x0096, + 0x904d, 0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, + 0x2030, 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, + 0x8025, 0x080c, 0x4b04, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5, + 0xa800, 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, + 0x8319, 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, + 0x9302, 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, + 0x0dd5, 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5, + 0x2069, 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, + 0x8108, 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, + 0x2003, 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, + 0x2048, 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1031, 0x009e, + 0xa8ab, 0x0000, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x009e, + 0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, + 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, + 0x0178, 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8cf2, + 0x00be, 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, + 0x0005, 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, + 0x1923, 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, + 0x7112, 0x2001, 0x003b, 0x080c, 0x15ee, 0x00ee, 0x0005, 0x0096, + 0x00d6, 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, + 0x702a, 0x7026, 0x702f, 0x0000, 0x080c, 0x8b3f, 0x0170, 0x080c, + 0x8b74, 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, + 0x701f, 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, + 0x0096, 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, + 0x9202, 0x1618, 0x080c, 0x8b74, 0x090c, 0x0dd5, 0x7018, 0x9005, + 0x1160, 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, + 0xa806, 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, + 0xa002, 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, + 0x9080, 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, + 0x008e, 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, + 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, + 0x831e, 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, + 0x0003, 0x7104, 0x080c, 0x8ae0, 0x810c, 0x2100, 0x9318, 0x8003, + 0x2228, 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, + 0x8004, 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, + 0x8ae9, 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, + 0x701e, 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, + 0x2048, 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, + 0x89d7, 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, + 0x0008, 0x7106, 0x2500, 0x9212, 0x1904, 0x8a16, 0x012e, 0x00ee, + 0x014e, 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x9580, 0x8bb7, 0x2005, 0x9075, 0x090c, + 0x0dd5, 0x080c, 0x8abb, 0x012e, 0x9580, 0x8bb3, 0x2005, 0x9075, + 0x090c, 0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, + 0x831e, 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, + 0x2098, 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, + 0x0002, 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8aa5, 0x8aa5, 0x8aa7, + 0x8aa5, 0x8aa7, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aad, + 0x8aa5, 0x8aad, 0x8aa5, 0x8aa5, 0x8aa5, 0x080c, 0x0dd5, 0x4104, + 0x20a9, 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, + 0x4104, 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, + 0x002e, 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, + 0x2110, 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, + 0x000a, 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, + 0x080c, 0x8b83, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, + 0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, + 0x0006, 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, + 0x0005, 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, + 0x0240, 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, + 0x0005, 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, + 0x2019, 0x0001, 0x2031, 0x8b29, 0x9112, 0x0220, 0x0118, 0x8318, + 0x2208, 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, + 0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, + 0x0a67, 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, + 0x0002, 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, + 0x0cd0, 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, + 0x7128, 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, + 0x0cd8, 0x2031, 0x8b3c, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, + 0x0046, 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8bbb, 0x2005, + 0x9005, 0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1018, + 0x01d0, 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, + 0x1018, 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, + 0x94a2, 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, + 0x004e, 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, + 0x080c, 0x1031, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, + 0x2048, 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, + 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, + 0x2900, 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, + 0x9005, 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1031, 0x000e, + 0x0cb8, 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, + 0xa800, 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, 0x9006, 0x7002, + 0x700a, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, + 0x702e, 0x009e, 0x0005, 0x1a64, 0x0000, 0x0000, 0x0000, 0x1930, + 0x0000, 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, + 0x0000, 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, + 0x2040, 0x2071, 0x1877, 0x080c, 0x8cdd, 0xa067, 0x0023, 0x6010, + 0x905d, 0x0904, 0x8cb2, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, + 0xa176, 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, + 0xa898, 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, + 0x0018, 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050, + 0x2940, 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x2090, + 0x2c65, 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, + 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c1f, 0x8c1f, 0x8c21, 0x8c1f, + 0x8c1f, 0x8c1f, 0x8c23, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c25, 0x8c1f, + 0x8c1f, 0x8c1f, 0x8c27, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c29, 0x8c1f, + 0x8c1f, 0x8c1f, 0x8c2b, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c2d, 0x080c, + 0x0dd5, 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, + 0x0488, 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, + 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c51, 0x8c4f, + 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c53, 0x8c4f, 0x8c4f, 0x8c4f, + 0x8c4f, 0x8c4f, 0x8c55, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, + 0x8c57, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c59, 0x080c, + 0x0dd5, 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, + 0x0008, 0xa1e0, 0x2600, 0x0002, 0x8c75, 0x8c77, 0x8c79, 0x8c7b, + 0x8c7d, 0x8c7f, 0x8c81, 0x8c83, 0x8c85, 0x8c87, 0x8c89, 0x8c8b, + 0x8c8d, 0x8c8f, 0x8c91, 0x8c93, 0x8c95, 0x8c97, 0x8c99, 0x8c9b, + 0x8c9d, 0x8c9f, 0x8ca1, 0x8ca3, 0x8ca5, 0x080c, 0x0dd5, 0xb9e2, + 0x0468, 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, + 0x0428, 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, + 0x00e8, 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, + 0x00a8, 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, + 0x0068, 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, + 0x0028, 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, + 0x0120, 0x080c, 0x2048, 0x0804, 0x8bf9, 0x00ae, 0x00be, 0x00ce, + 0x00ee, 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, + 0x9006, 0x0804, 0x8bdb, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, + 0xb810, 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, + 0xbba0, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b04, 0x004e, + 0x003e, 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, + 0x910a, 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, + 0x0130, 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, + 0xa26a, 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, + 0x0200, 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, + 0x7818, 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, + 0x0000, 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, + 0x0140, 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068, + 0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, + 0x0200, 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, + 0x00c6, 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, + 0x2071, 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, + 0x8d32, 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, + 0xb8ac, 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, + 0x601b, 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, + 0xa88b, 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5, + 0x080c, 0x1031, 0x080c, 0x88ed, 0x0c18, 0x2071, 0x0300, 0x701b, + 0x0200, 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, + 0x0005, 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x283e, + 0x015e, 0x11b0, 0x080c, 0x659e, 0x190c, 0x0dd5, 0x000e, 0x001e, + 0xb912, 0xb816, 0x080c, 0xae0b, 0x0140, 0x2b00, 0x6012, 0x6023, + 0x0001, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x00ce, 0x0005, + 0x000e, 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, + 0x0dd5, 0x0013, 0x006e, 0x0005, 0x8da4, 0x8da4, 0x8da4, 0x8da6, + 0x8df7, 0x8da4, 0x8da4, 0x8da4, 0x8e5a, 0x8da4, 0x8e97, 0x8da4, + 0x8da4, 0x8da4, 0x8da4, 0x8da4, 0x080c, 0x0dd5, 0x9182, 0x0040, + 0x0002, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, + 0x8db9, 0x8db9, 0x8dbb, 0x8dd0, 0x8db9, 0x8db9, 0x8db9, 0x8db9, + 0x8de3, 0x080c, 0x0dd5, 0x0096, 0x080c, 0x963d, 0x080c, 0x97b9, + 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, + 0x0500, 0x00be, 0x080c, 0x6a87, 0x080c, 0xae61, 0x009e, 0x0005, + 0x080c, 0x963d, 0x00d6, 0x6114, 0x080c, 0xcb35, 0x0130, 0x0096, + 0x6114, 0x2148, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61, + 0x080c, 0x97b9, 0x0005, 0x080c, 0x963d, 0x080c, 0x31bf, 0x6114, + 0x0096, 0x2148, 0x080c, 0xcb35, 0x0120, 0xa87b, 0x0029, 0x080c, + 0x6c81, 0x009e, 0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0x601b, + 0x0000, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e12, 0x8e12, 0x8e12, + 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e14, 0x8e12, 0x8e12, + 0x8e12, 0x8e56, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, + 0x8e1a, 0x8e12, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e, + 0xffff, 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8bc3, 0x0096, + 0xa8a8, 0x2048, 0x080c, 0x6a1f, 0x009e, 0xa8ab, 0x0000, 0x6010, + 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cf2, 0x00be, 0xae88, + 0x00b6, 0x2059, 0x0000, 0x080c, 0x88f6, 0x00be, 0x01e0, 0x2071, + 0x193c, 0x080c, 0x893d, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, + 0x1946, 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x0fff, 0x2900, + 0x009e, 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x88b4, 0x00fe, + 0x00ee, 0x009e, 0x0005, 0x080c, 0x88ed, 0x0cd0, 0x080c, 0x8f04, + 0x009e, 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e6e, 0x8e6e, + 0x8e6e, 0x8e70, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e95, 0x8e6e, 0x8e6e, + 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x080c, 0x0dd5, + 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0, + 0xa84a, 0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a, + 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, + 0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000, + 0x080c, 0x97b9, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c, + 0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, + 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6c81, 0x080c, + 0xae61, 0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, + 0x0096, 0x0013, 0x009e, 0x0005, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec6, + 0x8ed7, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, + 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x080c, 0x0dd5, 0x080c, 0xa7cc, + 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb, + 0x0500, 0x00be, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0005, 0x0461, + 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013, + 0x009e, 0x0005, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef4, 0x8f04, 0x8ef2, + 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, + 0x8ef2, 0x8ef2, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e7, + 0x703c, 0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa5b6, 0x080c, + 0xa7cc, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000, + 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, + 0x8cf2, 0x00be, 0x2071, 0x193c, 0x080c, 0x893d, 0x0160, 0x2001, + 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x88b4, + 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, + 0x080c, 0x1031, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x88ed, 0x0c80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, - 0x8f20, 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, 0x8f4a, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x8f4a, - 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, - 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, - 0x2091, 0x2800, 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, - 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, - 0x0200, 0x080c, 0xab07, 0x0401, 0x080c, 0xaaf2, 0x00e9, 0x080c, - 0xaaf5, 0x00d1, 0x080c, 0xaaf8, 0x00b9, 0x080c, 0xaafb, 0x00a1, - 0x080c, 0xaafe, 0x0089, 0x080c, 0xab01, 0x0071, 0x080c, 0xab04, - 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, - 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, - 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, - 0x9084, 0x0007, 0x0002, 0x8fbd, 0x8fe1, 0x9020, 0x8fc3, 0x8fe1, - 0x8fbd, 0x8fbb, 0x8fbb, 0x080c, 0x0dd5, 0x080c, 0x8550, 0x080c, - 0x9664, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, - 0x2011, 0x5e84, 0x080c, 0x84ca, 0x7828, 0x9092, 0x00c8, 0x1228, - 0x8000, 0x782a, 0x080c, 0x5ec4, 0x0c88, 0x62c0, 0x080c, 0xac43, - 0x080c, 0x5e84, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, - 0x0c28, 0x080c, 0x8550, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000, - 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c, 0xaec2, - 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x7828, - 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x2ba5, - 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dd5, - 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x9664, 0x0c00, - 0x080c, 0xa235, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0xac43, - 0x080c, 0xe9dd, 0x2009, 0x0014, 0x080c, 0xaec2, 0x00ce, 0x0880, - 0x2001, 0x1a03, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, + 0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 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, 0x8f49, 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, 0x8f73, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, + 0x8f73, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, + 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, + 0x0126, 0x2091, 0x2800, 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, + 0x19e7, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, + 0x2069, 0x0200, 0x080c, 0xab21, 0x0401, 0x080c, 0xab0c, 0x00e9, + 0x080c, 0xab0f, 0x00d1, 0x080c, 0xab12, 0x00b9, 0x080c, 0xab15, + 0x00a1, 0x080c, 0xab18, 0x0089, 0x080c, 0xab1b, 0x0071, 0x080c, + 0xab1e, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, + 0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, + 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, + 0x7804, 0x9084, 0x0007, 0x0002, 0x8fe6, 0x900a, 0x9049, 0x8fec, + 0x900a, 0x8fe6, 0x8fe4, 0x8fe4, 0x080c, 0x0dd5, 0x080c, 0x8579, + 0x080c, 0x968d, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, + 0x0005, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x7828, 0x9092, 0x00c8, + 0x1228, 0x8000, 0x782a, 0x080c, 0x5ec3, 0x0c88, 0x62c0, 0x080c, + 0xac5d, 0x080c, 0x5e83, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, + 0x0000, 0x0c28, 0x080c, 0x8579, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c, - 0xaf14, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, - 0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a, - 0x00de, 0x00ce, 0x00be, 0x080c, 0x2ba5, 0x02f0, 0x00b6, 0x00c6, - 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc, 0xb802, - 0x7924, 0x2160, 0x080c, 0xae47, 0xb93c, 0x81ff, 0x090c, 0x0dd5, - 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, - 0x00be, 0x080c, 0x9664, 0x0868, 0x080c, 0xa235, 0x0850, 0x2011, - 0x0130, 0x2214, 0x080c, 0xac43, 0x080c, 0xe9dd, 0x7824, 0x9065, - 0x2009, 0x0014, 0x080c, 0xaec2, 0x00de, 0x00ce, 0x00be, 0x0804, - 0x9031, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1eb4, - 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4, 0x9205, - 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0xaec2, - 0x00ce, 0x0005, 0x2011, 0x1a06, 0x2013, 0x0000, 0x0cc8, 0x793c, - 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108, 0x7946, - 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, - 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c, 0x9188, - 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984, - 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009, 0x004a, - 0x080c, 0xaec2, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848, 0x0006, - 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, - 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148, - 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, - 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e7, 0xb800, - 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110, - 0x2b00, 0x681e, 0x00de, 0x0804, 0x9664, 0x00de, 0x0005, 0xc0d5, - 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086, - 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19e7, - 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, 0x0006, - 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, - 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, - 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, - 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, - 0x2061, 0x19e7, 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, 0x19e7, - 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x91b6, - 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x91b1, 0x87ff, 0x0120, - 0x6054, 0x9106, 0x1904, 0x91b1, 0x703c, 0x9c06, 0x1178, 0x0036, - 0x2019, 0x0001, 0x080c, 0xa59c, 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, 0xcb1b, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, - 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, - 0x0076, 0x080c, 0xce0a, 0x080c, 0xe8e7, 0x080c, 0x6c79, 0x007e, - 0x003e, 0x001e, 0x080c, 0xcd04, 0x080c, 0xae78, 0x00ce, 0x0804, - 0x9155, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9155, 0x85ff, 0x0120, - 0x0036, 0x080c, 0x9790, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, - 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, - 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, - 0x0036, 0x0076, 0x080c, 0xe8e7, 0x080c, 0xe530, 0x007e, 0x003e, - 0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b, 0x0006, - 0x0016, 0x0036, 0x0076, 0x080c, 0x6c79, 0x080c, 0xae47, 0x007e, - 0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904, 0x919b, - 0x0804, 0x9199, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, - 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e7, 0x7838, 0x9065, - 0x0904, 0x9242, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, - 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa59c, 0x7833, 0x0000, - 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xcb1b, - 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, 0x3e08, - 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180, 0x2001, - 0x1988, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, 0xa877, - 0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04, 0x080c, 0xae78, 0x000e, - 0x0804, 0x91ff, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, - 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, - 0x080c, 0xe530, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130, 0xab7a, - 0x080c, 0x6c79, 0x080c, 0xae47, 0x0c10, 0x6020, 0x9086, 0x000a, - 0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, - 0x934b, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, - 0x19e7, 0x2091, 0x8000, 0x080c, 0x93e2, 0x080c, 0x9470, 0x012e, - 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, - 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, - 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9310, 0x6010, 0x2058, - 0xb8a0, 0x9206, 0x1904, 0x930b, 0x88ff, 0x0120, 0x6054, 0x9106, - 0x1904, 0x930b, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, - 0xd0a4, 0x1508, 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, - 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, + 0xaedc, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5, + 0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, + 0x2ba5, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, + 0x0dd5, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x968d, + 0x0c00, 0x080c, 0xa24f, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, + 0xac5d, 0x080c, 0xe9fe, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce, + 0x0880, 0x2001, 0x1a03, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, + 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, + 0x080c, 0xaf2e, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, + 0x9005, 0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, + 0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2ba5, 0x02f0, 0x00b6, + 0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc, + 0xb802, 0x7924, 0x2160, 0x080c, 0xae61, 0xb93c, 0x81ff, 0x090c, + 0x0dd5, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, + 0x00ce, 0x00be, 0x080c, 0x968d, 0x0868, 0x080c, 0xa24f, 0x0850, + 0x2011, 0x0130, 0x2214, 0x080c, 0xac5d, 0x080c, 0xe9fe, 0x7824, + 0x9065, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00de, 0x00ce, 0x00be, + 0x0804, 0x905a, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, + 0x1eb4, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4, + 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, + 0xaedc, 0x00ce, 0x0005, 0x2011, 0x1a06, 0x2013, 0x0000, 0x0cc8, + 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108, + 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, + 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c, + 0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, + 0x1984, 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009, + 0x004a, 0x080c, 0xaedc, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848, + 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, + 0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, + 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, + 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e7, + 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, + 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x968d, 0x00de, 0x0005, + 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, + 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, + 0x19e7, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, + 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, + 0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, + 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, + 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, + 0x2c08, 0x2061, 0x19e7, 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, + 0x19e7, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, + 0x91df, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x91da, 0x87ff, + 0x0120, 0x6054, 0x9106, 0x1904, 0x91da, 0x703c, 0x9c06, 0x1178, + 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 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, 0xcb35, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, + 0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, + 0x0036, 0x0076, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81, + 0x007e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00ce, + 0x0804, 0x917e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x917e, 0x85ff, + 0x0120, 0x0036, 0x080c, 0x97b9, 0x003e, 0x012e, 0x000e, 0x001e, + 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, + 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, + 0x0016, 0x0036, 0x0076, 0x080c, 0xe908, 0x080c, 0xe551, 0x007e, + 0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b, + 0x0006, 0x0016, 0x0036, 0x0076, 0x080c, 0x6c81, 0x080c, 0xae61, + 0x007e, 0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904, + 0x91c4, 0x0804, 0x91c2, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, + 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e7, 0x7838, + 0x9065, 0x0904, 0x926b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, + 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7833, + 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, + 0xcb35, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, + 0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180, + 0x2001, 0x1988, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, + 0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c, 0xae92, + 0x000e, 0x0804, 0x9228, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, + 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, + 0x1118, 0x080c, 0xe551, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130, + 0xab7a, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0c10, 0x6020, 0x9086, + 0x000a, 0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, + 0x080c, 0x9374, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, + 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x940b, 0x080c, 0x9499, + 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, + 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, + 0x19e7, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9339, 0x6010, + 0x2058, 0xb8a0, 0x9206, 0x1904, 0x9334, 0x88ff, 0x0120, 0x6054, + 0x9106, 0x1904, 0x9334, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, + 0x6820, 0xd0a4, 0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, + 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, + 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, + 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, + 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, + 0x9334, 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, 0xcb35, 0x01e8, + 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xcd3b, 0x1118, 0x080c, + 0xb813, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, + 0x0036, 0x0086, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81, + 0x008e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c, + 0xa692, 0x00ce, 0x0804, 0x92b4, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x92b4, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, + 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, + 0x0016, 0x0036, 0x0086, 0x080c, 0xe908, 0x080c, 0xe551, 0x008e, + 0x003e, 0x001e, 0x08d0, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002, + 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x931a, + 0x9086, 0x008b, 0x0904, 0x931a, 0x0840, 0x6020, 0x9086, 0x0005, + 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, + 0x008b, 0x09b0, 0x0804, 0x932d, 0x00b6, 0x00a6, 0x0096, 0x00c6, + 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, + 0x0904, 0x9404, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e7, + 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, + 0x6531, 0x0904, 0x9400, 0x7624, 0x86ff, 0x0904, 0x93ef, 0x9680, + 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, + 0x9005, 0x0560, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, + 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x930b, - 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, 0xcb1b, 0x01e8, 0x6020, - 0x9086, 0x0003, 0x1580, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, - 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, - 0x0086, 0x080c, 0xce0a, 0x080c, 0xe8e7, 0x080c, 0x6c79, 0x008e, - 0x003e, 0x001e, 0x080c, 0xcd04, 0x080c, 0xae78, 0x080c, 0xa678, - 0x00ce, 0x0804, 0x928b, 0x2c78, 0x600c, 0x2060, 0x0804, 0x928b, - 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, - 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, - 0x0036, 0x0086, 0x080c, 0xe8e7, 0x080c, 0xe530, 0x008e, 0x003e, - 0x001e, 0x08d0, 0x080c, 0xb7f9, 0x6020, 0x9086, 0x0002, 0x1160, - 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x92f1, 0x9086, - 0x008b, 0x0904, 0x92f1, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, - 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, - 0x09b0, 0x0804, 0x9304, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, - 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, - 0x93db, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e7, 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, 0x6532, - 0x0904, 0x93d7, 0x7624, 0x86ff, 0x0904, 0x93c6, 0x9680, 0x0005, - 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, - 0x0560, 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, - 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, + 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, + 0xb83e, 0x2660, 0x080c, 0xae92, 0x00ce, 0x0048, 0x00de, 0x00c6, + 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x93a7, 0x89ff, + 0x0158, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xce24, + 0x080c, 0xe908, 0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x93a7, + 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, + 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, + 0x9036, 0x7814, 0x9065, 0x0904, 0x946c, 0x600c, 0x0006, 0x600f, + 0x0000, 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, + 0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c, + 0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, + 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, + 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, + 0x003e, 0x0040, 0x080c, 0x690a, 0x1520, 0x6003, 0x0009, 0x630a, + 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xcb33, 0x01b0, 0x6020, + 0x9086, 0x0003, 0x1508, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, + 0x0060, 0x080c, 0x690a, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c, + 0xa692, 0x000e, 0x0804, 0x9412, 0x7e16, 0x7e12, 0x00de, 0x00ce, + 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, + 0x080c, 0xe551, 0x0c50, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002, + 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, + 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, + 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, + 0x0860, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, + 0x905d, 0x0904, 0x9519, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, + 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6531, 0x0904, 0x9516, + 0x7e24, 0x86ff, 0x0904, 0x9509, 0x9680, 0x0005, 0x2004, 0x9906, + 0x1904, 0x9509, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, + 0x9500, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c, + 0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, - 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, - 0x2660, 0x080c, 0xae78, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, - 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x937e, 0x89ff, 0x0158, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xce0a, 0x080c, - 0xe8e7, 0x080c, 0x6c79, 0x080c, 0xa678, 0x0804, 0x937e, 0x006e, - 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, - 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, - 0x7814, 0x9065, 0x0904, 0x9443, 0x600c, 0x0006, 0x600f, 0x0000, - 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, - 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2, - 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, - 0x0040, 0x080c, 0x6902, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, - 0x00f8, 0x6014, 0x2048, 0x080c, 0xcb19, 0x01b0, 0x6020, 0x9086, - 0x0003, 0x1508, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0060, - 0x080c, 0x6902, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, - 0x080c, 0x6c79, 0x080c, 0xcd04, 0x080c, 0xae78, 0x080c, 0xa678, - 0x000e, 0x0804, 0x93e9, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, - 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, - 0xe530, 0x0c50, 0x080c, 0xb7f9, 0x6020, 0x9086, 0x0002, 0x1150, - 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, - 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, - 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, - 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, - 0x0904, 0x94f0, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, - 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6532, 0x0904, 0x94ed, 0x7e24, - 0x86ff, 0x0904, 0x94e0, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, - 0x94e0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x94d7, - 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2, - 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, - 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, - 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1988, - 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, - 0x2660, 0x600f, 0x0000, 0x080c, 0xae78, 0x00ce, 0x0048, 0x00de, - 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x9483, - 0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, - 0x6c79, 0x080c, 0xa678, 0x0804, 0x9483, 0x000e, 0x0804, 0x9477, - 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, - 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, - 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19e7, - 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, 0xa259, - 0x78c3, 0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2079, - 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2079, 0x0100, 0x7824, 0xd084, - 0x0110, 0x7827, 0x0001, 0x080c, 0xa7a2, 0x003e, 0x080c, 0x6532, - 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, - 0xae47, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, - 0xce0a, 0x080c, 0x6c79, 0x080c, 0xa678, 0x00fe, 0x0005, 0x00b6, - 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, - 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e7, 0x7004, 0x9084, - 0x0007, 0x0002, 0x957c, 0x9580, 0x9597, 0x95c0, 0x95fe, 0x957c, - 0x9597, 0x957a, 0x080c, 0x0dd5, 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, 0x6532, 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, 0x9664, 0x0ca8, 0x7218, 0x721e, - 0x080c, 0x9664, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x9790, 0x0c58, - 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0xa678, - 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, - 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa678, 0x600c, - 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, - 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, - 0x6532, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa678, 0x701c, 0x9065, - 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, - 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, - 0x0140, 0x080c, 0xa678, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, - 0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, - 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e7, 0x6830, - 0x9084, 0x0003, 0x0002, 0x9621, 0x9623, 0x9647, 0x961f, 0x080c, - 0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, - 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, - 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a06, 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, 0x2001, 0x180c, - 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, - 0x0120, 0xc1ec, 0x2102, 0x080c, 0x9790, 0x2001, 0x19f3, 0x2004, - 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e7, 0x6804, 0x9084, - 0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004, 0x9084, - 0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0168, - 0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118, 0x0028, - 0x080c, 0x9790, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002, 0x96a1, - 0x975e, 0x975e, 0x975e, 0x975e, 0x9760, 0x975e, 0x969f, 0x080c, - 0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, - 0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, 0x918c, - 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c, 0x918c, - 0x0028, 0x1150, 0x080c, 0x73b0, 0x0138, 0x0006, 0x2009, 0x188b, - 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826, 0x682b, - 0x0000, 0x080c, 0x9838, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, - 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x9838, - 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, - 0x0904, 0x974a, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, - 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x974a, 0x0028, 0x6818, - 0x920e, 0x0904, 0x974a, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, - 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, - 0x080c, 0xae1e, 0x0904, 0x974a, 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, 0xbac0, 0x629a, 0x2069, 0x0200, 0x2071, - 0x0240, 0x080c, 0x9d85, 0x2069, 0x19e7, 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, - 0xac63, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, - 0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148, 0xa964, - 0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, - 0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x73b0, 0x0138, 0x0006, - 0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, - 0x6826, 0x682b, 0x0000, 0x080c, 0x9838, 0x00ce, 0x00de, 0x0005, - 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, - 0x00f6, 0x00d6, 0x2069, 0x19e7, 0x6830, 0x9086, 0x0000, 0x1570, - 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, - 0x9673, 0x2069, 0x19e7, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x1508, - 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904, 0x9831, - 0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e, 0x6847, + 0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, + 0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, + 0x1988, 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, + 0xb83e, 0x2660, 0x600f, 0x0000, 0x080c, 0xae92, 0x00ce, 0x0048, + 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, + 0x94ac, 0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x94ac, 0x000e, 0x0804, + 0x94a0, 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, + 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, + 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, + 0x19e7, 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, + 0xa273, 0x78c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, + 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2079, 0x0100, 0x7824, + 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0xa7bc, 0x003e, 0x080c, + 0x6531, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, + 0x080c, 0xae61, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0xce24, 0x080c, 0x6c81, 0x080c, 0xa692, 0x00fe, 0x0005, + 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, + 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e7, 0x7004, + 0x9084, 0x0007, 0x0002, 0x95a5, 0x95a9, 0x95c0, 0x95e9, 0x9627, + 0x95a5, 0x95c0, 0x95a3, 0x080c, 0x0dd5, 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, 0x6531, 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, 0x968d, 0x0ca8, 0x7218, + 0x721e, 0x080c, 0x968d, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x97b9, + 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, + 0xa692, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, + 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa692, + 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, + 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, + 0x080c, 0x6531, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa692, 0x701c, + 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, + 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, + 0x9065, 0x0140, 0x080c, 0xa692, 0x600c, 0x9015, 0x0158, 0x720e, + 0x600f, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x00ce, 0x00ee, + 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e7, + 0x6830, 0x9084, 0x0003, 0x0002, 0x964a, 0x964c, 0x9670, 0x9648, + 0x080c, 0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, + 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, + 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a06, + 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, 0x2001, + 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, + 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x97b9, 0x2001, 0x19f3, + 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e7, 0x6804, + 0x9084, 0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004, + 0x9084, 0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, + 0x0168, 0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118, + 0x0028, 0x080c, 0x97b9, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002, + 0x96ca, 0x9787, 0x9787, 0x9787, 0x9787, 0x9789, 0x9787, 0x96c8, + 0x080c, 0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, + 0x680c, 0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, + 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c, + 0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138, 0x0006, 0x2009, + 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826, + 0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de, 0x0005, 0x6814, + 0x9065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, + 0x9861, 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, + 0x0000, 0x0904, 0x9773, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, + 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x9773, 0x0028, + 0x6818, 0x920e, 0x0904, 0x9773, 0x2058, 0xb84c, 0x900d, 0x0d88, + 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, + 0x1e40, 0x080c, 0xae38, 0x0904, 0x9773, 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, 0xbac0, 0x629a, 0x2069, 0x0200, + 0x2071, 0x0240, 0x080c, 0x9dae, 0x2069, 0x19e7, 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, 0xac7d, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, + 0x0005, 0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148, + 0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, + 0x1837, 0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138, + 0x0006, 0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, + 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de, + 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, + 0x0005, 0x00f6, 0x00d6, 0x2069, 0x19e7, 0x6830, 0x9086, 0x0000, + 0x1570, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, + 0x080c, 0x969c, 0x2069, 0x19e7, 0x2001, 0x180c, 0x200c, 0xd1c4, + 0x1508, 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904, + 0x985a, 0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e, + 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, + 0x002e, 0x080c, 0x1c46, 0x1178, 0x012e, 0x080c, 0xa0d0, 0x00de, + 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, + 0x746c, 0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, + 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, + 0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc, + 0x1198, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, + 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, 0x19d8, + 0x012e, 0x080c, 0xa051, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084, + 0x0028, 0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158, + 0x2001, 0x19e8, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c, + 0xc185, 0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, - 0x080c, 0x1c46, 0x1178, 0x012e, 0x080c, 0xa0a7, 0x00de, 0x00fe, - 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x7460, - 0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, - 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, - 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc, 0x1198, - 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, - 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, 0x19d8, 0x012e, - 0x080c, 0xa028, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, - 0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158, 0x2001, - 0x19e8, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c, 0xc185, - 0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, - 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, - 0x1c46, 0x1904, 0x97d2, 0x012e, 0x6a3c, 0x2278, 0x080c, 0x9fb2, - 0x0804, 0x97c6, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012, 0x0804, - 0x97c6, 0x6a04, 0x9296, 0x0006, 0x0904, 0x97b0, 0x0804, 0x9788, - 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x984c, 0x9851, 0x9cbf, - 0x9d4e, 0x9851, 0x9cbf, 0x9d4e, 0x984c, 0x9851, 0x984c, 0x984c, - 0x984c, 0x984c, 0x984c, 0x984c, 0x080c, 0x955f, 0x080c, 0x9664, - 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, - 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, - 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x98bd, 0x005b, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, - 0x015e, 0x00be, 0x0005, 0x9a42, 0x9a7d, 0x9aa6, 0x9b4e, 0x9b70, - 0x9b76, 0x9b83, 0x9b8b, 0x9b97, 0x9b9d, 0x9bae, 0x9b9d, 0x9c06, - 0x9b8b, 0x9c12, 0x9c18, 0x9b97, 0x9c18, 0x9c24, 0x98bb, 0x98bb, - 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, - 0x98bb, 0xa453, 0xa476, 0xa487, 0xa4a7, 0xa4d9, 0x9b83, 0x98bb, - 0x9b83, 0x9b9d, 0x98bb, 0x9aa6, 0x9b4e, 0x98bb, 0xa88f, 0x9b9d, - 0x98bb, 0xa8ab, 0x9b9d, 0x98bb, 0x9b97, 0x9a3c, 0x98de, 0x98bb, - 0xa8c7, 0xa934, 0xaa0b, 0x98bb, 0xaa18, 0x9b80, 0xaa43, 0x98bb, - 0xa4e3, 0xaa70, 0x98bb, 0x080c, 0x0dd5, 0x2100, 0x005b, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, - 0x00be, 0x0005, 0xab0b, 0xabbd, 0x98dc, 0x9905, 0x99b1, 0x99bc, - 0x98dc, 0x9b83, 0x98dc, 0x9a03, 0x9a0f, 0x9920, 0x98dc, 0x993b, - 0x996f, 0xad25, 0xad6a, 0x9b9d, 0x080c, 0x0dd5, 0x00d6, 0x0096, - 0x080c, 0x9c37, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, - 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, - 0x60c3, 0x0018, 0x080c, 0xa22d, 0x009e, 0x00de, 0x0005, 0x7810, - 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xadb1, 0x1118, 0x9084, - 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, - 0x9c37, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, - 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, - 0x701e, 0x60c3, 0x0010, 0x080c, 0xa22d, 0x009e, 0x00de, 0x0005, - 0x00d6, 0x0096, 0x080c, 0x9c37, 0x7003, 0x0500, 0x7814, 0x2048, - 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, - 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0xa22d, - 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, - 0x080c, 0x9c37, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, - 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, - 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, - 0x200c, 0x2001, 0x0001, 0x080c, 0x23b7, 0x080c, 0xd84c, 0x9006, - 0x080c, 0x23b7, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, - 0x04d9, 0x080c, 0xa22d, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, - 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c82, 0x20e9, 0x0000, - 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, - 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, - 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, - 0x200c, 0x080c, 0xd84c, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, - 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb1, 0x080c, 0xa22d, - 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, - 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, - 0x0005, 0x080c, 0x9c37, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, - 0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6, 0x00e6, 0x080c, 0x9c82, - 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, - 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, - 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99d2, 0x2069, - 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99db, - 0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9, - 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, - 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, - 0x8d68, 0x8e70, 0x1f04, 0x99e9, 0x60c3, 0x004c, 0x080c, 0xa22d, - 0x00ee, 0x00de, 0x0005, 0x080c, 0x9c37, 0x7003, 0x6300, 0x7007, - 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6, - 0x0026, 0x0016, 0x080c, 0x9c82, 0x7003, 0x0200, 0x7814, 0x700e, - 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, - 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, - 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, - 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0xa22d, - 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, - 0x0804, 0xa22d, 0x080c, 0x9c37, 0x7003, 0x5200, 0x2069, 0x1847, - 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2871, 0x710e, - 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, - 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, - 0x20a1, 0x0254, 0x4003, 0x080c, 0xadb1, 0x1120, 0xb8a0, 0x9082, - 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, - 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, - 0x7036, 0x60c3, 0x001c, 0x0804, 0xa22d, 0x080c, 0x9c37, 0x7003, - 0x0500, 0x080c, 0xadb1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, - 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, - 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, - 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, - 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa22d, 0x080c, 0x9c37, - 0x9006, 0x080c, 0x6934, 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, 0x9b15, 0x00d6, 0x2069, 0x196c, - 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, - 0x9084, 0x2000, 0x7012, 0x080c, 0xadc8, 0x680c, 0x7016, 0x701f, - 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, - 0x6804, 0x700e, 0x6808, 0x080c, 0x73b0, 0x1118, 0x9084, 0x37ff, - 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xadc8, 0x680c, 0x7016, - 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, - 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, - 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xaaf2, 0x2069, 0x1974, - 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d4, 0xd0e4, - 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004, - 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106, - 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28b2, 0x61e2, 0x001e, - 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e, - 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, - 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, - 0x4003, 0x080c, 0xaaf2, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, - 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa22d, 0x080c, 0x9c37, - 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, - 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110, - 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, - 0x00d6, 0x0804, 0x9be7, 0x7026, 0x60c3, 0x0014, 0x0804, 0xa22d, - 0x080c, 0x9c37, 0x7003, 0x5000, 0x0804, 0x9ac0, 0x080c, 0x9c37, - 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0xa22d, - 0x080c, 0x9c79, 0x0010, 0x080c, 0x9c82, 0x7003, 0x0200, 0x60c3, - 0x0004, 0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0100, 0x700b, - 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x080c, - 0x9c82, 0x7003, 0x0200, 0x0804, 0x9ac0, 0x080c, 0x9c82, 0x7003, - 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, - 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6, 0x080c, - 0x9c82, 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, 0x1847, 0x7904, 0x00fe, - 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, - 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, - 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc, 0xd28c, - 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, - 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, - 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa22d, 0x080c, 0x9c82, - 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, - 0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0200, 0x0804, 0x9a46, - 0x080c, 0x9c82, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, - 0x60c3, 0x0008, 0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0100, - 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0026, 0x00d6, - 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, - 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, - 0xab07, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, - 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, - 0x003e, 0x00de, 0x080c, 0xa21b, 0x721a, 0x9f95, 0x0000, 0x7222, - 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, - 0xab07, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, - 0x687c, 0x700a, 0x6880, 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, 0xab07, 0xb810, 0x9305, 0x7002, 0xb814, - 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, - 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a, - 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, - 0x00de, 0x080c, 0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, - 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa21b, 0x721a, 0x7a08, - 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, + 0x080c, 0x1c46, 0x1904, 0x97fb, 0x012e, 0x6a3c, 0x2278, 0x080c, + 0x9fdb, 0x0804, 0x97ef, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012, + 0x0804, 0x97ef, 0x6a04, 0x9296, 0x0006, 0x0904, 0x97d9, 0x0804, + 0x97b1, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9875, 0x987a, + 0x9ce8, 0x9d77, 0x987a, 0x9ce8, 0x9d77, 0x9875, 0x987a, 0x9875, + 0x9875, 0x9875, 0x9875, 0x9875, 0x9875, 0x080c, 0x9588, 0x080c, + 0x968d, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, - 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092, 0x1a0c, - 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100, 0x619a, - 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, - 0x0005, 0x9cf0, 0x9cff, 0x9d0a, 0x9cee, 0x9cee, 0x9cee, 0x9cf0, - 0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x080c, 0x0dd5, - 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2ba5, 0x0228, 0x2011, - 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa22d, 0x0431, - 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, - 0x0804, 0xa22d, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, - 0x0004, 0x0804, 0xa22d, 0x0026, 0x080c, 0xab07, 0xb810, 0x9085, - 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, - 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9c52, 0x0026, 0x080c, - 0xab07, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, - 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, - 0x0804, 0x9cb4, 0x0026, 0x080c, 0xab07, 0xb810, 0x9085, 0x8500, + 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, + 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x98e6, + 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, + 0x013e, 0x015e, 0x00be, 0x0005, 0x9a6b, 0x9aa6, 0x9acf, 0x9b77, + 0x9b99, 0x9b9f, 0x9bac, 0x9bb4, 0x9bc0, 0x9bc6, 0x9bd7, 0x9bc6, + 0x9c2f, 0x9bb4, 0x9c3b, 0x9c41, 0x9bc0, 0x9c41, 0x9c4d, 0x98e4, + 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, + 0x98e4, 0x98e4, 0xa46d, 0xa490, 0xa4a1, 0xa4c1, 0xa4f3, 0x9bac, + 0x98e4, 0x9bac, 0x9bc6, 0x98e4, 0x9acf, 0x9b77, 0x98e4, 0xa8a9, + 0x9bc6, 0x98e4, 0xa8c5, 0x9bc6, 0x98e4, 0x9bc0, 0x9a65, 0x9907, + 0x98e4, 0xa8e1, 0xa94e, 0xaa25, 0x98e4, 0xaa32, 0x9ba9, 0xaa5d, + 0x98e4, 0xa4fd, 0xaa8a, 0x98e4, 0x080c, 0x0dd5, 0x2100, 0x005b, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, + 0x015e, 0x00be, 0x0005, 0xab25, 0xabd7, 0x9905, 0x992e, 0x99da, + 0x99e5, 0x9905, 0x9bac, 0x9905, 0x9a2c, 0x9a38, 0x9949, 0x9905, + 0x9964, 0x9998, 0xad3f, 0xad84, 0x9bc6, 0x080c, 0x0dd5, 0x00d6, + 0x0096, 0x080c, 0x9c60, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, + 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, + 0x7026, 0x60c3, 0x0018, 0x080c, 0xa247, 0x009e, 0x00de, 0x0005, + 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xadcb, 0x1118, + 0x9084, 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, + 0x080c, 0x9c60, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, + 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, + 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c, 0xa247, 0x009e, 0x00de, + 0x0005, 0x00d6, 0x0096, 0x080c, 0x9c60, 0x7003, 0x0500, 0x7814, + 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, + 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, + 0xa247, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, + 0x8000, 0x080c, 0x9c60, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, + 0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, + 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, + 0x0016, 0x200c, 0x2001, 0x0001, 0x080c, 0x23b7, 0x080c, 0xd867, + 0x9006, 0x080c, 0x23b7, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, + 0x0c28, 0x04d9, 0x080c, 0xa247, 0x012e, 0x009e, 0x00de, 0x0005, + 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9cab, 0x20e9, + 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, + 0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, + 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, + 0x0016, 0x200c, 0x080c, 0xd867, 0x001e, 0xa804, 0x9005, 0x0110, + 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb1, 0x080c, + 0xa247, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, + 0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, + 0x1de0, 0x0005, 0x080c, 0x9c60, 0x7003, 0x7800, 0x7808, 0x8007, + 0x700a, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6, 0x00e6, 0x080c, + 0x9cab, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, + 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, + 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99fb, + 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, + 0x9a04, 0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, + 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, + 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, + 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x9a12, 0x60c3, 0x004c, 0x080c, + 0xa247, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9c60, 0x7003, 0x6300, + 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, + 0x00d6, 0x0026, 0x0016, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7814, + 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, + 0x2069, 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, + 0x2073, 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, + 0x8e70, 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, + 0xa247, 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, + 0x609a, 0x0804, 0xa247, 0x080c, 0x9c60, 0x7003, 0x5200, 0x2069, + 0x1847, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2871, + 0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, + 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, + 0x1801, 0x20a1, 0x0254, 0x4003, 0x080c, 0xadcb, 0x1120, 0xb8a0, + 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, + 0x1820, 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, + 0x00ff, 0x7036, 0x60c3, 0x001c, 0x0804, 0xa247, 0x080c, 0x9c60, + 0x7003, 0x0500, 0x080c, 0xadcb, 0x1120, 0xb8a0, 0x9082, 0x007f, + 0x0248, 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, + 0x700e, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, + 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, + 0x20a1, 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa247, 0x080c, + 0x9c60, 0x9006, 0x080c, 0x693c, 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, 0x9b3e, 0x00d6, 0x2069, + 0x196c, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, + 0x6808, 0x9084, 0x2000, 0x7012, 0x080c, 0xade2, 0x680c, 0x7016, + 0x701f, 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, + 0x700a, 0x6804, 0x700e, 0x6808, 0x080c, 0x73bc, 0x1118, 0x9084, + 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xade2, 0x680c, + 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, + 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, + 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xab0c, 0x2069, + 0x1974, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d3, + 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, + 0x2004, 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, + 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28b2, 0x61e2, + 0x001e, 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, + 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, + 0x025a, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x024e, 0x20a9, 0x0008, + 0x2099, 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa247, 0x080c, + 0x9c60, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, + 0x2000, 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, + 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, + 0x0002, 0x00d6, 0x0804, 0x9c10, 0x7026, 0x60c3, 0x0014, 0x0804, + 0xa247, 0x080c, 0x9c60, 0x7003, 0x5000, 0x0804, 0x9ae9, 0x080c, + 0x9c60, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, + 0xa247, 0x080c, 0x9ca2, 0x0010, 0x080c, 0x9cab, 0x7003, 0x0200, + 0x60c3, 0x0004, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0100, + 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247, + 0x080c, 0x9cab, 0x7003, 0x0200, 0x0804, 0x9ae9, 0x080c, 0x9cab, + 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, + 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6, + 0x080c, 0x9cab, 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, 0x1847, 0x7904, + 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, + 0x0010, 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, + 0x0026, 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc, + 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, + 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, + 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa247, 0x080c, + 0x9cab, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, + 0x0014, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0200, 0x0804, + 0x9a6f, 0x080c, 0x9cab, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, + 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, + 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0026, + 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, + 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, + 0x080c, 0xab21, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, + 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, + 0x004e, 0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x9f95, 0x0000, + 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, + 0x080c, 0xab21, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, + 0x1800, 0x687c, 0x700a, 0x6880, 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, 0xab21, 0xb810, 0x9305, 0x7002, + 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, + 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, + 0x700a, 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, + 0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10, + 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa235, 0x721a, + 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, + 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, + 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092, + 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100, + 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x00be, 0x0005, 0x9d19, 0x9d28, 0x9d33, 0x9d17, 0x9d17, 0x9d17, + 0x9d19, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x080c, + 0x0dd5, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2ba5, 0x0228, + 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa247, + 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, + 0x000c, 0x0804, 0xa247, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, + 0x60c3, 0x0004, 0x0804, 0xa247, 0x0026, 0x080c, 0xab21, 0xb810, + 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, + 0x700a, 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9c7b, 0x0026, + 0x080c, 0xab21, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, + 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, + 0x7012, 0x0804, 0x9cdd, 0x0026, 0x080c, 0xab21, 0xb810, 0x9085, + 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, + 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9cdd, 0x00b6, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, + 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054, + 0x1a0c, 0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a, + 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x0005, 0x9dae, 0x9e6a, 0x9e3d, 0x9f8c, 0x9dac, 0x9dac, 0x9dac, + 0x9dac, 0x9dac, 0x9dac, 0x9dac, 0xa66f, 0xa677, 0xa67f, 0xa687, + 0x9dac, 0xaa69, 0x9dac, 0xa667, 0x080c, 0x0dd5, 0x0096, 0x780b, + 0xffff, 0x080c, 0x9e19, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, + 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, + 0x7036, 0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, + 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, + 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, + 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047, + 0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x18ac, 0x0010, 0x080c, + 0x1725, 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, + 0x1a03, 0x2003, 0x07d0, 0x2001, 0x1a02, 0x2003, 0x0009, 0x009e, + 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, 0xd084, 0x0128, + 0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, + 0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, + 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 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, 0xa247, + 0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, + 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889, + 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, + 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9f6a, 0x7814, 0x2048, + 0x080c, 0xcb33, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, + 0x0010, 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x9e88, 0x9ef1, + 0x9f01, 0x9f27, 0x9f33, 0x9f44, 0x9f4c, 0x9e86, 0x080c, 0x0dd5, + 0x0016, 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, + 0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, + 0xa894, 0x701e, 0x003e, 0x001e, 0x2001, 0x19b1, 0x2004, 0x60c2, + 0x0804, 0xa247, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dd5, + 0xaba8, 0x7824, 0xd0cc, 0x1904, 0x9eee, 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, 0xa247, 0xc3e5, 0x0804, + 0x9ead, 0x2011, 0x0008, 0x2001, 0x180f, 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, 0xa247, 0x2011, + 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, + 0xa247, 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, + 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, + 0x60c3, 0x0020, 0x0804, 0xa247, 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, 0x687c, 0x700a, 0x6880, - 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9cb4, 0x00b6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, - 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054, 0x1a0c, - 0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a, 0x9082, - 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, - 0x9d85, 0x9e41, 0x9e14, 0x9f63, 0x9d83, 0x9d83, 0x9d83, 0x9d83, - 0x9d83, 0x9d83, 0x9d83, 0xa655, 0xa65d, 0xa665, 0xa66d, 0x9d83, - 0xaa4f, 0x9d83, 0xa64d, 0x080c, 0x0dd5, 0x0096, 0x780b, 0xffff, - 0x080c, 0x9df0, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, - 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, 0x7036, - 0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, 0x9184, - 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, - 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, 0x9084, - 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047, 0x0002, - 0x9686, 0x0008, 0x1118, 0x080c, 0x18ac, 0x0010, 0x080c, 0x1725, - 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, 0x1a03, - 0x2003, 0x07d0, 0x2001, 0x1a02, 0x2003, 0x0009, 0x009e, 0x0005, - 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, 0xd084, 0x0128, 0x7a46, - 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, - 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, - 0x1800, 0x6a7c, 0x720a, 0x6a80, 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, 0xa22d, 0x6813, - 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, - 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889, 0x080c, - 0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, - 0x0005, 0x00d6, 0x0096, 0x080c, 0x9f41, 0x7814, 0x2048, 0x080c, - 0xcb19, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, - 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x9e5f, 0x9ec8, 0x9ed8, - 0x9efe, 0x9f0a, 0x9f1b, 0x9f23, 0x9e5d, 0x080c, 0x0dd5, 0x0016, - 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, - 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, - 0x701e, 0x003e, 0x001e, 0x2001, 0x19b1, 0x2004, 0x60c2, 0x0804, - 0xa22d, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dd5, 0xaba8, - 0x7824, 0xd0cc, 0x1904, 0x9ec5, 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, 0xa22d, 0xc3e5, 0x0804, 0x9e84, - 0x2011, 0x0008, 0x2001, 0x180f, 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, 0xa22d, 0x2011, 0x0028, - 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0xa22d, - 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, - 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, - 0x0020, 0x0804, 0xa22d, 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, 0x687c, 0x700a, 0x6880, 0x700e, - 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa21b, 0x721a, - 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, - 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, - 0x0013, 0x001e, 0x0005, 0x9f73, 0x9f73, 0x9f75, 0x9f73, 0x9f73, - 0x9f73, 0x9f8f, 0x9f73, 0x080c, 0x0dd5, 0x7914, 0x918c, 0x08ff, - 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847, - 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, - 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa22d, 0x2009, - 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xab07, - 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, - 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d, - 0x0008, 0x7116, 0x080c, 0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10, - 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, - 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, - 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500, - 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, - 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400, - 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073, - 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, - 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, - 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a, 0xa834, - 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c, 0x60ce, - 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837, - 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092, - 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027, 0xffff, - 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x8555, 0x003e, - 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, - 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, - 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0xb8a0, - 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, 0x2500, - 0x9094, 0xff80, 0x1130, 0x9080, 0x331e, 0x2015, 0x9294, 0x00ff, - 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, 0x1130, - 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, 0x0400, - 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266, - 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, 0xb864, - 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, + 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa235, + 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, + 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, + 0x8007, 0x0013, 0x001e, 0x0005, 0x9f9c, 0x9f9c, 0x9f9e, 0x9f9c, + 0x9f9c, 0x9f9c, 0x9fb8, 0x9f9c, 0x080c, 0x0dd5, 0x7914, 0x918c, + 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, + 0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, + 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa247, + 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, + 0xab21, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, + 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, + 0x918d, 0x0008, 0x7116, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, + 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, + 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, + 0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, + 0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, + 0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, + 0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, + 0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c, - 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbac0, - 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009, - 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x8555, 0x003e, 0x004e, - 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6, - 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, - 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, - 0xba14, 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904, 0xa18a, - 0x90be, 0x000a, 0x1904, 0xa146, 0x609f, 0x0000, 0x7814, 0x2048, - 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, - 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, - 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, 0x1837, 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, + 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, + 0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001, + 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027, + 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x857e, + 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, + 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, + 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, + 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, + 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3325, 0x2015, 0x9294, + 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, + 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, + 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, + 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, + 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, + 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, + 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, + 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, + 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, + 0xbac0, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, + 0x2009, 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x857e, 0x003e, + 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, + 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, + 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, + 0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904, + 0xa1a4, 0x90be, 0x000a, 0x1904, 0xa160, 0xb8c0, 0x609e, 0x7814, + 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, + 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, + 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039, + 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, + 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8c0, + 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 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, 0xab06, 0x2009, 0x07d0, 0x60c4, 0x9084, + 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x857e, 0x003e, + 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, + 0x7804, 0x9086, 0x0040, 0x0904, 0xa1e0, 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, 0xbac0, 0x629e, 0x080c, 0xab06, + 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, + 0x1b58, 0x080c, 0x857e, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, + 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, + 0x0003, 0x9086, 0x0002, 0x0904, 0xa1fc, 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, 0xbac0, 0x629e, 0x080c, 0xaae3, 0x0804, 0xa190, + 0xb8cc, 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, 0xa173, 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, - 0x080c, 0xaaec, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, - 0x0110, 0x2009, 0x1b58, 0x080c, 0x8555, 0x003e, 0x004e, 0x005e, - 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, - 0x0040, 0x0904, 0xa1c6, 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, 0xbac0, 0x629e, 0x080c, 0xaaec, 0x2009, 0x07d0, - 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, - 0x8555, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, - 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, - 0x0002, 0x0904, 0xa1e2, 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, - 0xbac0, 0x629e, 0x080c, 0xaac9, 0x0804, 0xa176, 0xb8cc, 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, 0xa159, 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, 0xbac0, 0x629e, - 0x7824, 0xd0cc, 0x0120, 0x080c, 0xaaec, 0x0804, 0xa176, 0x080c, - 0xaac9, 0x0804, 0xa176, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210, - 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069, - 0x19e7, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, - 0x9575, 0x00f1, 0x080c, 0x8547, 0x0005, 0x0016, 0x2001, 0x180c, - 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, - 0x8547, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, - 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f0, 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, - 0x73b0, 0x11e8, 0x2001, 0x1a03, 0x2004, 0x9005, 0x1904, 0xa2bf, - 0x0066, 0x2031, 0x0001, 0x080c, 0x7460, 0x006e, 0x1160, 0x2061, - 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, 0x090c, 0x0dd5, - 0x080c, 0x8547, 0x0460, 0x00c6, 0x2061, 0x19e7, 0x00d0, 0x6904, - 0x9194, 0x4000, 0x0548, 0x080c, 0xa259, 0x080c, 0x2cff, 0x00c6, - 0x2061, 0x19e7, 0x6128, 0x9192, 0x0008, 0x1258, 0x8108, 0x612a, - 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8547, 0x080c, 0xa250, - 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, 0xe9dd, 0x080c, - 0x8550, 0x2009, 0x0014, 0x080c, 0xaec2, 0x00ce, 0x0000, 0x002e, - 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a03, 0x2004, 0x9005, - 0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, 0x0003, 0x1e08, - 0x8108, 0x612a, 0x00ce, 0x080c, 0x8547, 0x080c, 0x5eda, 0x2009, - 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6, - 0x00e6, 0x0016, 0x0026, 0x080c, 0x855d, 0x2071, 0x19e7, 0x713c, - 0x81ff, 0x0904, 0xa363, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, - 0x73b0, 0x1500, 0x0036, 0x2019, 0x0002, 0x080c, 0xa59c, 0x003e, - 0x713c, 0x2160, 0x080c, 0xe9dd, 0x2009, 0x004a, 0x6220, 0x9296, - 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, - 0x080c, 0xaec2, 0x0066, 0x2031, 0x0001, 0x080c, 0x7460, 0x006e, - 0x0804, 0xa363, 0x080c, 0xa36f, 0x0904, 0xa363, 0x6904, 0xd1f4, - 0x0904, 0xa36a, 0x080c, 0x2cff, 0x00c6, 0x703c, 0x9065, 0x090c, - 0x0dd5, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, - 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, - 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0030, - 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2c52, 0x6014, 0x9084, - 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, - 0x080c, 0xaec2, 0x00c0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa59c, - 0x003e, 0x713c, 0x2160, 0x080c, 0xe9dd, 0x2009, 0x004a, 0x6220, - 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, - 0x004a, 0x080c, 0xaec2, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, - 0x009e, 0x0005, 0xd1ec, 0x1904, 0xa31a, 0x0804, 0xa31c, 0x00d6, - 0x00c6, 0x0096, 0x703c, 0x9065, 0x090c, 0x0dd5, 0x2001, 0x1837, - 0x2004, 0xd09c, 0x1904, 0xa3fb, 0x2001, 0x0306, 0x200c, 0x9184, - 0x0030, 0x0904, 0xa3fb, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, - 0xa3fb, 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, 0xa3fb, 0xd08c, - 0x0904, 0xa3fb, 0x2009, 0x1a80, 0x2104, 0x8000, 0x0208, 0x200a, - 0x2069, 0x0100, 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, - 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, - 0x2001, 0x0306, 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, - 0x2001, 0x1a66, 0x2003, 0x0000, 0x2001, 0x1a6f, 0x2003, 0x0000, - 0x6a88, 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1bad, - 0x0040, 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, - 0xaa4a, 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, - 0x190c, 0x0dd5, 0x012e, 0x0090, 0x2009, 0x1a81, 0x2104, 0x8000, - 0x0208, 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, - 0x9106, 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, - 0x0110, 0x6827, 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, - 0xc084, 0x704a, 0x2009, 0x07d0, 0x080c, 0x8555, 0x9006, 0x009e, - 0x00ce, 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, - 0x2071, 0x19e7, 0x7048, 0xd084, 0x01d8, 0x713c, 0x81ff, 0x01c0, - 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, - 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0048, 0x928e, - 0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, - 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, - 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, 0x2058, - 0xbca0, 0x2071, 0x19e7, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, - 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048, - 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x6732, 0x0110, 0x9085, - 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, - 0x00ee, 0x00be, 0x0005, 0x080c, 0x9c37, 0x7003, 0x1200, 0x7838, - 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, - 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, - 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a, - 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0xa22d, 0x080c, 0x9c37, - 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, - 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0156, - 0x080c, 0x9c82, 0x7003, 0x0200, 0x080c, 0x85b0, 0x20a9, 0x0006, - 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072, - 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, - 0x1f04, 0xa496, 0x60c3, 0x001c, 0x015e, 0x0804, 0xa22d, 0x0016, - 0x0026, 0x080c, 0x9c5e, 0x080c, 0x9c70, 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, 0xa22d, 0x002e, 0x001e, 0x0005, 0x20a9, - 0x0010, 0x4003, 0x080c, 0xaaf2, 0x20a1, 0x0240, 0x22a8, 0x4003, - 0x0c68, 0x080c, 0x9c37, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, - 0x0008, 0x0804, 0xa22d, 0x0016, 0x0026, 0x080c, 0x9c37, 0x20e9, - 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, - 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, - 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0xa22d, - 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x19e7, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, - 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x600c, 0x0006, 0x080c, 0xcf88, - 0x080c, 0xae47, 0x080c, 0xa678, 0x00ce, 0x0c78, 0x2c00, 0x700e, - 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, + 0xbac0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0xab06, 0x0804, + 0xa190, 0x080c, 0xaae3, 0x0804, 0xa190, 0x7a10, 0x00b6, 0x2258, + 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, + 0x00d6, 0x2069, 0x19e7, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8570, 0x0005, 0x0016, + 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, + 0x0089, 0x080c, 0x8570, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, + 0x2102, 0x2001, 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f0, 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, 0x73bc, 0x11e8, 0x2001, 0x1a03, 0x2004, 0x9005, + 0x1904, 0xa2d9, 0x0066, 0x2031, 0x0001, 0x080c, 0x746c, 0x006e, + 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, + 0x090c, 0x0dd5, 0x080c, 0x8570, 0x0460, 0x00c6, 0x2061, 0x19e7, + 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0xa273, 0x080c, + 0x2cff, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, 0x0008, 0x1258, + 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8570, + 0x080c, 0xa26a, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, + 0xe9fe, 0x080c, 0x8579, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce, + 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a03, + 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, + 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8570, 0x080c, + 0x5ed9, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, + 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8586, 0x2071, + 0x19e7, 0x713c, 0x81ff, 0x0904, 0xa37d, 0x2061, 0x0100, 0x2069, + 0x0140, 0x080c, 0x73bc, 0x1500, 0x0036, 0x2019, 0x0002, 0x080c, + 0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009, 0x004a, + 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, + 0x2009, 0x004a, 0x080c, 0xaedc, 0x0066, 0x2031, 0x0001, 0x080c, + 0x746c, 0x006e, 0x0804, 0xa37d, 0x080c, 0xa389, 0x0904, 0xa37d, + 0x6904, 0xd1f4, 0x0904, 0xa384, 0x080c, 0x2cff, 0x00c6, 0x703c, + 0x9065, 0x090c, 0x0dd5, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, + 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, + 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, + 0x1560, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2c52, + 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, + 0x2009, 0x0049, 0x080c, 0xaedc, 0x00c0, 0x0036, 0x2019, 0x0001, + 0x080c, 0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009, + 0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, + 0x0006, 0x2009, 0x004a, 0x080c, 0xaedc, 0x002e, 0x001e, 0x00ee, + 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0xa334, 0x0804, + 0xa336, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065, 0x090c, 0x0dd5, + 0x2001, 0x1837, 0x2004, 0xd09c, 0x1904, 0xa415, 0x2001, 0x0306, + 0x200c, 0x9184, 0x0030, 0x0904, 0xa415, 0x9184, 0x0048, 0x9086, + 0x0008, 0x1904, 0xa415, 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, + 0xa415, 0xd08c, 0x0904, 0xa415, 0x2009, 0x1a80, 0x2104, 0x8000, + 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x0184, 0x918d, + 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, + 0x8211, 0x1dd8, 0x2001, 0x0306, 0x2003, 0x4800, 0x2001, 0x009a, + 0x2003, 0x0004, 0x2001, 0x1a66, 0x2003, 0x0000, 0x2001, 0x1a6f, + 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, + 0x080c, 0x1bad, 0x0040, 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, + 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, + 0x080c, 0x1c46, 0x190c, 0x0dd5, 0x012e, 0x0090, 0x2009, 0x1a81, + 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, + 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, + 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048, 0xc085, 0x704a, + 0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0, 0x080c, 0x857e, + 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, + 0x0026, 0x00e6, 0x2071, 0x19e7, 0x7048, 0xd084, 0x01d8, 0x713c, + 0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, + 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, + 0x0048, 0x928e, 0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085, + 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, + 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, + 0x6010, 0x2058, 0xbca0, 0x2071, 0x19e7, 0x7018, 0x2058, 0x8bff, + 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, + 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x6731, + 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, + 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9c60, 0x7003, + 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, + 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, + 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, + 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0xa247, + 0x080c, 0x9c60, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, + 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, + 0xa247, 0x0156, 0x080c, 0x9cab, 0x7003, 0x0200, 0x080c, 0x85d9, + 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, + 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, + 0x9290, 0x0002, 0x1f04, 0xa4b0, 0x60c3, 0x001c, 0x015e, 0x0804, + 0xa247, 0x0016, 0x0026, 0x080c, 0x9c87, 0x080c, 0x9c99, 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, 0xa247, 0x002e, 0x001e, + 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x0240, + 0x22a8, 0x4003, 0x0c68, 0x080c, 0x9c60, 0x7003, 0x6200, 0x7808, + 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0016, 0x0026, 0x080c, + 0x9c60, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, + 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, + 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, + 0x080c, 0xa247, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, + 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x700c, 0x2060, 0x8cff, + 0x0178, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x600c, 0x0006, + 0x080c, 0xcfa2, 0x080c, 0xae61, 0x080c, 0xa692, 0x00ce, 0x0c78, + 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, + 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, + 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, + 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, + 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0xa273, 0x6ac0, 0x68c3, + 0x0000, 0x080c, 0x8579, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac5d, + 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xaedc, + 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, + 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, + 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8579, 0x6814, 0x9084, + 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x2011, 0x5e83, 0x080c, 0x84f3, 0x20a9, 0x01f4, 0x0009, 0x08c0, + 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, + 0x190c, 0x2cff, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, + 0x1f04, 0xa598, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, - 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, - 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, 0x7024, 0x2060, - 0x8cff, 0x01f8, 0x080c, 0xa259, 0x6ac0, 0x68c3, 0x0000, 0x080c, - 0x8550, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac43, 0x00ce, 0x20a9, - 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xaec2, 0x000e, 0x001e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, - 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, - 0x0004, 0x0d60, 0x080c, 0x8550, 0x6814, 0x9084, 0x0001, 0x0110, - 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5e84, - 0x080c, 0x84ca, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, + 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, + 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, 0x703c, 0x2060, + 0x8cff, 0x0904, 0xa648, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, + 0x0002, 0x0904, 0xa648, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, + 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8586, + 0x080c, 0x1ffa, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021, + 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, + 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, + 0x2071, 0x1a66, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, + 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, + 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1981, + 0x200c, 0x080c, 0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2cff, - 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0xa57e, + 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa61e, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, - 0x9006, 0x080c, 0x2cef, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, - 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x19e7, 0x703c, 0x2060, 0x8cff, 0x0904, - 0xa62e, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, - 0xa62e, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, - 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x855d, 0x080c, 0x1ffa, - 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021, 0x0169, 0x2404, - 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, - 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x1a66, - 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, - 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, - 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1981, 0x200c, 0x080c, - 0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, - 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2cff, 0x0090, 0xd08c, - 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa604, 0x7804, 0x9084, - 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, - 0x2cef, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140, 0x2009, 0x0049, - 0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xaec2, 0x000e, 0x001e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, - 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a06, - 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, - 0x19e7, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9df0, 0x7854, - 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x9df0, 0x7854, - 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x9df0, 0x7854, - 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x9df0, 0x7854, - 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x9df0, 0x7854, - 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0xa22d, - 0x00e6, 0x2071, 0x19e7, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, - 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7614, 0x2660, - 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa71d, 0x8cff, 0x0904, - 0xa71d, 0x6020, 0x9086, 0x0006, 0x1904, 0xa718, 0x88ff, 0x0138, - 0x2800, 0x9c06, 0x1904, 0xa718, 0x2039, 0x0000, 0x0050, 0x6010, - 0x9b06, 0x1904, 0xa718, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, - 0xa718, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, - 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8550, - 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0428, 0x080c, 0x8550, 0x6820, - 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, + 0x9006, 0x080c, 0x2cef, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140, + 0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xaedc, + 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, + 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, + 0x19e7, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, + 0x8000, 0x2069, 0x19e7, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, + 0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, + 0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, + 0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, + 0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, + 0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, + 0x0804, 0xa247, 0x00e6, 0x2071, 0x19e7, 0x7020, 0x9005, 0x0110, + 0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, + 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, + 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa737, + 0x8cff, 0x0904, 0xa737, 0x6020, 0x9086, 0x0006, 0x1904, 0xa732, + 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa732, 0x2039, 0x0000, + 0x0050, 0x6010, 0x9b06, 0x1904, 0xa732, 0x85ff, 0x0120, 0x6054, + 0x9106, 0x1904, 0xa732, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, + 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, + 0x080c, 0x8579, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0428, 0x080c, + 0x8579, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, + 0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, + 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0110, 0x6827, 0x0001, 0x003e, 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, 0xcb33, 0x0110, 0x080c, 0xe551, + 0x009e, 0x080c, 0xae92, 0x080c, 0xa692, 0x88ff, 0x1190, 0x00ce, + 0x0804, 0xa6ad, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa6ad, 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, 0x19e7, 0x7638, 0x2660, 0x2678, 0x8cff, + 0x0904, 0xa7ab, 0x6020, 0x9086, 0x0006, 0x1904, 0xa7a6, 0x87ff, + 0x0128, 0x2700, 0x9c06, 0x1904, 0xa7a6, 0x0040, 0x6010, 0x9b06, + 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, + 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 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, 0xcb33, 0x0110, 0x080c, 0xe551, 0x080c, + 0xae92, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa757, 0x2c78, 0x600c, + 0x2060, 0x0804, 0xa757, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, + 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, + 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, + 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, + 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 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, 0x19e7, 0x760c, 0x2660, 0x2678, + 0x8cff, 0x0904, 0xa898, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, + 0x9206, 0x1904, 0xa893, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, + 0x68c0, 0x9005, 0x0904, 0xa86f, 0x080c, 0xa273, 0x68c3, 0x0000, + 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 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, 0xcb19, 0x0110, 0x080c, 0xe530, 0x009e, 0x080c, - 0xae78, 0x080c, 0xa678, 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa693, - 0x2c78, 0x600c, 0x2060, 0x0804, 0xa693, 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, 0x19e7, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa791, - 0x6020, 0x9086, 0x0006, 0x1904, 0xa78c, 0x87ff, 0x0128, 0x2700, - 0x9c06, 0x1904, 0xa78c, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, - 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, - 0x2019, 0x0001, 0x080c, 0xa59c, 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, 0xcb19, 0x0110, 0x080c, 0xe530, 0x080c, 0xae78, 0x87ff, - 0x1198, 0x00ce, 0x0804, 0xa73d, 0x2c78, 0x600c, 0x2060, 0x0804, - 0xa73d, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, - 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, - 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x2001, 0x1800, 0x2004, - 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, - 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 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, 0x19e7, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, - 0xa87e, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, - 0xa879, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, - 0x0904, 0xa855, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2, - 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, - 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, 0xcd10, 0x1158, 0x080c, 0x31e1, 0x080c, - 0xcd21, 0x11f0, 0x080c, 0xb7f9, 0x00d8, 0x080c, 0xa7a2, 0x08c0, - 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0090, 0x6014, 0x2048, - 0x080c, 0xcb19, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04, - 0x080c, 0xcf88, 0x080c, 0xae78, 0x080c, 0xa678, 0x00ce, 0x0804, - 0xa7fe, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa7fe, 0x012e, 0x000e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, - 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe530, 0x0c08, 0x00d6, - 0x080c, 0x9c82, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, - 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, 0x20a1, 0x0250, - 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, - 0xa22d, 0x00de, 0x0005, 0x080c, 0x9c82, 0x700b, 0x0800, 0x7814, - 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, - 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858, - 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0xa22d, 0x00b6, - 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xd18e, - 0x00de, 0x1904, 0xa92c, 0x080c, 0x9c37, 0x7003, 0x1300, 0x782c, - 0x080c, 0xaa2e, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, - 0x2058, 0xbaa0, 0x080c, 0xadb1, 0x11d8, 0x9286, 0x007e, 0x1128, - 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, - 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, - 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, - 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, - 0x6098, 0x700e, 0x00a8, 0x080c, 0xadb1, 0x1130, 0x7810, 0x2058, - 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181f, 0x2d04, - 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, - 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, - 0x080c, 0xa22d, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, - 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, - 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0xa9a6, 0x9186, - 0x0005, 0x0904, 0xa98f, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, - 0x0904, 0xa997, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, - 0x080c, 0xaa0b, 0x0005, 0x080c, 0xa9cc, 0x00d6, 0x0026, 0x792c, - 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0xa970, 0xa97b, 0xa972, - 0xa97b, 0xa977, 0xa970, 0xa970, 0xa97b, 0xa97b, 0xa97b, 0xa97b, - 0xa970, 0xa970, 0xa970, 0xa970, 0xa970, 0xa97b, 0xa970, 0xa97b, - 0x080c, 0x0dd5, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, - 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, - 0xa9c5, 0x080c, 0xa9cc, 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, 0xa22d, 0x00b6, 0x0036, 0x0046, 0x0056, - 0x0066, 0x080c, 0x9c82, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, - 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xadb1, 0x1118, - 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, 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, 0x9c82, 0x7003, 0x0100, 0x782c, - 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, - 0x080c, 0x9c2e, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, - 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, - 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0xa22d, 0x00e6, 0x2071, - 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8cc, - 0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, - 0x000e, 0x00ee, 0x0005, 0x080c, 0x9c79, 0x7003, 0x0100, 0x782c, - 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0021, - 0x60c3, 0x0000, 0x0804, 0xa22d, 0x00d6, 0x080c, 0xab07, 0xb810, - 0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, - 0x700a, 0x6880, 0x700e, 0x7013, 0x0819, 0x080c, 0xa21b, 0x721a, - 0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, - 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, - 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, - 0x002e, 0x080c, 0xa250, 0x080c, 0x8547, 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, 0xab07, 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, 0x19b2, 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, 0x080c, 0x9c37, 0x0016, 0x0026, 0x0096, - 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837, 0x2004, - 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, - 0x1904, 0xabac, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800, 0x607c, - 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, - 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9, 0x0004, - 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012, 0x8108, - 0x8210, 0x1f04, 0xab3d, 0x20a9, 0x0004, 0x2009, 0x1801, 0x2104, - 0x2012, 0x8108, 0x8210, 0x1f04, 0xab47, 0xa860, 0x20e0, 0xa85c, - 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001, 0x4002, - 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069, 0x0200, - 0x080c, 0xaaf2, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240, 0x2009, - 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, - 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, - 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x2009, - 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, - 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c, 0x73b0, - 0x0150, 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084, 0x1804, 0x9085, - 0x0029, 0x6016, 0x0010, 0x080c, 0xa22d, 0x080c, 0x8547, 0x00de, - 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240, 0x2001, - 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071, 0x0100, - 0x709b, 0x00ff, 0x00ee, 0x0804, 0xab22, 0x080c, 0x9c37, 0x0016, - 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x7003, - 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, - 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0, 0x9084, - 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061, 0x1800, - 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116, 0x2009, - 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2e10, - 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, - 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104, 0x2012, - 0x8108, 0x8210, 0x1f04, 0xabfe, 0x20a9, 0x0002, 0x2009, 0x1801, - 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac08, 0x00d6, 0x0016, - 0x2069, 0x0200, 0x080c, 0xaaf2, 0x001e, 0x00de, 0x2071, 0x0240, - 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104, 0x2012, - 0x8108, 0x8210, 0x1f04, 0xac1e, 0x2009, 0x0008, 0x4002, 0x8007, - 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008, 0x2012, - 0x8210, 0x1f04, 0xac2f, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x080c, 0xa22d, 0x080c, 0x8547, 0x00de, 0x009e, - 0x002e, 0x001e, 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, 0xa878, - 0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, - 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, - 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x208e, 0x080c, - 0x912c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9790, 0x012e, 0x009e, - 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, - 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x760c, 0x2660, - 0x2678, 0x8cff, 0x0904, 0xad11, 0x7024, 0x9c06, 0x1520, 0x2069, - 0x0100, 0x68c0, 0x9005, 0x0904, 0xace8, 0x080c, 0xa259, 0x68c3, - 0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, - 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, - 0x9006, 0x080c, 0x2cef, 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, 0xcd10, 0x1158, - 0x080c, 0x31e1, 0x080c, 0xcd21, 0x11f0, 0x080c, 0xb7f9, 0x00d8, - 0x080c, 0xa7a2, 0x08c0, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, - 0x0090, 0x6014, 0x2048, 0x080c, 0xcb19, 0x0168, 0x6020, 0x9086, - 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, - 0x6c79, 0x080c, 0xcd04, 0x080c, 0xcf88, 0x080c, 0xae78, 0x080c, - 0xa678, 0x00ce, 0x0804, 0xac99, 0x2c78, 0x600c, 0x2060, 0x0804, - 0xac99, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, - 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, - 0x0006, 0x1d08, 0x080c, 0xe530, 0x08f0, 0x00d6, 0x0156, 0x080c, - 0x9c82, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, - 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, - 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, - 0x080c, 0x73b0, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6adc, 0xd29c, - 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c, 0x85b0, 0x20a9, - 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071, 0x0250, 0x2305, - 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, - 0x0002, 0x1f04, 0xad57, 0x60c3, 0x0020, 0x080c, 0xa22d, 0x015e, - 0x00de, 0x0005, 0x0156, 0x080c, 0x9c82, 0x7a14, 0x82ff, 0x0168, - 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, - 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, - 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204, 0x8007, 0x701a, - 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, - 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022, 0x2001, 0x1820, - 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, - 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, - 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, - 0xa22d, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x000e, 0x0005, - 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c, 0xa643, - 0x080c, 0xa526, 0x0036, 0x901e, 0x080c, 0xa59c, 0x003e, 0x0005, - 0x080c, 0x3317, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, - 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6600, 0xb85c, 0xc0ac, - 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188d, 0x7000, - 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800, 0x7076, 0x707a, - 0x706b, 0xffe0, 0x2071, 0x1800, 0x7074, 0x7056, 0x705b, 0x1cd0, - 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, - 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, - 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, - 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, - 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, - 0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, - 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, + 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, 0xcd2a, 0x1158, 0x080c, + 0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c, 0xb813, 0x00d8, 0x080c, + 0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0090, + 0x6014, 0x2048, 0x080c, 0xcb33, 0x0168, 0x6020, 0x9086, 0x0003, + 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75, + 0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c, 0xae92, 0x080c, 0xa692, + 0x00ce, 0x0804, 0xa818, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa818, + 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, + 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe551, + 0x0c08, 0x00d6, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7007, 0x0014, + 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, + 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, + 0x7878, 0x080c, 0xa247, 0x00de, 0x0005, 0x080c, 0x9cab, 0x700b, + 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, + 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, + 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, + 0xa247, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, + 0x080c, 0xd1a8, 0x00de, 0x1904, 0xa946, 0x080c, 0x9c60, 0x7003, + 0x1300, 0x782c, 0x080c, 0xaa48, 0x2068, 0x6820, 0x9086, 0x0003, + 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xadcb, 0x11d8, 0x9286, + 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, + 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, + 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, + 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, + 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xadcb, 0x1130, + 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, + 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, + 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, + 0x001e, 0x00de, 0x080c, 0xa247, 0x00be, 0x0005, 0x781b, 0x0001, + 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, + 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, + 0xa9c0, 0x9186, 0x0005, 0x0904, 0xa9a9, 0x9186, 0x0004, 0x05d8, + 0x9186, 0x0008, 0x0904, 0xa9b1, 0x7807, 0x0037, 0x782f, 0x0003, + 0x7817, 0x1700, 0x080c, 0xaa25, 0x0005, 0x080c, 0xa9e6, 0x00d6, + 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0xa98a, + 0xa995, 0xa98c, 0xa995, 0xa991, 0xa98a, 0xa98a, 0xa995, 0xa995, + 0xa995, 0xa995, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa995, + 0xa98a, 0xa995, 0x080c, 0x0dd5, 0x6824, 0xd0e4, 0x0110, 0xd0cc, + 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, + 0x7026, 0x0804, 0xa9df, 0x080c, 0xa9e6, 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, 0xa247, 0x00b6, 0x0036, + 0x0046, 0x0056, 0x0066, 0x080c, 0x9cab, 0x9006, 0x7003, 0x0200, + 0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, + 0xadcb, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, + 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, 0x9cab, 0x7003, + 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, + 0x0804, 0xa247, 0x080c, 0x9c57, 0x7003, 0x1400, 0x7838, 0x700a, + 0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, + 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0xa247, + 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, + 0x2058, 0xb8cc, 0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, + 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, 0x9ca2, 0x7003, + 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, + 0xa247, 0x0021, 0x60c3, 0x0000, 0x0804, 0xa247, 0x00d6, 0x080c, + 0xab21, 0xb810, 0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, + 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0819, 0x080c, + 0xa235, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, + 0x00de, 0x0005, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, + 0x9575, 0x0026, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, + 0xc0c5, 0x2012, 0x002e, 0x080c, 0xa26a, 0x080c, 0x8570, 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, 0xab21, 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, + 0x19b2, 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, 0x080c, 0x9c60, 0x0016, + 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, + 0x1837, 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, + 0x9086, 0xaaaa, 0x1904, 0xabc6, 0x7003, 0x5400, 0x00c6, 0x2061, + 0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, + 0x9105, 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, + 0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, + 0x2012, 0x8108, 0x8210, 0x1f04, 0xab57, 0x20a9, 0x0004, 0x2009, + 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xab61, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, + 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, + 0x2069, 0x0200, 0x080c, 0xab0c, 0x00de, 0x2071, 0x0240, 0x2011, + 0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, + 0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, + 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, + 0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, + 0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, + 0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, + 0x080c, 0x73bc, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084, + 0x1804, 0x9085, 0x0029, 0x6016, 0x0010, 0x080c, 0xa247, 0x080c, + 0x8570, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, + 0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, + 0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xab3c, 0x080c, + 0x9c60, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, + 0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, + 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, + 0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, + 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, + 0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, + 0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, + 0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, + 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac18, 0x20a9, 0x0002, + 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac22, + 0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, 0xab0c, 0x001e, 0x00de, + 0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, + 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac38, 0x2009, 0x0008, + 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, + 0x0008, 0x2012, 0x8210, 0x1f04, 0xac49, 0x00ce, 0x60c3, 0x004c, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa247, 0x080c, 0x8570, + 0x00de, 0x009e, 0x002e, 0x001e, 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, 0xa878, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, + 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, + 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, + 0x208e, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9, + 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, + 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, + 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0xad2b, 0x7024, 0x9c06, + 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xad02, 0x080c, + 0xa273, 0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, + 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 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, + 0xcd2a, 0x1158, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c, + 0xb813, 0x00d8, 0x080c, 0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118, + 0x080c, 0xb813, 0x0090, 0x6014, 0x2048, 0x080c, 0xcb33, 0x0168, + 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c, + 0xae92, 0x080c, 0xa692, 0x00ce, 0x0804, 0xacb3, 0x2c78, 0x600c, + 0x2060, 0x0804, 0xacb3, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, + 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe551, 0x08f0, 0x00d6, + 0x0156, 0x080c, 0x9cab, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, + 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, + 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, + 0xc38d, 0x0060, 0x080c, 0x73bc, 0x1110, 0xc3ad, 0x0008, 0xc3a5, + 0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c, + 0x85d9, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071, + 0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, + 0x0002, 0x9290, 0x0002, 0x1f04, 0xad71, 0x60c3, 0x0020, 0x080c, + 0xa247, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9cab, 0x7a14, + 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, + 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, + 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204, + 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, + 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022, + 0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004, + 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, + 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, + 0x015e, 0x0804, 0xa247, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac, + 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, + 0x080c, 0xa65d, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6, + 0x003e, 0x0005, 0x080c, 0x331e, 0x0188, 0x0016, 0x00b6, 0x00c6, + 0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x65ff, + 0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, + 0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800, + 0x7076, 0x707a, 0x706b, 0xffe0, 0x2071, 0x1800, 0x7074, 0x7056, + 0x705b, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, + 0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, - 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1228, 0x755a, 0x9085, 0x0001, - 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, - 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, - 0x0dd5, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, - 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, - 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x602a, - 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x9086, 0x0001, 0x0108, - 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e, 0x0cc0, - 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, - 0x1a5e, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, - 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, - 0xe7ea, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, - 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058, + 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, + 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, + 0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, - 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a, - 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0, - 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xaed5, 0xaede, - 0xaef9, 0xaf14, 0xd23c, 0xd259, 0xd274, 0xaed5, 0xaede, 0x8d62, - 0xaf30, 0xaed5, 0xaed5, 0xaed5, 0xaed5, 0x9186, 0x0013, 0x1128, - 0x080c, 0x955f, 0x080c, 0x9664, 0x0005, 0x0005, 0x0066, 0x6000, - 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e, 0x0005, 0xaef7, - 0xb665, 0xb840, 0xaef7, 0xb8d6, 0xb213, 0xaef7, 0xaef7, 0xb5e7, - 0xbe3b, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0x080c, - 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, - 0x006e, 0x0005, 0xaf12, 0xc50f, 0xaf12, 0xaf12, 0xaf12, 0xaf12, - 0xaf12, 0xaf12, 0xc4b4, 0xc691, 0xaf12, 0xc550, 0xc5cf, 0xc550, - 0xc5cf, 0xaf12, 0x080c, 0x0dd5, 0x6000, 0x9082, 0x0016, 0x1a0c, - 0x0dd5, 0x6000, 0x0002, 0xaf2e, 0xbe82, 0xbf67, 0xc097, 0xc242, - 0xaf2e, 0xaf2e, 0xaf2e, 0xbe56, 0xc440, 0xc443, 0xaf2e, 0xaf2e, - 0xaf2e, 0xaf2e, 0xc472, 0xaf2e, 0xaf2e, 0xaf2e, 0x080c, 0x0dd5, + 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1228, 0x755a, + 0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc8, 0x9006, + 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004, + 0x9c02, 0x1a0c, 0x0dd5, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, + 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056, + 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, + 0x6042, 0x602a, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x9086, + 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, + 0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, + 0xd084, 0x190c, 0x1a5e, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, + 0x1986, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, + 0x601a, 0x080c, 0xe80b, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, + 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, + 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, + 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, + 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, + 0xaeef, 0xaef8, 0xaf13, 0xaf2e, 0xd256, 0xd273, 0xd28e, 0xaeef, + 0xaef8, 0x8d8b, 0xaf4a, 0xaeef, 0xaeef, 0xaeef, 0xaeef, 0x9186, + 0x0013, 0x1128, 0x080c, 0x9588, 0x080c, 0x968d, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e, - 0x0005, 0xaf49, 0xaf49, 0xaf8c, 0xb02b, 0xb0c0, 0xaf49, 0xaf49, - 0xaf49, 0xaf4b, 0xaf49, 0xaf49, 0xaf49, 0xaf49, 0xaf49, 0xaf49, - 0xaf49, 0x080c, 0x0dd5, 0x9186, 0x004c, 0x0588, 0x9186, 0x0003, - 0x190c, 0x0dd5, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, - 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, - 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, 0xa83a, 0xa884, - 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, - 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x912c, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9790, 0x012e, 0x0005, 0x6010, - 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xb0e2, 0x080c, - 0xd22e, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, - 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, - 0x0018, 0xac78, 0xc4fc, 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, 0xaff3, 0xaff3, - 0xafee, 0xaff1, 0xaff3, 0xafeb, 0xafde, 0xafde, 0xafde, 0xafde, - 0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, - 0x00de, 0x080c, 0x0dd5, 0x080c, 0xba93, 0x0028, 0x080c, 0xbb78, - 0x0010, 0x080c, 0xbc6e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, - 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb1a0, 0x0530, 0xa804, - 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, - 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x125d, 0x080c, 0xb360, - 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, - 0x00fe, 0x009e, 0x00de, 0x0804, 0xae47, 0x2001, 0x002c, 0x900e, - 0x080c, 0xb206, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, - 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0dd5, 0x91b2, 0x0050, 0x1a0c, - 0x0dd5, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, - 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, - 0x9079, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, - 0x0002, 0x1110, 0x0804, 0xaf8c, 0x0005, 0xb05e, 0xb05e, 0xb060, - 0xb096, 0xb05e, 0xb05e, 0xb05e, 0xb05e, 0xb0a9, 0x080c, 0x0dd5, - 0x00d6, 0x0016, 0x0096, 0x080c, 0x9614, 0x080c, 0x9790, 0x6003, - 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, - 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, - 0x080c, 0xb206, 0x080c, 0xae47, 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, 0x9614, - 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b, - 0x0006, 0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x0804, - 0x9790, 0x080c, 0x9614, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x00d6, - 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b, 0x0029, - 0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x0804, 0x9790, - 0x9182, 0x0047, 0x0002, 0xb0d0, 0xb0d2, 0xb0d0, 0xb0d0, 0xb0d0, - 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d2, - 0x080c, 0x0dd5, 0x00d6, 0x0096, 0x601f, 0x0000, 0x6114, 0x2148, - 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6c79, 0x009e, 0x00de, - 0x0804, 0xae47, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, - 0x00f6, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xa960, - 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, - 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188, 0x0018, 0x918c, - 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, - 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011, - 0x001f, 0x080c, 0xc716, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, - 0x001f, 0x080c, 0xc716, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, - 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x01d0, 0x8528, 0xa867, 0x0110, - 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, - 0x2011, 0x001b, 0x080c, 0xc716, 0x00b8, 0x96b2, 0x003c, 0x2009, - 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc716, 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, 0x6c79, 0x000e, 0x2048, 0x9005, 0x1db0, - 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, - 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c, - 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, - 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990, - 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, 0x6c79, 0x009e, 0x00fe, 0x00de, 0x0005, - 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, - 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, - 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, - 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, - 0x1170, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e, 0x05c0, 0xa806, - 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, - 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, - 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, - 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, - 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, - 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, - 0x84ff, 0x0904, 0xb1b5, 0x0804, 0xb1b7, 0x9085, 0x0001, 0x7817, - 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, - 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6c6d, 0x009e, - 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0xae47, - 0x0030, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x080c, 0xae47, 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, 0xcb1b, 0x0130, 0x6014, - 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0xae47, - 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, - 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, - 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0xae47, - 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, - 0x0016, 0x080c, 0xd216, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, - 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022, 0x080c, - 0xb63d, 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, - 0xae47, 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, 0xc716, 0x080c, - 0xcb1b, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, - 0xa867, 0x0103, 0x080c, 0xae47, 0x001e, 0x009e, 0x0005, 0x0016, - 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, 0x2009, 0x0001, - 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa97a, 0x080c, 0x6c79, - 0x009e, 0x080c, 0xae47, 0x001e, 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, 0xc716, 0x009e, 0x080c, - 0xcb1b, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, - 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae47, 0x009e, 0x001e, 0x0005, - 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, - 0xb7f9, 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, 0x1243, 0x0019, 0x0d08, 0x008e, 0x0898, - 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, - 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, - 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, - 0x10e9, 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, 0xd18e, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, - 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, - 0x080c, 0xae47, 0x0020, 0x0039, 0x0010, 0x080c, 0xb472, 0x002e, - 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, - 0x0904, 0xb45a, 0x918e, 0x0016, 0x1904, 0xb470, 0x700c, 0x908c, - 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0xb434, - 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0xb417, 0x0804, - 0xb46e, 0x6808, 0x9086, 0xffff, 0x1904, 0xb45c, 0xa87c, 0x9084, - 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, - 0xb45c, 0x6824, 0xd0b4, 0x1904, 0xb45c, 0x080c, 0xcd04, 0x685c, - 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, - 0x6a18, 0x2001, 0x000a, 0x080c, 0x8f3f, 0xa884, 0x920a, 0x0208, - 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, - 0xc840, 0x00ce, 0x0804, 0xb46e, 0x00c6, 0xa868, 0xd0fc, 0x1118, - 0x080c, 0x60af, 0x0010, 0x080c, 0x64b5, 0x00ce, 0x1904, 0xb45c, - 0x00c6, 0x2d60, 0x080c, 0xae47, 0x00ce, 0x0804, 0xb46e, 0x00c6, - 0x080c, 0xae95, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, - 0xcf90, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xae47, - 0x00ce, 0x080c, 0xaec2, 0x00ce, 0x0804, 0xb46e, 0x2001, 0x1988, - 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8, - 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, - 0x2d60, 0xa87b, 0x0003, 0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce, - 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1988, 0x2004, - 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0dd5, 0x00c6, - 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6a95, - 0x080c, 0xcd04, 0x080c, 0xae78, 0x00de, 0x00ce, 0x080c, 0xae47, - 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1988, 0x2004, - 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, - 0x080c, 0xe7ea, 0x080c, 0x8689, 0x080c, 0xae47, 0x00ce, 0x080c, - 0xae47, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, - 0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x6842, 0x0804, 0xb4ec, - 0x00c6, 0x2d60, 0x080c, 0xc741, 0x00ce, 0x6804, 0x9086, 0x0050, - 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, - 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce, 0x04f0, 0x6800, 0x9086, - 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dd5, 0x6800, 0x9086, 0x0004, - 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, - 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, - 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, - 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, - 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, - 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, - 0xce87, 0x080c, 0x9664, 0x0010, 0x080c, 0xae47, 0x004e, 0x003e, - 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, - 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xb557, - 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, - 0xb557, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, - 0x0007, 0x0904, 0xb557, 0x9286, 0x0002, 0x0904, 0xb557, 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, 0xcb1b, 0x090c, 0x0dd5, - 0xa87b, 0x0003, 0x009e, 0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce, - 0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004, 0x7042, 0x080c, - 0xae47, 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, 0xbe03, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xb5c6, - 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, - 0x0006, 0x20a9, 0x0004, 0x080c, 0xbe03, 0x002e, 0x003e, 0x015e, - 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, - 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, - 0xb24b, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, + 0x0005, 0xaf11, 0xb67f, 0xb85a, 0xaf11, 0xb8f0, 0xb22d, 0xaf11, + 0xaf11, 0xb601, 0xbe55, 0xaf11, 0xaf11, 0xaf11, 0xaf11, 0xaf11, + 0xaf11, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, + 0x0dd5, 0x0013, 0x006e, 0x0005, 0xaf2c, 0xc529, 0xaf2c, 0xaf2c, + 0xaf2c, 0xaf2c, 0xaf2c, 0xaf2c, 0xc4ce, 0xc6ab, 0xaf2c, 0xc56a, + 0xc5e9, 0xc56a, 0xc5e9, 0xaf2c, 0x080c, 0x0dd5, 0x6000, 0x9082, + 0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x0002, 0xaf48, 0xbe9c, 0xbf81, + 0xc0b1, 0xc25c, 0xaf48, 0xaf48, 0xaf48, 0xbe70, 0xc45a, 0xc45d, + 0xaf48, 0xaf48, 0xaf48, 0xaf48, 0xc48c, 0xaf48, 0xaf48, 0xaf48, + 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, + 0x0013, 0x006e, 0x0005, 0xaf63, 0xaf63, 0xafa6, 0xb045, 0xb0da, + 0xaf63, 0xaf63, 0xaf63, 0xaf65, 0xaf63, 0xaf63, 0xaf63, 0xaf63, + 0xaf63, 0xaf63, 0xaf63, 0x080c, 0x0dd5, 0x9186, 0x004c, 0x0588, + 0x9186, 0x0003, 0x190c, 0x0dd5, 0x0096, 0x601c, 0xc0ed, 0x601e, + 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, + 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, + 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, + 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1bad, + 0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9, 0x012e, + 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, + 0xb0fc, 0x080c, 0xd248, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, + 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, + 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 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, + 0xb00d, 0xb00d, 0xb008, 0xb00b, 0xb00d, 0xb005, 0xaff8, 0xaff8, + 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, + 0x00fe, 0x009e, 0x00de, 0x080c, 0x0dd5, 0x080c, 0xbaad, 0x0028, + 0x080c, 0xbb92, 0x0010, 0x080c, 0xbc88, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb1ba, + 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x1243, 0x080c, 0xb360, 0x0130, 0x00fe, 0x009e, 0x080c, - 0xae47, 0x00be, 0x0005, 0x080c, 0xb7f9, 0x0cb8, 0x2b78, 0x00f6, - 0x080c, 0x31bc, 0x080c, 0xd22b, 0x00fe, 0x00c6, 0x080c, 0xadf1, - 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, - 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6550, 0x080c, 0x657c, - 0x080c, 0x910f, 0x080c, 0x9664, 0x00ce, 0x0804, 0xb599, 0x2100, - 0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b2, 0x0040, 0x1a04, 0xb64f, - 0x0002, 0xb63d, 0xb63d, 0xb633, 0xb63d, 0xb63d, 0xb63d, 0xb631, - 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, - 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, - 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, - 0xb63d, 0xb631, 0xb63d, 0xb63d, 0xb631, 0xb631, 0xb631, 0xb631, - 0xb631, 0xb633, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, - 0xb631, 0xb631, 0xb631, 0xb63d, 0xb63d, 0xb631, 0xb631, 0xb631, - 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb63d, 0xb631, - 0xb631, 0x080c, 0x0dd5, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8cc, - 0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, - 0x9186, 0x0032, 0x0118, 0x080c, 0x910f, 0x0010, 0x080c, 0x90c7, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e, 0x0005, 0x2600, - 0x0002, 0xb63d, 0xb63d, 0xb663, 0xb63d, 0xb63d, 0xb663, 0xb663, - 0xb663, 0xb663, 0xb63d, 0xb663, 0xb63d, 0xb663, 0xb63d, 0xb663, - 0xb663, 0xb663, 0xb663, 0x080c, 0x0dd5, 0x6004, 0x90b2, 0x0053, - 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x0904, 0xb727, 0x91b6, 0x0027, - 0x1904, 0xb6e2, 0x080c, 0x955f, 0x6004, 0x080c, 0xcd10, 0x01b0, - 0x080c, 0xcd21, 0x01a8, 0x908e, 0x0021, 0x0904, 0xb6df, 0x908e, - 0x0022, 0x1130, 0x080c, 0xb277, 0x0904, 0xb6db, 0x0804, 0xb6dc, - 0x908e, 0x003d, 0x0904, 0xb6df, 0x0804, 0xb6d5, 0x080c, 0x31e1, - 0x2001, 0x0007, 0x080c, 0x6550, 0x6010, 0x00b6, 0x2058, 0xb9a0, - 0x00be, 0x080c, 0xb7f9, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837, - 0x2014, 0xc285, 0x080c, 0x73b0, 0x1108, 0xc2ad, 0x2202, 0x0036, - 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe8f6, 0x002e, 0x003e, - 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x9262, - 0x0076, 0x903e, 0x080c, 0x913f, 0x6010, 0x00b6, 0x905d, 0x0100, - 0x00be, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x003e, 0x002e, 0x001e, - 0x080c, 0xd22b, 0x0016, 0x080c, 0xcf88, 0x080c, 0xae47, 0x001e, - 0x080c, 0x32b4, 0x080c, 0x9664, 0x0030, 0x080c, 0xcf88, 0x080c, - 0xae47, 0x080c, 0x9664, 0x0005, 0x080c, 0xb7f9, 0x0cb0, 0x080c, - 0xb835, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c, 0x955f, 0x6004, - 0x908e, 0x0022, 0x1118, 0x080c, 0xb277, 0x0d68, 0x080c, 0x31bc, - 0x080c, 0xd22b, 0x080c, 0xcd10, 0x1190, 0x080c, 0x31e1, 0x6010, - 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb7f9, 0x9186, 0x007e, - 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, 0x0870, 0x080c, - 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0840, 0x6004, 0x908e, 0x0032, - 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, - 0x354f, 0x00fe, 0x00ee, 0x0804, 0xb6d5, 0x6004, 0x908e, 0x0021, - 0x0d48, 0x908e, 0x0022, 0x090c, 0xb7f9, 0x0804, 0xb6d5, 0x90b2, - 0x0040, 0x1a04, 0xb7d5, 0x2008, 0x0002, 0xb76f, 0xb770, 0xb773, - 0xb776, 0xb779, 0xb77c, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, - 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, - 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, - 0xb76d, 0xb76d, 0xb76d, 0xb77f, 0xb78a, 0xb76d, 0xb78c, 0xb78a, - 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb78a, 0xb78a, 0xb76d, - 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb7bc, - 0xb78a, 0xb76d, 0xb786, 0xb76d, 0xb76d, 0xb76d, 0xb787, 0xb76d, - 0xb76d, 0xb76d, 0xb78a, 0xb7b3, 0xb76d, 0x080c, 0x0dd5, 0x00d0, - 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8, 0x2001, 0x0005, - 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, - 0x955f, 0x6003, 0x0005, 0x080c, 0x9664, 0x0070, 0x0018, 0x0010, - 0x080c, 0x6550, 0x0804, 0xb7cd, 0x080c, 0x955f, 0x080c, 0xd22e, - 0x6003, 0x0004, 0x080c, 0x9664, 0x0005, 0x080c, 0x6550, 0x080c, - 0x955f, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084, - 0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a, - 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, - 0x080c, 0x9664, 0x0c08, 0x080c, 0x955f, 0x080c, 0xcf88, 0x080c, - 0xae47, 0x080c, 0x9664, 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189e, - 0x2079, 0x0000, 0x080c, 0x354f, 0x00fe, 0x00ee, 0x080c, 0x955f, - 0x080c, 0xae47, 0x080c, 0x9664, 0x0838, 0x080c, 0x955f, 0x6003, - 0x0002, 0x080c, 0xd22e, 0x0804, 0x9664, 0x2600, 0x2008, 0x0002, - 0xb7ec, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7cd, 0xb7ea, 0xb7ea, 0xb7ea, - 0xb7ea, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7ea, 0xb7ea, - 0xb7ea, 0xb7ea, 0x080c, 0x0dd5, 0x080c, 0x955f, 0x0096, 0x6014, - 0x2048, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae47, 0x080c, 0x9664, - 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xcb1b, 0x0568, - 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, - 0x0056, 0x1148, 0x080c, 0x5479, 0x0130, 0x2001, 0x0000, 0x900e, - 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, - 0x080c, 0xd0f5, 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, 0x0dd5, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xd014, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xd05d, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xd089, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xcfaa, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xcd5a, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xcd9b, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x001f, 0x1120, 0x080c, 0xb220, - 0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xb55d, - 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xb258, 0x04a8, - 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb37e, 0x0470, 0x6604, - 0x96b6, 0x0039, 0x1118, 0x080c, 0xb4f2, 0x0438, 0x6604, 0x96b6, - 0x003d, 0x1118, 0x080c, 0xb290, 0x0400, 0x6604, 0x96b6, 0x0044, - 0x1118, 0x080c, 0xb2cc, 0x00c8, 0x6604, 0x96b6, 0x0049, 0x1118, - 0x080c, 0xb30d, 0x0090, 0x6604, 0x96b6, 0x0041, 0x1118, 0x080c, - 0xb2f7, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, - 0x0016, 0x1128, 0x00be, 0x0804, 0xbb1f, 0x00be, 0x0005, 0x080c, - 0xaedd, 0x0cd8, 0xb8e2, 0xb8e5, 0xb8e2, 0xb92c, 0xb8e2, 0xba93, - 0xbb2c, 0xb8e2, 0xb8e2, 0xbaf5, 0xb8e2, 0xbb0b, 0x0096, 0x601f, - 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, - 0x0804, 0xae47, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, - 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe29b, 0x11b0, 0x6010, - 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, - 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6550, - 0x080c, 0x31e1, 0x080c, 0xae47, 0x0098, 0x2001, 0x000a, 0x080c, - 0x6550, 0x080c, 0x31e1, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, - 0x910f, 0x080c, 0x9664, 0x0020, 0x2001, 0x0001, 0x080c, 0xba63, - 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, - 0x653c, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, - 0x080c, 0x657c, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, - 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xba3a, 0x6010, 0x2058, - 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xbc79, 0x0804, 0xb99e, - 0x080c, 0xbc6e, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, - 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, - 0xd0f5, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, - 0x2001, 0x0006, 0x080c, 0x6550, 0x080c, 0x31e1, 0x080c, 0xae47, - 0x0804, 0xba3d, 0x080c, 0xba4b, 0x6014, 0x9005, 0x0190, 0x2048, - 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd0f5, - 0x08f8, 0x080c, 0xba41, 0x0160, 0x9006, 0x080c, 0x653c, 0x2001, - 0x0004, 0x080c, 0x657c, 0x2001, 0x0007, 0x080c, 0x6550, 0x08a0, - 0x2001, 0x0004, 0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0003, - 0x080c, 0x910f, 0x080c, 0x9664, 0x0804, 0xba3d, 0xb85c, 0xd0e4, - 0x01d8, 0x080c, 0xcf2a, 0x080c, 0x73b0, 0x0118, 0xd0dc, 0x1904, - 0xb960, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x196d, - 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x28b2, - 0x78e2, 0x00fe, 0x0804, 0xb960, 0x080c, 0xcf67, 0x2011, 0x1837, - 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe420, 0x000e, 0x1904, - 0xb960, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6550, 0x9006, - 0x080c, 0x653c, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, - 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, - 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, 0x908c, 0x00ff, - 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2887, 0x00f6, - 0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, 0x9186, 0x0081, - 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, - 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, - 0x080c, 0x2887, 0x00f6, 0x2079, 0x1800, 0x7982, 0x2100, 0x900e, - 0x080c, 0x283e, 0x795e, 0x00fe, 0x8108, 0x080c, 0x659f, 0x2b00, - 0x00ce, 0x1904, 0xb960, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, - 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, - 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x6550, 0x6023, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, - 0x9664, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be, - 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848, - 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe94f, 0x0190, 0x2071, - 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, - 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, - 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007, - 0x080c, 0x6550, 0x080c, 0x56e4, 0x1120, 0x2001, 0x0007, 0x080c, - 0x657c, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868, - 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, - 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b05, - 0x004e, 0x003e, 0x080c, 0x31e1, 0x6020, 0x9086, 0x000a, 0x1108, - 0x0005, 0x0804, 0xae47, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, - 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xbaeb, 0x080c, 0x56e4, - 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, - 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x00d6, - 0x6010, 0x2058, 0x080c, 0x669b, 0x080c, 0xb91a, 0x00de, 0x080c, - 0xbd3f, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, - 0x0006, 0x080c, 0x6550, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, - 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, - 0x2011, 0x4000, 0x080c, 0xd0f5, 0x0060, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, - 0x0200, 0x009e, 0x080c, 0x31e1, 0x6020, 0x9086, 0x000a, 0x0140, - 0x080c, 0xae47, 0x0028, 0x080c, 0xb7f9, 0x9006, 0x080c, 0xba63, - 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1824, 0x2204, - 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6550, 0x6003, - 0x0001, 0x6007, 0x0001, 0x080c, 0x910f, 0x0804, 0x9664, 0x2001, - 0x0001, 0x0804, 0xba63, 0x2030, 0x2011, 0x1824, 0x2204, 0x9086, - 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, - 0x6550, 0x0804, 0xae47, 0x2001, 0x0001, 0x0804, 0xba63, 0x0002, - 0xb8e2, 0xbb37, 0xb8e2, 0xbb78, 0xb8e2, 0xbc25, 0xbb2c, 0xb8e2, - 0xb8e2, 0xbc39, 0xb8e2, 0xbc4b, 0x6604, 0x9686, 0x0003, 0x0904, - 0xba93, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae47, 0x0005, 0x00b6, - 0x00d6, 0x00c6, 0x080c, 0xbc5d, 0x11a0, 0x9006, 0x080c, 0x653c, - 0x080c, 0x31bc, 0x080c, 0xd22b, 0x2001, 0x0002, 0x080c, 0x6550, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, 0x9664, - 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, - 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001, 0xb842, - 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, - 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31bc, 0x080c, 0xd22b, - 0x2001, 0x0001, 0x080c, 0xba63, 0x00ce, 0x00de, 0x00be, 0x0005, - 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xbc6b, 0x00d6, 0x2069, - 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, - 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a, 0x00de, - 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002, - 0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, - 0x080c, 0x9664, 0x0804, 0xbbf5, 0x080c, 0xcb1b, 0x01b0, 0x6014, - 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, - 0x2001, 0x0002, 0x080c, 0xd14f, 0x00b0, 0x6014, 0x2048, 0xa864, - 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, - 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, - 0x1110, 0x9006, 0x0c38, 0x080c, 0xb7f9, 0x2009, 0x026e, 0x2134, - 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b, 0x01c8, - 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, - 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190, 0x2001, - 0x0004, 0x080c, 0x6550, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, - 0x0020, 0x2001, 0x0001, 0x080c, 0xba63, 0x002e, 0x00be, 0x009e, - 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xcb1b, - 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, - 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, - 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, - 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fae, - 0x00ee, 0x0010, 0x080c, 0x31bc, 0x0860, 0x080c, 0xbc6b, 0x1160, - 0x2001, 0x0004, 0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0003, - 0x080c, 0x910f, 0x0804, 0x9664, 0x080c, 0xb7f9, 0x9006, 0x0804, - 0xba63, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x6550, 0x6003, - 0x0001, 0x6007, 0x0005, 0x080c, 0x910f, 0x0804, 0x9664, 0x2001, - 0x0001, 0x0804, 0xba63, 0x00f9, 0x1160, 0x2001, 0x000a, 0x080c, - 0x6550, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x910f, 0x0804, - 0x9664, 0x2001, 0x0001, 0x0804, 0xba63, 0x2009, 0x026e, 0x2104, - 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, - 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, - 0x0016, 0x6110, 0x2158, 0x080c, 0x660f, 0x001e, 0x00ce, 0x00be, - 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, - 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, - 0xbd11, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a, 0x080c, - 0x6966, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe58d, - 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, - 0x0001, 0x080c, 0x3187, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2f96, - 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, - 0x32b4, 0x8108, 0x1f04, 0xbcaf, 0x015e, 0x00ce, 0x080c, 0xbc6e, - 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1837, - 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, - 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837, 0x2102, - 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181f, 0x206a, - 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820, 0x206a, 0x78ea, - 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, - 0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2887, - 0x080c, 0x73b0, 0x0170, 0x2071, 0x0260, 0x2069, 0x1982, 0x7048, - 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, - 0xcf2a, 0x0040, 0x2001, 0x0006, 0x080c, 0x6550, 0x080c, 0x31e1, - 0x080c, 0xae47, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, - 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182c, - 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, - 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, - 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x1148, - 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xbe03, - 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, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, - 0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04, 0xbdcf, 0x080c, - 0x8958, 0x0904, 0xbdc8, 0x080c, 0xe5be, 0x0904, 0xbdc8, 0x6720, - 0x9786, 0x0007, 0x0904, 0xbdc8, 0x2500, 0x9c06, 0x0904, 0xbdc8, - 0x2400, 0x9c06, 0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, - 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, - 0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1a5e, 0x9786, - 0x000a, 0x0148, 0x080c, 0xcd21, 0x1130, 0x00ce, 0x080c, 0xb7f9, - 0x080c, 0xae78, 0x00e8, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01a8, - 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a, 0xa877, - 0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04, 0x080c, 0xae78, 0x00ce, - 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1210, 0x0804, 0xbd72, 0x012e, - 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, - 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xe530, 0x0c30, 0x9786, - 0x0009, 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, - 0x080c, 0xaec2, 0x08e0, 0x9786, 0x000a, 0x0938, 0x0820, 0x220c, - 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbdef, 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, 0x220c, 0x810f, 0x2304, - 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbe2d, 0x9006, 0x0005, - 0x918d, 0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, - 0x080c, 0xcd10, 0x0120, 0x080c, 0xcd21, 0x0168, 0x0028, 0x080c, - 0x31e1, 0x080c, 0xcd21, 0x0138, 0x080c, 0x955f, 0x080c, 0xae47, - 0x080c, 0x9664, 0x0005, 0x080c, 0xb7f9, 0x0cb0, 0x9182, 0x0054, - 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbe72, 0xbe72, - 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, - 0xbe72, 0xbe74, 0xbe74, 0xbe74, 0xbe74, 0xbe72, 0xbe72, 0xbe72, - 0xbe74, 0xbe72, 0x080c, 0x0dd5, 0x600b, 0xffff, 0x6003, 0x0001, - 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, - 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, - 0x0804, 0xbf29, 0x9186, 0x0027, 0x1520, 0x080c, 0x955f, 0x080c, - 0x31bc, 0x080c, 0xd22b, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, - 0x0198, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0068, 0xa867, - 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, - 0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae47, 0x0804, - 0x9664, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x04a0, - 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, - 0x0120, 0x9186, 0x0048, 0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, - 0xd084, 0x0508, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, - 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19e7, 0x2071, 0x1800, - 0x2061, 0x0100, 0x080c, 0x8fac, 0x00ce, 0x00ee, 0x00fe, 0x003e, - 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, - 0x1110, 0x0804, 0xbf67, 0x0005, 0x0002, 0xbf03, 0xbf01, 0xbf01, - 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, - 0xbf1e, 0xbf1e, 0xbf1e, 0xbf1e, 0xbf01, 0xbf1e, 0xbf01, 0xbf1e, - 0xbf01, 0x080c, 0x0dd5, 0x080c, 0x955f, 0x0096, 0x6114, 0x2148, - 0x080c, 0xcb1b, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, - 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6c79, 0x080c, 0xcd04, - 0x009e, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x080c, 0x955f, - 0x080c, 0xcd21, 0x090c, 0xb7f9, 0x080c, 0xae47, 0x080c, 0x9664, - 0x0005, 0x0002, 0xbf40, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, - 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf57, 0xbf57, 0xbf57, - 0xbf57, 0xbf3e, 0xbf61, 0xbf3e, 0xbf57, 0xbf3e, 0x080c, 0x0dd5, - 0x0096, 0x080c, 0x955f, 0x6014, 0x2048, 0x2001, 0x1988, 0x2004, - 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa87c, 0x9085, - 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8, 0x080c, - 0x955f, 0x080c, 0xd22e, 0x080c, 0xd233, 0x6003, 0x000f, 0x0804, - 0x9664, 0x080c, 0x955f, 0x080c, 0xae47, 0x0804, 0x9664, 0x9182, - 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbf83, - 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf85, 0xc062, 0xbf83, 0xc096, - 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, - 0xbf83, 0xbf83, 0xc096, 0x080c, 0x0dd5, 0x00b6, 0x0096, 0x6114, - 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, 0x6010, 0x2058, - 0xb800, 0xd0bc, 0x1904, 0xc051, 0xa87b, 0x0000, 0xa867, 0x0103, - 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, - 0xc22b, 0x080c, 0x6a95, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, - 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc035, 0x080c, 0xae47, - 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, - 0xb800, 0xd0bc, 0x1904, 0xc039, 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, 0xbf8c, 0x735c, + 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x125d, + 0x080c, 0xb37a, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, + 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xae61, 0x2001, + 0x002c, 0x900e, 0x080c, 0xb220, 0x0c70, 0x91b6, 0x0015, 0x0170, + 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0dd5, 0x91b2, + 0x0050, 0x1a0c, 0x0dd5, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, + 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, + 0x0026, 0x080c, 0x90a2, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, + 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xafa6, 0x0005, 0xb078, + 0xb078, 0xb07a, 0xb0b0, 0xb078, 0xb078, 0xb078, 0xb078, 0xb0c3, + 0x080c, 0x0dd5, 0x00d6, 0x0016, 0x0096, 0x080c, 0x963d, 0x080c, + 0x97b9, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, + 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, + 0x0000, 0x900e, 0x080c, 0xb220, 0x080c, 0xae61, 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, 0x963d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35, + 0x0120, 0xa87b, 0x0006, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, + 0xae61, 0x0804, 0x97b9, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c, + 0xd245, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35, 0x0120, + 0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61, + 0x0804, 0x97b9, 0x9182, 0x0047, 0x0002, 0xb0ea, 0xb0ec, 0xb0ea, + 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, + 0xb0ea, 0xb0ec, 0x080c, 0x0dd5, 0x00d6, 0x0096, 0x601f, 0x0000, + 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6c81, + 0x009e, 0x00de, 0x0804, 0xae61, 0x0026, 0x0036, 0x0056, 0x0066, + 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c, + 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, + 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188, + 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, + 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, + 0x1228, 0x2011, 0x001f, 0x080c, 0xc730, 0x04c0, 0x2130, 0x2009, + 0x0034, 0x2011, 0x001f, 0x080c, 0xc730, 0x96b2, 0x0034, 0xb004, + 0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x01d0, 0x8528, + 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, + 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc730, 0x00b8, 0x96b2, + 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc730, + 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, 0x6c81, 0x000e, 0x2048, + 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, + 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0fff, + 0x000e, 0x090c, 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, + 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, + 0x1800, 0x7990, 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, 0x6c81, 0x009e, 0x00fe, + 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, + 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, + 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, + 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, + 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e, + 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, + 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, + 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, + 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, + 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, + 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, + 0x2e98, 0x2310, 0x84ff, 0x0904, 0xb1cf, 0x0804, 0xb1d1, 0x9085, + 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, + 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, + 0x6c75, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, + 0x080c, 0xae61, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x080c, + 0xae61, 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, 0xcb35, + 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, + 0x0804, 0xae61, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, + 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014, + 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, + 0x080c, 0xae61, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, + 0x0cc8, 0x0006, 0x0016, 0x080c, 0xd230, 0x0188, 0x6014, 0x9005, + 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, + 0x0022, 0x080c, 0xb657, 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, 0xae61, 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, + 0xc730, 0x080c, 0xcb35, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, + 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x001e, 0x009e, + 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, + 0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa97a, + 0x080c, 0x6c81, 0x009e, 0x080c, 0xae61, 0x001e, 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, 0xc730, + 0x009e, 0x080c, 0xcb35, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, + 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x009e, + 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, + 0x1118, 0x080c, 0xb813, 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, 0x1243, 0x0019, 0x0d08, + 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x01b0, + 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, + 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, + 0x2940, 0x080c, 0x10e9, 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, 0xd1a8, 0x001e, 0x1158, 0x622c, + 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, + 0x0006, 0x0128, 0x080c, 0xae61, 0x0020, 0x0039, 0x0010, 0x080c, + 0xb48c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, + 0x9186, 0x0015, 0x0904, 0xb474, 0x918e, 0x0016, 0x1904, 0xb48a, + 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, + 0x1904, 0xb44e, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, + 0xb431, 0x0804, 0xb488, 0x6808, 0x9086, 0xffff, 0x1904, 0xb476, + 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, + 0x9105, 0x1904, 0xb476, 0x6824, 0xd0b4, 0x1904, 0xb476, 0x080c, + 0xcd1e, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, + 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x8f68, 0xa884, + 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, + 0x2d60, 0x080c, 0xc85a, 0x00ce, 0x0804, 0xb488, 0x00c6, 0xa868, + 0xd0fc, 0x1118, 0x080c, 0x60ae, 0x0010, 0x080c, 0x64b4, 0x00ce, + 0x1904, 0xb476, 0x00c6, 0x2d60, 0x080c, 0xae61, 0x00ce, 0x0804, + 0xb488, 0x00c6, 0x080c, 0xaeaf, 0x0198, 0x6017, 0x0000, 0x6810, + 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, + 0x080c, 0xae61, 0x00ce, 0x080c, 0xaedc, 0x00ce, 0x0804, 0xb488, + 0x2001, 0x1988, 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086, + 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, + 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xd1ea, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c, + 0x968d, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, + 0x1988, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c, + 0x0dd5, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, + 0x080c, 0x6a9d, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00de, 0x00ce, + 0x080c, 0xae61, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, + 0x1988, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, + 0x2d00, 0x2060, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c, 0xae61, + 0x00ce, 0x080c, 0xae61, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, + 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x6842, + 0x0804, 0xb506, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x6804, + 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, + 0x6007, 0x0050, 0x080c, 0x90f0, 0x080c, 0x968d, 0x00ce, 0x04f0, + 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dd5, 0x6800, + 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, + 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, + 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, + 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, + 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, + 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, + 0x6832, 0x080c, 0xcea1, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, + 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, + 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, + 0x1904, 0xb571, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, + 0x9206, 0x1904, 0xb571, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, + 0x6a20, 0x9286, 0x0007, 0x0904, 0xb571, 0x9286, 0x0002, 0x0904, + 0xb571, 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, 0xcb35, + 0x090c, 0x0dd5, 0xa87b, 0x0003, 0x009e, 0x080c, 0xd1ea, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c, + 0x968d, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004, + 0x7042, 0x080c, 0xae61, 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, 0xbe1d, 0x002e, 0x003e, 0x015e, 0x009e, + 0x1904, 0xb5e0, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, + 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xbe1d, 0x002e, + 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, + 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, + 0x00be, 0x0804, 0xb265, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, + 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, + 0x2031, 0x0000, 0x2041, 0x1243, 0x080c, 0xb37a, 0x0130, 0x00fe, + 0x009e, 0x080c, 0xae61, 0x00be, 0x0005, 0x080c, 0xb813, 0x0cb8, + 0x2b78, 0x00f6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00fe, 0x00c6, + 0x080c, 0xae0b, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, + 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x654f, + 0x080c, 0x657b, 0x080c, 0x9138, 0x080c, 0x968d, 0x00ce, 0x0804, + 0xb5b3, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b2, 0x0040, + 0x1a04, 0xb669, 0x0002, 0xb657, 0xb657, 0xb64d, 0xb657, 0xb657, + 0xb657, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, + 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, + 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, + 0xb64b, 0xb64b, 0xb657, 0xb64b, 0xb657, 0xb657, 0xb64b, 0xb64b, + 0xb64b, 0xb64b, 0xb64b, 0xb64d, 0xb64b, 0xb64b, 0xb64b, 0xb64b, + 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb657, 0xb657, 0xb64b, + 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, + 0xb657, 0xb64b, 0xb64b, 0x080c, 0x0dd5, 0x0066, 0x00b6, 0x6610, + 0x2658, 0xb8cc, 0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003, + 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x9138, 0x0010, + 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e, + 0x0005, 0x2600, 0x0002, 0xb657, 0xb657, 0xb67d, 0xb657, 0xb657, + 0xb67d, 0xb67d, 0xb67d, 0xb67d, 0xb657, 0xb67d, 0xb657, 0xb67d, + 0xb657, 0xb67d, 0xb67d, 0xb67d, 0xb67d, 0x080c, 0x0dd5, 0x6004, + 0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x0904, 0xb741, + 0x91b6, 0x0027, 0x1904, 0xb6fc, 0x080c, 0x9588, 0x6004, 0x080c, + 0xcd2a, 0x01b0, 0x080c, 0xcd3b, 0x01a8, 0x908e, 0x0021, 0x0904, + 0xb6f9, 0x908e, 0x0022, 0x1130, 0x080c, 0xb291, 0x0904, 0xb6f5, + 0x0804, 0xb6f6, 0x908e, 0x003d, 0x0904, 0xb6f9, 0x0804, 0xb6ef, + 0x080c, 0x31e8, 0x2001, 0x0007, 0x080c, 0x654f, 0x6010, 0x00b6, + 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813, 0x9186, 0x007e, 0x1148, + 0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x73bc, 0x1108, 0xc2ad, + 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe917, + 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, + 0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x6010, 0x00b6, + 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x003e, + 0x002e, 0x001e, 0x080c, 0xd245, 0x0016, 0x080c, 0xcfa2, 0x080c, + 0xae61, 0x001e, 0x080c, 0x32bb, 0x080c, 0x968d, 0x0030, 0x080c, + 0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813, + 0x0cb0, 0x080c, 0xb84f, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c, + 0x9588, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb291, 0x0d68, + 0x080c, 0x31bf, 0x080c, 0xd245, 0x080c, 0xcd2a, 0x1190, 0x080c, + 0x31e8, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813, + 0x9186, 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, + 0x0870, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0840, 0x6004, + 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, + 0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee, 0x0804, 0xb6ef, 0x6004, + 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, 0xb813, 0x0804, + 0xb6ef, 0x90b2, 0x0040, 0x1a04, 0xb7ef, 0x2008, 0x0002, 0xb789, + 0xb78a, 0xb78d, 0xb790, 0xb793, 0xb796, 0xb787, 0xb787, 0xb787, + 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, + 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, + 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb799, 0xb7a4, 0xb787, + 0xb7a6, 0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb7a4, + 0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, + 0xb787, 0xb7d6, 0xb7a4, 0xb787, 0xb7a0, 0xb787, 0xb787, 0xb787, + 0xb7a1, 0xb787, 0xb787, 0xb787, 0xb7a4, 0xb7cd, 0xb787, 0x080c, + 0x0dd5, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8, + 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009, + 0x00b0, 0x080c, 0x9588, 0x6003, 0x0005, 0x080c, 0x968d, 0x0070, + 0x0018, 0x0010, 0x080c, 0x654f, 0x0804, 0xb7e7, 0x080c, 0x9588, + 0x080c, 0xd248, 0x6003, 0x0004, 0x080c, 0x968d, 0x0005, 0x080c, + 0x654f, 0x080c, 0x9588, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, + 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, + 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, + 0x631a, 0x003e, 0x080c, 0x968d, 0x0c08, 0x080c, 0x9588, 0x080c, + 0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x08c0, 0x00e6, 0x00f6, + 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee, + 0x080c, 0x9588, 0x080c, 0xae61, 0x080c, 0x968d, 0x0838, 0x080c, + 0x9588, 0x6003, 0x0002, 0x080c, 0xd248, 0x0804, 0x968d, 0x2600, + 0x2008, 0x0002, 0xb806, 0xb7e7, 0xb804, 0xb7e7, 0xb7e7, 0xb804, + 0xb804, 0xb804, 0xb804, 0xb7e7, 0xb804, 0xb7e7, 0xb804, 0xb7e7, + 0xb804, 0xb804, 0xb804, 0xb804, 0x080c, 0x0dd5, 0x080c, 0x9588, + 0x0096, 0x6014, 0x2048, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae61, + 0x080c, 0x968d, 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, + 0xcb35, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, + 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x5478, 0x0130, 0x2001, + 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, + 0x2011, 0x4005, 0x080c, 0xd10f, 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, 0x0dd5, 0x6604, 0x96b6, 0x004d, 0x1120, + 0x080c, 0xd02e, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0043, 0x1120, + 0x080c, 0xd077, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x004b, 0x1120, + 0x080c, 0xd0a3, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0033, 0x1120, + 0x080c, 0xcfc4, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0028, 0x1120, + 0x080c, 0xcd74, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0029, 0x1120, + 0x080c, 0xcdb5, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x001f, 0x1120, + 0x080c, 0xb23a, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0000, 0x1118, + 0x080c, 0xb577, 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, + 0xb272, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb398, + 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xb50c, 0x0438, + 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb2aa, 0x0400, 0x6604, + 0x96b6, 0x0044, 0x1118, 0x080c, 0xb2e6, 0x00c8, 0x6604, 0x96b6, + 0x0049, 0x1118, 0x080c, 0xb327, 0x0090, 0x6604, 0x96b6, 0x0041, + 0x1118, 0x080c, 0xb311, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, + 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xbb39, 0x00be, + 0x0005, 0x080c, 0xaef7, 0x0cd8, 0xb8fc, 0xb8ff, 0xb8fc, 0xb946, + 0xb8fc, 0xbaad, 0xbb46, 0xb8fc, 0xb8fc, 0xbb0f, 0xb8fc, 0xbb25, + 0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, + 0x0103, 0x009e, 0x0804, 0xae61, 0xa001, 0xa001, 0x0005, 0x00e6, + 0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe2bc, + 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, + 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, + 0x080c, 0x654f, 0x080c, 0x31e8, 0x080c, 0xae61, 0x0098, 0x2001, + 0x000a, 0x080c, 0x654f, 0x080c, 0x31e8, 0x6003, 0x0001, 0x6007, + 0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0020, 0x2001, 0x0001, + 0x080c, 0xba7d, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, + 0x9006, 0x080c, 0x653b, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, + 0x2001, 0x0006, 0x080c, 0x657b, 0x00de, 0x0005, 0x00b6, 0x0096, + 0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xba54, + 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xbc93, + 0x0804, 0xb9b8, 0x080c, 0xbc88, 0x6010, 0x2058, 0xbaa0, 0x9286, + 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, + 0x4000, 0x080c, 0xd10f, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, + 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x31e8, + 0x080c, 0xae61, 0x0804, 0xba57, 0x080c, 0xba65, 0x6014, 0x9005, + 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, + 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, + 0x080c, 0xd10f, 0x08f8, 0x080c, 0xba5b, 0x0160, 0x9006, 0x080c, + 0x653b, 0x2001, 0x0004, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c, + 0x654f, 0x08a0, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001, + 0x6007, 0x0003, 0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xba57, + 0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcf44, 0x080c, 0x73bc, 0x0118, + 0xd0dc, 0x1904, 0xb97a, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, + 0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, + 0x080c, 0x28b2, 0x78e2, 0x00fe, 0x0804, 0xb97a, 0x080c, 0xcf81, + 0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe441, + 0x000e, 0x1904, 0xb97a, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, + 0x654f, 0x9006, 0x080c, 0x653b, 0x00c6, 0x2001, 0x180f, 0x2004, + 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, + 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, + 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, + 0x2887, 0x00f6, 0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, + 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, + 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, + 0x780e, 0x00fe, 0x080c, 0x2887, 0x00f6, 0x2079, 0x1800, 0x7982, + 0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, 0x8108, 0x080c, + 0x659e, 0x2b00, 0x00ce, 0x1904, 0xb97a, 0x6012, 0x2009, 0x180f, + 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, + 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, + 0x654f, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x9138, 0x080c, 0x968d, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de, + 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, + 0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe970, + 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, + 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, + 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, + 0x2001, 0x0007, 0x080c, 0x654f, 0x080c, 0x56e3, 0x1120, 0x2001, + 0x0007, 0x080c, 0x657b, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, + 0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, + 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, + 0x080c, 0x4b04, 0x004e, 0x003e, 0x080c, 0x31e8, 0x6020, 0x9086, + 0x000a, 0x1108, 0x0005, 0x0804, 0xae61, 0x00b6, 0x00e6, 0x0026, + 0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xbb05, + 0x080c, 0x56e3, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, + 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, + 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x669a, 0x080c, 0xb934, + 0x00de, 0x080c, 0xbd59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, + 0x0560, 0x2001, 0x0006, 0x080c, 0x654f, 0x0096, 0x6014, 0x904d, + 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, + 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd10f, 0x0060, 0xa864, + 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, + 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x31e8, 0x6020, 0x9086, + 0x000a, 0x0140, 0x080c, 0xae61, 0x0028, 0x080c, 0xb813, 0x9006, + 0x080c, 0xba7d, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, + 0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, + 0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x9138, 0x0804, + 0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2030, 0x2011, 0x1824, + 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, + 0x0007, 0x080c, 0x654f, 0x0804, 0xae61, 0x2001, 0x0001, 0x0804, + 0xba7d, 0x0002, 0xb8fc, 0xbb51, 0xb8fc, 0xbb92, 0xb8fc, 0xbc3f, + 0xbb46, 0xb8fc, 0xb8fc, 0xbc53, 0xb8fc, 0xbc65, 0x6604, 0x9686, + 0x0003, 0x0904, 0xbaad, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61, + 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xbc77, 0x11a0, 0x9006, + 0x080c, 0x653b, 0x080c, 0x31bf, 0x080c, 0xd245, 0x2001, 0x0002, + 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138, + 0x080c, 0x968d, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, + 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, + 0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, + 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31bf, + 0x080c, 0xd245, 0x2001, 0x0001, 0x080c, 0xba7d, 0x00ce, 0x00de, + 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xbc85, + 0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, + 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, + 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x653b, + 0x2001, 0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, + 0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xbc0f, 0x080c, 0xcb35, + 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, + 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xd169, 0x00b0, 0x6014, + 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, + 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, + 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xb813, 0x2009, + 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, + 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, + 0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, + 0x0190, 0x2001, 0x0004, 0x080c, 0x654f, 0x2001, 0x0028, 0x601a, + 0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c, 0xba7d, 0x002e, + 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, + 0x080c, 0xcb35, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, + 0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, + 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, + 0x080c, 0x5fad, 0x00ee, 0x0010, 0x080c, 0x31bf, 0x0860, 0x080c, + 0xbc85, 0x1160, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001, + 0x6007, 0x0003, 0x080c, 0x9138, 0x0804, 0x968d, 0x080c, 0xb813, + 0x9006, 0x0804, 0xba7d, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, + 0x654f, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x9138, 0x0804, + 0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x00f9, 0x1160, 0x2001, + 0x000a, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, + 0x9138, 0x0804, 0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2009, + 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, + 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, + 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x660e, 0x001e, + 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, + 0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, + 0x200a, 0x080c, 0xbd2b, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, + 0x200a, 0x080c, 0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, + 0x080c, 0xe5ae, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, + 0x002a, 0x2009, 0x0001, 0x080c, 0x318a, 0x00e6, 0x2071, 0x1800, + 0x080c, 0x2f96, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, + 0x007f, 0x080c, 0x32bb, 0x8108, 0x1f04, 0xbcc9, 0x015e, 0x00ce, + 0x080c, 0xbc88, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, + 0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, + 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, + 0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, + 0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820, + 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, + 0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, + 0x080c, 0x2887, 0x080c, 0x73bc, 0x0170, 0x2071, 0x0260, 0x2069, + 0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, + 0x680e, 0x080c, 0xcf44, 0x0040, 0x2001, 0x0006, 0x080c, 0x654f, + 0x080c, 0x31e8, 0x080c, 0xae61, 0x001e, 0x003e, 0x00de, 0x00ee, + 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, + 0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, + 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, + 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, + 0xbe1d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, + 0x080c, 0xbe1d, 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, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, + 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04, + 0xbde9, 0x080c, 0x8981, 0x0904, 0xbde2, 0x080c, 0xe5df, 0x0904, + 0xbde2, 0x6720, 0x9786, 0x0007, 0x0904, 0xbde2, 0x2500, 0x9c06, + 0x0904, 0xbde2, 0x2400, 0x9c06, 0x05e8, 0x3e08, 0x9186, 0x0002, + 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x1580, 0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, + 0x1a5e, 0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x00ce, + 0x080c, 0xb813, 0x080c, 0xae92, 0x00e8, 0x6014, 0x2048, 0x080c, + 0xcb35, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, + 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, + 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c, + 0xae92, 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1210, 0x0804, + 0xbd8c, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, + 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xe551, + 0x0c30, 0x9786, 0x0009, 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, + 0x2009, 0x004c, 0x080c, 0xaedc, 0x08e0, 0x9786, 0x000a, 0x0938, + 0x0820, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, + 0xbe09, 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, 0x220c, + 0x810f, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbe47, + 0x9006, 0x0005, 0x918d, 0x0001, 0x0005, 0x6004, 0x908a, 0x0053, + 0x1a0c, 0x0dd5, 0x080c, 0xcd2a, 0x0120, 0x080c, 0xcd3b, 0x0168, + 0x0028, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x0138, 0x080c, 0x9588, + 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813, 0x0cb0, + 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, + 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, + 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8c, + 0xbe8c, 0xbe8c, 0xbe8e, 0xbe8c, 0x080c, 0x0dd5, 0x600b, 0xffff, + 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, + 0x080c, 0x968d, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, + 0x9082, 0x0040, 0x0804, 0xbf43, 0x9186, 0x0027, 0x1520, 0x080c, + 0x9588, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096, 0x6114, 0x2148, + 0x080c, 0xcb35, 0x0198, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, + 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, + 0xc1c5, 0xa97e, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c, + 0xae61, 0x0804, 0x968d, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, + 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, + 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dd5, 0x2001, + 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, 0x2800, 0x0006, + 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19e7, + 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x8fd5, 0x00ce, 0x00ee, + 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, + 0x9086, 0x0002, 0x1110, 0x0804, 0xbf81, 0x0005, 0x0002, 0xbf1d, + 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, + 0xbf1b, 0xbf1b, 0xbf38, 0xbf38, 0xbf38, 0xbf38, 0xbf1b, 0xbf38, + 0xbf1b, 0xbf38, 0xbf1b, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x0096, + 0x6114, 0x2148, 0x080c, 0xcb35, 0x0168, 0xa867, 0x0103, 0xa87b, + 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6c81, + 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, + 0x080c, 0x9588, 0x080c, 0xcd3b, 0x090c, 0xb813, 0x080c, 0xae61, + 0x080c, 0x968d, 0x0005, 0x0002, 0xbf5a, 0xbf58, 0xbf58, 0xbf58, + 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf71, + 0xbf71, 0xbf71, 0xbf71, 0xbf58, 0xbf7b, 0xbf58, 0xbf71, 0xbf58, + 0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0x2001, + 0x1988, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004, + 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002, + 0x0cb8, 0x080c, 0x9588, 0x080c, 0xd248, 0x080c, 0xd24d, 0x6003, + 0x000f, 0x0804, 0x968d, 0x080c, 0x9588, 0x080c, 0xae61, 0x0804, + 0x968d, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, + 0x0005, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9f, 0xc07c, + 0xbf9d, 0xc0b0, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, + 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xc0b0, 0x080c, 0x0dd5, 0x00b6, + 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, + 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc06b, 0xa87b, 0x0000, + 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xc245, 0x080c, 0x6a9d, 0x6210, 0x2258, 0xba3c, + 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc04f, + 0x080c, 0xae61, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, + 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc053, 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, + 0xbfa6, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, + 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, + 0x080c, 0xc730, 0x003e, 0xd6cc, 0x0904, 0xbfbb, 0x7154, 0xa98a, + 0x81ff, 0x0904, 0xbfbb, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, + 0x0018, 0x2011, 0x0029, 0x080c, 0xc730, 0x2011, 0x0205, 0x2013, + 0x0000, 0x080c, 0xd1d5, 0x0804, 0xbfbb, 0xa868, 0xd0fc, 0x0120, + 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc6cf, + 0x00ae, 0x080c, 0xd1d5, 0x080c, 0xc720, 0x0804, 0xbfbd, 0x080c, + 0xce2e, 0x0804, 0xbfca, 0xa87c, 0xd0ac, 0x0904, 0xbfd6, 0xa880, + 0xd0bc, 0x1904, 0xbfd6, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, + 0xa834, 0x931e, 0x0904, 0xbfd6, 0xd6d4, 0x0190, 0xab38, 0x9305, + 0x0904, 0xbfd6, 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbfae, 0xa838, + 0xa934, 0x9105, 0x0904, 0xbfae, 0xa880, 0xd0bc, 0x1904, 0xbfae, + 0x080c, 0xce68, 0x0804, 0xbfca, 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, 0x1bad, 0x080c, 0x9155, 0x080c, 0x97b9, 0x009e, 0x0005, + 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, + 0x0005, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cf, 0xc165, + 0xc0cd, 0xc0cd, 0xc17c, 0xc208, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, + 0xc21d, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0x080c, 0x0dd5, 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, 0xc160, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, + 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc160, 0x080c, + 0x0fff, 0x090c, 0x0dd5, 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, 0xc716, - 0x003e, 0xd6cc, 0x0904, 0xbfa1, 0x7154, 0xa98a, 0x81ff, 0x0904, - 0xbfa1, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, - 0x0029, 0x080c, 0xc716, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, - 0xd1bb, 0x0804, 0xbfa1, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020, - 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc6b5, 0x00ae, 0x080c, - 0xd1bb, 0x080c, 0xc706, 0x0804, 0xbfa3, 0x080c, 0xce14, 0x0804, - 0xbfb0, 0xa87c, 0xd0ac, 0x0904, 0xbfbc, 0xa880, 0xd0bc, 0x1904, - 0xbfbc, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e, - 0x0904, 0xbfbc, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xbfbc, - 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbf94, 0xa838, 0xa934, 0x9105, - 0x0904, 0xbf94, 0xa880, 0xd0bc, 0x1904, 0xbf94, 0x080c, 0xce4e, - 0x0804, 0xbfb0, 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, 0x1bad, - 0x080c, 0x912c, 0x080c, 0x9790, 0x009e, 0x0005, 0x0005, 0x9182, - 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc0b3, - 0xc0b3, 0xc0b3, 0xc0b3, 0xc0b3, 0xc0b5, 0xc14b, 0xc0b3, 0xc0b3, - 0xc162, 0xc1ee, 0xc0b3, 0xc0b3, 0xc0b3, 0xc0b3, 0xc203, 0xc0b3, - 0xc0b3, 0xc0b3, 0xc0b3, 0x080c, 0x0dd5, 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, 0xc146, - 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, - 0xb08e, 0x9284, 0x0300, 0x0904, 0xc146, 0x080c, 0x0fff, 0x090c, - 0x0dd5, 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, 0xc716, 0x003e, 0xd6cc, - 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, - 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc716, 0x2011, - 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, - 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6b5, 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, 0x1bad, - 0x0804, 0xa226, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, - 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0160, 0x601c, 0xd084, - 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x1725, 0x00fe, 0x6003, - 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x955f, 0x080c, - 0x9664, 0x0096, 0x2001, 0x1988, 0x2004, 0x6042, 0x080c, 0x9614, - 0x080c, 0x9790, 0x6114, 0x2148, 0xa97c, 0xd1e4, 0x0904, 0xc1e9, - 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, 0x0fb1, 0x001e, 0x0440, 0x0016, 0x080c, 0x0fb1, - 0x009e, 0xa974, 0x0016, 0x080c, 0xc706, 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, 0x6a95, 0x001e, 0xd1e4, 0x1120, 0x080c, - 0xae47, 0x009e, 0x0005, 0x080c, 0xce14, 0x0cd8, 0x6004, 0x9086, - 0x0040, 0x1120, 0x080c, 0x955f, 0x080c, 0x9664, 0x2019, 0x0001, - 0x080c, 0xa59c, 0x6003, 0x0002, 0x080c, 0xd233, 0x080c, 0x9614, - 0x080c, 0x9790, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, - 0x955f, 0x080c, 0x9664, 0x2019, 0x0001, 0x080c, 0xa59c, 0x080c, - 0x9614, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x0096, 0x6114, 0x2148, - 0x080c, 0xcb1b, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, - 0x0000, 0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae47, - 0x080c, 0x9790, 0x0005, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, - 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, - 0x2009, 0x1a7a, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, - 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc260, - 0xc25e, 0xc25e, 0xc306, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e, - 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc437, 0x080c, 0x0dd5, - 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, 0xc2ff, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, - 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc2ff, - 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676, - 0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 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, 0xc716, 0x003e, - 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, - 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc716, - 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, - 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6b5, 0x080c, - 0x1a3c, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988, - 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, - 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0xa97c, 0xd1e4, - 0x0904, 0xc432, 0x6043, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc401, 0xa978, 0xa868, - 0xd0fc, 0x0904, 0xc3c2, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, - 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, - 0xc390, 0x9086, 0x0028, 0x1904, 0xc37c, 0xa87b, 0x001c, 0xb07b, - 0x001c, 0x0804, 0xc398, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, - 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, - 0x9206, 0x0988, 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, 0x0140, - 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, - 0x080c, 0xce4e, 0x0804, 0xc432, 0xd1dc, 0x0158, 0xa87b, 0x0015, - 0xb07b, 0x0015, 0x080c, 0xd0de, 0x0118, 0xb174, 0xc1dc, 0xb176, - 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, - 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc22b, - 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, - 0xd1bb, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fb1, 0x001e, - 0x0804, 0xc42e, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, - 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b, 0x001c, - 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, - 0x0015, 0x080c, 0xd0de, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, - 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, - 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc22b, 0xa890, - 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c, 0x0fb1, - 0x009e, 0x080c, 0xd1bb, 0xa974, 0x0016, 0x080c, 0xc706, 0x001e, - 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, - 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0, 0xd1dc, - 0x0148, 0xa87b, 0x0015, 0x080c, 0xd0de, 0x0118, 0xa974, 0xc1dc, - 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050, 0xa87b, - 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, - 0xc22b, 0xa974, 0x0016, 0x080c, 0x6a95, 0x001e, 0xd1e4, 0x1120, - 0x080c, 0xae47, 0x009e, 0x0005, 0x080c, 0xce14, 0x0cd8, 0x6114, - 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a4a, 0x009e, 0x0005, - 0x080c, 0x955f, 0x0010, 0x080c, 0x9614, 0x080c, 0xcb1b, 0x01f0, - 0x0096, 0x6114, 0x2148, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, - 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, - 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, - 0xe8e7, 0xa877, 0x0000, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae47, - 0x080c, 0x9664, 0x0804, 0x9790, 0xa87b, 0x0004, 0x0c90, 0xa87b, - 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc490, - 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, - 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0x080c, 0x0dd5, - 0x080c, 0x56d8, 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, - 0x6c79, 0x009e, 0x0804, 0xae47, 0x9182, 0x0085, 0x0002, 0xc4c6, - 0xc4c4, 0xc4c4, 0xc4d2, 0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4, - 0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4, 0x080c, 0x0dd5, 0x6003, 0x0001, - 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, - 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, - 0x7224, 0x6216, 0x7220, 0x080c, 0xcb09, 0x01a0, 0x2268, 0x6800, - 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, - 0x2d60, 0x080c, 0xc741, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, - 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x90c7, - 0x080c, 0x9664, 0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, - 0xce4e, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, - 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, - 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, - 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5, 0x080c, 0x955f, 0x0096, - 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0140, 0xa867, 0x0103, 0xa877, - 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae78, - 0x0804, 0x9664, 0xc547, 0xc549, 0xc549, 0xc547, 0xc547, 0xc547, - 0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0x080c, - 0x0dd5, 0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, - 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04b8, - 0x9186, 0x0027, 0x11f8, 0x080c, 0x955f, 0x080c, 0x31bc, 0x080c, - 0xd22b, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0150, 0xa867, - 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c79, 0x080c, - 0xcd04, 0x009e, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x080c, - 0xaedd, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x955f, 0x0096, - 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0d60, 0xa867, 0x0103, 0xa877, - 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x08f0, 0x0002, - 0xc59f, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc5b7, 0xc59d, - 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0x080c, 0x0dd5, 0x080c, - 0x955f, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, - 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, - 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x9664, 0x0005, 0x080c, - 0x955f, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, - 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, - 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x9664, 0x0005, 0x9182, - 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xaedd, - 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e7, 0xc634, 0xc5e5, 0xc5e5, - 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0x080c, 0x0dd5, 0x0096, - 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, + 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc730, + 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, + 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, + 0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, + 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6cf, + 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, 0x1bad, 0x0804, 0xa240, 0x6003, 0x0002, 0x6004, 0x9086, + 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0160, + 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x1725, + 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, + 0x9588, 0x080c, 0x968d, 0x0096, 0x2001, 0x1988, 0x2004, 0x6042, + 0x080c, 0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa97c, 0xd1e4, + 0x0904, 0xc203, 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, 0x0fb1, 0x001e, 0x0440, 0x0016, + 0x080c, 0x0fb1, 0x009e, 0xa974, 0x0016, 0x080c, 0xc720, 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, 0x6a9d, 0x001e, 0xd1e4, + 0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e, 0x0cd8, + 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x9588, 0x080c, 0x968d, + 0x2019, 0x0001, 0x080c, 0xa5b6, 0x6003, 0x0002, 0x080c, 0xd24d, + 0x080c, 0x963d, 0x080c, 0x97b9, 0x0005, 0x6004, 0x9086, 0x0040, + 0x1120, 0x080c, 0x9588, 0x080c, 0x968d, 0x2019, 0x0001, 0x080c, + 0xa5b6, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096, + 0x6114, 0x2148, 0x080c, 0xcb35, 0x0150, 0xa867, 0x0103, 0xa87b, + 0x0029, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e, + 0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0xa87b, 0x0015, 0xd1fc, + 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, + 0x0006, 0x0016, 0x2009, 0x1a7a, 0x2104, 0x8000, 0x200a, 0x001e, + 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, + 0x0040, 0x0208, 0x000a, 0x0005, 0xc278, 0xc278, 0xc278, 0xc278, + 0xc278, 0xc27a, 0xc278, 0xc278, 0xc320, 0xc278, 0xc278, 0xc278, + 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc451, + 0x080c, 0x0dd5, 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, 0xc319, 0x9694, 0xff00, 0x9284, + 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, + 0x0904, 0xc319, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, + 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 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, + 0xc730, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, + 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, + 0x080c, 0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, + 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, + 0xc6cf, 0x080c, 0x1a3c, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, + 0x2001, 0x1988, 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c, + 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, + 0xa97c, 0xd1e4, 0x0904, 0xc44c, 0x6043, 0x0000, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc41b, + 0xa978, 0xa868, 0xd0fc, 0x0904, 0xc3dc, 0x0016, 0xa87c, 0x0006, + 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, + 0x0002, 0x0904, 0xc3aa, 0x9086, 0x0028, 0x1904, 0xc396, 0xa87b, + 0x001c, 0xb07b, 0x001c, 0x0804, 0xc3b2, 0x6024, 0xd0f4, 0x11d0, + 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, + 0xa88c, 0xaa34, 0x9206, 0x0988, 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, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, + 0x0fb1, 0x009e, 0x080c, 0xce68, 0x0804, 0xc44c, 0xd1dc, 0x0158, + 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174, + 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, + 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, + 0x190c, 0xc245, 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, 0xd1d5, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, + 0x0fb1, 0x001e, 0x0804, 0xc448, 0x0016, 0x00a6, 0x2150, 0xb174, + 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, + 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, + 0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174, 0xc1dc, + 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, + 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, + 0xc245, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, + 0x080c, 0x0fb1, 0x009e, 0x080c, 0xd1d5, 0xa974, 0x0016, 0x080c, + 0xc720, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, + 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, + 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xd0f8, 0x0118, + 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, + 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xc245, 0xa974, 0x0016, 0x080c, 0x6a9d, 0x001e, + 0xd1e4, 0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e, + 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a4a, + 0x009e, 0x0005, 0x080c, 0x9588, 0x0010, 0x080c, 0x963d, 0x080c, + 0xcb35, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xcd3b, 0x1118, + 0x080c, 0xb813, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, + 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029, + 0x1110, 0x080c, 0xe908, 0xa877, 0x0000, 0x080c, 0x6c81, 0x009e, + 0x080c, 0xae61, 0x080c, 0x968d, 0x0804, 0x97b9, 0xa87b, 0x0004, + 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182, + 0x0040, 0x0208, 0x000a, 0x0005, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, + 0xc4a8, 0xc4aa, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, + 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, + 0x080c, 0x0dd5, 0x080c, 0x56d7, 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, 0x6c81, 0x009e, 0x0804, 0xae61, 0x9182, 0x0085, + 0x0002, 0xc4e0, 0xc4de, 0xc4de, 0xc4ec, 0xc4de, 0xc4de, 0xc4de, + 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0x080c, 0x0dd5, + 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, + 0x080c, 0x968d, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, + 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xcb23, 0x01a0, + 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, + 0x1158, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x0128, 0x6803, + 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, + 0x080c, 0x90f0, 0x080c, 0x968d, 0x9280, 0x0004, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, + 0x2260, 0x080c, 0xce68, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, + 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, + 0x0dd5, 0x908a, 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00e2, + 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5, 0x080c, + 0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0140, 0xa867, + 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e, + 0x080c, 0xae92, 0x0804, 0x968d, 0xc561, 0xc563, 0xc563, 0xc561, + 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, + 0xc561, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, + 0x968d, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, + 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x9588, 0x080c, + 0x31bf, 0x080c, 0xd245, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, + 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, + 0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d, + 0x0005, 0x080c, 0xaef7, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, + 0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0d60, 0xa867, + 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, + 0x08f0, 0x0002, 0xc5b9, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, + 0xc5d1, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0x080c, + 0x0dd5, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, + 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, + 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x968d, + 0x0005, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, + 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, + 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x968d, + 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, + 0x0804, 0xaef7, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc601, 0xc64e, + 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0x080c, + 0x0dd5, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, + 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, + 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xc662, 0x080c, 0xcb35, + 0x1118, 0x080c, 0xcd1e, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, + 0x1110, 0x080c, 0xcd1e, 0xa867, 0x0103, 0x080c, 0xd210, 0x080c, + 0x6c81, 0x00d6, 0x2c68, 0x080c, 0xae0b, 0x01d0, 0x6003, 0x0001, + 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, + 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xcfaa, + 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d, + 0x2d60, 0x00de, 0x080c, 0xae61, 0x009e, 0x0005, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, + 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xd1a8, 0x11f0, 0x080c, + 0xae0b, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, + 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, + 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c, + 0xcfaa, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2d60, 0x00de, 0x0804, + 0xae61, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c8, 0xa867, + 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, + 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, + 0x080c, 0xce2a, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, + 0x009e, 0x0804, 0xae61, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, + 0xcb35, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, + 0x080c, 0x6c81, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, + 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030, + 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0056, + 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, + 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, + 0x0020, 0x2011, 0x0029, 0x080c, 0xc730, 0x96b2, 0x0020, 0xb004, + 0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 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, 0x6c81, 0x2a48, 0x0cb8, 0x080c, 0x6c81, 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, 0xc796, 0xc796, 0xc791, + 0xc7b8, 0xc784, 0xc791, 0xc7b8, 0xc791, 0xc784, 0x8ed9, 0xc791, + 0xc791, 0xc791, 0xc784, 0xc784, 0x080c, 0x0dd5, 0x0036, 0x2019, + 0x0010, 0x080c, 0xe134, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, + 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, + 0x11d8, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c0, 0xa864, 0x9086, + 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, + 0x2001, 0x0005, 0x080c, 0x6ec0, 0x080c, 0xce2a, 0x080c, 0x6c75, + 0x080c, 0xae92, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc7ce, 0xc7fc, + 0xc7d0, 0xc81d, 0xc7f7, 0xc7ce, 0xc791, 0xc796, 0xc796, 0xc791, + 0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0x080c, 0x0dd5, + 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, + 0x2048, 0x080c, 0xcb35, 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, + 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0x080c, 0xce2a, 0x009e, + 0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, + 0x080c, 0x90f0, 0x080c, 0x968d, 0x9085, 0x0001, 0x0005, 0x0066, + 0x080c, 0x1a5e, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7024, + 0x9c06, 0x1120, 0x080c, 0xa540, 0x00ee, 0x0850, 0x6020, 0x9084, + 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, + 0x2c40, 0x080c, 0xa69c, 0x009e, 0x008e, 0x0010, 0x080c, 0xa43d, + 0x00ee, 0x1904, 0xc7d0, 0x0804, 0xc791, 0x0036, 0x00e6, 0x2071, + 0x19e7, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xa5b6, 0x00ee, + 0x003e, 0x0804, 0xc7d0, 0x080c, 0xa7cc, 0x00ee, 0x003e, 0x1904, + 0xc7d0, 0x0804, 0xc791, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013, + 0x00ce, 0x0005, 0xc850, 0xc919, 0xca80, 0xc85a, 0xae92, 0xc850, + 0xe126, 0xd252, 0xc919, 0x8eab, 0xcaff, 0xc849, 0xc849, 0xc849, + 0xc849, 0x080c, 0x0dd5, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, + 0x0005, 0x080c, 0x9588, 0x080c, 0x968d, 0x0804, 0xae61, 0x601b, + 0x0001, 0x0005, 0x080c, 0xcb35, 0x0130, 0x6014, 0x0096, 0x2048, + 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, + 0x0002, 0xc879, 0xc87b, 0xc89f, 0xc8b3, 0xc8d7, 0xc879, 0xc850, + 0xc850, 0xc850, 0xc8b3, 0xc8b3, 0xc879, 0xc879, 0xc879, 0xc879, + 0xc8bd, 0x080c, 0x0dd5, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, + 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x01a0, + 0x080c, 0xa43d, 0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b, + 0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, + 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xd1ea, + 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, + 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56d7, 0x01a8, + 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, + 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, + 0xa89b, 0x0004, 0x080c, 0x6c81, 0x009e, 0x0804, 0xae61, 0x6014, + 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, 0x180f, + 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, + 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, 0x080c, + 0x15ee, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, 0x6014, + 0x0096, 0x904d, 0x090c, 0x0dd5, 0xa880, 0xd0f4, 0x1130, 0xc0f5, + 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, 0x2001, 0x0037, + 0x2c08, 0x080c, 0x15ee, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, + 0x0048, 0x080c, 0xaedc, 0x0005, 0x009e, 0x080c, 0x1a5e, 0x0804, + 0xc89f, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x000b, 0x0005, + 0xc930, 0xc857, 0xc932, 0xc930, 0xc932, 0xc932, 0xc851, 0xc930, + 0xc84b, 0xc84b, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930, + 0x080c, 0x0dd5, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, + 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0dd5, 0x00b6, 0x0013, 0x00be, + 0x0005, 0xc94d, 0xca1a, 0xc94f, 0xc98f, 0xc94f, 0xc98f, 0xc94f, + 0xc95d, 0xc94d, 0xc98f, 0xc94d, 0xc97e, 0x080c, 0x0dd5, 0x6004, + 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, + 0x0590, 0x908e, 0x0052, 0x0904, 0xca16, 0x6004, 0x080c, 0xcd3b, + 0x0904, 0xca33, 0x908e, 0x0004, 0x1110, 0x080c, 0x31e8, 0x908e, + 0x0021, 0x0904, 0xca37, 0x908e, 0x0022, 0x0904, 0xca7b, 0x908e, + 0x003d, 0x0904, 0xca37, 0x908e, 0x0039, 0x0904, 0xca3b, 0x908e, + 0x0035, 0x0904, 0xca3b, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, + 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, + 0x0110, 0x080c, 0x31bf, 0x080c, 0xb813, 0x0804, 0xae92, 0x00c6, + 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xca07, 0x9186, 0x0002, + 0x1904, 0xc9dc, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, + 0x73bc, 0x11b0, 0x080c, 0xd230, 0x0138, 0x080c, 0x73df, 0x1120, + 0x080c, 0x72cc, 0x0804, 0xca64, 0x2001, 0x197d, 0x2003, 0x0001, + 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x72ee, 0x0804, 0xca64, + 0x6010, 0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xca64, + 0xb8a0, 0x9084, 0xff80, 0x1904, 0xca64, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, + 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0xae0b, 0x0128, 0x2b00, + 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, + 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, + 0x2009, 0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, + 0x080c, 0x5fad, 0x00ee, 0x080c, 0xb813, 0x0030, 0x080c, 0xb813, + 0x080c, 0x31bf, 0x080c, 0xd245, 0x00e6, 0x0126, 0x2091, 0x8000, + 0x080c, 0x31e8, 0x012e, 0x00ee, 0x080c, 0xae92, 0x0005, 0x2001, + 0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x9138, 0x080c, 0x968d, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x31e8, + 0x0804, 0xc98b, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, + 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc9dc, + 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, 0x968d, + 0x00de, 0x00ce, 0x0898, 0x080c, 0xb813, 0x0804, 0xc98d, 0x080c, + 0xb84f, 0x0804, 0xc98d, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd1a8, + 0x00de, 0x0118, 0x080c, 0xae61, 0x00f0, 0x6004, 0x8007, 0x6134, + 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, + 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, + 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c, + 0x90f0, 0x080c, 0x968d, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb813, + 0x080c, 0x31bf, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e8, + 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, + 0x012e, 0x00ee, 0x0005, 0x080c, 0xb291, 0x1904, 0xca33, 0x0005, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x00d6, 0x001b, + 0x00de, 0x009e, 0x0005, 0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xca9b, + 0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xc850, 0xca9b, 0xc857, 0xca9d, + 0xc857, 0xcaaa, 0xca9b, 0x080c, 0x0dd5, 0x6004, 0x9086, 0x008b, + 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x90f0, 0x080c, + 0x968d, 0x0005, 0x080c, 0xd224, 0x0118, 0x080c, 0xd237, 0x0010, + 0x080c, 0xd245, 0x080c, 0xcd1e, 0x080c, 0xcb35, 0x0570, 0x080c, + 0x31bf, 0x080c, 0xcb35, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, + 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, + 0x6c81, 0x2c68, 0x080c, 0xae0b, 0x0150, 0x6810, 0x6012, 0x080c, + 0xcfaa, 0x00c6, 0x2d60, 0x080c, 0xae92, 0x00ce, 0x0008, 0x2d60, + 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, + 0x080c, 0x9138, 0x080c, 0x968d, 0x00c8, 0x080c, 0xd224, 0x0138, + 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x31bf, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, - 0x1118, 0x009e, 0x0804, 0xc648, 0x080c, 0xcb1b, 0x1118, 0x080c, - 0xcd04, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, 0x1110, 0x080c, - 0xcd04, 0xa867, 0x0103, 0x080c, 0xd1f6, 0x080c, 0x6c79, 0x00d6, - 0x2c68, 0x080c, 0xadf1, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, - 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, - 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xcf90, 0x6954, 0x6156, - 0x6023, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x2d60, 0x00de, - 0x080c, 0xae47, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, - 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, - 0x00d6, 0x2c68, 0x080c, 0xd18e, 0x11f0, 0x080c, 0xadf1, 0x01d8, - 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, - 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, - 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c, 0xcf90, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x2d60, 0x00de, 0x0804, 0xae47, 0x0096, - 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01c8, 0xa867, 0x0103, 0xa880, - 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, - 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xce10, - 0xa877, 0x0000, 0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x0804, - 0xae47, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0140, - 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6c79, - 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, - 0x9186, 0x0027, 0x0118, 0x080c, 0xaedd, 0x0030, 0x080c, 0x955f, - 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0x0056, 0x0066, 0x0096, - 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, - 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, - 0x0029, 0x080c, 0xc716, 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, - 0x080c, 0x0fb1, 0x080c, 0x0fff, 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, 0x6c79, - 0x2a48, 0x0cb8, 0x080c, 0x6c79, 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, 0xc77c, 0xc77c, 0xc777, 0xc79e, 0xc76a, - 0xc777, 0xc79e, 0xc777, 0xc76a, 0x8eb0, 0xc777, 0xc777, 0xc777, - 0xc76a, 0xc76a, 0x080c, 0x0dd5, 0x0036, 0x2019, 0x0010, 0x080c, - 0xe115, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006, - 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11d8, 0x6014, - 0x2048, 0x080c, 0xcb1b, 0x01c0, 0xa864, 0x9086, 0x0139, 0x1128, - 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, - 0x080c, 0x6eb8, 0x080c, 0xce10, 0x080c, 0x6c6d, 0x080c, 0xae78, - 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a, - 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc7b4, 0xc7e2, 0xc7b6, 0xc803, - 0xc7dd, 0xc7b4, 0xc777, 0xc77c, 0xc77c, 0xc777, 0xc777, 0xc777, - 0xc777, 0xc777, 0xc777, 0xc777, 0x080c, 0x0dd5, 0x86ff, 0x1510, - 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, - 0xcb1b, 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, - 0x080c, 0x0fb1, 0x009e, 0x080c, 0xce10, 0x009e, 0x080c, 0xd1d0, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, - 0x080c, 0x9664, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1a5e, - 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x1120, - 0x080c, 0xa526, 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, - 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, - 0xa682, 0x009e, 0x008e, 0x0010, 0x080c, 0xa423, 0x00ee, 0x1904, - 0xc7b6, 0x0804, 0xc777, 0x0036, 0x00e6, 0x2071, 0x19e7, 0x703c, - 0x9c06, 0x1138, 0x901e, 0x080c, 0xa59c, 0x00ee, 0x003e, 0x0804, - 0xc7b6, 0x080c, 0xa7b2, 0x00ee, 0x003e, 0x1904, 0xc7b6, 0x0804, - 0xc777, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, - 0xc836, 0xc8ff, 0xca66, 0xc840, 0xae78, 0xc836, 0xe107, 0xd238, - 0xc8ff, 0x8e82, 0xcae5, 0xc82f, 0xc82f, 0xc82f, 0xc82f, 0x080c, - 0x0dd5, 0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x0005, 0x080c, - 0x955f, 0x080c, 0x9664, 0x0804, 0xae47, 0x601b, 0x0001, 0x0005, - 0x080c, 0xcb1b, 0x0130, 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, - 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc85f, - 0xc861, 0xc885, 0xc899, 0xc8bd, 0xc85f, 0xc836, 0xc836, 0xc836, - 0xc899, 0xc899, 0xc85f, 0xc85f, 0xc85f, 0xc85f, 0xc8a3, 0x080c, - 0x0dd5, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882, - 0x009e, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x01a0, 0x080c, 0xa423, - 0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, - 0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x90c7, 0x080c, 0x9664, - 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, - 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xd1d0, 0x6007, 0x0085, - 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664, - 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, - 0xa882, 0x009e, 0x0005, 0x080c, 0x56d8, 0x01a8, 0x6014, 0x0096, - 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, - 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, - 0x080c, 0x6c79, 0x009e, 0x0804, 0xae47, 0x6014, 0x0096, 0x904d, - 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, 0x180f, 0x2004, 0xd0c4, - 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, - 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, 0x080c, 0x15ee, 0x2001, - 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, 0x6014, 0x0096, 0x904d, - 0x090c, 0x0dd5, 0xa880, 0xd0f4, 0x1130, 0xc0f5, 0xa882, 0x009e, - 0x601b, 0x0002, 0x0070, 0x009e, 0x2001, 0x0037, 0x2c08, 0x080c, - 0x15ee, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, - 0xaec2, 0x0005, 0x009e, 0x080c, 0x1a5e, 0x0804, 0xc885, 0x6000, - 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x000b, 0x0005, 0xc916, 0xc83d, - 0xc918, 0xc916, 0xc918, 0xc918, 0xc837, 0xc916, 0xc831, 0xc831, - 0xc916, 0xc916, 0xc916, 0xc916, 0xc916, 0xc916, 0x080c, 0x0dd5, - 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, - 0x000c, 0x1a0c, 0x0dd5, 0x00b6, 0x0013, 0x00be, 0x0005, 0xc933, - 0xca00, 0xc935, 0xc975, 0xc935, 0xc975, 0xc935, 0xc943, 0xc933, - 0xc975, 0xc933, 0xc964, 0x080c, 0x0dd5, 0x6004, 0x908e, 0x0016, - 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, - 0x0052, 0x0904, 0xc9fc, 0x6004, 0x080c, 0xcd21, 0x0904, 0xca19, - 0x908e, 0x0004, 0x1110, 0x080c, 0x31e1, 0x908e, 0x0021, 0x0904, - 0xca1d, 0x908e, 0x0022, 0x0904, 0xca61, 0x908e, 0x003d, 0x0904, - 0xca1d, 0x908e, 0x0039, 0x0904, 0xca21, 0x908e, 0x0035, 0x0904, - 0xca21, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, - 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, - 0x31bc, 0x080c, 0xb7f9, 0x0804, 0xae78, 0x00c6, 0x00d6, 0x6104, - 0x9186, 0x0016, 0x0904, 0xc9ed, 0x9186, 0x0002, 0x1904, 0xc9c2, - 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x73b0, 0x11b0, - 0x080c, 0xd216, 0x0138, 0x080c, 0x73d3, 0x1120, 0x080c, 0x72c0, - 0x0804, 0xca4a, 0x2001, 0x197d, 0x2003, 0x0001, 0x2001, 0x1800, - 0x2003, 0x0001, 0x080c, 0x72e2, 0x0804, 0xca4a, 0x6010, 0x2058, - 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xca4a, 0xb8a0, 0x9084, - 0xff80, 0x1904, 0xca4a, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, - 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, - 0x6043, 0x0000, 0x080c, 0xadf1, 0x0128, 0x2b00, 0x6012, 0x6023, - 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, - 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1837, - 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fae, - 0x00ee, 0x080c, 0xb7f9, 0x0030, 0x080c, 0xb7f9, 0x080c, 0x31bc, - 0x080c, 0xd22b, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e1, - 0x012e, 0x00ee, 0x080c, 0xae78, 0x0005, 0x2001, 0x0002, 0x080c, - 0x6550, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, - 0x9664, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x31e1, 0x0804, 0xc971, - 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, - 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc9c2, 0x8001, 0xb842, - 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x00de, 0x00ce, - 0x0898, 0x080c, 0xb7f9, 0x0804, 0xc973, 0x080c, 0xb835, 0x0804, - 0xc973, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd18e, 0x00de, 0x0118, - 0x080c, 0xae47, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, - 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, - 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c, 0x2c08, - 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x90c7, 0x080c, - 0x9664, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb7f9, 0x080c, 0x31bc, - 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e1, 0x6017, 0x0000, - 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee, - 0x0005, 0x080c, 0xb277, 0x1904, 0xca19, 0x0005, 0x6000, 0x908a, - 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, - 0x0005, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81, - 0xca81, 0xca81, 0xc836, 0xca81, 0xc83d, 0xca83, 0xc83d, 0xca90, - 0xca81, 0x080c, 0x0dd5, 0x6004, 0x9086, 0x008b, 0x0148, 0x6007, - 0x008b, 0x6003, 0x000d, 0x080c, 0x90c7, 0x080c, 0x9664, 0x0005, - 0x080c, 0xd20a, 0x0118, 0x080c, 0xd21d, 0x0010, 0x080c, 0xd22b, - 0x080c, 0xcd04, 0x080c, 0xcb1b, 0x0570, 0x080c, 0x31bc, 0x080c, - 0xcb1b, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, - 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6c79, 0x2c68, - 0x080c, 0xadf1, 0x0150, 0x6810, 0x6012, 0x080c, 0xcf90, 0x00c6, - 0x2d60, 0x080c, 0xae78, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, - 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, - 0x080c, 0x9664, 0x00c8, 0x080c, 0xd20a, 0x0138, 0x6034, 0x9086, - 0x4000, 0x1118, 0x080c, 0x31bc, 0x08d0, 0x6034, 0x908c, 0xff00, - 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, - 0x31bc, 0x0868, 0x080c, 0xae78, 0x0005, 0x6000, 0x908a, 0x0016, - 0x1a0c, 0x0dd5, 0x0002, 0xcafb, 0xcafb, 0xcafd, 0xcafd, 0xcafd, - 0xcafb, 0xcafb, 0xae78, 0xcafb, 0xcafb, 0xcafb, 0xcafb, 0xcafb, - 0xcafb, 0xcafb, 0xcafb, 0x080c, 0x0dd5, 0x080c, 0xa7b2, 0x6114, - 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6c79, 0x009e, 0x0804, - 0xae47, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0, 0x0240, 0x2001, - 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, - 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, 0x000e, - 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, 0x10aa, - 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, - 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7354, 0x7074, - 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xd216, 0x0180, - 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148, 0x080c, - 0x31bc, 0x080c, 0xd22b, 0x00c6, 0x080c, 0xae78, 0x00ce, 0x0060, - 0x080c, 0xcf0a, 0x0148, 0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9, - 0x00c6, 0x080c, 0xae47, 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02, - 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, - 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, - 0x2061, 0x1ab0, 0x6112, 0x080c, 0x31bc, 0x9006, 0x0010, 0x9085, - 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, - 0x8000, 0x080c, 0xadf1, 0x01b0, 0x6656, 0x2b00, 0x6012, 0x080c, - 0x56d8, 0x0118, 0x080c, 0xcc48, 0x0168, 0x080c, 0xcf90, 0x6023, - 0x0003, 0x2009, 0x004b, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, - 0xbaa0, 0x080c, 0xae95, 0x0560, 0x6057, 0x0000, 0x2b00, 0x6012, - 0x080c, 0xcf90, 0x6023, 0x0003, 0x0016, 0x080c, 0x9262, 0x0076, - 0x903e, 0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x001e, - 0xd184, 0x0128, 0x080c, 0xae47, 0x9085, 0x0001, 0x0070, 0x080c, - 0x56d8, 0x0128, 0xd18c, 0x1170, 0x080c, 0xcc48, 0x0148, 0x2009, - 0x004c, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, - 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0xadf1, - 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, - 0x0005, 0x080c, 0xcc5a, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, - 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, - 0xae47, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60, - 0x080c, 0xae47, 0x0088, 0x2f60, 0x080c, 0x56d8, 0x0138, 0xd18c, - 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, - 0x080c, 0xaec2, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, - 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xadf1, 0x2c78, 0x0508, - 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, - 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60, - 0x080c, 0xae47, 0x0060, 0x2f60, 0x080c, 0x56d8, 0x0120, 0xd18c, - 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xaec2, 0x9085, - 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, - 0x00c6, 0x080c, 0x4aa5, 0x00ce, 0x1120, 0x080c, 0xae47, 0x9006, - 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, - 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6734, 0x0158, 0x2001, 0xcc5f, 0x0006, 0x900e, 0x2400, 0x080c, - 0x6eb8, 0x080c, 0x6c79, 0x000e, 0x0807, 0x2418, 0x080c, 0x94f9, - 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, - 0x927a, 0x008e, 0x080c, 0x913f, 0x2f08, 0x2648, 0x080c, 0xe2ca, - 0xb93c, 0x81ff, 0x090c, 0x934b, 0x080c, 0x9664, 0x012e, 0x007e, - 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xadf1, - 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001, - 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xaec2, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, - 0x8000, 0x080c, 0xae95, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, - 0xcf90, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, - 0x1725, 0x00fe, 0x2009, 0x0021, 0x080c, 0xaec2, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, - 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0198, 0x660a, - 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001, 0x2900, 0x6016, - 0x001e, 0x0016, 0x080c, 0xaec2, 0x9085, 0x0001, 0x001e, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0xae95, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, - 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xaec2, 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, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014, - 0x904d, 0x080c, 0xcb1b, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158, - 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006, - 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x080c, 0xae95, 0x0198, 0x2b08, 0x6112, 0x080c, - 0xcf90, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x31bc, 0x2009, - 0x0028, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1824, 0x2204, - 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xba4b, 0x00be, 0x080c, - 0xbc6e, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x910f, 0x080c, - 0x9664, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, - 0x0148, 0x2001, 0x0001, 0x080c, 0xd14f, 0x080c, 0xb7f9, 0x080c, - 0xae47, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x009e, - 0x080c, 0xae47, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, - 0x0004, 0x080c, 0x6550, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, - 0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, - 0x080c, 0x669b, 0x00be, 0x080c, 0xbd3f, 0x1198, 0x6010, 0x00b6, - 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, - 0x6550, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0xb24b, - 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xb7f9, - 0x080c, 0xae47, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, - 0x090c, 0x0dd5, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, - 0x900e, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, - 0x080c, 0xae47, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x080c, - 0xae47, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, - 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000, - 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x90c7, 0x080c, 0x9664, - 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xc836, - 0xce40, 0xce40, 0xce43, 0xe5dc, 0xe5f7, 0xe5fa, 0xc836, 0xc836, - 0xc836, 0xc836, 0xc836, 0xc836, 0xc836, 0xc836, 0x080c, 0x0dd5, - 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, - 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, - 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834, 0x2004, - 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xadf1, 0x0508, 0x7810, - 0x6012, 0x080c, 0xcf90, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, - 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, - 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954, - 0x6156, 0x080c, 0x90c7, 0x080c, 0x9664, 0x2f60, 0x00fe, 0x0005, - 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x6042, 0x0005, 0x0016, - 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0180, 0xc0e4, 0xa87e, - 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130, - 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x6830, 0x6036, - 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170, - 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803, - 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048, - 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c, - 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, - 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001, - 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, - 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, - 0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x8f3f, - 0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, - 0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c, 0x711a, 0x721e, - 0x2001, 0x0064, 0x080c, 0x8f3f, 0x2001, 0x1987, 0x82ff, 0x1110, - 0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288, 0x000a, 0x2102, - 0x2001, 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, 0x15ee, 0x080c, - 0x694b, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, - 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, 0x2001, 0x1987, - 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, 0x701f, 0x07d0, - 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a91, 0x2102, - 0x2001, 0x0032, 0x080c, 0x15ee, 0x00ee, 0x001e, 0x000e, 0x0005, - 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x1031, 0x009e, 0x0005, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0180, - 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, - 0x0033, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048, - 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x98f7, 0x01d8, 0x707c, - 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, 0x1140, 0x6210, - 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3201, 0x080c, - 0xb24b, 0x0020, 0x080c, 0xb7f9, 0x080c, 0xae47, 0x00fe, 0x00ee, - 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0188, 0x2b08, 0x6112, - 0x080c, 0xcf90, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d, - 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0xadf1, - 0x0180, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001, 0x2900, - 0x6016, 0x001e, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046, - 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106, - 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x6014, - 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f, - 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, - 0x0016, 0x200c, 0x080c, 0xd800, 0x001e, 0xa804, 0x9005, 0x0110, - 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c, - 0xb7f9, 0x080c, 0xae47, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e, - 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, 0x9086, 0x0004, - 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x98f7, 0x01a8, 0x707c, - 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, 0x1110, 0x080c, - 0x31bc, 0x080c, 0xb24b, 0x0020, 0x080c, 0xb7f9, 0x080c, 0xae47, - 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, 0x9206, 0x0d78, - 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, - 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78, - 0x080c, 0x98f7, 0x05f0, 0x707c, 0xaacc, 0x9206, 0x1180, 0x7080, - 0xaad0, 0x9206, 0x1160, 0x080c, 0x31bc, 0x0016, 0xa998, 0xaab0, - 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5688, 0x001e, 0x0010, 0x080c, - 0x5479, 0x080c, 0xcb1b, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000, - 0xa897, 0x4000, 0x0080, 0x080c, 0xcb1b, 0x01b8, 0x6014, 0x2048, - 0x080c, 0x5479, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, - 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, - 0x080c, 0x6c79, 0x012e, 0x080c, 0xae47, 0x00fe, 0x00ee, 0x009e, - 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, 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, - 0x080c, 0xcb1b, 0x0904, 0xd14b, 0x0096, 0x6314, 0x2348, 0xa87a, - 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009, - 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6820, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004, - 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, - 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x20a9, 0x0004, - 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f7c, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007, - 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2, - 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6c6d, - 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, 0x283e, 0x2118, 0x831f, 0x939c, 0xff00, - 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c, - 0x4b05, 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, - 0xcb09, 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, 0xc22b, 0x0005, - 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0, - 0x080c, 0xcb1b, 0x01c8, 0x080c, 0xcd04, 0x6037, 0x4000, 0x6014, - 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xcd21, 0x1118, - 0x080c, 0xb7f9, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff, - 0x1129, 0x080c, 0x6c79, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4, - 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118, - 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xce10, 0xa877, - 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, - 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, - 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, - 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4cbc, - 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986, - 0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, 0x6042, 0x0005, - 0x080c, 0xae47, 0x0804, 0x9664, 0x00b6, 0x0066, 0x6000, 0x90b2, - 0x0016, 0x1a0c, 0x0dd5, 0x001b, 0x006e, 0x00be, 0x0005, 0xd257, - 0xd95d, 0xdaba, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd28e, - 0xdb38, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0x080c, - 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, - 0x006e, 0x0005, 0xd272, 0xe0a0, 0xd272, 0xd272, 0xd272, 0xd272, - 0xd272, 0xd272, 0xe04d, 0xe0f4, 0xd272, 0xe717, 0xe74d, 0xe717, - 0xe74d, 0xd272, 0x080c, 0x0dd5, 0x6000, 0x9082, 0x0016, 0x1a0c, - 0x0dd5, 0x6000, 0x000a, 0x0005, 0xd28c, 0xdd15, 0xde05, 0xde27, - 0xdee6, 0xd28c, 0xdfc4, 0xdf6e, 0xdb44, 0xe023, 0xe038, 0xd28c, - 0xd28c, 0xd28c, 0xd28c, 0xd28c, 0x080c, 0x0dd5, 0x91b2, 0x0053, - 0x1a0c, 0x0dd5, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xd6d1, 0x0002, - 0xd2d8, 0xd4c2, 0xd2d8, 0xd2d8, 0xd2d8, 0xd4cb, 0xd2d8, 0xd2d8, - 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, - 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2da, - 0xd33d, 0xd34c, 0xd3b0, 0xd3db, 0xd454, 0xd4ad, 0xd2d8, 0xd2d8, - 0xd4ce, 0xd2d8, 0xd2d8, 0xd4e3, 0xd4f0, 0xd2d8, 0xd2d8, 0xd2d8, - 0xd2d8, 0xd2d8, 0xd573, 0xd2d8, 0xd2d8, 0xd587, 0xd2d8, 0xd2d8, - 0xd542, 0xd2d8, 0xd2d8, 0xd2d8, 0xd59f, 0xd2d8, 0xd2d8, 0xd2d8, - 0xd61c, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd699, - 0x080c, 0x0dd5, 0x080c, 0x6928, 0x1150, 0x2001, 0x1837, 0x2004, - 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, - 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xd4bb, 0x080c, - 0x68cd, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, - 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x903e, - 0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x001e, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x660f, - 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026, - 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xe976, - 0x002e, 0x001e, 0x1178, 0x080c, 0xe1fc, 0x1904, 0xd3a8, 0x080c, - 0xe198, 0x1120, 0x6007, 0x0008, 0x0804, 0xd4bb, 0x6007, 0x0009, - 0x0804, 0xd4bb, 0x080c, 0xe420, 0x0128, 0x080c, 0xe1fc, 0x0d78, - 0x0804, 0xd3a8, 0x6017, 0x1900, 0x0c88, 0x080c, 0x32dc, 0x1904, - 0xd6ce, 0x6106, 0x080c, 0xe14f, 0x6007, 0x0006, 0x0804, 0xd4bb, - 0x6007, 0x0007, 0x0804, 0xd4bb, 0x080c, 0xe789, 0x1904, 0xd6ce, - 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x00d6, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, - 0x653c, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686, - 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140, - 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480, - 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034, - 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, - 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xe260, - 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, - 0x900e, 0x080c, 0x3201, 0x002e, 0x080c, 0x669b, 0x6007, 0x000a, - 0x00de, 0x0804, 0xd4bb, 0x6007, 0x000b, 0x00de, 0x0804, 0xd4bb, - 0x080c, 0x31bc, 0x080c, 0xd22b, 0x6007, 0x0001, 0x0804, 0xd4bb, - 0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, - 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014, - 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04, - 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, - 0x080c, 0x3201, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c, - 0xe956, 0x0804, 0xd4bb, 0x080c, 0x6928, 0x1140, 0x2001, 0x1837, - 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd2e7, - 0x080c, 0x68cd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, - 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x657c, - 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, - 0x9686, 0x0006, 0x1904, 0xd3a8, 0x080c, 0xe26d, 0x1120, 0x6007, - 0x000e, 0x0804, 0xd4bb, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, - 0x080c, 0x31bc, 0x080c, 0xd22b, 0x004e, 0x0016, 0x9006, 0x2009, - 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe58d, - 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, - 0x0001, 0x0804, 0xd4bb, 0x2001, 0x0001, 0x080c, 0x653c, 0x0156, - 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, - 0x0270, 0x080c, 0xbdef, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, - 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xd3a8, - 0x9682, 0x0007, 0x0a04, 0xd404, 0x0804, 0xd3a8, 0x6017, 0x1900, - 0x6007, 0x0009, 0x0804, 0xd4bb, 0x080c, 0x6928, 0x1140, 0x2001, - 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, - 0xd2e7, 0x080c, 0x68cd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, - 0x9082, 0x0006, 0x0690, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, - 0x0120, 0x9686, 0x0006, 0x1904, 0xd3a8, 0x080c, 0xe29b, 0x1130, - 0x080c, 0xe198, 0x1118, 0x6007, 0x0010, 0x04e8, 0x0046, 0x6410, - 0x2458, 0xbca0, 0x0046, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x004e, - 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, - 0x0029, 0x080c, 0xe58d, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, - 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xe420, 0x0140, - 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0978, 0x0804, 0xd3a8, - 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x32dc, 0x1904, - 0xd6ce, 0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0xd89b, 0x1904, - 0xd3a8, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, - 0x9664, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, - 0x080c, 0x9664, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xe789, - 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c, 0xd89b, - 0x1904, 0xd3a8, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x910f, - 0x080c, 0x9664, 0x0005, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x6007, - 0x0023, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005, - 0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, - 0x080c, 0xd89b, 0x1904, 0xd3a8, 0x0016, 0x0026, 0x00e6, 0x2071, - 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xcb09, - 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, - 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, - 0x080c, 0xe557, 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, 0xae47, 0x2160, 0x6007, 0x0025, - 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x00ee, 0x002e, - 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x653c, 0x0156, 0x0016, - 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, - 0x080c, 0xbdef, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, - 0x0031, 0x0804, 0xd4bb, 0x080c, 0xba63, 0x080c, 0x73b0, 0x1190, - 0x0006, 0x0026, 0x0036, 0x080c, 0x73ca, 0x1138, 0x080c, 0x7698, - 0x080c, 0x601b, 0x080c, 0x72e2, 0x0010, 0x080c, 0x7388, 0x003e, - 0x002e, 0x000e, 0x0005, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c, - 0xd89b, 0x1904, 0xd3a8, 0x6106, 0x080c, 0xd8b7, 0x1120, 0x6007, - 0x002b, 0x0804, 0xd4bb, 0x6007, 0x002c, 0x0804, 0xd4bb, 0x080c, - 0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c, - 0xd89b, 0x1904, 0xd3a8, 0x6106, 0x080c, 0xd8bc, 0x1120, 0x6007, - 0x002e, 0x0804, 0xd4bb, 0x6007, 0x002f, 0x0804, 0xd4bb, 0x080c, - 0x32dc, 0x1904, 0xd6ce, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, - 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, - 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, - 0xd4c2, 0x080c, 0x56d4, 0xd0e4, 0x0904, 0xd619, 0x2071, 0x026c, - 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6966, - 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, - 0x0510, 0x080c, 0x6962, 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, - 0x1590, 0x687c, 0x9106, 0x1578, 0x7210, 0x080c, 0xcb09, 0x0590, - 0x080c, 0xd786, 0x0578, 0x080c, 0xe609, 0x0560, 0x622e, 0x6007, - 0x0036, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce, - 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, - 0xcb09, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, - 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe557, 0x2c10, - 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, - 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, - 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x32dc, 0x1904, 0xd6ce, - 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, - 0x1904, 0xd4c2, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x56d4, 0xd0e4, - 0x0904, 0xd691, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, - 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, - 0x9085, 0x0001, 0x080c, 0xe557, 0x2c10, 0x00ce, 0x05e8, 0x080c, - 0xcb09, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, - 0x00c6, 0x0026, 0x2260, 0x080c, 0xc741, 0x002e, 0x00ce, 0x7118, - 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, - 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, - 0x0170, 0x080c, 0xd786, 0x0904, 0xd612, 0x0056, 0x7510, 0x7614, - 0x080c, 0xe622, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, - 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, - 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, - 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, - 0xd5e9, 0x00e6, 0x0026, 0x080c, 0x6928, 0x0550, 0x080c, 0x68cd, - 0x080c, 0xe7fb, 0x1518, 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, - 0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, - 0x78e6, 0x9284, 0xff00, 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, - 0x70e7, 0x0000, 0x080c, 0x6966, 0x0120, 0x2011, 0x1a00, 0x2013, - 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2f96, 0x0010, 0x080c, 0xe82d, - 0x002e, 0x00ee, 0x080c, 0xae47, 0x0804, 0xd4c1, 0x080c, 0xae47, - 0x0005, 0x2600, 0x0002, 0xd6e5, 0xd716, 0xd727, 0xd6e5, 0xd6e5, - 0xd6e7, 0xd738, 0xd6e5, 0xd6e5, 0xd6e5, 0xd704, 0xd6e5, 0xd6e5, - 0xd6e5, 0xd743, 0xd750, 0xd781, 0xd6e5, 0x080c, 0x0dd5, 0x080c, - 0xe789, 0x1d20, 0x080c, 0x32dc, 0x1d08, 0x080c, 0xd89b, 0x1148, - 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x910f, - 0x0005, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x6007, 0x0001, 0x6003, - 0x0001, 0x080c, 0x910f, 0x0005, 0x080c, 0xe789, 0x1938, 0x080c, - 0x32dc, 0x1920, 0x080c, 0xd89b, 0x1d60, 0x703c, 0x6016, 0x6007, - 0x004a, 0x6003, 0x0001, 0x080c, 0x910f, 0x0005, 0x080c, 0x32dc, - 0x1904, 0xd6ce, 0x2009, 0x0041, 0x080c, 0xe836, 0x6007, 0x0047, - 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005, 0x080c, - 0x32dc, 0x1904, 0xd6ce, 0x2009, 0x0042, 0x080c, 0xe836, 0x6007, - 0x0047, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005, - 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x2009, 0x0046, 0x080c, 0xe836, - 0x080c, 0xae47, 0x0005, 0x080c, 0xd7a3, 0x0904, 0xd6ce, 0x6007, - 0x004e, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005, - 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, - 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x19bd, 0x2004, - 0x9106, 0x11b0, 0x7144, 0x2001, 0x19be, 0x2004, 0x9106, 0x0190, - 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, - 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e, 0x0110, - 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, - 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, - 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8cc, - 0xd084, 0x0150, 0x7128, 0x6048, 0x9106, 0x1120, 0x712c, 0x6044, - 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, - 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, - 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7090, 0x908a, - 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, - 0x080c, 0x1018, 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004, 0xa816, - 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, - 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x1018, 0x01c0, 0x2900, - 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, - 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, - 0x1800, 0x7093, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fb1, 0x9006, - 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, - 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, - 0x080c, 0x23ab, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, - 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, - 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x23ab, 0x2061, - 0x19a0, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, - 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x23ab, - 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0, 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, 0x23c3, 0x20a1, 0x024c, 0x2001, - 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, - 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x23c3, 0x20a1, - 0x0240, 0x0c98, 0x080c, 0x23c3, 0x2061, 0x19a3, 0x6004, 0x20a0, - 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, - 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x23c3, 0x20a1, - 0x0240, 0x0c98, 0x2061, 0x19a3, 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, - 0x080c, 0xd933, 0x00de, 0x0005, 0x00d6, 0x080c, 0xd940, 0x1520, - 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, - 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xe956, 0x2009, - 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, - 0x080c, 0x283e, 0x1148, 0x2001, 0x0001, 0x080c, 0xe956, 0x2110, - 0x900e, 0x080c, 0x3201, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, - 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0xae95, 0x05a8, 0x0016, - 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, - 0x283e, 0x1578, 0x080c, 0x659f, 0x1560, 0xbe12, 0xbd16, 0x00ce, - 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xe789, 0x11d8, 0x080c, - 0x32dc, 0x11c0, 0x080c, 0xd89b, 0x0510, 0x2001, 0x0007, 0x080c, - 0x6550, 0x2001, 0x0007, 0x080c, 0x657c, 0x6017, 0x0000, 0x6023, - 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, - 0x9664, 0x0010, 0x080c, 0xae47, 0x9085, 0x0001, 0x00ce, 0x00be, - 0x0005, 0x080c, 0xae47, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, - 0xae47, 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, - 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, - 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, - 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, - 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e, - 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, - 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, - 0x1a04, 0xda8a, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, - 0x190c, 0x0dd5, 0x2001, 0x0007, 0x080c, 0x657c, 0x080c, 0x955f, - 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0xd9bd, 0xd9bf, 0xd9bd, - 0xd9bd, 0xd9bd, 0xd9bf, 0xd9ce, 0xda83, 0xda20, 0xda83, 0xda34, - 0xda83, 0xd9ce, 0xda83, 0xda7b, 0xda83, 0xda7b, 0xda83, 0xda83, - 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, - 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bf, 0xd9bd, 0xda83, 0xd9bd, 0xd9bd, - 0xda83, 0xd9bd, 0xda80, 0xda83, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, - 0xda83, 0xda83, 0xd9bd, 0xda83, 0xda83, 0xd9bd, 0xd9c9, 0xd9bd, - 0xd9bd, 0xd9bd, 0xd9bd, 0xda7f, 0xda83, 0xd9bd, 0xd9bd, 0xda83, - 0xda83, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0x080c, 0x0dd5, 0x080c, - 0x955f, 0x080c, 0xd22e, 0x6003, 0x0002, 0x080c, 0x9664, 0x0804, - 0xda89, 0x9006, 0x080c, 0x653c, 0x0804, 0xda83, 0x080c, 0x6962, - 0x1904, 0xda83, 0x9006, 0x080c, 0x653c, 0x6010, 0x2058, 0xb810, - 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, - 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb8c0, 0x9005, 0x1178, - 0x080c, 0xd216, 0x1904, 0xda83, 0x0036, 0x0046, 0xbba0, 0x2021, - 0x0007, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x0804, 0xda83, 0x080c, - 0x330d, 0x1904, 0xda83, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, - 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, - 0x2001, 0x0002, 0x080c, 0x6550, 0x080c, 0x955f, 0x6023, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, 0x9664, - 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, 0x84d8, 0x0804, 0xda89, + 0x1118, 0x080c, 0x31bf, 0x0868, 0x080c, 0xae92, 0x0005, 0x6000, + 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xcb15, 0xcb15, 0xcb17, + 0xcb17, 0xcb17, 0xcb15, 0xcb15, 0xae92, 0xcb15, 0xcb15, 0xcb15, + 0xcb15, 0xcb15, 0xcb15, 0xcb15, 0xcb15, 0x080c, 0x0dd5, 0x080c, + 0xa7cc, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6c81, + 0x009e, 0x0804, 0xae61, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0, + 0x0240, 0x2001, 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, + 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, + 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, + 0x080c, 0x10aa, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800, + 0x7354, 0x7074, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, + 0xd230, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, + 0x1148, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00c6, 0x080c, 0xae92, + 0x00ce, 0x0060, 0x080c, 0xcf24, 0x0148, 0x080c, 0xcd3b, 0x1110, + 0x080c, 0xb813, 0x00c6, 0x080c, 0xae61, 0x00ce, 0x9ce0, 0x0018, + 0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, + 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, + 0x81ff, 0x0128, 0x2061, 0x1ab0, 0x6112, 0x080c, 0x31bf, 0x9006, + 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x01b0, 0x6656, 0x2b00, + 0x6012, 0x080c, 0x56d7, 0x0118, 0x080c, 0xcc62, 0x0168, 0x080c, + 0xcfaa, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xaedc, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, + 0x2091, 0x8000, 0xbaa0, 0x080c, 0xaeaf, 0x0560, 0x6057, 0x0000, + 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x0016, 0x080c, + 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, + 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xae61, 0x9085, 0x0001, + 0x0070, 0x080c, 0x56d7, 0x0128, 0xd18c, 0x1170, 0x080c, 0xcc62, + 0x0148, 0x2009, 0x004c, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, + 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, + 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, + 0x080c, 0xae0b, 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, 0x7823, + 0x0003, 0x2021, 0x0005, 0x080c, 0xcc74, 0x9186, 0x004d, 0x0118, + 0x9186, 0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, + 0x2f60, 0x080c, 0xae61, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, + 0x0120, 0x2f60, 0x080c, 0xae61, 0x0088, 0x2f60, 0x080c, 0x56d7, + 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, + 0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001, 0x001e, 0x004e, + 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xae0b, + 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, + 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, + 0x0120, 0x2f60, 0x080c, 0xae61, 0x0060, 0x2f60, 0x080c, 0x56d7, + 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, + 0xaedc, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, + 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x1120, 0x080c, + 0xae61, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, + 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, + 0x8000, 0x080c, 0x6733, 0x0158, 0x2001, 0xcc79, 0x0006, 0x900e, + 0x2400, 0x080c, 0x6ec0, 0x080c, 0x6c81, 0x000e, 0x0807, 0x2418, + 0x080c, 0x9522, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, + 0x2608, 0x080c, 0x92a3, 0x008e, 0x080c, 0x9168, 0x2f08, 0x2648, + 0x080c, 0xe2eb, 0xb93c, 0x81ff, 0x090c, 0x9374, 0x080c, 0x968d, + 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, + 0x080c, 0xae0b, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa, + 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xaedc, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x01b8, 0x660a, 0x2b08, + 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, + 0x2c78, 0x080c, 0x1725, 0x00fe, 0x2009, 0x0021, 0x080c, 0xaedc, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, + 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xae0b, + 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, + 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001, + 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, + 0x2091, 0x8000, 0x080c, 0xaeaf, 0x0188, 0x2b08, 0x6112, 0x080c, + 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, + 0xaedc, 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, 0x6020, 0x9086, 0x0004, + 0x0190, 0x6014, 0x904d, 0x080c, 0xcb35, 0x0168, 0xa864, 0x9086, + 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, + 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, + 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x0198, 0x2b08, + 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, + 0x31bf, 0x2009, 0x0028, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, + 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, + 0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xba65, + 0x00be, 0x080c, 0xbc88, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, + 0x9138, 0x080c, 0x968d, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, + 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xd169, 0x080c, + 0xb813, 0x080c, 0xae61, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, + 0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, + 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, + 0x012e, 0x009e, 0x080c, 0xae61, 0x0c30, 0x0096, 0x9186, 0x0016, + 0x1128, 0x2001, 0x0004, 0x080c, 0x654f, 0x00e8, 0x9186, 0x0015, + 0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, + 0x00b6, 0x2058, 0x080c, 0x669a, 0x00be, 0x080c, 0xbd59, 0x1198, + 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, + 0x0006, 0x080c, 0x654f, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, + 0x080c, 0xb265, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, + 0x080c, 0xb813, 0x080c, 0xae61, 0x009e, 0x0005, 0x6014, 0x6310, + 0x2358, 0x904d, 0x090c, 0x0dd5, 0xa87b, 0x0000, 0xa883, 0x0000, + 0xa897, 0x4000, 0x900e, 0x080c, 0x681f, 0x1108, 0xc185, 0xb800, + 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6c81, 0x012e, 0x080c, 0xae61, 0x08f8, 0x6014, 0x904d, 0x090c, + 0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, + 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, + 0x012e, 0x080c, 0xae61, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, + 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000, + 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, + 0x0005, 0xc850, 0xce5a, 0xce5a, 0xce5d, 0xe5fd, 0xe618, 0xe61b, + 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, + 0x080c, 0x0dd5, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, + 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, + 0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xae0b, + 0x0508, 0x7810, 0x6012, 0x080c, 0xcfaa, 0x7820, 0x9086, 0x0003, + 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, + 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, + 0x0001, 0x7954, 0x6156, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2f60, + 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x6042, + 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0180, + 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, + 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fb1, + 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, + 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, + 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, + 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, + 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, + 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, + 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x90f0, + 0x080c, 0x968d, 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, 0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, + 0x080c, 0x8f68, 0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014, + 0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c, + 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8f68, 0x2001, 0x1987, + 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288, + 0x000a, 0x2102, 0x2001, 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, + 0x15ee, 0x080c, 0x6953, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, + 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, + 0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, + 0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, + 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, 0x15ee, 0x00ee, 0x001e, + 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x1031, + 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0xae0b, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, + 0x6016, 0x2009, 0x0033, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, + 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, + 0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0, + 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x9920, + 0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, + 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, + 0x3208, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813, 0x080c, 0xae61, + 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, + 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x0188, + 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, + 0x2009, 0x004d, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00ce, + 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, + 0x080c, 0xae0b, 0x0180, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, + 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xaedc, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, + 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, + 0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, + 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, + 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, + 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, + 0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd81b, 0x001e, 0xa804, + 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, + 0x0010, 0x080c, 0xb813, 0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e, + 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, + 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, + 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9920, + 0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, + 0x1110, 0x080c, 0x31bf, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813, + 0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, + 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, + 0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, + 0x2048, 0x2c78, 0x080c, 0x9920, 0x05f0, 0x707c, 0xaacc, 0x9206, + 0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c, 0x31bf, 0x0016, + 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e, + 0x0010, 0x080c, 0x5478, 0x080c, 0xcb35, 0x0508, 0xa87b, 0x0000, + 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xcb35, 0x01b8, + 0x6014, 0x2048, 0x080c, 0x5478, 0x1d70, 0xa87b, 0x0030, 0xa883, + 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, + 0xa867, 0x0139, 0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x00fe, + 0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, + 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, 0x080c, 0xcb35, 0x0904, 0xd165, 0x0096, 0x6314, + 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, + 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x681f, + 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, + 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, + 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, + 0x000a, 0x2098, 0x080c, 0x0f7c, 0x00ce, 0x0090, 0xaa96, 0x3918, + 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, + 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, + 0x080c, 0x6c75, 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, 0x283e, 0x2118, 0x831f, + 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, + 0x8018, 0x080c, 0x4b04, 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, 0xcb23, 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, + 0xc245, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, + 0x0499, 0x01e0, 0x080c, 0xcb35, 0x01c8, 0x080c, 0xcd1e, 0x6037, + 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, + 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0040, 0xa867, 0x0103, 0xa877, + 0x0000, 0x83ff, 0x1129, 0x080c, 0x6c81, 0x009e, 0x003e, 0x0005, + 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, + 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, + 0xce2a, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, + 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, + 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, + 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, + 0x080c, 0x4cbb, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, + 0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, + 0x6042, 0x0005, 0x080c, 0xae61, 0x0804, 0x968d, 0x00b6, 0x0066, + 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x001b, 0x006e, 0x00be, + 0x0005, 0xd271, 0xd978, 0xdad5, 0xd271, 0xd271, 0xd271, 0xd271, + 0xd271, 0xd2a8, 0xdb57, 0xd271, 0xd271, 0xd271, 0xd271, 0xd271, + 0xd271, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, + 0x0dd5, 0x0013, 0x006e, 0x0005, 0xd28c, 0xe0bf, 0xd28c, 0xd28c, + 0xd28c, 0xd28c, 0xd28c, 0xd28c, 0xe06c, 0xe113, 0xd28c, 0xe738, + 0xe76e, 0xe738, 0xe76e, 0xd28c, 0x080c, 0x0dd5, 0x6000, 0x9082, + 0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x000a, 0x0005, 0xd2a6, 0xdd34, + 0xde24, 0xde46, 0xdf05, 0xd2a6, 0xdfe3, 0xdf8d, 0xdb63, 0xe042, + 0xe057, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0x080c, 0x0dd5, + 0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x2100, 0x91b2, 0x0040, 0x1a04, + 0xd6ec, 0x0002, 0xd2f2, 0xd4dd, 0xd2f2, 0xd2f2, 0xd2f2, 0xd4e6, + 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, + 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, + 0xd2f2, 0xd2f4, 0xd357, 0xd366, 0xd3ca, 0xd3f5, 0xd46e, 0xd4c8, + 0xd2f2, 0xd2f2, 0xd4e9, 0xd2f2, 0xd2f2, 0xd4fe, 0xd50b, 0xd2f2, + 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd58e, 0xd2f2, 0xd2f2, 0xd5a2, + 0xd2f2, 0xd2f2, 0xd55d, 0xd2f2, 0xd2f2, 0xd2f2, 0xd5ba, 0xd2f2, + 0xd2f2, 0xd2f2, 0xd637, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, + 0xd2f2, 0xd6b4, 0x080c, 0x0dd5, 0x080c, 0x6930, 0x1150, 0x2001, + 0x1837, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, + 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, + 0xd4d6, 0x080c, 0x68cc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, + 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b, + 0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e, + 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, + 0x080c, 0x660e, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, + 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, + 0x080c, 0xe997, 0x002e, 0x001e, 0x1178, 0x080c, 0xe21d, 0x1904, + 0xd3c2, 0x080c, 0xe1b9, 0x1120, 0x6007, 0x0008, 0x0804, 0xd4d6, + 0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0xe441, 0x0128, 0x080c, + 0xe21d, 0x0d78, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x0c88, 0x080c, + 0x32e3, 0x1904, 0xd6e9, 0x6106, 0x080c, 0xe16e, 0x6007, 0x0006, + 0x0804, 0xd4d6, 0x6007, 0x0007, 0x0804, 0xd4d6, 0x080c, 0xe7aa, + 0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00d6, 0x6610, + 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, + 0x0001, 0x080c, 0x653b, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, + 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, + 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, + 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, + 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, + 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, + 0x080c, 0xe281, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, + 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x080c, 0x669a, + 0x6007, 0x000a, 0x00de, 0x0804, 0xd4d6, 0x6007, 0x000b, 0x00de, + 0x0804, 0xd4d6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x6007, 0x0001, + 0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3, + 0x1904, 0xd6e9, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, + 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, + 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, + 0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x6007, 0x000c, 0x2001, + 0x0001, 0x080c, 0xe977, 0x0804, 0xd4d6, 0x080c, 0x6930, 0x1140, + 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, + 0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04, 0x9684, + 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, + 0x080c, 0x657b, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2, 0x080c, 0xe28e, + 0x1120, 0x6007, 0x000e, 0x0804, 0xd4d6, 0x0046, 0x6410, 0x2458, + 0xbca0, 0x0046, 0x080c, 0x31bf, 0x080c, 0xd245, 0x004e, 0x0016, + 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, + 0x080c, 0xe5ae, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, + 0x004e, 0x6007, 0x0001, 0x0804, 0xd4d6, 0x2001, 0x0001, 0x080c, + 0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0270, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e, + 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, + 0x0a04, 0xd3c2, 0x9682, 0x0007, 0x0a04, 0xd41e, 0x0804, 0xd3c2, + 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0x6930, + 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, + 0x1110, 0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04, + 0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150, 0x96b4, 0xff00, + 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2, + 0x080c, 0xe2bc, 0x1130, 0x080c, 0xe1b9, 0x1118, 0x6007, 0x0010, + 0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31bf, + 0x080c, 0xd245, 0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, + 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe5ae, 0x6010, 0x2058, + 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, + 0x080c, 0xe441, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, + 0x0978, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, + 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x080c, 0xe7aa, 0x1904, 0xd6e9, + 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0012, 0x6003, 0x0001, + 0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0001, 0x6003, + 0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0cb0, 0x6007, 0x0005, + 0x0c68, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904, + 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0020, 0x6003, + 0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x080c, 0x32e3, + 0x1904, 0xd6e9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x9138, + 0x080c, 0x968d, 0x0005, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, + 0x32e3, 0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x0016, + 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, + 0x2c08, 0x080c, 0xcb23, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, + 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, + 0x7240, 0x2c08, 0x9006, 0x080c, 0xe578, 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, 0xae61, + 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, + 0x968d, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, + 0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0276, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e, + 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd4d6, 0x080c, 0xba7d, + 0x080c, 0x73bc, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6, + 0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0010, + 0x080c, 0x7394, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x32e3, + 0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c, + 0xd8d2, 0x1120, 0x6007, 0x002b, 0x0804, 0xd4d6, 0x6007, 0x002c, + 0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3, + 0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c, + 0xd8d7, 0x1120, 0x6007, 0x002e, 0x0804, 0xd4d6, 0x6007, 0x002f, + 0x0804, 0xd4d6, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00e6, 0x00d6, + 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, + 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, + 0x00de, 0x00ee, 0x0804, 0xd4dd, 0x080c, 0x56d3, 0xd0e4, 0x0904, + 0xd634, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, + 0x720c, 0x080c, 0x696e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, + 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x696a, 0x15b8, 0x2069, + 0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106, 0x1578, 0x7210, + 0x080c, 0xcb23, 0x0590, 0x080c, 0xd7a1, 0x0578, 0x080c, 0xe62a, + 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, + 0xffff, 0x0150, 0x080c, 0xcb23, 0x01c0, 0x9280, 0x0002, 0x2004, + 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, + 0x080c, 0xe578, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, + 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, + 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, + 0x32e3, 0x1904, 0xd6e9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, + 0x8007, 0x9086, 0x0006, 0x1904, 0xd4dd, 0x00e6, 0x00d6, 0x00c6, + 0x080c, 0x56d3, 0xd0e4, 0x0904, 0xd6ac, 0x2069, 0x1800, 0x2071, + 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, + 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe578, 0x2c10, + 0x00ce, 0x05e8, 0x080c, 0xcb23, 0x05d0, 0x7108, 0x9280, 0x0002, + 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xc75b, + 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, + 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, + 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd7a1, 0x0904, 0xd62d, + 0x0056, 0x7510, 0x7614, 0x080c, 0xe643, 0x005e, 0x00ce, 0x00de, + 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, + 0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d, 0x0c78, 0x6007, + 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, + 0x90f0, 0x080c, 0x968d, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, + 0x6017, 0x0000, 0x0804, 0xd604, 0x00e6, 0x0026, 0x080c, 0x6930, + 0x0550, 0x080c, 0x68cc, 0x080c, 0xe81c, 0x1518, 0x2071, 0x1800, + 0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0, + 0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00, 0x7280, 0x9205, + 0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c, 0x696e, 0x0120, + 0x2011, 0x1a00, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2f96, + 0x0010, 0x080c, 0xe84e, 0x002e, 0x00ee, 0x080c, 0xae61, 0x0804, + 0xd4dc, 0x080c, 0xae61, 0x0005, 0x2600, 0x0002, 0xd700, 0xd731, + 0xd742, 0xd700, 0xd700, 0xd702, 0xd753, 0xd700, 0xd700, 0xd700, + 0xd71f, 0xd700, 0xd700, 0xd700, 0xd75e, 0xd76b, 0xd79c, 0xd700, + 0x080c, 0x0dd5, 0x080c, 0xe7aa, 0x1d20, 0x080c, 0x32e3, 0x1d08, + 0x080c, 0xd8b6, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, + 0x0001, 0x080c, 0x9138, 0x0005, 0x080c, 0x31bf, 0x080c, 0xd245, + 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x0005, 0x080c, + 0xe7aa, 0x1938, 0x080c, 0x32e3, 0x1920, 0x080c, 0xd8b6, 0x1d60, + 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x9138, + 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0041, 0x080c, + 0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, + 0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0042, + 0x080c, 0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138, + 0x080c, 0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, + 0x0046, 0x080c, 0xe857, 0x080c, 0xae61, 0x0005, 0x080c, 0xd7be, + 0x0904, 0xd6e9, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x9138, + 0x080c, 0x968d, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, + 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, + 0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x19be, + 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, + 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, + 0xbe1d, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, + 0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, + 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, + 0x6010, 0x2058, 0xb8cc, 0xd084, 0x0150, 0x7128, 0x6048, 0x9106, + 0x1120, 0x712c, 0x6044, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, + 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, + 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, + 0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, + 0x19a0, 0x2003, 0x0000, 0x080c, 0x1018, 0x05a0, 0x2900, 0x6016, + 0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, + 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, + 0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, + 0x1018, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, + 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, + 0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, + 0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000, 0x6014, 0x2048, + 0x080c, 0x0fb1, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, + 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, + 0x918c, 0xffff, 0x11a8, 0x080c, 0x23ab, 0x2099, 0x026c, 0x2001, + 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, + 0x4003, 0x22a8, 0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, + 0x080c, 0x23ab, 0x2061, 0x19a0, 0x6004, 0x2098, 0x6008, 0x3518, + 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, + 0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0, + 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, 0x23c3, + 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, + 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, + 0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x23c3, 0x2061, + 0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, + 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, + 0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x19a3, 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, - 0x0904, 0xda83, 0x9686, 0x0004, 0x0904, 0xda83, 0x080c, 0x8c92, - 0x2001, 0x0004, 0x0804, 0xda81, 0x2001, 0x1800, 0x2004, 0x9086, - 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, - 0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, - 0xdaa7, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, - 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, 0x657c, - 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, 0x080c, - 0x6550, 0x080c, 0x6962, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4, - 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, - 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xda08, - 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449, 0x0020, 0x0018, - 0x0010, 0x080c, 0x657c, 0x080c, 0x955f, 0x080c, 0xae47, 0x080c, - 0x9664, 0x0005, 0x2600, 0x0002, 0xda9e, 0xda9e, 0xda9e, 0xda9e, - 0xda9e, 0xdaa0, 0xda9e, 0xdaa0, 0xda9e, 0xda9e, 0xdaa0, 0xda9e, - 0xda9e, 0xda9e, 0xdaa0, 0xdaa0, 0xdaa0, 0xdaa0, 0x080c, 0x0dd5, - 0x080c, 0x955f, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x0016, - 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c, - 0x6550, 0x9006, 0x080c, 0x653c, 0x080c, 0x31e1, 0x00de, 0x00be, - 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007, - 0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x91b6, 0x0015, 0x1110, 0x003b, - 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x006b, 0x0005, 0xb8e2, - 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xdb22, 0xdae7, 0xb8e2, - 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, - 0xb8e2, 0xdb22, 0xdb29, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0x00f6, - 0x080c, 0x6962, 0x11d8, 0x080c, 0xd216, 0x11c0, 0x6010, 0x905d, - 0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006, 0x080c, 0x653c, 0x2001, - 0x0002, 0x080c, 0x6550, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, - 0x0002, 0x080c, 0x910f, 0x080c, 0x9664, 0x00d0, 0x2011, 0x0263, - 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x1190, 0x080c, 0x6600, - 0x0118, 0x080c, 0xae47, 0x0060, 0xb810, 0x0006, 0xb814, 0x0006, - 0x080c, 0x6035, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xae47, - 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae47, - 0x0005, 0x080c, 0xbc6b, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, - 0x080c, 0x910f, 0x080c, 0x9664, 0x0010, 0x080c, 0xae47, 0x0005, - 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x080c, 0x955f, 0x080c, - 0xae78, 0x080c, 0x9664, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb5a, - 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5c, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, - 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, - 0xdb5a, 0xdb5a, 0x080c, 0x0dd5, 0x0096, 0x00b6, 0x00d6, 0x00e6, - 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8, - 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xdbc2, - 0x080c, 0xe94a, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, - 0x2011, 0x0200, 0x080c, 0x86b4, 0x0020, 0x9026, 0x080c, 0xe7ce, - 0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 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, 0x6c79, - 0x001e, 0x080c, 0xe94a, 0x1904, 0xdc22, 0x9486, 0x2000, 0x1130, - 0x2019, 0x0017, 0x080c, 0xe501, 0x0804, 0xdc22, 0x9486, 0x0200, - 0x1120, 0x080c, 0xe49d, 0x0804, 0xdc22, 0x9486, 0x0400, 0x0120, - 0x9486, 0x1000, 0x1904, 0xdc22, 0x2019, 0x0002, 0x080c, 0xe4b8, - 0x0804, 0xdc22, 0x2069, 0x1a71, 0x6a00, 0xd284, 0x0904, 0xdc8c, - 0x9284, 0x0300, 0x1904, 0xdc85, 0x6804, 0x9005, 0x0904, 0xdc6d, - 0x2d78, 0x6003, 0x0007, 0x080c, 0x1018, 0x0904, 0xdc2e, 0x7800, - 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, - 0x180f, 0x2004, 0xd084, 0x1904, 0xdc90, 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, 0xdc2a, 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, 0x6c79, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, - 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, - 0x2004, 0xd084, 0x0120, 0x080c, 0x0fff, 0x1904, 0xdbd7, 0x6017, - 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90c7, 0x080c, - 0x9664, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, - 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, - 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, - 0x080c, 0x90c7, 0x080c, 0x9664, 0x0828, 0x6868, 0x602e, 0x686c, - 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x0804, 0xdc22, 0x2001, 0x180e, 0x2004, - 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b05, 0x6017, 0xf300, - 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x0804, 0xdc22, 0x6017, 0xf500, 0x0c98, - 0x6017, 0xf600, 0x0804, 0xdc42, 0x6017, 0xf200, 0x0804, 0xdc42, - 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, - 0x7044, 0x9084, 0x0003, 0x9080, 0xdc2a, 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, 0x0dd5, - 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0029, 0x20a0, 0x2011, 0xdd0c, 0x2041, 0x0001, 0x223d, - 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, - 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, - 0x2098, 0x0c68, 0x2950, 0x080c, 0x1018, 0x0170, 0x2900, 0xb002, - 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, - 0x080c, 0x1031, 0x0cc8, 0x080c, 0x1031, 0x0804, 0xdc2e, 0x2548, - 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, - 0x080c, 0xe530, 0x0804, 0xdc22, 0x8010, 0x0004, 0x801a, 0x0006, - 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, - 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dd5, 0x9082, 0x0040, 0x0a0c, - 0x0dd5, 0x2008, 0x0804, 0xddbd, 0x9186, 0x0051, 0x0108, 0x00c0, - 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xdd6e, 0x0126, 0x2091, - 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x8fac, 0x002e, 0x001e, - 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xde05, - 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, - 0x0500, 0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, - 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006, - 0x0016, 0x0026, 0x080c, 0x8fac, 0x002e, 0x001e, 0x000e, 0x00ce, - 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dd5, 0x0804, - 0xdee6, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xaedd, - 0x0005, 0xdd84, 0xdd86, 0xdd86, 0xddad, 0xdd84, 0xdd84, 0xdd84, - 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, - 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0x080c, 0x0dd5, 0x080c, 0x955f, - 0x080c, 0x9664, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, - 0xcb1b, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xe530, 0x6017, - 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004, 0x601a, - 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x955f, - 0x080c, 0x9664, 0x080c, 0xcb1b, 0x0120, 0x6014, 0x2048, 0x080c, - 0x1031, 0x080c, 0xae78, 0x009e, 0x0005, 0x0002, 0xddd1, 0xdde8, - 0xddd3, 0xddff, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, - 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, - 0xddd1, 0x080c, 0x0dd5, 0x0096, 0x080c, 0x955f, 0x6014, 0x2048, - 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, - 0xaec2, 0x0010, 0x6003, 0x0004, 0x080c, 0x9664, 0x009e, 0x0005, - 0x080c, 0x955f, 0x080c, 0xcb1b, 0x0138, 0x6114, 0x0096, 0x2148, - 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8689, 0x080c, 0xae47, - 0x080c, 0x9664, 0x0005, 0x080c, 0xe792, 0x0db0, 0x0cc8, 0x080c, - 0x955f, 0x2009, 0x0041, 0x0804, 0xdf6e, 0x9182, 0x0040, 0x0002, - 0xde1b, 0xde1d, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, - 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, - 0xde1b, 0xde1e, 0xde1b, 0x080c, 0x0dd5, 0x0005, 0x00d6, 0x080c, - 0x8689, 0x00de, 0x080c, 0xe7ea, 0x080c, 0xae47, 0x0005, 0x9182, - 0x0040, 0x0002, 0xde3d, 0xde3d, 0xde3d, 0xde3d, 0xde3d, 0xde3d, - 0xde3d, 0xde3d, 0xde3d, 0xde3f, 0xdeae, 0xde3d, 0xde3d, 0xde3d, - 0xde3d, 0xdeae, 0xde3d, 0xde3d, 0xde3d, 0x080c, 0x0dd5, 0x2001, - 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, - 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xdeae, 0x2009, 0x180c, - 0x2104, 0xd0d4, 0x0904, 0xdeae, 0xc0d4, 0x200a, 0x2009, 0x0105, - 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867, - 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x9614, 0x6014, - 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, - 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c, - 0x9790, 0x2009, 0x0041, 0x009e, 0x0804, 0xdf6e, 0x080c, 0x9790, - 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8689, 0x009e, 0x0005, - 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, - 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, - 0xd1cc, 0x0110, 0x080c, 0x2c52, 0x080c, 0x9790, 0x6014, 0x2048, - 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8689, 0x080c, 0xae47, 0x009e, - 0x0005, 0x080c, 0xe792, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, - 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x9614, 0x080c, 0x9790, - 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, 0xe530, 0x6018, - 0x9005, 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, - 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, - 0x0002, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, - 0xdefd, 0xdeff, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, - 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdf4a, 0x080c, 0x0dd5, 0x6014, - 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, - 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, - 0x2009, 0x0041, 0x009e, 0x0804, 0xdf6e, 0x6003, 0x0007, 0x601b, - 0x0000, 0x080c, 0x8689, 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, - 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, - 0x0006, 0x00e9, 0x080c, 0x868b, 0x009e, 0x0005, 0x6003, 0x0002, - 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x15e5, 0x1904, - 0xdeff, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, - 0x9105, 0x1120, 0x080c, 0x15e5, 0x1904, 0xdeff, 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, - 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0xdf91, 0xdf9d, - 0xdfa9, 0xdfb5, 0xdf91, 0xdf91, 0xdf91, 0xdf91, 0xdf98, 0xdf93, - 0xdf93, 0xdf91, 0xdf91, 0xdf91, 0xdf91, 0xdf93, 0xdf91, 0xdf93, - 0xdf91, 0x080c, 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, - 0x6014, 0x9005, 0x190c, 0x0dd5, 0x0005, 0x6003, 0x0001, 0x6106, - 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e, - 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, - 0x8000, 0x080c, 0x9664, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, - 0x2c10, 0x080c, 0x1bad, 0x0126, 0x2091, 0x8000, 0x080c, 0x912c, - 0x080c, 0x9790, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, - 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, - 0xdfe0, 0xdfe2, 0xdff4, 0xe00e, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, - 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, - 0x080c, 0x0dd5, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, - 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, - 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, - 0x6106, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00e0, 0x901e, 0x6316, - 0x631a, 0x2019, 0x0004, 0x080c, 0xe530, 0x00a0, 0x6014, 0x2048, - 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, - 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x912c, - 0x080c, 0x9790, 0x0005, 0x080c, 0x955f, 0x6114, 0x81ff, 0x0158, - 0x0096, 0x2148, 0x080c, 0xe8e7, 0x0036, 0x2019, 0x0029, 0x080c, - 0xe530, 0x003e, 0x009e, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, - 0x080c, 0x9614, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, - 0xe8e7, 0x0036, 0x2019, 0x0029, 0x080c, 0xe530, 0x003e, 0x009e, - 0x080c, 0xae78, 0x080c, 0x9790, 0x0005, 0x9182, 0x0085, 0x0002, - 0xe05f, 0xe05d, 0xe05d, 0xe06b, 0xe05d, 0xe05d, 0xe05d, 0xe05d, - 0xe05d, 0xe05d, 0xe05d, 0xe05d, 0xe05d, 0x080c, 0x0dd5, 0x6003, - 0x000b, 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, - 0x9664, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xe789, 0x0118, - 0x080c, 0xae47, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, - 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, - 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xb168, 0x7220, 0x080c, - 0xe3d6, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, - 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, - 0x90c7, 0x080c, 0x9664, 0x080c, 0x9790, 0x00ee, 0x002e, 0x0005, - 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, - 0x908a, 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00a2, 0x9186, - 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xaedd, 0x0050, - 0x2001, 0x0007, 0x080c, 0x657c, 0x080c, 0x955f, 0x080c, 0xae78, - 0x080c, 0x9664, 0x0005, 0xe0d0, 0xe0d2, 0xe0d2, 0xe0d0, 0xe0d0, - 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, - 0x080c, 0x0dd5, 0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664, - 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dd5, 0x9182, 0x0092, 0x1a0c, - 0x0dd5, 0x9182, 0x0085, 0x0002, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f3, - 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, - 0xe0f1, 0x080c, 0x0dd5, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, - 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaedd, 0x0030, - 0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0x0036, - 0x080c, 0xe7ea, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, - 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, - 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, - 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa72d, 0x007e, 0x1520, - 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, - 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe7ea, 0x080c, 0xd22e, - 0x080c, 0x1a5e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb1b, - 0x0110, 0x080c, 0xe530, 0x009e, 0x6017, 0x0000, 0x080c, 0xe7ea, - 0x6023, 0x0007, 0x080c, 0xd22e, 0x003e, 0x012e, 0x0005, 0x00f6, - 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, - 0x080c, 0x283e, 0x15b8, 0x0016, 0x00c6, 0x080c, 0x6600, 0x1580, - 0x001e, 0x00c6, 0x2160, 0x080c, 0xd22b, 0x00ce, 0x002e, 0x0026, - 0x0016, 0x2019, 0x0029, 0x080c, 0xa7ee, 0x080c, 0x9262, 0x0076, - 0x903e, 0x080c, 0x913f, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, - 0xe2ca, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, - 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3276, - 0x002e, 0x001e, 0x080c, 0x6035, 0xbe12, 0xbd16, 0x9006, 0x0010, - 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, - 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104, 0x9086, - 0x0074, 0x1904, 0xe1f1, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, - 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe1ee, 0x2001, 0x197c, - 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0, 0x9005, 0x0118, - 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, - 0xe94f, 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, - 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, - 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x660f, 0x0804, - 0xe259, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, - 0x000a, 0x080c, 0xbe03, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, - 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbe03, 0x009e, - 0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848, - 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xe58d, 0xb800, - 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x2039, - 0x0000, 0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x2001, - 0x0007, 0x080c, 0x657c, 0x2001, 0x0007, 0x080c, 0x6550, 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, - 0x283e, 0x11d0, 0x080c, 0x6600, 0x11b8, 0x2011, 0x0270, 0x20a9, - 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e, - 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, - 0x0006, 0x080c, 0xbe03, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, - 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, - 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, - 0x11d0, 0x080c, 0x6600, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, - 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e, 0x1158, - 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, - 0x080c, 0xbe03, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, - 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, - 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19f0, - 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, - 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1ab0, 0x000e, - 0x0128, 0x8001, 0x9602, 0x1a04, 0xe367, 0x0018, 0x9606, 0x0904, - 0xe367, 0x080c, 0x8958, 0x0904, 0xe35e, 0x2100, 0x9c06, 0x0904, - 0xe35e, 0x080c, 0xe5ce, 0x1904, 0xe35e, 0x080c, 0xe96c, 0x0904, - 0xe35e, 0x080c, 0xe5be, 0x0904, 0xe35e, 0x6720, 0x9786, 0x0001, - 0x1148, 0x080c, 0x330d, 0x0904, 0xe3a6, 0x6004, 0x9086, 0x0000, - 0x1904, 0xe3a6, 0x9786, 0x0004, 0x0904, 0xe3a6, 0x9786, 0x0007, - 0x0904, 0xe35e, 0x2500, 0x9c06, 0x0904, 0xe35e, 0x2400, 0x9c06, - 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096, 0x6000, - 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a5e, 0x001e, 0x9786, - 0x000a, 0x0148, 0x080c, 0xcd21, 0x1130, 0x080c, 0xb7f9, 0x009e, - 0x080c, 0xae78, 0x0418, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01d8, - 0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a, 0xa877, - 0x0000, 0x080c, 0xe8e7, 0x0016, 0x080c, 0xce0a, 0x080c, 0x6c6d, - 0x001e, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae78, 0x9ce0, 0x0018, - 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe2de, 0x012e, - 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, - 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, 0x080c, - 0xe8e7, 0x080c, 0xe530, 0x08f8, 0x009e, 0x0c00, 0x9786, 0x0009, - 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086, 0x0003, - 0x11a0, 0x080c, 0x9614, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, - 0x0118, 0x6010, 0x080c, 0x6c79, 0x009e, 0x00c6, 0x080c, 0xae47, - 0x00ce, 0x0036, 0x080c, 0x9790, 0x003e, 0x009e, 0x0804, 0xe35e, - 0x9786, 0x000a, 0x0904, 0xe345, 0x0804, 0xe343, 0x81ff, 0x0904, - 0xe35e, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138, 0x9180, - 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe35e, 0x6000, 0x9086, - 0x0002, 0x1904, 0xe35e, 0x080c, 0xcd10, 0x0138, 0x080c, 0xcd21, - 0x1904, 0xe35e, 0x080c, 0xb7f9, 0x0038, 0x080c, 0x31e1, 0x080c, - 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x080c, 0xae78, 0x0804, 0xe35e, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, - 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe557, 0x001e, 0x0120, - 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xe3f5, - 0xe3f5, 0xe3f5, 0xe3f5, 0xe3f5, 0xe3f5, 0xe3f7, 0xe3f5, 0xe3f5, - 0xe3f5, 0xe3f5, 0xae78, 0xae78, 0xe3f5, 0x9006, 0x0005, 0x0036, - 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, - 0x2009, 0x0020, 0x080c, 0xe58d, 0x001e, 0x004e, 0x2019, 0x0002, - 0x080c, 0xe115, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, - 0xcb1b, 0x0140, 0x6014, 0x904d, 0x080c, 0xc74e, 0x687b, 0x0005, - 0x080c, 0x6c79, 0x009e, 0x080c, 0xae78, 0x9085, 0x0001, 0x0005, - 0x2001, 0x0001, 0x080c, 0x653c, 0x0156, 0x0016, 0x0026, 0x0036, - 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xbdef, - 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, - 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, - 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xe490, - 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04, 0xe490, - 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xe5be, - 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, 0xe7ea, 0x080c, 0xd22e, 0x080c, 0x1a5e, 0x6023, - 0x0007, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0120, 0x0046, 0x080c, - 0xe530, 0x004e, 0x009e, 0x080c, 0xae78, 0x88ff, 0x1198, 0x9ce0, - 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe445, - 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, 0xa682, 0x009e, 0x008e, 0x903e, - 0x080c, 0xa72d, 0x080c, 0xe436, 0x005e, 0x007e, 0x00be, 0x0005, - 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, - 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6600, 0x1190, - 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, - 0x080c, 0xa682, 0x009e, 0x008e, 0x903e, 0x080c, 0xa72d, 0x080c, - 0xe436, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe4c3, 0x015e, - 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, - 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, - 0x0048, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, 0x008e, 0x903e, - 0x080c, 0xa72d, 0x2c20, 0x080c, 0xe436, 0x005e, 0x007e, 0x00be, + 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, + 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, 0x0001, 0x006e, + 0x00be, 0x0005, 0x00d6, 0x080c, 0xd94e, 0x00de, 0x0005, 0x00d6, + 0x080c, 0xd95b, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, + 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, + 0x080c, 0xe977, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, + 0x918c, 0x00ff, 0x6824, 0x080c, 0x283e, 0x1148, 0x2001, 0x0001, + 0x080c, 0xe977, 0x2110, 0x900e, 0x080c, 0x3208, 0x0018, 0x9085, + 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, + 0xaeaf, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, + 0x8211, 0x220c, 0x080c, 0x283e, 0x1578, 0x080c, 0x659e, 0x1560, + 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, + 0xe7aa, 0x11d8, 0x080c, 0x32e3, 0x11c0, 0x080c, 0xd8b6, 0x0510, + 0x2001, 0x0007, 0x080c, 0x654f, 0x2001, 0x0007, 0x080c, 0x657b, + 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, + 0x080c, 0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x9085, + 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xae61, 0x00ce, 0x002e, + 0x001e, 0x0ca8, 0x080c, 0xae61, 0x9006, 0x0c98, 0x2069, 0x026d, + 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, + 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, + 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, + 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, + 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, + 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x1130, + 0x2008, 0x91b2, 0x0040, 0x1a04, 0xdaa5, 0x0092, 0x91b6, 0x0027, + 0x0120, 0x91b6, 0x0014, 0x190c, 0x0dd5, 0x2001, 0x0007, 0x080c, + 0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, + 0xd9d8, 0xd9da, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9e9, 0xda9e, + 0xda3b, 0xda9e, 0xda4f, 0xda9e, 0xd9e9, 0xda9e, 0xda96, 0xda9e, + 0xda96, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, + 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9d8, + 0xda9e, 0xd9d8, 0xd9d8, 0xda9e, 0xd9d8, 0xda9b, 0xda9e, 0xd9d8, + 0xd9d8, 0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xda9e, 0xda9e, + 0xd9d8, 0xd9e4, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xda9a, 0xda9e, + 0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, + 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xd248, 0x6003, 0x0002, + 0x080c, 0x968d, 0x0804, 0xdaa4, 0x9006, 0x080c, 0x653b, 0x0804, + 0xda9e, 0x080c, 0x696a, 0x1904, 0xda9e, 0x9006, 0x080c, 0x653b, + 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, + 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, + 0xb8c0, 0x9005, 0x1178, 0x080c, 0xd230, 0x1904, 0xda9e, 0x0036, + 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4cbb, 0x004e, 0x003e, + 0x0804, 0xda9e, 0x080c, 0x3314, 0x1904, 0xda9e, 0x2001, 0x1800, + 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, + 0x8000, 0x78aa, 0x00fe, 0x2001, 0x0002, 0x080c, 0x654f, 0x080c, + 0x9588, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x9138, 0x080c, 0x968d, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, + 0x8501, 0x0804, 0xdaa4, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, + 0x8637, 0x9686, 0x0006, 0x0904, 0xda9e, 0x9686, 0x0004, 0x0904, + 0xda9e, 0x080c, 0x8cbb, 0x2001, 0x0004, 0x0804, 0xda9c, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, + 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e, + 0x2001, 0x0006, 0x080c, 0xdac2, 0x6610, 0x2658, 0xbe04, 0x0066, + 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, + 0x0006, 0x080c, 0x657b, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, + 0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x696a, 0x11f8, 0x2001, + 0x1837, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, + 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, + 0x00fe, 0x0804, 0xda23, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, + 0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x657b, 0x080c, 0x9588, + 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x2600, 0x0002, 0xdab9, + 0xdab9, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdab9, 0xdabb, 0xdab9, + 0xdab9, 0xdabb, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdabb, 0xdabb, + 0xdabb, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae61, 0x080c, + 0x968d, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, + 0xd184, 0x0138, 0x080c, 0x654f, 0x9006, 0x080c, 0x653b, 0x080c, + 0x31e8, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, + 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x91b6, + 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dd5, + 0x006b, 0x0005, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, + 0xdb41, 0xdb02, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, + 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xdb41, 0xdb48, 0xb8fc, 0xb8fc, + 0xb8fc, 0xb8fc, 0x00f6, 0x080c, 0x696a, 0x11d8, 0x080c, 0xd230, + 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006, + 0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x6023, 0x0001, + 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138, 0x080c, 0x968d, + 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, + 0x11b0, 0x080c, 0x65ff, 0x0118, 0x080c, 0xae61, 0x0080, 0xb810, + 0x0006, 0xb814, 0x0006, 0xb8c0, 0x0006, 0x080c, 0x6034, 0x000e, + 0xb8c2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xae61, 0x00fe, + 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61, 0x0005, + 0x080c, 0xbc85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, + 0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x0005, 0x6004, + 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, + 0x080c, 0x968d, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb79, 0xdb79, + 0xdb79, 0xdb79, 0xdb7b, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, + 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, + 0xdb79, 0x080c, 0x0dd5, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6, + 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8, 0x6106, + 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xdbe1, 0x080c, + 0xe96b, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011, + 0x0200, 0x080c, 0x86dd, 0x0020, 0x9026, 0x080c, 0xe7ef, 0x0c38, + 0x080c, 0x0fff, 0x090c, 0x0dd5, 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, 0x6c81, 0x001e, + 0x080c, 0xe96b, 0x1904, 0xdc41, 0x9486, 0x2000, 0x1130, 0x2019, + 0x0017, 0x080c, 0xe522, 0x0804, 0xdc41, 0x9486, 0x0200, 0x1120, + 0x080c, 0xe4be, 0x0804, 0xdc41, 0x9486, 0x0400, 0x0120, 0x9486, + 0x1000, 0x1904, 0xdc41, 0x2019, 0x0002, 0x080c, 0xe4d9, 0x0804, + 0xdc41, 0x2069, 0x1a71, 0x6a00, 0xd284, 0x0904, 0xdcab, 0x9284, + 0x0300, 0x1904, 0xdca4, 0x6804, 0x9005, 0x0904, 0xdc8c, 0x2d78, + 0x6003, 0x0007, 0x080c, 0x1018, 0x0904, 0xdc4d, 0x7800, 0xd08c, + 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, 0x180f, + 0x2004, 0xd084, 0x1904, 0xdcaf, 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, 0xdc49, 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, + 0x6c81, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e, + 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, 0x2004, + 0xd084, 0x0120, 0x080c, 0x0fff, 0x1904, 0xdbf6, 0x6017, 0xf100, + 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, 0x080c, 0x968d, + 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, + 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700, + 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, + 0x90f0, 0x080c, 0x968d, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032, + 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x0804, 0xdc41, 0x2001, 0x180e, 0x2004, 0xd0ec, + 0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x6017, 0xf300, 0x0010, + 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x0804, 0xdc41, 0x6017, 0xf500, 0x0c98, 0x6017, + 0xf600, 0x0804, 0xdc61, 0x6017, 0xf200, 0x0804, 0xdc61, 0xa867, + 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, 0x7044, + 0x9084, 0x0003, 0x9080, 0xdc49, 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, 0x0dd5, 0x8210, + 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0029, 0x20a0, 0x2011, 0xdd2b, 0x2041, 0x0001, 0x223d, 0x9784, + 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, + 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, + 0x0c68, 0x2950, 0x080c, 0x1018, 0x0170, 0x2900, 0xb002, 0xa867, + 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, + 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, + 0x1031, 0x0cc8, 0x080c, 0x1031, 0x0804, 0xdc4d, 0x2548, 0x8847, + 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, + 0xe551, 0x0804, 0xdc41, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, + 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, + 0x908a, 0x0054, 0x1a0c, 0x0dd5, 0x9082, 0x0040, 0x0a0c, 0x0dd5, + 0x2008, 0x0804, 0xdddc, 0x9186, 0x0051, 0x0108, 0x00c0, 0x2001, + 0x0109, 0x2004, 0xd084, 0x0904, 0xdd8d, 0x0126, 0x2091, 0x2800, + 0x0006, 0x0016, 0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e, + 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xde24, 0x9186, + 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, 0x0500, + 0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x00c6, + 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006, 0x0016, + 0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e, 0x00ce, 0x012e, + 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dd5, 0x0804, 0xdf05, + 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xaef7, 0x0005, + 0xdda3, 0xdda5, 0xdda5, 0xddcc, 0xdda3, 0xdda3, 0xdda3, 0xdda3, + 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, + 0xdda3, 0xdda3, 0xdda3, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, + 0x968d, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, 0xcb35, + 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xe551, 0x6017, 0x0000, + 0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, + 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x9588, 0x080c, + 0x968d, 0x080c, 0xcb35, 0x0120, 0x6014, 0x2048, 0x080c, 0x1031, + 0x080c, 0xae92, 0x009e, 0x0005, 0x0002, 0xddf0, 0xde07, 0xddf2, + 0xde1e, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, + 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, + 0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0xa87c, + 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, 0xaedc, + 0x0010, 0x6003, 0x0004, 0x080c, 0x968d, 0x009e, 0x0005, 0x080c, + 0x9588, 0x080c, 0xcb35, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, + 0x009e, 0xd1ec, 0x1138, 0x080c, 0x86b2, 0x080c, 0xae61, 0x080c, + 0x968d, 0x0005, 0x080c, 0xe7b3, 0x0db0, 0x0cc8, 0x080c, 0x9588, + 0x2009, 0x0041, 0x0804, 0xdf8d, 0x9182, 0x0040, 0x0002, 0xde3a, + 0xde3c, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, + 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, + 0xde3d, 0xde3a, 0x080c, 0x0dd5, 0x0005, 0x00d6, 0x080c, 0x86b2, + 0x00de, 0x080c, 0xe80b, 0x080c, 0xae61, 0x0005, 0x9182, 0x0040, + 0x0002, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, + 0xde5c, 0xde5c, 0xde5e, 0xdecd, 0xde5c, 0xde5c, 0xde5c, 0xde5c, + 0xdecd, 0xde5c, 0xde5c, 0xde5c, 0x080c, 0x0dd5, 0x2001, 0x0105, + 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, 0x2001, + 0x0131, 0x2004, 0x9105, 0x1904, 0xdecd, 0x2009, 0x180c, 0x2104, + 0xd0d4, 0x0904, 0xdecd, 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, + 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867, 0x2004, + 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x963d, 0x6014, 0x0096, + 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, + 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c, 0x97b9, + 0x2009, 0x0041, 0x009e, 0x0804, 0xdf8d, 0x080c, 0x97b9, 0x6003, + 0x0007, 0x601b, 0x0000, 0x080c, 0x86b2, 0x009e, 0x0005, 0x2001, + 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, 0x2004, + 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0xd1cc, + 0x0110, 0x080c, 0x2c52, 0x080c, 0x97b9, 0x6014, 0x2048, 0xa97c, + 0xd1ec, 0x1130, 0x080c, 0x86b2, 0x080c, 0xae61, 0x009e, 0x0005, + 0x080c, 0xe7b3, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, + 0xc1d4, 0x2102, 0x0036, 0x080c, 0x963d, 0x080c, 0x97b9, 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, 0xe551, 0x6018, 0x9005, + 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, + 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, + 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, + 0xdf1e, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, + 0xdf1c, 0xdf1c, 0xdf1c, 0xdf69, 0x080c, 0x0dd5, 0x6014, 0x0096, + 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, + 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, + 0x0041, 0x009e, 0x0804, 0xdf8d, 0x6003, 0x0007, 0x601b, 0x0000, + 0x080c, 0x86b2, 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, 0x180e, + 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, + 0x00e9, 0x080c, 0x86b4, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, + 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x15e5, 0x1904, 0xdf1e, + 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, + 0x1120, 0x080c, 0x15e5, 0x1904, 0xdf1e, 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, 0x0dd5, + 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0xdfb0, 0xdfbc, 0xdfc8, + 0xdfd4, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb7, 0xdfb2, 0xdfb2, + 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb2, 0xdfb0, 0xdfb2, 0xdfb0, + 0x080c, 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0x6014, + 0x9005, 0x190c, 0x0dd5, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, + 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e, 0x0005, + 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, + 0x080c, 0x968d, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, + 0x080c, 0x1bad, 0x0126, 0x2091, 0x8000, 0x080c, 0x9155, 0x080c, + 0x97b9, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, + 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, 0xdfff, + 0xe001, 0xe013, 0xe02d, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, + 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x080c, + 0x0dd5, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, 0x0003, + 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, + 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, + 0x080c, 0x90f0, 0x080c, 0x968d, 0x00e0, 0x901e, 0x6316, 0x631a, + 0x2019, 0x0004, 0x080c, 0xe551, 0x00a0, 0x6014, 0x2048, 0xa87c, + 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, + 0x0003, 0x6106, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x080c, + 0x97b9, 0x0005, 0x080c, 0x9588, 0x6114, 0x81ff, 0x0158, 0x0096, + 0x2148, 0x080c, 0xe908, 0x0036, 0x2019, 0x0029, 0x080c, 0xe551, + 0x003e, 0x009e, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x080c, + 0x963d, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe908, + 0x0036, 0x2019, 0x0029, 0x080c, 0xe551, 0x003e, 0x009e, 0x080c, + 0xae92, 0x080c, 0x97b9, 0x0005, 0x9182, 0x0085, 0x0002, 0xe07e, + 0xe07c, 0xe07c, 0xe08a, 0xe07c, 0xe07c, 0xe07c, 0xe07c, 0xe07c, + 0xe07c, 0xe07c, 0xe07c, 0xe07c, 0x080c, 0x0dd5, 0x6003, 0x000b, + 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, + 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xe7aa, 0x0118, 0x080c, + 0xae61, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, + 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, + 0x2c00, 0x2011, 0x014e, 0x080c, 0xb182, 0x7220, 0x080c, 0xe3f7, + 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, + 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x080c, 0x97b9, 0x00ee, 0x002e, 0x0005, 0x9186, + 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, + 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027, + 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xaef7, 0x0050, 0x2001, + 0x0007, 0x080c, 0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, + 0x968d, 0x0005, 0xe0ef, 0xe0f1, 0xe0f1, 0xe0ef, 0xe0ef, 0xe0ef, + 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0x080c, + 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, + 0x9182, 0x0085, 0x0a0c, 0x0dd5, 0x9182, 0x0092, 0x1a0c, 0x0dd5, + 0x9182, 0x0085, 0x0002, 0xe110, 0xe110, 0xe110, 0xe112, 0xe110, + 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, + 0x080c, 0x0dd5, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, + 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030, 0x080c, + 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0036, 0x080c, + 0xe80b, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, + 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, + 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, + 0x1550, 0x0076, 0x2c38, 0x080c, 0xa747, 0x007e, 0x1520, 0x6000, + 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096, + 0x601c, 0xd084, 0x0140, 0x080c, 0xe80b, 0x080c, 0xd248, 0x080c, + 0x1a5e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0110, + 0x080c, 0xe551, 0x009e, 0x6017, 0x0000, 0x080c, 0xe80b, 0x6023, + 0x0007, 0x080c, 0xd248, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, + 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, + 0x283e, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x65ff, 0x1590, 0x001e, + 0x00c6, 0x2160, 0x080c, 0xd245, 0x00ce, 0x002e, 0x0026, 0x0016, + 0x2019, 0x0029, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e, + 0x080c, 0x9168, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xe2eb, + 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, + 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x327d, 0x002e, + 0xbcc0, 0x001e, 0x080c, 0x6034, 0xbe12, 0xbd16, 0xbcc2, 0x9006, + 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, + 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104, + 0x9086, 0x0074, 0x1904, 0xe212, 0x2069, 0x0260, 0x6944, 0x9182, + 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe20f, 0x2001, + 0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0, 0x9005, + 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, + 0x080c, 0xe970, 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, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, + 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x660e, + 0x0804, 0xe27a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e, 0x15a8, 0x2011, 0x027a, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbe1d, + 0x009e, 0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, + 0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xe5ae, + 0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076, + 0x2039, 0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e, + 0x2001, 0x0007, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c, 0x654f, + 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, 0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0270, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d, + 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e, + 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, + 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0276, 0x20a9, + 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e, + 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, + 0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, + 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, + 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, + 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, 0x2071, + 0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1ab0, + 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe388, 0x0018, 0x9606, + 0x0904, 0xe388, 0x080c, 0x8981, 0x0904, 0xe37f, 0x2100, 0x9c06, + 0x0904, 0xe37f, 0x080c, 0xe5ef, 0x1904, 0xe37f, 0x080c, 0xe98d, + 0x0904, 0xe37f, 0x080c, 0xe5df, 0x0904, 0xe37f, 0x6720, 0x9786, + 0x0001, 0x1148, 0x080c, 0x3314, 0x0904, 0xe3c7, 0x6004, 0x9086, + 0x0000, 0x1904, 0xe3c7, 0x9786, 0x0004, 0x0904, 0xe3c7, 0x9786, + 0x0007, 0x0904, 0xe37f, 0x2500, 0x9c06, 0x0904, 0xe37f, 0x2400, + 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096, + 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a5e, 0x001e, + 0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x080c, 0xb813, + 0x009e, 0x080c, 0xae92, 0x0418, 0x6014, 0x2048, 0x080c, 0xcb35, + 0x01d8, 0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc, + 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a, + 0xa877, 0x0000, 0x080c, 0xe908, 0x0016, 0x080c, 0xce24, 0x080c, + 0x6c75, 0x001e, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae92, 0x9ce0, + 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe2ff, + 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, + 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, + 0x080c, 0xe908, 0x080c, 0xe551, 0x08f8, 0x009e, 0x0c00, 0x9786, + 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086, + 0x0003, 0x11a0, 0x080c, 0x963d, 0x0096, 0x6114, 0x2148, 0x080c, + 0xcb35, 0x0118, 0x6010, 0x080c, 0x6c81, 0x009e, 0x00c6, 0x080c, + 0xae61, 0x00ce, 0x0036, 0x080c, 0x97b9, 0x003e, 0x009e, 0x0804, + 0xe37f, 0x9786, 0x000a, 0x0904, 0xe366, 0x0804, 0xe364, 0x81ff, + 0x0904, 0xe37f, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138, + 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe37f, 0x6000, + 0x9086, 0x0002, 0x1904, 0xe37f, 0x080c, 0xcd2a, 0x0138, 0x080c, + 0xcd3b, 0x1904, 0xe37f, 0x080c, 0xb813, 0x0038, 0x080c, 0x31e8, + 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92, 0x0804, + 0xe37f, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, + 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe578, 0x001e, + 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, + 0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe418, 0xe416, + 0xe416, 0xe416, 0xe416, 0xae92, 0xae92, 0xe416, 0x9006, 0x0005, + 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, + 0x2c00, 0x2009, 0x0020, 0x080c, 0xe5ae, 0x001e, 0x004e, 0x2019, + 0x0002, 0x080c, 0xe134, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, + 0x080c, 0xcb35, 0x0140, 0x6014, 0x904d, 0x080c, 0xc768, 0x687b, + 0x0005, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae92, 0x9085, 0x0001, + 0x0005, 0x2001, 0x0001, 0x080c, 0x653b, 0x0156, 0x0016, 0x0026, + 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, + 0xbe09, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, + 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, + 0x8000, 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, + 0xe4b1, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04, + 0xe4b1, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, + 0xe5df, 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, 0xe80b, 0x080c, 0xd248, 0x080c, 0x1a5e, + 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0120, 0x0046, + 0x080c, 0xe551, 0x004e, 0x009e, 0x080c, 0xae92, 0x88ff, 0x1198, + 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, + 0xe466, 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, 0xa69c, 0x009e, 0x008e, + 0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, - 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x6600, 0x11a0, - 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xe7ce, - 0x004e, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, 0x008e, 0x903e, - 0x080c, 0xa72d, 0x080c, 0xe436, 0x003e, 0x001e, 0x8108, 0x1f04, - 0xe50b, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, - 0x0016, 0x00f6, 0x080c, 0xcb19, 0x0198, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, - 0xab82, 0x080c, 0x6c79, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6c79, - 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, - 0x080c, 0x6c79, 0x2f48, 0x0cb8, 0x080c, 0x6c79, 0x0c88, 0x00e6, - 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800, - 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06, 0x0188, - 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150, 0x6320, - 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, - 0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, - 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, - 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006, 0x080c, - 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xaae2, 0xa867, 0x010d, 0xa88e, - 0x0026, 0x2010, 0x080c, 0xcb09, 0x2001, 0x0000, 0x0120, 0x2200, - 0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, - 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x198e, - 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6c79, 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, 0x1987, 0x2004, - 0x601a, 0x080c, 0x90c7, 0x080c, 0x9664, 0x001e, 0x0005, 0xa001, - 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, - 0xce4e, 0x0030, 0x080c, 0xe7ea, 0x080c, 0x8689, 0x080c, 0xae47, - 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xe61d, - 0xe61d, 0xe61d, 0xe61f, 0xe61d, 0xe61f, 0xe61f, 0xe61d, 0xe61f, - 0xe61d, 0xe61d, 0xe61d, 0xe61d, 0xe61d, 0x9006, 0x0005, 0x9085, - 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, - 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe643, 0xe636, - 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0x6007, 0x003b, - 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x90c7, - 0x080c, 0x9664, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xe7ea, - 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, - 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe69c, 0x6814, - 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, - 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, - 0x9664, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xe713, - 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0dd5, - 0x0804, 0xe713, 0x2048, 0x080c, 0xcb1b, 0x1130, 0x0028, 0x2048, - 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, - 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, - 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdf6e, 0x0804, 0xe713, - 0x2009, 0x0041, 0x0804, 0xe70d, 0x9186, 0x0005, 0x15a0, 0x6814, - 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xe636, - 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dd5, 0x0804, 0xe657, 0x6007, - 0x003a, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00c6, - 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, - 0xe713, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, - 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1725, 0x00fe, - 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0fff, 0x090c, 0x0dd5, - 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, 0x6c79, 0x2019, 0x0045, 0x6008, 0x2068, - 0x080c, 0xe115, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, - 0x901e, 0x631a, 0x6342, 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, - 0x0007, 0x080c, 0xdf6e, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, - 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, - 0x0027, 0x1178, 0x080c, 0x955f, 0x0036, 0x0096, 0x6014, 0x2048, - 0x2019, 0x0004, 0x080c, 0xe530, 0x009e, 0x003e, 0x080c, 0x9664, - 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xaedd, 0x0005, 0xe746, - 0xe744, 0xe744, 0xe744, 0xe744, 0xe744, 0xe746, 0xe744, 0xe744, - 0xe744, 0xe744, 0xe744, 0xe744, 0x080c, 0x0dd5, 0x080c, 0x955f, - 0x6003, 0x000c, 0x080c, 0x9664, 0x0005, 0x9182, 0x0092, 0x1220, - 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaedd, 0x0005, 0xe764, - 0xe764, 0xe764, 0xe764, 0xe766, 0xe786, 0xe764, 0xe764, 0xe764, - 0xe764, 0xe764, 0xe764, 0xe764, 0x080c, 0x0dd5, 0x00d6, 0x2c68, - 0x080c, 0xadf1, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, - 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, - 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x080c, 0x90c7, 0x080c, - 0x9664, 0x2d60, 0x080c, 0xae47, 0x00de, 0x0005, 0x080c, 0xae47, - 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, - 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003, - 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988, - 0x2004, 0x6042, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0, - 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, - 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, 0x2004, - 0x9100, 0x9080, 0x000a, 0x6042, 0x6010, 0x00b6, 0x2058, 0xb8bc, - 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, - 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, - 0x00e6, 0x6154, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, - 0x6054, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x8689, 0x080c, - 0xae47, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, - 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x2068, - 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, - 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182c, - 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, 0xbe03, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, - 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbe03, 0x009e, - 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, - 0x080c, 0x5fae, 0x080c, 0x2f96, 0x00ee, 0x0005, 0x0096, 0x0026, - 0x080c, 0x0fff, 0x090c, 0x0dd5, 0xa85c, 0x9080, 0x001a, 0x20a0, - 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046, - 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041, - 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294, - 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038, - 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c, - 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244, - 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2, - 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a, - 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210, - 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210, - 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6, - 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be, - 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013, - 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210, - 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011, - 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, - 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a, - 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004, - 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205, - 0x2013, 0x0000, 0x002e, 0x080c, 0x6c79, 0x009e, 0x0005, 0x00e6, - 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, - 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6, - 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, - 0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, - 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578, - 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, - 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe5be, 0x01b8, - 0x080c, 0xe5ce, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, - 0x080c, 0x1a5e, 0x001e, 0x080c, 0xcd10, 0x1110, 0x080c, 0x31e1, - 0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x080c, 0xae78, 0x9ce0, - 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, - 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, - 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, - 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036, - 0x0046, 0x080c, 0xd216, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, - 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c, - 0x4cbc, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, 0x1128, - 0x080c, 0xa7ee, 0x080c, 0xae78, 0x9006, 0x0005, 0x00e6, 0x00c6, - 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454, 0x7074, - 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, 0x9086, - 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, 0x9ce0, - 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60, 0x9085, - 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, - 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1840, - 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, 0x7000, - 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, - 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, - 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, - 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6, 0x0021, - 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, 0x1220, - 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, 0xfff4, - 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69, 0x00ee, - 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, - 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, - 0x000b, 0x079e, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, - 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, - 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x79a8, 0x000b, 0x50ee, - 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, - 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, - 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x1668, 0x000b, 0x808c, - 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000, 0x4047, - 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003, 0x4022, - 0x0000, 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009, 0xff00, - 0x0008, 0xffe0, 0x0009, 0x0500, 0x0008, 0x0a93, 0x000b, 0x4447, - 0x0002, 0x0e90, 0x0003, 0x0bfe, 0x0008, 0x11a0, 0x0001, 0x126e, - 0x0003, 0x0ca0, 0x0001, 0x126e, 0x0003, 0x9180, 0x0001, 0x0004, - 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008, 0x0000, - 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, 0x8066, - 0x0000, 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000, 0x43e0, - 0x0001, 0x0e6b, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0, - 0x0001, 0x0e6b, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x8060, - 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0019, - 0x0000, 0x444d, 0x000b, 0x0240, 0x0002, 0x0a68, 0x0003, 0x00fe, - 0x0000, 0x326b, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003, 0x9180, - 0x0001, 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008, 0x0003, - 0x0008, 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003, 0x112a, - 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, - 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, - 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4468, - 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e5c, 0x0003, 0x00fe, - 0x0000, 0x43e0, 0x0001, 0x0e5c, 0x0003, 0x1734, 0x0000, 0x1530, - 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, - 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008, 0x0003, - 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5880, - 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003, 0x5884, - 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b, 0x0d00, - 0x0000, 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, - 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8, - 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003, 0x1a60, - 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, - 0x0008, 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc0, - 0x000b, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, - 0x0000, 0x08af, 0x0003, 0x14c0, 0x000b, 0x01fe, 0x0008, 0x0580, - 0x0009, 0x7f06, 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, - 0x0008, 0x0690, 0x0001, 0x10af, 0x0003, 0x7f08, 0x0008, 0x84c0, - 0x0001, 0xff00, 0x0008, 0x08c0, 0x0003, 0x00fe, 0x0000, 0x34b6, - 0x000b, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08b1, - 0x0003, 0x00ba, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, - 0x000a, 0x08b6, 0x000b, 0x3946, 0x000a, 0x0cc7, 0x0003, 0x0000, - 0x0007, 0x3943, 0x000a, 0x08c7, 0x000b, 0x00ba, 0x0003, 0x00fe, - 0x0000, 0x34c5, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c7, - 0x0003, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x1c60, - 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc, - 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, - 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, - 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, - 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446, - 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a, 0x08e2, - 0x0003, 0x0d4a, 0x0008, 0x58e2, 0x0003, 0x3efe, 0x0008, 0x7f4f, - 0x0002, 0x08e9, 0x000b, 0x8000, 0x0000, 0x0001, 0x0000, 0x0092, - 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, - 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, - 0x0008, 0x2b24, 0x0008, 0x58f2, 0x000b, 0x8054, 0x0008, 0x0002, - 0x0000, 0x1242, 0x0002, 0x0940, 0x0003, 0x3a45, 0x000a, 0x092f, - 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x08ff, - 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, - 0x0000, 0x092a, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, - 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4508, - 0x000b, 0x00fe, 0x0000, 0x3527, 0x000b, 0x1c60, 0x0000, 0x8062, - 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4510, - 0x000b, 0x00fe, 0x0000, 0x3243, 0x000b, 0x0038, 0x0000, 0x0060, - 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000, 0x0009, - 0x0008, 0x4519, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, - 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, - 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4523, 0x000b, 0x003a, - 0x0008, 0x1dfe, 0x0000, 0x0104, 0x000b, 0x0036, 0x0008, 0x00c8, - 0x000c, 0x0140, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, - 0x0000, 0x2000, 0x0000, 0x0140, 0x000b, 0x3a44, 0x0002, 0x0a71, - 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, - 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3640, 0x0003, 0x26fe, - 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, - 0x0009, 0x0d52, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5940, - 0x0003, 0x50ee, 0x000b, 0x3a46, 0x000a, 0x0d52, 0x000b, 0x3a47, - 0x0002, 0x094d, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, - 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019c, - 0x0003, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, - 0x000a, 0x0e3a, 0x0003, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, - 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4557, 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, 0x4571, 0x0003, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e56, - 0x0003, 0x124b, 0x0002, 0x097a, 0x0003, 0x2e4d, 0x0002, 0x2e4d, - 0x0002, 0x0a40, 0x0003, 0x3a46, 0x000a, 0x0d8a, 0x000b, 0x597c, - 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0998, - 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x021b, 0x000c, 0x1948, - 0x000a, 0x0987, 0x000b, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, - 0x000c, 0x0198, 0x000b, 0x1948, 0x000a, 0x098e, 0x000b, 0x1243, - 0x000a, 0x0a43, 0x0003, 0x194d, 0x000a, 0x0992, 0x0003, 0x1243, - 0x000a, 0x0a4a, 0x0003, 0x5992, 0x0003, 0x8054, 0x0008, 0x0004, - 0x0000, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, 0x000c, 0x8074, - 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, - 0x0000, 0x3a42, 0x0002, 0x0da2, 0x000b, 0x15fe, 0x0008, 0x3461, - 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, 0x8010, - 0x0008, 0x000c, 0x0008, 0x021b, 0x000c, 0x000a, 0x000b, 0xbbe0, - 0x0009, 0x0030, 0x0008, 0x0db8, 0x0003, 0x18fe, 0x0000, 0x3ce0, - 0x0009, 0x09b5, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x09b5, - 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x0208, - 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0208, 0x000b, 0xbbe0, - 0x0009, 0x0032, 0x0000, 0x0dbd, 0x0003, 0x3c1e, 0x0008, 0x0208, - 0x000b, 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dc2, 0x000b, 0x3c20, - 0x0000, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008, 0x0dc8, - 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0384, 0x000b, 0xbbe0, - 0x0009, 0x0036, 0x0008, 0x0aa5, 0x000b, 0xbbe0, 0x0009, 0x0037, - 0x0000, 0x0de9, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db5, - 0x000b, 0x8076, 0x0008, 0x0040, 0x0000, 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, 0x45e0, - 0x000b, 0x0210, 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, - 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x019c, - 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0dfb, 0x000b, 0x18fe, - 0x0000, 0x3ce0, 0x0009, 0x09f8, 0x0003, 0x15fe, 0x0008, 0x3ce0, - 0x0009, 0x0db1, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, - 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x0268, 0x000b, 0x8076, - 0x0008, 0x0042, 0x0008, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0016, - 0x0000, 0x0e08, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008, 0x3a44, - 0x0002, 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000, 0x8072, - 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, - 0x0000, 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, - 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x0214, 0x0003, 0x1930, - 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, - 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, - 0x0008, 0x4619, 0x000b, 0x4000, 0x000f, 0x221e, 0x000b, 0x0870, - 0x0008, 0x4000, 0x000f, 0x7e1b, 0x000b, 0xbbe0, 0x0009, 0x0030, - 0x0008, 0x0e1b, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0a2c, - 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a2c, 0x0003, 0x020b, - 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x022e, 0x0003, 0x8076, - 0x0008, 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000, 0x021b, - 0x0003, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a37, 0x0003, 0x8074, - 0x0000, 0x0706, 0x0000, 0x0239, 0x0003, 0x8074, 0x0000, 0x0703, - 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0276, - 0x000b, 0x8010, 0x0008, 0x0008, 0x0000, 0x0276, 0x000b, 0x8010, - 0x0008, 0x0022, 0x0008, 0x0276, 0x000b, 0x0210, 0x0004, 0x8010, - 0x0008, 0x0007, 0x0000, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, - 0x000c, 0x0282, 0x0003, 0x0210, 0x0004, 0x8010, 0x0008, 0x001b, - 0x0008, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, 0x000c, 0x8074, - 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, - 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008, 0x0276, - 0x000b, 0x8010, 0x0008, 0x0005, 0x0008, 0x0276, 0x000b, 0x1648, - 0x000a, 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, - 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003, 0x3a44, - 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0276, 0x000b, 0x8010, - 0x0008, 0x0003, 0x0008, 0x027a, 0x000b, 0x8010, 0x0008, 0x000b, - 0x0000, 0x027a, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x027a, - 0x000b, 0x3a47, 0x0002, 0x0d40, 0x000b, 0x8010, 0x0008, 0x0006, - 0x0008, 0x027a, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, - 0x0000, 0x3000, 0x0008, 0x021b, 0x000c, 0x0231, 0x0004, 0x3a40, - 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x021b, - 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, - 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, - 0x0002, 0x0a8d, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, - 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, - 0x0002, 0x0c0a, 0x000b, 0x026b, 0x000b, 0x808c, 0x0008, 0x0000, - 0x0008, 0x4447, 0x0002, 0x0ab9, 0x0003, 0xc0c0, 0x0001, 0x00ff, - 0x0008, 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0e90, 0x0003, 0xc1e0, - 0x0001, 0xffff, 0x0008, 0x0e90, 0x0003, 0x8010, 0x0008, 0x0013, - 0x0000, 0x021b, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008, 0x000a, - 0x000b, 0x3a40, 0x000a, 0x0eb6, 0x000b, 0x8074, 0x0000, 0x0200, - 0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000, 0x8000, - 0x0000, 0x43e0, 0x0001, 0x0eb4, 0x0003, 0x42fe, 0x0000, 0xffc0, - 0x0001, 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0a90, 0x000b, 0x0d08, - 0x0008, 0x0309, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x000a, - 0x000b, 0x038d, 0x0004, 0x808c, 0x0008, 0x0001, 0x0000, 0x04fe, - 0x0008, 0x3370, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008, 0x0001, - 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x46c3, 0x0003, 0x0004, - 0x0000, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, 0x80e0, - 0x0001, 0x0004, 0x0000, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0005, - 0x0008, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008, 0x0add, - 0x000b, 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x82e0, - 0x0009, 0x0600, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0500, - 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000, 0x0f70, - 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009, 0x1000, - 0x0000, 0x0b09, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0ae8, - 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0460, - 0x0000, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x2209, 0x0008, 0x46ee, 0x0003, 0x11fe, 0x0000, 0x3304, - 0x0003, 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000, 0x0400, - 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x46f8, - 0x000b, 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008, 0x03e0, - 0x0009, 0x0f01, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000, 0x0046, - 0x0003, 0x9180, 0x0001, 0x0003, 0x0008, 0x02eb, 0x0003, 0x8072, - 0x0000, 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000, 0x0361, - 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0b0f, 0x0003, 0x8072, - 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0346, 0x000c, 0x11fe, - 0x0000, 0x0f17, 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x8010, - 0x0008, 0x000e, 0x0000, 0x0361, 0x0003, 0x8060, 0x0000, 0x0400, - 0x0000, 0x04fe, 0x0008, 0x0f2c, 0x0003, 0x808c, 0x0008, 0x0000, - 0x0008, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x0009, 0x0008, 0x4722, 0x000b, 0x0060, 0x0008, 0x8062, - 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0008, 0x8066, - 0x0000, 0x0412, 0x0000, 0x472a, 0x0003, 0x0343, 0x0003, 0x808c, - 0x0008, 0x0001, 0x0000, 0x0460, 0x0000, 0x8062, 0x0008, 0x002b, - 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4733, 0x000b, 0x8066, - 0x0000, 0x220a, 0x0008, 0x4736, 0x000b, 0x42fe, 0x0000, 0xffc0, - 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x8060, 0x0000, 0x0400, - 0x0000, 0x9180, 0x0001, 0x0002, 0x0000, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x041a, 0x0008, 0x4742, 0x000b, 0x8072, 0x0000, 0x0400, - 0x0000, 0x0046, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x1362, - 0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x474b, 0x000b, 0x02fe, - 0x0008, 0x03e0, 0x0009, 0x0f51, 0x0003, 0x0d22, 0x0000, 0x4000, - 0x000f, 0x8280, 0x0009, 0x0002, 0x0000, 0x1380, 0x0001, 0x7f62, - 0x0008, 0x8066, 0x0000, 0x2209, 0x0008, 0x4757, 0x0003, 0x0200, - 0x000a, 0xffc0, 0x0001, 0x0007, 0x0000, 0x7f06, 0x0000, 0x1362, - 0x0008, 0x8066, 0x0000, 0x060a, 0x0008, 0x475f, 0x000b, 0x4000, - 0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x2f44, 0x000a, 0x2f44, - 0x000a, 0x0e6b, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x8074, - 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x5b6c, - 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b, 0x3a44, - 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x8010, - 0x0008, 0x0011, 0x0008, 0x021b, 0x000c, 0x42fe, 0x0000, 0xffc0, - 0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008, 0x021b, 0x000c, 0x4310, - 0x0008, 0x027a, 0x000b, 0x3941, 0x0002, 0x0b81, 0x0003, 0x4000, - 0x000f, 0x8072, 0x0000, 0x0404, 0x0008, 0x4000, 0x000f, 0x8010, - 0x0008, 0x0012, 0x0008, 0x021b, 0x000c, 0x0346, 0x000c, 0x1110, - 0x0000, 0x021b, 0x000c, 0x11fe, 0x0000, 0x0f87, 0x000b, 0x000a, - 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, 0xc3c0, - 0x0001, 0xff00, 0x0008, 0x00d0, 0x0009, 0x0bb2, 0x0003, 0x0d0a, - 0x0000, 0x8580, 0x0001, 0x1000, 0x0000, 0x7f62, 0x0008, 0x8060, - 0x0000, 0x0400, 0x0000, 0x8066, 0x0000, 0x0809, 0x0000, 0x479c, - 0x000b, 0x04fe, 0x0008, 0x33ab, 0x0003, 0x0460, 0x0000, 0x8062, - 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0211, 0x0000, 0x47a4, - 0x0003, 0x01fe, 0x0008, 0x00e0, 0x0009, 0x0fab, 0x0003, 0x02fe, - 0x0008, 0x43e0, 0x0001, 0x0bb1, 0x0003, 0x0500, 0x0002, 0x7f0a, - 0x0000, 0xffe0, 0x0009, 0x0800, 0x0000, 0x0f95, 0x000b, 0x0d08, - 0x0008, 0x4000, 0x000f, 0x43fe, 0x0008, 0x3e80, 0x0001, 0xffc0, - 0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x0809, 0x0000, 0x47ba, 0x0003, 0x8060, 0x0000, 0x0400, - 0x0000, 0x84c0, 0x0001, 0xff00, 0x0008, 0x7f60, 0x000a, 0x7f60, - 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, - 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0xff80, 0x0009, 0x1000, - 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000, 0x47cc, - 0x000b, 0x4000, 0x000f, 0xd7f4, 0xebe5, 0x0001, 0x0002, 0x0004, - 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, - 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x45cc + 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff, + 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, + 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, 0x903e, 0x080c, 0xa747, + 0x080c, 0xe457, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe4e4, + 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, + 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, + 0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, + 0x903e, 0x080c, 0xa747, 0x2c20, 0x080c, 0xe457, 0x005e, 0x007e, + 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, + 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff, + 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, + 0xe7ef, 0x004e, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, + 0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x003e, 0x001e, 0x8108, + 0x1f04, 0xe52c, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, + 0x0005, 0x0016, 0x00f6, 0x080c, 0xcb33, 0x0198, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, + 0x0000, 0xab82, 0x080c, 0x6c81, 0x2f48, 0x0cb0, 0xab82, 0x080c, + 0x6c81, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, + 0x0000, 0x080c, 0x6c81, 0x2f48, 0x0cb8, 0x080c, 0x6c81, 0x0c88, + 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, + 0x1800, 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06, + 0x0188, 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150, + 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424, + 0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, + 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, + 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006, + 0x080c, 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xaae2, 0xa867, 0x010d, + 0xa88e, 0x0026, 0x2010, 0x080c, 0xcb23, 0x2001, 0x0000, 0x0120, + 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, + 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, + 0x198e, 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6c81, 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, 0x1987, + 0x2004, 0x601a, 0x080c, 0x90f0, 0x080c, 0x968d, 0x001e, 0x0005, + 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, + 0x080c, 0xce68, 0x0030, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c, + 0xae61, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, + 0xe63e, 0xe63e, 0xe63e, 0xe640, 0xe63e, 0xe640, 0xe640, 0xe63e, + 0xe640, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0x9006, 0x0005, + 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, + 0x0002, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe664, + 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0x6007, + 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, + 0x90f0, 0x080c, 0x968d, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, + 0xe80b, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, + 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe6bd, + 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, + 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, + 0xe734, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, + 0x0dd5, 0x0804, 0xe734, 0x2048, 0x080c, 0xcb35, 0x1130, 0x0028, + 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, + 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, + 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdf8d, 0x0804, + 0xe734, 0x2009, 0x0041, 0x0804, 0xe72e, 0x9186, 0x0005, 0x15a0, + 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, + 0xe657, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dd5, 0x0804, 0xe678, + 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d, + 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, + 0x1904, 0xe734, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, + 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1725, + 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0fff, 0x090c, + 0x0dd5, 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, 0x6c81, 0x2019, 0x0045, 0x6008, + 0x2068, 0x080c, 0xe134, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, + 0x0007, 0x901e, 0x631a, 0x6342, 0x003e, 0x0038, 0x6043, 0x0000, + 0x6003, 0x0007, 0x080c, 0xdf8d, 0x00ce, 0x00de, 0x009e, 0x0005, + 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, + 0x9186, 0x0027, 0x1178, 0x080c, 0x9588, 0x0036, 0x0096, 0x6014, + 0x2048, 0x2019, 0x0004, 0x080c, 0xe551, 0x009e, 0x003e, 0x080c, + 0x968d, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xaef7, 0x0005, + 0xe767, 0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0xe767, 0xe765, + 0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0x080c, 0x0dd5, 0x080c, + 0x9588, 0x6003, 0x000c, 0x080c, 0x968d, 0x0005, 0x9182, 0x0092, + 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaef7, 0x0005, + 0xe785, 0xe785, 0xe785, 0xe785, 0xe787, 0xe7a7, 0xe785, 0xe785, + 0xe785, 0xe785, 0xe785, 0xe785, 0xe785, 0x080c, 0x0dd5, 0x00d6, + 0x2c68, 0x080c, 0xae0b, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, + 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, + 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x080c, 0x90f0, + 0x080c, 0x968d, 0x2d60, 0x080c, 0xae61, 0x00de, 0x0005, 0x080c, + 0xae61, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, + 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, + 0x1988, 0x2004, 0x6042, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, + 0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, + 0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, + 0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010, 0x00b6, 0x2058, + 0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, + 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, + 0x00c6, 0x00e6, 0x6154, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, + 0x1118, 0x6054, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x86b2, + 0x080c, 0xae61, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, + 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, + 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, + 0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, + 0x182c, 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, 0xbe1d, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, + 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbe1d, + 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, + 0x1800, 0x080c, 0x5fad, 0x080c, 0x2f96, 0x00ee, 0x0005, 0x0096, + 0x0026, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0xa85c, 0x9080, 0x001a, + 0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, + 0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, + 0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, + 0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, + 0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, + 0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, + 0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, + 0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, + 0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, + 0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, + 0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, + 0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, + 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, + 0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, + 0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, + 0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, + 0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, + 0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, + 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, + 0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, + 0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6c81, 0x009e, 0x0005, + 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, + 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, + 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, + 0x0126, 0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, + 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, + 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, + 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe5df, + 0x01b8, 0x080c, 0xe5ef, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, + 0x0016, 0x080c, 0x1a5e, 0x001e, 0x080c, 0xcd2a, 0x1110, 0x080c, + 0x31e8, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92, + 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, + 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, + 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, + 0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, + 0x0036, 0x0046, 0x080c, 0xd230, 0x0168, 0x2019, 0xffff, 0x9005, + 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, + 0x080c, 0x4cbb, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, + 0x1128, 0x080c, 0xa808, 0x080c, 0xae92, 0x9006, 0x0005, 0x00e6, + 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454, + 0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, + 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, + 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60, + 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, + 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, + 0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, + 0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, + 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, + 0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, + 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6, + 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, + 0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, + 0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69, + 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, + 0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, + 0x0003, 0x000b, 0x079e, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, + 0x0010, 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, + 0x8060, 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x79a8, 0x000b, + 0x50ee, 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, + 0x0c0a, 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, + 0x7000, 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x1668, 0x000b, + 0x808c, 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000, + 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003, + 0x4022, 0x0000, 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009, + 0xff00, 0x0008, 0xffe0, 0x0009, 0x0500, 0x0008, 0x0a93, 0x000b, + 0x4447, 0x0002, 0x0e90, 0x0003, 0x0bfe, 0x0008, 0x11a0, 0x0001, + 0x126e, 0x0003, 0x0ca0, 0x0001, 0x126e, 0x0003, 0x9180, 0x0001, + 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008, + 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, + 0x8066, 0x0000, 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000, + 0x43e0, 0x0001, 0x0e6b, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, + 0x02e0, 0x0001, 0x0e6b, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, + 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, + 0x0019, 0x0000, 0x444d, 0x000b, 0x0240, 0x0002, 0x0a68, 0x0003, + 0x00fe, 0x0000, 0x326b, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003, + 0x9180, 0x0001, 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008, + 0x0003, 0x0008, 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003, + 0x112a, 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, + 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, + 0x8062, 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, + 0x4468, 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e5c, 0x0003, + 0x00fe, 0x0000, 0x43e0, 0x0001, 0x0e5c, 0x0003, 0x1734, 0x0000, + 0x1530, 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, + 0x0010, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008, + 0x0003, 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, + 0x5880, 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003, + 0x5884, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b, + 0x0d00, 0x0000, 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, + 0x8074, 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, + 0x00c8, 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003, + 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, + 0x0231, 0x0008, 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, + 0x0cc0, 0x000b, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, + 0x0400, 0x0000, 0x08af, 0x0003, 0x14c0, 0x000b, 0x01fe, 0x0008, + 0x0580, 0x0009, 0x7f06, 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, + 0x00ff, 0x0008, 0x0690, 0x0001, 0x10af, 0x0003, 0x7f08, 0x0008, + 0x84c0, 0x0001, 0xff00, 0x0008, 0x08c0, 0x0003, 0x00fe, 0x0000, + 0x34b6, 0x000b, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, + 0x08b1, 0x0003, 0x00ba, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, + 0x3945, 0x000a, 0x08b6, 0x000b, 0x3946, 0x000a, 0x0cc7, 0x0003, + 0x0000, 0x0007, 0x3943, 0x000a, 0x08c7, 0x000b, 0x00ba, 0x0003, + 0x00fe, 0x0000, 0x34c5, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, + 0x00c7, 0x0003, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, + 0x1c60, 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, + 0x44cc, 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, + 0x1f43, 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, + 0x0348, 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, + 0x0d06, 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, + 0x0446, 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a, + 0x08e2, 0x0003, 0x0d4a, 0x0008, 0x58e2, 0x0003, 0x3efe, 0x0008, + 0x7f4f, 0x0002, 0x08e9, 0x000b, 0x8000, 0x0000, 0x0001, 0x0000, + 0x0092, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, + 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, + 0x2b24, 0x0008, 0x2b24, 0x0008, 0x58f2, 0x000b, 0x8054, 0x0008, + 0x0002, 0x0000, 0x1242, 0x0002, 0x0940, 0x0003, 0x3a45, 0x000a, + 0x092f, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, + 0x08ff, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, + 0x7f3c, 0x0000, 0x092a, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, + 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, + 0x4508, 0x000b, 0x00fe, 0x0000, 0x3527, 0x000b, 0x1c60, 0x0000, + 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, + 0x4510, 0x000b, 0x00fe, 0x0000, 0x3243, 0x000b, 0x0038, 0x0000, + 0x0060, 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000, + 0x0009, 0x0008, 0x4519, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, + 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, + 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4523, 0x000b, + 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0104, 0x000b, 0x0036, 0x0008, + 0x00c8, 0x000c, 0x0140, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, + 0x8072, 0x0000, 0x2000, 0x0000, 0x0140, 0x000b, 0x3a44, 0x0002, + 0x0a71, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, + 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3640, 0x0003, + 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, + 0x00d0, 0x0009, 0x0d52, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, + 0x5940, 0x0003, 0x50ee, 0x000b, 0x3a46, 0x000a, 0x0d52, 0x000b, + 0x3a47, 0x0002, 0x094d, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, + 0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, + 0x019c, 0x0003, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, + 0x1246, 0x000a, 0x0e3a, 0x0003, 0x1a60, 0x0000, 0x8062, 0x0008, + 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4557, 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, 0x4571, 0x0003, 0x92c0, 0x0009, 0x0780, 0x0008, + 0x0e56, 0x0003, 0x124b, 0x0002, 0x097a, 0x0003, 0x2e4d, 0x0002, + 0x2e4d, 0x0002, 0x0a40, 0x0003, 0x3a46, 0x000a, 0x0d8a, 0x000b, + 0x597c, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, + 0x0998, 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x021b, 0x000c, + 0x1948, 0x000a, 0x0987, 0x000b, 0x0210, 0x0004, 0x1810, 0x0000, + 0x021b, 0x000c, 0x0198, 0x000b, 0x1948, 0x000a, 0x098e, 0x000b, + 0x1243, 0x000a, 0x0a43, 0x0003, 0x194d, 0x000a, 0x0992, 0x0003, + 0x1243, 0x000a, 0x0a4a, 0x0003, 0x5992, 0x0003, 0x8054, 0x0008, + 0x0004, 0x0000, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, 0x000c, + 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, + 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da2, 0x000b, 0x15fe, 0x0008, + 0x3461, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, + 0x8010, 0x0008, 0x000c, 0x0008, 0x021b, 0x000c, 0x000a, 0x000b, + 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db8, 0x0003, 0x18fe, 0x0000, + 0x3ce0, 0x0009, 0x09b5, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, + 0x09b5, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, + 0x0208, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0208, 0x000b, + 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbd, 0x0003, 0x3c1e, 0x0008, + 0x0208, 0x000b, 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dc2, 0x000b, + 0x3c20, 0x0000, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008, + 0x0dc8, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0384, 0x000b, + 0xbbe0, 0x0009, 0x0036, 0x0008, 0x0aa5, 0x000b, 0xbbe0, 0x0009, + 0x0037, 0x0000, 0x0de9, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, + 0x0db5, 0x000b, 0x8076, 0x0008, 0x0040, 0x0000, 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, + 0x45e0, 0x000b, 0x0210, 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, + 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, + 0x019c, 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0dfb, 0x000b, + 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09f8, 0x0003, 0x15fe, 0x0008, + 0x3ce0, 0x0009, 0x0db1, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, + 0x0040, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x0268, 0x000b, + 0x8076, 0x0008, 0x0042, 0x0008, 0x0208, 0x000b, 0xbbe0, 0x0009, + 0x0016, 0x0000, 0x0e08, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008, + 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000, + 0x8072, 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, + 0x8072, 0x0000, 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, + 0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x0214, 0x0003, + 0x1930, 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, + 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, + 0x000a, 0x0008, 0x4619, 0x000b, 0x4000, 0x000f, 0x221e, 0x000b, + 0x0870, 0x0008, 0x4000, 0x000f, 0x7e1b, 0x000b, 0xbbe0, 0x0009, + 0x0030, 0x0008, 0x0e1b, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, + 0x0a2c, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a2c, 0x0003, + 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x022e, 0x0003, + 0x8076, 0x0008, 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000, + 0x021b, 0x0003, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a37, 0x0003, + 0x8074, 0x0000, 0x0706, 0x0000, 0x0239, 0x0003, 0x8074, 0x0000, + 0x0703, 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, + 0x0276, 0x000b, 0x8010, 0x0008, 0x0008, 0x0000, 0x0276, 0x000b, + 0x8010, 0x0008, 0x0022, 0x0008, 0x0276, 0x000b, 0x0210, 0x0004, + 0x8010, 0x0008, 0x0007, 0x0000, 0x021b, 0x000c, 0x1810, 0x0000, + 0x021b, 0x000c, 0x0282, 0x0003, 0x0210, 0x0004, 0x8010, 0x0008, + 0x001b, 0x0008, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, 0x000c, + 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, + 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008, + 0x0276, 0x000b, 0x8010, 0x0008, 0x0005, 0x0008, 0x0276, 0x000b, + 0x1648, 0x000a, 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000, + 0x8010, 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003, + 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0276, 0x000b, + 0x8010, 0x0008, 0x0003, 0x0008, 0x027a, 0x000b, 0x8010, 0x0008, + 0x000b, 0x0000, 0x027a, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, + 0x027a, 0x000b, 0x3a47, 0x0002, 0x0d40, 0x000b, 0x8010, 0x0008, + 0x0006, 0x0008, 0x027a, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, + 0x8072, 0x0000, 0x3000, 0x0008, 0x021b, 0x000c, 0x0231, 0x0004, + 0x3a40, 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, + 0x021b, 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, + 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, + 0x2e4d, 0x0002, 0x0a8d, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, + 0x000a, 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, + 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x026b, 0x000b, 0x808c, 0x0008, + 0x0000, 0x0008, 0x4447, 0x0002, 0x0ab9, 0x0003, 0xc0c0, 0x0001, + 0x00ff, 0x0008, 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0e90, 0x0003, + 0xc1e0, 0x0001, 0xffff, 0x0008, 0x0e90, 0x0003, 0x8010, 0x0008, + 0x0013, 0x0000, 0x021b, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008, + 0x000a, 0x000b, 0x3a40, 0x000a, 0x0eb6, 0x000b, 0x8074, 0x0000, + 0x0200, 0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000, + 0x8000, 0x0000, 0x43e0, 0x0001, 0x0eb4, 0x0003, 0x42fe, 0x0000, + 0xffc0, 0x0001, 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0a90, 0x000b, + 0x0d08, 0x0008, 0x0309, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, + 0x000a, 0x000b, 0x038d, 0x0004, 0x808c, 0x0008, 0x0001, 0x0000, + 0x04fe, 0x0008, 0x3370, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008, + 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x46c3, 0x0003, + 0x0004, 0x0000, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, + 0x80e0, 0x0001, 0x0004, 0x0000, 0x0add, 0x000b, 0x80e0, 0x0001, + 0x0005, 0x0008, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008, + 0x0add, 0x000b, 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, + 0x82e0, 0x0009, 0x0600, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, + 0x0500, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000, + 0x0f70, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009, + 0x1000, 0x0000, 0x0b09, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, + 0x0ae8, 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, + 0x0460, 0x0000, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x2209, 0x0008, 0x46ee, 0x0003, 0x11fe, 0x0000, + 0x3304, 0x0003, 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000, + 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, + 0x46f8, 0x000b, 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008, + 0x03e0, 0x0009, 0x0f01, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000, + 0x0046, 0x0003, 0x9180, 0x0001, 0x0003, 0x0008, 0x02eb, 0x0003, + 0x8072, 0x0000, 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000, + 0x0361, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0b0f, 0x0003, + 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0346, 0x000c, + 0x11fe, 0x0000, 0x3717, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000, + 0x8010, 0x0008, 0x000e, 0x0000, 0x0361, 0x0003, 0x8060, 0x0000, + 0x0400, 0x0000, 0x04fe, 0x0008, 0x372c, 0x000b, 0x808c, 0x0008, + 0x0000, 0x0008, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0009, 0x0008, 0x4722, 0x000b, 0x0060, 0x0008, + 0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0008, + 0x8066, 0x0000, 0x0412, 0x0000, 0x472a, 0x0003, 0x0343, 0x0003, + 0x808c, 0x0008, 0x0001, 0x0000, 0x0460, 0x0000, 0x8062, 0x0008, + 0x002b, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4733, 0x000b, + 0x8066, 0x0000, 0x220a, 0x0008, 0x4736, 0x000b, 0x42fe, 0x0000, + 0xffc0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x8060, 0x0000, + 0x0400, 0x0000, 0x9180, 0x0001, 0x0002, 0x0000, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x041a, 0x0008, 0x4742, 0x000b, 0x8072, 0x0000, + 0x0400, 0x0000, 0x0046, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, + 0x1362, 0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x474b, 0x000b, + 0x02fe, 0x0008, 0x03e0, 0x0009, 0x0f51, 0x0003, 0x0d22, 0x0000, + 0x4000, 0x000f, 0x8280, 0x0009, 0x0002, 0x0000, 0x1380, 0x0001, + 0x7f62, 0x0008, 0x8066, 0x0000, 0x2209, 0x0008, 0x4757, 0x0003, + 0x0200, 0x000a, 0xffc0, 0x0001, 0x0007, 0x0000, 0x7f06, 0x0000, + 0x1362, 0x0008, 0x8066, 0x0000, 0x060a, 0x0008, 0x475f, 0x000b, + 0x4000, 0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x2f44, 0x000a, + 0x2f44, 0x000a, 0x0e6b, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, + 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, + 0x5b6c, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b, + 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, + 0x8010, 0x0008, 0x0011, 0x0008, 0x021b, 0x000c, 0x42fe, 0x0000, + 0xffc0, 0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008, 0x021b, 0x000c, + 0x4310, 0x0008, 0x027a, 0x000b, 0x3941, 0x0002, 0x0b81, 0x0003, + 0x4000, 0x000f, 0x8072, 0x0000, 0x0404, 0x0008, 0x4000, 0x000f, + 0x8010, 0x0008, 0x0012, 0x0008, 0x021b, 0x000c, 0x0346, 0x000c, + 0x1110, 0x0000, 0x021b, 0x000c, 0x11fe, 0x0000, 0x3787, 0x0003, + 0x000a, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, + 0xc3c0, 0x0001, 0xff00, 0x0008, 0x00d0, 0x0009, 0x0bb2, 0x0003, + 0x0d0a, 0x0000, 0x8580, 0x0001, 0x1000, 0x0000, 0x7f62, 0x0008, + 0x8060, 0x0000, 0x0400, 0x0000, 0x8066, 0x0000, 0x0809, 0x0000, + 0x479c, 0x000b, 0x04fe, 0x0008, 0x33ab, 0x0003, 0x0460, 0x0000, + 0x8062, 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0211, 0x0000, + 0x47a4, 0x0003, 0x01fe, 0x0008, 0x00e0, 0x0009, 0x0fab, 0x0003, + 0x02fe, 0x0008, 0x43e0, 0x0001, 0x0bb1, 0x0003, 0x0500, 0x0002, + 0x7f0a, 0x0000, 0xffe0, 0x0009, 0x0800, 0x0000, 0x0f95, 0x000b, + 0x0d08, 0x0008, 0x4000, 0x000f, 0x43fe, 0x0008, 0x3e80, 0x0001, + 0xffc0, 0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0809, 0x0000, 0x47ba, 0x0003, 0x8060, 0x0000, + 0x0400, 0x0000, 0x84c0, 0x0001, 0xff00, 0x0008, 0x7f60, 0x000a, + 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, + 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0xff80, 0x0009, + 0x1000, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000, + 0x47cc, 0x000b, 0x4000, 0x000f, 0x5ff4, 0xebed, 0x0001, 0x0002, + 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, + 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x2c40 }; #ifdef UNIQUE_FW_NAME -unsigned short fw2300ipx_length01 = 0xe9a6; +unsigned short fw2300ipx_length01 = 0xe9c7; #else -unsigned short risc_code_length01 = 0xe9a6; +unsigned short risc_code_length01 = 0xe9c7; #endif diff -Nru a/drivers/scsi/qla2xxx/ql2322_fw.c b/drivers/scsi/qla2xxx/ql2322_fw.c --- a/drivers/scsi/qla2xxx/ql2322_fw.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/qla2xxx/ql2322_fw.c Tue May 18 23:38:05 2004 @@ -18,7 +18,7 @@ *************************************************************************/ /* - * Firmware Version 3.02.26 (08:08 Mar 11, 2004) + * Firmware Version 3.02.28 (14:05 Apr 03, 2004) */ #ifdef UNIQUE_FW_NAME @@ -28,15 +28,15 @@ #endif #ifdef UNIQUE_FW_NAME -unsigned char fw2322ipx_version_str[] = {3, 2,26}; +unsigned char fw2322ipx_version_str[] = {3, 2,28}; #else -unsigned char firmware_version[] = {3, 2,26}; +unsigned char firmware_version[] = {3, 2,28}; #endif #ifdef UNIQUE_FW_NAME -#define fw2322ipx_VERSION_STRING "3.02.26" +#define fw2322ipx_VERSION_STRING "3.02.28" #else -#define FW_VERSION_STRING "3.02.26" +#define FW_VERSION_STRING "3.02.28" #endif #ifdef UNIQUE_FW_NAME @@ -50,12 +50,12 @@ #else unsigned short risc_code01[] = { #endif - 0x0470, 0x0000, 0x0000, 0xdf17, 0x0000, 0x0003, 0x0002, 0x001a, + 0x0470, 0x0000, 0x0000, 0xdf42, 0x0000, 0x0003, 0x0002, 0x001c, 0x0137, 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, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9, + 0x332e, 0x3032, 0x2e32, 0x3820, 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, @@ -82,97 +82,97 @@ 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, 0x0f52, 0x080c, 0x6030, 0x080c, 0xab5f, 0x080c, - 0x1109, 0x080c, 0x1328, 0x080c, 0x1bb0, 0x080c, 0x915c, 0x080c, - 0x0d0f, 0x080c, 0x108e, 0x080c, 0x346d, 0x080c, 0x77ed, 0x080c, - 0x6a7f, 0x080c, 0x88d4, 0x080c, 0x8538, 0x080c, 0x223f, 0x080c, - 0x7ec2, 0x080c, 0x2089, 0x080c, 0x21c3, 0x080c, 0x2234, 0x2091, + 0x1dd8, 0x080c, 0x0f52, 0x080c, 0x6037, 0x080c, 0xab83, 0x080c, + 0x1109, 0x080c, 0x1328, 0x080c, 0x1bb0, 0x080c, 0x918d, 0x080c, + 0x0d0f, 0x080c, 0x108e, 0x080c, 0x3474, 0x080c, 0x7801, 0x080c, + 0x6a8f, 0x080c, 0x8905, 0x080c, 0x8569, 0x080c, 0x223f, 0x080c, + 0x7ed6, 0x080c, 0x2089, 0x080c, 0x21c3, 0x080c, 0x2234, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x0943, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0937, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2071, 0x1800, 0x7003, 0x0000, 0x780c, 0x9084, 0x0030, 0x9086, 0x0000, 0x190c, 0x0d7d, 0x2071, 0x1800, - 0x7000, 0x908e, 0x0003, 0x1168, 0x080c, 0x4bc5, 0x080c, 0x3494, - 0x080c, 0x7855, 0x080c, 0x6fc7, 0x080c, 0x89b2, 0x080c, 0x8561, + 0x7000, 0x908e, 0x0003, 0x1168, 0x080c, 0x4bcc, 0x080c, 0x349b, + 0x080c, 0x7869, 0x080c, 0x6fd7, 0x080c, 0x89e3, 0x080c, 0x8592, 0x0c68, 0x000b, 0x0c88, 0x096d, 0x096e, 0x0b09, 0x096b, 0x0bc3, 0x0d0e, 0x0d0e, 0x0d0e, 0x080c, 0x0d7d, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x080c, - 0x0ea5, 0x080c, 0x74d5, 0x0150, 0x080c, 0x74f8, 0x15b0, 0x2079, - 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, 0x0478, 0x080c, 0x7406, + 0x0ea5, 0x080c, 0x74e9, 0x0150, 0x080c, 0x750c, 0x15b0, 0x2079, + 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, 0x0478, 0x080c, 0x741a, 0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x7098, 0x9086, 0x0028, - 0x1904, 0x0adc, 0x080c, 0x8530, 0x080c, 0x8522, 0x2001, 0x0161, + 0x1904, 0x0adc, 0x080c, 0x8561, 0x080c, 0x8553, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x2011, 0xffff, 0x080c, 0x2a44, - 0x7a28, 0x9295, 0x5e2c, 0x7a2a, 0x2011, 0x734b, 0x080c, 0x860d, - 0x2011, 0x733e, 0x080c, 0x8719, 0x2011, 0x5e87, 0x080c, 0x860d, - 0x2011, 0x8030, 0x901e, 0x7396, 0x04d0, 0x080c, 0x5734, 0x2079, - 0x0100, 0x7844, 0x9005, 0x1904, 0x0adc, 0x2011, 0x5e87, 0x080c, - 0x860d, 0x2011, 0x734b, 0x080c, 0x860d, 0x2011, 0x733e, 0x080c, - 0x8719, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, + 0x7a28, 0x9295, 0x5e2c, 0x7a2a, 0x2011, 0x735f, 0x080c, 0x863e, + 0x2011, 0x7352, 0x080c, 0x874a, 0x2011, 0x5e8e, 0x080c, 0x863e, + 0x2011, 0x8030, 0x901e, 0x7396, 0x04d0, 0x080c, 0x573b, 0x2079, + 0x0100, 0x7844, 0x9005, 0x1904, 0x0adc, 0x2011, 0x5e8e, 0x080c, + 0x863e, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352, 0x080c, + 0x874a, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x19a6, 0x2004, 0x9005, 0x1140, - 0x00c6, 0x2061, 0x0100, 0x080c, 0x5fd8, 0x00ce, 0x0804, 0x0adc, - 0x780f, 0x006b, 0x7a28, 0x080c, 0x74dd, 0x0118, 0x9295, 0x5e2c, + 0x00c6, 0x2061, 0x0100, 0x080c, 0x5fdf, 0x00ce, 0x0804, 0x0adc, + 0x780f, 0x006b, 0x7a28, 0x080c, 0x74f1, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c, 0x7a2a, 0x2011, 0x8010, 0x73d8, 0x2001, - 0x19a7, 0x2003, 0x0001, 0x080c, 0x2916, 0x080c, 0x4b00, 0x7248, + 0x19a7, 0x2003, 0x0001, 0x080c, 0x2916, 0x080c, 0x4b07, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, - 0x2001, 0x0390, 0x2003, 0x0400, 0x080c, 0xa872, 0x080c, 0xa04f, - 0x2011, 0x0004, 0x080c, 0xc824, 0x080c, 0xa88e, 0x080c, 0x6910, - 0x080c, 0x74d5, 0x1120, 0x080c, 0x2971, 0x0600, 0x0420, 0x080c, - 0x5fdf, 0x0140, 0x7097, 0x0001, 0x70d3, 0x0000, 0x080c, 0x5901, - 0x0804, 0x0adc, 0x080c, 0x56d3, 0xd094, 0x01a8, 0x2001, 0x0390, + 0x2001, 0x0390, 0x2003, 0x0400, 0x080c, 0xa896, 0x080c, 0xa073, + 0x2011, 0x0004, 0x080c, 0xc848, 0x080c, 0xa8b2, 0x080c, 0x6917, + 0x080c, 0x74e9, 0x1120, 0x080c, 0x2971, 0x0600, 0x0420, 0x080c, + 0x5fe6, 0x0140, 0x7097, 0x0001, 0x70d3, 0x0000, 0x080c, 0x5908, + 0x0804, 0x0adc, 0x080c, 0x56da, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, - 0x56d7, 0xd0d4, 0x1118, 0x080c, 0x2971, 0x1270, 0x2011, 0x180c, - 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d7, 0xd0d4, 0x1db8, 0x2011, + 0x56de, 0xd0d4, 0x1118, 0x080c, 0x2971, 0x1270, 0x2011, 0x180c, + 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56de, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, - 0x2012, 0x080c, 0x6a53, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, - 0x2012, 0x080c, 0x6a19, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, - 0x707f, 0x0000, 0x080c, 0x74d5, 0x1130, 0x70b0, 0x9005, 0x1168, - 0x080c, 0xcc7b, 0x0050, 0x080c, 0xcc7b, 0x70dc, 0xd09c, 0x1128, - 0x70b0, 0x9005, 0x0110, 0x080c, 0x5fb5, 0x70e7, 0x0000, 0x70e3, + 0x2012, 0x080c, 0x6a63, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, + 0x2012, 0x080c, 0x6a29, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, + 0x707f, 0x0000, 0x080c, 0x74e9, 0x1130, 0x70b0, 0x9005, 0x1168, + 0x080c, 0xcc9f, 0x0050, 0x080c, 0xcc9f, 0x70dc, 0xd09c, 0x1128, + 0x70b0, 0x9005, 0x0110, 0x080c, 0x5fbc, 0x70e7, 0x0000, 0x70e3, 0x0000, 0x70a7, 0x0000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101, - 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x74d5, 0x1178, 0x9016, + 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x74e9, 0x1178, 0x9016, 0x0016, 0x080c, 0x2713, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f, 0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d, 0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295, - 0x72de, 0x080c, 0x74d5, 0x0118, 0x9296, 0x0004, 0x0518, 0x2011, - 0x0001, 0x080c, 0xc824, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, - 0x0002, 0x00fe, 0x080c, 0x2fb2, 0x080c, 0xa872, 0x2011, 0x0005, - 0x080c, 0xa1ab, 0x080c, 0xa88e, 0x080c, 0x74d5, 0x0148, 0x00c6, + 0x72de, 0x080c, 0x74e9, 0x0118, 0x9296, 0x0004, 0x0518, 0x2011, + 0x0001, 0x080c, 0xc848, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, + 0x0002, 0x00fe, 0x080c, 0x2fb2, 0x080c, 0xa896, 0x2011, 0x0005, + 0x080c, 0xa1cf, 0x080c, 0xa8b2, 0x080c, 0x74e9, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2713, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x00e0, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, - 0x080c, 0xa872, 0x2011, 0x0005, 0x080c, 0xa1ab, 0x080c, 0xa88e, - 0x080c, 0x74d5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, + 0x080c, 0xa896, 0x2011, 0x0005, 0x080c, 0xa1cf, 0x080c, 0xa8b2, + 0x080c, 0x74e9, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2713, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, - 0x00b6, 0x080c, 0x74d5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, - 0x0782, 0x080c, 0x74d5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, + 0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, + 0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, - 0xd0bc, 0x090c, 0x32f5, 0x8108, 0x1f04, 0x0af0, 0x707f, 0x0000, + 0xd0bc, 0x090c, 0x32fc, 0x8108, 0x1f04, 0x0af0, 0x707f, 0x0000, 0x7080, 0x9084, 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bc0, 0x70ac, 0x9086, 0xffff, 0x0120, 0x080c, 0x2fb2, 0x0804, 0x0bc0, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0538, 0xd084, 0x0528, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, - 0x01e8, 0x080c, 0x3366, 0x11b0, 0x70e0, 0x9086, 0xffff, 0x0190, - 0x080c, 0x3144, 0x70dc, 0xd094, 0x1904, 0x0bc0, 0x2011, 0x0001, - 0x080c, 0xcf2e, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x317e, + 0x01e8, 0x080c, 0x336d, 0x11b0, 0x70e0, 0x9086, 0xffff, 0x0190, + 0x080c, 0x3147, 0x70dc, 0xd094, 0x1904, 0x0bc0, 0x2011, 0x0001, + 0x080c, 0xcf52, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x3181, 0x0804, 0x0bc0, 0x70e4, 0x9005, 0x1904, 0x0bc0, 0x70a8, 0x9005, 0x1904, 0x0bc0, 0x70dc, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0bc0, - 0x080c, 0x6a19, 0x1904, 0x0bc0, 0x080c, 0x6a6c, 0x1904, 0x0bc0, - 0x080c, 0x6a53, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x080c, 0x661e, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, + 0x080c, 0x6a29, 0x1904, 0x0bc0, 0x080c, 0x6a7c, 0x1904, 0x0bc0, + 0x080c, 0x6a63, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, + 0x0016, 0x080c, 0x6625, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b60, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bc0, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b3, 0x080c, 0x0fc2, 0x2011, 0x19cd, 0x080c, 0x0fc2, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70af, 0xffff, - 0x080c, 0x0e79, 0x9006, 0x080c, 0x25a0, 0x080c, 0x3366, 0x0118, - 0x080c, 0x4c9d, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, - 0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, - 0x080c, 0x74f8, 0x0150, 0x080c, 0x74d5, 0x7828, 0x0118, 0x9084, - 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0xa872, + 0x080c, 0x0e79, 0x9006, 0x080c, 0x25a0, 0x080c, 0x336d, 0x0118, + 0x080c, 0x4ca4, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, + 0x0006, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, + 0x080c, 0x750c, 0x0150, 0x080c, 0x74e9, 0x7828, 0x0118, 0x9084, + 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0xa896, 0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000, - 0x080c, 0xa1ab, 0x2011, 0x0000, 0x080c, 0xa1b5, 0x080c, 0xa88e, + 0x080c, 0xa1cf, 0x2011, 0x0000, 0x080c, 0xa1d9, 0x080c, 0xa8b2, 0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906, - 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x7940, 0x918c, 0x0010, 0x7942, + 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x2a44, 0xd19c, 0x0120, 0x2011, 0x0008, 0x080c, 0x2a44, 0x0006, 0x0036, 0x0156, 0x0000, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c, 0x29d8, @@ -181,26 +181,26 @@ 0x9006, 0x080c, 0x2928, 0x0068, 0x080c, 0x29e8, 0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x273f, 0x0804, 0x0cc1, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x20a9, 0x003a, 0x1d04, - 0x0c17, 0x080c, 0x86f9, 0x1f04, 0x0c17, 0x080c, 0x74e6, 0x0148, - 0x080c, 0x74f8, 0x1118, 0x080c, 0x77e8, 0x0050, 0x080c, 0x74dd, - 0x0dd0, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x080c, 0x7406, 0x0020, - 0x2009, 0x00f8, 0x080c, 0x5f9e, 0x7850, 0xc0e5, 0x7852, 0x080c, - 0x74d5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, - 0x2019, 0xea60, 0x0d0c, 0x86f9, 0x7820, 0xd09c, 0x15a0, 0x080c, - 0x74d5, 0x0904, 0x0ca3, 0x7824, 0xd0ac, 0x1904, 0x0cc6, 0x080c, - 0x74f8, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, + 0x0c17, 0x080c, 0x872a, 0x1f04, 0x0c17, 0x080c, 0x74fa, 0x0148, + 0x080c, 0x750c, 0x1118, 0x080c, 0x77fc, 0x0050, 0x080c, 0x74f1, + 0x0dd0, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x741a, 0x0020, + 0x2009, 0x00f8, 0x080c, 0x5fa5, 0x7850, 0xc0e5, 0x7852, 0x080c, + 0x74e9, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, + 0x2019, 0xea60, 0x0d0c, 0x872a, 0x7820, 0xd09c, 0x15a0, 0x080c, + 0x74e9, 0x0904, 0x0ca3, 0x7824, 0xd0ac, 0x1904, 0x0cc6, 0x080c, + 0x750c, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x2011, 0x1800, 0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x8421, 0x1160, 0x1d04, - 0x0c73, 0x080c, 0x86f9, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x7003, + 0x0c73, 0x080c, 0x872a, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x7003, 0x0001, 0x0804, 0x0cc6, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x1d04, 0x0c89, 0x080c, - 0x86f9, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, + 0x872a, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x20a9, 0x0002, 0x080c, 0x29d1, 0x7924, 0x080c, 0x29f0, 0xd19c, 0x0110, - 0x080c, 0x2916, 0x00f0, 0x080c, 0x74e6, 0x1140, 0x94a2, 0x03e8, - 0x1128, 0x080c, 0x74a9, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800, - 0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x080c, 0x74ef, 0x0110, + 0x080c, 0x2916, 0x00f0, 0x080c, 0x74fa, 0x1140, 0x94a2, 0x03e8, + 0x1128, 0x080c, 0x74bd, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800, + 0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x080c, 0x7503, 0x0110, 0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c7b, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x25a0, 0x00a0, 0x7850, 0xc0e4, 0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, @@ -208,20 +208,20 @@ 0x0028, 0x782a, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x86f9, 0x015e, + 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x872a, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, 0x7004, 0x9086, - 0x0001, 0x1110, 0x080c, 0x3494, 0x00ee, 0x0005, 0x0005, 0x2a70, - 0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a, + 0x0001, 0x1110, 0x080c, 0x349b, 0x00ee, 0x0005, 0x0005, 0x2a70, + 0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008, - 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xcc7b, 0x70ef, + 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xcc9f, 0x70ef, 0x00c0, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f, 0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, - 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x661e, + 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6625, 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, @@ -240,11 +240,11 @@ 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, - 0x0002, 0x2003, 0x1001, 0x080c, 0x56e2, 0x1170, 0x080c, 0x0f13, - 0x0110, 0x080c, 0x0e66, 0x080c, 0x56e2, 0x1130, 0x2071, 0x1800, + 0x0002, 0x2003, 0x1001, 0x080c, 0x56e9, 0x1170, 0x080c, 0x0f13, + 0x0110, 0x080c, 0x0e66, 0x080c, 0x56e9, 0x1130, 0x2071, 0x1800, 0x2011, 0x8000, 0x080c, 0x0f27, 0x0c70, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015, - 0x080c, 0xa863, 0x2079, 0x0380, 0x2069, 0x1b04, 0x7818, 0x6802, + 0x080c, 0xa887, 0x2079, 0x0380, 0x2069, 0x1b04, 0x7818, 0x6802, 0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812, 0x2019, 0x1b0f, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a, 0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead, @@ -323,7 +323,7 @@ 0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, - 0x70c2, 0x080c, 0x8522, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, + 0x70c2, 0x080c, 0x8553, 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, 0x188d, 0x7000, @@ -387,15 +387,15 @@ 0x008e, 0x00de, 0x009e, 0x080c, 0x1143, 0x0005, 0x00de, 0x009e, 0x080c, 0x1143, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0d7d, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6d64, 0xa09f, + 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6d74, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x106c, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d7d, 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, 0x1124, 0x00e8, 0xa97c, 0xa894, - 0x0016, 0x0006, 0x080c, 0x6d64, 0x000e, 0x001e, 0xd1fc, 0x1138, - 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xabc9, 0x00ce, 0x7008, + 0x0016, 0x0006, 0x080c, 0x6d74, 0x000e, 0x001e, 0xd1fc, 0x1138, + 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xabed, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x106c, 0x7007, 0x0000, 0x080c, 0x1143, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, @@ -404,8 +404,8 @@ 0x0020, 0x0126, 0x2091, 0x8000, 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x2900, 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x0096, 0x2001, - 0x192e, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8bea, 0x2009, 0x188c, - 0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8a5d, 0x7007, 0x0000, + 0x192e, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8c1b, 0x2009, 0x188c, + 0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8a8e, 0x7007, 0x0000, 0x080c, 0x1154, 0x0005, 0x7007, 0x0000, 0x080c, 0x1154, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a6b, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x0041, 0x7807, 0x0007, 0x7803, 0x0000, @@ -418,17 +418,17 @@ 0x0303, 0x2061, 0x1a7a, 0x602f, 0x1ddc, 0x2001, 0x181a, 0x2004, 0x9082, 0x1ddc, 0x6032, 0x603b, 0x1e55, 0x602b, 0x1aba, 0x6007, 0x1a9a, 0x2061, 0x1a9a, 0x60af, 0x193c, 0x2001, 0x1927, 0x2004, - 0x60ba, 0x783f, 0x336d, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, - 0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc802, + 0x60ba, 0x783f, 0x3374, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, + 0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc826, 0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016, 0x6120, - 0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xac68, + 0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xac8c, 0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070, 0x190c, 0x0d76, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000, 0x0540, 0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086, 0x0004, 0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103, - 0x080c, 0x6b86, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, - 0xba3e, 0xb8d0, 0x9005, 0x190c, 0x6749, 0x00be, 0x6044, 0xd0fc, - 0x190c, 0xa89b, 0x080c, 0xabf2, 0x7808, 0xd09c, 0x19b0, 0x012e, + 0x080c, 0x6b96, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, + 0xba3e, 0xb8d0, 0x9005, 0x190c, 0x6750, 0x00be, 0x6044, 0xd0fc, + 0x190c, 0xa8bf, 0x080c, 0xac16, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005, 0x908a, 0x0024, 0x1a0c, 0x0d7d, 0x002b, 0x012e, 0x0005, 0x04b0, 0x012e, 0x0005, 0x1407, 0x142d, 0x145d, 0x1462, 0x1466, 0x146b, 0x1493, 0x1497, 0x14a5, 0x14a9, 0x1407, 0x1574, 0x1578, @@ -436,25 +436,25 @@ 0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x146d, 0x1407, 0x1435, 0x145a, 0x1421, 0x1407, 0x1441, 0x140b, 0x1409, 0x080c, 0x0d7d, 0x080c, 0x0d76, 0x080c, 0x1603, 0x2009, 0x1a79, 0x2104, - 0x8000, 0x200a, 0x080c, 0x7f85, 0x080c, 0x1ab5, 0x0005, 0x6044, - 0xd0fc, 0x190c, 0xa89b, 0x2009, 0x0055, 0x080c, 0xac68, 0x012e, - 0x0005, 0x080c, 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa89b, - 0x2009, 0x0055, 0x080c, 0xac68, 0x0005, 0x2009, 0x0048, 0x080c, - 0x1603, 0x2060, 0x080c, 0xac68, 0x0005, 0x2009, 0x0054, 0x080c, - 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa89b, 0x080c, 0xac68, + 0x8000, 0x200a, 0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0005, 0x6044, + 0xd0fc, 0x190c, 0xa8bf, 0x2009, 0x0055, 0x080c, 0xac8c, 0x012e, + 0x0005, 0x080c, 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf, + 0x2009, 0x0055, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0048, 0x080c, + 0x1603, 0x2060, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0054, 0x080c, + 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf, 0x080c, 0xac8c, 0x0005, 0x080c, 0x1603, 0x2060, 0x0056, 0x0066, 0x080c, 0x1603, 0x2028, 0x080c, 0x1603, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000, - 0x2418, 0x2009, 0x0056, 0x080c, 0xac68, 0x004e, 0x003e, 0x006e, + 0x2418, 0x2009, 0x0056, 0x080c, 0xac8c, 0x004e, 0x003e, 0x006e, 0x005e, 0x0005, 0x080c, 0x1603, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1603, 0x080c, 0x16c7, 0x0005, 0x080c, 0x0d7d, 0x080c, 0x1603, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, - 0x080c, 0xac68, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, + 0x080c, 0xac8c, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x1608, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1603, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, - 0x2009, 0x0048, 0x080c, 0xac68, 0x0005, 0x080c, 0x1603, 0x080c, + 0x2009, 0x0048, 0x080c, 0xac8c, 0x0005, 0x080c, 0x1603, 0x080c, 0x0d7d, 0x080c, 0x1603, 0x080c, 0x155f, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0904, 0x1512, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, @@ -470,13 +470,13 @@ 0x0004, 0x7803, 0x0001, 0x080c, 0x1578, 0x2001, 0x020d, 0x2003, 0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d7d, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, - 0x7f85, 0x080c, 0x1ab5, 0x080c, 0xc814, 0x0158, 0xa9ac, 0xa936, + 0x7f99, 0x080c, 0x1ab5, 0x080c, 0xc838, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x2009, 0x004c, - 0x080c, 0xac68, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x6024, 0x190c, 0xcc10, 0x2029, 0x00c8, 0x8529, 0x0128, - 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe6af, - 0xd5a4, 0x1118, 0x080c, 0x1608, 0x0005, 0x080c, 0x7f85, 0x080c, + 0x080c, 0xac8c, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x6024, 0x190c, 0xcc34, 0x2029, 0x00c8, 0x8529, 0x0128, + 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe6da, + 0xd5a4, 0x1118, 0x080c, 0x1608, 0x0005, 0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1679, 0x00fe, @@ -494,9 +494,9 @@ 0x1608, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x133c, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, - 0x0053, 0x080c, 0xac68, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, - 0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8f47, - 0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8b4a, 0x0cd0, 0x0005, + 0x0053, 0x080c, 0xac8c, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, + 0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8f78, + 0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8b7b, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214, 0x080c, 0x1679, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x155f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, @@ -506,7 +506,7 @@ 0x810c, 0x080c, 0x166b, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, - 0x080c, 0x7f85, 0x080c, 0x1ab5, 0x0090, 0x7827, 0x0015, 0x782b, + 0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, @@ -527,9 +527,9 @@ 0xd08c, 0x0904, 0x1726, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x1726, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x1726, 0x9c06, 0x15f0, - 0x0126, 0x2091, 0x2600, 0x080c, 0x7edd, 0x012e, 0x7358, 0x745c, + 0x0126, 0x2091, 0x2600, 0x080c, 0x7ef1, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x190c, 0xcbeb, 0xab42, 0xac3e, 0x2001, 0x1869, + 0x00be, 0xd0bc, 0x190c, 0xcc0f, 0xab42, 0xac3e, 0x2001, 0x1869, 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1e75, 0x1190, 0x080c, 0x1913, 0x2a00, 0xa816, @@ -544,7 +544,7 @@ 0x918e, 0x0048, 0x0904, 0x17c1, 0x9085, 0x0001, 0x0804, 0x18ad, 0xa87c, 0xd0ac, 0x0dc8, 0x0804, 0x17d1, 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x183c, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2, - 0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x9110, + 0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x9141, 0x2005, 0x9005, 0x090c, 0x0d7d, 0x2004, 0xa8ae, 0x0804, 0x1895, 0xa87c, 0xd0bc, 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x17d1, 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c, @@ -639,7 +639,7 @@ 0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, - 0xac68, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, + 0xac8c, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x13a3, 0x8631, 0x1db8, @@ -649,18 +649,18 @@ 0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1b51, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x1b3e, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, - 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, 0x74d5, 0x11b0, + 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, 0x74e9, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, 0x0081, 0x2001, - 0x0386, 0x2003, 0x2020, 0x080c, 0x7576, 0x0005, 0x0479, 0x0039, + 0x0386, 0x2003, 0x2020, 0x080c, 0x758a, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x29fc, 0x2009, 0x003c, 0x080c, 0x21b0, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, 0x1de0, - 0x080c, 0x8522, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, + 0x080c, 0x8553, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x133c, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, - 0x080c, 0x74d5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141, + 0x080c, 0x74e9, 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, @@ -736,13 +736,13 @@ 0x3e60, 0x6044, 0x9105, 0x6046, 0x0804, 0x1d0e, 0x080c, 0x0d7d, 0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c, 0x9c06, 0x190c, 0x0d7d, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, - 0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, 0xc814, 0x0118, + 0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, 0xc838, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, 0x1170, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c, 0x2060, 0x00c6, - 0x080c, 0xc41f, 0x080c, 0xa872, 0x00ce, 0x704c, 0x9c06, 0x1150, - 0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa32a, 0x2011, 0x0000, - 0x080c, 0xa1b5, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005, + 0x080c, 0xc443, 0x080c, 0xa896, 0x00ce, 0x704c, 0x9c06, 0x1150, + 0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa34e, 0x2011, 0x0000, + 0x080c, 0xa1d9, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x2019, 0x1000, 0x8319, 0x090c, 0x0d7d, 0x7820, 0xd0bc, 0x1dd0, 0x79c8, @@ -751,12 +751,12 @@ 0x2079, 0x0090, 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000, 0x0904, 0x1e26, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, - 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xe6f8, + 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xe723, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, - 0x0040, 0x080c, 0x21b0, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0xa88e, - 0x782c, 0xd0fc, 0x1de8, 0x080c, 0xa872, 0x7054, 0x9086, 0x0000, + 0x0040, 0x080c, 0x21b0, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0xa8b2, + 0x782c, 0xd0fc, 0x1de8, 0x080c, 0xa896, 0x7054, 0x9086, 0x0000, 0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x080c, 0x0d7d, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51, @@ -841,17 +841,17 @@ 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x21ad, 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x20cf, - 0x20c7, 0x7edd, 0x20c7, 0x20c9, 0x20c9, 0x20c9, 0x20c9, 0x7ec3, + 0x20c7, 0x7ef1, 0x20c7, 0x20c9, 0x20c9, 0x20c9, 0x20c9, 0x7ed7, 0x20c7, 0x20cb, 0x20c7, 0x20c9, 0x20c7, 0x20c9, 0x20c7, 0x080c, - 0x0d7d, 0x0031, 0x0020, 0x080c, 0x7ec3, 0x080c, 0x7edd, 0x0005, - 0x0006, 0x0016, 0x0026, 0x080c, 0xe6f8, 0x7930, 0x9184, 0x0003, - 0x01f0, 0x080c, 0xa872, 0x2001, 0x19fa, 0x2004, 0x9005, 0x0180, + 0x0d7d, 0x0031, 0x0020, 0x080c, 0x7ed7, 0x080c, 0x7ef1, 0x0005, + 0x0006, 0x0016, 0x0026, 0x080c, 0xe723, 0x7930, 0x9184, 0x0003, + 0x01f0, 0x080c, 0xa896, 0x2001, 0x19fa, 0x2004, 0x9005, 0x0180, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x00c6, 0x2001, - 0x19fa, 0x2064, 0x080c, 0xa88e, 0x080c, 0xc41f, 0x00ce, 0x0408, - 0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa88e, 0x00d0, 0x9184, - 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x74d5, - 0x1138, 0x080c, 0x77d9, 0x080c, 0x6022, 0x080c, 0x7406, 0x0010, - 0x080c, 0x5edd, 0x080c, 0x7f7b, 0x0041, 0x0018, 0x9184, 0x9540, + 0x19fa, 0x2064, 0x080c, 0xa8b2, 0x080c, 0xc443, 0x00ce, 0x0408, + 0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa8b2, 0x00d0, 0x9184, + 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x74e9, + 0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0x741a, 0x0010, + 0x080c, 0x5ee4, 0x080c, 0x7f8f, 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128, @@ -900,93 +900,93 @@ 0x001e, 0x0d30, 0x0c58, 0x2286, 0x2283, 0x2283, 0x2283, 0x2285, 0x2283, 0x2283, 0x2283, 0x080c, 0x0d7d, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, - 0xd19c, 0x1904, 0x2500, 0xd1f4, 0x190c, 0x0d76, 0x080c, 0x74d5, - 0x0904, 0x22e3, 0x080c, 0xcf2e, 0x1120, 0x7000, 0x9086, 0x0003, - 0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x74f8, 0x0118, - 0x080c, 0x74e6, 0x1530, 0x2011, 0x0020, 0x080c, 0x2a44, 0x6043, - 0x0000, 0x080c, 0xcf2e, 0x0168, 0x080c, 0x74f8, 0x1150, 0x2001, - 0x19a7, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x734b, 0x0804, + 0xd19c, 0x1904, 0x2500, 0xd1f4, 0x190c, 0x0d76, 0x080c, 0x74e9, + 0x0904, 0x22e3, 0x080c, 0xcf52, 0x1120, 0x7000, 0x9086, 0x0003, + 0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x750c, 0x0118, + 0x080c, 0x74fa, 0x1530, 0x2011, 0x0020, 0x080c, 0x2a44, 0x6043, + 0x0000, 0x080c, 0xcf52, 0x0168, 0x080c, 0x750c, 0x1150, 0x2001, + 0x19a7, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x735f, 0x0804, 0x2503, 0x70a4, 0x9005, 0x1150, 0x70a7, 0x0001, 0x00d6, 0x2069, - 0x0140, 0x080c, 0x752c, 0x00de, 0x1904, 0x2503, 0x080c, 0x77e3, - 0x0428, 0x080c, 0x74f8, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, - 0x0468, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x080c, 0x6022, 0x080c, - 0x7406, 0x0804, 0x2500, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, + 0x0140, 0x080c, 0x7540, 0x00de, 0x1904, 0x2503, 0x080c, 0x77f7, + 0x0428, 0x080c, 0x750c, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, + 0x0468, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, + 0x741a, 0x0804, 0x2500, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7098, 0x9086, - 0x0028, 0x1110, 0x080c, 0x76ba, 0x0804, 0x2500, 0x080c, 0x77de, - 0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x7617, - 0x0804, 0x2500, 0x080c, 0x775d, 0x0804, 0x2500, 0x6220, 0xd1bc, + 0x0028, 0x1110, 0x080c, 0x76ce, 0x0804, 0x2500, 0x080c, 0x77f2, + 0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x762b, + 0x0804, 0x2500, 0x080c, 0x7771, 0x0804, 0x2500, 0x6220, 0xd1bc, 0x0138, 0xd2bc, 0x1904, 0x2565, 0xd2b4, 0x1904, 0x2577, 0x0000, 0xd1ac, 0x0904, 0x240d, 0x0036, 0x6328, 0xc3bc, 0x632a, 0x003e, - 0x080c, 0x74d5, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2a44, 0x0006, - 0x0026, 0x0036, 0x080c, 0x74ef, 0x1158, 0x080c, 0x77d9, 0x080c, - 0x6022, 0x080c, 0x7406, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, - 0x003e, 0x002e, 0x000e, 0x080c, 0x74a9, 0x0016, 0x0046, 0x00c6, + 0x080c, 0x74e9, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2a44, 0x0006, + 0x0026, 0x0036, 0x080c, 0x7503, 0x1158, 0x080c, 0x77ed, 0x080c, + 0x6029, 0x080c, 0x741a, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, + 0x003e, 0x002e, 0x000e, 0x080c, 0x74bd, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084, 0x1148, 0xc085, - 0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4b00, 0x003e, - 0x080c, 0xcf27, 0x1904, 0x23e4, 0x9196, 0xff00, 0x05a8, 0x7060, + 0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4b07, 0x003e, + 0x080c, 0xcf4b, 0x1904, 0x23e4, 0x9196, 0xff00, 0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, - 0xd184, 0x1550, 0x080c, 0x3361, 0x0128, 0xc18d, 0x7132, 0x080c, - 0x6a53, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, + 0xd184, 0x1550, 0x080c, 0x3368, 0x0128, 0xc18d, 0x7132, 0x080c, + 0x6a63, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x23e4, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, - 0x4b00, 0x003e, 0x0804, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001, + 0x4b07, 0x003e, 0x0804, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x23e4, 0xc1ad, 0x2102, 0x0036, - 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b00, 0x003e, 0x7130, 0xc185, + 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b07, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, - 0x0001, 0x2011, 0x0100, 0x080c, 0x88bb, 0x2019, 0x000e, 0x00c6, - 0x2061, 0x0000, 0x080c, 0xe20e, 0x00ce, 0x9484, 0x00ff, 0x9080, - 0x336d, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, - 0x000e, 0x080c, 0xe29e, 0x001e, 0x0016, 0x2009, 0x0002, 0x2019, - 0x0004, 0x080c, 0x31a3, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, - 0x007f, 0x900e, 0x080c, 0x661e, 0x1110, 0x080c, 0x603c, 0x8108, - 0x1f04, 0x23da, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa872, - 0x080c, 0xab3a, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x001e, 0x2001, + 0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x2019, 0x000e, 0x00c6, + 0x2061, 0x0000, 0x080c, 0xe239, 0x00ce, 0x9484, 0x00ff, 0x9080, + 0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, + 0x000e, 0x080c, 0xe2c9, 0x001e, 0x0016, 0x2009, 0x0002, 0x2019, + 0x0004, 0x080c, 0x31a6, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, + 0x007f, 0x900e, 0x080c, 0x6625, 0x1110, 0x080c, 0x6043, 0x8108, + 0x1f04, 0x23da, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa896, + 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003, 0x0000, 0x2011, 0x0020, 0x080c, 0x2a44, 0xd194, 0x0904, 0x2500, - 0x0016, 0x080c, 0xa872, 0x6220, 0xd2b4, 0x0904, 0x249b, 0x080c, - 0x86c5, 0x080c, 0x9e0e, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00f6, + 0x0016, 0x080c, 0xa896, 0x6220, 0xd2b4, 0x0904, 0x249b, 0x080c, + 0x86f6, 0x080c, 0x9e32, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00f6, 0x2019, 0x19f3, 0x2304, 0x907d, 0x0904, 0x2468, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2a1a, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x29d1, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, - 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x95ad, 0x080c, - 0xa88e, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xabc9, + 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x95de, 0x080c, + 0xa8b2, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xabed, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6034, 0x080c, - 0xcf2e, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, - 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x9de6, 0x0804, 0x24fd, - 0x2061, 0x0100, 0x62c0, 0x080c, 0xa7a8, 0x2019, 0x19f3, 0x2304, - 0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, 0xac68, - 0x00ce, 0x0804, 0x24fd, 0xd2bc, 0x0904, 0x24e0, 0x080c, 0x86d2, + 0xcf52, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, + 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x9e0a, 0x0804, 0x24fd, + 0x2061, 0x0100, 0x62c0, 0x080c, 0xa7cc, 0x2019, 0x19f3, 0x2304, + 0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, 0xac8c, + 0x00ce, 0x0804, 0x24fd, 0xd2bc, 0x0904, 0x24e0, 0x080c, 0x8703, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061, - 0x19e7, 0x6050, 0x080c, 0xcf2e, 0x0120, 0x909a, 0x0003, 0x1668, + 0x19e7, 0x6050, 0x080c, 0xcf52, 0x0120, 0x909a, 0x0003, 0x1668, 0x0018, 0x909a, 0x00c8, 0x1648, 0x8000, 0x6052, 0x604c, 0x00ce, - 0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c, 0x86ca, 0x9080, 0x0008, + 0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c, 0x86fb, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x2a53, 0x0450, 0x9080, 0x0008, 0x2004, 0x9086, 0x0009, 0x0d98, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x2a53, 0x00e8, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00c0, 0x0036, 0x2019, 0x0001, - 0x080c, 0xa0f4, 0x003e, 0x2019, 0x19fa, 0x2304, 0x9065, 0x0160, + 0x080c, 0xa118, 0x003e, 0x2019, 0x19fa, 0x2304, 0x9065, 0x0160, 0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f, - 0x6003, 0x0003, 0x080c, 0xac68, 0x00ce, 0x080c, 0xa88e, 0x001e, + 0x6003, 0x0003, 0x080c, 0xac8c, 0x00ce, 0x080c, 0xa8b2, 0x001e, 0xd19c, 0x0904, 0x255e, 0x7038, 0xd0ac, 0x1538, 0x0016, 0x0156, 0x2011, 0x0008, 0x080c, 0x2a44, 0x6050, 0xc0e5, 0x6052, 0x20a9, - 0x0367, 0x1f04, 0x252b, 0x1d04, 0x2513, 0x080c, 0x86f9, 0x6020, + 0x0367, 0x1f04, 0x252b, 0x1d04, 0x2513, 0x080c, 0x872a, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe, 0x1d80, 0x6050, 0xc0e4, 0x6052, 0x2011, 0x0008, 0x080c, 0x2a44, 0x015e, 0x001e, 0x0498, 0x015e, 0x001e, 0x0016, 0x6028, 0xc09c, - 0x602a, 0x080c, 0xa872, 0x080c, 0xab3a, 0x080c, 0xa88e, 0x60e3, - 0x0000, 0x080c, 0xe6d7, 0x080c, 0xe6f2, 0x080c, 0x56d7, 0xd0fc, - 0x1138, 0x080c, 0xcf27, 0x1120, 0x9085, 0x0001, 0x080c, 0x751c, + 0x602a, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3, + 0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x080c, 0x56de, 0xd0fc, + 0x1138, 0x080c, 0xcf4b, 0x1120, 0x9085, 0x0001, 0x080c, 0x7530, 0x9006, 0x080c, 0x2a0a, 0x2009, 0x0002, 0x080c, 0x29f6, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0eb4, 0x00ee, 0x2011, 0x0008, 0x080c, 0x2a44, 0x080c, 0x0bc3, 0x001e, 0x918c, 0xffd0, @@ -1002,34 +1002,34 @@ 0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116, 0x0904, 0x25f3, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x29f6, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001, - 0x0010, 0x2019, 0x0000, 0x080c, 0x4b00, 0x0468, 0x2001, 0x19a8, + 0x0010, 0x2019, 0x0000, 0x080c, 0x4b07, 0x0468, 0x2001, 0x19a8, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, - 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4b00, - 0x080c, 0x0eb4, 0x080c, 0x56d7, 0xd0fc, 0x11a8, 0x080c, 0xcf27, - 0x1190, 0x00c6, 0x080c, 0x268f, 0x080c, 0xa872, 0x080c, 0xa04f, - 0x080c, 0xa88e, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, - 0x080c, 0x31a3, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, + 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4b07, + 0x080c, 0x0eb4, 0x080c, 0x56de, 0xd0fc, 0x11a8, 0x080c, 0xcf4b, + 0x1190, 0x00c6, 0x080c, 0x268f, 0x080c, 0xa896, 0x080c, 0xa073, + 0x080c, 0xa8b2, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, + 0x080c, 0x31a6, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011, 0x1820, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, - 0x2500, 0x080c, 0x81ce, 0x0048, 0x9584, 0x00ff, 0x9080, 0x336d, - 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x336d, + 0x2500, 0x080c, 0x81ff, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3374, + 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3374, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x263f, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, - 0x000f, 0x9080, 0xe706, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2654, + 0x000f, 0x9080, 0xe731, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2654, 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, 0x2684, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, - 0x56d3, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, - 0x2009, 0x002e, 0x080c, 0xe29e, 0x004e, 0x0005, 0x00f6, 0x0016, + 0x56da, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, + 0x2009, 0x002e, 0x080c, 0xe2c9, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x26fb, 0x080c, 0x2971, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, @@ -1038,9 +1038,9 @@ 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, 0x9135, 0x928c, 0xff00, 0x0110, 0x2011, + 0x0020, 0x2018, 0x080c, 0x9166, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, - 0x220a, 0x080c, 0x74d5, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e, + 0x220a, 0x080c, 0x74e9, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d76, 0x002e, 0x001e, @@ -1056,17 +1056,17 @@ 0x27ca, 0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x29bb, 0x2001, 0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006, - 0x2009, 0x001e, 0x2011, 0x27cb, 0x080c, 0x86d7, 0x0005, 0x2009, + 0x2009, 0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001, 0x9006, 0x080c, 0x2928, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x27cb, - 0x080c, 0x86d7, 0x0005, 0x080c, 0x0d7d, 0x2001, 0x199a, 0x2003, + 0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2928, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009, - 0x001e, 0x2011, 0x27cb, 0x080c, 0x86d7, 0x0005, 0x080c, 0x0d7d, + 0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1992, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7d, 0x0043, 0x012e, 0x015e, @@ -1128,24 +1128,24 @@ 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x29ad, 0x080c, - 0x86f9, 0x1f04, 0x29ad, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e, + 0x872a, 0x1f04, 0x29ad, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x2aab, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1100, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x29c8, 0x00fe, 0x015e, 0x000e, - 0x0005, 0x1d04, 0x29d1, 0x080c, 0x86f9, 0x1f04, 0x29d1, 0x0005, + 0x0005, 0x1d04, 0x29d1, 0x080c, 0x872a, 0x1f04, 0x29d1, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x19a8, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, - 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x74ef, 0x0108, 0xc0bc, + 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x7503, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, - 0x2104, 0x1128, 0x080c, 0x74ef, 0x0110, 0xc0bc, 0x0008, 0xc0bd, + 0x2104, 0x1128, 0x080c, 0x7503, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202, 0x7843, 0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0202, @@ -1252,1935 +1252,1937 @@ 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x0804, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, - 0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, + 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x207e, 0x080c, 0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, + 0x207e, 0x080c, 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, - 0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, + 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x207e, 0x080c, 0xa8d8, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, + 0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, - 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, + 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0xa8d8, 0x080c, + 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, - 0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, - 0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, + 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, + 0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, + 0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x20a8, 0x0804, + 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, - 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, + 0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, + 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x13a3, 0x0804, + 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, - 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, + 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, - 0xa8d8, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x04d8, 0x0106, 0x0006, + 0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x04d8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, - 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, + 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x13a3, 0x080c, - 0xa8d8, 0x080c, 0x20a8, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6, + 0xa8fc, 0x080c, 0x20a8, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, - 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, + 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, - 0x6a19, 0x1904, 0x30bf, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, - 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x30bf, - 0x080c, 0x30c4, 0x0804, 0x30bf, 0xd2cc, 0x1904, 0x30bf, 0x080c, - 0x74d5, 0x1120, 0x70af, 0xffff, 0x0804, 0x30bf, 0xd294, 0x0120, - 0x70af, 0xffff, 0x0804, 0x30bf, 0x080c, 0x335c, 0x0160, 0x080c, - 0xcf2e, 0x0128, 0x2001, 0x1818, 0x203c, 0x0804, 0x304c, 0x70af, - 0xffff, 0x0804, 0x30bf, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284, - 0x0904, 0x304c, 0xd28c, 0x1904, 0x304c, 0x0036, 0x73ac, 0x938e, + 0x6a29, 0x1904, 0x30c2, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, + 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x30c2, + 0x080c, 0x30c7, 0x0804, 0x30c2, 0xd2cc, 0x1904, 0x30c2, 0x080c, + 0x74e9, 0x1120, 0x70af, 0xffff, 0x0804, 0x30c2, 0xd294, 0x0120, + 0x70af, 0xffff, 0x0804, 0x30c2, 0x080c, 0x3363, 0x0160, 0x080c, + 0xcf52, 0x0128, 0x2001, 0x1818, 0x203c, 0x0804, 0x304f, 0x70af, + 0xffff, 0x0804, 0x30c2, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284, + 0x0904, 0x304f, 0xd28c, 0x1904, 0x304f, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, - 0x00ff, 0x970e, 0x05b8, 0x908e, 0x0000, 0x05a0, 0x908e, 0x00ff, - 0x1150, 0x7230, 0xd284, 0x1598, 0x7294, 0xc28d, 0x7296, 0x70af, - 0xffff, 0x003e, 0x0488, 0x900e, 0x080c, 0x25fb, 0x080c, 0x65bd, - 0x1520, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, - 0x2060, 0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03, 0xb8af, 0x0000, - 0x080c, 0x6a5b, 0x1150, 0x7030, 0xd08c, 0x0118, 0xb800, 0xd0bc, - 0x0120, 0x080c, 0x30dd, 0x0148, 0x0028, 0x080c, 0x3231, 0x080c, - 0x3109, 0x0118, 0x8318, 0x0804, 0x2ffc, 0x73ae, 0x0010, 0x70af, - 0xffff, 0x003e, 0x0804, 0x30bf, 0x9780, 0x336d, 0x203d, 0x97bc, - 0xff00, 0x873f, 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118, - 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, - 0x0020, 0x70af, 0xffff, 0x0804, 0x30bf, 0x2700, 0x0156, 0x0016, - 0x9106, 0x0904, 0x30b4, 0xc484, 0x080c, 0x661e, 0x0148, 0x080c, - 0xcf2e, 0x1904, 0x30b4, 0x080c, 0x65bd, 0x1904, 0x30bc, 0x0008, - 0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, - 0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03, 0xb8af, 0x0000, 0x080c, - 0x6a5b, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, - 0x7294, 0xd28c, 0x0180, 0x080c, 0x6a5b, 0x9082, 0x0006, 0x02e0, - 0xd484, 0x1118, 0x080c, 0x65e2, 0x0028, 0x080c, 0x32ca, 0x01a0, - 0x080c, 0x32f5, 0x0088, 0x080c, 0x3231, 0x080c, 0xcf2e, 0x1160, - 0x080c, 0x3109, 0x0188, 0x0040, 0x080c, 0xcf2e, 0x1118, 0x080c, - 0x32ca, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, - 0x3065, 0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, - 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, - 0x2009, 0x007e, 0x080c, 0x65bd, 0x1168, 0xb813, 0x00ff, 0xb817, - 0xfffe, 0x080c, 0x3231, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, - 0x080c, 0xcc7b, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, - 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, - 0xac3b, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcca8, 0x6023, 0x0001, - 0x9006, 0x080c, 0x655a, 0x2001, 0x0000, 0x080c, 0x656e, 0x0126, - 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, - 0x080c, 0xac68, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, - 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, - 0x9084, 0x00ff, 0xb842, 0x080c, 0xac3b, 0x0548, 0x2b00, 0x6012, - 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, - 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x31e4, 0x080c, - 0xcca8, 0x6023, 0x0001, 0x9006, 0x080c, 0x655a, 0x2001, 0x0002, - 0x080c, 0x656e, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, - 0x012e, 0x2009, 0x0002, 0x080c, 0xac68, 0x9085, 0x0001, 0x00ce, - 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, - 0x0080, 0x080c, 0x65bd, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, - 0x0039, 0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xab73, 0x01d0, 0x2b00, - 0x6012, 0x080c, 0xcca8, 0x6023, 0x0001, 0x9006, 0x080c, 0x655a, - 0x2001, 0x0002, 0x080c, 0x656e, 0x0126, 0x2091, 0x8000, 0x70e4, - 0x8000, 0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xac68, 0x9085, - 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, - 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x65bd, 0x11b8, - 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8d7, 0x0004, 0x080c, 0xab73, - 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, - 0xcca8, 0x2009, 0x0022, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, - 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, - 0x00b6, 0x21f0, 0x9036, 0x080c, 0xa872, 0x1110, 0x2031, 0x0001, - 0x0066, 0x080c, 0x937f, 0x080c, 0x92f5, 0x080c, 0xa7c8, 0x080c, - 0xbaf5, 0x006e, 0x86ff, 0x0110, 0x080c, 0xa88e, 0x3e08, 0x2130, - 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, - 0x900e, 0x0016, 0x080c, 0x661e, 0x1140, 0x9686, 0x0002, 0x1118, - 0xb800, 0xd0bc, 0x1110, 0x080c, 0x603c, 0x001e, 0x8108, 0x1f04, - 0x31c9, 0x9686, 0x0001, 0x190c, 0x3330, 0x00be, 0x002e, 0x003e, - 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, - 0x0016, 0x00b6, 0x9016, 0x080c, 0xa872, 0x1110, 0x2011, 0x0001, - 0x0026, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, - 0x9374, 0x0076, 0x2039, 0x0000, 0x080c, 0x9246, 0x2c08, 0x080c, - 0xdfc0, 0x007e, 0x001e, 0x002e, 0x82ff, 0x0110, 0x080c, 0xa88e, - 0xba10, 0xbb14, 0x080c, 0x603c, 0xba12, 0xbb16, 0x00be, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, - 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, - 0x1800, 0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, - 0x0005, 0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, - 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, - 0x00b6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, - 0xa872, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9, - 0x0001, 0x0088, 0x080c, 0x56d3, 0xd0c4, 0x0150, 0xd0a4, 0x0140, - 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xe29e, 0x004e, - 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x32a5, - 0x928e, 0x007f, 0x0904, 0x32a5, 0x928e, 0x0080, 0x05f0, 0x9288, - 0x1000, 0x210c, 0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x198e, - 0x0006, 0x2003, 0x0001, 0x080c, 0x32b7, 0x000e, 0x2003, 0x0000, - 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6a25, 0x00ce, - 0x00be, 0x2019, 0x0029, 0x080c, 0x9374, 0x0076, 0x2039, 0x0000, - 0x080c, 0x9246, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, - 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, - 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, - 0x2c08, 0x080c, 0xdfc0, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, - 0x325b, 0x002e, 0x82ff, 0x0110, 0x080c, 0xa88e, 0x015e, 0x001e, - 0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, - 0x0026, 0x0016, 0x080c, 0x56d3, 0xd0c4, 0x0140, 0xd0a4, 0x0130, - 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xe29e, 0x001e, 0x002e, - 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, - 0x01e8, 0x080c, 0x6a53, 0x11d0, 0x2100, 0x080c, 0x262e, 0x81ff, - 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 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, 0x0066, 0x9036, 0x080c, 0xa872, 0x1110, 0x2031, - 0x0001, 0x0066, 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, - 0x86ff, 0x0110, 0x080c, 0xa88e, 0x006e, 0x9180, 0x1000, 0x2004, - 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1b32, 0x001e, 0x6112, - 0x080c, 0x31e4, 0x001e, 0x080c, 0x65e2, 0x012e, 0x00ce, 0x001e, - 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa366, 0x080c, 0xe605, - 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005, - 0x00c6, 0x00b6, 0x080c, 0x74d5, 0x1118, 0x20a9, 0x0800, 0x0010, - 0x20a9, 0x0782, 0x080c, 0x74d5, 0x1110, 0x900e, 0x0010, 0x2009, - 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, - 0xb800, 0xd0bc, 0x090c, 0x65e2, 0x8108, 0x1f04, 0x3341, 0x2061, - 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3, - 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc, - 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, - 0x1867, 0x2214, 0xd2dc, 0x002e, 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, + 0x00ff, 0x970e, 0x05d0, 0x908e, 0x0000, 0x05b8, 0x908e, 0x00ff, + 0x1150, 0x7230, 0xd284, 0x15b0, 0x7294, 0xc28d, 0x7296, 0x70af, + 0xffff, 0x003e, 0x04a0, 0x900e, 0x080c, 0x25fb, 0x080c, 0x65c4, + 0x1538, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, + 0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af, 0x0000, + 0x080c, 0x6a6b, 0x1168, 0x7030, 0xd08c, 0x0130, 0xb800, 0xd0bc, + 0x0138, 0x080c, 0x6914, 0x0120, 0x080c, 0x30e0, 0x0148, 0x0028, + 0x080c, 0x3238, 0x080c, 0x310c, 0x0118, 0x8318, 0x0804, 0x2ffc, + 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x30c2, 0x9780, + 0x3374, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70ac, + 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, + 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804, 0x30c2, + 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x30b7, 0xc484, 0x080c, + 0x6625, 0x0148, 0x080c, 0xcf52, 0x1904, 0x30b7, 0x080c, 0x65c4, + 0x1904, 0x30bf, 0x0008, 0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005, + 0x0148, 0x00c6, 0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, + 0xb8af, 0x0000, 0x080c, 0x6a6b, 0x1130, 0x7030, 0xd08c, 0x01f8, + 0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, 0x0180, 0x080c, 0x6a6b, + 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x65e9, 0x0028, + 0x080c, 0x32d1, 0x01a0, 0x080c, 0x32fc, 0x0088, 0x080c, 0x3238, + 0x080c, 0xcf52, 0x1160, 0x080c, 0x310c, 0x0188, 0x0040, 0x080c, + 0xcf52, 0x1118, 0x080c, 0x32d1, 0x0110, 0x0451, 0x0140, 0x001e, + 0x8108, 0x015e, 0x1f04, 0x3068, 0x70af, 0xffff, 0x0018, 0x001e, + 0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, + 0x0016, 0x70af, 0x0001, 0x2009, 0x007e, 0x080c, 0x65c4, 0x1168, + 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3238, 0x04a9, 0x0128, + 0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcc9f, 0x001e, 0x00ce, 0x0005, + 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, + 0x00ff, 0xb842, 0x080c, 0xac5f, 0x01d0, 0x2b00, 0x6012, 0x080c, + 0xcccc, 0x6023, 0x0001, 0x9006, 0x080c, 0x6561, 0x2001, 0x0000, + 0x080c, 0x6575, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, + 0x012e, 0x2009, 0x0004, 0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce, + 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, + 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xac5f, + 0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, + 0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, + 0x080c, 0x31e7, 0x080c, 0xcccc, 0x6023, 0x0001, 0x9006, 0x080c, + 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126, 0x2091, 0x8000, + 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0002, 0x080c, 0xac8c, + 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, + 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x65c4, 0x1140, 0xb813, + 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70e3, 0xffff, 0x002e, + 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, + 0xab97, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023, 0x0001, + 0x9006, 0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126, + 0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, 0x012e, 0x2009, 0x0002, + 0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, + 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, + 0x080c, 0x65c4, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8d7, + 0x0004, 0x080c, 0xab97, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, + 0x0001, 0x620a, 0x080c, 0xcccc, 0x2009, 0x0022, 0x080c, 0xac8c, + 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, + 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0xa896, + 0x1110, 0x2031, 0x0001, 0x0066, 0x080c, 0x93b0, 0x080c, 0x9326, + 0x080c, 0xa7ec, 0x080c, 0xbb19, 0x006e, 0x86ff, 0x0110, 0x080c, + 0xa8b2, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, + 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1140, + 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6043, + 0x001e, 0x8108, 0x1f04, 0x31cc, 0x9686, 0x0001, 0x190c, 0x3337, + 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, + 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c, + 0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0, + 0x0026, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000, + 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x001e, 0x002e, + 0x82ff, 0x0110, 0x080c, 0xa8b2, 0xba10, 0xbb14, 0xbc84, 0x080c, + 0x6043, 0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e, + 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, + 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, + 0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005, + 0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8, + 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, + 0x0046, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, + 0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9, + 0x0001, 0x0078, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130, + 0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xe2c9, 0x20a9, 0x0800, + 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x32ab, 0x928e, 0x007f, + 0x0904, 0x32ab, 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c, + 0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x198e, 0x0006, 0x2003, + 0x0001, 0x080c, 0x32be, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, + 0x2158, 0x2001, 0x0001, 0x080c, 0x6a35, 0x00ce, 0x00be, 0x2019, + 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000, 0x080c, 0x9277, + 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, + 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, + 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, + 0xdfeb, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3261, 0x002e, + 0x82ff, 0x0110, 0x080c, 0xa8b2, 0x015e, 0x001e, 0x002e, 0x003e, + 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, + 0x0016, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, + 0x2220, 0x2009, 0x0029, 0x080c, 0xe2c9, 0x001e, 0x002e, 0x004e, + 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8, + 0x080c, 0x6a63, 0x11d0, 0x2100, 0x080c, 0x262e, 0x81ff, 0x01b8, + 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 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, 0x0066, 0x9036, 0x080c, 0xa896, 0x1110, 0x2031, 0x0001, + 0x0066, 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, + 0x0110, 0x080c, 0xa8b2, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, + 0x0158, 0x0016, 0x00c6, 0x2061, 0x1b32, 0x001e, 0x6112, 0x080c, + 0x31e7, 0x001e, 0x080c, 0x65e9, 0x012e, 0x00ce, 0x001e, 0x0005, + 0x0016, 0x0026, 0x2110, 0x080c, 0xa38a, 0x080c, 0xe630, 0x002e, + 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005, 0x00c6, + 0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, + 0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, + 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, + 0xd0bc, 0x090c, 0x65e9, 0x8108, 0x1f04, 0x3348, 0x2061, 0x1800, + 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3, 0x0000, + 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc, 0x0005, + 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x1867, + 0x2214, 0xd2dc, 0x002e, 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, 0x8000, 0x2071, 0x189e, 0x7003, - 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, - 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c, - 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, - 0xdcb0, 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706e, 0xa867, - 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002, - 0x349c, 0x349d, 0x34b0, 0x34c4, 0x0005, 0x1004, 0x34ad, 0x0e04, - 0x34ad, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, - 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, - 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100, - 0x0128, 0x9086, 0x0200, 0x0904, 0x3598, 0x0005, 0x7018, 0x2048, - 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, - 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, - 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, - 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, - 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x3595, 0x61d0, - 0x0804, 0x352a, 0x356c, 0x35a4, 0x35ae, 0x35b2, 0x35bc, 0x35c2, - 0x35c6, 0x35d6, 0x35d9, 0x35e3, 0x35e8, 0x35ed, 0x35f8, 0x3603, - 0x3612, 0x3621, 0x362f, 0x3646, 0x3661, 0x3595, 0x370a, 0x3748, - 0x37ed, 0x37fe, 0x3821, 0x3595, 0x3595, 0x3595, 0x3859, 0x3879, - 0x3882, 0x38ae, 0x38b4, 0x3595, 0x38fa, 0x3595, 0x3595, 0x3595, - 0x3595, 0x3595, 0x3905, 0x390e, 0x3916, 0x3918, 0x3595, 0x3595, - 0x3595, 0x3595, 0x3595, 0x3595, 0x3948, 0x3595, 0x3595, 0x3595, - 0x3595, 0x3595, 0x3965, 0x39c9, 0x3595, 0x3595, 0x3595, 0x3595, - 0x3595, 0x3595, 0x0002, 0x39f3, 0x39f6, 0x3a55, 0x3a6e, 0x3a9e, - 0x3d40, 0x3595, 0x52a4, 0x3595, 0x3595, 0x3595, 0x3595, 0x3595, - 0x3595, 0x3595, 0x3595, 0x35e3, 0x35e8, 0x423f, 0x56f7, 0x425d, - 0x5333, 0x5384, 0x5487, 0x3595, 0x54e9, 0x5525, 0x5556, 0x5662, - 0x5583, 0x55e2, 0x3595, 0x4261, 0x4416, 0x442c, 0x4451, 0x44b6, - 0x452a, 0x454a, 0x45c1, 0x461d, 0x4679, 0x467c, 0x46a1, 0x4711, - 0x477b, 0x4783, 0x48b5, 0x4a2a, 0x4a5e, 0x4cc2, 0x3595, 0x4ce0, - 0x4d8c, 0x4e6e, 0x4ec8, 0x3595, 0x4f7d, 0x3595, 0x4fe3, 0x4ffe, - 0x4783, 0x5244, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4adc, - 0x0126, 0x2091, 0x8000, 0x0e04, 0x3576, 0x0010, 0x012e, 0x0cc0, - 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, - 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, - 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, - 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, - 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, - 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4ae9, 0x7883, 0x0004, - 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, - 0x7884, 0x7990, 0x0804, 0x4aec, 0x7984, 0x7888, 0x2114, 0x200a, - 0x0804, 0x356c, 0x7984, 0x2114, 0x0804, 0x356c, 0x20e1, 0x0000, - 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, - 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x356c, 0x7884, 0x2060, - 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a, 0x789b, - 0x0137, 0x0804, 0x356c, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, - 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, - 0x0210, 0x0804, 0x35a1, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35a8, - 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a1, 0x2138, 0x7d98, - 0x7c9c, 0x0804, 0x35b6, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, - 0x35a1, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, - 0x0804, 0x356c, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, - 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x356c, 0x0804, - 0x359b, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a1, 0x21e0, - 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x356c, 0x2069, - 0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x35a1, 0x8019, 0x0904, - 0x35a1, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, - 0x685a, 0x685e, 0x080c, 0x780a, 0x0804, 0x356c, 0x2069, 0x1847, - 0x7884, 0x7994, 0x911a, 0x1a04, 0x35a1, 0x8019, 0x0904, 0x35a1, - 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, - 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6ac5, 0x012e, 0x0804, - 0x356c, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x359e, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, - 0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, - 0x0804, 0x359e, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, - 0x080c, 0x4ae9, 0x701f, 0x3685, 0x0005, 0xa864, 0x2008, 0x9084, - 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, - 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, - 0x359e, 0x810f, 0x918c, 0x00ff, 0x0904, 0x359e, 0x7112, 0x7010, - 0x8001, 0x0560, 0x7012, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, - 0x0804, 0x359e, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, - 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, - 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9, - 0x701f, 0x36c3, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, - 0x0120, 0x9096, 0x000a, 0x1904, 0x359e, 0x0888, 0x7014, 0x2048, - 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, - 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618f, 0x0150, 0x0126, 0x2091, - 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b8, 0x1128, - 0x7007, 0x0003, 0x701f, 0x36ef, 0x0005, 0x080c, 0x6fb0, 0x0126, - 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6, - 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, - 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, - 0x0804, 0x4aec, 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, 0x1a22, 0x2004, 0x9005, - 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, - 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, - 0x81ff, 0x1904, 0x359e, 0x7984, 0x080c, 0x661e, 0x1904, 0x35a1, - 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35a1, 0x7c88, - 0x7d8c, 0x080c, 0x6850, 0x080c, 0x67e1, 0x1518, 0x2061, 0x1ddc, - 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, - 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, - 0x012e, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04, - 0x359e, 0x0c30, 0x080c, 0xc41f, 0x012e, 0x0904, 0x359e, 0x0804, - 0x356c, 0x900e, 0x2001, 0x0005, 0x080c, 0x6fb0, 0x0126, 0x2091, - 0x8000, 0x080c, 0xcb18, 0x080c, 0x6d70, 0x012e, 0x0804, 0x356c, - 0x00a6, 0x2950, 0xb198, 0x080c, 0x661e, 0x1904, 0x37da, 0xb6a4, - 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, - 0x6850, 0x080c, 0x67fb, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, - 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, - 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, - 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, - 0x0c28, 0x080c, 0xc41f, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, - 0x900e, 0x2001, 0x0005, 0x080c, 0x6fb0, 0x0126, 0x2091, 0x8000, - 0x080c, 0xcb18, 0x080c, 0x6d64, 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, 0x359e, - 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x66e5, 0x0904, 0x359e, - 0x080c, 0x6856, 0x0904, 0x359e, 0x0804, 0x4541, 0x81ff, 0x1904, - 0x359e, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x68e4, 0x0904, - 0x359e, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6871, 0x0904, 0x359e, - 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a1, 0x8003, 0x800b, 0x810b, - 0x9108, 0x080c, 0x861b, 0x7984, 0xd184, 0x1904, 0x356c, 0x0804, - 0x4541, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, - 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508, - 0x080c, 0x661e, 0x11d8, 0x080c, 0x68e4, 0x1128, 0x2009, 0x0002, - 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6871, - 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, - 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x861b, 0x8529, 0x1ae0, - 0x012e, 0x0804, 0x356c, 0x012e, 0x0804, 0x359e, 0x012e, 0x0804, - 0x35a1, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x66e5, 0x0904, - 0x359e, 0x080c, 0xa872, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, - 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x900e, 0x080c, - 0xdfc0, 0x007e, 0x00ce, 0x080c, 0xa88e, 0x080c, 0x6850, 0x0804, - 0x356c, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x6850, 0x2208, - 0x0804, 0x356c, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910, - 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, - 0x2071, 0x19e7, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, - 0x2300, 0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x356c, - 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, - 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910, - 0x6910, 0x62bc, 0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x359e, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e7, 0x0128, - 0x2009, 0x0007, 0x012e, 0x0804, 0x359e, 0x012e, 0x615c, 0x9190, - 0x336d, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280, - 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, - 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, - 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, - 0x0068, 0x080c, 0x74d5, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, - 0x0120, 0x2009, 0x0005, 0x0804, 0x359e, 0x9036, 0x7e9a, 0x7f9e, - 0x0804, 0x356c, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001, - 0x1987, 0x2004, 0x789a, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000, - 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x356c, 0x080c, 0x4ad3, - 0x0904, 0x35a1, 0xba44, 0xbb38, 0x0804, 0x356c, 0x080c, 0x0d7d, - 0x080c, 0x4ad3, 0x2110, 0x0904, 0x35a1, 0xb804, 0x908c, 0x00ff, - 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, - 0x0009, 0x1904, 0x359e, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, - 0x00c6, 0x9066, 0x080c, 0xa872, 0x080c, 0xa366, 0x080c, 0x9374, - 0x0076, 0x903e, 0x080c, 0x9246, 0x900e, 0x080c, 0xdfc0, 0x007e, - 0x00ce, 0x080c, 0xa88e, 0xb807, 0x0407, 0x012e, 0x0804, 0x356c, - 0x614c, 0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, - 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, - 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, - 0x2d04, 0x266a, 0x789a, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000, - 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ecc, 0xd0c4, - 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, - 0x199e, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, - 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, - 0x2011, 0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, - 0x0010, 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, - 0xd1e4, 0x190c, 0x0ee7, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046, - 0x9084, 0x0001, 0x090c, 0x423f, 0x6040, 0xd0cc, 0x0120, 0x78b0, - 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x356c, 0x00f6, 0x2079, - 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, - 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, - 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, - 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35a1, - 0x788c, 0x902d, 0x0904, 0x35a1, 0x900e, 0x080c, 0x661e, 0x1120, - 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, - 0x0ca0, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x7888, 0x900d, 0x0904, - 0x35a1, 0x788c, 0x9005, 0x0904, 0x35a1, 0xba44, 0xb946, 0xbb38, - 0xb83a, 0x0804, 0x356c, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, - 0x080c, 0x56e7, 0x1904, 0x359e, 0x00c6, 0x2061, 0x0100, 0x7984, - 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00, - 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x336d, 0x210d, 0x918c, - 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, - 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xab73, - 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x65c3, - 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4aa0, - 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, - 0xa86a, 0x701f, 0x3a4e, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, - 0xac68, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x359e, - 0x00ce, 0x0804, 0x35a1, 0x080c, 0xabc9, 0x0cb0, 0xa830, 0x9086, - 0x0100, 0x0904, 0x359e, 0x0804, 0x356c, 0x2061, 0x1a6f, 0x0126, - 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, - 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa, - 0x012e, 0x0804, 0x356c, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, - 0x359e, 0x080c, 0x74d5, 0x0904, 0x359e, 0x0126, 0x2091, 0x8000, - 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x2664, - 0x080c, 0x5901, 0x012e, 0x0804, 0x356c, 0x012e, 0x0804, 0x35a1, - 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, 0x2061, - 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9135, - 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, - 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x356e, - 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, - 0x0288, 0x012e, 0x0804, 0x35a1, 0x2001, 0x002a, 0x2004, 0x2069, - 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x35a1, 0x012e, - 0x0804, 0x359e, 0x080c, 0xab33, 0x0dd0, 0x7884, 0xd0fc, 0x0904, - 0x3b19, 0x00c6, 0x080c, 0x4aa0, 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, - 0x3ca3, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, - 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, - 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x001b, 0x080c, 0x4ae9, 0x701f, 0x3be0, 0x7023, 0x0001, 0x012e, - 0x0005, 0x080c, 0xa872, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, - 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a88, 0x2001, 0x199f, - 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, - 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3d12, - 0x080c, 0x3cd1, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, - 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, - 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, - 0x00de, 0x2011, 0x0001, 0x080c, 0x4083, 0x008e, 0x00ee, 0x00fe, - 0x080c, 0x3fb0, 0x080c, 0x3edd, 0x05b8, 0x2001, 0x020b, 0x2004, - 0x9084, 0x0140, 0x1db8, 0x080c, 0x40f7, 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, - 0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, - 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3ee7, 0x080c, 0x3ccc, - 0x0058, 0x080c, 0x3ccc, 0x080c, 0x401b, 0x080c, 0x3fa6, 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, 0x1328, - 0x2009, 0x0028, 0x080c, 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, - 0x080c, 0xa88e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, - 0x009e, 0x008e, 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, - 0x012e, 0x0804, 0x356c, 0x012e, 0x2021, 0x400c, 0x0804, 0x356e, - 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, - 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, - 0xa804, 0x9005, 0x0904, 0x3c3c, 0x2048, 0x1f04, 0x3bf0, 0x7068, - 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, - 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, - 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4ae9, - 0x701f, 0x3be0, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, - 0x20a0, 0x0006, 0x080c, 0x0fb7, 0x000e, 0x080c, 0x4aec, 0x701f, - 0x3be0, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, - 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, - 0x0103, 0x1118, 0x701f, 0x3ca1, 0x0450, 0x7014, 0x2048, 0xa868, - 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x65bd, 0x0110, 0x9006, - 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xccf7, 0x015e, - 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, - 0x001e, 0x0904, 0x359e, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, - 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c73, 0x7007, - 0x0003, 0x0804, 0x3c31, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, - 0x0904, 0x356e, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, + 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003, 0x0002, + 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, + 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c, 0x1053, + 0x090c, 0x0d7d, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, + 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706e, 0xa867, 0x0002, + 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002, 0x34a3, + 0x34a4, 0x34b7, 0x34cb, 0x0005, 0x1004, 0x34b4, 0x0e04, 0x34b4, + 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, + 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, + 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, + 0x9086, 0x0200, 0x0904, 0x359f, 0x0005, 0x7018, 0x2048, 0x2061, + 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, + 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, + 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, + 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61d0, + 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x359c, 0x61d0, 0x0804, + 0x3531, 0x3573, 0x35ab, 0x35b5, 0x35b9, 0x35c3, 0x35c9, 0x35cd, + 0x35dd, 0x35e0, 0x35ea, 0x35ef, 0x35f4, 0x35ff, 0x360a, 0x3619, + 0x3628, 0x3636, 0x364d, 0x3668, 0x359c, 0x3711, 0x374f, 0x37f4, + 0x3805, 0x3828, 0x359c, 0x359c, 0x359c, 0x3860, 0x3880, 0x3889, + 0x38b5, 0x38bb, 0x359c, 0x3901, 0x359c, 0x359c, 0x359c, 0x359c, + 0x359c, 0x390c, 0x3915, 0x391d, 0x391f, 0x359c, 0x359c, 0x359c, + 0x359c, 0x359c, 0x359c, 0x394f, 0x359c, 0x359c, 0x359c, 0x359c, + 0x359c, 0x396c, 0x39d0, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c, + 0x359c, 0x0002, 0x39fa, 0x39fd, 0x3a5c, 0x3a75, 0x3aa5, 0x3d47, + 0x359c, 0x52ab, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c, + 0x359c, 0x359c, 0x35ea, 0x35ef, 0x4246, 0x56fe, 0x4264, 0x533a, + 0x538b, 0x548e, 0x359c, 0x54f0, 0x552c, 0x555d, 0x5669, 0x558a, + 0x55e9, 0x359c, 0x4268, 0x441d, 0x4433, 0x4458, 0x44bd, 0x4531, + 0x4551, 0x45c8, 0x4624, 0x4680, 0x4683, 0x46a8, 0x4718, 0x4782, + 0x478a, 0x48bc, 0x4a31, 0x4a65, 0x4cc9, 0x359c, 0x4ce7, 0x4d93, + 0x4e75, 0x4ecf, 0x359c, 0x4f84, 0x359c, 0x4fea, 0x5005, 0x478a, + 0x524b, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae3, 0x0126, + 0x2091, 0x8000, 0x0e04, 0x357d, 0x0010, 0x012e, 0x0cc0, 0x7c36, + 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, + 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, + 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, + 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, + 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, + 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4af0, 0x7883, 0x0004, 0x7884, + 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, + 0x7990, 0x0804, 0x4af3, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, + 0x3573, 0x7984, 0x2114, 0x0804, 0x3573, 0x20e1, 0x0000, 0x2099, + 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, + 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3573, 0x7884, 0x2060, 0x04d8, + 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0137, + 0x0804, 0x3573, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, + 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, + 0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35af, 0x79a0, + 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c, + 0x0804, 0x35bd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, + 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, + 0x3573, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, + 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3573, 0x0804, 0x35a2, + 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x21e0, 0x20a9, + 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3573, 0x2069, 0x1847, + 0x7884, 0x7990, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8, + 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, + 0x685e, 0x080c, 0x781e, 0x0804, 0x3573, 0x2069, 0x1847, 0x7884, + 0x7994, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8, 0x684e, + 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6ad5, 0x012e, 0x0804, 0x3573, + 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, + 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, + 0x18a6, 0x4101, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, + 0x35a5, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, + 0x4af0, 0x701f, 0x368c, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, + 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, + 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x35a5, + 0x810f, 0x918c, 0x00ff, 0x0904, 0x35a5, 0x7112, 0x7010, 0x8001, + 0x0560, 0x7012, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, + 0x35a5, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, + 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, + 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f, + 0x36ca, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, + 0x9096, 0x000a, 0x1904, 0x35a5, 0x0888, 0x7014, 0x2048, 0xa868, + 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, + 0xc2fd, 0xaa7a, 0x080c, 0x6196, 0x0150, 0x0126, 0x2091, 0x8000, + 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64bf, 0x1128, 0x7007, + 0x0003, 0x701f, 0x36f6, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, + 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6, 0x400a, + 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, + 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, + 0x4af3, 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, 0x1a22, 0x2004, 0x9005, 0x0128, + 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, + 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, + 0x1904, 0x35a5, 0x7984, 0x080c, 0x6625, 0x1904, 0x35a8, 0x7e98, + 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35a8, 0x7c88, 0x7d8c, + 0x080c, 0x6857, 0x080c, 0x67e8, 0x1518, 0x2061, 0x1ddc, 0x0126, + 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, + 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, + 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04, 0x35a5, + 0x0c30, 0x080c, 0xc443, 0x012e, 0x0904, 0x35a5, 0x0804, 0x3573, + 0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, + 0x080c, 0xcb3c, 0x080c, 0x6d80, 0x012e, 0x0804, 0x3573, 0x00a6, + 0x2950, 0xb198, 0x080c, 0x6625, 0x1904, 0x37e1, 0xb6a4, 0x9684, + 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x6857, + 0x080c, 0x6802, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000, + 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, + 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c, + 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, + 0x080c, 0xc443, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, + 0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c, + 0xcb3c, 0x080c, 0x6d74, 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, 0x35a5, 0x080c, + 0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c, + 0x685d, 0x0904, 0x35a5, 0x0804, 0x4548, 0x81ff, 0x1904, 0x35a5, + 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5, + 0x2019, 0x0005, 0x79a8, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7888, + 0x908a, 0x1000, 0x1a04, 0x35a8, 0x8003, 0x800b, 0x810b, 0x9108, + 0x080c, 0x864c, 0x7984, 0xd184, 0x1904, 0x3573, 0x0804, 0x4548, + 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, + 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, + 0x6625, 0x11d8, 0x080c, 0x68eb, 0x1128, 0x2009, 0x0002, 0x62c0, + 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x1118, + 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, + 0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x8529, 0x1ae0, 0x012e, + 0x0804, 0x3573, 0x012e, 0x0804, 0x35a5, 0x012e, 0x0804, 0x35a8, + 0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5, + 0x080c, 0xa896, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, + 0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb, + 0x007e, 0x00ce, 0x080c, 0xa8b2, 0x080c, 0x6857, 0x0804, 0x3573, + 0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6857, 0x2208, 0x0804, + 0x3573, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910, 0x6810, + 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071, + 0x19e7, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300, + 0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3573, 0x00f6, + 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, + 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910, 0x6910, + 0x62bc, 0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x56ee, 0x0128, 0x2009, + 0x0007, 0x012e, 0x0804, 0x35a5, 0x012e, 0x615c, 0x9190, 0x3374, + 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280, 0x67dc, + 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, + 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, + 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, + 0x080c, 0x74e9, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, + 0x2009, 0x0005, 0x0804, 0x35a5, 0x9036, 0x7e9a, 0x7f9e, 0x0804, + 0x3573, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001, 0x1987, + 0x2004, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138, + 0x623c, 0x6340, 0x012e, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, + 0x35a8, 0xba44, 0xbb38, 0x0804, 0x3573, 0x080c, 0x0d7d, 0x080c, + 0x4ada, 0x2110, 0x0904, 0x35a8, 0xb804, 0x908c, 0x00ff, 0x918e, + 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, + 0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, + 0x9066, 0x080c, 0xa896, 0x080c, 0xa38a, 0x080c, 0x93a5, 0x0076, + 0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb, 0x007e, 0x00ce, + 0x080c, 0xa8b2, 0xb807, 0x0407, 0x012e, 0x0804, 0x3573, 0x614c, + 0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, + 0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, + 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, + 0x266a, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138, + 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ecc, 0xd0c4, 0x01a8, + 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e, + 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, + 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, + 0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010, + 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, + 0x190c, 0x0ee7, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046, 0x9084, + 0x0001, 0x090c, 0x4246, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, + 0x0114, 0x2012, 0x012e, 0x0804, 0x3573, 0x00f6, 0x2079, 0x1800, + 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, + 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, + 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, + 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35a8, 0x788c, + 0x902d, 0x0904, 0x35a8, 0x900e, 0x080c, 0x6625, 0x1120, 0xba44, + 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, + 0x080c, 0x4ada, 0x0904, 0x35a8, 0x7888, 0x900d, 0x0904, 0x35a8, + 0x788c, 0x9005, 0x0904, 0x35a8, 0xba44, 0xb946, 0xbb38, 0xb83a, + 0x0804, 0x3573, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, + 0x56ee, 0x1904, 0x35a5, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, + 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00, 0x0088, + 0x9182, 0x007f, 0x16e0, 0x9188, 0x3374, 0x210d, 0x918c, 0x00ff, + 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, + 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xab97, 0x000e, + 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x65ca, 0x2b08, + 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4aa7, 0x01d0, + 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, + 0x701f, 0x3a55, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0xac8c, + 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x35a5, 0x00ce, + 0x0804, 0x35a8, 0x080c, 0xabed, 0x0cb0, 0xa830, 0x9086, 0x0100, + 0x0904, 0x35a5, 0x0804, 0x3573, 0x2061, 0x1a6f, 0x0126, 0x2091, + 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, + 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa, 0x012e, + 0x0804, 0x3573, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x35a5, + 0x080c, 0x74e9, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6254, + 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x2664, 0x080c, + 0x5908, 0x012e, 0x0804, 0x3573, 0x012e, 0x0804, 0x35a8, 0x0006, + 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, 0x2061, 0x1847, + 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9166, 0x7206, + 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, + 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x7884, + 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, + 0x012e, 0x0804, 0x35a8, 0x2001, 0x002a, 0x2004, 0x2069, 0x1847, + 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x35a8, 0x012e, 0x0804, + 0x35a5, 0x080c, 0xab57, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3b20, + 0x00c6, 0x080c, 0x4aa7, 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, 0x3caa, + 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, - 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0fb7, - 0x000e, 0x080c, 0x4aec, 0x007e, 0x701f, 0x3be0, 0x7023, 0x0001, - 0x0005, 0x0804, 0x356c, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, - 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, - 0x0016, 0x080c, 0x4aa0, 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, 0x199f, 0x2003, 0x0001, - 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, - 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, - 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4aa0, 0xa813, 0x0019, 0xa817, - 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, - 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, - 0x19a9, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, - 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, - 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, - 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4aa0, 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, 0x29e8, 0x1130, - 0x9006, 0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x7884, 0x9084, - 0x0007, 0x0002, 0x3d5d, 0x3d66, 0x3d6f, 0x3d5a, 0x3d5a, 0x3d5a, - 0x3d5a, 0x3d5a, 0x012e, 0x0804, 0x35a1, 0x2009, 0x0114, 0x2104, - 0x9085, 0x0800, 0x200a, 0x080c, 0x3f31, 0x00c0, 0x2009, 0x0114, - 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3f31, 0x0078, 0x080c, - 0x74d5, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x359e, 0x81ff, - 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x356e, 0x080c, 0xa872, - 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x080c, 0x3a88, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, - 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x41d2, 0x080c, 0x4122, - 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, - 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, - 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, - 0x4083, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, - 0x29f0, 0x080c, 0x4083, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3fb0, - 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3ee7, 0x2001, 0x0004, - 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, - 0x359e, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, - 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, - 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3f8e, 0x2d00, 0x9c05, - 0x9b05, 0x0120, 0x080c, 0x3ee7, 0x0804, 0x3e90, 0x080c, 0x40f7, - 0x080c, 0x401b, 0x080c, 0x3f71, 0x080c, 0x3fa6, 0x00f6, 0x2079, - 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3ee7, 0x00fe, - 0x0804, 0x3e90, 0x00fe, 0x080c, 0x3edd, 0x1150, 0x8d68, 0x2001, - 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3ee7, 0x0080, - 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, - 0x0038, 0x2001, 0x1a6b, 0x2004, 0x9086, 0x0000, 0x1904, 0x3de0, - 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, - 0x9605, 0x0904, 0x3e90, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, - 0x9b05, 0x1904, 0x3e90, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, - 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a6b, 0x2003, 0x0003, - 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, - 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, - 0x21b0, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, - 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, - 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3e67, 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, 0x3d9a, - 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, - 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, - 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x7884, - 0x9084, 0x0003, 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, - 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, - 0x080c, 0x2aab, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, - 0x0090, 0x6043, 0x0010, 0x080c, 0xa88e, 0x00ce, 0x2d08, 0x2c10, - 0x2b18, 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x356c, - 0x012e, 0x2021, 0x400c, 0x0804, 0x356e, 0x9085, 0x0001, 0x1d04, - 0x3ee6, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, - 0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, - 0x1a6b, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x21b0, - 0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, - 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, - 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, - 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x21b0, - 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x40f7, 0x7054, 0x9086, 0x0000, - 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, - 0x080c, 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, - 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, - 0x7936, 0x080c, 0x2644, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x784b, - 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, - 0x2019, 0x61a8, 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, - 0xc0e4, 0x7852, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7843, 0x0040, - 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, - 0x080c, 0x2a0a, 0x2011, 0x0020, 0x080c, 0x2a44, 0x7843, 0x0000, - 0x9006, 0x080c, 0x2a0a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x00fe, - 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6b, - 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, 0x19aa, 0x2004, 0x70e2, 0x080c, - 0x3cc2, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, - 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, - 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, - 0x1818, 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, 0x0092, 0x7016, 0x080c, 0x40f7, 0x00f6, - 0x2071, 0x1a6b, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, - 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, - 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, - 0x2011, 0x0011, 0x080c, 0x4083, 0x2011, 0x0001, 0x080c, 0x4083, - 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079, - 0x0320, 0x792c, 0xd1fc, 0x0904, 0x4080, 0x782b, 0x0002, 0x9026, - 0xd19c, 0x1904, 0x407c, 0x7000, 0x0002, 0x4080, 0x4031, 0x4061, - 0x407c, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, - 0x0001, 0x080c, 0x4083, 0x0904, 0x4080, 0x080c, 0x4083, 0x0804, - 0x4080, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, - 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, - 0x81ff, 0x0de8, 0x080c, 0x3f8e, 0x2009, 0x0001, 0x00f6, 0x2079, - 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, - 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, - 0x1904, 0x4025, 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, 0x0550, 0x8001, 0x0036, - 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, - 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d7d, 0x9398, 0x40b1, - 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, - 0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, - 0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, - 0x0005, 0x40ee, 0x40e5, 0x40dc, 0x40d3, 0x40ca, 0x40c1, 0x40b8, - 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, - 0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, - 0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, - 0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, - 0x00e6, 0x0086, 0x2071, 0x19e7, 0x2079, 0x0090, 0x792c, 0xd1fc, - 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x411e, - 0x410a, 0x4115, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, - 0x080c, 0x4083, 0x190c, 0x4083, 0x0048, 0x8001, 0x7056, 0x782c, - 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x4083, 0x008e, 0x00ee, - 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, - 0x2001, 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, - 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, - 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, - 0x201c, 0x080c, 0x4aa0, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, - 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, - 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, - 0x080c, 0x419a, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa0, - 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, - 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, - 0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, - 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, - 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, 0x2004, 0x9084, - 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 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, 0x4aa0, 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, - 0x4aa0, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, - 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, - 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, - 0x419a, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa0, 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, - 0x1a6b, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, + 0x080c, 0x4af0, 0x701f, 0x3be7, 0x7023, 0x0001, 0x012e, 0x0005, + 0x080c, 0xa896, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a8f, 0x2001, 0x199f, 0x2003, + 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, + 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3d19, 0x080c, + 0x3cd8, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079, + 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, + 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, + 0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c, + 0x3fb7, 0x080c, 0x3ee4, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, + 0x0140, 0x1db8, 0x080c, 0x40fe, 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, 0x1820, + 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, + 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3eee, 0x080c, 0x3cd3, 0x0058, + 0x080c, 0x3cd3, 0x080c, 0x4022, 0x080c, 0x3fad, 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, 0x1328, 0x2009, + 0x0028, 0x080c, 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, + 0xa8b2, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, + 0x008e, 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, + 0x0804, 0x3573, 0x012e, 0x2021, 0x400c, 0x0804, 0x3575, 0x0016, + 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, + 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, + 0x9005, 0x0904, 0x3c43, 0x2048, 0x1f04, 0x3bf7, 0x7068, 0x2040, + 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, + 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, + 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4af0, 0x701f, + 0x3be7, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, + 0x0006, 0x080c, 0x0fb7, 0x000e, 0x080c, 0x4af3, 0x701f, 0x3be7, + 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, + 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, + 0x1118, 0x701f, 0x3ca8, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, + 0xa86a, 0x2009, 0x007f, 0x080c, 0x65c4, 0x0110, 0x9006, 0x0030, + 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xcd1b, 0x015e, 0x00de, + 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0904, 0x35a5, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, + 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c7a, 0x7007, 0x0003, + 0x0804, 0x3c38, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, + 0x3575, 0x0076, 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, 0x0fb7, 0x000e, + 0x080c, 0x4af3, 0x007e, 0x701f, 0x3be7, 0x7023, 0x0001, 0x0005, + 0x0804, 0x3573, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, + 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, + 0x080c, 0x4aa7, 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, 0x199f, 0x2003, 0x0001, 0x0005, + 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, + 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, + 0xc1ac, 0x6106, 0x080c, 0x4aa7, 0xa813, 0x0019, 0xa817, 0x0001, + 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, + 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, + 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, + 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, + 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, + 0x0005, 0x00e6, 0x080c, 0x4aa7, 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, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, - 0x9006, 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, - 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, - 0x0052, 0x0108, 0x0005, 0x0804, 0x356c, 0x7d98, 0x7c9c, 0x0804, - 0x3663, 0x080c, 0x74d5, 0x190c, 0x5fe7, 0x6040, 0x9084, 0x0020, - 0x09b1, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4ae9, 0x701f, 0x4279, - 0x0005, 0x080c, 0x56e2, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, - 0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x35a1, - 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x35a1, 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, 0x35a1, 0x9288, 0x336d, 0x210d, 0x918c, 0x00ff, - 0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x35a1, - 0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, - 0x0006, 0x2009, 0x19b1, 0x9080, 0x2737, 0x2005, 0x200a, 0x2008, - 0x2001, 0x0018, 0x080c, 0xa863, 0x2009, 0x0390, 0x200b, 0x0400, - 0x000e, 0x2009, 0x19b2, 0x9080, 0x273b, 0x2005, 0x200a, 0x6808, - 0x908a, 0x0100, 0x0a04, 0x35a1, 0x908a, 0x0841, 0x1a04, 0x35a1, - 0x9084, 0x0007, 0x1904, 0x35a1, 0x680c, 0x9005, 0x0904, 0x35a1, - 0x6810, 0x9005, 0x0904, 0x35a1, 0x6848, 0x6940, 0x910a, 0x1a04, - 0x35a1, 0x8001, 0x0904, 0x35a1, 0x684c, 0x6944, 0x910a, 0x1a04, - 0x35a1, 0x8001, 0x0904, 0x35a1, 0x6814, 0x908c, 0x00ff, 0x614e, - 0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x780a, 0x080c, 0x6a91, - 0x080c, 0x6ac5, 0x6808, 0x602a, 0x080c, 0x2122, 0x2009, 0x0170, - 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, - 0x080c, 0x269e, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x4404, - 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, 0x19b3, 0x20e9, 0x0001, - 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, - 0x080c, 0x87a0, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, - 0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7dcb, - 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, - 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, - 0x6003, 0x0001, 0x1f04, 0x4362, 0x00ce, 0x00c6, 0x2061, 0x199c, - 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, - 0x0000, 0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c, - 0x2928, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, - 0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x0028, 0x9286, 0x8000, - 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0eb4, - 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, - 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, - 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80, - 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, - 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2713, 0x2001, - 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, - 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x74d5, 0x0128, 0x080c, - 0x4fd7, 0x0110, 0x080c, 0x2664, 0x60d4, 0x9005, 0x01c0, 0x6003, - 0x0001, 0x2009, 0x43ec, 0x00e0, 0x080c, 0x74d5, 0x1168, 0x2011, - 0x734b, 0x080c, 0x860d, 0x2011, 0x733e, 0x080c, 0x8719, 0x080c, - 0x77de, 0x080c, 0x7406, 0x0040, 0x080c, 0x5edd, 0x0028, 0x6003, - 0x0004, 0x2009, 0x4404, 0x0020, 0x080c, 0x69c6, 0x0804, 0x356c, - 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, - 0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086, - 0x0000, 0x0904, 0x359e, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894, - 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x2039, 0x0001, 0x0804, 0x4aec, 0x9006, 0x080c, 0x2664, 0x81ff, - 0x1904, 0x359e, 0x080c, 0x74d5, 0x11b0, 0x080c, 0x77d9, 0x080c, - 0x6022, 0x080c, 0x3361, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, - 0xcf2e, 0x0130, 0x080c, 0x74f8, 0x1118, 0x080c, 0x74a9, 0x0038, - 0x080c, 0x7406, 0x0020, 0x080c, 0x5fe7, 0x080c, 0x5edd, 0x0804, - 0x356c, 0x81ff, 0x1904, 0x359e, 0x080c, 0x74d5, 0x1110, 0x0804, - 0x359e, 0x6194, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80, - 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, - 0x8000, 0x2039, 0x0001, 0x080c, 0x4aec, 0x701f, 0x356a, 0x012e, - 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040, - 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x655c, - 0x9588, 0x336d, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, - 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x661e, 0x1190, 0xb814, - 0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a, - 0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, - 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, - 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80, - 0x2099, 0x1d80, 0x080c, 0x5f72, 0x0804, 0x445e, 0x080c, 0x4ad3, - 0x0904, 0x35a1, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, - 0x359e, 0x080c, 0x56d3, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, - 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, - 0x335c, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x080c, 0xc9e3, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007, - 0x0003, 0x701f, 0x44ec, 0x0005, 0x080c, 0x4ad3, 0x0904, 0x35a1, - 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, - 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, - 0x080c, 0x0fb7, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, - 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, - 0x0fb7, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x0804, 0x4aec, 0x81ff, 0x1904, 0x359e, 0x080c, 0x4ab7, 0x0904, - 0x35a1, 0x080c, 0x685f, 0x0904, 0x359e, 0x0058, 0xa878, 0x9005, - 0x0120, 0x2009, 0x0004, 0x0804, 0x359e, 0xa974, 0xaa94, 0x0804, - 0x356c, 0x080c, 0x56db, 0x0904, 0x356c, 0x701f, 0x4536, 0x7007, - 0x0003, 0x0005, 0x81ff, 0x1904, 0x359e, 0x7888, 0x908a, 0x1000, - 0x1a04, 0x35a1, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x6a5b, - 0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1, 0x080c, 0x68e4, 0x0904, - 0x359e, 0x2019, 0x0004, 0x900e, 0x080c, 0x6871, 0x0904, 0x359e, - 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, - 0x080c, 0x4ad1, 0x01e0, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, - 0x11b0, 0x080c, 0x68e4, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, - 0x2019, 0x0004, 0x080c, 0x6871, 0x2009, 0x0003, 0x0120, 0xa998, - 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, - 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506, - 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x661e, - 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x861b, - 0x0005, 0x81ff, 0x1904, 0x359e, 0x798c, 0x2001, 0x1980, 0x918c, - 0x8000, 0x2102, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x6a5b, - 0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1, 0x080c, 0x66e5, 0x0904, - 0x359e, 0x080c, 0x6868, 0x0904, 0x359e, 0x2001, 0x1980, 0x2004, - 0xd0fc, 0x1904, 0x356c, 0x0804, 0x4541, 0xa9a0, 0x2001, 0x1980, - 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac4, 0x01a0, 0x080c, - 0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1170, 0x080c, 0x66e5, 0x2009, - 0x0002, 0x0128, 0x080c, 0x6868, 0x1170, 0x2009, 0x0003, 0xa897, - 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980, 0x2004, - 0xd0fc, 0x1128, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x359e, - 0x798c, 0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c, 0x4ab7, - 0x0904, 0x35a1, 0x080c, 0x6a5b, 0x0120, 0x080c, 0x6a63, 0x1904, - 0x35a1, 0x080c, 0x66e5, 0x0904, 0x359e, 0x080c, 0x6856, 0x0904, - 0x359e, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x356c, 0x0804, - 0x4541, 0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d, 0x2102, - 0x080c, 0x4ac4, 0x01a0, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, - 0x1170, 0x080c, 0x66e5, 0x2009, 0x0002, 0x0128, 0x080c, 0x6856, - 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56db, - 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, - 0x0005, 0x6100, 0x0804, 0x356c, 0x080c, 0x4ad3, 0x0904, 0x35a1, - 0x080c, 0x56e7, 0x1904, 0x359e, 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, - 0x356c, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, - 0x1a04, 0x359e, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x878a, - 0x2001, 0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x2039, 0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, - 0x0804, 0x4aec, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, - 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, - 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x46f7, 0x0005, 0x81ff, - 0x1904, 0x359e, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x6a5b, - 0x1904, 0x359e, 0x00c6, 0x080c, 0x4aa0, 0x00ce, 0x0904, 0x359e, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc989, - 0x0904, 0x359e, 0x7007, 0x0003, 0x701f, 0x46fb, 0x0005, 0x080c, - 0x423f, 0x0804, 0x356c, 0xa830, 0x9086, 0x0100, 0x0904, 0x359e, + 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x29e8, 0x1130, 0x9006, + 0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x7884, 0x9084, 0x0007, + 0x0002, 0x3d64, 0x3d6d, 0x3d76, 0x3d61, 0x3d61, 0x3d61, 0x3d61, + 0x3d61, 0x012e, 0x0804, 0x35a8, 0x2009, 0x0114, 0x2104, 0x9085, + 0x0800, 0x200a, 0x080c, 0x3f38, 0x00c0, 0x2009, 0x0114, 0x2104, + 0x9085, 0x4000, 0x200a, 0x080c, 0x3f38, 0x0078, 0x080c, 0x74e9, + 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x35a5, 0x81ff, 0x0128, + 0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x080c, 0xa896, 0x0086, + 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, + 0x3a8f, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, + 0x2068, 0x2060, 0x2058, 0x080c, 0x41d9, 0x080c, 0x4129, 0x903e, + 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079, + 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, + 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x408a, + 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, + 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3fb7, 0x2009, + 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3eee, 0x2001, 0x0004, 0x200c, + 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x35a5, + 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, + 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, + 0x200c, 0x81ff, 0x0150, 0x080c, 0x3f95, 0x2d00, 0x9c05, 0x9b05, + 0x0120, 0x080c, 0x3eee, 0x0804, 0x3e97, 0x080c, 0x40fe, 0x080c, + 0x4022, 0x080c, 0x3f78, 0x080c, 0x3fad, 0x00f6, 0x2079, 0x0100, + 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3eee, 0x00fe, 0x0804, + 0x3e97, 0x00fe, 0x080c, 0x3ee4, 0x1150, 0x8d68, 0x2001, 0x0032, + 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3eee, 0x0080, 0x87ff, + 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, + 0x2001, 0x1a6b, 0x2004, 0x9086, 0x0000, 0x1904, 0x3de7, 0x2001, + 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, + 0x0904, 0x3e97, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, + 0x1904, 0x3e97, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, + 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a6b, 0x2003, 0x0003, 0x2001, + 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, + 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x21b0, + 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, + 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, + 0x2001, 0x0203, 0x2004, 0x1f04, 0x3e6e, 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, 0x3da1, 0x001e, + 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, + 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, + 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x7884, 0x9084, + 0x0003, 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x21b0, + 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, + 0x2aab, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, + 0x6043, 0x0010, 0x080c, 0xa8b2, 0x00ce, 0x2d08, 0x2c10, 0x2b18, + 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3573, 0x012e, + 0x2021, 0x400c, 0x0804, 0x3575, 0x9085, 0x0001, 0x1d04, 0x3eed, + 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, + 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a6b, + 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x21b0, 0x2001, + 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, + 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000, + 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, + 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x21b0, 0x782c, + 0xd0fc, 0x0d88, 0x080c, 0x40fe, 0x7054, 0x9086, 0x0000, 0x1d58, + 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, + 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, + 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936, + 0x080c, 0x2644, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x784b, 0xf7f7, + 0x7843, 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, + 0x61a8, 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, + 0x7852, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7843, 0x0040, 0x2019, + 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, + 0x2a0a, 0x2011, 0x0020, 0x080c, 0x2a44, 0x7843, 0x0000, 0x9006, + 0x080c, 0x2a0a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x00fe, 0x0005, + 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 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, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3cc9, + 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c, + 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, + 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818, + 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, 0x0092, 0x7016, 0x080c, 0x40fe, 0x00f6, 0x2071, + 0x1a6b, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, + 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, + 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, + 0x0011, 0x080c, 0x408a, 0x2011, 0x0001, 0x080c, 0x408a, 0x00fe, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079, 0x0320, + 0x792c, 0xd1fc, 0x0904, 0x4087, 0x782b, 0x0002, 0x9026, 0xd19c, + 0x1904, 0x4083, 0x7000, 0x0002, 0x4087, 0x4038, 0x4068, 0x4083, + 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, + 0x080c, 0x408a, 0x0904, 0x4087, 0x080c, 0x408a, 0x0804, 0x4087, + 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, + 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, + 0x0de8, 0x080c, 0x3f95, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, + 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, + 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, + 0x402c, 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, 0x0550, 0x8001, 0x0036, 0x0096, + 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, + 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d7d, 0x9398, 0x40b8, 0x231d, + 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, + 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, + 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, + 0x40f5, 0x40ec, 0x40e3, 0x40da, 0x40d1, 0x40c8, 0x40bf, 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, + 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, + 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, + 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, + 0x0086, 0x2071, 0x19e7, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, + 0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x4125, 0x4111, + 0x411c, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, + 0x408a, 0x190c, 0x408a, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, + 0x1d38, 0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, + 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, + 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, + 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, + 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, + 0x080c, 0x4aa7, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, + 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, + 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, + 0x41a1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa7, 0xa813, + 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, + 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, + 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, + 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009, + 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, + 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 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, 0x4aa7, 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, 0x4aa7, + 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, + 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, + 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x41a1, + 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa7, 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, 0x1a6b, + 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, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, + 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006, + 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, + 0x0108, 0x0005, 0x0804, 0x3573, 0x7d98, 0x7c9c, 0x0804, 0x366a, + 0x080c, 0x74e9, 0x190c, 0x5fee, 0x6040, 0x9084, 0x0020, 0x09b1, + 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0x2039, 0x0001, 0x080c, 0x4af0, 0x701f, 0x4280, 0x0005, + 0x080c, 0x56e9, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, + 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x35a8, 0x6804, + 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x35a8, 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, 0x35a8, 0x9288, 0x3374, 0x210d, 0x918c, 0x00ff, 0x6166, + 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x35a8, 0x605e, + 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, + 0x2009, 0x19b1, 0x9080, 0x2737, 0x2005, 0x200a, 0x2008, 0x2001, + 0x0018, 0x080c, 0xa887, 0x2009, 0x0390, 0x200b, 0x0400, 0x000e, + 0x2009, 0x19b2, 0x9080, 0x273b, 0x2005, 0x200a, 0x6808, 0x908a, + 0x0100, 0x0a04, 0x35a8, 0x908a, 0x0841, 0x1a04, 0x35a8, 0x9084, + 0x0007, 0x1904, 0x35a8, 0x680c, 0x9005, 0x0904, 0x35a8, 0x6810, + 0x9005, 0x0904, 0x35a8, 0x6848, 0x6940, 0x910a, 0x1a04, 0x35a8, + 0x8001, 0x0904, 0x35a8, 0x684c, 0x6944, 0x910a, 0x1a04, 0x35a8, + 0x8001, 0x0904, 0x35a8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007, + 0x9084, 0x00ff, 0x6052, 0x080c, 0x781e, 0x080c, 0x6aa1, 0x080c, + 0x6ad5, 0x6808, 0x602a, 0x080c, 0x2122, 0x2009, 0x0170, 0x200b, + 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, + 0x269e, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x440b, 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, 0x19b3, 0x20e9, 0x0001, 0x4001, + 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c, + 0x87d1, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, + 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7ddf, 0x6878, + 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, + 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, + 0x0001, 0x1f04, 0x4369, 0x00ce, 0x00c6, 0x2061, 0x199c, 0x6a88, + 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, 0x0000, + 0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c, 0x2928, + 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, 0x080c, + 0x2945, 0x9006, 0x080c, 0x2928, 0x0028, 0x9286, 0x8000, 0x1d30, + 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0eb4, 0x00ee, + 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0180, + 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, + 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294, + 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, + 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2713, 0x2001, 0x196d, + 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, + 0x602f, 0x0000, 0x00ce, 0x080c, 0x74e9, 0x0128, 0x080c, 0x4fde, + 0x0110, 0x080c, 0x2664, 0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001, + 0x2009, 0x43f3, 0x00e0, 0x080c, 0x74e9, 0x1168, 0x2011, 0x735f, + 0x080c, 0x863e, 0x2011, 0x7352, 0x080c, 0x874a, 0x080c, 0x77f2, + 0x080c, 0x741a, 0x0040, 0x080c, 0x5ee4, 0x0028, 0x6003, 0x0004, + 0x2009, 0x440b, 0x0020, 0x080c, 0x69cd, 0x0804, 0x3573, 0x2001, + 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, + 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086, 0x0000, + 0x0904, 0x35a5, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894, 0x6846, + 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, + 0x0001, 0x0804, 0x4af3, 0x9006, 0x080c, 0x2664, 0x81ff, 0x1904, + 0x35a5, 0x080c, 0x74e9, 0x11b0, 0x080c, 0x77ed, 0x080c, 0x6029, + 0x080c, 0x3368, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xcf52, + 0x0130, 0x080c, 0x750c, 0x1118, 0x080c, 0x74bd, 0x0038, 0x080c, + 0x741a, 0x0020, 0x080c, 0x5fee, 0x080c, 0x5ee4, 0x0804, 0x3573, + 0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x1110, 0x0804, 0x35a5, + 0x6194, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80, 0x2009, + 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000, + 0x2039, 0x0001, 0x080c, 0x4af3, 0x701f, 0x3571, 0x012e, 0x0005, + 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040, 0x20e9, + 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x655c, 0x9588, + 0x3374, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, + 0x2100, 0x9506, 0x01a8, 0x080c, 0x6625, 0x1190, 0xb814, 0x821c, + 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, + 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, + 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, + 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80, 0x2099, + 0x1d80, 0x080c, 0x5f79, 0x0804, 0x4465, 0x080c, 0x4ada, 0x0904, + 0x35a8, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, + 0x080c, 0x56da, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, + 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3363, + 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, + 0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, + 0x701f, 0x44f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x20a9, + 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, + 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, + 0x0fb7, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, - 0x4aec, 0x9006, 0x080c, 0x2664, 0x78a8, 0x9084, 0x00ff, 0x9086, - 0x00ff, 0x0118, 0x81ff, 0x1904, 0x359e, 0x080c, 0x74d5, 0x0110, - 0x080c, 0x5fe7, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a1, 0x7984, - 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x35a1, 0x2100, - 0x080c, 0x262e, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, - 0x1a03, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, - 0x0000, 0x080c, 0x74d5, 0x1158, 0x080c, 0x77d9, 0x080c, 0x6022, - 0x9085, 0x0001, 0x080c, 0x751c, 0x080c, 0x7406, 0x00f0, 0x080c, - 0xa872, 0x080c, 0xab3a, 0x080c, 0xa88e, 0x2061, 0x0100, 0x2001, - 0x1818, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, - 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, - 0x002d, 0x2011, 0x5f0d, 0x080c, 0x86d7, 0x7984, 0x080c, 0x74d5, - 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x45a4, 0x012e, 0x00ce, - 0x002e, 0x0804, 0x356c, 0x7984, 0x080c, 0x65bd, 0x2b08, 0x1904, - 0x35a1, 0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x359e, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, - 0x0804, 0x359e, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, - 0x359e, 0x7984, 0x9192, 0x0021, 0x1a04, 0x35a1, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, - 0x080c, 0x4ae9, 0x701f, 0x47b3, 0x7880, 0x9086, 0x006e, 0x0110, - 0x701f, 0x5189, 0x0005, 0x2009, 0x0080, 0x080c, 0x661e, 0x1118, - 0x080c, 0x6a5b, 0x0120, 0x2021, 0x400a, 0x0804, 0x356e, 0x00d6, - 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, - 0x90be, 0x0100, 0x0904, 0x484c, 0x90be, 0x0112, 0x0904, 0x484c, - 0x90be, 0x0113, 0x0904, 0x484c, 0x90be, 0x0114, 0x0904, 0x484c, - 0x90be, 0x0117, 0x0904, 0x484c, 0x90be, 0x011a, 0x0904, 0x484c, - 0x90be, 0x011c, 0x0904, 0x484c, 0x90be, 0x0121, 0x0904, 0x4833, - 0x90be, 0x0131, 0x0904, 0x4833, 0x90be, 0x0171, 0x0904, 0x484c, - 0x90be, 0x0173, 0x0904, 0x484c, 0x90be, 0x01a1, 0x1128, 0xa894, - 0x8007, 0xa896, 0x0804, 0x4857, 0x90be, 0x0212, 0x0904, 0x4840, - 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, 0x35a1, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, - 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x4895, 0x7028, 0x9080, - 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, - 0x080c, 0x4895, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, - 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a2, 0x00b8, - 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, - 0x20a9, 0x0001, 0x080c, 0x48a2, 0x7028, 0x9080, 0x000c, 0x2098, - 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, - 0x080c, 0x4aa0, 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, 0xc9a4, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, - 0x7007, 0x0003, 0x701f, 0x488c, 0x0005, 0x00ce, 0x009e, 0x00de, - 0x2009, 0x0002, 0x0804, 0x359e, 0xa820, 0x9086, 0x8001, 0x1904, - 0x356c, 0x2009, 0x0004, 0x0804, 0x359e, 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, 0x359e, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, - 0x2009, 0x0005, 0x0804, 0x359e, 0x7984, 0x78a8, 0x2040, 0x080c, - 0xab33, 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a1, 0x9186, 0x00ff, - 0x0904, 0x35a1, 0x9182, 0x0800, 0x1a04, 0x35a1, 0x7a8c, 0x7b88, - 0x607c, 0x9306, 0x1140, 0x6080, 0x924e, 0x0904, 0x35a1, 0x99cc, - 0xff00, 0x0904, 0x35a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x49b3, - 0x0904, 0x4933, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, - 0x0006, 0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, - 0x9305, 0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, - 0x9305, 0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6a5b, 0x0110, - 0xc89d, 0x0438, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, - 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, - 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, - 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, - 0x0020, 0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, - 0x356e, 0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, - 0x00e6, 0x2c70, 0x080c, 0xac3b, 0x0904, 0x4988, 0x2b00, 0x6012, - 0x080c, 0xcca8, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa0, - 0x00ce, 0x2b70, 0x1158, 0x080c, 0xabc9, 0x00ee, 0x00ce, 0x00be, - 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x359e, 0x900e, 0xa966, - 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, - 0xc0f5, 0xa86a, 0xd89c, 0x1110, 0x080c, 0x31e4, 0x6023, 0x0001, - 0x9006, 0x080c, 0x655a, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, - 0x656e, 0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x656e, - 0x2009, 0x0002, 0x080c, 0xac68, 0x78a8, 0xd094, 0x0138, 0x00ee, - 0x7024, 0x00e6, 0x2058, 0xb8d4, 0xc08d, 0xb8d6, 0x9085, 0x0001, - 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, - 0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x4997, 0x0005, 0xa830, - 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, - 0x9294, 0x00ff, 0x0804, 0x5630, 0x900e, 0xa868, 0xd0f4, 0x1904, - 0x356c, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x0804, 0x356c, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, - 0x4a02, 0x902e, 0x080c, 0xab33, 0x0130, 0x9026, 0x20a9, 0x0800, - 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, - 0x107f, 0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a13, - 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, - 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, - 0x1508, 0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, - 0xbe14, 0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, - 0x0598, 0xd894, 0x1588, 0x080c, 0x69fb, 0x1570, 0x2001, 0x4000, - 0x0460, 0x080c, 0x6a5b, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, - 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, - 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xab33, 0x1900, - 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x49c9, 0x85ff, - 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, - 0x65bd, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, - 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, - 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0xa867, - 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x35a1, - 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x35a1, 0x2010, - 0x2918, 0x080c, 0x317e, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, - 0x7007, 0x0003, 0x701f, 0x4a55, 0x0005, 0xa830, 0x9086, 0x0100, - 0x1904, 0x356c, 0x2009, 0x0004, 0x0804, 0x359e, 0x7984, 0x080c, - 0xab33, 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a1, 0x9186, 0x00ff, - 0x0904, 0x35a1, 0x9182, 0x0800, 0x1a04, 0x35a1, 0x2001, 0x9000, - 0x080c, 0x568b, 0x1904, 0x359e, 0x0804, 0x356c, 0xa998, 0x080c, - 0xab33, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, - 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x568b, 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, 0x103a, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, - 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, - 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, - 0x080c, 0x661e, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, - 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x661e, 0x1130, - 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, - 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x661e, 0x1108, - 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, - 0x2148, 0xa904, 0x080c, 0x106c, 0x0cc8, 0x7116, 0x711a, 0x001e, - 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, - 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, - 0xa59a, 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x356c, 0x0005, - 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, - 0x2004, 0x9005, 0x1190, 0x0e04, 0x4b1d, 0x7a36, 0x7833, 0x0012, - 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x11d6, 0x0804, 0x4b83, 0x0016, 0x0086, 0x0096, - 0x00c6, 0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540, 0x7148, - 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x103a, 0x0904, - 0x4b7b, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, - 0x1e55, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, - 0x18ba, 0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, - 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, - 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, - 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, - 0xa146, 0x1520, 0x080c, 0x103a, 0x1130, 0x8109, 0xa946, 0x7148, - 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, - 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55, - 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, - 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, - 0x001b, 0x0002, 0x4ba5, 0x4ba5, 0x4ba7, 0x4ba5, 0x4ba5, 0x4ba5, - 0x4bab, 0x4ba5, 0x4ba5, 0x4ba5, 0x4baf, 0x4ba5, 0x4ba5, 0x4ba5, - 0x4bb3, 0x4ba5, 0x4ba5, 0x4ba5, 0x4bb7, 0x4ba5, 0x4ba5, 0x4ba5, - 0x4bbb, 0x4ba5, 0x4ba5, 0x4ba5, 0x4bc0, 0x080c, 0x0d7d, 0xa276, - 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, - 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, - 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b7e, - 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4b7e, 0x00e6, 0x2071, 0x189e, - 0x7048, 0x9005, 0x0904, 0x4c57, 0x0126, 0x2091, 0x8000, 0x0e04, - 0x4c56, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, - 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, - 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, - 0x2105, 0x9005, 0xa94a, 0x1904, 0x4c59, 0xa804, 0x9005, 0x090c, - 0x0d7d, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, - 0x9080, 0x1e55, 0x2005, 0xa04a, 0x0804, 0x4c59, 0x703c, 0x2060, - 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, - 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x87ff, 0x0118, 0x2748, - 0x080c, 0x106c, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, - 0x2048, 0x9005, 0x0128, 0x080c, 0x106c, 0x9006, 0x7042, 0x7046, - 0x703b, 0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, - 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, - 0x0210, 0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, - 0x7044, 0x9005, 0x090c, 0x0d7d, 0x2048, 0xa800, 0x9005, 0x1de0, - 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, 0xa84a, - 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, - 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4c78, 0x4c78, 0x4c7a, - 0x4c78, 0x4c78, 0x4c78, 0x4c7f, 0x4c78, 0x4c78, 0x4c78, 0x4c84, - 0x4c78, 0x4c78, 0x4c78, 0x4c89, 0x4c78, 0x4c78, 0x4c78, 0x4c8e, - 0x4c78, 0x4c78, 0x4c78, 0x4c93, 0x4c78, 0x4c78, 0x4c78, 0x4c98, - 0x080c, 0x0d7d, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4c04, 0xaa84, - 0xab88, 0xac8c, 0x0804, 0x4c04, 0xaa94, 0xab98, 0xac9c, 0x0804, - 0x4c04, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4c04, 0xaab4, 0xabb8, - 0xacbc, 0x0804, 0x4c04, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c04, - 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x4c04, 0x0016, 0x0026, 0x0036, - 0x00b6, 0x00c6, 0x2009, 0x007e, 0x080c, 0x661e, 0x2019, 0x0001, - 0xb85c, 0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, - 0x4b00, 0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, - 0x080c, 0x56d3, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x4b00, - 0x002e, 0x0005, 0x81ff, 0x1904, 0x359e, 0x0126, 0x2091, 0x8000, - 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x74d5, 0x1158, - 0x080c, 0x77d9, 0x080c, 0x6022, 0x9085, 0x0001, 0x080c, 0x751c, - 0x080c, 0x7406, 0x0010, 0x080c, 0x5edd, 0x012e, 0x0804, 0x356c, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c, 0x56e7, - 0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x080c, 0x6a53, 0x0120, - 0x2009, 0x0008, 0x0804, 0x359e, 0x080c, 0x335c, 0x0128, 0x7984, - 0x080c, 0x65bd, 0x1904, 0x35a1, 0x080c, 0x4ad3, 0x0904, 0x35a1, - 0x2b00, 0x7026, 0x080c, 0x6a5b, 0x7888, 0x1170, 0x9084, 0x0005, - 0x1158, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x0804, 0x356c, 0x080c, 0x4aa0, 0x0904, 0x359e, - 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca46, - 0x0904, 0x359e, 0x7888, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, - 0x7007, 0x0003, 0x701f, 0x4d79, 0x0005, 0x2061, 0x1800, 0x080c, - 0x56e7, 0x2009, 0x0007, 0x1578, 0x080c, 0x6a53, 0x0118, 0x2009, - 0x0008, 0x0448, 0x080c, 0x335c, 0x0120, 0xa998, 0x080c, 0x65bd, - 0x1530, 0x080c, 0x4ad1, 0x0518, 0x080c, 0x6a5b, 0xa89c, 0x1168, - 0x9084, 0x0005, 0x1150, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, - 0x080c, 0xca46, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d, - 0xb8d6, 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, 0x7024, 0x2058, 0x1110, 0x0804, - 0x5630, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x0804, 0x356c, 0x080c, 0x56e7, 0x0120, 0x2009, - 0x0007, 0x0804, 0x359e, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0x900e, - 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, - 0x0005, 0x702a, 0x20a0, 0x080c, 0x661e, 0x1904, 0x4e1b, 0x080c, - 0x6a5b, 0x0138, 0x080c, 0x6a63, 0x0120, 0x080c, 0x69fb, 0x1904, - 0x4e1b, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, - 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, - 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, - 0x48a2, 0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, - 0x20e0, 0x080c, 0x48a2, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, - 0x0158, 0x080c, 0x6a5b, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, - 0x080c, 0x690d, 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, - 0xb8c4, 0x20e0, 0xb8c8, 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, 0x4895, 0x9c80, 0x0026, 0x2098, - 0xb8c4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, - 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0xab33, 0x0118, 0x9186, - 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, - 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, - 0x9686, 0x0028, 0x0150, 0x0804, 0x4dab, 0x86ff, 0x1120, 0x7124, - 0x810b, 0x0804, 0x356c, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, - 0x7026, 0x772e, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, - 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, - 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x4e57, 0x0005, 0x7030, - 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, - 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, - 0x0804, 0x4dab, 0x7124, 0x810b, 0x0804, 0x356c, 0x2029, 0x007e, - 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, - 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9184, 0x00ff, - 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9284, - 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, - 0x35a1, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, - 0x0a04, 0x35a1, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, - 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9384, 0x00ff, 0x90e2, 0x0020, - 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9484, 0xff00, 0x8007, - 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9484, - 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, - 0x2061, 0x1989, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x356c, - 0x080c, 0x4aa0, 0x0904, 0x359e, 0x2009, 0x0016, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9, - 0x701f, 0x4edb, 0x0005, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, - 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, - 0x896e, 0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, - 0x9d84, 0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, - 0x4003, 0x6800, 0x9005, 0x0904, 0x4f5c, 0x6804, 0x2008, 0x918c, - 0xfff8, 0x1904, 0x4f5c, 0x680c, 0x9005, 0x0904, 0x4f5c, 0x9082, - 0xff01, 0x1a04, 0x4f5c, 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f5c, - 0x6824, 0x2008, 0x9082, 0x0008, 0x0a04, 0x4f5c, 0x9182, 0x0400, - 0x1a04, 0x4f5c, 0x0056, 0x2029, 0x0000, 0x080c, 0x8cd9, 0x005e, - 0x6944, 0x6820, 0x9102, 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, - 0x6828, 0x6944, 0x810c, 0x9102, 0x0678, 0x6840, 0x9082, 0x000f, - 0x1658, 0x080c, 0x1053, 0x2900, 0x0904, 0x4f76, 0x684e, 0x00e6, - 0x2071, 0x1930, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8b95, 0x00be, - 0x00ee, 0x0558, 0x080c, 0x88ef, 0x080c, 0x8935, 0x11e0, 0x6857, - 0x0000, 0x00c6, 0x2061, 0x0100, 0x6104, 0x918d, 0x2000, 0x6106, - 0x6b10, 0x2061, 0x1a6b, 0x630a, 0x00ce, 0x080c, 0x2713, 0x2001, - 0x0138, 0x2102, 0x0804, 0x356c, 0x080c, 0x2713, 0x2001, 0x0138, - 0x2102, 0x0804, 0x35a1, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d6a, - 0x080c, 0x8d79, 0x080c, 0x8b84, 0x00ee, 0x2001, 0x188a, 0x204c, - 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x080c, 0x2713, - 0x2001, 0x0138, 0x2102, 0x0804, 0x359e, 0x2001, 0x1924, 0x200c, - 0x918e, 0x0000, 0x0904, 0x4fd5, 0x080c, 0x8b7f, 0x0904, 0x4fd5, - 0x2001, 0x0101, 0x200c, 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, - 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, - 0x00ee, 0x080c, 0x8b84, 0x2001, 0x0035, 0x080c, 0x1679, 0x00c6, - 0x2061, 0x193c, 0x6004, 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, - 0x2713, 0x2001, 0x0138, 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, - 0x080c, 0x8ac0, 0x0120, 0x2f00, 0x080c, 0x8b4a, 0x0cc8, 0x00fe, - 0x00ee, 0x0126, 0x2091, 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, - 0x0138, 0x2148, 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, - 0x2001, 0x183d, 0x2003, 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, - 0x8d6a, 0x080c, 0x8d79, 0x00ee, 0x012e, 0x0804, 0x356c, 0x0006, - 0x080c, 0x56d3, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d7, - 0xd0bc, 0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, - 0x7986, 0x0804, 0x356c, 0x83ff, 0x1904, 0x35a1, 0x2001, 0xfff0, - 0x9200, 0x1a04, 0x35a1, 0x2019, 0xffff, 0x6078, 0x9302, 0x9200, - 0x0a04, 0x35a1, 0x7986, 0x6276, 0x0804, 0x356c, 0x080c, 0x56e7, - 0x1904, 0x359e, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa0, - 0x0904, 0x359e, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, - 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, - 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, - 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, - 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, - 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, - 0x080c, 0x9135, 0x2208, 0x0804, 0x356c, 0x7033, 0x0001, 0x7122, - 0x7024, 0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, - 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, - 0xa79a, 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x5058, 0x0005, - 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, - 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, - 0x0804, 0x5016, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9135, - 0x2208, 0x0804, 0x356c, 0x00f6, 0x00e6, 0x080c, 0x56e7, 0x2009, - 0x0007, 0x1904, 0x50eb, 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, - 0x000e, 0x1904, 0x50eb, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, - 0x080c, 0x1053, 0x2009, 0x0002, 0x0904, 0x50eb, 0x2900, 0x705e, - 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, - 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, - 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1148, 0xb814, 0x20a9, - 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, - 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, - 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9135, 0x2208, - 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0d7d, - 0x2148, 0x080c, 0x106c, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, - 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, - 0x18b9, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, - 0xa592, 0xa696, 0xa79a, 0xa09f, 0x50f7, 0x000e, 0xa0a2, 0x080c, - 0x1124, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0xa0a0, 0x904d, 0x090c, 0x0d7d, 0x00e6, 0x2071, 0x189e, 0xa06c, - 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, - 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, - 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, - 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, - 0x2001, 0x0003, 0x080c, 0x9135, 0xaa9a, 0x715c, 0x81ff, 0x090c, - 0x0d7d, 0x2148, 0x080c, 0x106c, 0x705f, 0x0000, 0xa0a0, 0x2048, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0xa09f, 0x0000, - 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, - 0x8bff, 0x0178, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1148, - 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, - 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, - 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, - 0x715c, 0x81ff, 0x090c, 0x0d7d, 0x2148, 0x080c, 0x106c, 0x9006, - 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6d70, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, - 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, - 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x1124, 0x9006, 0x00ee, - 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, - 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x35a1, 0xa884, - 0xa988, 0x080c, 0x25fb, 0x1518, 0x080c, 0x65bd, 0x1500, 0x7126, - 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4aa0, 0x01c8, 0x080c, 0x4aa0, - 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, - 0x0000, 0xa804, 0x2048, 0x080c, 0xc9c4, 0x1120, 0x2009, 0x0003, - 0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x51c4, 0x0005, 0x009e, - 0x2009, 0x0002, 0x0804, 0x359e, 0x7124, 0x080c, 0x32f5, 0xa820, - 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x359e, 0x2900, - 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, - 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, - 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, - 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, - 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, - 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, - 0x0804, 0x4aec, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, - 0x000e, 0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, - 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x1124, 0x7007, - 0x0002, 0x701f, 0x5220, 0x0005, 0x000e, 0x007e, 0x0804, 0x35a1, - 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, - 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0x2100, - 0x2238, 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, - 0x2009, 0x002a, 0x0804, 0x4aec, 0x81ff, 0x1904, 0x359e, 0x798c, - 0x2001, 0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4ab7, 0x0904, - 0x35a1, 0x080c, 0x6a5b, 0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1, - 0x080c, 0x66e5, 0x0904, 0x359e, 0x0126, 0x2091, 0x8000, 0x080c, - 0x687a, 0x012e, 0x0904, 0x359e, 0x2001, 0x197e, 0x2004, 0xd0fc, - 0x1904, 0x356c, 0x0804, 0x4541, 0xa9a0, 0x2001, 0x197e, 0x918c, - 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac4, 0x01a0, 0x080c, 0x6a5b, - 0x0118, 0x080c, 0x6a63, 0x1170, 0x080c, 0x66e5, 0x2009, 0x0002, - 0x0128, 0x080c, 0x687a, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, + 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, + 0x4af3, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x4abe, 0x0904, 0x35a8, + 0x080c, 0x6866, 0x0904, 0x35a5, 0x0058, 0xa878, 0x9005, 0x0120, + 0x2009, 0x0004, 0x0804, 0x35a5, 0xa974, 0xaa94, 0x0804, 0x3573, + 0x080c, 0x56e2, 0x0904, 0x3573, 0x701f, 0x453d, 0x7007, 0x0003, + 0x0005, 0x81ff, 0x1904, 0x35a5, 0x7888, 0x908a, 0x1000, 0x1a04, + 0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120, + 0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5, + 0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7984, + 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c, + 0x4ad8, 0x01e0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x11b0, + 0x080c, 0x68eb, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, + 0x0004, 0x080c, 0x6878, 0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c, + 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, + 0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, + 0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506, 0x0110, + 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6625, 0x1138, + 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x0005, + 0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001, 0x1980, 0x918c, 0x8000, + 0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120, + 0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5, + 0x080c, 0x686f, 0x0904, 0x35a5, 0x2001, 0x1980, 0x2004, 0xd0fc, + 0x1904, 0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x1980, 0x918c, + 0x8000, 0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b, + 0x0118, 0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002, + 0x0128, 0x080c, 0x686f, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, - 0x1128, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, - 0x0904, 0x44b6, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x4aa0, - 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0x080c, 0x6a5b, 0x0130, - 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, - 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x56d3, 0xd0b4, - 0x0904, 0x44f0, 0x7884, 0x908e, 0x007e, 0x0904, 0x44f0, 0x908e, - 0x007f, 0x0904, 0x44f0, 0x908e, 0x0080, 0x0904, 0x44f0, 0xb800, - 0xd08c, 0x1904, 0x44f0, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x080c, 0xc9e3, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007, - 0x0003, 0x701f, 0x52ec, 0x0005, 0x080c, 0x4ad3, 0x0904, 0x35a1, - 0x0804, 0x44f0, 0x080c, 0x335c, 0x0108, 0x0005, 0x2009, 0x1834, - 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c, - 0x56e7, 0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x080c, 0x6a53, - 0x0120, 0x2009, 0x0008, 0x0804, 0x359e, 0xb89c, 0xd0a4, 0x1118, - 0xd0ac, 0x1904, 0x44f0, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xca46, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, - 0x7007, 0x0003, 0x701f, 0x5325, 0x0005, 0xa830, 0x9086, 0x0100, - 0x1120, 0x2009, 0x0004, 0x0804, 0x5630, 0x080c, 0x4ad3, 0x0904, - 0x35a1, 0x0804, 0x52be, 0x81ff, 0x2009, 0x0001, 0x1904, 0x359e, - 0x080c, 0x56e7, 0x2009, 0x0007, 0x1904, 0x359e, 0x080c, 0x6a53, - 0x0120, 0x2009, 0x0008, 0x0804, 0x359e, 0x080c, 0x4ad3, 0x0904, - 0x35a1, 0x080c, 0x6a5b, 0x2009, 0x0009, 0x1904, 0x359e, 0x080c, - 0x4aa0, 0x2009, 0x0002, 0x0904, 0x359e, 0x9006, 0xa866, 0xa832, - 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, - 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, - 0x928e, 0x0100, 0x1904, 0x35a1, 0xc0e5, 0xa952, 0xa956, 0xa83e, - 0x080c, 0xcca9, 0x2009, 0x0003, 0x0904, 0x359e, 0x7007, 0x0003, - 0x701f, 0x537b, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, - 0x0904, 0x359e, 0x0804, 0x356c, 0x7aa8, 0x9284, 0xc000, 0x0148, - 0xd2ec, 0x01a0, 0x080c, 0x56e7, 0x1188, 0x2009, 0x0014, 0x0804, - 0x359e, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x359e, - 0x080c, 0x56e7, 0x2009, 0x0007, 0x1904, 0x359e, 0xd2f4, 0x0130, - 0x9284, 0x5000, 0x080c, 0x56ae, 0x0804, 0x356c, 0xd2fc, 0x0158, - 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x7984, 0x9284, 0x9000, 0x080c, - 0x568b, 0x0804, 0x356c, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0xb804, - 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x5464, - 0x080c, 0x4aa0, 0x2009, 0x0002, 0x0904, 0x5464, 0xa85c, 0x9080, - 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x080c, 0x4ae9, 0x701f, 0x53d5, 0x0005, 0xa86c, 0x9086, 0x0500, - 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, - 0x1904, 0x35a1, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, - 0x4ad3, 0x1110, 0x0804, 0x35a1, 0x2009, 0x0043, 0x080c, 0xcd11, - 0x2009, 0x0003, 0x0904, 0x5464, 0x7007, 0x0003, 0x701f, 0x53f9, - 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x5464, - 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x568b, 0x0804, 0x356c, - 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, - 0x56e7, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, - 0x56e7, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, - 0x080c, 0x56ae, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4ad1, 0x0588, - 0xa998, 0x9284, 0x9000, 0x080c, 0x568b, 0xa87b, 0x0000, 0xa883, - 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4ad1, 0x0510, 0x080c, - 0x6a5b, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, - 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, - 0x4ad1, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xcd11, 0x2009, - 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, + 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980, 0x2004, 0xd0fc, + 0x1128, 0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x35a5, 0x798c, + 0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904, + 0x35a8, 0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8, + 0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c, 0x685d, 0x0904, 0x35a5, + 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x3573, 0x0804, 0x4548, + 0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, + 0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1170, + 0x080c, 0x66ec, 0x2009, 0x0002, 0x0128, 0x080c, 0x685d, 0x1170, + 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, + 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56e2, 0x0110, + 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, + 0x6100, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, + 0x56ee, 0x1904, 0x35a5, 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, 0x3573, + 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, + 0x35a5, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x87bb, 0x2001, + 0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, + 0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, 0x0804, + 0x4af3, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, + 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, + 0x1124, 0x7007, 0x0002, 0x701f, 0x46fe, 0x0005, 0x81ff, 0x1904, + 0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x1904, + 0x35a5, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x0904, 0x35a5, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc9ad, 0x0904, + 0x35a5, 0x7007, 0x0003, 0x701f, 0x4702, 0x0005, 0x080c, 0x4246, + 0x0804, 0x3573, 0xa830, 0x9086, 0x0100, 0x0904, 0x35a5, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, + 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af3, + 0x9006, 0x080c, 0x2664, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, + 0x0118, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x0110, 0x080c, + 0x5fee, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a8, 0x7984, 0x9186, + 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x35a8, 0x2100, 0x080c, + 0x262e, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x1a03, + 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, 0x0000, + 0x080c, 0x74e9, 0x1158, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085, + 0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x00f0, 0x080c, 0xa896, + 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x2061, 0x0100, 0x2001, 0x1818, + 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, + 0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, + 0x2011, 0x5f14, 0x080c, 0x8708, 0x7984, 0x080c, 0x74e9, 0x1110, + 0x2009, 0x00ff, 0x7a88, 0x080c, 0x45ab, 0x012e, 0x00ce, 0x002e, + 0x0804, 0x3573, 0x7984, 0x080c, 0x65c4, 0x2b08, 0x1904, 0x35a8, + 0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, + 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, + 0x35a5, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, + 0x7984, 0x9192, 0x0021, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, + 0x4af0, 0x701f, 0x47ba, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, + 0x5190, 0x0005, 0x2009, 0x0080, 0x080c, 0x6625, 0x1118, 0x080c, + 0x6a6b, 0x0120, 0x2021, 0x400a, 0x0804, 0x3575, 0x00d6, 0x0096, + 0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, + 0x0100, 0x0904, 0x4853, 0x90be, 0x0112, 0x0904, 0x4853, 0x90be, + 0x0113, 0x0904, 0x4853, 0x90be, 0x0114, 0x0904, 0x4853, 0x90be, + 0x0117, 0x0904, 0x4853, 0x90be, 0x011a, 0x0904, 0x4853, 0x90be, + 0x011c, 0x0904, 0x4853, 0x90be, 0x0121, 0x0904, 0x483a, 0x90be, + 0x0131, 0x0904, 0x483a, 0x90be, 0x0171, 0x0904, 0x4853, 0x90be, + 0x0173, 0x0904, 0x4853, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, + 0xa896, 0x0804, 0x485e, 0x90be, 0x0212, 0x0904, 0x4847, 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, + 0x35a8, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, + 0x20e8, 0x20a9, 0x0007, 0x080c, 0x489c, 0x7028, 0x9080, 0x000e, + 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, + 0x489c, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, + 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a9, 0x00b8, 0x7028, + 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, + 0x0001, 0x080c, 0x48a9, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, + 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, + 0x4aa7, 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, 0xc9c8, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, + 0x0003, 0x701f, 0x4893, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, + 0x0002, 0x0804, 0x35a5, 0xa820, 0x9086, 0x8001, 0x1904, 0x3573, + 0x2009, 0x0004, 0x0804, 0x35a5, 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, 0x35a5, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, + 0x0005, 0x0804, 0x35a5, 0x7984, 0x78a8, 0x2040, 0x080c, 0xab57, + 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904, + 0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x607c, + 0x9306, 0x1140, 0x6080, 0x924e, 0x0904, 0x35a8, 0x99cc, 0xff00, + 0x0904, 0x35a8, 0x0126, 0x2091, 0x8000, 0x080c, 0x49ba, 0x0904, + 0x493a, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, + 0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, + 0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, + 0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6a6b, 0x0110, 0xc89d, + 0x0438, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, + 0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, + 0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, + 0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, + 0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3575, + 0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, + 0x2c70, 0x080c, 0xac5f, 0x0904, 0x498f, 0x2b00, 0x6012, 0x080c, + 0xcccc, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa7, 0x00ce, + 0x2b70, 0x1158, 0x080c, 0xabed, 0x00ee, 0x00ce, 0x00be, 0x001e, + 0x012e, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0xa966, 0xa96a, + 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, + 0xa86a, 0xd89c, 0x1110, 0x080c, 0x31e7, 0x6023, 0x0001, 0x9006, + 0x080c, 0x6561, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x6575, + 0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x6575, 0x2009, + 0x0002, 0x080c, 0xac8c, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, + 0x00e6, 0x2058, 0xb8d4, 0xc08d, 0xb8d6, 0x9085, 0x0001, 0x00ee, + 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, + 0x35a5, 0x7007, 0x0003, 0x701f, 0x499e, 0x0005, 0xa830, 0x9086, + 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, + 0x00ff, 0x0804, 0x5637, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x3573, + 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x0804, 0x3573, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a09, + 0x902e, 0x080c, 0xab57, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, + 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, + 0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a1a, 0x2428, + 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, + 0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, + 0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, + 0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, 0x0598, + 0xd894, 0x1588, 0x080c, 0x6a0b, 0x1570, 0x2001, 0x4000, 0x0460, + 0x080c, 0x6a6b, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, + 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, + 0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xab57, 0x1900, 0x2001, + 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x49d0, 0x85ff, 0x1130, + 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x65c4, + 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, + 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, + 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000, + 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x35a8, 0x9096, + 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x35a8, 0x2010, 0x2918, + 0x080c, 0x3181, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, + 0x0003, 0x701f, 0x4a5c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1904, + 0x3573, 0x2009, 0x0004, 0x0804, 0x35a5, 0x7984, 0x080c, 0xab57, + 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904, + 0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x2001, 0x9000, 0x080c, + 0x5692, 0x1904, 0x35a5, 0x0804, 0x3573, 0xa998, 0x080c, 0xab57, + 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, + 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5692, 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, + 0x103a, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, + 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, + 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c, + 0x6625, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, + 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6625, 0x1130, 0xae9c, + 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, + 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6625, 0x1108, 0x0008, + 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, + 0xa904, 0x080c, 0x106c, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, + 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, + 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, + 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x3573, 0x0005, 0x00f6, + 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, + 0x9005, 0x1190, 0x0e04, 0x4b24, 0x7a36, 0x7833, 0x0012, 0x7a82, + 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11d6, 0x0804, 0x4b8a, 0x0016, 0x0086, 0x0096, 0x00c6, + 0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, + 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x103a, 0x0904, 0x4b82, + 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55, + 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, + 0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, + 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, + 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0036, + 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, + 0x1520, 0x080c, 0x103a, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, + 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, + 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, + 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, + 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, + 0x0002, 0x4bac, 0x4bac, 0x4bae, 0x4bac, 0x4bac, 0x4bac, 0x4bb2, + 0x4bac, 0x4bac, 0x4bac, 0x4bb6, 0x4bac, 0x4bac, 0x4bac, 0x4bba, + 0x4bac, 0x4bac, 0x4bac, 0x4bbe, 0x4bac, 0x4bac, 0x4bac, 0x4bc2, + 0x4bac, 0x4bac, 0x4bac, 0x4bc7, 0x080c, 0x0d7d, 0xa276, 0xa37a, + 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, + 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, + 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b85, 0xa2d6, + 0xa3da, 0xa4de, 0x0804, 0x4b85, 0x00e6, 0x2071, 0x189e, 0x7048, + 0x9005, 0x0904, 0x4c5e, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5d, + 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, + 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, + 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, + 0x9005, 0xa94a, 0x1904, 0x4c60, 0xa804, 0x9005, 0x090c, 0x0d7d, + 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, + 0x1e55, 0x2005, 0xa04a, 0x0804, 0x4c60, 0x703c, 0x2060, 0x2c14, + 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, + 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x11d6, 0x87ff, 0x0118, 0x2748, 0x080c, + 0x106c, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, + 0x9005, 0x0128, 0x080c, 0x106c, 0x9006, 0x7042, 0x7046, 0x703b, + 0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, + 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, + 0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, + 0x9005, 0x090c, 0x0d7d, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, + 0x7042, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, 0xa84a, 0x0000, + 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, + 0x2c00, 0x9082, 0x001b, 0x0002, 0x4c7f, 0x4c7f, 0x4c81, 0x4c7f, + 0x4c7f, 0x4c7f, 0x4c86, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c8b, 0x4c7f, + 0x4c7f, 0x4c7f, 0x4c90, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c95, 0x4c7f, + 0x4c7f, 0x4c7f, 0x4c9a, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c9f, 0x080c, + 0x0d7d, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4c0b, 0xaa84, 0xab88, + 0xac8c, 0x0804, 0x4c0b, 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c0b, + 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4c0b, 0xaab4, 0xabb8, 0xacbc, + 0x0804, 0x4c0b, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c0b, 0xaad4, + 0xabd8, 0xacdc, 0x0804, 0x4c0b, 0x0016, 0x0026, 0x0036, 0x00b6, + 0x00c6, 0x2009, 0x007e, 0x080c, 0x6625, 0x2019, 0x0001, 0xb85c, + 0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b07, + 0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, + 0x56da, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x4b07, 0x002e, + 0x0005, 0x81ff, 0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6030, + 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x74e9, 0x1158, 0x080c, + 0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c, + 0x741a, 0x0010, 0x080c, 0x5ee4, 0x012e, 0x0804, 0x3573, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120, + 0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120, 0x2009, + 0x0008, 0x0804, 0x35a5, 0x080c, 0x3363, 0x0128, 0x7984, 0x080c, + 0x65c4, 0x1904, 0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x2b00, + 0x7026, 0x080c, 0x6a6b, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, + 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, + 0xc18d, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x0904, 0x35a5, 0x9006, + 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca6a, 0x0904, + 0x35a5, 0x7888, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x7007, + 0x0003, 0x701f, 0x4d80, 0x0005, 0x2061, 0x1800, 0x080c, 0x56ee, + 0x2009, 0x0007, 0x1578, 0x080c, 0x6a63, 0x0118, 0x2009, 0x0008, + 0x0448, 0x080c, 0x3363, 0x0120, 0xa998, 0x080c, 0x65c4, 0x1530, + 0x080c, 0x4ad8, 0x0518, 0x080c, 0x6a6b, 0xa89c, 0x1168, 0x9084, + 0x0005, 0x1150, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, + 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, + 0xca6a, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, + 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, 0x7024, 0x2058, 0x1110, 0x0804, 0x5637, + 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, + 0xc18d, 0x0804, 0x3573, 0x080c, 0x56ee, 0x0120, 0x2009, 0x0007, + 0x0804, 0x35a5, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, + 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0x2130, + 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, + 0x702a, 0x20a0, 0x080c, 0x6625, 0x1904, 0x4e22, 0x080c, 0x6a6b, + 0x0138, 0x080c, 0x6a73, 0x0120, 0x080c, 0x6a0b, 0x1904, 0x4e22, + 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, + 0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, + 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a9, + 0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, + 0x080c, 0x48a9, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158, + 0x080c, 0x6a6b, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, + 0x6914, 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, + 0x20e0, 0xb8c8, 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, 0x489c, 0x9c80, 0x0026, 0x2098, 0xb8c4, + 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, + 0x96b0, 0x0005, 0x8108, 0x080c, 0xab57, 0x0118, 0x9186, 0x0800, + 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, + 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, + 0x0028, 0x0150, 0x0804, 0x4db2, 0x86ff, 0x1120, 0x7124, 0x810b, + 0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, + 0x772e, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, + 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, + 0x1124, 0x7007, 0x0002, 0x701f, 0x4e5e, 0x0005, 0x7030, 0x9005, + 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, + 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, + 0x4db2, 0x7124, 0x810b, 0x0804, 0x3573, 0x2029, 0x007e, 0x7984, + 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, + 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9184, 0x00ff, 0x90e2, + 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9284, 0xff00, + 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, + 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, + 0x35a8, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8, + 0x9502, 0x0a04, 0x35a8, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, + 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0xff00, 0x8007, 0x90e2, + 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0x00ff, + 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x2061, + 0x1989, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x3573, 0x080c, + 0x4aa7, 0x0904, 0x35a5, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f, + 0x4ee2, 0x0005, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, + 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, + 0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, + 0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, + 0x6800, 0x9005, 0x0904, 0x4f63, 0x6804, 0x2008, 0x918c, 0xfff8, + 0x1904, 0x4f63, 0x680c, 0x9005, 0x0904, 0x4f63, 0x9082, 0xff01, + 0x1a04, 0x4f63, 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f63, 0x6824, + 0x2008, 0x9082, 0x0008, 0x0a04, 0x4f63, 0x9182, 0x0400, 0x1a04, + 0x4f63, 0x0056, 0x2029, 0x0000, 0x080c, 0x8d0a, 0x005e, 0x6944, + 0x6820, 0x9102, 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, + 0x6944, 0x810c, 0x9102, 0x0678, 0x6840, 0x9082, 0x000f, 0x1658, + 0x080c, 0x1053, 0x2900, 0x0904, 0x4f7d, 0x684e, 0x00e6, 0x2071, + 0x1930, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8bc6, 0x00be, 0x00ee, + 0x0558, 0x080c, 0x8920, 0x080c, 0x8966, 0x11e0, 0x6857, 0x0000, + 0x00c6, 0x2061, 0x0100, 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, + 0x2061, 0x1a6b, 0x630a, 0x00ce, 0x080c, 0x2713, 0x2001, 0x0138, + 0x2102, 0x0804, 0x3573, 0x080c, 0x2713, 0x2001, 0x0138, 0x2102, + 0x0804, 0x35a8, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b, 0x080c, + 0x8daa, 0x080c, 0x8bb5, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, + 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x080c, 0x2713, 0x2001, + 0x0138, 0x2102, 0x0804, 0x35a5, 0x2001, 0x1924, 0x200c, 0x918e, + 0x0000, 0x0904, 0x4fdc, 0x080c, 0x8bb0, 0x0904, 0x4fdc, 0x2001, + 0x0101, 0x200c, 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, + 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, + 0x080c, 0x8bb5, 0x2001, 0x0035, 0x080c, 0x1679, 0x00c6, 0x2061, + 0x193c, 0x6004, 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2713, + 0x2001, 0x0138, 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, + 0x8af1, 0x0120, 0x2f00, 0x080c, 0x8b7b, 0x0cc8, 0x00fe, 0x00ee, + 0x0126, 0x2091, 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, + 0x2148, 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x2001, + 0x183d, 0x2003, 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b, + 0x080c, 0x8daa, 0x00ee, 0x012e, 0x0804, 0x3573, 0x0006, 0x080c, + 0x56da, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0xd0bc, + 0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, + 0x0804, 0x3573, 0x83ff, 0x1904, 0x35a8, 0x2001, 0xfff0, 0x9200, + 0x1a04, 0x35a8, 0x2019, 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, + 0x35a8, 0x7986, 0x6276, 0x0804, 0x3573, 0x080c, 0x56ee, 0x1904, + 0x35a5, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa7, 0x0904, + 0x35a5, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, + 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, + 0x8bff, 0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, + 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, + 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, + 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, + 0x9166, 0x2208, 0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024, + 0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, + 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, + 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x505f, 0x0005, 0x7030, + 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, + 0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, + 0x501d, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208, + 0x0804, 0x3573, 0x00f6, 0x00e6, 0x080c, 0x56ee, 0x2009, 0x0007, + 0x1904, 0x50f2, 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, + 0x1904, 0x50f2, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, + 0x1053, 0x2009, 0x0002, 0x0904, 0x50f2, 0x2900, 0x705e, 0x900e, + 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, + 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, + 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814, 0x20a9, 0x0001, + 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, + 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, + 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208, 0x009e, + 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0d7d, 0x2148, + 0x080c, 0x106c, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, + 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, + 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, + 0xa696, 0xa79a, 0xa09f, 0x50fe, 0x000e, 0xa0a2, 0x080c, 0x1124, + 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, + 0x904d, 0x090c, 0x0d7d, 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, + 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, + 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, + 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, + 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, + 0x0003, 0x080c, 0x9166, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0d7d, + 0x2148, 0x080c, 0x106c, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3, + 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, + 0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814, + 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, + 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, + 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, + 0x81ff, 0x090c, 0x0d7d, 0x2148, 0x080c, 0x106c, 0x9006, 0x705e, + 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, + 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, + 0xa592, 0xa696, 0xa79a, 0x080c, 0x1124, 0x9006, 0x00ee, 0x0005, + 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, + 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x35a8, 0xa884, 0xa988, + 0x080c, 0x25fb, 0x1518, 0x080c, 0x65c4, 0x1500, 0x7126, 0xbe12, + 0xbd16, 0xae7c, 0x080c, 0x4aa7, 0x01c8, 0x080c, 0x4aa7, 0x01b0, + 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, + 0xa804, 0x2048, 0x080c, 0xc9e8, 0x1120, 0x2009, 0x0003, 0x0804, + 0x35a5, 0x7007, 0x0003, 0x701f, 0x51cb, 0x0005, 0x009e, 0x2009, + 0x0002, 0x0804, 0x35a5, 0x7124, 0x080c, 0x32fc, 0xa820, 0x9086, + 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5, 0x2900, 0x7022, + 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, + 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, + 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0xaa6c, + 0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, + 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, + 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, + 0x4af3, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, + 0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, + 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x1124, 0x7007, 0x0002, + 0x701f, 0x5227, 0x0005, 0x000e, 0x007e, 0x0804, 0x35a8, 0x7020, + 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, + 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0x2100, 0x2238, + 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, + 0x002a, 0x0804, 0x4af3, 0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001, + 0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8, + 0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, + 0x66ec, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x6881, + 0x012e, 0x0904, 0x35a5, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, + 0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, + 0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118, + 0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002, 0x0128, + 0x080c, 0x6881, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, - 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x359e, - 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x568b, 0x001e, - 0x1904, 0x359e, 0x0804, 0x356c, 0x00f6, 0x2d78, 0x0011, 0x00fe, - 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, - 0xc0fd, 0x080c, 0x568b, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c, 0x56e7, 0x0120, - 0x2009, 0x0007, 0x0804, 0x359e, 0x7984, 0x7ea8, 0x96b4, 0x00ff, - 0x080c, 0x661e, 0x1904, 0x35a1, 0x9186, 0x007f, 0x0138, 0x080c, - 0x6a5b, 0x0120, 0x2009, 0x0009, 0x0804, 0x359e, 0x080c, 0x4aa0, - 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0xa867, 0x0000, 0xa868, - 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc9fd, - 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007, 0x0003, 0x701f, - 0x54c2, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, - 0x0004, 0x0804, 0x359e, 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, - 0x4aec, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, - 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, - 0x7023, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, - 0x0010, 0x0804, 0x35a1, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9, 0x701f, - 0x5512, 0x0005, 0x2001, 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, - 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, - 0x20e9, 0x0001, 0x4003, 0x0804, 0x356c, 0x080c, 0x4aa0, 0x1120, - 0x2009, 0x0002, 0x0804, 0x359e, 0x7984, 0x9194, 0xff00, 0x918c, - 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, - 0x0001, 0x1118, 0x2099, 0x19cd, 0x0010, 0x0804, 0x35a1, 0xa85c, - 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, - 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x4aec, 0x7884, 0x908a, - 0x1000, 0x1a04, 0x35a1, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, - 0x810b, 0x9108, 0x00c6, 0x2061, 0x1a03, 0x6142, 0x00ce, 0x012e, - 0x0804, 0x356c, 0x00c6, 0x080c, 0x74d5, 0x1160, 0x080c, 0x77d9, - 0x080c, 0x6022, 0x9085, 0x0001, 0x080c, 0x751c, 0x080c, 0x7406, - 0x080c, 0x0d7d, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, - 0x5edd, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, - 0x0000, 0x0904, 0x359e, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, - 0x199c, 0x2c0c, 0x2062, 0x080c, 0x29d8, 0x01a0, 0x080c, 0x29e0, - 0x0188, 0x080c, 0x29e8, 0x0170, 0x2162, 0x0804, 0x35a1, 0x2061, - 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, - 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1588, 0x2061, 0x0100, - 0x6028, 0xc09c, 0x602a, 0x080c, 0xa872, 0x0026, 0x2011, 0x0003, - 0x080c, 0xa1ab, 0x2011, 0x0002, 0x080c, 0xa1b5, 0x002e, 0x080c, - 0xa074, 0x0036, 0x901e, 0x080c, 0xa0f4, 0x003e, 0x080c, 0xa88e, - 0x60e3, 0x0000, 0x080c, 0xe6d7, 0x080c, 0xe6f2, 0x9085, 0x0001, - 0x080c, 0x751c, 0x9006, 0x080c, 0x2a0a, 0x2001, 0x1800, 0x2003, - 0x0004, 0x0026, 0x2011, 0x0008, 0x080c, 0x2a44, 0x002e, 0x00ce, - 0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, - 0x080c, 0x56e7, 0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x7984, - 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x661e, 0x1904, 0x35a1, 0x9186, - 0x007f, 0x0138, 0x080c, 0x6a5b, 0x0120, 0x2009, 0x0009, 0x0804, - 0x359e, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca00, 0x1120, - 0x2009, 0x0003, 0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x5619, - 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, - 0x359e, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, - 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aec, - 0xa898, 0x9086, 0x000d, 0x1904, 0x359e, 0x2021, 0x4005, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x563d, 0x0010, 0x012e, 0x0cc0, 0x7c36, - 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, - 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, - 0x080c, 0x4adc, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a03, - 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, - 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, - 0x1a11, 0x2044, 0x2001, 0x1a18, 0xa076, 0xa060, 0xa072, 0xa07b, - 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, - 0x012e, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, - 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xc861, 0x000e, 0x1198, - 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, - 0x603c, 0x080c, 0xab33, 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, 0x56b6, - 0x015e, 0x012e, 0x0005, 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, - 0x1867, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, - 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, - 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, - 0x189e, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, - 0x9182, 0x0081, 0x1a04, 0x35a1, 0x810c, 0x0016, 0x080c, 0x4aa0, - 0x080c, 0x0f42, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, - 0x001e, 0x080c, 0x4ae9, 0x701f, 0x570e, 0x0005, 0x2079, 0x0000, - 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, - 0x2c44, 0xa770, 0xa074, 0x2071, 0x189e, 0x080c, 0x4aec, 0x701f, - 0x5722, 0x0005, 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, - 0xa174, 0x080c, 0x0f4a, 0x002e, 0x001e, 0x080c, 0x0ff7, 0x9006, - 0xa802, 0xa806, 0x0804, 0x356c, 0x0126, 0x0156, 0x0136, 0x0146, - 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, - 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, - 0x0118, 0x080c, 0x58dd, 0x0068, 0xd08c, 0x0118, 0x080c, 0x57e6, - 0x0040, 0xd094, 0x0118, 0x080c, 0x57b6, 0x0018, 0xd09c, 0x0108, - 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, - 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, - 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, - 0x0120, 0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, - 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, - 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, - 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, - 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x00f0, 0x6040, - 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087, - 0x0000, 0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, - 0x1d80, 0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009, - 0x000f, 0x2011, 0x5e80, 0x080c, 0x86d7, 0x0005, 0x2001, 0x1869, - 0x2004, 0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528, - 0x2011, 0x5e80, 0x080c, 0x860d, 0x6040, 0x9094, 0x0010, 0x9285, - 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, - 0x57cc, 0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, - 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f, - 0x0000, 0x9006, 0x080c, 0x6027, 0x0000, 0x0005, 0x708c, 0x908a, - 0x0003, 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x57f0, 0x5841, 0x58dc, - 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001, - 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, - 0x9084, 0x00fc, 0x0120, 0x1f04, 0x57ff, 0x080c, 0x0d7d, 0x68a0, - 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, - 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x6003, 0x2079, 0x1d00, - 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, - 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, 0x4003, 0x080c, - 0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, - 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, - 0x080c, 0x5eb1, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042, - 0x0005, 0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x58b9, - 0x6020, 0xd0b4, 0x1904, 0x58b7, 0x71a0, 0x81ff, 0x0904, 0x58a5, - 0x9486, 0x000c, 0x1904, 0x58b2, 0x9480, 0x0018, 0x8004, 0x20a8, - 0x080c, 0x5ffc, 0x2011, 0x0260, 0x2019, 0x1d00, 0x220c, 0x2304, - 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x585e, 0x6043, 0x0004, - 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, - 0x6043, 0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, - 0x2011, 0x5e87, 0x080c, 0x86d7, 0x080c, 0x6003, 0x04c0, 0x080c, - 0x5ffc, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, - 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, - 0x0190, 0x080c, 0x5ffc, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, - 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, - 0x1f04, 0x5899, 0x0078, 0x70a3, 0x0000, 0x080c, 0x5ffc, 0x20e1, - 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x20a9, - 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, - 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, - 0x080c, 0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, - 0x19f4, 0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, - 0x9575, 0x080c, 0x9e01, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, - 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x590e, 0x5921, 0x594a, 0x596a, - 0x5990, 0x59bf, 0x59e5, 0x5a1d, 0x5a43, 0x5a71, 0x5aac, 0x5ae4, - 0x5b02, 0x5b2d, 0x5b4f, 0x5b6a, 0x5b74, 0x5ba8, 0x5bce, 0x5bfd, - 0x5c23, 0x5c5b, 0x5c9f, 0x5cdc, 0x5cfd, 0x5d56, 0x5d78, 0x5da6, - 0x5da6, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, - 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, - 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, - 0x709b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5e87, 0x080c, 0x86d7, - 0x0005, 0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, - 0xd0b4, 0x11f0, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, - 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5e87, 0x080c, - 0x860d, 0x709b, 0x0010, 0x080c, 0x5b74, 0x0010, 0x7093, 0x0000, - 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011, - 0x5e87, 0x080c, 0x860d, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, - 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, - 0x0000, 0x8108, 0x1f04, 0x595f, 0x60c3, 0x0014, 0x080c, 0x5eb1, - 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e87, - 0x080c, 0x860d, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, - 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, - 0x709b, 0x0004, 0x0029, 0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005, - 0x00f6, 0x709b, 0x0005, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, - 0x1103, 0x7837, 0x0000, 0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x1170, - 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, - 0x0008, 0x080c, 0x5e34, 0x0168, 0x080c, 0x5fb5, 0x20a9, 0x0008, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, - 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, - 0x7090, 0x9005, 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, - 0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, - 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, - 0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, - 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, - 0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x11b8, 0x7084, 0x9005, 0x11a0, - 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x336d, 0x200d, 0x918c, - 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5e34, 0x0180, 0x080c, - 0x4fdd, 0x0110, 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, - 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, - 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, - 0x1110, 0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c, - 0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f80, - 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5fdf, - 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da7, 0x1188, 0x9085, - 0x0001, 0x080c, 0x2664, 0x20a9, 0x0008, 0x080c, 0x5ffc, 0x20e1, + 0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, + 0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, + 0x44bd, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x4aa7, 0x1120, + 0x2009, 0x0002, 0x0804, 0x35a5, 0x080c, 0x6a6b, 0x0130, 0x908e, + 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, + 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x56da, 0xd0b4, 0x0904, + 0x44f7, 0x7884, 0x908e, 0x007e, 0x0904, 0x44f7, 0x908e, 0x007f, + 0x0904, 0x44f7, 0x908e, 0x0080, 0x0904, 0x44f7, 0xb800, 0xd08c, + 0x1904, 0x44f7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, + 0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, + 0x701f, 0x52f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x0804, + 0x44f7, 0x080c, 0x3363, 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, + 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, + 0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120, + 0x2009, 0x0008, 0x0804, 0x35a5, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, + 0x1904, 0x44f7, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, + 0x080c, 0xca6a, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, + 0x0003, 0x701f, 0x532c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, + 0x2009, 0x0004, 0x0804, 0x5637, 0x080c, 0x4ada, 0x0904, 0x35a8, + 0x0804, 0x52c5, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c, + 0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0x080c, 0x6a63, 0x0120, + 0x2009, 0x0008, 0x0804, 0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8, + 0x080c, 0x6a6b, 0x2009, 0x0009, 0x1904, 0x35a5, 0x080c, 0x4aa7, + 0x2009, 0x0002, 0x0904, 0x35a5, 0x9006, 0xa866, 0xa832, 0xa868, + 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, + 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, + 0x0100, 0x1904, 0x35a8, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, + 0xcccd, 0x2009, 0x0003, 0x0904, 0x35a5, 0x7007, 0x0003, 0x701f, + 0x5382, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, + 0x35a5, 0x0804, 0x3573, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, + 0x01a0, 0x080c, 0x56ee, 0x1188, 0x2009, 0x0014, 0x0804, 0x35a5, + 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c, + 0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0xd2f4, 0x0130, 0x9284, + 0x5000, 0x080c, 0x56b5, 0x0804, 0x3573, 0xd2fc, 0x0158, 0x080c, + 0x4ada, 0x0904, 0x35a8, 0x7984, 0x9284, 0x9000, 0x080c, 0x5692, + 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0xb804, 0x9084, + 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x546b, 0x080c, + 0x4aa7, 0x2009, 0x0002, 0x0904, 0x546b, 0xa85c, 0x9080, 0x001b, + 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, + 0x4af0, 0x701f, 0x53dc, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, + 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, + 0x35a8, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ada, + 0x1110, 0x0804, 0x35a8, 0x2009, 0x0043, 0x080c, 0xcd35, 0x2009, + 0x0003, 0x0904, 0x546b, 0x7007, 0x0003, 0x701f, 0x5400, 0x0005, + 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x546b, 0x7984, + 0x7aa8, 0x9284, 0x1000, 0x080c, 0x5692, 0x0804, 0x3573, 0x00c6, + 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56ee, + 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, 0x56ee, + 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, + 0x56b5, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4ad8, 0x0588, 0xa998, + 0x9284, 0x9000, 0x080c, 0x5692, 0xa87b, 0x0000, 0xa883, 0x0000, + 0xa897, 0x4000, 0x0438, 0x080c, 0x4ad8, 0x0510, 0x080c, 0x6a6b, + 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, + 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad8, + 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xcd35, 0x2009, 0x0003, + 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, + 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, + 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x35a5, 0x0016, + 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5692, 0x001e, 0x1904, + 0x35a5, 0x0804, 0x3573, 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, + 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, + 0x080c, 0x5692, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120, 0x2009, + 0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, + 0x6625, 0x1904, 0x35a8, 0x9186, 0x007f, 0x0138, 0x080c, 0x6a6b, + 0x0120, 0x2009, 0x0009, 0x0804, 0x35a5, 0x080c, 0x4aa7, 0x1120, + 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000, 0xa868, 0xc0fd, + 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xca21, 0x1120, + 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x54c9, + 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, + 0x0804, 0x35a5, 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, 0x4af3, + 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x7984, + 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, + 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, + 0x0804, 0x35a8, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f, 0x5519, + 0x0005, 0x2001, 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, + 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, + 0x0001, 0x4003, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x1120, 0x2009, + 0x0002, 0x0804, 0x35a5, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, + 0x8217, 0x82ff, 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, + 0x1118, 0x2099, 0x19cd, 0x0010, 0x0804, 0x35a8, 0xa85c, 0x9080, + 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, + 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, + 0x9080, 0x0019, 0xaf60, 0x0804, 0x4af3, 0x7884, 0x908a, 0x1000, + 0x1a04, 0x35a8, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, + 0x9108, 0x00c6, 0x2061, 0x1a03, 0x6142, 0x00ce, 0x012e, 0x0804, + 0x3573, 0x00c6, 0x080c, 0x74e9, 0x1160, 0x080c, 0x77ed, 0x080c, + 0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x080c, + 0x0d7d, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5ee4, + 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, + 0x0904, 0x35a5, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c, + 0x2c0c, 0x2062, 0x080c, 0x29d8, 0x01a0, 0x080c, 0x29e0, 0x0188, + 0x080c, 0x29e8, 0x0170, 0x2162, 0x0804, 0x35a8, 0x2061, 0x0100, + 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, + 0x0000, 0x7884, 0x9086, 0x0002, 0x1588, 0x2061, 0x0100, 0x6028, + 0xc09c, 0x602a, 0x080c, 0xa896, 0x0026, 0x2011, 0x0003, 0x080c, + 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x002e, 0x080c, 0xa098, + 0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c, 0xa8b2, 0x60e3, + 0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x9085, 0x0001, 0x080c, + 0x7530, 0x9006, 0x080c, 0x2a0a, 0x2001, 0x1800, 0x2003, 0x0004, + 0x0026, 0x2011, 0x0008, 0x080c, 0x2a44, 0x002e, 0x00ce, 0x0804, + 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, + 0x56ee, 0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8, + 0x96b4, 0x00ff, 0x080c, 0x6625, 0x1904, 0x35a8, 0x9186, 0x007f, + 0x0138, 0x080c, 0x6a6b, 0x0120, 0x2009, 0x0009, 0x0804, 0x35a5, + 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca24, 0x1120, 0x2009, + 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x5620, 0x0005, + 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5, + 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4af3, 0xa898, + 0x9086, 0x000d, 0x1904, 0x35a5, 0x2021, 0x4005, 0x0126, 0x2091, + 0x8000, 0x0e04, 0x5644, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, + 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, + 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, + 0x4ae3, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, + 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a03, 0x7984, + 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, + 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, 0x1a11, + 0x2044, 0x2001, 0x1a18, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, + 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, + 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, + 0xc000, 0x0128, 0x0006, 0x080c, 0xc885, 0x000e, 0x1198, 0xd0e4, + 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x6043, + 0x080c, 0xab57, 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, 0x56bd, 0x015e, + 0x012e, 0x0005, 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, + 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, + 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, + 0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, + 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, + 0x0081, 0x1a04, 0x35a8, 0x810c, 0x0016, 0x080c, 0x4aa7, 0x080c, + 0x0f42, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, + 0x080c, 0x4af0, 0x701f, 0x5715, 0x0005, 0x2079, 0x0000, 0x7d94, + 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, + 0xa770, 0xa074, 0x2071, 0x189e, 0x080c, 0x4af3, 0x701f, 0x5729, + 0x0005, 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, + 0x080c, 0x0f4a, 0x002e, 0x001e, 0x080c, 0x0ff7, 0x9006, 0xa802, + 0xa806, 0x0804, 0x3573, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, + 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, + 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, + 0x080c, 0x58e4, 0x0068, 0xd08c, 0x0118, 0x080c, 0x57ed, 0x0040, + 0xd094, 0x0118, 0x080c, 0x57bd, 0x0018, 0xd09c, 0x0108, 0x0099, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, + 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, + 0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, 0x0120, + 0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, + 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, + 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, + 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, + 0x0128, 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x00f0, 0x6040, 0x9084, + 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087, 0x0000, + 0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, 0x1d80, + 0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009, 0x000f, + 0x2011, 0x5e87, 0x080c, 0x8708, 0x0005, 0x2001, 0x1869, 0x2004, + 0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528, 0x2011, + 0x5e87, 0x080c, 0x863e, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, + 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57d3, + 0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, + 0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f, 0x0000, + 0x9006, 0x080c, 0x602e, 0x0000, 0x0005, 0x708c, 0x908a, 0x0003, + 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x57f7, 0x5848, 0x58e3, 0x00f6, + 0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001, 0x015d, + 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, + 0x00fc, 0x0120, 0x1f04, 0x5806, 0x080c, 0x0d7d, 0x68a0, 0x68a2, + 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, + 0x001e, 0x6837, 0x0020, 0x080c, 0x600a, 0x2079, 0x1d00, 0x7833, + 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa690, + 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, + 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, + 0x5eb8, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042, 0x0005, + 0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x58c0, 0x6020, + 0xd0b4, 0x1904, 0x58be, 0x71a0, 0x81ff, 0x0904, 0x58ac, 0x9486, + 0x000c, 0x1904, 0x58b9, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, + 0x6003, 0x2011, 0x0260, 0x2019, 0x1d00, 0x220c, 0x2304, 0x9106, + 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5865, 0x6043, 0x0004, 0x2061, + 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, + 0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, + 0x5e8e, 0x080c, 0x8708, 0x080c, 0x600a, 0x04c0, 0x080c, 0x6003, + 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, + 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, + 0x080c, 0x6003, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, + 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, + 0x58a0, 0x0078, 0x70a3, 0x0000, 0x080c, 0x6003, 0x20e1, 0x0000, + 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x20a9, 0x0014, + 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, + 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, + 0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f4, + 0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, + 0x080c, 0x9e25, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, + 0x0d7d, 0x000b, 0x0005, 0x5915, 0x5928, 0x5951, 0x5971, 0x5997, + 0x59c6, 0x59ec, 0x5a24, 0x5a4a, 0x5a78, 0x5ab3, 0x5aeb, 0x5b09, + 0x5b34, 0x5b56, 0x5b71, 0x5b7b, 0x5baf, 0x5bd5, 0x5c04, 0x5c2a, + 0x5c62, 0x5ca6, 0x5ce3, 0x5d04, 0x5d5d, 0x5d7f, 0x5dad, 0x5dad, + 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, + 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, + 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x709b, + 0x0001, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8708, 0x0005, + 0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, + 0x11f0, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, + 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, + 0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5e8e, 0x080c, 0x863e, + 0x709b, 0x0010, 0x080c, 0x5b7b, 0x0010, 0x7093, 0x0000, 0x00fe, + 0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e8e, + 0x080c, 0x863e, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1102, + 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, + 0x8108, 0x1f04, 0x5966, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe, + 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, + 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, + 0x0004, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6, + 0x709b, 0x0005, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1103, + 0x7837, 0x0000, 0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084, + 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, + 0x080c, 0x5e3b, 0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, - 0x60c3, 0x0014, 0x080c, 0x5eb1, 0x0010, 0x080c, 0x5901, 0x00fe, - 0x0005, 0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5e87, 0x080c, - 0x860d, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ffc, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, - 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, - 0x1110, 0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, - 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, - 0x0001, 0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5b4f, 0x0010, - 0x080c, 0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, - 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, - 0x4304, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, - 0x0000, 0x080c, 0x5fdf, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060, - 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, - 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, - 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5ad1, 0x60c3, 0x0084, - 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, - 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1178, 0x080c, - 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, - 0x9005, 0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x5fd8, - 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x5f80, 0x2079, - 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ffc, 0x20a9, - 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, - 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, - 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5b15, 0x60c3, - 0x0084, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, - 0x01e0, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1198, - 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, - 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f52, 0x709b, - 0x000e, 0x0029, 0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005, 0x918d, - 0x0001, 0x080c, 0x6027, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061, - 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, - 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5e87, 0x080c, - 0x8601, 0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5e87, 0x080c, - 0x860d, 0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xa66c, - 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, - 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5fdf, 0x11a0, 0x717c, - 0x81ff, 0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, - 0x25fb, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, - 0x0008, 0x080c, 0x5e34, 0x60c3, 0x0014, 0x080c, 0x5eb1, 0x0005, - 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, - 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, - 0x0013, 0x080c, 0x5f8e, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, - 0x0000, 0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x1170, 0x7084, 0x9005, - 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, - 0x5e34, 0x0168, 0x080c, 0x5fb5, 0x20a9, 0x0008, 0x20e1, 0x0000, + 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, + 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, + 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, + 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, + 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, 0x0010, + 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, + 0x5f87, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, + 0x6003, 0x080c, 0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, + 0x9186, 0xffff, 0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00, + 0x810f, 0x2011, 0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4, + 0x0110, 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, + 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, + 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, + 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, + 0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c, 0x5fdf, + 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f87, 0x2079, + 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5fe6, 0x1150, + 0x7084, 0x9005, 0x1138, 0x080c, 0x5dae, 0x1188, 0x9085, 0x0001, + 0x080c, 0x2664, 0x20a9, 0x0008, 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, - 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, - 0x1110, 0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093, - 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f8e, - 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ffc, - 0x080c, 0x5fdf, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, - 0xffff, 0x0180, 0x9180, 0x336d, 0x200d, 0x918c, 0xff00, 0x810f, - 0x2011, 0x0008, 0x080c, 0x5e34, 0x0180, 0x080c, 0x4fdd, 0x0110, - 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, - 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, - 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, - 0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ffc, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, - 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, - 0x6027, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, - 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, - 0x9005, 0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x6027, - 0x7097, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, - 0x0016, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, - 0xa66c, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, - 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, - 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, - 0x709b, 0x0017, 0x080c, 0x5fdf, 0x1150, 0x7084, 0x9005, 0x1138, - 0x080c, 0x5da7, 0x1188, 0x9085, 0x0001, 0x080c, 0x2664, 0x20a9, - 0x0008, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb1, - 0x0010, 0x080c, 0x5901, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, - 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1190, 0x080c, - 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, - 0x9005, 0x1138, 0x9006, 0x080c, 0x6027, 0x709b, 0x0018, 0x0029, - 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, - 0x080c, 0x5f8e, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, - 0x080c, 0x5ffc, 0x2009, 0x026e, 0x2039, 0x1d0e, 0x20a9, 0x0040, - 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, - 0x6816, 0x2009, 0x0260, 0x1f04, 0x5d10, 0x2039, 0x1d0e, 0x080c, - 0x5fdf, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, - 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310, - 0x8214, 0x92a0, 0x1d0e, 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, 0x5d43, - 0x60c3, 0x0084, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, - 0x9005, 0x01e0, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, - 0x1198, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, - 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f52, - 0x709b, 0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, - 0x9085, 0x0001, 0x080c, 0x6027, 0x709b, 0x001b, 0x080c, 0xa66c, - 0x080c, 0x5ffc, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 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, - 0x5d8f, 0x60c3, 0x0084, 0x080c, 0x5eb1, 0x0005, 0x0005, 0x0086, - 0x0096, 0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1d0e, - 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, - 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, - 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, - 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5dc1, 0x0804, 0x5e30, - 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, - 0x91a6, 0x3fff, 0x0904, 0x5e30, 0x918d, 0xc000, 0x20a9, 0x0010, - 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, - 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, - 0x0008, 0x8318, 0x1f04, 0x5de7, 0x04d8, 0x23a8, 0x2021, 0x0001, - 0x8426, 0x8425, 0x1f04, 0x5df9, 0x2328, 0x8529, 0x92be, 0x0007, - 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, - 0x95a8, 0x0010, 0x1f04, 0x5e08, 0x755e, 0x95c8, 0x336d, 0x292d, - 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, - 0x2644, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, - 0x201a, 0x7087, 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, 0x715e, 0x91a0, 0x336d, 0x242d, 0x95ac, 0x00ff, - 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, 0x001e, - 0x60e7, 0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005, - 0x00e6, 0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, - 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5f41, 0x080c, - 0x9e0e, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x0126, - 0x2091, 0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026, - 0x0016, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x001e, 0x9094, 0x0010, - 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, - 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x2979, 0x0228, 0x2011, - 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f4, 0x2013, 0x0000, - 0x7093, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, - 0x9e01, 0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018, - 0x718c, 0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, - 0x2011, 0x5e87, 0x080c, 0x86d7, 0x0005, 0x0016, 0x0026, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0xa872, 0x080c, 0xab3a, 0x080c, - 0xa88e, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x2061, 0x1a03, 0x900e, - 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, - 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, - 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f0d, 0x080c, 0x8601, - 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, - 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9e0e, 0x2071, - 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x080c, - 0x74dd, 0x0188, 0x080c, 0x74f8, 0x1170, 0x080c, 0x77e3, 0x0016, - 0x080c, 0x2713, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x77de, - 0x080c, 0x7406, 0x0050, 0x2009, 0x0001, 0x080c, 0x29f6, 0x2001, - 0x0001, 0x080c, 0x25a0, 0x080c, 0x5edd, 0x012e, 0x000e, 0x00ee, - 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, - 0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b00, 0x003e, - 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1d80, - 0x080c, 0x5ffc, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, - 0x0020, 0x080c, 0x5ff6, 0x2099, 0x0260, 0x20a1, 0x1d92, 0x0051, - 0x20a9, 0x000e, 0x080c, 0x5ff9, 0x2099, 0x0260, 0x20a1, 0x1db2, - 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, - 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f76, 0x002e, 0x001e, 0x0005, - 0x080c, 0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa66c, - 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, - 0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, - 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, - 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, - 0x6a57, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe29e, - 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, - 0x080c, 0x31a3, 0x080c, 0xcf2e, 0x0140, 0x0036, 0x2019, 0xffff, - 0x2021, 0x0007, 0x080c, 0x4cb7, 0x003e, 0x004e, 0x001e, 0x0005, - 0x080c, 0x5edd, 0x709b, 0x0000, 0x7093, 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, 0x1d00, 0x4004, 0x2079, - 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, - 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, - 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, - 0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, - 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, - 0x1f04, 0x6036, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, - 0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8d6, 0xb807, 0x0707, - 0xb80a, 0xb80e, 0xb812, 0x9198, 0x336d, 0x231d, 0x939c, 0x00ff, - 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, 0xab33, 0x1120, 0x9192, - 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, - 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, - 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb8ce, - 0xb8d2, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, - 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, - 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, - 0x106c, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, - 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, - 0x2060, 0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004, - 0x9c02, 0x1a0c, 0x0d7d, 0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03, - 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, - 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, - 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6112, 0x9182, - 0x0800, 0x1a04, 0x6116, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, - 0x1904, 0x611c, 0x9188, 0x1000, 0x2104, 0x905d, 0x0198, 0xb804, - 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, 0x900d, 0x1904, - 0x612e, 0x080c, 0x64e7, 0x9006, 0x012e, 0x0005, 0x2001, 0x0005, - 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, - 0x1290, 0x080c, 0xab33, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, - 0xb900, 0xd1fc, 0x0d10, 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, 0x9065, 0x09a8, 0x080c, 0x6a5b, - 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60d5, 0x080c, 0x6889, - 0x0904, 0x60de, 0x0804, 0x60d9, 0x00e6, 0x2071, 0x19e7, 0x7004, - 0x9086, 0x0002, 0x1128, 0x7030, 0x9080, 0x0004, 0x2004, 0x9b06, - 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, - 0x908e, 0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974, - 0x9182, 0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, - 0x080c, 0x69fb, 0x11d0, 0x080c, 0xab73, 0x0570, 0x2b00, 0x6012, - 0x2900, 0x6016, 0x6023, 0x0009, 0x602b, 0x0000, 0xa874, 0x908e, - 0x00ff, 0x1110, 0x602b, 0x8000, 0x2009, 0x0043, 0x080c, 0xac68, - 0x9006, 0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, - 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, - 0x0004, 0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, - 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, - 0x00e6, 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, - 0x620a, 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x61e2, 0xb8a0, - 0x9086, 0x007f, 0x0178, 0x080c, 0x6a63, 0x0160, 0xa994, 0x81ff, - 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, - 0x6a5b, 0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, - 0x2060, 0x0026, 0x2010, 0x080c, 0xc802, 0x002e, 0x1120, 0x2001, - 0x0008, 0x0804, 0x620c, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, - 0x0008, 0x0804, 0x620c, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, - 0x0058, 0x080c, 0xab73, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, - 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xac68, - 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, - 0x080c, 0xab33, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, - 0xd1fc, 0x0900, 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, 0x62a1, 0x625c, 0x6273, 0x62a1, - 0x62a1, 0x62a1, 0x62a1, 0x62a1, 0x2100, 0x9082, 0x007e, 0x1278, - 0x080c, 0x65bd, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x62a9, - 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, - 0x49b3, 0x0150, 0x04b0, 0x080c, 0x661e, 0x1598, 0xb810, 0x9306, - 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xab73, 0x0530, 0x2b00, - 0x6012, 0x080c, 0xcca8, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, - 0x000a, 0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x31e4, 0x9006, - 0x080c, 0x655a, 0x2001, 0x0002, 0x080c, 0x656e, 0x2001, 0x0200, - 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xac68, 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, 0x6490, 0x90c6, 0x0056, 0x0904, - 0x6494, 0x90c6, 0x0066, 0x0904, 0x6498, 0x90c6, 0x0067, 0x0904, - 0x649c, 0x90c6, 0x0068, 0x0904, 0x64a0, 0x90c6, 0x0071, 0x0904, - 0x64a4, 0x90c6, 0x0074, 0x0904, 0x64a8, 0x90c6, 0x007c, 0x0904, - 0x64ac, 0x90c6, 0x007e, 0x0904, 0x64b0, 0x90c6, 0x0037, 0x0904, - 0x64b4, 0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, - 0x648b, 0x9182, 0x0800, 0x1a04, 0x648b, 0x080c, 0x661e, 0x1198, - 0xb804, 0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, - 0x006f, 0x0148, 0x080c, 0xab33, 0x1904, 0x6474, 0xb8a0, 0x9084, - 0xff80, 0x1904, 0x6474, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, - 0x005e, 0x0904, 0x63d4, 0x90c6, 0x0064, 0x0904, 0x63fd, 0x2008, - 0x0804, 0x6396, 0xa998, 0xa8b0, 0x2040, 0x080c, 0xab33, 0x1120, - 0x9182, 0x007f, 0x0a04, 0x6396, 0x9186, 0x00ff, 0x0904, 0x6396, - 0x9182, 0x0800, 0x1a04, 0x6396, 0xaaa0, 0xab9c, 0x787c, 0x9306, - 0x1188, 0x7880, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, - 0x0804, 0x6396, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, - 0x0804, 0x6396, 0x080c, 0x49b3, 0x0904, 0x63a0, 0x900e, 0x9016, - 0x90c6, 0x4000, 0x15e0, 0x0006, 0x080c, 0x690d, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, - 0x0006, 0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, - 0x000a, 0x2098, 0x080c, 0x0fb7, 0xa8c4, 0xabc8, 0x9305, 0xabcc, - 0x9305, 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, - 0x9305, 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, - 0x4007, 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, - 0x2610, 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, - 0x0138, 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, - 0xa896, 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, - 0x080c, 0xab73, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, - 0x0c78, 0x2b00, 0x6012, 0x080c, 0xcca8, 0x2900, 0x6016, 0x6023, - 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, - 0x8000, 0x080c, 0x31e4, 0x012e, 0x9006, 0x080c, 0x655a, 0x2001, - 0x0002, 0x080c, 0x656e, 0x2009, 0x0002, 0x080c, 0xac68, 0xa8b0, - 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006, 0x9005, 0x012e, - 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x56e7, 0x0118, 0x2009, - 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x661e, 0x1904, 0x6391, - 0x9186, 0x007f, 0x0130, 0x080c, 0x6a5b, 0x0118, 0x2009, 0x0009, - 0x0080, 0x0096, 0x080c, 0x103a, 0x1120, 0x009e, 0x2009, 0x0002, - 0x0040, 0x2900, 0x009e, 0xa806, 0x080c, 0xca00, 0x19b0, 0x2009, - 0x0003, 0x2001, 0x4005, 0x0804, 0x6398, 0xa998, 0xaeb0, 0x080c, - 0x661e, 0x1904, 0x6391, 0x0096, 0x080c, 0x103a, 0x1128, 0x009e, - 0x2009, 0x0002, 0x0804, 0x6451, 0x2900, 0x009e, 0xa806, 0x0096, - 0x2048, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, - 0x9080, 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, - 0x0fb7, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, - 0xd684, 0x1168, 0x080c, 0x56d3, 0xd0b4, 0x1118, 0xa89b, 0x000b, - 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, - 0x6a5b, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x56e7, 0x0118, - 0xa89b, 0x0007, 0x0050, 0x080c, 0xc9e3, 0x1904, 0x63cd, 0x2009, - 0x0003, 0x2001, 0x4005, 0x0804, 0x6398, 0xa87b, 0x0030, 0xa897, - 0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, - 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb0ee, 0x1904, - 0x63cd, 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, - 0x63ce, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, - 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, - 0x900e, 0x0804, 0x63ce, 0x2001, 0x0029, 0x900e, 0x0804, 0x63ce, - 0x080c, 0x3790, 0x0804, 0x63cf, 0x080c, 0x5408, 0x0804, 0x63cf, - 0x080c, 0x456c, 0x0804, 0x63cf, 0x080c, 0x45e5, 0x0804, 0x63cf, - 0x080c, 0x4641, 0x0804, 0x63cf, 0x080c, 0x4a76, 0x0804, 0x63cf, - 0x080c, 0x4d2d, 0x0804, 0x63cf, 0x080c, 0x5073, 0x0804, 0x63cf, - 0x080c, 0x526c, 0x0804, 0x63cf, 0x080c, 0x39ae, 0x0804, 0x63cf, - 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1608, - 0x9182, 0x0800, 0x1258, 0x9188, 0x1000, 0x2104, 0x905d, 0x0130, - 0x080c, 0x6a5b, 0x1138, 0x00d9, 0x9006, 0x00b0, 0x2001, 0x0028, - 0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d98, - 0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, - 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0xa877, - 0x0000, 0xb8d0, 0x9005, 0x1904, 0x654e, 0xb888, 0x9005, 0x1904, - 0x654e, 0xb838, 0xb93c, 0x9102, 0x1a04, 0x654e, 0x2b10, 0x080c, - 0xaba0, 0x0904, 0x654a, 0x8108, 0xb93e, 0x6212, 0x2900, 0x6016, - 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, - 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, - 0x0588, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1530, 0xa816, 0xa864, - 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd, - 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001, - 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079, - 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836, - 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd, - 0x601e, 0x0c38, 0xd0b4, 0x190c, 0x1c30, 0x2001, 0x8004, 0x6003, - 0x0002, 0x0c18, 0x81ff, 0x1110, 0xb88b, 0x0001, 0x2908, 0xb8cc, - 0xb9ce, 0x9005, 0x1110, 0xb9d2, 0x0020, 0x0096, 0x2048, 0xa902, - 0x009e, 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, 0x6a57, 0x0140, - 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600, - 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006, - 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d7d, 0x000e, 0x00ce, 0x012e, - 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, - 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4, - 0x0150, 0x080c, 0x6a53, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, - 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, - 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218, - 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204, - 0x905d, 0x1188, 0x0096, 0x080c, 0x103a, 0x2958, 0x009e, 0x0168, - 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6, - 0xb8ae, 0x080c, 0x603c, 0x9006, 0x0010, 0x9085, 0x0001, 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, 0x106c, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff, - 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc814, 0x0110, - 0x080c, 0x0fec, 0x080c, 0xabc9, 0x00ce, 0x0c88, 0x00ce, 0x00de, - 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x107c, 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, - 0x74d5, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xab33, - 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, - 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, - 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, - 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, - 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, - 0xb8c8, 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, 0xbbd4, 0xc384, 0xba00, - 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, - 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, - 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6, - 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, 0x0d7d, 0x3c00, 0x20e8, - 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, - 0x014e, 0x013e, 0x0060, 0x080c, 0x103a, 0x0170, 0x2900, 0xb8a6, - 0xa803, 0x0000, 0x080c, 0x68a9, 0xa807, 0x0001, 0xae12, 0x9085, - 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, - 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, - 0x080c, 0x68b8, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, - 0xa806, 0x0020, 0x080c, 0x106c, 0xb8a7, 0x0000, 0x009e, 0x012e, - 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, 0x67a2, 0xb8d0, - 0x904d, 0x0904, 0x67a2, 0x080c, 0xaba0, 0x0904, 0x679e, 0x8210, - 0xba3e, 0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012, - 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, - 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, - 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1568, - 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1530, 0x9084, - 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, - 0x8004, 0x6003, 0x0004, 0x0030, 0x080c, 0x1c30, 0x2001, 0x8004, - 0x6003, 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xa863, - 0xb838, 0xba3c, 0x9202, 0x0a04, 0x674f, 0x0020, 0x82ff, 0x1110, - 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, 0x1731, 0x601c, - 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800, - 0x900e, 0x0016, 0x080c, 0x661e, 0x1158, 0xb8d0, 0x904d, 0x0140, - 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041, - 0x001e, 0x8108, 0x1f04, 0x67b1, 0x001e, 0x00be, 0x009e, 0x0005, - 0x0096, 0x0016, 0xb8d0, 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005, - 0x1108, 0xb8ce, 0x9006, 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877, - 0x0000, 0x080c, 0xcb12, 0x080c, 0x6d70, 0x0c60, 0x001e, 0x009e, - 0x0005, 0x0086, 0x9046, 0xb8d0, 0x904d, 0x0198, 0xa86c, 0x9406, - 0x1118, 0xa870, 0x9506, 0x0128, 0x2940, 0xa800, 0x904d, 0x0148, - 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8d2, 0x0008, 0xa002, 0xa803, - 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x00e6, - 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, 0x8000, 0x2071, - 0x19e7, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff, - 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, - 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c, - 0x0006, 0x0066, 0x2830, 0x080c, 0x9f7e, 0x006e, 0x000e, 0x83ff, - 0x0508, 0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120, - 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, - 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00, - 0x0026, 0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff, - 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x0005, - 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x690d, - 0x0128, 0x080c, 0xc8d5, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, - 0x690d, 0x0128, 0x080c, 0xc876, 0x0010, 0x9085, 0x0001, 0x0005, - 0x080c, 0x690d, 0x0128, 0x080c, 0xc8d2, 0x0010, 0x9085, 0x0001, - 0x0005, 0x080c, 0x690d, 0x0128, 0x080c, 0xc895, 0x0010, 0x9085, - 0x0001, 0x0005, 0x080c, 0x690d, 0x0128, 0x080c, 0xc916, 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, + 0x0014, 0x080c, 0x5eb8, 0x0010, 0x080c, 0x5908, 0x00fe, 0x0005, + 0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5e8e, 0x080c, 0x863e, + 0x9086, 0x0014, 0x1560, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, + 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, + 0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, + 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, + 0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5b56, 0x0010, 0x080c, + 0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, 0x1d0e, + 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, + 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, + 0x080c, 0x5fe6, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060, 0x9085, + 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1d0e, + 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, + 0x6812, 0x2009, 0x0240, 0x1f04, 0x5ad8, 0x60c3, 0x0084, 0x080c, + 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, + 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1178, 0x080c, 0x6003, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, + 0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, + 0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x5f87, 0x2079, 0x0240, + 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x6003, 0x20a9, 0x0040, + 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, + 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, + 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5b1c, 0x60c3, 0x0084, + 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, + 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198, 0x080c, + 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, + 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b, 0x000e, + 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x918d, 0x0001, + 0x080c, 0x602e, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061, 0x0140, + 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, + 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8632, + 0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5e8e, 0x080c, 0x863e, + 0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xa690, 0x080c, + 0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, + 0x8004, 0x20a8, 0x4003, 0x080c, 0x5fe6, 0x11a0, 0x717c, 0x81ff, + 0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, 0x25fb, + 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, + 0x080c, 0x5e3b, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0005, 0x00f6, + 0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, + 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, + 0x080c, 0x5f95, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, + 0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084, 0x9005, 0x1158, + 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e3b, + 0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, + 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, + 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, + 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, + 0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093, 0x0000, + 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f95, 0x2079, + 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x6003, 0x080c, + 0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, + 0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, + 0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4, 0x0110, 0x080c, + 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, + 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8, + 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e8e, + 0x080c, 0x863e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x6003, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, + 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x602e, + 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, + 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, + 0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x602e, 0x7097, + 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, 0x0016, + 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa690, + 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, + 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, + 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x709b, + 0x0017, 0x080c, 0x5fe6, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, + 0x5dae, 0x1188, 0x9085, 0x0001, 0x080c, 0x2664, 0x20a9, 0x0008, + 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0010, + 0x080c, 0x5908, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, + 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1190, 0x080c, 0x6003, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, + 0x1138, 0x9006, 0x080c, 0x602e, 0x709b, 0x0018, 0x0029, 0x0010, + 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, + 0x5f95, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, + 0x6003, 0x2009, 0x026e, 0x2039, 0x1d0e, 0x20a9, 0x0040, 0x213e, + 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, + 0x2009, 0x0260, 0x1f04, 0x5d17, 0x2039, 0x1d0e, 0x080c, 0x5fe6, + 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, + 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310, 0x8214, + 0x92a0, 0x1d0e, 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, 0x5d4a, 0x60c3, + 0x0084, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, + 0x01e0, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198, + 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, + 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b, + 0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, + 0x0001, 0x080c, 0x602e, 0x709b, 0x001b, 0x080c, 0xa690, 0x080c, + 0x6003, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 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, 0x5d96, + 0x60c3, 0x0084, 0x080c, 0x5eb8, 0x0005, 0x0005, 0x0086, 0x0096, + 0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1d0e, 0x20e9, + 0x0001, 0x28a0, 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e, + 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, + 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, + 0x8210, 0x0008, 0x8211, 0x1f04, 0x5dc8, 0x0804, 0x5e37, 0x82ff, + 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, + 0x3fff, 0x0904, 0x5e37, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, + 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, + 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, + 0x8318, 0x1f04, 0x5dee, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, + 0x8425, 0x1f04, 0x5e00, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, + 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, + 0x0010, 0x1f04, 0x5e0f, 0x755e, 0x95c8, 0x3374, 0x292d, 0x95ac, + 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, + 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, + 0x7087, 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, 0x715e, 0x91a0, 0x3374, 0x242d, 0x95ac, 0x00ff, 0x7582, + 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, 0x001e, 0x60e7, + 0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, + 0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, + 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5f48, 0x080c, 0x9e32, + 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x0126, 0x2091, + 0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, + 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x001e, 0x9094, 0x0010, 0x9285, + 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, + 0x0126, 0x2091, 0x8000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101, + 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f4, 0x2013, 0x0000, 0x7093, + 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x9e25, + 0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018, 0x718c, + 0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, + 0x5e8e, 0x080c, 0x8708, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, + 0x2091, 0x8000, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, + 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x2061, 0x1a03, 0x900e, 0x611a, + 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, + 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, 0x200b, + 0x0000, 0x2009, 0x002d, 0x2011, 0x5f14, 0x080c, 0x8632, 0x012e, + 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, + 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9e32, 0x2071, 0x0140, + 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x080c, 0x74f1, + 0x0188, 0x080c, 0x750c, 0x1170, 0x080c, 0x77f7, 0x0016, 0x080c, + 0x2713, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x77f2, 0x080c, + 0x741a, 0x0050, 0x2009, 0x0001, 0x080c, 0x29f6, 0x2001, 0x0001, + 0x080c, 0x25a0, 0x080c, 0x5ee4, 0x012e, 0x000e, 0x00ee, 0x0005, + 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, + 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b07, 0x003e, 0x002e, + 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x080c, + 0x6003, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, + 0x080c, 0x5ffd, 0x2099, 0x0260, 0x20a1, 0x1d92, 0x0051, 0x20a9, + 0x000e, 0x080c, 0x6000, 0x2099, 0x0260, 0x20a1, 0x1db2, 0x0009, + 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, + 0x8108, 0x8210, 0x1f04, 0x5f7d, 0x002e, 0x001e, 0x0005, 0x080c, + 0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa690, 0x080c, + 0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, + 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, 0x2001, + 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, + 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x6a67, + 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001, + 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, + 0x31a6, 0x080c, 0xcf52, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, + 0x0007, 0x080c, 0x4cbe, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, + 0x5ee4, 0x709b, 0x0000, 0x7093, 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, 0x1d00, 0x4004, 0x2079, 0x1d00, + 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, + 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, + 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x19a6, + 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, + 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, + 0x603d, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, + 0x2069, 0x1847, 0x9006, 0xb802, 0xb8d6, 0xb807, 0x0707, 0xb80a, + 0xb80e, 0xb812, 0x9198, 0x3374, 0x231d, 0x939c, 0x00ff, 0xbb16, + 0x0016, 0x0026, 0xb886, 0x080c, 0xab57, 0x1120, 0x9192, 0x007e, + 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, 0x9198, + 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, + 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb8ce, 0xb8d2, + 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, + 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, + 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x106c, + 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, + 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, 0x2060, + 0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02, + 0x1a0c, 0x0d7d, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af, + 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, + 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, 0xae78, + 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6119, 0x9182, 0x0800, + 0x1a04, 0x611d, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, + 0x6123, 0x9188, 0x1000, 0x2104, 0x905d, 0x0198, 0xb804, 0x9084, + 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, 0x900d, 0x1904, 0x6135, + 0x080c, 0x64ee, 0x9006, 0x012e, 0x0005, 0x2001, 0x0005, 0x900e, + 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, + 0x080c, 0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, + 0xd1fc, 0x0d10, 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, 0x9065, 0x09a8, 0x080c, 0x6a6b, 0x1990, + 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60dc, 0x080c, 0x6890, 0x0904, + 0x60e5, 0x0804, 0x60e0, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086, + 0x0002, 0x1128, 0x7030, 0x9080, 0x0004, 0x2004, 0x9b06, 0x00ee, + 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, 0x908e, + 0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974, 0x9182, + 0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, + 0x6a0b, 0x11d0, 0x080c, 0xab97, 0x0570, 0x2b00, 0x6012, 0x2900, + 0x6016, 0x6023, 0x0009, 0x602b, 0x0000, 0xa874, 0x908e, 0x00ff, + 0x1110, 0x602b, 0x8000, 0x2009, 0x0043, 0x080c, 0xac8c, 0x9006, + 0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, + 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, + 0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, + 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, + 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x6211, + 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x61e9, 0xb8a0, 0x9086, + 0x007f, 0x0178, 0x080c, 0x6a73, 0x0160, 0xa994, 0x81ff, 0x0130, + 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6a6b, + 0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, + 0x0026, 0x2010, 0x080c, 0xc826, 0x002e, 0x1120, 0x2001, 0x0008, + 0x0804, 0x6213, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, + 0x0804, 0x6213, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, + 0x080c, 0xab97, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, + 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xac8c, 0x9006, + 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, + 0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, + 0x0900, 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, 0x62a8, 0x6263, 0x627a, 0x62a8, 0x62a8, + 0x62a8, 0x62a8, 0x62a8, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, + 0x65c4, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x62b0, 0xb814, + 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x49ba, + 0x0150, 0x04b0, 0x080c, 0x6625, 0x1598, 0xb810, 0x9306, 0x1580, + 0xb814, 0x9206, 0x1568, 0x080c, 0xab97, 0x0530, 0x2b00, 0x6012, + 0x080c, 0xcccc, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, + 0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x31e7, 0x9006, 0x080c, + 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x2001, 0x0200, 0xb86e, + 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xac8c, 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, 0x6497, 0x90c6, 0x0056, 0x0904, 0x649b, + 0x90c6, 0x0066, 0x0904, 0x649f, 0x90c6, 0x0067, 0x0904, 0x64a3, + 0x90c6, 0x0068, 0x0904, 0x64a7, 0x90c6, 0x0071, 0x0904, 0x64ab, + 0x90c6, 0x0074, 0x0904, 0x64af, 0x90c6, 0x007c, 0x0904, 0x64b3, + 0x90c6, 0x007e, 0x0904, 0x64b7, 0x90c6, 0x0037, 0x0904, 0x64bb, + 0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x6492, + 0x9182, 0x0800, 0x1a04, 0x6492, 0x080c, 0x6625, 0x1198, 0xb804, + 0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, + 0x0148, 0x080c, 0xab57, 0x1904, 0x647b, 0xb8a0, 0x9084, 0xff80, + 0x1904, 0x647b, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, + 0x0904, 0x63db, 0x90c6, 0x0064, 0x0904, 0x6404, 0x2008, 0x0804, + 0x639d, 0xa998, 0xa8b0, 0x2040, 0x080c, 0xab57, 0x1120, 0x9182, + 0x007f, 0x0a04, 0x639d, 0x9186, 0x00ff, 0x0904, 0x639d, 0x9182, + 0x0800, 0x1a04, 0x639d, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, + 0x7880, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, + 0x639d, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, + 0x639d, 0x080c, 0x49ba, 0x0904, 0x63a7, 0x900e, 0x9016, 0x90c6, + 0x4000, 0x15e0, 0x0006, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, + 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, + 0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, + 0x2098, 0x080c, 0x0fb7, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, + 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, + 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, + 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, + 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, + 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, + 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c, + 0xab97, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, + 0x2b00, 0x6012, 0x080c, 0xcccc, 0x2900, 0x6016, 0x6023, 0x0001, + 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, + 0x080c, 0x31e7, 0x012e, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002, + 0x080c, 0x6575, 0x2009, 0x0002, 0x080c, 0xac8c, 0xa8b0, 0xd094, + 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006, 0x9005, 0x012e, 0x00ee, + 0x00fe, 0x00be, 0x0005, 0x080c, 0x56ee, 0x0118, 0x2009, 0x0007, + 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x6625, 0x1904, 0x6398, 0x9186, + 0x007f, 0x0130, 0x080c, 0x6a6b, 0x0118, 0x2009, 0x0009, 0x0080, + 0x0096, 0x080c, 0x103a, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, + 0x2900, 0x009e, 0xa806, 0x080c, 0xca24, 0x19b0, 0x2009, 0x0003, + 0x2001, 0x4005, 0x0804, 0x639f, 0xa998, 0xaeb0, 0x080c, 0x6625, + 0x1904, 0x6398, 0x0096, 0x080c, 0x103a, 0x1128, 0x009e, 0x2009, + 0x0002, 0x0804, 0x6458, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, + 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, + 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, + 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0fb7, + 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, + 0x1168, 0x080c, 0x56da, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, + 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6a6b, + 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x56ee, 0x0118, 0xa89b, + 0x0007, 0x0050, 0x080c, 0xca07, 0x1904, 0x63d4, 0x2009, 0x0003, + 0x2001, 0x4005, 0x0804, 0x639f, 0xa87b, 0x0030, 0xa897, 0x4005, + 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, + 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112, 0x1904, 0x63d4, + 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x63d5, + 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, + 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, + 0x0804, 0x63d5, 0x2001, 0x0029, 0x900e, 0x0804, 0x63d5, 0x080c, + 0x3797, 0x0804, 0x63d6, 0x080c, 0x540f, 0x0804, 0x63d6, 0x080c, + 0x4573, 0x0804, 0x63d6, 0x080c, 0x45ec, 0x0804, 0x63d6, 0x080c, + 0x4648, 0x0804, 0x63d6, 0x080c, 0x4a7d, 0x0804, 0x63d6, 0x080c, + 0x4d34, 0x0804, 0x63d6, 0x080c, 0x507a, 0x0804, 0x63d6, 0x080c, + 0x5273, 0x0804, 0x63d6, 0x080c, 0x39b5, 0x0804, 0x63d6, 0x00b6, + 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1608, 0x9182, + 0x0800, 0x1258, 0x9188, 0x1000, 0x2104, 0x905d, 0x0130, 0x080c, + 0x6a6b, 0x1138, 0x00d9, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, + 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d98, 0x2001, + 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, + 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0xa877, 0x0000, + 0xb8d0, 0x9005, 0x1904, 0x6555, 0xb888, 0x9005, 0x1904, 0x6555, + 0xb838, 0xb93c, 0x9102, 0x1a04, 0x6555, 0x2b10, 0x080c, 0xabc4, + 0x0904, 0x6551, 0x8108, 0xb93e, 0x6212, 0x2900, 0x6016, 0x6023, + 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880, + 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x0588, + 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1530, 0xa816, 0xa864, 0x9094, + 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd, 0x601e, + 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001, 0x1df0, + 0x2001, 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079, 0x0380, + 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836, 0x781b, + 0x8080, 0x00fe, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd, 0x601e, + 0x0c38, 0xd0b4, 0x190c, 0x1c30, 0x2001, 0x8004, 0x6003, 0x0002, + 0x0c18, 0x81ff, 0x1110, 0xb88b, 0x0001, 0x2908, 0xb8cc, 0xb9ce, + 0x9005, 0x1110, 0xb9d2, 0x0020, 0x0096, 0x2048, 0xa902, 0x009e, + 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, 0x6a67, 0x0140, 0x9284, + 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, + 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, + 0xba90, 0x82ff, 0x090c, 0x0d7d, 0x000e, 0x00ce, 0x012e, 0x00be, + 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, + 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, + 0x080c, 0x6a63, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, + 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, + 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, + 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, + 0x1188, 0x0096, 0x080c, 0x103a, 0x2958, 0x009e, 0x0168, 0x2b00, + 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae, + 0x080c, 0x6043, 0x9006, 0x0010, 0x9085, 0x0001, 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, 0x106c, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168, + 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc838, 0x0110, 0x080c, + 0x0fec, 0x080c, 0xabed, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, + 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x107c, 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, 0x74e9, + 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xab57, 0x11d8, + 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, 0x7048, + 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, + 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, + 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, + 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8, + 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, 0xbbd4, 0xc384, 0xba00, 0x2009, + 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, + 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, + 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6, 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, 0x0d7d, 0x3c00, 0x20e8, 0x3300, + 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e, + 0x013e, 0x0060, 0x080c, 0x103a, 0x0170, 0x2900, 0xb8a6, 0xa803, + 0x0000, 0x080c, 0x68b0, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001, + 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, + 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c, + 0x68bf, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806, + 0x0020, 0x080c, 0x106c, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005, + 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, 0x67a9, 0xb8d0, 0x904d, + 0x0904, 0x67a9, 0x080c, 0xabc4, 0x0904, 0x67a5, 0x8210, 0xba3e, + 0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012, 0x2900, + 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, + 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, + 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1568, 0xa816, + 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1530, 0x9084, 0x00ff, + 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x8004, + 0x6003, 0x0004, 0x0030, 0x080c, 0x1c30, 0x2001, 0x8004, 0x6003, + 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xa887, 0xb838, + 0xba3c, 0x9202, 0x0a04, 0x6756, 0x0020, 0x82ff, 0x1110, 0xb88b, + 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd, + 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800, 0x900e, + 0x0016, 0x080c, 0x6625, 0x1158, 0xb8d0, 0x904d, 0x0140, 0x3e00, + 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041, 0x001e, + 0x8108, 0x1f04, 0x67b8, 0x001e, 0x00be, 0x009e, 0x0005, 0x0096, + 0x0016, 0xb8d0, 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005, 0x1108, + 0xb8ce, 0x9006, 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0xcb36, 0x080c, 0x6d80, 0x0c60, 0x001e, 0x009e, 0x0005, + 0x0086, 0x9046, 0xb8d0, 0x904d, 0x0198, 0xa86c, 0x9406, 0x1118, + 0xa870, 0x9506, 0x0128, 0x2940, 0xa800, 0x904d, 0x0148, 0x0ca8, + 0xa800, 0x88ff, 0x1110, 0xb8d2, 0x0008, 0xa002, 0xa803, 0x0000, + 0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x00e6, 0x0096, + 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, + 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff, 0x0120, + 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, + 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c, 0x0006, + 0x0066, 0x2830, 0x080c, 0x9fa2, 0x006e, 0x000e, 0x83ff, 0x0508, + 0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120, 0xa878, + 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, + 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00, 0x0026, + 0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff, 0x0108, + 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9016, + 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x6914, 0x0128, + 0x080c, 0xc8f9, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6914, + 0x0128, 0x080c, 0xc89a, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, + 0x6914, 0x0128, 0x080c, 0xc8f6, 0x0010, 0x9085, 0x0001, 0x0005, + 0x080c, 0x6914, 0x0128, 0x080c, 0xc8b9, 0x0010, 0x9085, 0x0001, + 0x0005, 0x080c, 0x6914, 0x0128, 0x080c, 0xc93a, 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, 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, 0x103a, 0x0168, 0x2900, 0xb8a6, - 0x080c, 0x68a9, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, - 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, - 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x106c, - 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, - 0x00b6, 0x00f6, 0x080c, 0x74d5, 0x01b0, 0x71c4, 0x81ff, 0x1198, - 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, - 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, - 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, - 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x661e, 0x1168, - 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, - 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, - 0x6934, 0x015e, 0x080c, 0x6a19, 0x0120, 0x2001, 0x1985, 0x200c, - 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, - 0x2011, 0x695f, 0x080c, 0x86d7, 0x00fe, 0x00be, 0x0005, 0x00b6, - 0x2011, 0x695f, 0x080c, 0x860d, 0x080c, 0x6a19, 0x01d8, 0x2001, - 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6a57, - 0x0130, 0x2009, 0x07d0, 0x2011, 0x695f, 0x080c, 0x86d7, 0x00e6, - 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2fb2, - 0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, - 0x080c, 0x661e, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, - 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe29e, 0xb800, 0xc0e5, - 0xc0ec, 0xb802, 0x080c, 0x6a53, 0x2001, 0x0707, 0x1128, 0xb804, - 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0xa872, 0x2019, - 0x0029, 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x900e, - 0x080c, 0xdfc0, 0x007e, 0x004e, 0x080c, 0xa88e, 0x001e, 0x8108, - 0x1f04, 0x6987, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, - 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, - 0x0096, 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2958, 0x009e, 0x2001, - 0x196b, 0x2b02, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x603c, + 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, 0x103a, 0x0168, 0x2900, 0xb8a6, 0x080c, + 0x68b0, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, 0x012e, + 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, 0x8000, + 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x106c, 0x9085, + 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, 0x00b6, + 0x00f6, 0x080c, 0x74e9, 0x01b0, 0x71c4, 0x81ff, 0x1198, 0x71dc, + 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, 0x905d, + 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800, + 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, 0x0156, + 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1168, 0xb804, + 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006, + 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x693b, + 0x015e, 0x080c, 0x6a29, 0x0120, 0x2001, 0x1985, 0x200c, 0x0038, + 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, + 0x6966, 0x080c, 0x8708, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011, + 0x6966, 0x080c, 0x863e, 0x080c, 0x6a29, 0x01d8, 0x2001, 0x107e, + 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6a67, 0x0130, + 0x2009, 0x07d0, 0x2011, 0x6966, 0x080c, 0x8708, 0x00e6, 0x2071, + 0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2fb2, 0x00ee, + 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, + 0x6625, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, 0x2220, + 0x9006, 0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xc0ec, + 0xb802, 0x080c, 0x6a63, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084, + 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0xa896, 0x2019, 0x0029, + 0x080c, 0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c, + 0xdfeb, 0x007e, 0x004e, 0x080c, 0xa8b2, 0x001e, 0x8108, 0x1f04, + 0x698e, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, + 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, + 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2958, 0x009e, 0x2001, 0x196b, + 0x2b02, 0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c, + 0xffc0, 0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6043, 0xb807, 0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c, 0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000, 0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, @@ -3194,85 +3196,85 @@ 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0d7d, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc, - 0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a49, 0x080c, 0x86d7, - 0x0005, 0x2011, 0x6a49, 0x080c, 0x860d, 0x2011, 0x1837, 0x2204, - 0xc0cc, 0x2012, 0x0005, 0x080c, 0x56d3, 0xd0ac, 0x0005, 0x080c, - 0x56d3, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, + 0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a59, 0x080c, 0x8708, + 0x0005, 0x2011, 0x6a59, 0x080c, 0x863e, 0x2011, 0x1837, 0x2204, + 0xc0cc, 0x2012, 0x0005, 0x080c, 0x56da, 0xd0ac, 0x0005, 0x080c, + 0x56da, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, - 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xcf2e, + 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xcf52, 0x0158, 0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8d4, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071, 0x1910, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, - 0x56d3, 0xd0fc, 0x1140, 0x080c, 0x56d3, 0x900e, 0xd09c, 0x0108, + 0x56da, 0xd0fc, 0x1140, 0x080c, 0x56da, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007, - 0x0002, 0x6a9b, 0x6a9b, 0x6a9b, 0x6a9b, 0x6a9b, 0x6ab1, 0x6abf, - 0x6a9b, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, + 0x0002, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6ac1, 0x6acf, + 0x6aab, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, - 0x080c, 0x784b, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, + 0x080c, 0x785f, 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, 0x1910, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, - 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d75, - 0x9286, 0x0003, 0x0904, 0x6c05, 0x9286, 0x0005, 0x0904, 0x6c05, - 0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6b66, 0x7140, 0xa868, - 0x9102, 0x0a04, 0x6d75, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, + 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85, + 0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15, + 0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6b76, 0x7140, 0xa868, + 0x9102, 0x0a04, 0x6d85, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001, 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, - 0x6f18, 0x0e04, 0x6f86, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, + 0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082, 0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x0804, - 0x6be8, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c, - 0x1904, 0x6d75, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6b2a, - 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d75, - 0x9286, 0x0003, 0x0904, 0x6c05, 0x9286, 0x0005, 0x0904, 0x6c05, - 0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6bcd, 0xa868, 0xd0fc, + 0x6bf8, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c, + 0x1904, 0x6d85, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6b3a, + 0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85, + 0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15, + 0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6bdd, 0xa868, 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, - 0x6d75, 0xa87c, 0xd0bc, 0x1904, 0x6d75, 0xa978, 0xa874, 0x9105, - 0x1904, 0x6d75, 0x2001, 0x1948, 0x2004, 0x0002, 0x6d75, 0x6bc9, - 0x6c05, 0x6c05, 0x6d75, 0x6c05, 0x0005, 0xa868, 0xd0fc, 0x1500, - 0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6d75, - 0xa87c, 0xd0cc, 0x0904, 0x6d75, 0xa880, 0x9084, 0x00ff, 0x9086, - 0x0001, 0x1904, 0x6d75, 0x9186, 0x0003, 0x0904, 0x6c05, 0x9186, - 0x0005, 0x0904, 0x6c05, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, + 0x6d85, 0xa87c, 0xd0bc, 0x1904, 0x6d85, 0xa978, 0xa874, 0x9105, + 0x1904, 0x6d85, 0x2001, 0x1948, 0x2004, 0x0002, 0x6d85, 0x6bd9, + 0x6c15, 0x6c15, 0x6d85, 0x6c15, 0x0005, 0xa868, 0xd0fc, 0x1500, + 0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6d85, + 0xa87c, 0xd0cc, 0x0904, 0x6d85, 0xa880, 0x9084, 0x00ff, 0x9086, + 0x0001, 0x1904, 0x6d85, 0x9186, 0x0003, 0x0904, 0x6c15, 0x9186, + 0x0005, 0x0904, 0x6c15, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c, - 0x9005, 0x1904, 0x6f18, 0x0e04, 0x6f86, 0x2071, 0x0000, 0xa84c, + 0x9005, 0x1904, 0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, - 0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, + 0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, - 0x1904, 0x6cfa, 0x782c, 0x908c, 0x0780, 0x190c, 0x70d2, 0x8004, - 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c23, 0x6cfa, 0x6c48, - 0x6c95, 0x080c, 0x0d7d, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, + 0x1904, 0x6d0a, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004, + 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c33, 0x6d0a, 0x6c58, + 0x6ca5, 0x080c, 0x0d7d, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, - 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0c10, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, - 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, - 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8, 0x2071, 0x1a03, + 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, + 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, - 0x70c2, 0x080c, 0x8522, 0x0804, 0x6c4f, 0x0096, 0x00e6, 0x7824, + 0x70c2, 0x080c, 0x8553, 0x0804, 0x6c5f, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, - 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780, 0x190c, - 0x70d2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, - 0x70d2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, + 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c, + 0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, + 0x70e2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, @@ -3280,85 +3282,85 @@ 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00fe, 0x002e, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, - 0x1904, 0x6d4f, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, + 0x1904, 0x6d5f, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, - 0x190c, 0x70d2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, - 0x70d2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, + 0x190c, 0x70e2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, + 0x70e2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, - 0x8522, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x1d60, + 0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, - 0x8522, 0x00ee, 0x0804, 0x6d0a, 0xa868, 0xd0fc, 0x1560, 0x0096, + 0x8553, 0x00ee, 0x0804, 0x6d1a, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fec, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, - 0x1904, 0x6e92, 0x782c, 0x908c, 0x0780, 0x190c, 0x70d2, 0x8004, - 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6d94, 0x6e92, 0x6daf, - 0x6e21, 0x080c, 0x0d7d, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, + 0x1904, 0x6ea2, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004, + 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6da4, 0x6ea2, 0x6dbf, + 0x6e31, 0x080c, 0x0d7d, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0c60, 0x2071, - 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6e10, 0x7830, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c60, 0x2071, + 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6e20, 0x7830, 0xd0dc, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, - 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8, 0x0e04, 0x6e07, 0x7838, + 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, + 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x0e04, 0x6e17, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, - 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0804, - 0x6dbe, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, - 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x1d60, 0x00ee, - 0x0e04, 0x6e65, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0804, + 0x6dce, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, + 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, + 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60, 0x00ee, + 0x0e04, 0x6e75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, - 0x70d2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, + 0x70e2, 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, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00fe, 0x002e, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, - 0x1904, 0x6f03, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, + 0x1904, 0x6f13, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, - 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, 0x0d50, 0x782c, - 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x05c8, 0x00e6, 0x7824, + 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x0d50, 0x782c, + 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, - 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780, 0x190c, - 0x70d2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6efc, 0x7838, 0x7938, + 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c, + 0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6f0c, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 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, - 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00ee, 0x0804, 0x6ea2, + 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00ee, 0x0804, 0x6eb2, 0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1128, 0x1e04, 0x6f43, 0x002e, 0x00ee, 0x0005, + 0xa804, 0x900d, 0x1128, 0x1e04, 0x6f53, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, - 0x8522, 0x0e04, 0x6f2d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, + 0x8553, 0x0e04, 0x6f3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, - 0x2071, 0x1910, 0x080c, 0x70be, 0x002e, 0x00ee, 0x0005, 0xa850, + 0x2071, 0x1910, 0x080c, 0x70ce, 0x002e, 0x00ee, 0x0005, 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, @@ -3367,23 +3369,23 @@ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x002e, 0x00ee, 0x0005, + 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 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, - 0x1910, 0x7004, 0x0002, 0x6fd1, 0x6fd2, 0x70bd, 0x6fd2, 0x0d7d, - 0x70bd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6fdc, 0x6fdc, - 0x7056, 0x7057, 0x6fdc, 0x7057, 0x0126, 0x2091, 0x8000, 0x1e0c, - 0x70dd, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x7027, - 0x0e04, 0x7005, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, + 0x1910, 0x7004, 0x0002, 0x6fe1, 0x6fe2, 0x70cd, 0x6fe2, 0x0d7d, + 0x70cd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6fec, 0x6fec, + 0x7066, 0x7067, 0x6fec, 0x7067, 0x0126, 0x2091, 0x8000, 0x1e0c, + 0x70ed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x7037, + 0x0e04, 0x7015, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x11d6, 0x2071, 0x1910, 0x080c, 0x70be, 0x012e, 0x0804, 0x7055, + 0x11d6, 0x2071, 0x1910, 0x080c, 0x70ce, 0x012e, 0x0804, 0x7065, 0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001, - 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, 0x2071, + 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x2071, 0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, @@ -3392,10 +3394,10 @@ 0x2008, 0x2069, 0x1a03, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1b4e, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, - 0x6838, 0x9106, 0x0190, 0x0e04, 0x7089, 0x2069, 0x0000, 0x6837, + 0x6838, 0x9106, 0x0190, 0x0e04, 0x7099, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2069, 0x1a03, 0x683f, - 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7153, + 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7163, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, @@ -3404,7 +3406,7 @@ 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x106c, 0x0005, - 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x70d4, 0x0006, 0x0016, + 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x70e4, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0d86, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, @@ -3416,7 +3418,7 @@ 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, - 0x8522, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8, + 0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x00ee, @@ -3424,3776 +3426,3780 @@ 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x00fe, 0x0005, - 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x0db8, 0x00e6, + 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, - 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780, - 0x190c, 0x70d2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, + 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, + 0x190c, 0x70e2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x1a03, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1949, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x0029, 0x1a0c, 0x0d7d, 0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, - 0x2a44, 0x002e, 0x0005, 0x727b, 0x7205, 0x7221, 0x7249, 0x726a, - 0x72aa, 0x72bc, 0x7221, 0x7292, 0x71c0, 0x71ee, 0x71bf, 0x0005, + 0x2a44, 0x002e, 0x0005, 0x728f, 0x7215, 0x7231, 0x725b, 0x727e, + 0x72be, 0x72d0, 0x7231, 0x72a6, 0x71d0, 0x71fe, 0x71cf, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, - 0x7617, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028, + 0x762b, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b, - 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x76ba, 0x6028, + 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x76ce, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, - 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x732d, + 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7341, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020, - 0x080c, 0x732d, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, - 0x0005, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x6124, 0xd1cc, 0x11d8, - 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, - 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7501, 0x2001, 0x0080, - 0x080c, 0x2a0a, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e, 0x0040, - 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, - 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7501, - 0x2001, 0x0080, 0x080c, 0x2a0a, 0x6124, 0xd1d4, 0x1180, 0xd1dc, - 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x709b, 0x0028, - 0x0040, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, - 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x6124, 0xd1dc, - 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1adf, 0x709b, 0x001e, 0x0010, - 0x709b, 0x001d, 0x0005, 0x080c, 0x73b6, 0x6124, 0xd1dc, 0x1188, - 0x080c, 0x732d, 0x0016, 0x080c, 0x1adf, 0x001e, 0xd1d4, 0x1128, - 0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020, 0x709b, 0x001f, 0x080c, - 0x732d, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x000e, - 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, - 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, - 0x0021, 0x0005, 0x080c, 0x73b6, 0x6124, 0xd1d4, 0x1150, 0xd1dc, - 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, - 0x0010, 0x709b, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, - 0x2a0a, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, - 0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, - 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x0016, - 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x74d5, 0x11f8, 0x2001, - 0x180c, 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x0026, 0x2011, - 0x0200, 0x080c, 0x2a44, 0x002e, 0x080c, 0x29f0, 0x6024, 0xd0cc, - 0x0148, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9, 0x080c, - 0x6022, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x74ef, - 0x0150, 0x080c, 0x74e6, 0x1138, 0x2001, 0x0001, 0x080c, 0x25a0, - 0x080c, 0x74a9, 0x00a0, 0x080c, 0x73b3, 0x0178, 0x2001, 0x0001, - 0x080c, 0x25a0, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, - 0x0022, 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, - 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x733e, - 0x080c, 0x8719, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, - 0x733e, 0x080c, 0x8710, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, - 0x0016, 0x080c, 0x9e0e, 0x2071, 0x1800, 0x080c, 0x72d7, 0x001e, - 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x0126, 0x080c, 0x9e0e, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, - 0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002, - 0x080c, 0xa1b5, 0x080c, 0xa074, 0x080c, 0x86c5, 0x0036, 0x901e, - 0x080c, 0xa0f4, 0x003e, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x080c, - 0xe6d7, 0x080c, 0xe6f2, 0x2009, 0x0004, 0x080c, 0x29f6, 0x080c, - 0x2916, 0x2001, 0x1800, 0x2003, 0x0004, 0x2011, 0x0008, 0x080c, - 0x2a44, 0x2011, 0x733e, 0x080c, 0x8719, 0x080c, 0x74ef, 0x0118, - 0x9006, 0x080c, 0x2a0a, 0x080c, 0x0bc3, 0x2001, 0x0001, 0x080c, - 0x25a0, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, - 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x734b, 0x2071, 0x1a03, - 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, - 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, - 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2a0a, - 0x0156, 0x20a9, 0x002d, 0x1d04, 0x73c3, 0x2091, 0x6000, 0x1f04, - 0x73c3, 0x015e, 0x00d6, 0x2069, 0x1800, 0x689c, 0x8001, 0x0220, - 0x0118, 0x689e, 0x00de, 0x0005, 0x689f, 0x0014, 0x68ec, 0xd0dc, - 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8725, 0x0c90, - 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x77e8, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, - 0x709a, 0x60e2, 0x6886, 0x080c, 0x266f, 0x9006, 0x080c, 0x2a0a, - 0x080c, 0x5edd, 0x0026, 0x2011, 0xffff, 0x080c, 0x2a44, 0x002e, - 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, - 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, - 0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, - 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7499, - 0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023, - 0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, - 0x0001, 0x080c, 0x266f, 0x080c, 0xa872, 0x0026, 0x080c, 0xab3a, - 0x002e, 0x080c, 0xa88e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, - 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, - 0xcf2e, 0x0118, 0x9006, 0x080c, 0x2a34, 0x0804, 0x74a5, 0x6800, - 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x29f0, 0x6904, 0xd1d4, - 0x1140, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x1f04, 0x744a, 0x080c, - 0x752c, 0x012e, 0x015e, 0x080c, 0x74e6, 0x0170, 0x6044, 0x9005, - 0x0130, 0x080c, 0x752c, 0x9006, 0x8001, 0x1df0, 0x0028, 0x6804, - 0xd0d4, 0x1110, 0x080c, 0x752c, 0x080c, 0xcf2e, 0x0118, 0x9006, - 0x080c, 0x2a34, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, - 0x2009, 0x00c8, 0x2011, 0x734b, 0x080c, 0x86d7, 0x002e, 0x001e, - 0x080c, 0x8519, 0x7034, 0xc085, 0x7036, 0x2001, 0x197d, 0x2003, - 0x0004, 0x080c, 0x71a4, 0x080c, 0x74e6, 0x0138, 0x6804, 0xd0d4, - 0x1120, 0xd0dc, 0x1100, 0x080c, 0x77de, 0x00ee, 0x00de, 0x00ce, - 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x1800, 0x080c, 0x8530, 0x080c, 0x8522, 0x080c, 0x77e8, - 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, - 0x080c, 0x266f, 0x9006, 0x080c, 0x2a0a, 0x6043, 0x0090, 0x6043, - 0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x2a44, 0x002e, 0x602b, - 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c, - 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d7, - 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, - 0x56d7, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, - 0x080c, 0x56d7, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, - 0x0006, 0x080c, 0x56d7, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, - 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, - 0x0180, 0x0020, 0x080c, 0x268f, 0x900e, 0x0028, 0x080c, 0x6a53, - 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x31a3, 0x9006, - 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, - 0x0130, 0x080c, 0xcf27, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, - 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, - 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, - 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x20a9, 0x0002, - 0x080c, 0x29d1, 0x0026, 0x2011, 0x0040, 0x080c, 0x2a44, 0x002e, - 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, - 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x266f, - 0x2001, 0x00a0, 0x0006, 0x080c, 0xcf2e, 0x000e, 0x0130, 0x080c, - 0x2a28, 0x9006, 0x080c, 0x2a34, 0x0010, 0x080c, 0x2a0a, 0x000e, - 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, - 0x080c, 0x2981, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, - 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x080c, 0xa8d0, 0x0158, 0x2001, 0x0386, - 0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c, 0xa863, 0x0804, - 0x7609, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, - 0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x2a44, 0x2001, 0x0090, - 0x080c, 0x2a0a, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1558, 0x1d04, - 0x75a4, 0x2091, 0x6000, 0x1f04, 0x75a4, 0x080c, 0xa872, 0x2011, - 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002, 0x080c, 0xa1b5, 0x080c, - 0xa074, 0x901e, 0x080c, 0xa0f4, 0x2001, 0x0386, 0x2003, 0x7000, - 0x080c, 0xa88e, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9, - 0x080c, 0x6022, 0x080c, 0xcf2e, 0x0110, 0x080c, 0x0ce9, 0x9085, - 0x0001, 0x04e8, 0x2001, 0x0386, 0x2004, 0xd0ac, 0x0110, 0x080c, - 0x1adf, 0x60e3, 0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f, - 0x60e2, 0x2001, 0x0080, 0x080c, 0x2a0a, 0x20a9, 0x0366, 0x2011, - 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, - 0x910c, 0x0140, 0x1d04, 0x75e7, 0x2091, 0x6000, 0x1f04, 0x75e7, - 0x0804, 0x75ad, 0x2001, 0x0386, 0x2003, 0x7000, 0x6028, 0x9085, - 0x1e00, 0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, - 0x6886, 0x080c, 0xcf2e, 0x0110, 0x080c, 0x0ce9, 0x9006, 0x00ee, - 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, - 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a77, - 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, - 0x0120, 0x6884, 0x9005, 0x1904, 0x7680, 0x2001, 0x0088, 0x080c, - 0x2a0a, 0x9006, 0x60e2, 0x6886, 0x080c, 0x266f, 0x2069, 0x0200, - 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028, 0x9084, - 0xfbff, 0x602a, 0x2011, 0x0400, 0x080c, 0x2a44, 0x2069, 0x198f, - 0x7000, 0x206a, 0x709b, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, - 0x1d04, 0x7660, 0x2091, 0x6000, 0x1f04, 0x7660, 0x0804, 0x76b2, - 0x2069, 0x0140, 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c, 0x2a44, - 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x0528, 0x9084, - 0x1a00, 0x1510, 0x1d04, 0x766c, 0x2091, 0x6000, 0x1f04, 0x766c, - 0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002, - 0x080c, 0xa1b5, 0x080c, 0xa074, 0x901e, 0x080c, 0xa0f4, 0x080c, - 0xa88e, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9, 0x080c, - 0x6022, 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2a0a, - 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, - 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f, - 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, - 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, - 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, - 0x01e8, 0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, - 0x0002, 0x080c, 0xa1b5, 0x080c, 0xa074, 0x901e, 0x080c, 0xa0f4, - 0x080c, 0xa88e, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2a0a, - 0x080c, 0x77d9, 0x080c, 0x6022, 0x0804, 0x7755, 0x2001, 0x180c, - 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x7333, 0x2069, - 0x0140, 0x2001, 0x0080, 0x080c, 0x2a0a, 0x60e3, 0x0000, 0x2069, - 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028, - 0x9084, 0xfdff, 0x602a, 0x2011, 0x0200, 0x080c, 0x2a44, 0x2069, - 0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001, 0x0804, - 0x7755, 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, - 0x29f0, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, - 0x7711, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8561, - 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x1a03, - 0x7018, 0x00ee, 0x9005, 0x19e8, 0x0500, 0x0026, 0x2011, 0x734b, - 0x080c, 0x860d, 0x2011, 0x733e, 0x080c, 0x8719, 0x002e, 0x2069, - 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, - 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f, 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, 0xcf27, 0x1904, 0x77c3, 0x7130, 0xd184, 0x1170, 0x080c, - 0x3361, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, - 0x1120, 0x7030, 0xd08c, 0x0904, 0x77c3, 0x2011, 0x1848, 0x220c, - 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe20e, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, - 0x0080, 0x0188, 0x080c, 0x661e, 0x1170, 0x2120, 0x9006, 0x0016, - 0x2009, 0x000e, 0x080c, 0xe29e, 0x2009, 0x0001, 0x2011, 0x0100, - 0x080c, 0x88bb, 0x001e, 0x8108, 0x1f04, 0x778c, 0x00be, 0x015e, - 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, - 0x080c, 0x31a3, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, - 0x900e, 0x080c, 0x661e, 0x1110, 0x080c, 0x603c, 0x8108, 0x1f04, - 0x77b9, 0x00be, 0x015e, 0x080c, 0x1adf, 0x080c, 0xa872, 0x080c, - 0xab3a, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x080c, 0x6022, 0x080c, - 0x7406, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, - 0x0005, 0x2001, 0x197d, 0x2003, 0x0001, 0x0005, 0x2001, 0x197d, - 0x2003, 0x0000, 0x0005, 0x2001, 0x197c, 0x2003, 0xaaaa, 0x0005, - 0x2001, 0x197c, 0x2003, 0x0000, 0x0005, 0x2071, 0x18fa, 0x7003, - 0x0000, 0x7007, 0x0000, 0x080c, 0x1053, 0x090c, 0x0d7d, 0xa8ab, - 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1053, 0x090c, 0x0d7d, 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, 0x18fa, 0x6807, 0x0001, 0x00de, 0x080c, 0x7dd0, - 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, - 0x818d, 0x1f04, 0x784f, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, - 0x18fa, 0x7004, 0x0002, 0x7865, 0x7866, 0x78b1, 0x790c, 0x7a1c, - 0x7863, 0x7863, 0x7a46, 0x080c, 0x0d7d, 0x0005, 0x2079, 0x0040, - 0x2001, 0x1dc0, 0x2003, 0x0000, 0x782c, 0x908c, 0x0780, 0x190c, - 0x7eb2, 0xd0a4, 0x0570, 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080, - 0x1640, 0x1d04, 0x7883, 0x2001, 0x1a06, 0x200c, 0x8109, 0x0508, - 0x2091, 0x6000, 0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, - 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, - 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, - 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x1968, 0x080c, - 0x790c, 0x782c, 0xd09c, 0x090c, 0x7dd0, 0x0005, 0x9082, 0x005a, - 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x7942, 0x0c90, 0x00e3, - 0x08f0, 0x0005, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7964, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x794e, 0x7942, - 0x7b37, 0x7942, 0x7942, 0x7942, 0x7964, 0x7942, 0x794e, 0x7b78, - 0x7bb9, 0x7c00, 0x7c14, 0x7942, 0x7942, 0x7964, 0x794e, 0x7978, - 0x7942, 0x79f0, 0x7cbf, 0x7cda, 0x7942, 0x7964, 0x7942, 0x7978, - 0x7942, 0x7942, 0x79e6, 0x7cda, 0x7942, 0x7942, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x798c, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7e56, - 0x7942, 0x7e00, 0x7942, 0x7e00, 0x7942, 0x79a1, 0x7942, 0x7942, - 0x7942, 0x7942, 0x7942, 0x7942, 0x2079, 0x0040, 0x7004, 0x9086, - 0x0003, 0x1198, 0x782c, 0x080c, 0x7df9, 0xd0a4, 0x0170, 0x7824, + 0x080c, 0x7341, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, + 0x0005, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x6124, 0xd1cc, 0x11e8, + 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, + 0x1adf, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7515, + 0x2001, 0x0080, 0x080c, 0x2a0a, 0x709b, 0x0028, 0x0058, 0x709b, + 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, + 0x709b, 0x001f, 0x0005, 0x080c, 0x1adf, 0x60e3, 0x0001, 0x600c, + 0xc0b4, 0x600e, 0x080c, 0x7515, 0x2001, 0x0080, 0x080c, 0x2a0a, + 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, + 0x1e00, 0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, + 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, + 0x080c, 0x2a0a, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, + 0x1adf, 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, + 0x73ca, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x7341, 0x0016, 0x080c, + 0x1adf, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, + 0x0020, 0x709b, 0x001f, 0x080c, 0x7341, 0x0005, 0x0006, 0x2001, + 0x00a0, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, + 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, + 0x709b, 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x73ca, + 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, + 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, + 0x0006, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4, + 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, + 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, + 0x709b, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, + 0x080c, 0x74e9, 0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0, + 0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200, 0x080c, 0x2a44, 0x002e, + 0x080c, 0x29f0, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, + 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x0428, 0x6028, 0xc0cd, + 0x602a, 0x0408, 0x080c, 0x7503, 0x0150, 0x080c, 0x74fa, 0x1138, + 0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x74bd, 0x00a0, 0x080c, + 0x73c7, 0x0178, 0x2001, 0x0001, 0x080c, 0x25a0, 0x7098, 0x9086, + 0x001e, 0x0120, 0x7098, 0x9086, 0x0022, 0x1118, 0x709b, 0x0025, + 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, + 0x0005, 0x0026, 0x2011, 0x7352, 0x080c, 0x874a, 0x002e, 0x0016, + 0x0026, 0x2009, 0x0064, 0x2011, 0x7352, 0x080c, 0x8741, 0x002e, + 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9e32, 0x2071, + 0x1800, 0x080c, 0x72eb, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, + 0x9e32, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, + 0x8000, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa896, 0x2011, 0x0003, + 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, + 0x080c, 0x86f6, 0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c, + 0xa8b2, 0x60e3, 0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x2009, + 0x0004, 0x080c, 0x29f6, 0x080c, 0x2916, 0x2001, 0x1800, 0x2003, + 0x0004, 0x2011, 0x0008, 0x080c, 0x2a44, 0x2011, 0x7352, 0x080c, + 0x874a, 0x080c, 0x7503, 0x0118, 0x9006, 0x080c, 0x2a0a, 0x080c, + 0x0bc3, 0x2001, 0x0001, 0x080c, 0x25a0, 0x012e, 0x00fe, 0x00ee, + 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, + 0x2011, 0x735f, 0x2071, 0x1a03, 0x701c, 0x9206, 0x1118, 0x7018, + 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, + 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, + 0x2001, 0x00c0, 0x080c, 0x2a0a, 0x0156, 0x20a9, 0x002d, 0x1d04, + 0x73d7, 0x2091, 0x6000, 0x1f04, 0x73d7, 0x015e, 0x00d6, 0x2069, + 0x1800, 0x689c, 0x8001, 0x0220, 0x0118, 0x689e, 0x00de, 0x0005, + 0x689f, 0x0014, 0x68ec, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, + 0x1da8, 0x080c, 0x8756, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x77fc, 0x2001, + 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, + 0x266f, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x5ee4, 0x0026, 0x2011, + 0xffff, 0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, + 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186, 0x0000, + 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, + 0x0003, 0x0158, 0x0804, 0x74ad, 0x709b, 0x0022, 0x0040, 0x709b, + 0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3, + 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x266f, 0x080c, + 0xa896, 0x0026, 0x080c, 0xab5e, 0x002e, 0x080c, 0xa8b2, 0x7000, + 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, + 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, + 0x0150, 0x012e, 0x015e, 0x080c, 0xcf52, 0x0118, 0x9006, 0x080c, + 0x2a34, 0x0804, 0x74b9, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, + 0x080c, 0x29f0, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, + 0x2a0a, 0x1f04, 0x745e, 0x080c, 0x7540, 0x012e, 0x015e, 0x080c, + 0x74fa, 0x0170, 0x6044, 0x9005, 0x0130, 0x080c, 0x7540, 0x9006, + 0x8001, 0x1df0, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7540, + 0x080c, 0xcf52, 0x0118, 0x9006, 0x080c, 0x2a34, 0x0016, 0x0026, + 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x735f, + 0x080c, 0x8708, 0x002e, 0x001e, 0x080c, 0x854a, 0x7034, 0xc085, + 0x7036, 0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x71b4, 0x080c, + 0x74fa, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, + 0x77f2, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8561, + 0x080c, 0x8553, 0x080c, 0x77fc, 0x2001, 0x196d, 0x2003, 0x0000, + 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x266f, 0x9006, 0x080c, + 0x2a0a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff, + 0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, + 0x0005, 0x0006, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e, + 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086, 0x0000, + 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086, + 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, + 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, + 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, + 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x268f, + 0x900e, 0x0028, 0x080c, 0x6a63, 0x1dc8, 0x2009, 0x0002, 0x2019, + 0x0028, 0x080c, 0x31a6, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, + 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xcf4b, 0x1128, + 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, + 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, + 0x6028, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, + 0x602f, 0x0000, 0x20a9, 0x0002, 0x080c, 0x29d1, 0x0026, 0x2011, + 0x0040, 0x080c, 0x2a44, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006, + 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, + 0x2001, 0x0001, 0x080c, 0x266f, 0x2001, 0x00a0, 0x0006, 0x080c, + 0xcf52, 0x000e, 0x0130, 0x080c, 0x2a28, 0x9006, 0x080c, 0x2a34, + 0x0010, 0x080c, 0x2a0a, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, + 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe, 0x000e, + 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, + 0xa8f4, 0x0158, 0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001, + 0x0016, 0x080c, 0xa887, 0x0804, 0x761d, 0x2001, 0x180c, 0x200c, + 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200, + 0x080c, 0x2a44, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x20a9, 0x0366, + 0x6024, 0xd0cc, 0x1558, 0x1d04, 0x75b8, 0x2091, 0x6000, 0x1f04, + 0x75b8, 0x080c, 0xa896, 0x2011, 0x0003, 0x080c, 0xa1cf, 0x2011, + 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, 0x901e, 0x080c, 0xa118, + 0x2001, 0x0386, 0x2003, 0x7000, 0x080c, 0xa8b2, 0x2001, 0x00a0, + 0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0xcf52, + 0x0110, 0x080c, 0x0ce9, 0x9085, 0x0001, 0x04e8, 0x2001, 0x0386, + 0x2004, 0xd0ac, 0x0110, 0x080c, 0x1adf, 0x60e3, 0x0000, 0x2001, + 0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x2001, 0x0080, 0x080c, + 0x2a0a, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, + 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x0140, 0x1d04, 0x75fb, + 0x2091, 0x6000, 0x1f04, 0x75fb, 0x0804, 0x75c1, 0x2001, 0x0386, + 0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4, 0x9005, + 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xcf52, 0x0110, + 0x080c, 0x0ce9, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, + 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, + 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, + 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, + 0x5540, 0x1128, 0x2069, 0x1a77, 0x2d04, 0x8000, 0x206a, 0x2069, + 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, + 0x7694, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x9006, 0x60e2, 0x6886, + 0x080c, 0x266f, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, + 0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x2011, 0x0400, + 0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0026, + 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x7674, 0x2091, 0x6000, + 0x1f04, 0x7674, 0x0804, 0x76c6, 0x2069, 0x0140, 0x20a9, 0x0384, + 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, + 0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510, 0x1d04, 0x7680, + 0x2091, 0x6000, 0x1f04, 0x7680, 0x080c, 0xa896, 0x2011, 0x0003, + 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, + 0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2001, 0x00a0, 0x080c, + 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x00b0, + 0x2001, 0x0080, 0x080c, 0x2a0a, 0x2069, 0x0140, 0x60e3, 0x0000, + 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, + 0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x9006, 0x00ee, 0x00de, + 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, + 0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c, 0xa896, 0x2011, + 0x0003, 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, + 0xa098, 0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2069, 0x0140, + 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, + 0x0804, 0x7769, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, + 0x2102, 0x080c, 0x7347, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, + 0x2a0a, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, + 0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff, 0x602a, 0x2011, + 0x0200, 0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, + 0x0027, 0x7003, 0x0001, 0x0804, 0x7769, 0x2011, 0x1e00, 0x080c, + 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x01c8, + 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7725, 0x0006, 0x0016, 0x00c6, + 0x00d6, 0x00e6, 0x080c, 0x8592, 0x00ee, 0x00de, 0x00ce, 0x001e, + 0x000e, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x00ee, 0x9005, 0x19e8, + 0x0500, 0x0026, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352, + 0x080c, 0x874a, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, + 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, + 0x2004, 0x080c, 0x266f, 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, 0xcf4b, 0x1904, 0x77d7, + 0x7130, 0xd184, 0x1170, 0x080c, 0x3368, 0x0138, 0xc18d, 0x7132, + 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, + 0x77d7, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019, + 0x000e, 0x080c, 0xe239, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, + 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6625, + 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xe2c9, + 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x001e, 0x8108, + 0x1f04, 0x77a0, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, + 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x31a6, 0x001e, 0x0078, + 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6625, 0x1110, + 0x080c, 0x6043, 0x8108, 0x1f04, 0x77cd, 0x00be, 0x015e, 0x080c, + 0x1adf, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3, + 0x0000, 0x080c, 0x6029, 0x080c, 0x741a, 0x00ee, 0x00ce, 0x004e, + 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, + 0x0001, 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, + 0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, + 0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, + 0x1053, 0x090c, 0x0d7d, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, + 0x1053, 0x090c, 0x0d7d, 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, 0x18fa, 0x6807, + 0x0001, 0x00de, 0x080c, 0x7de4, 0x9006, 0x00ee, 0x0005, 0x900e, + 0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7863, 0x015e, + 0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7879, + 0x787a, 0x78c5, 0x7920, 0x7a30, 0x7877, 0x7877, 0x7a5a, 0x080c, + 0x0d7d, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003, 0x0000, + 0x782c, 0x908c, 0x0780, 0x190c, 0x7ec6, 0xd0a4, 0x0570, 0x2001, + 0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, 0x7897, 0x2001, + 0x1a06, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000, 0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, - 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7dd0, 0x0005, - 0x7942, 0x794e, 0x7b23, 0x7942, 0x794e, 0x7942, 0x794e, 0x794e, - 0x7942, 0x794e, 0x7b23, 0x794e, 0x794e, 0x794e, 0x794e, 0x794e, - 0x7942, 0x794e, 0x7b23, 0x7942, 0x7942, 0x794e, 0x7942, 0x7942, - 0x7942, 0x794e, 0x00e6, 0x2071, 0x18fa, 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, 0x6d70, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, - 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7ac5, 0x7007, - 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7ac5, 0x0005, - 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, - 0x0001, 0x0804, 0x7ae0, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, - 0x701a, 0x704b, 0x7ae0, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, - 0x0904, 0x794a, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7afc, - 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7afc, - 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, - 0x794a, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8, - 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x62b2, - 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, - 0xa982, 0x080c, 0x6d70, 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, 0x7cf1, - 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, 0x7952, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7952, 0x82ff, - 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7a83, 0x0018, - 0x9280, 0x7a79, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7a64, - 0x080c, 0x1053, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, - 0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, - 0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, - 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, - 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x1124, 0xa06c, 0x908e, - 0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, - 0x7020, 0x2048, 0x080c, 0x106c, 0x7014, 0x2048, 0x0804, 0x7952, - 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, - 0xa906, 0x711a, 0x0804, 0x7a1c, 0x7014, 0x2048, 0x7007, 0x0001, - 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7cf1, 0x0804, - 0x7ac5, 0x7a7b, 0x7a7f, 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, 0x1834, 0x210c, - 0x81ff, 0x1178, 0x080c, 0x60b4, 0x1108, 0x0005, 0x080c, 0x6fb0, - 0x0126, 0x2091, 0x8000, 0x080c, 0xcb12, 0x080c, 0x6d70, 0x012e, - 0x0ca0, 0x080c, 0xcf27, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, - 0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188, - 0xa883, 0x0000, 0x080c, 0x6142, 0x1108, 0x0005, 0xa87a, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x0cb8, 0x2001, 0x0028, - 0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, 0x81ff, - 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, - 0x0120, 0x080c, 0x6214, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, - 0x618f, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, - 0x080c, 0x6d70, 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, - 0x661e, 0x11b8, 0x0066, 0xae80, 0x080c, 0x672e, 0x006e, 0x0088, - 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, - 0x080c, 0x661e, 0x1110, 0x080c, 0x68fd, 0x8108, 0x1f04, 0x7b60, - 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x106c, 0x00be, 0x0005, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x00be, 0x0005, - 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6a57, 0x0580, - 0x2061, 0x1a6f, 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, 0x7dba, - 0x012e, 0x0804, 0x7db4, 0x012e, 0x0804, 0x7dae, 0x012e, 0x0804, - 0x7db1, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6a57, - 0x05e0, 0x2061, 0x1a6f, 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, 0x7dba, 0x012e, 0x0804, 0x7db7, 0x012e, 0x0804, 0x7db4, - 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a6f, 0x6300, - 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, - 0x7dc8, 0x012e, 0x0804, 0x7db7, 0x00b6, 0x0126, 0x00c6, 0x2091, - 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, - 0x1a6f, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, - 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, 0x2004, - 0x9005, 0x0118, 0x080c, 0xac04, 0x0068, 0x6017, 0xf400, 0x6063, - 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x6162, 0x2009, 0x0041, - 0x080c, 0xac68, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, - 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x88bb, 0x002e, 0xa87c, - 0xd0c4, 0x0148, 0x2061, 0x1a6f, 0x6000, 0xd08c, 0x1120, 0x6008, - 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7dba, - 0x00ce, 0x012e, 0x00be, 0x0804, 0x7db4, 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, - 0x661e, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, - 0x09b8, 0x6007, 0x0024, 0x2001, 0x1986, 0x2004, 0x601a, 0x0804, - 0x7c4f, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, - 0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xac04, 0x8eff, 0x0118, - 0x2e60, 0x080c, 0xac04, 0x00ee, 0x0804, 0x7c4f, 0x6024, 0xc0dc, - 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, - 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, - 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ee, 0x0804, 0x7c4f, 0x2061, - 0x1a6f, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7dc8, 0x0126, - 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, - 0x7dc8, 0x012e, 0xa883, 0x0016, 0x0804, 0x7dc1, 0xa883, 0x0007, - 0x0804, 0x7dc1, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, - 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x794a, 0x0040, - 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7cf1, - 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, - 0x1800, 0x61d0, 0x81ff, 0x1904, 0x7d73, 0x6130, 0xd194, 0x1904, - 0x7d9d, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x0a04, 0x7d67, 0x6068, - 0x9e02, 0x1a04, 0x7d67, 0x7120, 0x9186, 0x0006, 0x1904, 0x7d59, - 0x7010, 0x905d, 0x0904, 0x7d73, 0xb800, 0xd0e4, 0x1904, 0x7d97, - 0x2061, 0x1a6f, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, - 0x7024, 0xd0dc, 0x1904, 0x7da0, 0xa883, 0x0000, 0xa803, 0x0000, - 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, - 0x7da3, 0x080c, 0x56d3, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, - 0x2e60, 0x080c, 0x87ae, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, - 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, - 0x7da3, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, - 0x0006, 0x00be, 0x0804, 0x7dc1, 0xd184, 0x0db8, 0xd1c4, 0x1190, - 0x00a0, 0xa974, 0x080c, 0x661e, 0x15d0, 0xb800, 0xd0e4, 0x15b8, - 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, - 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, - 0xa883, 0x0035, 0x0430, 0x080c, 0x56d7, 0xd0fc, 0x01e8, 0xa878, - 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6068, 0x9e02, 0x12a8, 0x7120, - 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, - 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7cfd, - 0x7003, 0x0002, 0x0804, 0x7cfd, 0xa883, 0x0028, 0x0010, 0xa883, - 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, - 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, - 0x080c, 0xddf2, 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, 0x6d70, 0x012e, 0x0005, - 0x080c, 0x106c, 0x0005, 0x00d6, 0x080c, 0x87a5, 0x00de, 0x0005, - 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, - 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7eb2, 0xd09c, 0x11a8, - 0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, 0x70c2, - 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, - 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, - 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7eb2, 0x000e, 0x0005, - 0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xab73, 0x05d8, 0x2900, - 0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, 0x6028, - 0xc0fd, 0x602a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, 0x9084, - 0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, 0x00ff, - 0x080c, 0x25fb, 0x1540, 0x00b6, 0x080c, 0x661e, 0x2b00, 0x00be, - 0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, 0x9084, - 0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, 0xac68, - 0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, - 0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6d70, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6d70, 0x012e, 0x080c, 0xabc9, 0x0005, 0x00d6, 0x00c6, - 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, - 0x0004, 0x1a04, 0x7ea3, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, - 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, - 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xab73, 0x1118, 0x080c, - 0xac3b, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7e81, 0x7e86, 0x7e89, - 0x7e8f, 0x2019, 0x0002, 0x080c, 0xe20e, 0x0060, 0x080c, 0xe19e, - 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe1bd, 0x0018, 0xa980, - 0x080c, 0xe19e, 0x080c, 0xabc9, 0xa887, 0x0000, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6d70, 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, 0x7eb4, 0x0006, 0x0016, - 0x2001, 0x8003, 0x0006, 0x0804, 0x0d86, 0x2001, 0x1834, 0x2004, - 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, - 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, - 0x1120, 0x080c, 0x1608, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, - 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, - 0x7f35, 0x68c0, 0x90aa, 0x0005, 0x0a04, 0x8519, 0x7d44, 0x7c40, - 0xd59c, 0x190c, 0x0d7d, 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, - 0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, 0x04f0, - 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, - 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, - 0x080c, 0xe6af, 0x080c, 0x8410, 0x7817, 0x0140, 0x00a8, 0x9584, - 0x0076, 0x1118, 0x080c, 0x846c, 0x19c8, 0xd5a4, 0x0148, 0x0046, - 0x0056, 0x080c, 0x7f85, 0x080c, 0x2115, 0x005e, 0x004e, 0x0020, - 0x080c, 0xe6af, 0x7817, 0x0140, 0x080c, 0x74d5, 0x0168, 0x2001, - 0x0111, 0x2004, 0xd08c, 0x0140, 0x6893, 0x0000, 0x2001, 0x0110, - 0x2003, 0x0008, 0x2003, 0x0000, 0x0489, 0x0005, 0x0002, 0x7f42, - 0x8232, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7817, - 0x0140, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, - 0x9484, 0x0fff, 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, - 0x0001, 0x1118, 0x080c, 0x5734, 0x0070, 0x080c, 0x7fa5, 0x0058, - 0x9286, 0x3000, 0x1118, 0x080c, 0x816f, 0x0028, 0x9286, 0x8000, - 0x1110, 0x080c, 0x8346, 0x7817, 0x0140, 0x0005, 0x2001, 0x1810, - 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, - 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b00, - 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, - 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, - 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, - 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, - 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b00, 0x002e, - 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, - 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, - 0x1904, 0x8140, 0x9186, 0x0023, 0x15c0, 0x080c, 0x83db, 0x0904, - 0x8140, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, - 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x8140, 0x7124, - 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, - 0xac68, 0x0804, 0x8140, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, - 0x1130, 0x2009, 0x0015, 0x080c, 0xac68, 0x0804, 0x8140, 0x908e, - 0x0100, 0x1904, 0x8140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009, - 0x0016, 0x080c, 0xac68, 0x0804, 0x8140, 0x9186, 0x0022, 0x1904, - 0x8140, 0x7030, 0x908e, 0x0300, 0x1580, 0x68dc, 0xd0a4, 0x0528, - 0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff, 0x697e, 0x7004, 0x6882, - 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, - 0x0016, 0x2008, 0x080c, 0x2644, 0x7932, 0x7936, 0x001e, 0x000e, - 0x00fe, 0x080c, 0x25fb, 0x695e, 0x703c, 0x00e6, 0x2071, 0x0140, - 0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee, 0x7034, 0x9005, 0x1904, - 0x8140, 0x2009, 0x0017, 0x0804, 0x810d, 0x908e, 0x0400, 0x1190, - 0x7034, 0x9005, 0x1904, 0x8140, 0x080c, 0x74d5, 0x0120, 0x2009, - 0x001d, 0x0804, 0x810d, 0x68dc, 0xc0a5, 0x68de, 0x2009, 0x0030, - 0x0804, 0x810d, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, - 0x8140, 0x2009, 0x0018, 0x0804, 0x810d, 0x908e, 0x2010, 0x1120, - 0x2009, 0x0019, 0x0804, 0x810d, 0x908e, 0x2110, 0x1120, 0x2009, - 0x001a, 0x0804, 0x810d, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, - 0x1904, 0x8140, 0x2009, 0x001b, 0x0804, 0x810d, 0x908e, 0x5000, - 0x1140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009, 0x001c, 0x0804, - 0x810d, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x810d, - 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009, - 0x0024, 0x0804, 0x810d, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, - 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x810d, - 0x080c, 0xd62a, 0x1904, 0x8140, 0x0804, 0x810b, 0x908c, 0xff00, - 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x810d, 0x908e, - 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x810d, 0x908e, 0x6104, - 0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, - 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, - 0x0046, 0x2124, 0x080c, 0x4b00, 0x004e, 0x8108, 0x0f04, 0x80c1, - 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, - 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x810d, 0x908e, - 0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x810d, 0x908e, 0x5400, - 0x1138, 0x080c, 0x84c9, 0x1904, 0x8140, 0x2009, 0x0046, 0x04a8, - 0x908e, 0x5500, 0x1148, 0x080c, 0x84f1, 0x1118, 0x2009, 0x0041, - 0x0460, 0x2009, 0x0042, 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, - 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, - 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1568, 0x080c, 0x65bd, - 0x1550, 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb884, 0x9005, 0x1168, - 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, - 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab73, 0x01a8, - 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, - 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xac68, - 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, - 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b00, 0x080c, 0xac3b, - 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, 0x91f4, 0x08a0, 0x080c, - 0x332b, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, - 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, - 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x83db, 0x0904, - 0x81ca, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, - 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0xac68, 0x0498, 0x908e, - 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, 0x0016, 0x080c, - 0xac68, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e, 0x1400, - 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, - 0x220c, 0x080c, 0x25fb, 0x11a8, 0x080c, 0x65bd, 0x1190, 0xbe12, - 0xbd16, 0x080c, 0xab73, 0x0168, 0x2b08, 0x6112, 0x080c, 0xcca8, - 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xac68, 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, - 0x822c, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x822c, - 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, - 0x2019, 0x1837, 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, 0x8201, 0x82ff, 0x1118, 0x9085, - 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, - 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, - 0x0002, 0x8249, 0x8249, 0x8249, 0x83ed, 0x8249, 0x824c, 0x8271, - 0x82fa, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249, - 0x8249, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, - 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc, 0x02a8, - 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, - 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, - 0x610a, 0x2009, 0x0046, 0x080c, 0xac68, 0x7817, 0x0140, 0x00be, - 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x82d6, 0x7110, - 0xd1bc, 0x1904, 0x82d6, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, - 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080, 0x336d, - 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, - 0x82d6, 0x9182, 0x0801, 0x1a04, 0x82d6, 0x9190, 0x1000, 0x2204, - 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, - 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, 0xab73, 0x0598, - 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, 0x6023, 0x0006, - 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xd88c, 0x00f8, 0x080c, - 0x6a5b, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, 0x81ce, 0x11b0, - 0x0880, 0x080c, 0xab73, 0x2b08, 0x0188, 0x6112, 0x6023, 0x0004, - 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, 0x0010, - 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x7817, 0x0140, - 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, - 0x2011, 0x8049, 0x080c, 0x4b00, 0x080c, 0xac3b, 0x0d78, 0x2b08, - 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x6017, - 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, - 0x91ed, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020, 0x2060, - 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868, 0x9c02, - 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008, 0x9084, - 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, 0x700c, 0xb914, - 0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8, 0x2001, - 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082, 0x000c, - 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631, 0x1de0, - 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c, 0xac68, - 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, 0x0128, - 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x332b, - 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, 0x1130, - 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005, 0x835d, - 0x835e, 0x835d, 0x835d, 0x83bd, 0x83cc, 0x0005, 0x00b6, 0x7110, - 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x83bb, 0x700c, 0x7108, - 0x080c, 0x25fb, 0x1904, 0x83bb, 0x080c, 0x65bd, 0x1904, 0x83bb, - 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x6a5b, 0x0118, - 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x83db, 0x00ce, 0x05d8, - 0x080c, 0xab73, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcca8, 0x6023, - 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xac68, 0x0458, - 0x080c, 0x6a5b, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6a63, - 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xab73, 0x2b08, 0x01d8, - 0x6112, 0x080c, 0xcca8, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, - 0x0088, 0x080c, 0xac68, 0x0078, 0x080c, 0xab73, 0x2b08, 0x0158, - 0x6112, 0x080c, 0xcca8, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, - 0x0001, 0x080c, 0xac68, 0x00be, 0x0005, 0x7110, 0xd1bc, 0x0158, - 0x00d1, 0x0148, 0x080c, 0x833c, 0x1130, 0x7124, 0x610a, 0x2009, - 0x0089, 0x080c, 0xac68, 0x0005, 0x7110, 0xd1bc, 0x0158, 0x0059, - 0x0148, 0x080c, 0x833c, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, - 0x080c, 0xac68, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003, 0x1158, - 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1218, - 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, - 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82, 0x1ddc, - 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, 0x6110, - 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106, 0x1120, - 0x2009, 0x0051, 0x080c, 0xac68, 0x7817, 0x0140, 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, - 0x05c0, 0x080c, 0xab73, 0x05a8, 0x0066, 0x00c6, 0x0046, 0x2011, - 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1590, 0x080c, - 0x65bd, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, - 0x080c, 0xcca8, 0x080c, 0x103a, 0x0500, 0x2900, 0x6062, 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, - 0x91f4, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xabc9, 0x006e, - 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, - 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x84c3, 0x9186, - 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904, 0x84c5, - 0x7030, 0x908e, 0x0400, 0x0904, 0x84c5, 0x908e, 0x6000, 0x05e8, - 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, 0x1837, - 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6a19, 0x0558, - 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, - 0x6880, 0x69b0, 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, 0x83db, 0x0128, 0x6004, 0x9086, - 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, - 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427, - 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805, - 0x2011, 0x027a, 0x080c, 0xbb8a, 0x1178, 0xd48c, 0x0148, 0x20a9, - 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbb8a, 0x1120, - 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e, - 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427, - 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805, - 0x2011, 0x0272, 0x080c, 0xbb8a, 0x1178, 0xd48c, 0x0148, 0x20a9, - 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbb8a, 0x1120, - 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e, - 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, - 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084, 0x1130, - 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, - 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, - 0x2071, 0x1a03, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, - 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026, 0x702b, - 0x9e30, 0x7032, 0x7037, 0x9ead, 0x703f, 0xffff, 0x7042, 0x7047, - 0x556a, 0x704a, 0x705b, 0x86e0, 0x080c, 0x1053, 0x090c, 0x0d7d, - 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, - 0x0005, 0x2071, 0x1a03, 0x1d04, 0x85fc, 0x2091, 0x6000, 0x700c, - 0x8001, 0x700e, 0x1590, 0x2001, 0x013c, 0x2004, 0x9005, 0x190c, - 0x878a, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, - 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, - 0x0d7d, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, - 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118, 0x080c, - 0x874e, 0x0010, 0x080c, 0x8725, 0x7040, 0x900d, 0x0148, 0x8109, - 0x7142, 0x1130, 0x7044, 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, 0x9f49, 0x0010, 0x7034, 0x080f, 0x703c, - 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, - 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, - 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, - 0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, - 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, - 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, - 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8624, 0x8625, - 0x864f, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x9005, 0x1120, 0x711a, - 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, - 0x1a03, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, - 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1a03, 0xb888, 0x9102, - 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031, 0x0010, - 0x7110, 0x080c, 0x661e, 0x11a8, 0xb888, 0x8001, 0x0290, 0xb88a, - 0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005, 0x0138, - 0x0026, 0xba3c, 0x0016, 0x080c, 0x6749, 0x001e, 0x002e, 0x006e, - 0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128, 0x7112, - 0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x2031, - 0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048, 0x9005, - 0x0128, 0x8001, 0x604a, 0x1110, 0x080c, 0xcb29, 0x6018, 0x9005, - 0x0904, 0x86a7, 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4, 0x1904, - 0x86ba, 0x781b, 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120, 0x781b, - 0x2000, 0x0804, 0x86ba, 0x8001, 0x601a, 0x0106, 0x781b, 0x2000, - 0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540, 0x6120, - 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, 0x9186, 0x0009, - 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xc814, 0x01b0, 0x6014, - 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, - 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, - 0x9108, 0x611a, 0x080c, 0xcf5a, 0x0110, 0x080c, 0xc512, 0x012e, - 0x9c88, 0x001c, 0x7116, 0x2001, 0x181a, 0x2004, 0x9102, 0x1228, - 0x8631, 0x0138, 0x2160, 0x0804, 0x8653, 0x7017, 0x1ddc, 0x7007, - 0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a03, 0x7027, - 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0c, 0x2003, - 0x0000, 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7132, 0x702f, 0x0009, - 0x00ee, 0x0005, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0005, 0x00e6, - 0x2071, 0x1a03, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, - 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, 0x1a11, 0x2044, - 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096, - 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x1124, 0x002e, 0x008e, - 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x0156, 0x080c, 0x8561, 0x015e, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, - 0x00e6, 0x2071, 0x1a03, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, - 0x0005, 0x00e6, 0x0006, 0x2071, 0x1a03, 0x7074, 0x9206, 0x1110, - 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69ec, - 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874, 0x9202, - 0x0288, 0x8117, 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007, 0x01a0, - 0x8109, 0x9184, 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, 0x9084, - 0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184, 0xff3e, - 0x9205, 0x68ee, 0x080c, 0x0f05, 0x002e, 0x0005, 0x69e8, 0x9184, - 0x003f, 0x05b8, 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54, 0x6874, - 0x9202, 0x0220, 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc, 0x1148, - 0xc1bd, 0x2110, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, 0x00ee, - 0x0400, 0x69ea, 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007, 0x0128, - 0x8001, 0x8007, 0x9085, 0x0007, 0x0050, 0x2010, 0x8004, 0x8004, - 0x8004, 0x9084, 0x0007, 0x9205, 0x8007, 0x9085, 0x0028, 0x9086, - 0x0040, 0x2010, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, 0x00ee, - 0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, - 0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, - 0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, - 0x00c6, 0x2061, 0x1a6f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, - 0x8003, 0x8003, 0x9080, 0x1a6f, 0x2060, 0x0005, 0xa884, 0x908a, - 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6f, 0x6014, - 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, - 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, - 0x00c0, 0x918e, 0x00c0, 0x0904, 0x8865, 0xd0b4, 0x1168, 0xd0bc, - 0x1904, 0x883e, 0x2009, 0x0006, 0x080c, 0x8892, 0x0005, 0x900e, - 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, 0x2023, - 0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, 0x6100, - 0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184, 0x11d8, - 0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c, 0x1c03, - 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, 0x0380, - 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, 0x781b, - 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, - 0x1904, 0x888c, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, - 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138, 0x87ff, - 0x1120, 0x2009, 0x0043, 0x0804, 0xac68, 0x0005, 0x87ff, 0x1de8, - 0x2009, 0x0042, 0x0804, 0xac68, 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, 0x888c, 0x908c, - 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, - 0x1731, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, - 0xac68, 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, 0xac68, 0x0005, - 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xac68, - 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, - 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, - 0x2009, 0x0001, 0x0096, 0x080c, 0xc814, 0x0518, 0x6014, 0x2048, - 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, - 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6f, 0x6200, - 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, - 0x6ba5, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x87ae, - 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6f, 0x6000, - 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, - 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, - 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003, 0x0006, - 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c, 0x1053, - 0x090c, 0x0d7d, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab, 0xdcb0, - 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005, 0x0096, - 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e, 0x6b30, - 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, 0x6824, - 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, 0x0148, - 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, 0x1208, - 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084, 0x7007, - 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104, 0x9082, - 0x0007, 0x2009, 0x1b4e, 0x200a, 0x000e, 0xc095, 0x7012, 0x2008, - 0x2001, 0x003b, 0x080c, 0x1679, 0x9006, 0x2071, 0x193c, 0x7002, - 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126, 0x0156, - 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, 0x910a, - 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, 0x1f04, - 0x8945, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, 0x0007, - 0x00c6, 0x080c, 0xab73, 0x6023, 0x0009, 0x6003, 0x0004, 0x601f, - 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x8acb, 0x012e, - 0x1f04, 0x8951, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, 0x0005, - 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, 0x0056, - 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, 0x1128, - 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, 0x2029, - 0x000a, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900, 0x6016, 0x2058, - 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, 0xa887, - 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, 0xae8a, - 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, 0x103a, - 0x090c, 0x0d7d, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, 0x2058, - 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, 0x00be, - 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004, 0x004b, - 0x700c, 0x0002, 0x89bd, 0x89b6, 0x89b6, 0x0005, 0x89c7, 0x8a28, - 0x8a28, 0x8a28, 0x8a29, 0x8a3a, 0x8a3a, 0x700c, 0x0cba, 0x0126, - 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0, 0x79a0, - 0x9106, 0x1904, 0x8a1b, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x0130, - 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, 0x7018, - 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8a69, 0x0490, - 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, 0x000a, - 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100, 0x9202, - 0x0e48, 0x080c, 0x8bb5, 0x2200, 0x9102, 0x0208, 0x2208, 0x0096, - 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8cbe, 0x2100, - 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, 0x2009, - 0x1a21, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, 0x080c, - 0x1143, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x0130, - 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, 0x0005, - 0x0005, 0x700c, 0x0002, 0x8a2e, 0x8a31, 0x8a30, 0x080c, 0x89c5, - 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, 0x009e, - 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, 0x9100, - 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, 0x9006, - 0x0068, 0x0006, 0x080c, 0x8cbe, 0x2100, 0xaa8c, 0x9210, 0xaa8e, - 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, 0x2f08, - 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071, 0x1923, - 0x700c, 0x0002, 0x8a67, 0x8a67, 0x8a65, 0x700f, 0x0001, 0x00ee, - 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, 0x2078, - 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8ad4, - 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8b1b, 0x00ee, - 0x0178, 0x0096, 0x080c, 0x1053, 0x2900, 0x009e, 0x0148, 0xa8aa, - 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e, 0x08c8, - 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, 0x2650, - 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, 0x9d88, - 0x1e55, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8c43, 0x080c, - 0x1e2b, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, 0xa88a, - 0x080c, 0x1731, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, 0x2091, - 0x8000, 0x080c, 0x8b2a, 0x012e, 0x008e, 0x00ce, 0x00de, 0x0005, - 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, 0x1946, - 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030, 0x600e, - 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, 0x9b80, - 0x8d9d, 0x2005, 0x906d, 0x090c, 0x0d7d, 0x9b80, 0x8d95, 0x2005, - 0x9065, 0x090c, 0x0d7d, 0x6114, 0x2600, 0x9102, 0x0248, 0x6828, - 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, 0x0005, - 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, 0x6856, - 0x2011, 0x8026, 0x080c, 0x4b00, 0x684c, 0x0096, 0x904d, 0x090c, - 0x0d7d, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, 0x0c20, - 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, 0x080c, - 0x4b00, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d7d, 0xa800, 0x8000, - 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, 0x7104, - 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, 0x0008, - 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0d7d, 0x781c, - 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0d7d, 0x2069, 0x193c, - 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108, 0x9182, - 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003, 0x0000, - 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, 0xa8a8, - 0x0096, 0x2048, 0x9005, 0x190c, 0x106c, 0x009e, 0xa8ab, 0x0000, - 0x080c, 0x0fec, 0x080c, 0xabc9, 0x00ce, 0x009e, 0x0005, 0x6020, - 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, 0x0005, - 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, 0x6010, - 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8ed0, 0x00be, 0x6013, - 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, 0x2009, - 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7110, - 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112, 0x2001, - 0x003b, 0x080c, 0x1679, 0x00ee, 0x0005, 0x0096, 0x00d6, 0x9006, - 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026, - 0x702f, 0x0000, 0x080c, 0x8d1d, 0x0170, 0x080c, 0x8d52, 0x0158, - 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x000a, - 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, 0x0086, - 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202, 0x1618, - 0x080c, 0x8d52, 0x090c, 0x0d7d, 0x7018, 0x9005, 0x1160, 0x2900, - 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, 0xa802, - 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, 0x701a, - 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, 0x000a, - 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, 0x009e, - 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e, 0x831e, - 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, 0x7104, - 0x080c, 0x8cbe, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, 0x2021, - 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, 0x20a8, - 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8cc7, 0x2130, - 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, 0x7004, - 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, 0xa800, - 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8bb5, 0x002e, - 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106, - 0x2500, 0x9212, 0x1904, 0x8bf4, 0x012e, 0x00ee, 0x014e, 0x013e, - 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x9580, 0x8d95, 0x2005, 0x9075, 0x090c, 0x0d7d, 0x080c, - 0x8c99, 0x012e, 0x9580, 0x8d91, 0x2005, 0x9075, 0x090c, 0x0d7d, - 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, 0x831e, - 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, 0xa860, - 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, 0x4003, - 0x2e0c, 0x2d00, 0x0002, 0x8c83, 0x8c83, 0x8c85, 0x8c83, 0x8c85, - 0x8c83, 0x8c83, 0x8c83, 0x8c83, 0x8c83, 0x8c8b, 0x8c83, 0x8c8b, - 0x8c83, 0x8c83, 0x8c83, 0x080c, 0x0d7d, 0x4104, 0x20a9, 0x0002, - 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, 0x4003, - 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, 0x001e, - 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, 0x00f1, - 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, 0x1198, - 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, 0x8d61, - 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, 0x7012, - 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, 0x810b, - 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, 0x0006, - 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, 0x900e, - 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, 0x900e, - 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019, 0x0001, - 0x2031, 0x8d07, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, 0x0cd0, - 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084, 0x2300, - 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67, 0x8420, - 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002, 0x0967, - 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0, 0x6c1a, - 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128, 0x6810, - 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8, 0x2031, - 0x8d1a, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046, 0x0126, - 0x2091, 0x8000, 0x2b00, 0x9080, 0x8d99, 0x2005, 0x9005, 0x090c, - 0x0d7d, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1053, 0x01d0, 0x2900, - 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1053, 0x0188, - 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, 0x000a, - 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, 0x009e, - 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, 0x106c, - 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, 0x9005, - 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, - 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, 0x7026, - 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, 0x0138, - 0x2048, 0xa800, 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, 0x009e, - 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, 0x0006, - 0x080c, 0x106c, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, 0x7006, - 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x009e, - 0x0005, 0x1a6d, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000, 0x0000, - 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, 0x0000, - 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, 0x2071, - 0x1877, 0x080c, 0x8ebb, 0xa067, 0x0023, 0x6010, 0x905d, 0x0904, - 0x8e90, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, 0x2001, - 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, 0x9005, - 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, 0xa068, - 0x908a, 0x0019, 0x1a0c, 0x0d7d, 0x2020, 0x2050, 0x2940, 0xa864, - 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1e55, 0x2c65, 0x9786, - 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x9082, - 0x001b, 0x0002, 0x8dfd, 0x8dfd, 0x8dff, 0x8dfd, 0x8dfd, 0x8dfd, - 0x8e01, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e03, 0x8dfd, 0x8dfd, 0x8dfd, - 0x8e05, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e07, 0x8dfd, 0x8dfd, 0x8dfd, - 0x8e09, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e0b, 0x080c, 0x0d7d, 0xa180, - 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, 0xa1c0, - 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, 0x1a0c, - 0x0d7d, 0x9082, 0x001b, 0x0002, 0x8e2f, 0x8e2d, 0x8e2d, 0x8e2d, - 0x8e2d, 0x8e2d, 0x8e31, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, - 0x8e33, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e35, 0x8e2d, - 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e37, 0x080c, 0x0d7d, 0xa180, - 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, 0xa1e0, - 0x2600, 0x0002, 0x8e53, 0x8e55, 0x8e57, 0x8e59, 0x8e5b, 0x8e5d, - 0x8e5f, 0x8e61, 0x8e63, 0x8e65, 0x8e67, 0x8e69, 0x8e6b, 0x8e6d, - 0x8e6f, 0x8e71, 0x8e73, 0x8e75, 0x8e77, 0x8e79, 0x8e7b, 0x8e7d, - 0x8e7f, 0x8e81, 0x8e83, 0x080c, 0x0d7d, 0xb9e2, 0x0468, 0xb9de, - 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, 0xb9ce, - 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, 0xb9be, - 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, 0xb9ae, - 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, 0xb99e, - 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, 0xb98e, - 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120, 0x080c, - 0x1e2b, 0x0804, 0x8dd7, 0x00ae, 0x00be, 0x00ce, 0x00ee, 0x0005, - 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, 0x0804, - 0x8db9, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, 0x9005, - 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001, 0x1800, - 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, 0x2021, - 0x0004, 0x2011, 0x8014, 0x080c, 0x4b00, 0x004e, 0x003e, 0x00be, - 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, 0xa936, - 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130, 0x7010, - 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a, 0x0005, - 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, 0x7818, - 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, 0xd094, - 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000, 0x2c08, - 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140, 0x2d00, - 0x2078, 0x680c, 0x9005, 0x090c, 0x0d7d, 0x2068, 0x0cb0, 0x6b0c, - 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200, 0x003e, - 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0036, - 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071, 0x0300, - 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8f10, 0x701b, - 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac, 0x9005, - 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b, 0x0000, - 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b, 0x0000, - 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0d7d, 0x080c, 0x106c, - 0x080c, 0x8acb, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200, 0x015e, - 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, - 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x25fb, 0x015e, 0x11b0, - 0x080c, 0x65bd, 0x190c, 0x0d7d, 0x000e, 0x001e, 0xb912, 0xb816, - 0x080c, 0xab73, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, 0x2009, - 0x0001, 0x080c, 0xac68, 0x00be, 0x00ce, 0x0005, 0x000e, 0x001e, - 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, - 0x006e, 0x0005, 0x8f82, 0x8f82, 0x8f82, 0x8f84, 0x8fcd, 0x8f82, - 0x8f82, 0x8f82, 0x9030, 0x8f82, 0x9068, 0x8f82, 0x8f82, 0x8f82, - 0x8f82, 0x8f82, 0x080c, 0x0d7d, 0x9182, 0x0040, 0x0002, 0x8f97, - 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, - 0x8f99, 0x8faa, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8fbb, 0x080c, - 0x0d7d, 0x0096, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, - 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6b70, 0x080c, 0xabc9, - 0x009e, 0x0005, 0x080c, 0x960a, 0x00d6, 0x6114, 0x080c, 0xc814, - 0x0130, 0x0096, 0x6114, 0x2148, 0x080c, 0x6d70, 0x009e, 0x00de, - 0x080c, 0xabc9, 0x0005, 0x080c, 0x960a, 0x080c, 0x31e4, 0x6114, - 0x0096, 0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0029, 0x080c, - 0x6d70, 0x009e, 0x080c, 0xabc9, 0x0005, 0x601b, 0x0000, 0x9182, - 0x0040, 0x0096, 0x0002, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, - 0x8fe8, 0x8fe8, 0x8fe8, 0x8fea, 0x8fe8, 0x8fe8, 0x8fe8, 0x902c, - 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8ff0, 0x8fe8, - 0x080c, 0x0d7d, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, 0x05e0, - 0x00e6, 0x6114, 0x2148, 0x080c, 0x8da1, 0x0096, 0xa8a8, 0x2048, - 0x080c, 0x6b08, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, 0x0128, - 0x00b6, 0x2058, 0x080c, 0x8ed0, 0x00be, 0xae88, 0x00b6, 0x2059, - 0x0000, 0x080c, 0x8ad4, 0x00be, 0x01e0, 0x2071, 0x193c, 0x080c, - 0x8b1b, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946, 0x2004, - 0x9005, 0x1178, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e, 0x0148, - 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8a92, 0x00fe, 0x00ee, 0x009e, - 0x0005, 0x080c, 0x8acb, 0x0cd0, 0x080c, 0x90e4, 0x009e, 0x0005, - 0x9182, 0x0040, 0x0096, 0x0002, 0x9044, 0x9044, 0x9044, 0x9046, - 0x9044, 0x9044, 0x9044, 0x9066, 0x9044, 0x9044, 0x9044, 0x9044, - 0x9044, 0x9044, 0x9044, 0x9044, 0x080c, 0x0d7d, 0x6003, 0x0003, - 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0xa847, - 0x0000, 0xa84b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, - 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x080c, 0x1bba, - 0x2009, 0x8030, 0x080c, 0x9234, 0x009e, 0x0005, 0x080c, 0x0d7d, - 0x080c, 0x960a, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, - 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d70, 0x080c, 0xabc9, - 0x009e, 0x0005, 0x080c, 0xa872, 0x6144, 0xd1fc, 0x0120, 0xd1ac, - 0x1110, 0x6003, 0x0003, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, - 0x0096, 0x0023, 0x009e, 0x080c, 0xa88e, 0x0005, 0x909e, 0x909e, - 0x909e, 0x90a0, 0x90b1, 0x909e, 0x909e, 0x909e, 0x909e, 0x909e, - 0x909e, 0x909e, 0x909e, 0x909e, 0x909e, 0x909e, 0x080c, 0x0d7d, - 0x080c, 0xaa06, 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, - 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d70, 0x080c, 0xabc9, - 0x0005, 0x0491, 0x0005, 0x080c, 0xa872, 0x6000, 0x6144, 0xd1fc, - 0x0130, 0xd1ac, 0x1120, 0x6003, 0x0003, 0x2009, 0x0003, 0x908a, - 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x0033, 0x009e, 0x0106, 0x080c, - 0xa88e, 0x010e, 0x0005, 0x90db, 0x90db, 0x90db, 0x90dd, 0x90e4, - 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, - 0x90db, 0x90db, 0x90db, 0x080c, 0x0d7d, 0x0036, 0x00e6, 0x080c, - 0xaa06, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000, - 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, - 0x8ed0, 0x00be, 0x2071, 0x193c, 0x080c, 0x8b1b, 0x0160, 0x2001, - 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x8a92, - 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, - 0x080c, 0x106c, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8acb, 0x0c80, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006, - 0x8004, 0x8086, 0x818e, 0x1208, 0x9200, 0x1f04, 0x9129, 0x8086, - 0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, - 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a, 0x12b8, - 0x8213, 0x818d, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9140, 0x0028, - 0x911a, 0x2308, 0x8210, 0x1f04, 0x9140, 0x0006, 0x3200, 0x9084, - 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, - 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, - 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, 0x6803, 0x0005, 0x0156, - 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa66c, - 0x04a9, 0x080c, 0xa657, 0x0491, 0x080c, 0xa65a, 0x0479, 0x080c, - 0xa65d, 0x0461, 0x080c, 0xa660, 0x0449, 0x080c, 0xa663, 0x0431, - 0x080c, 0xa666, 0x0419, 0x080c, 0xa669, 0x0401, 0x01de, 0x014e, - 0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9, 0x7807, - 0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004, 0x2d04, - 0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100, 0x6828, - 0x9084, 0xfffc, 0x682a, 0x00fe, 0x00de, 0x0005, 0x20a9, 0x0020, - 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x7803, - 0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, - 0x782b, 0x1aef, 0x781f, 0xff00, 0x781b, 0xff00, 0x2061, 0x1ae4, - 0x602f, 0x19e7, 0x6033, 0x1800, 0x6037, 0x1a03, 0x603b, 0x1e55, - 0x603f, 0x1e65, 0x6042, 0x6047, 0x1aba, 0x00ce, 0x0005, 0x2001, - 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x01b0, 0x00c6, - 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, 0x602c, 0x8000, - 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x611e, - 0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146, 0x2c08, 0x2001, - 0x0012, 0x080c, 0xa863, 0x0005, 0x0016, 0x2009, 0x8020, 0x6146, - 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, - 0x1128, 0x2001, 0x0019, 0x080c, 0xa863, 0x0088, 0x00c6, 0x2061, - 0x19e7, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128, 0x9080, - 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce, 0x001e, - 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, - 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, - 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146, 0x00ce, - 0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f, 0x0000, 0x2c08, - 0x2001, 0x0013, 0x080c, 0xa863, 0x0005, 0x6044, 0xd0dc, 0x0128, - 0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, - 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7, 0x7648, - 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x92bf, 0x6010, - 0x2058, 0xb8a0, 0x9206, 0x1904, 0x92ba, 0x87ff, 0x0120, 0x605c, - 0x9106, 0x1904, 0x92ba, 0x704c, 0x9c06, 0x1178, 0x0036, 0x2019, - 0x0001, 0x080c, 0xa0f4, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, - 0x7052, 0x706e, 0x003e, 0x2029, 0x0001, 0x080c, 0x923d, 0x7048, - 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x080c, 0xc814, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, - 0x0003, 0x1560, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, - 0x0036, 0x0076, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c, 0x6d70, - 0x007e, 0x003e, 0x001e, 0x080c, 0xca03, 0x080c, 0xac04, 0x00ce, - 0x0804, 0x925c, 0x2c78, 0x600c, 0x2060, 0x0804, 0x925c, 0x012e, - 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, - 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, - 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xe5f6, 0x080c, - 0xe241, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086, 0x0009, - 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076, 0x080c, 0x6d70, - 0x080c, 0xabc9, 0x007e, 0x003e, 0x001e, 0x0848, 0x6020, 0x9086, - 0x000a, 0x0904, 0x92a4, 0x0804, 0x92a2, 0x0006, 0x0066, 0x0096, - 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, - 0x19e7, 0x7848, 0x9065, 0x0904, 0x9354, 0x600c, 0x0006, 0x600f, - 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001, 0x080c, - 0xa0f4, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52, 0x7b6e, - 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000, 0x0006, - 0x00e6, 0x2f70, 0x080c, 0x923d, 0x00ee, 0x080c, 0xc814, 0x0520, - 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08, 0x918e, - 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001, 0x1988, - 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, - 0x080c, 0x6d64, 0x080c, 0xca03, 0x6044, 0xc0fc, 0x6046, 0x080c, - 0xac04, 0x000e, 0x0804, 0x9302, 0x7e4a, 0x7e46, 0x012e, 0x00fe, - 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, - 0x0006, 0x1118, 0x080c, 0xe241, 0x0c38, 0x6020, 0x9086, 0x0009, - 0x1130, 0xab7a, 0x080c, 0x6d70, 0x080c, 0xabc9, 0x0c10, 0x6020, - 0x9086, 0x000a, 0x0990, 0x0878, 0x0016, 0x0026, 0x0086, 0x9046, - 0x00a9, 0x080c, 0x9465, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, - 0x0126, 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x94ae, 0x080c, - 0x9542, 0x080c, 0x67ab, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, - 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, - 0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, 0x8cff, - 0x0904, 0x942a, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x9425, - 0x88ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x9425, 0x7030, 0x9c06, - 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x86c5, - 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314, 0x7033, 0x0000, - 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, - 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008, - 0xc0ad, 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x9425, 0x7020, - 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xc814, - 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xca29, 0x1118, - 0x080c, 0xb591, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, - 0x0016, 0x0036, 0x0086, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c, - 0x6d70, 0x008e, 0x003e, 0x001e, 0x080c, 0xca03, 0x080c, 0xac04, - 0x080c, 0xa1ea, 0x00ce, 0x0804, 0x939f, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x939f, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, - 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xe5f6, 0x080c, 0xe241, - 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xb591, 0x6020, 0x9086, - 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, - 0x940b, 0x9086, 0x008b, 0x0904, 0x940b, 0x0840, 0x6020, 0x9086, - 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, - 0x9086, 0x008b, 0x09b0, 0x0804, 0x941e, 0x0006, 0x00f6, 0x00e6, - 0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000, - 0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19e7, 0x9036, 0x7828, - 0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff, - 0x080c, 0xaa51, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9f7e, 0x6014, - 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, - 0x0086, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c, 0x6d70, 0x008e, - 0x003e, 0x001e, 0x080c, 0xac04, 0x00ce, 0x08d8, 0x2c30, 0x600c, - 0x2060, 0x08b8, 0x080c, 0x67c8, 0x012e, 0x001e, 0x006e, 0x00ce, - 0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006, - 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x9515, - 0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830, - 0x9c06, 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, - 0x86c5, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314, 0x7833, + 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, + 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, + 0x9186, 0x0003, 0x1968, 0x080c, 0x7920, 0x782c, 0xd09c, 0x090c, + 0x7de4, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, + 0x080c, 0x7956, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x7956, 0x7956, + 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7978, 0x7956, + 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, + 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, + 0x7956, 0x7956, 0x7962, 0x7956, 0x7b4b, 0x7956, 0x7956, 0x7956, + 0x7978, 0x7956, 0x7962, 0x7b8c, 0x7bcd, 0x7c14, 0x7c28, 0x7956, + 0x7956, 0x7978, 0x7962, 0x798c, 0x7956, 0x7a04, 0x7cd3, 0x7cee, + 0x7956, 0x7978, 0x7956, 0x798c, 0x7956, 0x7956, 0x79fa, 0x7cee, + 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, + 0x7956, 0x79a0, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, + 0x7956, 0x7956, 0x7956, 0x7e6a, 0x7956, 0x7e14, 0x7956, 0x7e14, + 0x7956, 0x79b5, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, + 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, + 0x7e0d, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, + 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, + 0x00e9, 0x080c, 0x7de4, 0x0005, 0x7956, 0x7962, 0x7b37, 0x7956, + 0x7962, 0x7956, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7962, + 0x7962, 0x7962, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7956, + 0x7956, 0x7962, 0x7956, 0x7956, 0x7956, 0x7962, 0x00e6, 0x2071, + 0x18fa, 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, 0x6d80, 0x012e, 0x0005, + 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, + 0x0001, 0x0804, 0x7ad9, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, + 0x701a, 0x704b, 0x7ad9, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, + 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7af4, 0x7007, + 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7af4, 0x0005, + 0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x795e, 0x8001, 0x1120, + 0x7007, 0x0001, 0x0804, 0x7b10, 0x7007, 0x0003, 0x7012, 0x2900, + 0x7016, 0x701a, 0x704b, 0x7b10, 0x0005, 0xa864, 0x8007, 0x9084, + 0x00ff, 0x9086, 0x0001, 0x1904, 0x795e, 0x7007, 0x0001, 0x2009, + 0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a, + 0xa883, 0x0000, 0x080c, 0x62b9, 0x1108, 0x0005, 0x0126, 0x2091, + 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x6d80, 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, 0x7d05, 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, 0x7966, 0xaab4, 0x928a, + 0x0002, 0x1a04, 0x7966, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, + 0x0118, 0x2001, 0x7a97, 0x0018, 0x9280, 0x7a8d, 0x2005, 0x7056, + 0x7010, 0x9015, 0x0904, 0x7a78, 0x080c, 0x1053, 0x1118, 0x7007, + 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, + 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, + 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, + 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, + 0x080c, 0x1124, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, + 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x106c, + 0x7014, 0x2048, 0x0804, 0x7966, 0x7020, 0x2048, 0x7018, 0xa802, + 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7a30, + 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, + 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x001e, 0x0904, 0x7d05, 0x0804, 0x7ad9, 0x7a8f, 0x7a93, 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, 0x1834, 0x210c, 0x81ff, 0x1178, 0x080c, 0x60bb, + 0x1108, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c, + 0xcb36, 0x080c, 0x6d80, 0x012e, 0x0ca0, 0x080c, 0xcf4b, 0x1d70, + 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff, + 0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000, 0x080c, 0x6149, + 0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, + 0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90, + 0x2009, 0x1834, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, + 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x621b, 0x1138, + 0x0005, 0x9006, 0xa87a, 0x080c, 0x6196, 0x1108, 0x0005, 0x0126, + 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6d80, 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, 0x6625, 0x11b8, 0x0066, 0xae80, + 0x080c, 0x6735, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, + 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6625, 0x1110, 0x080c, + 0x6904, 0x8108, 0x1f04, 0x7b74, 0x00ce, 0xa87c, 0xd084, 0x1120, + 0x080c, 0x106c, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6d80, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, + 0x0001, 0x080c, 0x6a67, 0x0580, 0x2061, 0x1a6f, 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, 0x7dce, 0x012e, 0x0804, 0x7dc8, 0x012e, + 0x0804, 0x7dc2, 0x012e, 0x0804, 0x7dc5, 0x0126, 0x2091, 0x8000, + 0x7007, 0x0001, 0x080c, 0x6a67, 0x05e0, 0x2061, 0x1a6f, 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, 0x7dce, 0x012e, 0x0804, + 0x7dcb, 0x012e, 0x0804, 0x7dc8, 0x0126, 0x2091, 0x8000, 0x7007, + 0x0001, 0x2061, 0x1a6f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, + 0x0220, 0x630a, 0x012e, 0x0804, 0x7ddc, 0x012e, 0x0804, 0x7dcb, + 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, + 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a6f, 0x6000, 0x9084, 0xfcff, + 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, + 0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xac28, + 0x0068, 0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110, + 0xa980, 0x6162, 0x2009, 0x0041, 0x080c, 0xac8c, 0xa988, 0x918c, + 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, + 0x080c, 0x88ec, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a6f, + 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, + 0x012e, 0x00be, 0x0804, 0x7dce, 0x00ce, 0x012e, 0x00be, 0x0804, + 0x7dc8, 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, 0x6625, 0x1968, 0xb800, 0xc0e4, + 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, + 0x1986, 0x2004, 0x601a, 0x0804, 0x7c63, 0xa88c, 0x9065, 0x0960, + 0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150, + 0x080c, 0xac28, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xac28, 0x00ee, + 0x0804, 0x7c63, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, + 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, + 0xa8a8, 0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, + 0x00ee, 0x0804, 0x7c63, 0x2061, 0x1a6f, 0x6000, 0xd084, 0x0190, + 0xd08c, 0x1904, 0x7ddc, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, + 0x0220, 0x6206, 0x012e, 0x0804, 0x7ddc, 0x012e, 0xa883, 0x0016, + 0x0804, 0x7dd5, 0xa883, 0x0007, 0x0804, 0x7dd5, 0xa864, 0x8007, + 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, + 0x0005, 0x080c, 0x795e, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, + 0x7016, 0x701a, 0x704b, 0x7d05, 0x0005, 0x00b6, 0x00e6, 0x0126, + 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904, + 0x7d87, 0x6130, 0xd194, 0x1904, 0x7db1, 0xa878, 0x2070, 0x9e82, + 0x1ddc, 0x0a04, 0x7d7b, 0x6068, 0x9e02, 0x1a04, 0x7d7b, 0x7120, + 0x9186, 0x0006, 0x1904, 0x7d6d, 0x7010, 0x905d, 0x0904, 0x7d87, + 0xb800, 0xd0e4, 0x1904, 0x7dab, 0x2061, 0x1a6f, 0x6100, 0x9184, + 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7db4, + 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, + 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x080c, 0x56da, 0xd09c, + 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x87df, 0x012e, + 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, + 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x012e, 0x00ee, 0x00be, + 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7dd5, + 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6625, + 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, + 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, + 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, + 0x56de, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0, + 0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, + 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, + 0x9086, 0x0007, 0x1904, 0x7d11, 0x7003, 0x0002, 0x0804, 0x7d11, + 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, + 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, + 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xde1b, 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, 0x6d80, 0x012e, 0x0005, 0x080c, 0x106c, 0x0005, 0x00d6, + 0x080c, 0x87d6, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, + 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, + 0x190c, 0x7ec6, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea, + 0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e, + 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, + 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, + 0x190c, 0x7ec6, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8, + 0x080c, 0xab97, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff, + 0x9086, 0x0035, 0x1138, 0x6028, 0xc0fd, 0x602a, 0x2001, 0x196b, + 0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00, + 0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x25fb, 0x1540, 0x00b6, + 0x080c, 0x6625, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001, + 0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110, + 0x2009, 0x0041, 0x080c, 0xac8c, 0x0005, 0xa87b, 0x0101, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b, 0x002c, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b, + 0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x080c, + 0xabed, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, + 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7eb7, 0xa97c, + 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, + 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, + 0x080c, 0xab97, 0x1118, 0x080c, 0xac5f, 0x05a8, 0x6212, 0xa874, + 0x0002, 0x7e95, 0x7e9a, 0x7e9d, 0x7ea3, 0x2019, 0x0002, 0x080c, + 0xe239, 0x0060, 0x080c, 0xe1c9, 0x0048, 0x2019, 0x0002, 0xa980, + 0x080c, 0xe1e8, 0x0018, 0xa980, 0x080c, 0xe1c9, 0x080c, 0xabed, + 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 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, 0x7ec8, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, + 0x0d86, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, + 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, + 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1608, 0x00fe, + 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, + 0x0005, 0x781c, 0xd08c, 0x0904, 0x7f49, 0x68c0, 0x90aa, 0x0005, + 0x0a04, 0x854a, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d7d, 0x9584, + 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258, + 0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086, + 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, + 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe6da, 0x080c, 0x8441, + 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x849d, + 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7f99, 0x080c, + 0x2115, 0x005e, 0x004e, 0x0020, 0x080c, 0xe6da, 0x7817, 0x0140, + 0x080c, 0x74e9, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, + 0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, + 0x0489, 0x0005, 0x0002, 0x7f56, 0x8263, 0x7f53, 0x7f53, 0x7f53, + 0x7f53, 0x7f53, 0x7f53, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c, + 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286, + 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x573b, + 0x0070, 0x080c, 0x7fb9, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, + 0x81a0, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8377, 0x7817, + 0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, + 0x8048, 0x2518, 0x080c, 0x4b07, 0x003e, 0x002e, 0x0005, 0x0036, + 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, + 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, + 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, + 0x8048, 0x080c, 0x4b07, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, + 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, + 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8171, 0x9186, 0x0023, + 0x15c0, 0x080c, 0x840c, 0x0904, 0x8171, 0x6120, 0x9186, 0x0001, + 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, + 0x000a, 0x1904, 0x8171, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, + 0x1130, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0804, 0x8171, 0x908e, + 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, + 0xac8c, 0x0804, 0x8171, 0x908e, 0x0100, 0x1904, 0x8171, 0x7034, + 0x9005, 0x1904, 0x8171, 0x2009, 0x0016, 0x080c, 0xac8c, 0x0804, + 0x8171, 0x9186, 0x0022, 0x1904, 0x8171, 0x7030, 0x908e, 0x0300, + 0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, + 0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, + 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2644, + 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x25fb, 0x695e, + 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, + 0x00ee, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0017, 0x0804, + 0x8121, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x8171, + 0x080c, 0x74e9, 0x0120, 0x2009, 0x001d, 0x0804, 0x8121, 0x68dc, + 0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x8121, 0x908e, 0x0500, + 0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0018, 0x0804, + 0x8121, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x8121, + 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x8121, 0x908e, + 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x001b, + 0x0804, 0x8121, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, + 0x8171, 0x2009, 0x001c, 0x0804, 0x8121, 0x908e, 0x1300, 0x1120, + 0x2009, 0x0034, 0x0804, 0x8121, 0x908e, 0x1200, 0x1140, 0x7034, + 0x9005, 0x1904, 0x8171, 0x2009, 0x0024, 0x0804, 0x8121, 0x908c, + 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, + 0x2004, 0xd09c, 0x0904, 0x8121, 0x080c, 0xd64f, 0x1904, 0x8171, + 0x0804, 0x811f, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, + 0x002a, 0x0804, 0x8121, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, + 0x0804, 0x8121, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205, 0x2011, + 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, + 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x4b07, + 0x004e, 0x8108, 0x0f04, 0x80d5, 0x9186, 0x0280, 0x1d88, 0x2504, + 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, + 0x0023, 0x0804, 0x8121, 0x908e, 0x6000, 0x1120, 0x2009, 0x003f, + 0x0804, 0x8121, 0x908e, 0x5400, 0x1138, 0x080c, 0x84fa, 0x1904, + 0x8171, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148, 0x080c, + 0x8522, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042, 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, 0x6838, 0xd0d4, 0x0110, 0x2009, + 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x25fb, 0x1904, 0x8174, 0x080c, 0x65c4, 0x1904, 0x8174, 0xbe12, + 0xbd16, 0x001e, 0x0016, 0x080c, 0x74e9, 0x01c0, 0x68dc, 0xd08c, + 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, + 0x1168, 0x0040, 0x687c, 0x9606, 0x1148, 0x6880, 0x9506, 0x9084, + 0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884, 0x9005, + 0x1168, 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, + 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab97, + 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, + 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, + 0xac8c, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, + 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c, + 0xac5f, 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, 0x9225, 0x08a0, + 0x080c, 0x3332, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, + 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, + 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x840c, + 0x0904, 0x81fb, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, + 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0498, + 0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, 0x0016, + 0x080c, 0xac8c, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e, + 0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, + 0x8211, 0x220c, 0x080c, 0x25fb, 0x11a8, 0x080c, 0x65c4, 0x1190, + 0xbe12, 0xbd16, 0x080c, 0xab97, 0x0168, 0x2b08, 0x6112, 0x080c, + 0xcccc, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xac8c, + 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, 0x825d, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, + 0x825d, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, + 0x0000, 0x2019, 0x1837, 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, 0x8232, 0x82ff, 0x1118, + 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, + 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, + 0x000f, 0x0002, 0x827a, 0x827a, 0x827a, 0x841e, 0x827a, 0x827d, + 0x82a2, 0x832b, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a, + 0x827a, 0x827a, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc, + 0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc, + 0x02a8, 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, + 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, + 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xac8c, 0x7817, 0x0140, + 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x8307, + 0x7110, 0xd1bc, 0x1904, 0x8307, 0x7108, 0x700c, 0x2028, 0x918c, + 0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080, + 0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, + 0x0904, 0x8307, 0x9182, 0x0801, 0x1a04, 0x8307, 0x9190, 0x1000, + 0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, + 0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, 0xab97, + 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, 0x6023, + 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xd8b5, 0x00f8, + 0x080c, 0x6a6b, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, 0x81ff, + 0x11b0, 0x0880, 0x080c, 0xab97, 0x2b08, 0x0188, 0x6112, 0x6023, + 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, + 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x7817, + 0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, + 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c, 0xac5f, 0x0d78, + 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, + 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, + 0x080c, 0x921e, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020, + 0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868, + 0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008, + 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, 0x700c, + 0xb914, 0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8, + 0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082, + 0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631, + 0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c, + 0xac8c, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, + 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, + 0x3332, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, + 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005, + 0x838e, 0x838f, 0x838e, 0x838e, 0x83ee, 0x83fd, 0x0005, 0x00b6, + 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x83ec, 0x700c, + 0x7108, 0x080c, 0x25fb, 0x1904, 0x83ec, 0x080c, 0x65c4, 0x1904, + 0x83ec, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x6a6b, + 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x840c, 0x00ce, + 0x05d8, 0x080c, 0xab97, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcccc, + 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xac8c, + 0x0458, 0x080c, 0x6a6b, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, + 0x6a73, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xab97, 0x2b08, + 0x01d8, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0005, 0x7120, 0x610a, + 0x2009, 0x0088, 0x080c, 0xac8c, 0x0078, 0x080c, 0xab97, 0x2b08, + 0x0158, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0004, 0x7120, 0x610a, + 0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x0005, 0x7110, 0xd1bc, + 0x0158, 0x00d1, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a, + 0x2009, 0x0089, 0x080c, 0xac8c, 0x0005, 0x7110, 0xd1bc, 0x0158, + 0x0059, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a, 0x2009, + 0x008a, 0x080c, 0xac8c, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003, + 0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02, + 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, + 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82, + 0x1ddc, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, + 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106, + 0x1120, 0x2009, 0x0051, 0x080c, 0xac8c, 0x7817, 0x0140, 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, 0x05c0, 0x080c, 0xab97, 0x05a8, 0x0066, 0x00c6, 0x0046, + 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1590, + 0x080c, 0x65c4, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, + 0x6012, 0x080c, 0xcccc, 0x080c, 0x103a, 0x0500, 0x2900, 0x6062, + 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, 0x9225, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xabed, + 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, + 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x84f4, + 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904, + 0x84f6, 0x7030, 0x908e, 0x0400, 0x0904, 0x84f6, 0x908e, 0x6000, + 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, + 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6a29, + 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, + 0x1518, 0x6880, 0x69b0, 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, 0x840c, 0x0128, 0x6004, + 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, + 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, + 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x027a, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148, + 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbbae, + 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, + 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, + 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0272, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148, + 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbbae, + 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, + 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, + 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084, + 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe, + 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, + 0x0005, 0x2071, 0x1a03, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, + 0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026, + 0x702b, 0x9e54, 0x7032, 0x7037, 0x9ed1, 0x703f, 0xffff, 0x7042, + 0x7047, 0x5571, 0x704a, 0x705b, 0x8711, 0x080c, 0x1053, 0x090c, + 0x0d7d, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, + 0xdcb0, 0x0005, 0x2071, 0x1a03, 0x1d04, 0x862d, 0x2091, 0x6000, + 0x700c, 0x8001, 0x700e, 0x1590, 0x2001, 0x013c, 0x2004, 0x9005, + 0x190c, 0x87bb, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00, + 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, + 0x080c, 0x0d7d, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, + 0x8000, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118, + 0x080c, 0x877f, 0x0010, 0x080c, 0x8756, 0x7040, 0x900d, 0x0148, + 0x8109, 0x7142, 0x1130, 0x7044, 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, 0x9f6d, 0x0010, 0x7034, 0x080f, + 0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, + 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, + 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d, + 0x01d8, 0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e, + 0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, + 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, + 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8655, + 0x8656, 0x8680, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x9005, 0x1120, + 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, + 0x2071, 0x1a03, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, + 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1a03, 0xb888, + 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031, + 0x0010, 0x7110, 0x080c, 0x6625, 0x11a8, 0xb888, 0x8001, 0x0290, + 0xb88a, 0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005, + 0x0138, 0x0026, 0xba3c, 0x0016, 0x080c, 0x6750, 0x001e, 0x002e, + 0x006e, 0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128, + 0x7112, 0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, + 0x2031, 0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048, + 0x9005, 0x0128, 0x8001, 0x604a, 0x1110, 0x080c, 0xcb4d, 0x6018, + 0x9005, 0x0904, 0x86d8, 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4, + 0x1904, 0x86eb, 0x781b, 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120, + 0x781b, 0x2000, 0x0804, 0x86eb, 0x8001, 0x601a, 0x0106, 0x781b, + 0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540, + 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, 0x9186, + 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xc838, 0x01b0, + 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, + 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, + 0x810b, 0x9108, 0x611a, 0x080c, 0xcf7e, 0x0110, 0x080c, 0xc536, + 0x012e, 0x9c88, 0x001c, 0x7116, 0x2001, 0x181a, 0x2004, 0x9102, + 0x1228, 0x8631, 0x0138, 0x2160, 0x0804, 0x8684, 0x7017, 0x1ddc, + 0x7007, 0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a03, + 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0c, + 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7132, 0x702f, + 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0005, + 0x00e6, 0x2071, 0x1a03, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, + 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, 0x1a11, + 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, + 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x1124, 0x002e, + 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x8592, 0x015e, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, + 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7172, 0x7276, 0x706f, 0x0009, + 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1a03, 0x7074, 0x9206, + 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, + 0x69ec, 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874, + 0x9202, 0x0288, 0x8117, 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007, + 0x01a0, 0x8109, 0x9184, 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, + 0x9084, 0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184, + 0xff3e, 0x9205, 0x68ee, 0x080c, 0x0f05, 0x002e, 0x0005, 0x69e8, + 0x9184, 0x003f, 0x05b8, 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54, + 0x6874, 0x9202, 0x0220, 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc, + 0x1148, 0xc1bd, 0x2110, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, + 0x00ee, 0x0400, 0x69ea, 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007, + 0x0128, 0x8001, 0x8007, 0x9085, 0x0007, 0x0050, 0x2010, 0x8004, + 0x8004, 0x8004, 0x9084, 0x0007, 0x9205, 0x8007, 0x9085, 0x0028, + 0x9086, 0x0040, 0x2010, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, + 0x00ee, 0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, + 0x2061, 0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, + 0x200f, 0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, + 0x0005, 0x00c6, 0x2061, 0x1a6f, 0x00ce, 0x0005, 0x9184, 0x000f, + 0x8003, 0x8003, 0x8003, 0x9080, 0x1a6f, 0x2060, 0x0005, 0xa884, + 0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6f, + 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, + 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, + 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x8896, 0xd0b4, 0x1168, + 0xd0bc, 0x1904, 0x886f, 0x2009, 0x0006, 0x080c, 0x88c3, 0x0005, + 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, + 0x2023, 0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, + 0x6100, 0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184, + 0x11d8, 0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c, + 0x1c03, 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, + 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, + 0x781b, 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, + 0x0003, 0x1904, 0x88bd, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, + 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138, + 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xac8c, 0x0005, 0x87ff, + 0x1de8, 0x2009, 0x0042, 0x0804, 0xac8c, 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, 0x88bd, + 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, + 0x080c, 0x1731, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, + 0x080c, 0xac8c, 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, 0xac8c, + 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, + 0xac8c, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, + 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, + 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xc838, 0x0518, 0x6014, + 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, + 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6f, + 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, + 0x080c, 0x6bb5, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, + 0x87df, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6f, + 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, + 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, + 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003, + 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c, + 0x1053, 0x090c, 0x0d7d, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab, + 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005, + 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e, + 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, + 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, + 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, + 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084, + 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104, + 0x9082, 0x0007, 0x2009, 0x1b4e, 0x200a, 0x000e, 0xc095, 0x7012, + 0x2008, 0x2001, 0x003b, 0x080c, 0x1679, 0x9006, 0x2071, 0x193c, + 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126, + 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, + 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, + 0x1f04, 0x8976, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, + 0x0007, 0x00c6, 0x080c, 0xab97, 0x6023, 0x0009, 0x6003, 0x0004, + 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x8afc, + 0x012e, 0x1f04, 0x8982, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, + 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, + 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, + 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, + 0x2029, 0x000a, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900, 0x6016, + 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, + 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, + 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, + 0x103a, 0x090c, 0x0d7d, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, + 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, + 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004, + 0x004b, 0x700c, 0x0002, 0x89ee, 0x89e7, 0x89e7, 0x0005, 0x89f8, + 0x8a59, 0x8a59, 0x8a59, 0x8a5a, 0x8a6b, 0x8a6b, 0x700c, 0x0cba, + 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0, + 0x79a0, 0x9106, 0x1904, 0x8a4c, 0x2001, 0x0005, 0x2004, 0xd0bc, + 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, + 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8a9a, + 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, + 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100, + 0x9202, 0x0e48, 0x080c, 0x8be6, 0x2200, 0x9102, 0x0208, 0x2208, + 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8cef, + 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, + 0x2009, 0x1a21, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, + 0x080c, 0x1143, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, + 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, + 0x0005, 0x0005, 0x700c, 0x0002, 0x8a5f, 0x8a62, 0x8a61, 0x080c, + 0x89f6, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, + 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, + 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, + 0x9006, 0x0068, 0x0006, 0x080c, 0x8cef, 0x2100, 0xaa8c, 0x9210, + 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, + 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071, + 0x1923, 0x700c, 0x0002, 0x8a98, 0x8a98, 0x8a96, 0x700f, 0x0001, + 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, + 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, + 0x8b05, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8b4c, + 0x00ee, 0x0178, 0x0096, 0x080c, 0x1053, 0x2900, 0x009e, 0x0148, + 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e, + 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, + 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, + 0x9d88, 0x1e55, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8c74, + 0x080c, 0x1e2b, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, + 0xa88a, 0x080c, 0x1731, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8b5b, 0x012e, 0x008e, 0x00ce, 0x00de, + 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, + 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030, + 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, + 0x9b80, 0x8dce, 0x2005, 0x906d, 0x090c, 0x0d7d, 0x9b80, 0x8dc6, + 0x2005, 0x9065, 0x090c, 0x0d7d, 0x6114, 0x2600, 0x9102, 0x0248, + 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, + 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, + 0x6856, 0x2011, 0x8026, 0x080c, 0x4b07, 0x684c, 0x0096, 0x904d, + 0x090c, 0x0d7d, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, + 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, + 0x080c, 0x4b07, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d7d, 0xa800, + 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, + 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, + 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0d7d, + 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0d7d, 0x2069, + 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108, + 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003, + 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, + 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x106c, 0x009e, 0xa8ab, + 0x0000, 0x080c, 0x0fec, 0x080c, 0xabed, 0x00ce, 0x009e, 0x0005, + 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, + 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, + 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be, + 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, + 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923, + 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112, + 0x2001, 0x003b, 0x080c, 0x1679, 0x00ee, 0x0005, 0x0096, 0x00d6, + 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, + 0x7026, 0x702f, 0x0000, 0x080c, 0x8d4e, 0x0170, 0x080c, 0x8d83, + 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, + 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, + 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202, + 0x1618, 0x080c, 0x8d83, 0x090c, 0x0d7d, 0x7018, 0x9005, 0x1160, + 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, + 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, + 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, + 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, + 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e, + 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, + 0x7104, 0x080c, 0x8cef, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, + 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, + 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8cf8, + 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, + 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, + 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8be6, + 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, + 0x7106, 0x2500, 0x9212, 0x1904, 0x8c25, 0x012e, 0x00ee, 0x014e, + 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, + 0x2091, 0x8000, 0x9580, 0x8dc6, 0x2005, 0x9075, 0x090c, 0x0d7d, + 0x080c, 0x8cca, 0x012e, 0x9580, 0x8dc2, 0x2005, 0x9075, 0x090c, + 0x0d7d, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, + 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, + 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, + 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8cb4, 0x8cb4, 0x8cb6, 0x8cb4, + 0x8cb6, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cbc, 0x8cb4, + 0x8cbc, 0x8cb4, 0x8cb4, 0x8cb4, 0x080c, 0x0d7d, 0x4104, 0x20a9, + 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, + 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, + 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, + 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, + 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, + 0x8d92, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, + 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, + 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, + 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, + 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, + 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019, + 0x0001, 0x2031, 0x8d38, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, + 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084, + 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67, + 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002, + 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0, + 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128, + 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8, + 0x2031, 0x8d4b, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046, + 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8dca, 0x2005, 0x9005, + 0x090c, 0x0d7d, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1053, 0x01d0, + 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1053, + 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, + 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, + 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, + 0x106c, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, + 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, + 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, + 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, + 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, + 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, + 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, + 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, + 0x009e, 0x0005, 0x1a6d, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000, + 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, + 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, + 0x2071, 0x1877, 0x080c, 0x8eec, 0xa067, 0x0023, 0x6010, 0x905d, + 0x0904, 0x8ec1, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, + 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, + 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, + 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0d7d, 0x2020, 0x2050, 0x2940, + 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1e55, 0x2c65, + 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0d7d, + 0x9082, 0x001b, 0x0002, 0x8e2e, 0x8e2e, 0x8e30, 0x8e2e, 0x8e2e, + 0x8e2e, 0x8e32, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e34, 0x8e2e, 0x8e2e, + 0x8e2e, 0x8e36, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e38, 0x8e2e, 0x8e2e, + 0x8e2e, 0x8e3a, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e3c, 0x080c, 0x0d7d, + 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, + 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, + 0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x8e60, 0x8e5e, 0x8e5e, + 0x8e5e, 0x8e5e, 0x8e5e, 0x8e62, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, + 0x8e5e, 0x8e64, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e66, + 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e68, 0x080c, 0x0d7d, + 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, + 0xa1e0, 0x2600, 0x0002, 0x8e84, 0x8e86, 0x8e88, 0x8e8a, 0x8e8c, + 0x8e8e, 0x8e90, 0x8e92, 0x8e94, 0x8e96, 0x8e98, 0x8e9a, 0x8e9c, + 0x8e9e, 0x8ea0, 0x8ea2, 0x8ea4, 0x8ea6, 0x8ea8, 0x8eaa, 0x8eac, + 0x8eae, 0x8eb0, 0x8eb2, 0x8eb4, 0x080c, 0x0d7d, 0xb9e2, 0x0468, + 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, + 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, + 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, + 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, + 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, + 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120, + 0x080c, 0x1e2b, 0x0804, 0x8e08, 0x00ae, 0x00be, 0x00ce, 0x00ee, + 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, + 0x0804, 0x8dea, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, + 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, + 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e, + 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, + 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130, + 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a, + 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, + 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, + 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000, + 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140, + 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0d7d, 0x2068, 0x0cb0, + 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200, + 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6, + 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071, + 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8f41, + 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac, + 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b, + 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b, + 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0d7d, 0x080c, + 0x106c, 0x080c, 0x8afc, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200, + 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, + 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x25fb, 0x015e, + 0x11b0, 0x080c, 0x65c4, 0x190c, 0x0d7d, 0x000e, 0x001e, 0xb912, + 0xb816, 0x080c, 0xab97, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, + 0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x00ce, 0x0005, 0x000e, + 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, + 0x0013, 0x006e, 0x0005, 0x8fb3, 0x8fb3, 0x8fb3, 0x8fb5, 0x8ffe, + 0x8fb3, 0x8fb3, 0x8fb3, 0x9061, 0x8fb3, 0x9099, 0x8fb3, 0x8fb3, + 0x8fb3, 0x8fb3, 0x8fb3, 0x080c, 0x0d7d, 0x9182, 0x0040, 0x0002, + 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, + 0x8fc8, 0x8fca, 0x8fdb, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fec, + 0x080c, 0x0d7d, 0x0096, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, + 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6b80, 0x080c, + 0xabed, 0x009e, 0x0005, 0x080c, 0x963b, 0x00d6, 0x6114, 0x080c, + 0xc838, 0x0130, 0x0096, 0x6114, 0x2148, 0x080c, 0x6d80, 0x009e, + 0x00de, 0x080c, 0xabed, 0x0005, 0x080c, 0x963b, 0x080c, 0x31e7, + 0x6114, 0x0096, 0x2148, 0x080c, 0xc838, 0x0120, 0xa87b, 0x0029, + 0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x601b, 0x0000, + 0x9182, 0x0040, 0x0096, 0x0002, 0x9019, 0x9019, 0x9019, 0x9019, + 0x9019, 0x9019, 0x9019, 0x9019, 0x901b, 0x9019, 0x9019, 0x9019, + 0x905d, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9021, + 0x9019, 0x080c, 0x0d7d, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, + 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8dd2, 0x0096, 0xa8a8, + 0x2048, 0x080c, 0x6b18, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, + 0x0128, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be, 0xae88, 0x00b6, + 0x2059, 0x0000, 0x080c, 0x8b05, 0x00be, 0x01e0, 0x2071, 0x193c, + 0x080c, 0x8b4c, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946, + 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e, + 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8ac3, 0x00fe, 0x00ee, + 0x009e, 0x0005, 0x080c, 0x8afc, 0x0cd0, 0x080c, 0x9115, 0x009e, + 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x9075, 0x9075, 0x9075, + 0x9077, 0x9075, 0x9075, 0x9075, 0x9097, 0x9075, 0x9075, 0x9075, + 0x9075, 0x9075, 0x9075, 0x9075, 0x9075, 0x080c, 0x0d7d, 0x6003, + 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, + 0xa847, 0x0000, 0xa84b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, + 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x080c, + 0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x009e, 0x0005, 0x080c, + 0x0d7d, 0x080c, 0x963b, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, + 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c, + 0xabed, 0x009e, 0x0005, 0x080c, 0xa896, 0x6144, 0xd1fc, 0x0120, + 0xd1ac, 0x1110, 0x6003, 0x0003, 0x6000, 0x908a, 0x0016, 0x1a0c, + 0x0d7d, 0x0096, 0x0023, 0x009e, 0x080c, 0xa8b2, 0x0005, 0x90cf, + 0x90cf, 0x90cf, 0x90d1, 0x90e2, 0x90cf, 0x90cf, 0x90cf, 0x90cf, + 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x080c, + 0x0d7d, 0x080c, 0xaa2a, 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, + 0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c, + 0xabed, 0x0005, 0x0491, 0x0005, 0x080c, 0xa896, 0x6000, 0x6144, + 0xd1fc, 0x0130, 0xd1ac, 0x1120, 0x6003, 0x0003, 0x2009, 0x0003, + 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x0033, 0x009e, 0x0106, + 0x080c, 0xa8b2, 0x010e, 0x0005, 0x910c, 0x910c, 0x910c, 0x910e, + 0x9115, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, + 0x910c, 0x910c, 0x910c, 0x910c, 0x080c, 0x0d7d, 0x0036, 0x00e6, + 0x080c, 0xaa2a, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, + 0x0000, 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, + 0x080c, 0x8f01, 0x00be, 0x2071, 0x193c, 0x080c, 0x8b4c, 0x0160, + 0x2001, 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, + 0x8ac3, 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, + 0x2048, 0x080c, 0x106c, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8afc, + 0x0c80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, + 0x9006, 0x8004, 0x8086, 0x818e, 0x1208, 0x9200, 0x1f04, 0x915a, + 0x8086, 0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, + 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a, + 0x12b8, 0x8213, 0x818d, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9171, + 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x9171, 0x0006, 0x3200, + 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, + 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, + 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, 0x6803, 0x0005, + 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, + 0xa690, 0x04a9, 0x080c, 0xa67b, 0x0491, 0x080c, 0xa67e, 0x0479, + 0x080c, 0xa681, 0x0461, 0x080c, 0xa684, 0x0449, 0x080c, 0xa687, + 0x0431, 0x080c, 0xa68a, 0x0419, 0x080c, 0xa68d, 0x0401, 0x01de, + 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9, + 0x7807, 0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004, + 0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100, + 0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe, 0x00de, 0x0005, 0x20a9, + 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, + 0x7803, 0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, + 0x0031, 0x782b, 0x1aef, 0x781f, 0xff00, 0x781b, 0xff00, 0x2061, + 0x1ae4, 0x602f, 0x19e7, 0x6033, 0x1800, 0x6037, 0x1a03, 0x603b, + 0x1e55, 0x603f, 0x1e65, 0x6042, 0x6047, 0x1aba, 0x00ce, 0x0005, + 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x01b0, + 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, 0x602c, + 0x8000, 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, + 0x611e, 0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146, 0x2c08, + 0x2001, 0x0012, 0x080c, 0xa887, 0x0005, 0x0016, 0x2009, 0x8020, + 0x6146, 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, + 0x0001, 0x1128, 0x2001, 0x0019, 0x080c, 0xa887, 0x0088, 0x00c6, + 0x2061, 0x19e7, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128, + 0x9080, 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce, + 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, + 0x0001, 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, + 0x19e7, 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146, + 0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f, 0x0000, + 0x2c08, 0x2001, 0x0013, 0x080c, 0xa887, 0x0005, 0x6044, 0xd0dc, + 0x0128, 0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6, + 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, + 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7, + 0x7648, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x92f0, + 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x92eb, 0x87ff, 0x0120, + 0x605c, 0x9106, 0x1904, 0x92eb, 0x704c, 0x9c06, 0x1178, 0x0036, + 0x2019, 0x0001, 0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e, + 0x706a, 0x7052, 0x706e, 0x003e, 0x2029, 0x0001, 0x080c, 0x926e, + 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, + 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, + 0x600f, 0x0000, 0x080c, 0xc838, 0x01c8, 0x6014, 0x2048, 0x6020, + 0x9086, 0x0003, 0x1560, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x0016, 0x0036, 0x0076, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c, + 0x6d80, 0x007e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c, 0xac28, + 0x00ce, 0x0804, 0x928d, 0x2c78, 0x600c, 0x2060, 0x0804, 0x928d, + 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, + 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, + 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xe621, + 0x080c, 0xe26c, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086, + 0x0009, 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076, 0x080c, + 0x6d80, 0x080c, 0xabed, 0x007e, 0x003e, 0x001e, 0x0848, 0x6020, + 0x9086, 0x000a, 0x0904, 0x92d5, 0x0804, 0x92d3, 0x0006, 0x0066, + 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, + 0x2079, 0x19e7, 0x7848, 0x9065, 0x0904, 0x9385, 0x600c, 0x0006, + 0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001, + 0x080c, 0xa118, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52, + 0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000, + 0x0006, 0x00e6, 0x2f70, 0x080c, 0x926e, 0x00ee, 0x080c, 0xc838, + 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08, + 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001, + 0x1988, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6d74, 0x080c, 0xca27, 0x6044, 0xc0fc, 0x6046, + 0x080c, 0xac28, 0x000e, 0x0804, 0x9333, 0x7e4a, 0x7e46, 0x012e, + 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, + 0x9086, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c38, 0x6020, 0x9086, + 0x0009, 0x1130, 0xab7a, 0x080c, 0x6d80, 0x080c, 0xabed, 0x0c10, + 0x6020, 0x9086, 0x000a, 0x0990, 0x0878, 0x0016, 0x0026, 0x0086, + 0x9046, 0x00a9, 0x080c, 0x9496, 0x008e, 0x002e, 0x001e, 0x0005, + 0x00f6, 0x0126, 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x94df, + 0x080c, 0x9573, 0x080c, 0x67b2, 0x012e, 0x00fe, 0x0005, 0x00b6, + 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, + 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, + 0x8cff, 0x0904, 0x945b, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, + 0x9456, 0x88ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x9456, 0x7030, + 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, + 0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058, - 0x080c, 0x69f3, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, - 0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xc812, 0x01b0, - 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xca29, 0x1118, 0x080c, - 0xb591, 0x0060, 0x080c, 0x69f3, 0x1168, 0xa867, 0x0103, 0xab7a, - 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, 0xca03, 0x080c, 0xac04, - 0x080c, 0xa1ea, 0x000e, 0x0804, 0x94b5, 0x7e22, 0x7e1e, 0x00de, - 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1118, 0x080c, 0xe241, 0x0c50, 0x080c, 0xb591, 0x6020, 0x9086, - 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, - 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, - 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, - 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036, - 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08, - 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff, - 0x080c, 0xaa51, 0x0180, 0x610c, 0x080c, 0x9f7e, 0x6014, 0x2048, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, - 0xac04, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be, - 0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, - 0x6134, 0x11b0, 0x2071, 0x19e7, 0x7030, 0x9080, 0x0005, 0x2004, - 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e7, 0x7030, - 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029, - 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043, - 0xffff, 0x080c, 0xaa51, 0x0178, 0x080c, 0x9f7e, 0x6014, 0x2048, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb12, 0x080c, - 0x6d70, 0x080c, 0xac04, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, - 0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872, 0x2071, 0x0101, 0x2e04, - 0xc0c4, 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0xa88e, - 0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19e7, 0x7030, 0x9005, - 0x0da0, 0x9c06, 0x190c, 0x0d7d, 0x7036, 0x080c, 0x86c5, 0x7004, - 0x9084, 0x0007, 0x0002, 0x95dd, 0x95df, 0x95e6, 0x95f0, 0x95fe, - 0x95dd, 0x95e6, 0x95db, 0x080c, 0x0d7d, 0x0428, 0x0005, 0x080c, - 0xaa3c, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036, - 0x080c, 0x9f7e, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, - 0x080c, 0xaa27, 0x0140, 0x080c, 0xaa3c, 0x0128, 0x0066, 0x9036, - 0x080c, 0x9f7e, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0xaa27, - 0x080c, 0xa314, 0x0000, 0x010e, 0x190c, 0xa88e, 0x00ce, 0x00ee, - 0x00be, 0x0005, 0x00d6, 0x00c6, 0x080c, 0xa8d0, 0x0106, 0x190c, - 0xa872, 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0xa88e, 0x00ce, - 0x00de, 0x0005, 0x2069, 0x19e7, 0x684c, 0x9005, 0x0da8, 0x9c06, - 0x190c, 0x0d7d, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x923d, 0x00ee, - 0x080c, 0x86d2, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, 0x001e, - 0x683c, 0x9084, 0x0003, 0x0002, 0x963a, 0x963b, 0x9659, 0x9638, - 0x080c, 0x0d7d, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, 0x600c, - 0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, - 0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, 0x6846, - 0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, 0x0002, - 0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, 0x0120, - 0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, 0x684f, - 0x0000, 0x010e, 0x190c, 0xa88e, 0x00ce, 0x00de, 0x0005, 0x0005, - 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9685, 0x9688, 0x9af6, - 0x9b85, 0x9688, 0x9af6, 0x9b85, 0x9685, 0x9688, 0x9685, 0x9685, - 0x9685, 0x9685, 0x9685, 0x9685, 0x9685, 0x080c, 0x95ad, 0x0005, - 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, - 0x0053, 0x1a0c, 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, - 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x96f4, 0x005b, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, - 0x00be, 0x0005, 0x9879, 0x98b4, 0x98dd, 0x9985, 0x99a7, 0x99ad, - 0x99ba, 0x99c2, 0x99ce, 0x99d4, 0x99e5, 0x99d4, 0x9a3d, 0x99c2, - 0x9a49, 0x9a4f, 0x99ce, 0x9a4f, 0x9a5b, 0x96f2, 0x96f2, 0x96f2, - 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, - 0x9f9f, 0x9fc2, 0x9fd3, 0x9ff3, 0xa025, 0x99ba, 0x96f2, 0x99ba, - 0x99d4, 0x96f2, 0x98dd, 0x9985, 0x96f2, 0xa407, 0x99d4, 0x96f2, - 0xa423, 0x99d4, 0x96f2, 0x99ce, 0x9873, 0x9715, 0x96f2, 0xa43f, - 0xa4ac, 0xa58c, 0x96f2, 0xa599, 0x99b7, 0xa5c4, 0x96f2, 0xa02f, - 0xa5d0, 0x96f2, 0x080c, 0x0d7d, 0x2100, 0x005b, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, - 0x0005, 0xa670, 0xa722, 0x9713, 0x973c, 0x97e8, 0x97f3, 0x9713, - 0x99ba, 0x9713, 0x983a, 0x9846, 0x9757, 0x9713, 0x9772, 0x97a6, - 0xaaa7, 0xaaec, 0x99d4, 0x080c, 0x0d7d, 0x00d6, 0x0096, 0x080c, - 0x9a6e, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, - 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, - 0x0018, 0x080c, 0x9dde, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, - 0x2058, 0xb8a0, 0x00be, 0x080c, 0xab33, 0x1118, 0x9084, 0xff80, - 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9a6e, - 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, - 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, - 0x60c3, 0x0010, 0x080c, 0x9dde, 0x009e, 0x00de, 0x0005, 0x00d6, - 0x0096, 0x080c, 0x9a6e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, - 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, - 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9dde, 0x009e, - 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, - 0x9a6e, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, - 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, - 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, 0x200c, - 0x2001, 0x0001, 0x080c, 0x2195, 0x080c, 0xd58c, 0x9006, 0x080c, - 0x2195, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, - 0x080c, 0x9dde, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9ab9, 0x20e9, 0x0000, 0x2001, - 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, - 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, - 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, 0x200c, - 0x080c, 0xd58c, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, - 0x0051, 0x7814, 0x2048, 0x080c, 0x0fec, 0x080c, 0x9dde, 0x012e, - 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, - 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, - 0x080c, 0x9a6e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, - 0x0008, 0x0804, 0x9dde, 0x00d6, 0x00e6, 0x080c, 0x9ab9, 0x7814, - 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, - 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, - 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9809, 0x2069, 0x1801, - 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9812, 0x2069, - 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9, 0x001a, - 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, - 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, - 0x8e70, 0x1f04, 0x9820, 0x60c3, 0x004c, 0x080c, 0x9dde, 0x00ee, - 0x00de, 0x0005, 0x080c, 0x9a6e, 0x7003, 0x6300, 0x7007, 0x0028, - 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x00d6, 0x0026, - 0x0016, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, - 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, 0x1923, - 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, 0x0000, - 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, 0x2073, - 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9dde, 0x001e, - 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, 0x0804, - 0x9dde, 0x080c, 0x9a6e, 0x7003, 0x5200, 0x2069, 0x1847, 0x6804, - 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x262e, 0x710e, 0x001e, - 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, - 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, - 0x0254, 0x4003, 0x080c, 0xab33, 0x1120, 0xb8a0, 0x9082, 0x007f, - 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, 0x2004, - 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7036, - 0x60c3, 0x001c, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003, 0x0500, - 0x080c, 0xab33, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, - 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, 0x0030, - 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, - 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, - 0x4003, 0x60c3, 0x0010, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x9006, - 0x080c, 0x6a25, 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, 0x994c, 0x00d6, 0x2069, 0x196c, 0x2001, - 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, - 0x2000, 0x7012, 0x080c, 0xab4a, 0x680c, 0x7016, 0x701f, 0x2710, - 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, 0x6804, - 0x700e, 0x6808, 0x080c, 0x74d5, 0x1118, 0x9084, 0x37ff, 0x0010, - 0x9084, 0x3fff, 0x7012, 0x080c, 0xab4a, 0x680c, 0x7016, 0x00de, - 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, - 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, - 0x025a, 0x4003, 0x00d6, 0x080c, 0xa657, 0x2069, 0x1974, 0x2071, - 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d7, 0xd0e4, 0x0110, - 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004, 0xd0a4, - 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106, 0x0130, - 0x2100, 0x60e3, 0x0000, 0x080c, 0x266f, 0x61e2, 0x001e, 0x20e1, - 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, - 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256, - 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, - 0x080c, 0xa657, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1974, - 0x4003, 0x60c3, 0x0074, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003, - 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006, - 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, - 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6, - 0x0804, 0x9a1e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9dde, 0x080c, - 0x9a6e, 0x7003, 0x5000, 0x0804, 0x98f7, 0x080c, 0x9a6e, 0x7003, - 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9dde, 0x080c, - 0x9ab0, 0x0010, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x60c3, 0x0004, - 0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0100, 0x700b, 0x0003, - 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x080c, 0x9ab9, - 0x7003, 0x0200, 0x0804, 0x98f7, 0x080c, 0x9ab9, 0x7003, 0x0100, - 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814, - 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x00d6, 0x080c, 0x9ab9, - 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, 0x1847, 0x7904, 0x00fe, 0xd1ac, - 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009, - 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009, - 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4, 0xd28c, 0x1108, - 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130, - 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026, - 0x60c3, 0x0014, 0x00de, 0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003, - 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804, - 0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x0804, 0x987d, 0x080c, - 0x9ab9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, - 0x0008, 0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0100, 0x700b, - 0x000b, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x0026, 0x00d6, 0x0036, - 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, - 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa66c, - 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, - 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e, - 0x00de, 0x080c, 0x9dd2, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, - 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa66c, - 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x687c, - 0x700a, 0x6880, 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, 0xa66c, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, - 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128, - 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a, 0x6880, - 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de, - 0x080c, 0x9dd2, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, - 0x024c, 0x002e, 0x0005, 0x080c, 0x9dd2, 0x721a, 0x7a08, 0x7222, - 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6, + 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, + 0x7008, 0xc0ad, 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x9456, + 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, + 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, + 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, + 0xc838, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xca4d, + 0x1118, 0x080c, 0xb5b5, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621, + 0x080c, 0x6d80, 0x008e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c, + 0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0x93d0, 0x2c78, 0x600c, + 0x2060, 0x0804, 0x93d0, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, + 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, + 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xe621, 0x080c, + 0xe26c, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xb5b5, 0x6020, + 0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, + 0x0904, 0x943c, 0x9086, 0x008b, 0x0904, 0x943c, 0x0840, 0x6020, + 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, + 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x944f, 0x0006, 0x00f6, + 0x00e6, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, + 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19e7, 0x9036, + 0x7828, 0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, + 0xffff, 0x080c, 0xaa75, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9fa2, + 0x6014, 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, + 0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c, 0x6d80, + 0x008e, 0x003e, 0x001e, 0x080c, 0xac28, 0x00ce, 0x08d8, 0x2c30, + 0x600c, 0x2060, 0x08b8, 0x080c, 0x67cf, 0x012e, 0x001e, 0x006e, + 0x00ce, 0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, + 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, + 0x9546, 0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, + 0x7830, 0x9c06, 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, + 0x080c, 0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, + 0x7833, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, + 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, + 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, + 0x0058, 0x080c, 0x6a03, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, + 0xc0ad, 0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xc836, + 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xca4d, 0x1118, + 0x080c, 0xb5b5, 0x0060, 0x080c, 0x6a03, 0x1168, 0xa867, 0x0103, + 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c, + 0xac28, 0x080c, 0xa20e, 0x000e, 0x0804, 0x94e6, 0x7e22, 0x7e1e, + 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, + 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c50, 0x080c, 0xb5b5, 0x6020, + 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, + 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, + 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, + 0x008b, 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, + 0x9036, 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, + 0x3e08, 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, + 0xffff, 0x080c, 0xaa75, 0x0180, 0x610c, 0x080c, 0x9fa2, 0x6014, + 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80, + 0x080c, 0xac28, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, + 0x00be, 0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, + 0x080c, 0x613b, 0x11b0, 0x2071, 0x19e7, 0x7030, 0x9080, 0x0005, + 0x2004, 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e7, + 0x7030, 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, + 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, + 0x6043, 0xffff, 0x080c, 0xaa75, 0x0178, 0x080c, 0x9fa2, 0x6014, + 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb36, + 0x080c, 0x6d80, 0x080c, 0xac28, 0x00ce, 0x0005, 0x00b6, 0x00e6, + 0x00c6, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2071, 0x0101, + 0x2e04, 0xc0c4, 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, + 0xa8b2, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19e7, 0x7030, + 0x9005, 0x0da0, 0x9c06, 0x190c, 0x0d7d, 0x7036, 0x080c, 0x86f6, + 0x7004, 0x9084, 0x0007, 0x0002, 0x960e, 0x9610, 0x9617, 0x9621, + 0x962f, 0x960e, 0x9617, 0x960c, 0x080c, 0x0d7d, 0x0428, 0x0005, + 0x080c, 0xaa60, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, + 0x9036, 0x080c, 0x9fa2, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, + 0x0098, 0x080c, 0xaa4b, 0x0140, 0x080c, 0xaa60, 0x0128, 0x0066, + 0x9036, 0x080c, 0x9fa2, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, + 0xaa4b, 0x080c, 0xa338, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce, + 0x00ee, 0x00be, 0x0005, 0x00d6, 0x00c6, 0x080c, 0xa8f4, 0x0106, + 0x190c, 0xa896, 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0xa8b2, + 0x00ce, 0x00de, 0x0005, 0x2069, 0x19e7, 0x684c, 0x9005, 0x0da8, + 0x9c06, 0x190c, 0x0d7d, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x926e, + 0x00ee, 0x080c, 0x8703, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, + 0x001e, 0x683c, 0x9084, 0x0003, 0x0002, 0x966b, 0x966c, 0x968a, + 0x9669, 0x080c, 0x0d7d, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, + 0x600c, 0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, + 0x6046, 0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, + 0x6846, 0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, + 0x0002, 0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, + 0x0120, 0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, + 0x684f, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce, 0x00de, 0x0005, + 0x0005, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x96b6, 0x96b9, + 0x9b27, 0x9bb6, 0x96b9, 0x9b27, 0x9bb6, 0x96b6, 0x96b9, 0x96b6, + 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x080c, 0x95de, + 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, - 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, - 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, - 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, - 0x9b27, 0x9b36, 0x9b41, 0x9b25, 0x9b25, 0x9b25, 0x9b27, 0x9b25, - 0x9b25, 0x9b25, 0x9b25, 0x9b25, 0x9b25, 0x080c, 0x0d7d, 0x0411, - 0x60c3, 0x0000, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101, - 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9dde, 0x0431, 0x7808, - 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804, - 0x9dde, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, - 0x0804, 0x9dde, 0x0026, 0x080c, 0xa66c, 0xb810, 0x9085, 0x8100, + 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, + 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x9725, 0x005b, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, + 0x015e, 0x00be, 0x0005, 0x98aa, 0x98e5, 0x990e, 0x99b6, 0x99d8, + 0x99de, 0x99eb, 0x99f3, 0x99ff, 0x9a05, 0x9a16, 0x9a05, 0x9a6e, + 0x99f3, 0x9a7a, 0x9a80, 0x99ff, 0x9a80, 0x9a8c, 0x9723, 0x9723, + 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, + 0x9723, 0x9fc3, 0x9fe6, 0x9ff7, 0xa017, 0xa049, 0x99eb, 0x9723, + 0x99eb, 0x9a05, 0x9723, 0x990e, 0x99b6, 0x9723, 0xa42b, 0x9a05, + 0x9723, 0xa447, 0x9a05, 0x9723, 0x99ff, 0x98a4, 0x9746, 0x9723, + 0xa463, 0xa4d0, 0xa5b0, 0x9723, 0xa5bd, 0x99e8, 0xa5e8, 0x9723, + 0xa053, 0xa5f4, 0x9723, 0x080c, 0x0d7d, 0x2100, 0x005b, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, + 0x00be, 0x0005, 0xa694, 0xa746, 0x9744, 0x976d, 0x9819, 0x9824, + 0x9744, 0x99eb, 0x9744, 0x986b, 0x9877, 0x9788, 0x9744, 0x97a3, + 0x97d7, 0xaacb, 0xab10, 0x9a05, 0x080c, 0x0d7d, 0x00d6, 0x0096, + 0x080c, 0x9a9f, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, + 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, + 0x60c3, 0x0018, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005, 0x7810, + 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xab57, 0x1118, 0x9084, + 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, + 0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, + 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, + 0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005, + 0x00d6, 0x0096, 0x080c, 0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048, + 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, + 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02, + 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, + 0x080c, 0x9a9f, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, + 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, + 0x200c, 0x2001, 0x0001, 0x080c, 0x2195, 0x080c, 0xd5b1, 0x9006, + 0x080c, 0x2195, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, + 0x04d9, 0x080c, 0x9e02, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, + 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9aea, 0x20e9, 0x0000, + 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, + 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, + 0x200c, 0x080c, 0xd5b1, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, + 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fec, 0x080c, 0x9e02, + 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, + 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, + 0x0005, 0x080c, 0x9a9f, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, + 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x00e6, 0x080c, 0x9aea, + 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, + 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, + 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x983a, 0x2069, + 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9843, + 0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9, + 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, + 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, + 0x8d68, 0x8e70, 0x1f04, 0x9851, 0x60c3, 0x004c, 0x080c, 0x9e02, + 0x00ee, 0x00de, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x6300, 0x7007, + 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, + 0x0026, 0x0016, 0x080c, 0x9aea, 0x7003, 0x0200, 0x7814, 0x700e, + 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, + 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, + 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, + 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9e02, + 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, + 0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003, 0x5200, 0x2069, 0x1847, + 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x262e, 0x710e, + 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, + 0x20a1, 0x0254, 0x4003, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082, + 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, + 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, + 0x7036, 0x60c3, 0x001c, 0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003, + 0x0500, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, + 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, + 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, + 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x9e02, 0x080c, 0x9a9f, + 0x9006, 0x080c, 0x6a35, 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, 0x997d, 0x00d6, 0x2069, 0x196c, + 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, + 0x9084, 0x2000, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016, 0x701f, + 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, + 0x6804, 0x700e, 0x6808, 0x080c, 0x74e9, 0x1118, 0x9084, 0x37ff, + 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016, + 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, + 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa67b, 0x2069, 0x1974, + 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56de, 0xd0e4, + 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004, + 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106, + 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x266f, 0x61e2, 0x001e, + 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, + 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, + 0x4003, 0x080c, 0xa67b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, + 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9e02, 0x080c, 0x9a9f, + 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, + 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110, + 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, + 0x00d6, 0x0804, 0x9a4f, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9e02, + 0x080c, 0x9a9f, 0x7003, 0x5000, 0x0804, 0x9928, 0x080c, 0x9a9f, + 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9e02, + 0x080c, 0x9ae1, 0x0010, 0x080c, 0x9aea, 0x7003, 0x0200, 0x60c3, + 0x0004, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100, 0x700b, + 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, + 0x9aea, 0x7003, 0x0200, 0x0804, 0x9928, 0x080c, 0x9aea, 0x7003, + 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, + 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x080c, + 0x9aea, 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, 0x1847, 0x7904, 0x00fe, + 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, + 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, + 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4, 0xd28c, + 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, + 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, + 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x9e02, 0x080c, 0x9aea, + 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, + 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0200, 0x0804, 0x98ae, + 0x080c, 0x9aea, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, + 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100, + 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0026, 0x00d6, + 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, + 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, + 0xa690, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, + 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, + 0x003e, 0x00de, 0x080c, 0x9df6, 0x721a, 0x9f95, 0x0000, 0x7222, + 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, + 0xa690, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, + 0x687c, 0x700a, 0x6880, 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, 0xa690, 0xb810, 0x9305, 0x7002, 0xb814, + 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, + 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a, + 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, + 0x00de, 0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, + 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x9df6, 0x721a, 0x7a08, + 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, + 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, + 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a, + 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x0005, 0x9b58, 0x9b67, 0x9b72, 0x9b56, 0x9b56, 0x9b56, 0x9b58, + 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x080c, 0x0d7d, + 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011, + 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9e02, 0x0431, + 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, + 0x0804, 0x9e02, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, + 0x0004, 0x0804, 0x9e02, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085, + 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, + 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9aba, 0x0026, 0x080c, + 0xa690, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, + 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, + 0x0804, 0x9b1c, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, - 0x700e, 0x7013, 0x0009, 0x0804, 0x9a89, 0x0026, 0x080c, 0xa66c, - 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, - 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, - 0x9aeb, 0x0026, 0x080c, 0xa66c, 0xb810, 0x9085, 0x8500, 0x7002, - 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, - 0x2001, 0x0099, 0x7012, 0x0804, 0x9aeb, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, - 0x908a, 0x0040, 0x0a0c, 0x0d7d, 0x908a, 0x0057, 0x1a0c, 0x0d7d, - 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, - 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x9bba, - 0x9bba, 0x9bba, 0x9bde, 0x9bba, 0x9bba, 0x9bba, 0x9bba, 0x9bba, - 0x9bba, 0x9bba, 0xa1c7, 0xa1cf, 0xa1d7, 0xa1df, 0x9bba, 0x9bba, - 0x9bba, 0xa1bf, 0x080c, 0x0d7d, 0x6813, 0x0008, 0xba8c, 0x8210, - 0xb8d4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e, 0x732a, - 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600, - 0x7202, 0xba14, 0x7206, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, - 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x0016, 0x7814, - 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x9bee, 0x9bee, - 0x9bf0, 0x9bee, 0x9bee, 0x9bee, 0x9c0a, 0x9bee, 0x080c, 0x0d7d, - 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, - 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, - 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, - 0x0804, 0x9dde, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, - 0x0016, 0x080c, 0xa66c, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, - 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, - 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9dd2, 0x721a, - 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, - 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, - 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, - 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, - 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, - 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, - 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, - 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, - 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, - 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, - 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, - 0x0000, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, - 0x0000, 0x2001, 0x0092, 0x0058, 0x6028, 0xc0bd, 0x602a, 0x609f, - 0x00ff, 0x2011, 0xffff, 0x080c, 0x2a44, 0x2001, 0x00b2, 0x2010, - 0x900e, 0x080c, 0x2a53, 0x2009, 0x07d0, 0x080c, 0x86ca, 0x003e, - 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, + 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9b1c, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, + 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d7d, 0x908a, 0x0057, 0x1a0c, + 0x0d7d, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082, + 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, + 0x9beb, 0x9beb, 0x9beb, 0x9c11, 0x9beb, 0x9beb, 0x9beb, 0x9beb, + 0x9beb, 0x9beb, 0x9beb, 0xa1eb, 0xa1f3, 0xa1fb, 0xa203, 0x9beb, + 0x9beb, 0x9beb, 0xa1e3, 0x080c, 0x0d7d, 0x6813, 0x0008, 0xba8c, + 0x8210, 0xb8d4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e, + 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, + 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a7c, 0x720a, + 0x6a80, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, + 0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, + 0x0005, 0x9c21, 0x9c21, 0x9c23, 0x9c21, 0x9c21, 0x9c21, 0x9c3d, + 0x9c21, 0x080c, 0x0d7d, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, + 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc, + 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, + 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9e02, 0x2009, 0x0003, 0x0019, + 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xa690, 0x001e, 0xb810, + 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c, + 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, + 0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, - 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0xb8a0, - 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, 0x2500, - 0x9094, 0xff80, 0x1130, 0x9080, 0x336d, 0x2015, 0x9294, 0x00ff, - 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, 0x1130, - 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, 0x0400, - 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266, - 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, 0xb864, - 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, - 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, - 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa848, 0x608a, - 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0x009e, 0xb86c, - 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xba84, - 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x900e, - 0x2011, 0x0092, 0x080c, 0x2a53, 0x2009, 0x07d0, 0x080c, 0x86ca, - 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, - 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, - 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, - 0x2028, 0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x0002, 0x9d4e, - 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, - 0x9d4e, 0x9d50, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x080c, 0x0d7d, - 0x609f, 0x0000, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, - 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, - 0x7814, 0x2048, 0xa878, 0xc0fc, 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, 0x1837, 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, 0xa848, 0x608a, - 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c, 0x60ce, - 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0xa64c, 0x2009, 0x07d0, - 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, - 0x86ca, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, - 0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005, 0x00d6, - 0x2069, 0x19e7, 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x00f1, 0x080c, 0x86bc, 0x0005, 0x0016, 0x2001, - 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, - 0x080c, 0x86bc, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, - 0x2001, 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f3, 0x2003, 0x0000, - 0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0009, - 0x080c, 0x2a53, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00c6, - 0x0006, 0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872, 0x2061, 0x0100, - 0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, - 0x0008, 0x080c, 0x2a53, 0x002e, 0x001e, 0x010e, 0x190c, 0xa88e, - 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, - 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, - 0x080c, 0x74d5, 0x1510, 0x2001, 0x1a0c, 0x2004, 0x9005, 0x1904, - 0x9e8f, 0x080c, 0x7576, 0x11a8, 0x2069, 0x0380, 0x6843, 0x0101, - 0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, - 0x6024, 0xd084, 0x090c, 0x0d7d, 0x6843, 0x0100, 0x080c, 0x86bc, - 0x04b0, 0x00c6, 0x2061, 0x19e7, 0x00f0, 0x6904, 0x9194, 0x4000, - 0x0598, 0x080c, 0x9e0e, 0x080c, 0x2a1a, 0x00c6, 0x2061, 0x19e7, - 0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c, 0xa872, - 0x6130, 0x080c, 0xa88e, 0x00ce, 0x81ff, 0x01c8, 0x080c, 0x86bc, - 0x080c, 0x9e01, 0x00a0, 0x080c, 0xa872, 0x6130, 0x91e5, 0x0000, - 0x0150, 0x080c, 0xe6ec, 0x080c, 0x86c5, 0x6003, 0x0001, 0x2009, - 0x0014, 0x080c, 0xac68, 0x080c, 0xa88e, 0x00ce, 0x0000, 0x002e, - 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a0c, 0x2004, 0x9005, - 0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6134, 0x9192, 0x0003, 0x1ad8, - 0x8108, 0x6136, 0x00ce, 0x080c, 0x86bc, 0x080c, 0x5edd, 0x2009, - 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6, - 0x00e6, 0x0016, 0x0026, 0x080c, 0x86d2, 0x080c, 0xa872, 0x2001, - 0x0387, 0x2003, 0x0202, 0x2071, 0x19e7, 0x714c, 0x81ff, 0x0904, - 0x9f37, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x74d5, 0x1510, - 0x0036, 0x2019, 0x0002, 0x080c, 0xa0f4, 0x003e, 0x714c, 0x2160, - 0x080c, 0xe6ec, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009, 0x1130, - 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003, 0x0003, - 0x080c, 0xac68, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c, 0x7576, - 0x0804, 0x9f37, 0x6904, 0xd1f4, 0x0904, 0x9f44, 0x080c, 0x2a1a, - 0x00c6, 0x704c, 0x9065, 0x090c, 0x0d7d, 0x6020, 0x00ce, 0x9086, - 0x0006, 0x1518, 0x61c8, 0x60c4, 0x9105, 0x11f8, 0x2009, 0x180c, - 0x2104, 0xd0d4, 0x01d0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, - 0x9294, 0x0002, 0x1560, 0x0010, 0xc0d4, 0x200a, 0x6014, 0x9084, - 0xe7fd, 0x9085, 0x0010, 0x6016, 0x704c, 0x2060, 0x080c, 0x960a, - 0x2009, 0x0049, 0x080c, 0xac68, 0x00d0, 0x0036, 0x2019, 0x0001, - 0x080c, 0xa0f4, 0x003e, 0x714c, 0x2160, 0x080c, 0xe6ec, 0x2009, - 0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, - 0x0006, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0xac68, 0x2001, - 0x0387, 0x2003, 0x0200, 0x080c, 0xa88e, 0x002e, 0x001e, 0x00ee, - 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0x9eee, 0x0804, - 0x9ef0, 0x0026, 0x00e6, 0x2071, 0x19e7, 0x706c, 0xd084, 0x01e8, - 0xc084, 0x706e, 0x714c, 0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188, - 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, - 0x0012, 0x080c, 0x2a53, 0x0048, 0x928e, 0x0009, 0x0db0, 0x2009, - 0x1984, 0x2011, 0x0016, 0x080c, 0x2a53, 0x00ee, 0x002e, 0x0005, - 0x9036, 0x2001, 0x19f1, 0x2004, 0x9005, 0x0128, 0x9c06, 0x0128, - 0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005, 0x00f6, 0x2079, - 0x19e7, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc, 0x6046, 0x86ff, - 0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a, 0x0050, 0x792a, - 0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824, 0x9c06, 0x1108, - 0x7e26, 0x080c, 0xa1ea, 0x080c, 0xca03, 0x00fe, 0x0005, 0x080c, - 0x9a6e, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, - 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, - 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x607c, - 0x6180, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, - 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003, 0x0f00, 0x7808, 0xd09c, - 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x9dde, 0x0156, 0x080c, 0x9ab9, 0x7003, 0x0200, - 0x080c, 0x878a, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, - 0x9ef0, 0x0002, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, - 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9fe2, 0x60c3, 0x001c, - 0x015e, 0x0804, 0x9dde, 0x0016, 0x0026, 0x080c, 0x9a95, 0x080c, - 0x9aa7, 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, 0x9dde, - 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0xa657, - 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x9a6e, 0x7003, - 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x0016, - 0x0026, 0x080c, 0x9a6e, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, - 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, - 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, - 0x8003, 0x60c2, 0x080c, 0x9dde, 0x002e, 0x001e, 0x0005, 0x00e6, - 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7010, - 0x2060, 0x8cff, 0x0188, 0x080c, 0xca29, 0x1110, 0x080c, 0xb591, - 0x600c, 0x0006, 0x080c, 0xcca0, 0x600f, 0x0000, 0x080c, 0xabc9, - 0x080c, 0xa1ea, 0x00ce, 0x0c68, 0x2c00, 0x7012, 0x700e, 0x012e, - 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, - 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x19e7, 0x7030, 0x2060, 0x8cff, 0x0548, - 0x080c, 0x9e0e, 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x86c5, 0x00c6, - 0x2061, 0x0100, 0x080c, 0xa7a8, 0x00ce, 0x20a9, 0x01f4, 0x04b1, - 0x080c, 0x95ad, 0x6044, 0xd0ac, 0x1128, 0x2001, 0x1988, 0x2004, - 0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0xac68, 0x000e, 0x001e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, - 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, - 0x0004, 0x0d60, 0x080c, 0x86c5, 0x6814, 0x9084, 0x0001, 0x0110, - 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5e87, - 0x080c, 0x860d, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, - 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2a1a, - 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0xa0d6, - 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, - 0x9006, 0x080c, 0x2a0a, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, - 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006, 0x701f, 0x0202, - 0x2071, 0x19e7, 0x704c, 0x2060, 0x8cff, 0x0904, 0xa199, 0x9386, - 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, 0xa199, 0x68af, - 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, - 0x68cb, 0x0008, 0x080c, 0x86d2, 0x080c, 0x1dd8, 0x0046, 0x2009, - 0x00a5, 0x080c, 0x0e55, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, - 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, - 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x19e7, 0x6814, 0x9084, - 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, 0x7057, 0x0000, - 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, - 0x7887, 0x0001, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, 0x001e, - 0x2009, 0x0000, 0x080c, 0x0e55, 0x004e, 0x20a9, 0x03e8, 0x6824, - 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, - 0x2a1a, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, - 0xa167, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x6827, 0x4000, 0x6824, 0x83ff, - 0x1180, 0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0150, 0x080c, - 0x960a, 0x6044, 0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c, - 0xac68, 0x000e, 0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200, - 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, - 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, - 0x19e7, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, - 0x8000, 0x2069, 0x19e7, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c, - 0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, - 0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, - 0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, - 0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, - 0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, - 0x0804, 0x9dde, 0x00e6, 0x2071, 0x19e7, 0x702c, 0x9005, 0x0110, - 0x8001, 0x702e, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, - 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, - 0x7620, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa28f, - 0x8cff, 0x0904, 0xa28f, 0x6020, 0x9086, 0x0006, 0x1904, 0xa28a, - 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa28a, 0x2039, 0x0000, - 0x0050, 0x6010, 0x9b06, 0x1904, 0xa28a, 0x85ff, 0x0120, 0x605c, - 0x9106, 0x1904, 0xa28a, 0x7030, 0x9c06, 0x15b0, 0x2069, 0x0100, - 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, - 0x080c, 0x86c5, 0x080c, 0xa314, 0x7033, 0x0000, 0x0428, 0x080c, - 0x86c5, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, - 0x68c3, 0x0000, 0x080c, 0xa314, 0x7033, 0x0000, 0x0036, 0x2069, - 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, - 0x0110, 0x6827, 0x0001, 0x003e, 0x7020, 0x9c36, 0x1110, 0x660c, - 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, - 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, - 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, - 0x6014, 0x0096, 0x2048, 0x080c, 0xc812, 0x0110, 0x080c, 0xe241, - 0x009e, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x88ff, 0x1190, 0x00ce, - 0x0804, 0xa205, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa205, 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, 0x19e7, 0x7648, 0x2660, 0x2678, 0x8cff, - 0x0904, 0xa303, 0x6020, 0x9086, 0x0006, 0x1904, 0xa2fe, 0x87ff, - 0x0128, 0x2700, 0x9c06, 0x1904, 0xa2fe, 0x0040, 0x6010, 0x9b06, - 0x15e8, 0x85ff, 0x0118, 0x605c, 0x9106, 0x15c0, 0x704c, 0x9c06, - 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa0f4, 0x703f, 0x0000, - 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x003e, 0x7048, 0x9c36, - 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, - 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, - 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, - 0x6014, 0x2048, 0x080c, 0xc812, 0x0110, 0x080c, 0xe241, 0x080c, - 0xac04, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa2af, 0x2c78, 0x600c, - 0x2060, 0x0804, 0xa2af, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, - 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, - 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x7033, - 0x0000, 0x7004, 0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004, - 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, - 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x2c10, 0x7648, 0x2660, - 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7048, 0x9c36, - 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, - 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 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, 0x19e7, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, - 0xa3f6, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, - 0xa3f1, 0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, - 0x0904, 0xa3cd, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314, + 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc, + 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4, + 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, + 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067, + 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077, + 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, + 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, + 0x7814, 0x0096, 0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, + 0x60c6, 0xa834, 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, + 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837, 0x2004, 0x9084, + 0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092, 0x0058, 0x6028, + 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x2011, 0xffff, 0x080c, 0x2a44, + 0x2001, 0x00b2, 0x2010, 0x900e, 0x080c, 0x2a53, 0x2009, 0x07d0, + 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00be, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, + 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, + 0x7810, 0x2058, 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, + 0x007e, 0x1250, 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3374, + 0x2015, 0x9294, 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, + 0x70dc, 0xd0ac, 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, + 0x0138, 0x9185, 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, + 0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, + 0x6077, 0x0000, 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, + 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, + 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, + 0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, + 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, + 0x60d7, 0x0000, 0xba84, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, + 0x0000, 0x00fe, 0x900e, 0x2011, 0x0092, 0x080c, 0x2a53, 0x2009, + 0x07d0, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, + 0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, + 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, + 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x737c, 0x7480, + 0x7820, 0x0002, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81, + 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d83, 0x9d81, 0x9d81, 0x9d81, + 0x9d81, 0x080c, 0x0d7d, 0xb884, 0x609e, 0x7814, 0x2048, 0xa87c, + 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, + 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, + 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, + 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, + 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb884, 0x609e, 0x0050, + 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 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, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, + 0xa834, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, + 0x080c, 0xa670, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, + 0x0110, 0x2009, 0x1b58, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, + 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7a40, 0x9294, + 0x00ff, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19e7, 0x686b, 0x0001, + 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, + 0x86ed, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, + 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x86ed, 0x001e, 0x0005, + 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19e8, 0x2003, 0x0000, + 0x2001, 0x19f3, 0x2003, 0x0000, 0x0c88, 0x0006, 0x0016, 0x0026, + 0x2009, 0x1804, 0x2011, 0x0009, 0x080c, 0x2a53, 0x002e, 0x001e, + 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x080c, 0xa8f4, 0x0106, + 0x190c, 0xa896, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016, + 0x0026, 0x2009, 0x1804, 0x2011, 0x0008, 0x080c, 0x2a53, 0x002e, + 0x001e, 0x010e, 0x190c, 0xa8b2, 0x000e, 0xa001, 0xa001, 0xa001, + 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, + 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x74e9, 0x1510, 0x2001, + 0x1a0c, 0x2004, 0x9005, 0x1904, 0x9eb3, 0x080c, 0x758a, 0x11a8, + 0x2069, 0x0380, 0x6843, 0x0101, 0x6844, 0xd084, 0x1de8, 0x2061, + 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, 0x090c, 0x0d7d, + 0x6843, 0x0100, 0x080c, 0x86ed, 0x04b0, 0x00c6, 0x2061, 0x19e7, + 0x00f0, 0x6904, 0x9194, 0x4000, 0x0598, 0x080c, 0x9e32, 0x080c, + 0x2a1a, 0x00c6, 0x2061, 0x19e7, 0x6134, 0x9192, 0x0008, 0x1278, + 0x8108, 0x6136, 0x080c, 0xa896, 0x6130, 0x080c, 0xa8b2, 0x00ce, + 0x81ff, 0x01c8, 0x080c, 0x86ed, 0x080c, 0x9e25, 0x00a0, 0x080c, + 0xa896, 0x6130, 0x91e5, 0x0000, 0x0150, 0x080c, 0xe717, 0x080c, + 0x86f6, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, 0xac8c, 0x080c, + 0xa8b2, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, + 0x2001, 0x1a0c, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7, + 0x6134, 0x9192, 0x0003, 0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c, + 0x86ed, 0x080c, 0x5ee4, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, + 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, + 0x8703, 0x080c, 0xa896, 0x2001, 0x0387, 0x2003, 0x0202, 0x2071, + 0x19e7, 0x714c, 0x81ff, 0x0904, 0x9f5b, 0x2061, 0x0100, 0x2069, + 0x0140, 0x080c, 0x74e9, 0x1510, 0x0036, 0x2019, 0x0002, 0x080c, + 0xa118, 0x003e, 0x714c, 0x2160, 0x080c, 0xe717, 0x2009, 0x004a, + 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, + 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0xac8c, 0x2001, 0x0386, + 0x2003, 0x5040, 0x080c, 0x758a, 0x0804, 0x9f5b, 0x6904, 0xd1f4, + 0x0904, 0x9f68, 0x080c, 0x2a1a, 0x00c6, 0x704c, 0x9065, 0x090c, + 0x0d7d, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1518, 0x61c8, 0x60c4, + 0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01d0, 0x6214, + 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0010, + 0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, + 0x704c, 0x2060, 0x080c, 0x963b, 0x2009, 0x0049, 0x080c, 0xac8c, + 0x00d0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118, 0x003e, 0x714c, + 0x2160, 0x080c, 0xe717, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009, + 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003, + 0x0003, 0x080c, 0xac8c, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c, + 0xa8b2, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, + 0xd1ec, 0x1904, 0x9f12, 0x0804, 0x9f14, 0x0026, 0x00e6, 0x2071, + 0x19e7, 0x706c, 0xd084, 0x01e8, 0xc084, 0x706e, 0x714c, 0x81ff, + 0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, + 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x2a53, 0x0048, + 0x928e, 0x0009, 0x0db0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, + 0x2a53, 0x00ee, 0x002e, 0x0005, 0x9036, 0x2001, 0x19f1, 0x2004, + 0x9005, 0x0128, 0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085, + 0x0001, 0x0005, 0x00f6, 0x2079, 0x19e7, 0x610c, 0x9006, 0x600e, + 0x6044, 0xc0fc, 0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118, + 0x7826, 0x782a, 0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e, + 0x00ce, 0x7824, 0x9c06, 0x1108, 0x7e26, 0x080c, 0xa20e, 0x080c, + 0xca27, 0x00fe, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x1200, 0x7838, + 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, + 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, + 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a, + 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x9e02, 0x080c, 0x9a9f, + 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, + 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0156, + 0x080c, 0x9aea, 0x7003, 0x0200, 0x080c, 0x87bb, 0x20a9, 0x0006, + 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072, + 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, + 0x1f04, 0xa006, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0016, + 0x0026, 0x080c, 0x9ac6, 0x080c, 0x9ad8, 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, 0x9e02, 0x002e, 0x001e, 0x0005, 0x20a9, + 0x0010, 0x4003, 0x080c, 0xa67b, 0x20a1, 0x0240, 0x22a8, 0x4003, + 0x0c68, 0x080c, 0x9a9f, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, + 0x0008, 0x0804, 0x9e02, 0x0016, 0x0026, 0x080c, 0x9a9f, 0x20e9, + 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, + 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, + 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x9e02, + 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, + 0x8000, 0x2071, 0x19e7, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c, + 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x600c, 0x0006, 0x080c, 0xccc4, + 0x600f, 0x0000, 0x080c, 0xabed, 0x080c, 0xa20e, 0x00ce, 0x0c68, + 0x2c00, 0x7012, 0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, + 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, + 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, + 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, + 0x7030, 0x2060, 0x8cff, 0x0548, 0x080c, 0x9e32, 0x6ac0, 0x68c3, + 0x0000, 0x080c, 0x86f6, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa7cc, + 0x00ce, 0x20a9, 0x01f4, 0x04b1, 0x080c, 0x95de, 0x6044, 0xd0ac, + 0x1128, 0x2001, 0x1988, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013, + 0x080c, 0xac8c, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, + 0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x86f6, + 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, + 0x68c3, 0x0000, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x20a9, 0x01f4, + 0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, + 0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd084, 0x0118, 0x6827, + 0x0001, 0x0010, 0x1f04, 0xa0fa, 0x7804, 0x9084, 0x1000, 0x0138, + 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x0005, + 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, + 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, + 0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380, + 0x701c, 0x0006, 0x701f, 0x0202, 0x2071, 0x19e7, 0x704c, 0x2060, + 0x8cff, 0x0904, 0xa1bd, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, + 0x0002, 0x0904, 0xa1bd, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, + 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8703, + 0x080c, 0x1dd8, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e55, 0x2021, + 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, + 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, + 0x2071, 0x19e7, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, + 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, + 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009, + 0x0040, 0x080c, 0x21b0, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e55, + 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, + 0x7804, 0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd08c, 0x0118, + 0x6827, 0x0002, 0x0010, 0x1f04, 0xa18b, 0x7804, 0x9084, 0x1000, + 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, + 0x6827, 0x4000, 0x6824, 0x83ff, 0x1180, 0x2009, 0x0049, 0x6020, + 0x9086, 0x0009, 0x0150, 0x080c, 0x963b, 0x6044, 0xd0ac, 0x1118, + 0x6003, 0x0002, 0x0010, 0x080c, 0xac8c, 0x000e, 0x2071, 0x0380, + 0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e, 0x002e, 0x006e, + 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, + 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a06, 0x012e, 0x00de, + 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a3e, + 0x012e, 0x00de, 0x0005, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042, + 0x7047, 0x1000, 0x00f8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042, + 0x7047, 0x4000, 0x00b8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042, + 0x7047, 0x2000, 0x0078, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042, + 0x7047, 0x0400, 0x0038, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042, + 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9e02, 0x00e6, 0x2071, + 0x19e7, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005, + 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, + 0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, 0x2039, + 0x0001, 0x87ff, 0x0904, 0xa2b3, 0x8cff, 0x0904, 0xa2b3, 0x6020, + 0x9086, 0x0006, 0x1904, 0xa2ae, 0x88ff, 0x0138, 0x2800, 0x9c06, + 0x1904, 0xa2ae, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, + 0xa2ae, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0xa2ae, 0x7030, + 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824, + 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x86f6, 0x080c, 0xa338, + 0x7033, 0x0000, 0x0428, 0x080c, 0x86f6, 0x6820, 0xd0b4, 0x0110, + 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, - 0x7010, 0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, - 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, + 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, - 0x600f, 0x0000, 0x080c, 0xca18, 0x1158, 0x080c, 0x3215, 0x080c, - 0xca29, 0x11f0, 0x080c, 0xb591, 0x00d8, 0x080c, 0xa314, 0x08c0, - 0x080c, 0xca29, 0x1118, 0x080c, 0xb591, 0x0090, 0x6014, 0x2048, - 0x080c, 0xc812, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d64, 0x080c, 0xca03, - 0x080c, 0xcca0, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x00ce, 0x0804, - 0xa376, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa376, 0x012e, 0x000e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, - 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe241, 0x0c08, 0x00d6, - 0x080c, 0x9ab9, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, - 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, 0x20a1, 0x0250, - 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, - 0x9dde, 0x00de, 0x0005, 0x080c, 0x9ab9, 0x700b, 0x0800, 0x7814, - 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, - 0x7026, 0x7860, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7860, - 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9dde, 0x00b6, - 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xcea6, - 0x00de, 0x1904, 0xa4a4, 0x080c, 0x9a6e, 0x7003, 0x1300, 0x782c, - 0x080c, 0xa5af, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, - 0x2058, 0xbaa0, 0x080c, 0xab33, 0x11d8, 0x9286, 0x007e, 0x1128, - 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, - 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, - 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, - 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, - 0xb884, 0x700e, 0x00a8, 0x080c, 0xab33, 0x1130, 0x7810, 0x2058, - 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181f, 0x2d04, - 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, - 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, - 0x080c, 0x9dde, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, - 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, - 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0xa522, 0x9186, - 0x0005, 0x0904, 0xa50a, 0x9186, 0x0004, 0x05f0, 0x9186, 0x0008, - 0x0904, 0xa513, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, - 0x080c, 0xa58c, 0x0005, 0x080c, 0xa54d, 0x00d6, 0x0026, 0x792c, - 0x2168, 0x2009, 0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8, 0x0002, - 0xa4eb, 0xa4f6, 0xa4ed, 0xa4f6, 0xa4f2, 0xa4eb, 0xa4eb, 0xa4f6, - 0xa4f6, 0xa4f6, 0xa4f6, 0xa4eb, 0xa4eb, 0xa4eb, 0xa4eb, 0xa4eb, - 0xa4f6, 0xa4eb, 0xa4f6, 0x080c, 0x0d7d, 0x6824, 0xd0e4, 0x0110, - 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, - 0x6830, 0x7026, 0x0804, 0xa546, 0x080c, 0xa54d, 0x00d6, 0x0026, - 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, - 0x900e, 0x04e0, 0x080c, 0xa54d, 0x00d6, 0x0026, 0x792c, 0x2168, - 0x2009, 0x4000, 0x0498, 0x04c9, 0x00d6, 0x0026, 0x792c, 0x2168, - 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, - 0x900e, 0x0420, 0x0451, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, - 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, - 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc, - 0x1148, 0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, - 0x0004, 0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, - 0x0018, 0x002e, 0x00de, 0x0804, 0x9dde, 0x00b6, 0x0036, 0x0046, - 0x0056, 0x0066, 0x080c, 0x9ab9, 0x9006, 0x7003, 0x0200, 0x7938, - 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xab33, - 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, 0x2d2c, - 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, - 0x0028, 0x901e, 0xbc84, 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, 0x9ab9, 0x7003, 0x0100, - 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, - 0x9dde, 0x080c, 0x9a65, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, - 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, - 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0x9dde, 0x00e6, - 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, - 0xb8d4, 0xd084, 0x0120, 0x7850, 0x702a, 0x784c, 0x702e, 0x00be, - 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, 0x9ab0, 0x7003, 0x0100, - 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, - 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, - 0x080c, 0x2979, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, - 0x002e, 0x080c, 0x9e01, 0x080c, 0x86bc, 0x0005, 0x0036, 0x0096, - 0x00d6, 0x00e6, 0x7860, 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, 0xa66c, 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, 0x19b2, 0x210c, - 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, - 0x0026, 0x2110, 0x900e, 0x080c, 0x2a53, 0x002e, 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, - 0x080c, 0x9a6e, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, - 0x7013, 0x0138, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1138, - 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1904, 0xa711, 0x7003, - 0x5400, 0x00c6, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, - 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0x6080, 0x700e, 0xa998, - 0x918c, 0xff00, 0x7112, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, - 0x9290, 0x0006, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa6a2, - 0x20a9, 0x0004, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, - 0x1f04, 0xa6ac, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, - 0x2009, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, - 0x8109, 0x1dc0, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa657, 0x00de, - 0x2071, 0x0240, 0x2011, 0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, - 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, - 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, - 0xa85c, 0x9080, 0x0031, 0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, - 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, - 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, - 0x9084, 0x0028, 0x1168, 0x080c, 0x74d5, 0x0150, 0x6028, 0xc0bd, - 0x602a, 0x2009, 0x1804, 0x2011, 0x0029, 0x080c, 0x2a53, 0x0010, - 0x080c, 0x9dde, 0x080c, 0x86bc, 0x00de, 0x009e, 0x002e, 0x001e, - 0x0005, 0x00e6, 0x2071, 0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, - 0x7002, 0x7007, 0xffff, 0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, - 0x0804, 0xa687, 0x080c, 0x9a6e, 0x0016, 0x0026, 0x0096, 0x00d6, - 0x7814, 0x2048, 0x7013, 0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, - 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, - 0xa99c, 0x918c, 0xff00, 0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, - 0xa998, 0x918c, 0xff00, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, - 0x910d, 0x7112, 0x6180, 0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, - 0xa85c, 0x9080, 0x0029, 0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, - 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, - 0x0004, 0x2009, 0x1805, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, - 0xa763, 0x20a9, 0x0002, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, - 0x8210, 0x1f04, 0xa76d, 0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, - 0xa657, 0x001e, 0x00de, 0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, - 0x1803, 0x2011, 0x0240, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, - 0xa783, 0x2009, 0x0008, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, - 0x1dd0, 0x9006, 0x20a9, 0x0008, 0x2012, 0x8210, 0x1f04, 0xa794, - 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, - 0x9dde, 0x080c, 0x86bc, 0x00de, 0x009e, 0x002e, 0x001e, 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, - 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, - 0x2091, 0x8000, 0x2071, 0x19e7, 0x7610, 0x2660, 0x2678, 0x8cff, - 0x0904, 0xa84f, 0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, - 0x9005, 0x0904, 0xa826, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, - 0xa314, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, - 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, - 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, - 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, - 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, - 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, - 0x2678, 0x600f, 0x0000, 0x080c, 0xca18, 0x1158, 0x080c, 0x3215, - 0x080c, 0xca29, 0x11f0, 0x080c, 0xb591, 0x00d8, 0x080c, 0xa314, - 0x08c0, 0x080c, 0xca29, 0x1118, 0x080c, 0xb591, 0x0090, 0x6014, - 0x2048, 0x080c, 0xc812, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, - 0xca03, 0x080c, 0xcca0, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x00ce, - 0x0804, 0xa7d7, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa7d7, 0x7013, - 0x0000, 0x700f, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, - 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, - 0x080c, 0xe241, 0x08f0, 0x00f6, 0x0036, 0x2079, 0x0380, 0x7b18, - 0xd3bc, 0x1de8, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x003e, - 0x00fe, 0x0005, 0x0016, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, - 0x9086, 0x0001, 0x1188, 0x2001, 0x0015, 0x0c29, 0x2009, 0x1000, - 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0120, - 0x8109, 0x1db0, 0x080c, 0x0d7d, 0x001e, 0x0005, 0x2001, 0x0382, - 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x1120, 0x2001, 0x0380, - 0x2003, 0x0001, 0x0005, 0x0156, 0x0016, 0x0026, 0x00e6, 0x900e, - 0x2071, 0x19e7, 0x0469, 0x0106, 0x0190, 0x7004, 0x9086, 0x0003, - 0x0148, 0x20a9, 0x1000, 0x6044, 0xd0fc, 0x01d8, 0x1f04, 0xa8ab, - 0x080c, 0x0d7d, 0x080c, 0xa872, 0x6044, 0xd0fc, 0x0190, 0x7030, - 0x9c06, 0x1148, 0x080c, 0x95ad, 0x6044, 0xd0dc, 0x0150, 0xc0dc, - 0x6046, 0x700a, 0x7042, 0x704c, 0x9c06, 0x190c, 0x0d7d, 0x080c, - 0x960a, 0x010e, 0x1919, 0x00ee, 0x002e, 0x001e, 0x015e, 0x0005, - 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0005, - 0x0126, 0x2091, 0x2400, 0x7808, 0xd0a4, 0x190c, 0x0d76, 0xd09c, - 0x0128, 0x7820, 0x908c, 0xf000, 0x11b8, 0x0012, 0x012e, 0x0005, - 0xa8f8, 0xa936, 0xa95d, 0xa994, 0xa9a4, 0xa9b5, 0xa9c4, 0xa9d2, - 0xa9ff, 0xaa03, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8, - 0x080c, 0x0d7d, 0x012e, 0x0005, 0x2060, 0x6044, 0xd0bc, 0x0140, - 0xc0bc, 0x6046, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0012, - 0x012e, 0x0005, 0xa91d, 0xa91f, 0xa91d, 0xa925, 0xa91d, 0xa91d, - 0xa91d, 0xa91d, 0xa91d, 0xa91f, 0xa91d, 0xa91f, 0xa91d, 0xa91f, - 0xa91d, 0xa91d, 0xa91d, 0xa91f, 0xa91d, 0x080c, 0x0d7d, 0x2009, - 0x0013, 0x080c, 0xac68, 0x012e, 0x0005, 0x6014, 0x2048, 0xa87c, - 0xd0dc, 0x0130, 0x080c, 0x8890, 0x080c, 0xabc9, 0x012e, 0x0005, - 0x2009, 0x0049, 0x080c, 0xac68, 0x012e, 0x0005, 0x080c, 0xa872, - 0x2001, 0x1a0c, 0x2003, 0x0000, 0x7030, 0x9065, 0x090c, 0x0d7d, - 0x7034, 0x9092, 0x00c8, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086, - 0x0003, 0x0110, 0x7007, 0x0000, 0x781f, 0x0808, 0x0040, 0x080c, - 0xe6ec, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, 0xac68, 0x781f, - 0x0100, 0x080c, 0xa88e, 0x012e, 0x0005, 0x080c, 0xa872, 0x714c, - 0x81ff, 0x1128, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0438, 0x2061, - 0x0100, 0x7150, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7152, 0x714c, - 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, - 0x1984, 0x9085, 0x0012, 0x6016, 0x0088, 0x714c, 0x9188, 0x0008, - 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984, 0x9085, - 0x0016, 0x6016, 0x0018, 0x706c, 0xc085, 0x706e, 0x781f, 0x0200, - 0x080c, 0xa88e, 0x012e, 0x0005, 0x080c, 0xa872, 0x714c, 0x2160, - 0x6003, 0x0003, 0x2009, 0x004a, 0x080c, 0xac68, 0x781f, 0x0200, - 0x080c, 0xa88e, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, - 0x2060, 0x6003, 0x0003, 0x080c, 0xa872, 0x080c, 0x1d60, 0x781f, - 0x0400, 0x080c, 0xa88e, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, - 0x7820, 0x2060, 0x080c, 0xa872, 0x080c, 0x1da8, 0x781f, 0x0400, - 0x080c, 0xa88e, 0x012e, 0x0005, 0x7030, 0x9065, 0x0148, 0x6044, - 0xc0bc, 0x6046, 0x7104, 0x9186, 0x0003, 0x0110, 0x080c, 0x9670, - 0x012e, 0x0005, 0x00f6, 0x703c, 0x9086, 0x0002, 0x0528, 0x704c, - 0x907d, 0x0510, 0x7844, 0xc0bc, 0x7846, 0x7820, 0x9086, 0x0009, - 0x0118, 0x080c, 0x9d29, 0x00c0, 0x7828, 0xd0fc, 0x1118, 0x080c, - 0x9ca8, 0x0090, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1130, - 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1120, 0x2001, 0x0387, - 0x2003, 0x1000, 0x080c, 0x9c2d, 0x00fe, 0x012e, 0x0005, 0x080c, - 0x7576, 0x012e, 0x0005, 0x080c, 0x0d7d, 0x0005, 0x00e6, 0x2071, - 0x19e7, 0x6044, 0xc0bc, 0x6046, 0xd0fc, 0x01b8, 0x704c, 0x9c06, - 0x1190, 0x2019, 0x0001, 0x080c, 0xa0f4, 0x704f, 0x0000, 0x2001, - 0x0109, 0x2004, 0xd08c, 0x1138, 0x2001, 0x0108, 0x2004, 0xd0bc, - 0x1110, 0x703f, 0x0000, 0x080c, 0xa32a, 0x00ee, 0x0005, 0x0026, - 0x7010, 0x9c06, 0x1178, 0x080c, 0xa1ea, 0x6044, 0xc0fc, 0x6046, - 0x600c, 0x9015, 0x0120, 0x7212, 0x600f, 0x0000, 0x0010, 0x7212, - 0x720e, 0x9006, 0x002e, 0x0005, 0x0026, 0x7020, 0x9c06, 0x1178, - 0x080c, 0xa1ea, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, - 0x7222, 0x600f, 0x0000, 0x0010, 0x7222, 0x721e, 0x9006, 0x002e, - 0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06, 0x1558, 0x2069, 0x0100, - 0x68c0, 0x9005, 0x01f8, 0x080c, 0x86c5, 0x080c, 0x9e0e, 0x68c3, - 0x0000, 0x080c, 0xa314, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x9085, - 0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a, 0x6003, 0x0009, 0x630a, - 0x9006, 0x003e, 0x00de, 0x0005, 0x0016, 0x0026, 0x0036, 0x6100, - 0x2019, 0x0100, 0x2001, 0x0382, 0x2004, 0xd09c, 0x0190, 0x00c6, - 0x0126, 0x2091, 0x2800, 0x0016, 0x0036, 0x080c, 0xa8d8, 0x003e, - 0x001e, 0x012e, 0x00ce, 0x6200, 0x2200, 0x9106, 0x0d58, 0x2200, - 0x0010, 0x8319, 0x1d38, 0x003e, 0x002e, 0x001e, 0x0005, 0x00d6, - 0x0156, 0x080c, 0x9ab9, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, - 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, - 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, - 0xc38d, 0x0060, 0x080c, 0x74d5, 0x1110, 0xc3ad, 0x0008, 0xc3a5, - 0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c, - 0x878a, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071, - 0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, - 0x0002, 0x9290, 0x0002, 0x1f04, 0xaad9, 0x60c3, 0x0020, 0x080c, - 0x9dde, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9ab9, 0x7a14, - 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, - 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, - 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204, - 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, - 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022, - 0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004, - 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, - 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, - 0x015e, 0x0804, 0x9dde, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac, - 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002, - 0x080c, 0xa1b5, 0x080c, 0xa074, 0x0036, 0x901e, 0x080c, 0xa0f4, - 0x003e, 0x0005, 0x080c, 0x3366, 0x0188, 0x0016, 0x00b6, 0x00c6, - 0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x661e, - 0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, - 0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0812, 0x2071, 0x1800, - 0x7076, 0x707a, 0x706b, 0xffd4, 0x2071, 0x1800, 0x7074, 0x7056, - 0x705b, 0x1ddc, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, - 0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000, - 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, - 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, - 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, - 0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, - 0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058, - 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068, - 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, - 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1228, 0x755a, - 0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc8, 0x9006, - 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004, - 0x9c02, 0x1a0c, 0x0d7d, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, - 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x605e, - 0x6062, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, - 0x604a, 0x602a, 0x6046, 0x6042, 0x2061, 0x1800, 0x6054, 0x8000, - 0x6056, 0x0005, 0x9006, 0x600e, 0x6016, 0x601a, 0x6012, 0x6022, - 0x6002, 0x601e, 0x605e, 0x6062, 0x604a, 0x6046, 0x2061, 0x1800, - 0x6054, 0x8000, 0x6056, 0x0005, 0x0006, 0x6000, 0x9086, 0x0000, - 0x01d0, 0x601c, 0xd084, 0x190c, 0x1a6a, 0x6023, 0x0007, 0x2001, - 0x1986, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, - 0x601a, 0x080c, 0xe4f9, 0x604b, 0x0000, 0x6044, 0xd0fc, 0x1129, - 0x9006, 0x6046, 0x6016, 0x000e, 0x0005, 0x080c, 0xa8d0, 0x0106, - 0x190c, 0xa872, 0x2001, 0x19fa, 0x2004, 0x9c06, 0x1130, 0x0036, - 0x2019, 0x0001, 0x080c, 0xa0f4, 0x003e, 0x080c, 0xa32a, 0x010e, - 0x190c, 0xa88e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, - 0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058, 0x2060, 0x6000, - 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, - 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, - 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, - 0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, - 0x6020, 0x9084, 0x000f, 0x0002, 0xac7c, 0xac86, 0xaca1, 0xacbc, - 0xcf78, 0xcf95, 0xcfb0, 0xac7c, 0xac86, 0x8f69, 0xacd8, 0xac7c, - 0xac7c, 0xac7c, 0xac7c, 0xac7c, 0x9186, 0x0013, 0x1130, 0x6044, - 0xd0fc, 0x0110, 0x080c, 0x95ad, 0x0005, 0x0005, 0x0066, 0x6000, - 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xac9f, - 0xb3fd, 0xb5d8, 0xac9f, 0xb66e, 0xafa1, 0xac9f, 0xac9f, 0xb37f, - 0xbbd6, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0x080c, - 0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, - 0x006e, 0x0005, 0xacba, 0xc1e1, 0xacba, 0xacba, 0xacba, 0xacba, - 0xacba, 0xacba, 0xc186, 0xc364, 0xacba, 0xc21e, 0xc2a2, 0xc21e, - 0xc2a2, 0xacba, 0x080c, 0x0d7d, 0x6000, 0x9082, 0x0016, 0x1a0c, - 0x0d7d, 0x6000, 0x0002, 0xacd6, 0xbc20, 0xbcb7, 0xbe37, 0xbea6, - 0xacd6, 0xacd6, 0xacd6, 0xbbef, 0xc107, 0xc10a, 0xacd6, 0xacd6, - 0xacd6, 0xacd6, 0xc13a, 0xacd6, 0xacd6, 0xacd6, 0x080c, 0x0d7d, - 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, - 0x0005, 0xacf1, 0xacf1, 0xad2f, 0xadce, 0xae4e, 0xacf1, 0xacf1, - 0xacf1, 0xacf3, 0xacf1, 0xacf1, 0xacf1, 0xacf1, 0xacf1, 0xacf1, - 0xacf1, 0x080c, 0x0d7d, 0x9186, 0x004c, 0x0560, 0x9186, 0x0003, - 0x190c, 0x0d7d, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, - 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, - 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884, - 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, - 0x9210, 0x621a, 0x009e, 0x080c, 0x1bba, 0x2009, 0x8030, 0x080c, - 0x9234, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, - 0x080c, 0xae70, 0x080c, 0xcf46, 0x6003, 0x0007, 0x0005, 0x00d6, - 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, - 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 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, 0xad96, 0xad96, 0xad91, 0xad94, 0xad96, 0xad8e, 0xad81, - 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, - 0xad81, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, - 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d7d, 0x080c, 0xb82b, - 0x0028, 0x080c, 0xb910, 0x0010, 0x080c, 0xba06, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, - 0xaf2e, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, - 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, - 0x1298, 0x080c, 0xb0ee, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, - 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xabc9, - 0x2001, 0x002c, 0x900e, 0x080c, 0xaf94, 0x0c70, 0x91b6, 0x0015, - 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d7d, - 0x91b2, 0x0050, 0x1a0c, 0x0d7d, 0x9182, 0x0047, 0x0042, 0x080c, - 0xaa84, 0x0120, 0x9086, 0x0002, 0x0904, 0xad2f, 0x0005, 0xadf0, - 0xadf0, 0xadf2, 0xae24, 0xadf0, 0xadf0, 0xadf0, 0xadf0, 0xae37, - 0x080c, 0x0d7d, 0x00d6, 0x0016, 0x0096, 0x6003, 0x0004, 0x6114, - 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, - 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xaf94, - 0x080c, 0xabc9, 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, 0x960a, 0x00d6, 0x0096, - 0x6114, 0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0006, 0x080c, - 0x6d70, 0x009e, 0x00de, 0x080c, 0xabc9, 0x0804, 0x966f, 0x080c, - 0x960a, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00d6, 0x0096, 0x6114, - 0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6d70, - 0x009e, 0x00de, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9182, 0x0047, - 0x0002, 0xae5e, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, - 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae60, 0x080c, 0x0d7d, - 0x00d6, 0x0096, 0x601f, 0x0000, 0x6114, 0x2148, 0xa87b, 0x0000, - 0xa883, 0x0000, 0x080c, 0x6d70, 0x009e, 0x00de, 0x0804, 0xabc9, - 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, - 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xa960, 0x21e8, 0xa95c, - 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, - 0x2079, 0x1800, 0x7990, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, - 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, - 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, - 0xc3e7, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, - 0xc3e7, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fec, - 0x080c, 0x103a, 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, - 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, - 0x080c, 0xc3e7, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, - 0x2011, 0x001b, 0x080c, 0xc3e7, 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, 0x6d70, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, - 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, - 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xa960, - 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, - 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990, 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, 0x6d70, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, - 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, - 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, - 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, - 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, - 0x080c, 0x103a, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, - 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, - 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, - 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, - 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, - 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, - 0xaf43, 0x0804, 0xaf45, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, - 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, - 0x2348, 0xa87a, 0xa982, 0x080c, 0x6d64, 0x009e, 0x003e, 0x00de, - 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0xabc9, 0x0030, 0x91b6, - 0x0016, 0x190c, 0x0d7d, 0x080c, 0xabc9, 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, 0xc814, 0x0130, 0x6014, 0x2048, 0xa807, - 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0xabc9, 0x0096, 0x00d6, - 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, - 0xb8d7, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, - 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0xabc9, 0x003e, 0x00de, - 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, - 0xcf2e, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, 0x0003, 0x601b, - 0x0000, 0x604b, 0x0000, 0x2009, 0x0022, 0x080c, 0xb3d5, 0x9006, - 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, - 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, + 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, + 0xc836, 0x0110, 0x080c, 0xe26c, 0x009e, 0x080c, 0xac28, 0x080c, + 0xa20e, 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa229, 0x2c78, 0x600c, + 0x2060, 0x0804, 0xa229, 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, 0x19e7, + 0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa327, 0x6020, 0x9086, + 0x0006, 0x1904, 0xa322, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, + 0xa322, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x605c, + 0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, + 0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052, + 0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, + 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, + 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, + 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xc836, + 0x0110, 0x080c, 0xe26c, 0x080c, 0xac28, 0x87ff, 0x1198, 0x00ce, + 0x0804, 0xa2d3, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa2d3, 0x9006, + 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, + 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, + 0x00e6, 0x2071, 0x19e7, 0x7033, 0x0000, 0x7004, 0x9086, 0x0003, + 0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, + 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, + 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, + 0x19e7, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, + 0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, + 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, + 0x7047, 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, 0x19e7, 0x7610, + 0x2660, 0x2678, 0x8cff, 0x0904, 0xa41a, 0x6010, 0x00b6, 0x2058, + 0xb8a0, 0x00be, 0x9206, 0x1904, 0xa415, 0x7030, 0x9c06, 0x1520, + 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa3f1, 0x080c, 0x9e32, + 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, 0x2069, + 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, + 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, + 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, + 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xca3c, + 0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c, 0xb5b5, + 0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118, 0x080c, + 0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168, 0x6020, + 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c, 0xac28, + 0x080c, 0xa20e, 0x00ce, 0x0804, 0xa39a, 0x2c78, 0x600c, 0x2060, + 0x0804, 0xa39a, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, + 0x080c, 0xe26c, 0x0c08, 0x00d6, 0x080c, 0x9aea, 0x7003, 0x0200, + 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, + 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, + 0x0004, 0x7027, 0x7878, 0x080c, 0x9e02, 0x00de, 0x0005, 0x080c, + 0x9aea, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, + 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff, + 0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00, 0x8007, 0x7006, + 0x60c2, 0x0804, 0x9e02, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, + 0x2009, 0x0035, 0x080c, 0xceca, 0x00de, 0x1904, 0xa4c8, 0x080c, + 0x9a9f, 0x7003, 0x1300, 0x782c, 0x080c, 0xa5d3, 0x2068, 0x6820, + 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xab57, + 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, + 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, + 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, + 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, + 0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c, + 0xab57, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, + 0x00d6, 0x2069, 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, + 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, + 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x9e02, 0x00be, 0x0005, + 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, + 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, + 0x0003, 0x0904, 0xa546, 0x9186, 0x0005, 0x0904, 0xa52e, 0x9186, + 0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0xa537, 0x7807, 0x0037, + 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0xa5b0, 0x0005, 0x080c, + 0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, + 0x6a44, 0xd2fc, 0x11f8, 0x0002, 0xa50f, 0xa51a, 0xa511, 0xa51a, + 0xa516, 0xa50f, 0xa50f, 0xa51a, 0xa51a, 0xa51a, 0xa51a, 0xa50f, + 0xa50f, 0xa50f, 0xa50f, 0xa50f, 0xa51a, 0xa50f, 0xa51a, 0x080c, + 0x0d7d, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, + 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0xa56a, + 0x080c, 0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, + 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, 0x080c, 0xa571, + 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0498, 0x04c9, + 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, + 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420, 0x0451, 0x00d6, + 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, + 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, + 0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000, 0x2004, + 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000, + 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, + 0x9e02, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x9aea, + 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810, + 0x2058, 0xb8a0, 0x080c, 0xab57, 0x1118, 0x9092, 0x007e, 0x0268, + 0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, + 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84, 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, 0x9aea, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, + 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9a96, 0x7003, + 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012, + 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, + 0x0010, 0x0804, 0x9e02, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, + 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8d4, 0xd084, 0x0120, 0x7850, + 0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, + 0x080c, 0x9ae1, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, + 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00a9, 0x7914, 0x712a, 0x60c3, + 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011, + 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x9e25, 0x080c, + 0x86ed, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860, 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, 0xa690, + 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, 0x19b2, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, + 0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e, 0x080c, + 0x2a53, 0x002e, 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, 0x080c, 0x9a9f, 0x0016, 0x0026, + 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837, + 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086, + 0xaaaa, 0x1904, 0xa735, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800, + 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, + 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9, + 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012, + 0x8108, 0x8210, 0x1f04, 0xa6c6, 0x20a9, 0x0004, 0x2009, 0x1801, + 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa6d0, 0xa860, 0x20e0, + 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001, + 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069, + 0x0200, 0x080c, 0xa67b, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240, + 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, + 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, + 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098, + 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, + 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, + 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c, + 0x74e9, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x2009, 0x1804, 0x2011, + 0x0029, 0x080c, 0x2a53, 0x0010, 0x080c, 0x9e02, 0x080c, 0x86ed, + 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240, + 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071, + 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xa6ab, 0x080c, 0x9a9f, + 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, + 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f, + 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0, + 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061, + 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116, + 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, + 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, + 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104, + 0x2012, 0x8108, 0x8210, 0x1f04, 0xa787, 0x20a9, 0x0002, 0x2009, + 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa791, 0x00d6, + 0x0016, 0x2069, 0x0200, 0x080c, 0xa67b, 0x001e, 0x00de, 0x2071, + 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104, + 0x2012, 0x8108, 0x8210, 0x1f04, 0xa7a7, 0x2009, 0x0008, 0x4002, + 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008, + 0x2012, 0x8210, 0x1f04, 0xa7b8, 0x00ce, 0x60c3, 0x004c, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x080c, 0x9e02, 0x080c, 0x86ed, 0x00de, + 0x009e, 0x002e, 0x001e, 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, 0x00f6, 0x00e6, 0x00d6, 0x00c6, + 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, + 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa873, 0x7030, 0x9c06, + 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa84a, 0x080c, + 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, + 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, + 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, + 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, + 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, + 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, + 0xca3c, 0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c, + 0xb5b5, 0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118, + 0x080c, 0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168, + 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c, + 0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0xa7fb, 0x2c78, 0x600c, + 0x2060, 0x0804, 0xa7fb, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e, + 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe26c, 0x08f0, 0x00f6, + 0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936, + 0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001, + 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001, + 0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084, + 0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d7d, + 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, + 0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156, + 0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19e7, 0x0469, 0x0106, + 0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044, + 0xd0fc, 0x01d8, 0x1f04, 0xa8cf, 0x080c, 0x0d7d, 0x080c, 0xa896, + 0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x95de, + 0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c, + 0x9c06, 0x190c, 0x0d7d, 0x080c, 0x963b, 0x010e, 0x1919, 0x00ee, + 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, + 0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808, + 0xd0a4, 0x190c, 0x0d76, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000, + 0x11b8, 0x0012, 0x012e, 0x0005, 0xa91c, 0xa95a, 0xa981, 0xa9b8, + 0xa9c8, 0xa9d9, 0xa9e8, 0xa9f6, 0xaa23, 0xaa27, 0xa91c, 0xa91c, + 0xa91c, 0xa91c, 0xa91c, 0xa91c, 0x080c, 0x0d7d, 0x012e, 0x0005, + 0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a, + 0x0016, 0x1a0c, 0x0d7d, 0x0012, 0x012e, 0x0005, 0xa941, 0xa943, + 0xa941, 0xa949, 0xa941, 0xa941, 0xa941, 0xa941, 0xa941, 0xa943, + 0xa941, 0xa943, 0xa941, 0xa943, 0xa941, 0xa941, 0xa941, 0xa943, + 0xa941, 0x080c, 0x0d7d, 0x2009, 0x0013, 0x080c, 0xac8c, 0x012e, + 0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x88c1, + 0x080c, 0xabed, 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0xac8c, + 0x012e, 0x0005, 0x080c, 0xa896, 0x2001, 0x1a0c, 0x2003, 0x0000, + 0x7030, 0x9065, 0x090c, 0x0d7d, 0x7034, 0x9092, 0x00c8, 0x1258, + 0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110, 0x7007, 0x0000, + 0x781f, 0x0808, 0x0040, 0x080c, 0xe717, 0x6003, 0x0001, 0x2009, + 0x0014, 0x080c, 0xac8c, 0x781f, 0x0100, 0x080c, 0xa8b2, 0x012e, + 0x0005, 0x080c, 0xa896, 0x714c, 0x81ff, 0x1128, 0x2011, 0x1a0f, + 0x2013, 0x0000, 0x0438, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530, + 0x12f0, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, + 0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, + 0x0088, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, + 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x0018, 0x706c, + 0xc085, 0x706e, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005, + 0x080c, 0xa896, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a, + 0x080c, 0xac8c, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005, + 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c, + 0xa896, 0x080c, 0x1d60, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e, + 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0xa896, + 0x080c, 0x1da8, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e, 0x0005, + 0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186, + 0x0003, 0x0110, 0x080c, 0x96a1, 0x012e, 0x0005, 0x00f6, 0x703c, + 0x9086, 0x0002, 0x0528, 0x704c, 0x907d, 0x0510, 0x7844, 0xc0bc, + 0x7846, 0x7820, 0x9086, 0x0009, 0x0118, 0x080c, 0x9d5c, 0x00c0, + 0x7828, 0xd0fc, 0x1118, 0x080c, 0x9cdb, 0x0090, 0x2001, 0x1837, + 0x2004, 0x9084, 0x0028, 0x1130, 0x2001, 0x197c, 0x2004, 0x9086, + 0xaaaa, 0x1120, 0x2001, 0x0387, 0x2003, 0x1000, 0x080c, 0x9c60, + 0x00fe, 0x012e, 0x0005, 0x080c, 0x758a, 0x012e, 0x0005, 0x080c, + 0x0d7d, 0x0005, 0x00e6, 0x2071, 0x19e7, 0x6044, 0xc0bc, 0x6046, + 0xd0fc, 0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c, + 0xa118, 0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138, + 0x2001, 0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c, + 0xa34e, 0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c, + 0xa20e, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212, + 0x600f, 0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005, + 0x0026, 0x7020, 0x9c06, 0x1178, 0x080c, 0xa20e, 0x6044, 0xc0fc, + 0x6046, 0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010, + 0x7222, 0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830, + 0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c, + 0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x2069, + 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0110, 0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad, + 0x780a, 0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005, + 0x0016, 0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382, + 0x2004, 0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016, + 0x0036, 0x080c, 0xa8fc, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200, + 0x2200, 0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e, + 0x002e, 0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x9aea, 0x7a14, + 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, + 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, + 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x74e9, + 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac, + 0x0108, 0xc39d, 0x730e, 0x080c, 0x87bb, 0x20a9, 0x0006, 0x2011, + 0xfff4, 0x2019, 0xfff5, 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70, + 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, + 0xaafd, 0x60c3, 0x0020, 0x080c, 0x9e02, 0x015e, 0x00de, 0x0005, + 0x0156, 0x080c, 0x9aea, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, + 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, + 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, + 0x0001, 0x2011, 0x19bd, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, + 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x2001, 0x181f, 0x2004, 0x7022, 0x2001, 0x1820, 0x2004, 0x7026, + 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, + 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, + 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0006, + 0x2001, 0x1837, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, + 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, + 0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x0005, 0x080c, 0x336d, + 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012, + 0x2009, 0x007e, 0x080c, 0x6625, 0xb85c, 0xc0ac, 0xb85e, 0x00ce, + 0x00be, 0x001e, 0x0005, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140, + 0x2001, 0x0812, 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffd4, + 0x2071, 0x1800, 0x7074, 0x7056, 0x705b, 0x1ddc, 0x0005, 0x00e6, + 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010, + 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, + 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, + 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554, + 0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, + 0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, + 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, + 0x7068, 0x9502, 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005, + 0x705b, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, + 0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0d7d, 0x9006, + 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, + 0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e, + 0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x602a, 0x6046, 0x6042, + 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, 0x9006, 0x600e, + 0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062, + 0x604a, 0x6046, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, + 0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, 0x190c, + 0x1a6a, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, 0x0006, 0x9082, + 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xe524, 0x604b, + 0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, 0x000e, + 0x0005, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2001, 0x19fa, + 0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118, + 0x003e, 0x080c, 0xa34e, 0x010e, 0x190c, 0xa8b2, 0x0005, 0x00e6, + 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, + 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, + 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, + 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, + 0xaca0, 0xacaa, 0xacc5, 0xace0, 0xcf9c, 0xcfb9, 0xcfd4, 0xaca0, + 0xacaa, 0x8f9a, 0xacfc, 0xaca0, 0xaca0, 0xaca0, 0xaca0, 0xaca0, + 0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x95de, + 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, + 0x0013, 0x006e, 0x0005, 0xacc3, 0xb421, 0xb5fc, 0xacc3, 0xb692, + 0xafc5, 0xacc3, 0xacc3, 0xb3a3, 0xbbfa, 0xacc3, 0xacc3, 0xacc3, + 0xacc3, 0xacc3, 0xacc3, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2, + 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xacde, 0xc205, + 0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xc1aa, 0xc388, + 0xacde, 0xc242, 0xc2c6, 0xc242, 0xc2c6, 0xacde, 0x080c, 0x0d7d, + 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7d, 0x6000, 0x0002, 0xacfa, + 0xbc44, 0xbcdb, 0xbe5b, 0xbeca, 0xacfa, 0xacfa, 0xacfa, 0xbc13, + 0xc12b, 0xc12e, 0xacfa, 0xacfa, 0xacfa, 0xacfa, 0xc15e, 0xacfa, + 0xacfa, 0xacfa, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, + 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xad15, 0xad15, 0xad53, + 0xadf2, 0xae72, 0xad15, 0xad15, 0xad15, 0xad17, 0xad15, 0xad15, + 0xad15, 0xad15, 0xad15, 0xad15, 0xad15, 0x080c, 0x0d7d, 0x9186, + 0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d7d, 0x0096, 0x601c, + 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, + 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, + 0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, + 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x080c, + 0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x0005, 0x6010, 0x00b6, + 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xae94, 0x080c, 0xcf6a, + 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, + 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, + 0xac78, 0xc4fc, 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, 0xadba, 0xadba, 0xadb5, + 0xadb8, 0xadba, 0xadb2, 0xada5, 0xada5, 0xada5, 0xada5, 0xada5, + 0xada5, 0xada5, 0xada5, 0xada5, 0xada5, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, + 0x080c, 0x0d7d, 0x080c, 0xb84f, 0x0028, 0x080c, 0xb934, 0x0010, + 0x080c, 0xba2a, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, + 0x2c00, 0xa896, 0x000e, 0x080c, 0xaf52, 0x0530, 0xa804, 0xa80e, + 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, + 0xadd8, 0x2031, 0x0000, 0x2041, 0x1298, 0x080c, 0xb112, 0x0160, + 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, + 0x009e, 0x00de, 0x0804, 0xabed, 0x2001, 0x002c, 0x900e, 0x080c, + 0xafb8, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, + 0x91b2, 0x0047, 0x0a0c, 0x0d7d, 0x91b2, 0x0050, 0x1a0c, 0x0d7d, + 0x9182, 0x0047, 0x0042, 0x080c, 0xaaa8, 0x0120, 0x9086, 0x0002, + 0x0904, 0xad53, 0x0005, 0xae14, 0xae14, 0xae16, 0xae48, 0xae14, + 0xae14, 0xae14, 0xae14, 0xae5b, 0x080c, 0x0d7d, 0x00d6, 0x0016, + 0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, + 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, + 0x0000, 0x900e, 0x080c, 0xafb8, 0x080c, 0xabed, 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, 0x963b, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, + 0x0120, 0xa87b, 0x0006, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c, + 0xabed, 0x0804, 0x96a0, 0x080c, 0x963b, 0x080c, 0x31e7, 0x080c, + 0xcf67, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0120, + 0xa87b, 0x0029, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c, 0xabed, + 0x0804, 0x96a0, 0x9182, 0x0047, 0x0002, 0xae82, 0xae84, 0xae82, + 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, + 0xae82, 0xae84, 0x080c, 0x0d7d, 0x00d6, 0x0096, 0x601f, 0x0000, + 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6d80, + 0x009e, 0x00de, 0x0804, 0xabed, 0x0026, 0x0036, 0x0056, 0x0066, + 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, + 0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, + 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188, + 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, + 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, + 0x1228, 0x2011, 0x001f, 0x080c, 0xc40b, 0x04c0, 0x2130, 0x2009, + 0x0034, 0x2011, 0x001f, 0x080c, 0xc40b, 0x96b2, 0x0034, 0xb004, + 0x904d, 0x0110, 0x080c, 0x0fec, 0x080c, 0x103a, 0x01d0, 0x8528, + 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, + 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc40b, 0x00b8, 0x96b2, + 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc40b, + 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, 0x6d80, 0x000e, 0x2048, + 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, + 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x103a, + 0x000e, 0x090c, 0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, + 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, + 0x1800, 0x7990, 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, 0x6d80, 0x009e, 0x00fe, + 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, + 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, + 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, + 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, + 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e, + 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, + 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, + 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, + 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, + 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, + 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, + 0x2e98, 0x2310, 0x84ff, 0x0904, 0xaf67, 0x0804, 0xaf69, 0x9085, + 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, + 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, + 0x6d74, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, + 0x080c, 0xabed, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x080c, + 0xabed, 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, 0xc838, + 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, + 0x0804, 0xabed, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, + 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8d7, 0x0000, 0x00be, 0x6014, + 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, + 0x080c, 0xabed, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, + 0x0cc8, 0x0006, 0x0016, 0x080c, 0xcf52, 0x0188, 0x6014, 0x9005, + 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009, + 0x0022, 0x080c, 0xb3f9, 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, 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, 0xabc9, 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, 0xc3e7, 0x080c, 0xc814, 0x0140, - 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, - 0x080c, 0xabc9, 0x001e, 0x009e, 0x0005, 0x0016, 0x2009, 0x0000, - 0x7030, 0x9086, 0x0200, 0x0110, 0x2009, 0x0001, 0x0096, 0x6014, - 0x904d, 0x090c, 0x0d7d, 0xa97a, 0x080c, 0x6d70, 0x009e, 0x080c, - 0xabc9, 0x001e, 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, 0xc3e7, 0x009e, 0x080c, 0xc814, 0x0148, - 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, - 0x0103, 0x080c, 0xabc9, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, - 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xb591, 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, 0x127e, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, - 0x080c, 0x103a, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, - 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, - 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x1124, 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, 0x604b, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, - 0xcea6, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, - 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0xabc9, - 0x0020, 0x0039, 0x0010, 0x080c, 0xb20a, 0x002e, 0x00de, 0x00ee, - 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xb1e9, - 0x918e, 0x0016, 0x1904, 0xb208, 0x700c, 0x908c, 0xff00, 0x9186, - 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0xb1c3, 0x89ff, 0x1138, - 0x6800, 0x9086, 0x000f, 0x0904, 0xb1a5, 0x0804, 0xb206, 0x6808, - 0x9086, 0xffff, 0x1904, 0xb1eb, 0xa87c, 0x9084, 0x0060, 0x9086, - 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0xb1eb, 0x6824, - 0xd0b4, 0x1904, 0xb1eb, 0x080c, 0xca03, 0x6864, 0xa882, 0xa87c, - 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, - 0x000a, 0x080c, 0x9135, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, - 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xc53a, 0x00ce, - 0x0804, 0xb206, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x60b4, - 0x0010, 0x080c, 0x64b8, 0x00ce, 0x1904, 0xb1eb, 0x00c6, 0x2d60, - 0x080c, 0xabc9, 0x00ce, 0x0804, 0xb206, 0x00c6, 0x080c, 0xac3b, - 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xcca8, 0x6023, - 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xabc9, 0x00ce, 0x080c, - 0xac68, 0x00ce, 0x0804, 0xb206, 0x2001, 0x1988, 0x2004, 0x684a, - 0x00ce, 0x0804, 0xb206, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, - 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, - 0xa87b, 0x0003, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b, - 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce, 0x0430, - 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1988, 0x2004, 0x684a, - 0x00e8, 0x04c1, 0x00e8, 0x89ff, 0x090c, 0x0d7d, 0x00c6, 0x00d6, - 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6b86, 0x080c, - 0xca03, 0x080c, 0xac04, 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c, - 0x080c, 0x6749, 0x00be, 0x002e, 0x00de, 0x00ce, 0x080c, 0xabc9, - 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1988, 0x2004, - 0x684a, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, - 0x080c, 0xe4f9, 0x080c, 0x8890, 0x080c, 0xabc9, 0x00ce, 0x080c, - 0xabc9, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, - 0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x684a, 0x0804, 0xb284, - 0x00c6, 0x2d60, 0x080c, 0xc412, 0x00ce, 0x6804, 0x9086, 0x0050, - 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, - 0x2009, 0x8023, 0x080c, 0x91ed, 0x00ce, 0x04f0, 0x6800, 0x9086, - 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0d7d, 0x6800, 0x9086, 0x0004, - 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, - 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, - 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, - 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, - 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, - 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, - 0xcb92, 0x080c, 0x966f, 0x0010, 0x080c, 0xabc9, 0x004e, 0x003e, - 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, - 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xb2ef, - 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, - 0xb2ef, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, - 0x0007, 0x0904, 0xb2ef, 0x9286, 0x0002, 0x0904, 0xb2ef, 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, 0xc814, 0x090c, 0x0d7d, - 0xa87b, 0x0003, 0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce, - 0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004, 0x704a, 0x080c, - 0xabc9, 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, 0xbb9e, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xb35e, - 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, - 0x0006, 0x20a9, 0x0004, 0x080c, 0xbb9e, 0x002e, 0x003e, 0x015e, - 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, - 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, - 0xafd9, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x127e, 0x080c, 0xb0ee, 0x0130, 0x00fe, 0x009e, 0x080c, - 0xabc9, 0x00be, 0x0005, 0x080c, 0xb591, 0x0cb8, 0x2b78, 0x00f6, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00fe, 0x00c6, 0x080c, 0xab73, - 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, - 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x656e, 0x080c, 0x659a, - 0x080c, 0x91f4, 0x080c, 0x966f, 0x00ce, 0x0804, 0xb331, 0x2100, - 0x91b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b2, 0x0040, 0x1a04, 0xb3e7, - 0x0002, 0xb3d5, 0xb3d5, 0xb3cb, 0xb3d5, 0xb3d5, 0xb3d5, 0xb3c9, - 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3d5, 0xb3c9, 0xb3d5, 0xb3d5, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3c9, 0xb3cb, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3c9, 0xb3c9, 0xb3c9, 0xb3d5, 0xb3d5, 0xb3c9, 0xb3c9, 0xb3c9, - 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3d5, 0xb3c9, - 0xb3c9, 0x080c, 0x0d7d, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8d4, - 0xc08c, 0xb8d6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, - 0x9186, 0x0032, 0x0118, 0x080c, 0x91f4, 0x0010, 0x080c, 0x91ed, - 0x0126, 0x2091, 0x8000, 0x080c, 0x966f, 0x012e, 0x0005, 0x2600, - 0x0002, 0xb3d5, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3d5, 0xb3fb, 0xb3fb, - 0xb3fb, 0xb3fb, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3fb, - 0xb3fb, 0xb3fb, 0xb3fb, 0x080c, 0x0d7d, 0x6004, 0x90b2, 0x0053, - 0x1a0c, 0x0d7d, 0x91b6, 0x0013, 0x0904, 0xb4d2, 0x91b6, 0x0027, - 0x1904, 0xb47e, 0x080c, 0x95ad, 0x6004, 0x080c, 0xca18, 0x01b0, - 0x080c, 0xca29, 0x01a8, 0x908e, 0x0021, 0x0904, 0xb47b, 0x908e, - 0x0022, 0x1130, 0x080c, 0xb005, 0x0904, 0xb477, 0x0804, 0xb478, - 0x908e, 0x003d, 0x0904, 0xb47b, 0x0804, 0xb471, 0x080c, 0x3215, - 0x2001, 0x0007, 0x080c, 0x656e, 0x6010, 0x00b6, 0x2058, 0xb9a0, - 0x00be, 0x080c, 0xb591, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837, - 0x2014, 0xc285, 0x080c, 0x74d5, 0x1108, 0xc2ad, 0x2202, 0x080c, - 0xa872, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe605, - 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, - 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x6010, 0x00b6, - 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xdfc0, 0x007e, 0x003e, - 0x002e, 0x001e, 0x080c, 0xa88e, 0x080c, 0xcf43, 0x0016, 0x080c, - 0xcca0, 0x080c, 0xabc9, 0x001e, 0x080c, 0x32f5, 0x080c, 0x966f, - 0x0030, 0x080c, 0xcca0, 0x080c, 0xabc9, 0x080c, 0x966f, 0x0005, - 0x080c, 0xb591, 0x0cb0, 0x080c, 0xb5cd, 0x0c98, 0x9186, 0x0015, - 0x0118, 0x9186, 0x0016, 0x1140, 0x080c, 0xaa84, 0x0d80, 0x9086, - 0x0002, 0x0904, 0xb5d8, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c, - 0x95ad, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb005, 0x09f8, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x080c, 0xca18, 0x1190, 0x080c, - 0x3215, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb591, - 0x9186, 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, - 0x0800, 0x080c, 0xca29, 0x1120, 0x080c, 0xb591, 0x0804, 0xb471, - 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, - 0x2079, 0x0000, 0x080c, 0x359e, 0x00fe, 0x00ee, 0x0804, 0xb471, - 0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xb591, - 0x0804, 0xb471, 0x90b2, 0x0040, 0x1a04, 0xb571, 0x2008, 0x0002, - 0xb51a, 0xb51b, 0xb51e, 0xb521, 0xb524, 0xb527, 0xb518, 0xb518, - 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, - 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, - 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb52a, 0xb533, - 0xb518, 0xb534, 0xb533, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, - 0xb533, 0xb533, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, - 0xb518, 0xb518, 0xb55c, 0xb533, 0xb518, 0xb52f, 0xb518, 0xb518, - 0xb518, 0xb530, 0xb518, 0xb518, 0xb518, 0xb533, 0xb557, 0xb518, - 0x080c, 0x0d7d, 0x00c0, 0x2001, 0x000b, 0x00e8, 0x2001, 0x0003, - 0x00d0, 0x2001, 0x0005, 0x00b8, 0x2001, 0x0001, 0x00a0, 0x2001, - 0x0009, 0x0088, 0x6003, 0x0005, 0x080c, 0x966f, 0x0058, 0x0018, - 0x0010, 0x080c, 0x656e, 0x04b8, 0x080c, 0xcf46, 0x6003, 0x0004, - 0x080c, 0x966f, 0x0005, 0x080c, 0x656e, 0x6003, 0x0002, 0x0036, - 0x2019, 0x1852, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1986, - 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, - 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x966f, 0x0c18, 0x080c, - 0xcca0, 0x080c, 0xabc9, 0x08f0, 0x00e6, 0x00f6, 0x2071, 0x189e, - 0x2079, 0x0000, 0x080c, 0x359e, 0x00fe, 0x00ee, 0x080c, 0x95ad, - 0x080c, 0xabc9, 0x0878, 0x6003, 0x0002, 0x080c, 0xcf46, 0x0804, - 0x966f, 0x2600, 0x2008, 0x0002, 0xb588, 0xb56b, 0xb586, 0xb56b, - 0xb56b, 0xb586, 0xb586, 0xb586, 0xb586, 0xb56b, 0xb586, 0xb56b, - 0xb586, 0xb56b, 0xb586, 0xb586, 0xb586, 0xb586, 0x080c, 0x0d7d, - 0x0096, 0x6014, 0x2048, 0x080c, 0x6d70, 0x009e, 0x080c, 0xabc9, - 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xc814, 0x0568, - 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, - 0x0056, 0x1148, 0x080c, 0x5474, 0x0130, 0x2001, 0x0000, 0x900e, - 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, - 0x080c, 0xce0d, 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, 0x0d7d, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xcd2c, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xcd75, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xcda1, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xccc2, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xca62, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xcaa3, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x001f, 0x1120, 0x080c, 0xafae, - 0x0804, 0xb65d, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xb2f5, - 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xafe6, 0x04a8, - 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb10c, 0x0470, 0x6604, - 0x96b6, 0x0039, 0x1118, 0x080c, 0xb28a, 0x0438, 0x6604, 0x96b6, - 0x003d, 0x1118, 0x080c, 0xb01e, 0x0400, 0x6604, 0x96b6, 0x0044, - 0x1118, 0x080c, 0xb05a, 0x00c8, 0x6604, 0x96b6, 0x0049, 0x1118, - 0x080c, 0xb09b, 0x0090, 0x6604, 0x96b6, 0x0041, 0x1118, 0x080c, - 0xb085, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, - 0x0016, 0x1128, 0x00be, 0x0804, 0xb8b7, 0x00be, 0x0005, 0x080c, - 0xac85, 0x0cd8, 0xb67a, 0xb67d, 0xb67a, 0xb6c4, 0xb67a, 0xb82b, - 0xb8c4, 0xb67a, 0xb67a, 0xb88d, 0xb67a, 0xb8a3, 0x0096, 0x601f, - 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, - 0x0804, 0xabc9, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, - 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xdf91, 0x11b0, 0x6010, - 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, - 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x656e, - 0x080c, 0x3215, 0x080c, 0xabc9, 0x0098, 0x2001, 0x000a, 0x080c, - 0x656e, 0x080c, 0x3215, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, - 0x91f4, 0x080c, 0x966f, 0x0020, 0x2001, 0x0001, 0x080c, 0xb7fb, - 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, - 0x655a, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, - 0x080c, 0x659a, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, - 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xb7d2, 0x6010, 0x2058, - 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xba11, 0x0804, 0xb736, - 0x080c, 0xba06, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, - 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, - 0xce0d, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, - 0x2001, 0x0006, 0x080c, 0x656e, 0x080c, 0x3215, 0x080c, 0xabc9, - 0x0804, 0xb7d5, 0x080c, 0xb7e3, 0x6014, 0x9005, 0x0190, 0x2048, - 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xce0d, - 0x08f8, 0x080c, 0xb7d9, 0x0160, 0x9006, 0x080c, 0x655a, 0x2001, - 0x0004, 0x080c, 0x659a, 0x2001, 0x0007, 0x080c, 0x656e, 0x08a0, - 0x2001, 0x0004, 0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0003, - 0x080c, 0x91f4, 0x080c, 0x966f, 0x0804, 0xb7d5, 0xb85c, 0xd0e4, - 0x01d8, 0x080c, 0xcc3a, 0x080c, 0x74d5, 0x0118, 0xd0dc, 0x1904, - 0xb6f8, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x196d, - 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x266f, - 0x78e2, 0x00fe, 0x0804, 0xb6f8, 0x080c, 0xcc7b, 0x2011, 0x1837, - 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe121, 0x000e, 0x1904, - 0xb6f8, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x656e, 0x9006, - 0x080c, 0x655a, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, - 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, - 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, 0x908c, 0x00ff, - 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2644, 0x00f6, - 0x2100, 0x900e, 0x080c, 0x25fb, 0x795e, 0x00fe, 0x9186, 0x0081, - 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, - 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, - 0x080c, 0x2644, 0x00f6, 0x2079, 0x1800, 0x7982, 0x2100, 0x900e, - 0x080c, 0x25fb, 0x795e, 0x00fe, 0x8108, 0x080c, 0x65bd, 0x2b00, - 0x00ce, 0x1904, 0xb6f8, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, - 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, - 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x656e, 0x6023, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, - 0x966f, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be, - 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848, - 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe65e, 0x0190, 0x2071, - 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, - 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, - 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007, - 0x080c, 0x656e, 0x080c, 0x56e7, 0x1120, 0x2001, 0x0007, 0x080c, - 0x659a, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868, - 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, - 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b00, - 0x004e, 0x003e, 0x080c, 0x3215, 0x6020, 0x9086, 0x000a, 0x1108, - 0x0005, 0x0804, 0xabc9, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, - 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xb883, 0x080c, 0x56e7, - 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, - 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x00d6, - 0x6010, 0x2058, 0x080c, 0x66b9, 0x080c, 0xb6b2, 0x00de, 0x080c, - 0xbad7, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, - 0x0006, 0x080c, 0x656e, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, - 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, - 0x2011, 0x4000, 0x080c, 0xce0d, 0x0060, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, - 0x0200, 0x009e, 0x080c, 0x3215, 0x6020, 0x9086, 0x000a, 0x0140, - 0x080c, 0xabc9, 0x0028, 0x080c, 0xb591, 0x9006, 0x080c, 0xb7fb, - 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1824, 0x2204, - 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x656e, 0x6003, - 0x0001, 0x6007, 0x0001, 0x080c, 0x91f4, 0x0804, 0x966f, 0x2001, - 0x0001, 0x0804, 0xb7fb, 0x2030, 0x2011, 0x1824, 0x2204, 0x9086, - 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, - 0x656e, 0x0804, 0xabc9, 0x2001, 0x0001, 0x0804, 0xb7fb, 0x0002, - 0xb67a, 0xb8cf, 0xb67a, 0xb910, 0xb67a, 0xb9bd, 0xb8c4, 0xb67a, - 0xb67a, 0xb9d1, 0xb67a, 0xb9e3, 0x6604, 0x9686, 0x0003, 0x0904, - 0xb82b, 0x96b6, 0x001e, 0x1110, 0x080c, 0xabc9, 0x0005, 0x00b6, - 0x00d6, 0x00c6, 0x080c, 0xb9f5, 0x11a0, 0x9006, 0x080c, 0x655a, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x2001, 0x0002, 0x080c, 0x656e, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f, - 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, - 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001, 0xb842, - 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, - 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31e4, 0x080c, 0xcf43, - 0x2001, 0x0001, 0x080c, 0xb7fb, 0x00ce, 0x00de, 0x00be, 0x0005, - 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xba03, 0x00d6, 0x2069, - 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, - 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a, 0x00de, - 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x655a, 0x2001, 0x0002, - 0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, - 0x080c, 0x966f, 0x0804, 0xb98d, 0x080c, 0xc814, 0x01b0, 0x6014, - 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, - 0x2001, 0x0002, 0x080c, 0xce67, 0x00b0, 0x6014, 0x2048, 0xa864, - 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, - 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, - 0x1110, 0x9006, 0x0c38, 0x080c, 0xb591, 0x2009, 0x026e, 0x2134, - 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b, 0x01c8, - 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, - 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190, 0x2001, - 0x0004, 0x080c, 0x656e, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, - 0x0020, 0x2001, 0x0001, 0x080c, 0xb7fb, 0x002e, 0x00be, 0x009e, - 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc814, - 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, - 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, - 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, - 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fb5, - 0x00ee, 0x0010, 0x080c, 0x31e4, 0x0860, 0x080c, 0xba03, 0x1160, - 0x2001, 0x0004, 0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0003, - 0x080c, 0x91f4, 0x0804, 0x966f, 0x080c, 0xb591, 0x9006, 0x0804, - 0xb7fb, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x656e, 0x6003, - 0x0001, 0x6007, 0x0005, 0x080c, 0x91f4, 0x0804, 0x966f, 0x2001, - 0x0001, 0x0804, 0xb7fb, 0x00f9, 0x1160, 0x2001, 0x000a, 0x080c, - 0x656e, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x91f4, 0x0804, - 0x966f, 0x2001, 0x0001, 0x0804, 0xb7fb, 0x2009, 0x026e, 0x2104, - 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, - 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, - 0x0016, 0x6110, 0x2158, 0x080c, 0x662d, 0x001e, 0x00ce, 0x00be, - 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, - 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, - 0xbaa9, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a, 0x080c, - 0x6a57, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe29e, - 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, - 0x0001, 0x080c, 0x31a3, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2fb2, - 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, - 0x32f5, 0x8108, 0x1f04, 0xba47, 0x015e, 0x00ce, 0x080c, 0xba06, - 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1837, - 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, - 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837, 0x2102, - 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181f, 0x206a, - 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820, 0x206a, 0x78ea, - 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, - 0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2644, - 0x080c, 0x74d5, 0x0170, 0x2071, 0x0260, 0x2069, 0x1982, 0x7048, - 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, - 0xcc3a, 0x0040, 0x2001, 0x0006, 0x080c, 0x656e, 0x080c, 0x3215, - 0x080c, 0xabc9, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, - 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182c, - 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, - 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, - 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x1148, - 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xbb9e, - 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, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061, 0x1ddc, - 0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04, 0xbb6a, 0x080c, - 0x8b5f, 0x0904, 0xbb63, 0x080c, 0xe2cf, 0x0904, 0xbb63, 0x6720, - 0x9786, 0x0007, 0x0904, 0xbb63, 0x2500, 0x9c06, 0x0904, 0xbb63, - 0x2400, 0x9c06, 0x0904, 0xbb63, 0x3e08, 0x9186, 0x0002, 0x1148, - 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x1590, 0x00c6, 0x6043, 0xffff, 0x6000, 0x9086, 0x0004, 0x1110, - 0x080c, 0x1a6a, 0x9786, 0x000a, 0x0148, 0x080c, 0xca29, 0x1130, - 0x00ce, 0x080c, 0xb591, 0x080c, 0xac04, 0x00e8, 0x6014, 0x2048, - 0x080c, 0xc814, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, - 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, - 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d64, 0x080c, 0xca03, - 0x080c, 0xac04, 0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1210, - 0x0804, 0xbb0a, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, - 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, - 0xe241, 0x0c30, 0x9786, 0x0009, 0x1148, 0x6000, 0x9086, 0x0004, - 0x0d08, 0x2009, 0x004c, 0x080c, 0xac68, 0x08e0, 0x9786, 0x000a, - 0x0938, 0x0820, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, - 0x1f04, 0xbb8a, 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, - 0x220c, 0x810f, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, - 0xbbc8, 0x9006, 0x0005, 0x918d, 0x0001, 0x0005, 0x6004, 0x908a, - 0x0053, 0x1a0c, 0x0d7d, 0x080c, 0xca18, 0x0120, 0x080c, 0xca29, - 0x0158, 0x0028, 0x080c, 0x3215, 0x080c, 0xca29, 0x0128, 0x080c, - 0x95ad, 0x080c, 0xabc9, 0x0005, 0x080c, 0xb591, 0x0cc0, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbc0e, - 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, - 0xbc0e, 0xbc0e, 0xbc10, 0xbc10, 0xbc10, 0xbc10, 0xbc0e, 0xbc0e, - 0xbc0e, 0xbc10, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0x080c, 0x0d7d, - 0x600b, 0xffff, 0x6003, 0x000f, 0x6106, 0x0126, 0x2091, 0x8000, - 0x080c, 0xcf46, 0x2009, 0x8000, 0x080c, 0x91ed, 0x012e, 0x0005, - 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xbc95, - 0x9186, 0x0027, 0x1520, 0x080c, 0x95ad, 0x080c, 0x31e4, 0x080c, - 0xcf43, 0x0096, 0x6114, 0x2148, 0x080c, 0xc814, 0x0198, 0x080c, - 0xca29, 0x1118, 0x080c, 0xb591, 0x0068, 0xa867, 0x0103, 0xa87b, - 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x6d70, - 0x080c, 0xca03, 0x009e, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9186, - 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0018, 0x080c, 0x0d7d, - 0x0005, 0x0002, 0xbc73, 0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc71, - 0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc8c, 0xbc8c, 0xbc8c, - 0xbc8c, 0xbc71, 0xbc8c, 0xbc71, 0xbc8c, 0xbc71, 0xbc71, 0xbc71, - 0xbc71, 0x080c, 0x0d7d, 0x080c, 0x95ad, 0x0096, 0x6114, 0x2148, - 0x080c, 0xc814, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, - 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6d70, 0x080c, 0xca03, - 0x009e, 0x080c, 0xabc9, 0x0005, 0x080c, 0x95ad, 0x080c, 0xca29, - 0x090c, 0xb591, 0x080c, 0xabc9, 0x0005, 0x0002, 0xbcaf, 0xbcad, - 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, - 0xbcad, 0xbcb1, 0xbcb1, 0xbcb1, 0xbcb1, 0xbcad, 0xbcb3, 0xbcad, - 0xbcb1, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0x080c, 0x0d7d, 0x080c, - 0x0d7d, 0x080c, 0x0d7d, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbcd6, - 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbd0f, 0xbdfe, 0xbcd6, 0xbe0a, - 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, - 0xbcd6, 0xbcd6, 0xbe0a, 0xbcd8, 0xbcd6, 0xbe08, 0x080c, 0x0d7d, - 0x00b6, 0x0096, 0x6114, 0x2148, 0x6010, 0x2058, 0xb800, 0xd0bc, - 0x1508, 0xa87b, 0x0000, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87c, - 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f, 0x080c, - 0x6b86, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, - 0xb8d0, 0x9005, 0x0110, 0x080c, 0x6749, 0x080c, 0xabc9, 0x009e, - 0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0, 0xa838, 0xa934, 0x9105, - 0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c, 0xcb59, 0x0c80, 0x00b6, - 0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, - 0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590, 0x6010, 0x2058, 0xb800, - 0xd0bc, 0x1904, 0xbded, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, - 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f, - 0x080c, 0x6b86, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, - 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c, 0x6749, 0x601c, 0xd0fc, - 0x1148, 0x7044, 0xd0e4, 0x1904, 0xbdd1, 0x080c, 0xabc9, 0x009e, - 0x00be, 0x0005, 0x2009, 0x0211, 0x210c, 0x080c, 0x0d7d, 0x968c, - 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xbdd5, - 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, 0xbd1b, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, - 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, - 0x2011, 0x0025, 0x080c, 0xc3e7, 0x003e, 0xd6cc, 0x0904, 0xbd30, - 0x7154, 0xa98a, 0x81ff, 0x0904, 0xbd30, 0x9192, 0x0021, 0x1278, - 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc3e7, 0x2011, - 0x0205, 0x2013, 0x0000, 0x080c, 0xced3, 0x0804, 0xbd30, 0xa868, - 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, - 0x080c, 0xc386, 0x00ae, 0x080c, 0xced3, 0x080c, 0xc3d7, 0x0804, - 0xbd32, 0x080c, 0xcb1c, 0x0804, 0xbd47, 0xa87c, 0xd0ac, 0x0904, - 0xbd58, 0xa880, 0xd0bc, 0x1904, 0xbd58, 0x7348, 0xa838, 0x9306, - 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xbd58, 0xd6d4, 0x0190, - 0xab38, 0x9305, 0x0904, 0xbd58, 0x0068, 0xa87c, 0xd0ac, 0x0904, - 0xbd23, 0xa838, 0xa934, 0x9105, 0x0904, 0xbd23, 0xa880, 0xd0bc, - 0x1904, 0xbd23, 0x080c, 0xcb59, 0x0804, 0xbd47, 0x00f6, 0x2079, - 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x00fe, 0x0021, 0x0005, - 0x0011, 0x0005, 0x0005, 0x0096, 0x6003, 0x0002, 0x6007, 0x0043, - 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, 0x009e, 0x0005, 0x2130, - 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213, - 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac46, 0xab4a, 0xae36, - 0xad3a, 0x6044, 0xd0fc, 0x190c, 0xa89b, 0x604b, 0x0000, 0x080c, - 0x1c30, 0x1118, 0x6144, 0x080c, 0x9219, 0x009e, 0x0005, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbe56, - 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, - 0xbe56, 0xbe58, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe69, 0xbe56, - 0xbe56, 0xbe56, 0xbe56, 0xbe8d, 0xbe56, 0xbe56, 0x080c, 0x0d7d, - 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x95ad, 0x2019, 0x0001, - 0x080c, 0xa0f4, 0x6003, 0x0002, 0x080c, 0xcf4b, 0x080c, 0x960a, - 0x0005, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x95ad, 0x2019, - 0x0001, 0x080c, 0xa0f4, 0x080c, 0x960a, 0x080c, 0x31e4, 0x080c, - 0xcf43, 0x0096, 0x6114, 0x2148, 0x080c, 0xc814, 0x0150, 0xa867, - 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, - 0xca03, 0x009e, 0x080c, 0xabc9, 0x0005, 0x080c, 0x0d7d, 0xa87b, - 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, - 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a78, 0x2104, 0x8000, - 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0057, - 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbec5, 0xbec5, - 0xbec5, 0xbec5, 0xbec5, 0xbec7, 0xbec5, 0xbec5, 0xbf84, 0xbec5, - 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, - 0xbec5, 0xc0c8, 0xbec5, 0xc0d2, 0xbec5, 0x080c, 0x0d7d, 0x601c, - 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, 0x0120, 0xc084, 0x601e, - 0x0804, 0xbcb7, 0x6114, 0x0096, 0x2148, 0xa87c, 0xc0e5, 0xa87e, - 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, - 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0xb676, - 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, - 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, - 0xbf7d, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, - 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xbf7d, 0x9686, 0x0100, - 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, - 0x103a, 0x090c, 0x0d7d, 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, 0xc3e7, 0x003e, 0xd6cc, 0x01e8, - 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, - 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc3e7, 0x2011, 0x0205, - 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, - 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc386, 0x080c, 0x1a48, 0x009e, - 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988, 0x2004, 0x604a, - 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, - 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, 0xcf54, 0x0904, 0xc0c3, - 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x1500, 0xd1cc, 0x0904, 0xc082, 0xa978, 0xa868, 0xd0fc, 0x0904, - 0xc043, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, - 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xc011, 0x9086, - 0x0028, 0x1904, 0xbffd, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, - 0xc019, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, - 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, - 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, - 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, - 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x601c, 0xc0fc, 0x601e, - 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, - 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, - 0x009e, 0x080c, 0xcb59, 0x0804, 0xc0c3, 0xd1dc, 0x0158, 0xa87b, - 0x0015, 0xb07b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xb174, 0xc1dc, - 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, - 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, - 0xbe8f, 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, 0xced3, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fec, - 0x001e, 0x0804, 0xc0af, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184, - 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b, - 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015, - 0xb07b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xb174, 0xc1dc, 0xb176, - 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, - 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f, - 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c, - 0x0fec, 0x009e, 0x080c, 0xced3, 0xa974, 0x0016, 0x080c, 0xc3d7, - 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, - 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0, - 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xa974, - 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050, - 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, - 0x190c, 0xbe8f, 0xa974, 0x0016, 0x080c, 0x6b86, 0x001e, 0x6010, - 0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, - 0x9005, 0x0120, 0x0016, 0x080c, 0x6749, 0x001e, 0x00be, 0xd1e4, - 0x1120, 0x080c, 0xabc9, 0x009e, 0x0005, 0x080c, 0xcb1c, 0x0cd8, - 0x6114, 0x0096, 0x2148, 0xa97c, 0x080c, 0xcf54, 0x190c, 0x1a56, - 0x009e, 0x0005, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, - 0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000, 0xa867, 0x0103, 0x00b6, - 0x6010, 0x2058, 0xa834, 0xa938, 0x9115, 0x11a0, 0x080c, 0x6b86, - 0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c, - 0x6749, 0x080c, 0xabc9, 0x00be, 0x009e, 0x0005, 0xa87c, 0xc0dc, - 0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120, 0xa834, 0x080c, 0xbe8f, - 0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c, 0xcb59, 0x0c60, 0x080c, - 0x95ad, 0x0010, 0x080c, 0x960a, 0x601c, 0xd084, 0x0110, 0x080c, - 0x1a6a, 0x080c, 0xc814, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, - 0xca29, 0x1118, 0x080c, 0xb591, 0x00a0, 0xa867, 0x0103, 0x2009, - 0x180c, 0x210c, 0xd18c, 0x1198, 0xd184, 0x1170, 0x6108, 0xa97a, - 0x918e, 0x0029, 0x1110, 0x080c, 0xe5f6, 0xa877, 0x0000, 0x080c, - 0x6d70, 0x009e, 0x0804, 0xac04, 0xa87b, 0x0004, 0x0cb0, 0xa87b, - 0x0004, 0x0c98, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc15b, - 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, - 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc17f, 0xc159, - 0xc159, 0x080c, 0x0d7d, 0x080c, 0x56db, 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, 0x6d70, 0x009e, 0x0804, 0xabc9, 0x080c, - 0x56db, 0x0dd8, 0x6014, 0x900e, 0x9016, 0x0c10, 0x9182, 0x0085, - 0x0002, 0xc198, 0xc196, 0xc196, 0xc1a4, 0xc196, 0xc196, 0xc196, - 0xc196, 0xc196, 0xc196, 0xc196, 0xc196, 0xc196, 0x080c, 0x0d7d, - 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0x8020, - 0x080c, 0x91ed, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, - 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xc802, 0x01a0, - 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, - 0x1158, 0x00c6, 0x2d60, 0x080c, 0xc412, 0x00ce, 0x0128, 0x6803, - 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, - 0x2009, 0x8020, 0x080c, 0x91ed, 0x9280, 0x0004, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, - 0x2260, 0x080c, 0xcb59, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, - 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, - 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085, 0x00e2, - 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7d, 0x080c, - 0x95ad, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0140, 0xa867, - 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6d70, 0x009e, - 0x080c, 0xac04, 0x0804, 0x966f, 0xc219, 0xc21b, 0xc21b, 0xc219, - 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, - 0xc219, 0x080c, 0x0d7d, 0x080c, 0xac04, 0x0005, 0x9186, 0x0013, - 0x1130, 0x6004, 0x9082, 0x0085, 0x2008, 0x0804, 0xc26a, 0x9186, - 0x0027, 0x1558, 0x080c, 0x95ad, 0x080c, 0x31e4, 0x080c, 0xcf43, - 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0150, 0xa867, 0x0103, - 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6d70, 0x080c, 0xca03, - 0x009e, 0x080c, 0xabc9, 0x0005, 0x9186, 0x0089, 0x0118, 0x9186, - 0x008a, 0x1140, 0x080c, 0xaa84, 0x0128, 0x9086, 0x000c, 0x0904, - 0xc2a2, 0x0000, 0x080c, 0xac85, 0x0c70, 0x9186, 0x0014, 0x1d60, - 0x080c, 0x95ad, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0d00, - 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, - 0xa882, 0x0890, 0x0002, 0xc27a, 0xc278, 0xc278, 0xc278, 0xc278, - 0xc278, 0xc28e, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, - 0x080c, 0x0d7d, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, - 0x1987, 0x2004, 0x601a, 0x6003, 0x000c, 0x0005, 0x6034, 0x908c, + 0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, + 0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, + 0x0103, 0x080c, 0xabed, 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, + 0xc40b, 0x080c, 0xc838, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, + 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x001e, 0x009e, + 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, + 0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa97a, + 0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x001e, 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, 0xc40b, + 0x009e, 0x080c, 0xc838, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, + 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x009e, + 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, + 0x1118, 0x080c, 0xb5b5, 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, 0x127e, 0x0019, 0x0d08, + 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x01b0, + 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, + 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, + 0x2940, 0x080c, 0x1124, 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, 0x604b, 0x0000, 0x2c68, + 0x0016, 0x2009, 0x0035, 0x080c, 0xceca, 0x001e, 0x1158, 0x622c, + 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, + 0x0006, 0x0128, 0x080c, 0xabed, 0x0020, 0x0039, 0x0010, 0x080c, + 0xb22e, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, + 0x9186, 0x0015, 0x0904, 0xb20d, 0x918e, 0x0016, 0x1904, 0xb22c, + 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, + 0x1904, 0xb1e7, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, + 0xb1c9, 0x0804, 0xb22a, 0x6808, 0x9086, 0xffff, 0x1904, 0xb20f, + 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, + 0x9105, 0x1904, 0xb20f, 0x6824, 0xd0b4, 0x1904, 0xb20f, 0x080c, + 0xca27, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, + 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x9166, 0xa884, + 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, + 0x2d60, 0x080c, 0xc55e, 0x00ce, 0x0804, 0xb22a, 0x00c6, 0xa868, + 0xd0fc, 0x1118, 0x080c, 0x60bb, 0x0010, 0x080c, 0x64bf, 0x00ce, + 0x1904, 0xb20f, 0x00c6, 0x2d60, 0x080c, 0xabed, 0x00ce, 0x0804, + 0xb22a, 0x00c6, 0x080c, 0xac5f, 0x0198, 0x6017, 0x0000, 0x6810, + 0x6012, 0x080c, 0xcccc, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, + 0x080c, 0xabed, 0x00ce, 0x080c, 0xac8c, 0x00ce, 0x0804, 0xb22a, + 0x2001, 0x1988, 0x2004, 0x684a, 0x00ce, 0x0804, 0xb22a, 0x7008, + 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, + 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xcf0c, + 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, + 0x080c, 0x921e, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00, 0x1138, + 0x2001, 0x1988, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8, 0x89ff, + 0x090c, 0x0d7d, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, + 0x0003, 0x080c, 0x6b96, 0x080c, 0xca27, 0x080c, 0xac28, 0x0026, + 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x6750, 0x00be, 0x002e, + 0x00de, 0x00ce, 0x080c, 0xabed, 0x009e, 0x0005, 0x9186, 0x0015, + 0x1128, 0x2001, 0x1988, 0x2004, 0x684a, 0x0068, 0x918e, 0x0016, + 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xe524, 0x080c, 0x88c1, + 0x080c, 0xabed, 0x00ce, 0x080c, 0xabed, 0x0005, 0x0026, 0x0036, + 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988, + 0x2004, 0x684a, 0x0804, 0xb2a8, 0x00c6, 0x2d60, 0x080c, 0xc436, + 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, + 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x921e, + 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, + 0x0d7d, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, + 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, + 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, + 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, + 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, + 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, + 0x2001, 0x0005, 0x6832, 0x080c, 0xcbb6, 0x080c, 0x96a0, 0x0010, + 0x080c, 0xabed, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, + 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, + 0x00be, 0x9206, 0x1904, 0xb313, 0x700c, 0x6210, 0x00b6, 0x2258, + 0xba14, 0x00be, 0x9206, 0x1904, 0xb313, 0x6038, 0x2068, 0x6824, + 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xb313, 0x9286, + 0x0002, 0x0904, 0xb313, 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, 0xc838, 0x090c, 0x0d7d, 0xa87b, 0x0003, 0x009e, 0x080c, + 0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, + 0x8020, 0x080c, 0x921e, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, + 0x1988, 0x2004, 0x704a, 0x080c, 0xabed, 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, 0xbbc2, 0x002e, 0x003e, + 0x015e, 0x009e, 0x1904, 0xb382, 0x0096, 0x0156, 0x0036, 0x0026, + 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, + 0xbbc2, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, + 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, + 0x00fe, 0x009e, 0x00be, 0x0804, 0xaffd, 0x0096, 0x2048, 0xaa12, + 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, + 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, + 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112, + 0x0130, 0x00fe, 0x009e, 0x080c, 0xabed, 0x00be, 0x0005, 0x080c, + 0xb5b5, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x00fe, 0x00c6, 0x080c, 0xab97, 0x2f00, 0x6012, 0x6017, 0x0000, + 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, + 0x080c, 0x6575, 0x080c, 0x65a1, 0x080c, 0x9225, 0x080c, 0x96a0, + 0x00ce, 0x0804, 0xb355, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d7d, + 0x91b2, 0x0040, 0x1a04, 0xb40b, 0x0002, 0xb3f9, 0xb3f9, 0xb3ef, + 0xb3f9, 0xb3f9, 0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, + 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, + 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, + 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3f9, 0xb3f9, + 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ef, 0xb3ed, 0xb3ed, + 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9, + 0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, + 0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3ed, 0x080c, 0x0d7d, 0x0066, + 0x00b6, 0x6610, 0x2658, 0xb8d4, 0xc08c, 0xb8d6, 0x00be, 0x006e, + 0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, + 0x9225, 0x0010, 0x080c, 0x921e, 0x0126, 0x2091, 0x8000, 0x080c, + 0x96a0, 0x012e, 0x0005, 0x2600, 0x0002, 0xb3f9, 0xb3f9, 0xb41f, + 0xb3f9, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0xb3f9, 0xb41f, + 0xb3f9, 0xb41f, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0x080c, + 0x0d7d, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013, + 0x0904, 0xb4f6, 0x91b6, 0x0027, 0x1904, 0xb4a2, 0x080c, 0x95de, + 0x6004, 0x080c, 0xca3c, 0x01b0, 0x080c, 0xca4d, 0x01a8, 0x908e, + 0x0021, 0x0904, 0xb49f, 0x908e, 0x0022, 0x1130, 0x080c, 0xb029, + 0x0904, 0xb49b, 0x0804, 0xb49c, 0x908e, 0x003d, 0x0904, 0xb49f, + 0x0804, 0xb495, 0x080c, 0x321c, 0x2001, 0x0007, 0x080c, 0x6575, + 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186, + 0x007e, 0x1148, 0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x74e9, + 0x1108, 0xc2ad, 0x2202, 0x080c, 0xa896, 0x0036, 0x0026, 0x2019, + 0x0028, 0x2110, 0x080c, 0xe630, 0x002e, 0x003e, 0x0016, 0x0026, + 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x93a5, 0x0076, 0x903e, + 0x080c, 0x9277, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, + 0x080c, 0xdfeb, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xa8b2, + 0x080c, 0xcf67, 0x0016, 0x080c, 0xccc4, 0x080c, 0xabed, 0x001e, + 0x080c, 0x32fc, 0x080c, 0x96a0, 0x0030, 0x080c, 0xccc4, 0x080c, + 0xabed, 0x080c, 0x96a0, 0x0005, 0x080c, 0xb5b5, 0x0cb0, 0x080c, + 0xb5f1, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1140, + 0x080c, 0xaaa8, 0x0d80, 0x9086, 0x0002, 0x0904, 0xb5fc, 0x0c58, + 0x9186, 0x0014, 0x1d40, 0x080c, 0x95de, 0x6004, 0x908e, 0x0022, + 0x1118, 0x080c, 0xb029, 0x09f8, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x080c, 0xca3c, 0x1190, 0x080c, 0x321c, 0x6010, 0x00b6, 0x2058, + 0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186, 0x007e, 0x1128, 0x2001, + 0x1837, 0x200c, 0xc185, 0x2102, 0x0800, 0x080c, 0xca4d, 0x1120, + 0x080c, 0xb5b5, 0x0804, 0xb495, 0x6004, 0x908e, 0x0032, 0x1160, + 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5, + 0x00fe, 0x00ee, 0x0804, 0xb495, 0x6004, 0x908e, 0x0021, 0x0d40, + 0x908e, 0x0022, 0x090c, 0xb5b5, 0x0804, 0xb495, 0x90b2, 0x0040, + 0x1a04, 0xb595, 0x2008, 0x0002, 0xb53e, 0xb53f, 0xb542, 0xb545, + 0xb548, 0xb54b, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, + 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, + 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, + 0xb53c, 0xb53c, 0xb54e, 0xb557, 0xb53c, 0xb558, 0xb557, 0xb53c, + 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb557, 0xb557, 0xb53c, 0xb53c, + 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb580, 0xb557, + 0xb53c, 0xb553, 0xb53c, 0xb53c, 0xb53c, 0xb554, 0xb53c, 0xb53c, + 0xb53c, 0xb557, 0xb57b, 0xb53c, 0x080c, 0x0d7d, 0x00c0, 0x2001, + 0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, 0x2001, 0x0005, 0x00b8, + 0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, 0x0088, 0x6003, 0x0005, + 0x080c, 0x96a0, 0x0058, 0x0018, 0x0010, 0x080c, 0x6575, 0x04b8, + 0x080c, 0xcf6a, 0x6003, 0x0004, 0x080c, 0x96a0, 0x0005, 0x080c, + 0x6575, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084, + 0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a, + 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, + 0x080c, 0x96a0, 0x0c18, 0x080c, 0xccc4, 0x080c, 0xabed, 0x08f0, + 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5, + 0x00fe, 0x00ee, 0x080c, 0x95de, 0x080c, 0xabed, 0x0878, 0x6003, + 0x0002, 0x080c, 0xcf6a, 0x0804, 0x96a0, 0x2600, 0x2008, 0x0002, + 0xb5ac, 0xb58f, 0xb5aa, 0xb58f, 0xb58f, 0xb5aa, 0xb5aa, 0xb5aa, + 0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb5aa, + 0xb5aa, 0xb5aa, 0x080c, 0x0d7d, 0x0096, 0x6014, 0x2048, 0x080c, + 0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x00e6, 0x0096, 0x0026, + 0x0016, 0x080c, 0xc838, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, + 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x547b, + 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, + 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xce31, 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, 0x0d7d, 0x6604, 0x96b6, + 0x004d, 0x1120, 0x080c, 0xcd50, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x0043, 0x1120, 0x080c, 0xcd99, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x004b, 0x1120, 0x080c, 0xcdc5, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x0033, 0x1120, 0x080c, 0xcce6, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x0028, 0x1120, 0x080c, 0xca86, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x0029, 0x1120, 0x080c, 0xcac7, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x001f, 0x1120, 0x080c, 0xafd2, 0x0804, 0xb681, 0x6604, 0x96b6, + 0x0000, 0x1118, 0x080c, 0xb319, 0x04e0, 0x6604, 0x96b6, 0x0022, + 0x1118, 0x080c, 0xb00a, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118, + 0x080c, 0xb130, 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, + 0xb2ae, 0x0438, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb042, + 0x0400, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xb07e, 0x00c8, + 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xb0bf, 0x0090, 0x6604, + 0x96b6, 0x0041, 0x1118, 0x080c, 0xb0a9, 0x0058, 0x91b6, 0x0015, + 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, + 0xb8db, 0x00be, 0x0005, 0x080c, 0xaca9, 0x0cd8, 0xb69e, 0xb6a1, + 0xb69e, 0xb6e8, 0xb69e, 0xb84f, 0xb8e8, 0xb69e, 0xb69e, 0xb8b1, + 0xb69e, 0xb8c7, 0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800, + 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0xabed, 0xa001, 0xa001, + 0x0005, 0x00e6, 0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540, + 0x080c, 0xdfbc, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, + 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be, + 0x2001, 0x0006, 0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed, + 0x0098, 0x2001, 0x000a, 0x080c, 0x6575, 0x080c, 0x321c, 0x6003, + 0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0020, + 0x2001, 0x0001, 0x080c, 0xb81f, 0x00ee, 0x0005, 0x00d6, 0xb800, + 0xd084, 0x0160, 0x9006, 0x080c, 0x6561, 0x2069, 0x1847, 0x6804, + 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x65a1, 0x00de, 0x0005, + 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, + 0x1904, 0xb7f6, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, + 0x080c, 0xba35, 0x0804, 0xb75a, 0x080c, 0xba2a, 0x6010, 0x2058, + 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, + 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, + 0x900e, 0x2011, 0x4000, 0x080c, 0xce31, 0x0030, 0xa807, 0x0000, + 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6575, + 0x080c, 0x321c, 0x080c, 0xabed, 0x0804, 0xb7f9, 0x080c, 0xb807, + 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, + 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, + 0x2011, 0x4000, 0x080c, 0xce31, 0x08f8, 0x080c, 0xb7fd, 0x0160, + 0x9006, 0x080c, 0x6561, 0x2001, 0x0004, 0x080c, 0x65a1, 0x2001, + 0x0007, 0x080c, 0x6575, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6575, + 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x080c, 0x96a0, + 0x0804, 0xb7f9, 0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcc5e, 0x080c, + 0x74e9, 0x0118, 0xd0dc, 0x1904, 0xb71c, 0x2011, 0x1837, 0x2204, + 0xc0ad, 0x2012, 0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100, + 0x78e3, 0x0000, 0x080c, 0x266f, 0x78e2, 0x00fe, 0x0804, 0xb71c, + 0x080c, 0xcc9f, 0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, + 0x080c, 0xe14c, 0x000e, 0x1904, 0xb71c, 0xc0b5, 0x2012, 0x2001, + 0x0006, 0x080c, 0x6575, 0x9006, 0x080c, 0x6561, 0x00c6, 0x2001, + 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, + 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, + 0x78ea, 0x7082, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, + 0x00fe, 0x080c, 0x2644, 0x00f6, 0x2100, 0x900e, 0x080c, 0x25fb, + 0x795e, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, + 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, + 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2644, 0x00f6, 0x2079, + 0x1800, 0x7982, 0x2100, 0x900e, 0x080c, 0x25fb, 0x795e, 0x00fe, + 0x8108, 0x080c, 0x65c4, 0x2b00, 0x00ce, 0x1904, 0xb71c, 0x6012, + 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, + 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, + 0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, + 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0018, 0x2001, 0x0001, + 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, + 0xd0a4, 0x0120, 0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6, + 0x080c, 0xe689, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, + 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, + 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, + 0x9005, 0x0158, 0x2001, 0x0007, 0x080c, 0x6575, 0x080c, 0x56ee, + 0x1120, 0x2001, 0x0007, 0x080c, 0x65a1, 0x2600, 0x9005, 0x11b0, + 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036, + 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, + 0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e, 0x080c, 0x321c, + 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0xabed, 0x00b6, + 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014, + 0x1904, 0xb8a7, 0x080c, 0x56ee, 0x1170, 0x6014, 0x9005, 0x1158, + 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, + 0x4cbe, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x66c0, + 0x080c, 0xb6d6, 0x00de, 0x080c, 0xbafb, 0x1588, 0x6010, 0x2058, + 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x6575, 0x0096, + 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, + 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xce31, + 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, + 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x321c, + 0x6020, 0x9086, 0x000a, 0x0140, 0x080c, 0xabed, 0x0028, 0x080c, + 0xb5b5, 0x9006, 0x080c, 0xb81f, 0x001e, 0x002e, 0x00ee, 0x00be, + 0x0005, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, + 0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, + 0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x2030, + 0x2011, 0x1824, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, + 0x1120, 0x2001, 0x0007, 0x080c, 0x6575, 0x0804, 0xabed, 0x2001, + 0x0001, 0x0804, 0xb81f, 0x0002, 0xb69e, 0xb8f3, 0xb69e, 0xb934, + 0xb69e, 0xb9e1, 0xb8e8, 0xb69e, 0xb69e, 0xb9f5, 0xb69e, 0xba07, + 0x6604, 0x9686, 0x0003, 0x0904, 0xb84f, 0x96b6, 0x001e, 0x1110, + 0x080c, 0xabed, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xba19, + 0x11a0, 0x9006, 0x080c, 0x6561, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002, + 0x080c, 0x9225, 0x080c, 0x96a0, 0x0418, 0x2009, 0x026e, 0x2104, + 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x0170, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, + 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, + 0x080c, 0x31e7, 0x080c, 0xcf67, 0x2001, 0x0001, 0x080c, 0xb81f, + 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, + 0x080c, 0xba27, 0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168, + 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820, + 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, + 0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001, + 0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0804, 0xb9b1, + 0x080c, 0xc838, 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, + 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xce8b, + 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, + 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, + 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, + 0xb5b5, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, + 0x0520, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, + 0xff00, 0x1118, 0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168, + 0x9686, 0x0009, 0x0190, 0x2001, 0x0004, 0x080c, 0x6575, 0x2001, + 0x0028, 0x601a, 0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c, + 0xb81f, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, + 0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa864, 0x9086, 0x0139, + 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840, + 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, + 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, + 0x2071, 0x1800, 0x080c, 0x5fbc, 0x00ee, 0x0010, 0x080c, 0x31e7, + 0x0860, 0x080c, 0xba27, 0x1160, 0x2001, 0x0004, 0x080c, 0x6575, + 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x0804, 0x96a0, + 0x080c, 0xb5b5, 0x9006, 0x0804, 0xb81f, 0x0489, 0x1160, 0x2001, + 0x0008, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, + 0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x00f9, + 0x1160, 0x2001, 0x000a, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, + 0x0001, 0x080c, 0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, + 0xb81f, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, + 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, + 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, + 0x6634, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, + 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104, + 0x9085, 0x0003, 0x200a, 0x080c, 0xbacd, 0x0560, 0x2009, 0x1837, + 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6a67, 0x0158, 0x9006, 0x2020, + 0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001, 0x180c, 0x200c, 0xc195, + 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x31a6, 0x00e6, + 0x2071, 0x1800, 0x080c, 0x2fb2, 0x00ee, 0x00c6, 0x0156, 0x20a9, + 0x0781, 0x2009, 0x007f, 0x080c, 0x32fc, 0x8108, 0x1f04, 0xba6b, + 0x015e, 0x00ce, 0x080c, 0xba2a, 0x2071, 0x0260, 0x2079, 0x0200, + 0x7817, 0x0001, 0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc, + 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, + 0x0000, 0x2001, 0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, + 0x00ff, 0x2069, 0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, + 0x2069, 0x1820, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, + 0xff00, 0x001e, 0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084, + 0x00ff, 0x2008, 0x080c, 0x2644, 0x080c, 0x74e9, 0x0170, 0x2071, + 0x0260, 0x2069, 0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, + 0x680a, 0x7054, 0x680e, 0x080c, 0xcc5e, 0x0040, 0x2001, 0x0006, + 0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed, 0x001e, 0x003e, + 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, + 0x00e6, 0x0156, 0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071, + 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, + 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, + 0x000a, 0x080c, 0xbbc2, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, + 0x2019, 0x0006, 0x080c, 0xbbc2, 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, 0x19f3, 0x252c, 0x2021, + 0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7254, 0x7074, + 0x9202, 0x1a04, 0xbb8e, 0x080c, 0x8b90, 0x0904, 0xbb87, 0x080c, + 0xe2fa, 0x0904, 0xbb87, 0x6720, 0x9786, 0x0007, 0x0904, 0xbb87, + 0x2500, 0x9c06, 0x0904, 0xbb87, 0x2400, 0x9c06, 0x0904, 0xbb87, + 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff, + 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1a6a, 0x9786, 0x000a, + 0x0148, 0x080c, 0xca4d, 0x1130, 0x00ce, 0x080c, 0xb5b5, 0x080c, + 0xac28, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01a8, 0x9786, + 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, + 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, 0xa877, 0x0000, + 0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xac28, 0x00ce, 0x9ce0, + 0x001c, 0x7068, 0x9c02, 0x1210, 0x0804, 0xbb2e, 0x012e, 0x000e, + 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, + 0x9786, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c30, 0x9786, 0x0009, + 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, 0x080c, + 0xac8c, 0x08e0, 0x9786, 0x000a, 0x0938, 0x0820, 0x220c, 0x2304, + 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbbae, 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, 0x220c, 0x810f, 0x2304, 0x9106, + 0x1130, 0x8210, 0x8318, 0x1f04, 0xbbec, 0x9006, 0x0005, 0x918d, + 0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x080c, + 0xca3c, 0x0120, 0x080c, 0xca4d, 0x0158, 0x0028, 0x080c, 0x321c, + 0x080c, 0xca4d, 0x0128, 0x080c, 0x95de, 0x080c, 0xabed, 0x0005, + 0x080c, 0xb5b5, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, + 0x0208, 0x000a, 0x0005, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, + 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc34, + 0xbc34, 0xbc34, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc32, 0xbc32, + 0xbc32, 0xbc32, 0x080c, 0x0d7d, 0x600b, 0xffff, 0x6003, 0x000f, + 0x6106, 0x0126, 0x2091, 0x8000, 0x080c, 0xcf6a, 0x2009, 0x8000, + 0x080c, 0x921e, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, + 0x9082, 0x0040, 0x0804, 0xbcb9, 0x9186, 0x0027, 0x1520, 0x080c, + 0x95de, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148, + 0x080c, 0xc838, 0x0198, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5, + 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, + 0xc1c5, 0xa97e, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, + 0xabed, 0x0804, 0x96a0, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, + 0x0040, 0x0018, 0x080c, 0x0d7d, 0x0005, 0x0002, 0xbc97, 0xbc95, + 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, + 0xbc95, 0xbcb0, 0xbcb0, 0xbcb0, 0xbcb0, 0xbc95, 0xbcb0, 0xbc95, + 0xbcb0, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0x080c, 0x0d7d, 0x080c, + 0x95de, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0168, 0xa867, + 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, + 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005, + 0x080c, 0x95de, 0x080c, 0xca4d, 0x090c, 0xb5b5, 0x080c, 0xabed, + 0x0005, 0x0002, 0xbcd3, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, + 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd5, 0xbcd5, 0xbcd5, + 0xbcd5, 0xbcd1, 0xbcd7, 0xbcd1, 0xbcd5, 0xbcd1, 0xbcd1, 0xbcd1, + 0xbcd1, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c, + 0xabed, 0x0804, 0x96a0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, + 0x0208, 0x000a, 0x0005, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, + 0xbd33, 0xbe22, 0xbcfa, 0xbe2e, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, + 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbe2e, 0xbcfc, + 0xbcfa, 0xbe2c, 0x080c, 0x0d7d, 0x00b6, 0x0096, 0x6114, 0x2148, + 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867, + 0x0103, 0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258, 0xba3c, + 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c, + 0x6750, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac, + 0x09e0, 0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8, + 0x080c, 0xcb7d, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c, + 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff, + 0x1590, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xbe11, 0xa87b, + 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258, + 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110, + 0x080c, 0x6750, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904, + 0xbdf5, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211, + 0x210c, 0x080c, 0x0d7d, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, + 0xb800, 0xd0bc, 0x1904, 0xbdf9, 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, 0xbd3f, 0x735c, + 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, + 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc40b, + 0x003e, 0xd6cc, 0x0904, 0xbd54, 0x7154, 0xa98a, 0x81ff, 0x0904, + 0xbd54, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, + 0x0029, 0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, + 0xcef7, 0x0804, 0xbd54, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020, + 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc3aa, 0x00ae, 0x080c, + 0xcef7, 0x080c, 0xc3fb, 0x0804, 0xbd56, 0x080c, 0xcb40, 0x0804, + 0xbd6b, 0xa87c, 0xd0ac, 0x0904, 0xbd7c, 0xa880, 0xd0bc, 0x1904, + 0xbd7c, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e, + 0x0904, 0xbd7c, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xbd7c, + 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbd47, 0xa838, 0xa934, 0x9105, + 0x0904, 0xbd47, 0xa880, 0xd0bc, 0x1904, 0xbd47, 0x080c, 0xcb7d, + 0x0804, 0xbd6b, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, + 0x7d08, 0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096, + 0x6003, 0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac, + 0x0128, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, + 0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, + 0x0e90, 0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c, + 0xa8bf, 0x604b, 0x0000, 0x080c, 0x1c30, 0x1118, 0x6144, 0x080c, + 0x924a, 0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, + 0x0208, 0x000a, 0x0005, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, + 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7c, 0xbe7a, 0xbe7a, + 0xbe7a, 0xbe7a, 0xbe8d, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbeb1, + 0xbe7a, 0xbe7a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x0040, 0x1110, + 0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x6003, 0x0002, + 0x080c, 0xcf6f, 0x080c, 0x963b, 0x0005, 0x6004, 0x9086, 0x0040, + 0x1110, 0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x080c, + 0x963b, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148, + 0x080c, 0xc838, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, + 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, + 0x0005, 0x080c, 0x0d7d, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, + 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, + 0x2009, 0x1a78, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, + 0xa88e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, + 0x000a, 0x0005, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbeeb, + 0xbee9, 0xbee9, 0xbfa8, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, + 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xc0ec, 0xbee9, 0xc0f6, + 0xbee9, 0x080c, 0x0d7d, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168, + 0xd0f4, 0x0120, 0xc084, 0x601e, 0x0804, 0xbcdb, 0x6114, 0x0096, + 0x2148, 0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6, + 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110, + 0x7644, 0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, + 0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, + 0xba3e, 0x00be, 0x86ff, 0x0904, 0xbfa1, 0x9694, 0xff00, 0x9284, + 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, + 0x0904, 0xbfa1, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, + 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x103a, 0x090c, 0x0d7d, 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, + 0xc40b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, + 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, + 0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, + 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, + 0xc3aa, 0x080c, 0x1a48, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, + 0x2001, 0x1988, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c, + 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, + 0x080c, 0xcf78, 0x0904, 0xc0e7, 0x604b, 0x0000, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc0a6, + 0xa978, 0xa868, 0xd0fc, 0x0904, 0xc067, 0x0016, 0xa87c, 0x0006, + 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, + 0x0002, 0x0904, 0xc035, 0x9086, 0x0028, 0x1904, 0xc021, 0xa87b, + 0x001c, 0xb07b, 0x001c, 0x0804, 0xc03d, 0x6024, 0xd0f4, 0x11d0, + 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, + 0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, + 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, + 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, + 0x00be, 0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e, + 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, + 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcb7d, 0x0804, + 0xc0e7, 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, + 0xce1a, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, + 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, + 0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 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, 0xcef7, 0x001e, 0xa874, + 0x0006, 0x2148, 0x080c, 0x0fec, 0x001e, 0x0804, 0xc0d3, 0x0016, + 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, + 0x9086, 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, + 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xce1a, + 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, + 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa890, 0xb092, 0xa88c, 0xb08e, + 0xa87c, 0xb07e, 0x00ae, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcef7, + 0xa974, 0x0016, 0x080c, 0xc3fb, 0x001e, 0x0468, 0xa867, 0x0103, + 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, + 0x1118, 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, + 0x080c, 0xce1a, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, + 0x0118, 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, + 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa974, 0x0016, + 0x080c, 0x6b96, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff, + 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0120, 0x0016, 0x080c, + 0x6750, 0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0xabed, 0x009e, + 0x0005, 0x080c, 0xcb40, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, + 0x080c, 0xcf78, 0x190c, 0x1a56, 0x009e, 0x0005, 0x0096, 0x6114, + 0x2148, 0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b, + 0x0000, 0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938, + 0x9115, 0x11a0, 0x080c, 0x6b96, 0xba3c, 0x8211, 0x0208, 0xba3e, + 0xb8d0, 0x9005, 0x0110, 0x080c, 0x6750, 0x080c, 0xabed, 0x00be, + 0x009e, 0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc, + 0x1120, 0xa834, 0x080c, 0xbeb3, 0x0c28, 0xa880, 0xd0bc, 0x1dc8, + 0x080c, 0xcb7d, 0x0c60, 0x080c, 0x95de, 0x0010, 0x080c, 0x963b, + 0x601c, 0xd084, 0x0110, 0x080c, 0x1a6a, 0x080c, 0xc838, 0x01f0, + 0x0096, 0x6114, 0x2148, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5, + 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198, + 0xd184, 0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, + 0xe621, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e, 0x0804, 0xac28, + 0xa87b, 0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057, + 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc17d, 0xc17d, + 0xc17d, 0xc17d, 0xc17d, 0xc17f, 0xc17d, 0xc17d, 0xc17d, 0xc17d, + 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, + 0xc17d, 0xc17d, 0xc1a3, 0xc17d, 0xc17d, 0x080c, 0x0d7d, 0x080c, + 0x56e2, 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, 0x6d80, + 0x009e, 0x0804, 0xabed, 0x080c, 0x56e2, 0x0dd8, 0x6014, 0x900e, + 0x9016, 0x0c10, 0x9182, 0x0085, 0x0002, 0xc1bc, 0xc1ba, 0xc1ba, + 0xc1c8, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, + 0xc1ba, 0xc1ba, 0x080c, 0x0d7d, 0x6003, 0x0001, 0x6106, 0x0126, + 0x2091, 0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005, + 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, + 0x7220, 0x080c, 0xc826, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, + 0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, + 0xc436, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, + 0x6007, 0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, + 0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, + 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xcb7d, 0x00ce, + 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, + 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, + 0x0d7d, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, + 0x0014, 0x190c, 0x0d7d, 0x080c, 0x95de, 0x0096, 0x6014, 0x2048, + 0x080c, 0xc838, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, + 0x0029, 0x080c, 0x6d80, 0x009e, 0x080c, 0xac28, 0x0804, 0x96a0, + 0xc23d, 0xc23f, 0xc23f, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d, + 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0x080c, 0x0d7d, 0x080c, + 0xac28, 0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085, + 0x2008, 0x0804, 0xc28e, 0x9186, 0x0027, 0x1558, 0x080c, 0x95de, + 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6014, 0x2048, 0x080c, + 0xc838, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, + 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005, + 0x9186, 0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0xaaa8, + 0x0128, 0x9086, 0x000c, 0x0904, 0xc2c6, 0x0000, 0x080c, 0xaca9, + 0x0c70, 0x9186, 0x0014, 0x1d60, 0x080c, 0x95de, 0x0096, 0x6014, + 0x2048, 0x080c, 0xc838, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000, + 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xc29e, + 0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc2b2, 0xc29c, 0xc29c, + 0xc29c, 0xc29c, 0xc29c, 0xc29c, 0x080c, 0x0d7d, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, - 0x000e, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, - 0x0012, 0x0804, 0xac85, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2ba, - 0xc307, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, - 0x080c, 0x0d7d, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xc31b, 0x080c, - 0xc814, 0x1118, 0x080c, 0xca03, 0x0068, 0x6014, 0x2048, 0x080c, - 0xcf5a, 0x1110, 0x080c, 0xca03, 0xa867, 0x0103, 0x080c, 0xcf0e, - 0x080c, 0x6d70, 0x00d6, 0x2c68, 0x080c, 0xab73, 0x01d0, 0x6003, - 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, - 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, - 0xcca8, 0x695c, 0x615e, 0x6023, 0x0001, 0x2009, 0x8020, 0x080c, - 0x91ed, 0x2d60, 0x00de, 0x080c, 0xabc9, 0x009e, 0x0005, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, - 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, - 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xcea6, 0x11f0, - 0x080c, 0xab73, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, - 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, - 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x695c, 0x615e, - 0x080c, 0xcca8, 0x2009, 0x8020, 0x080c, 0x91ed, 0x2d60, 0x00de, - 0x0804, 0xabc9, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x01c8, - 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, - 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, - 0x0005, 0x080c, 0xcb18, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, - 0xca03, 0x009e, 0x0804, 0xabc9, 0x0016, 0x0096, 0x6014, 0x2048, - 0x080c, 0xc814, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, - 0x0000, 0x080c, 0x6d70, 0x009e, 0x001e, 0x9186, 0x0013, 0x0158, - 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xac85, - 0x0020, 0x080c, 0x95ad, 0x080c, 0xac04, 0x0005, 0x0056, 0x0066, - 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, - 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, - 0x2011, 0x0029, 0x080c, 0xc3e7, 0x96b2, 0x0020, 0xb004, 0x904d, - 0x0110, 0x080c, 0x0fec, 0x080c, 0x103a, 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, - 0x6d70, 0x2a48, 0x0cb8, 0x080c, 0x6d70, 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, 0xc464, 0xc464, 0xc45f, 0xc488, - 0xc43c, 0xc45f, 0xc43e, 0xc45f, 0xc43c, 0x90b3, 0xc45f, 0xc45f, - 0xc45f, 0xc43c, 0xc43c, 0xc43c, 0x080c, 0x0d7d, 0x6010, 0x9080, - 0x0000, 0x2004, 0xd0bc, 0x190c, 0xc488, 0x0036, 0x6014, 0x0096, - 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, 0x2019, 0x000c, 0x0038, - 0xd094, 0x0118, 0x2019, 0x000d, 0x0010, 0x2019, 0x0010, 0x080c, - 0xddf2, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006, - 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11e8, 0x6014, - 0x2048, 0x080c, 0xc814, 0x01d0, 0x6043, 0xffff, 0xa864, 0x9086, - 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, - 0x2001, 0x0005, 0x080c, 0x6fb0, 0x080c, 0xcb18, 0x080c, 0x6d64, - 0x080c, 0xac04, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, - 0x080c, 0xa872, 0x080c, 0xcf68, 0x6000, 0x908a, 0x0016, 0x1a0c, - 0x0d7d, 0x002b, 0x0106, 0x080c, 0xa88e, 0x010e, 0x0005, 0xc4a7, - 0xc4d5, 0xc4a9, 0xc4fc, 0xc4d0, 0xc4a7, 0xc45f, 0xc464, 0xc464, - 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0x080c, - 0x0d7d, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, - 0x6014, 0x2048, 0x080c, 0xc814, 0x0158, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcb18, - 0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, - 0x0002, 0x2009, 0x8020, 0x080c, 0x91cf, 0x9085, 0x0001, 0x0005, - 0x0066, 0x080c, 0x1a6a, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, - 0x7030, 0x9c06, 0x1120, 0x080c, 0xa074, 0x00ee, 0x0850, 0x6020, - 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, - 0x0001, 0x2c40, 0x080c, 0xa1f4, 0x009e, 0x008e, 0x0040, 0x0066, - 0x080c, 0x9f70, 0x190c, 0x0d7d, 0x080c, 0x9f7e, 0x006e, 0x00ee, - 0x1904, 0xc4a9, 0x0804, 0xc45f, 0x0036, 0x00e6, 0x2071, 0x19e7, - 0x704c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xa0f4, 0x00ee, 0x003e, - 0x0804, 0xc4a9, 0x080c, 0xa32a, 0x00ee, 0x003e, 0x1904, 0xc4a9, - 0x0804, 0xc45f, 0x00c6, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, - 0x006e, 0x00ce, 0x0005, 0xc532, 0xc5f4, 0xc75b, 0xc53a, 0xac04, - 0xc532, 0xdde4, 0xcf50, 0xc5f4, 0x907a, 0xc7da, 0xc52b, 0xc52b, - 0xc52b, 0xc52b, 0xc52b, 0x080c, 0x0d7d, 0x080c, 0xca29, 0x1110, - 0x080c, 0xb591, 0x0005, 0x080c, 0x95ad, 0x0804, 0xabc9, 0x601b, - 0x0001, 0x0005, 0x080c, 0xc814, 0x0130, 0x6014, 0x0096, 0x2048, - 0x2c00, 0xa896, 0x009e, 0x080c, 0xa872, 0x080c, 0xcf68, 0x6000, - 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x0804, 0xa88e, 0xc55f, - 0xc561, 0xc58b, 0xc59f, 0xc5ca, 0xc55f, 0xc532, 0xc532, 0xc532, - 0xc5a6, 0xc5a6, 0xc55f, 0xc55f, 0xc55f, 0xc55f, 0xc5b0, 0x080c, - 0x0d7d, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882, - 0x009e, 0x2071, 0x19e7, 0x7030, 0x9c06, 0x01d0, 0x0066, 0x080c, - 0x9f70, 0x190c, 0x0d7d, 0x080c, 0x9f7e, 0x006e, 0x080c, 0xcee8, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1987, - 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x91cf, 0x00ee, 0x0005, - 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, - 0xa882, 0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b, - 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91cf, 0x0005, 0x080c, - 0xa872, 0x080c, 0xaa06, 0x080c, 0xa88e, 0x0c28, 0x0096, 0x601b, - 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, - 0x080c, 0x56db, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, - 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, - 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x6d70, 0x009e, - 0x0804, 0xabc9, 0x6014, 0x0096, 0x904d, 0x0508, 0x080c, 0xcf54, - 0x01f0, 0x080c, 0xa88e, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, - 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, - 0x611a, 0x2001, 0x0037, 0x2c08, 0x080c, 0x1679, 0x6000, 0x9086, - 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0xac68, 0x0005, 0x009e, - 0x080c, 0x1a6a, 0x0804, 0xc58b, 0x6000, 0x908a, 0x0016, 0x1a0c, - 0x0d7d, 0x000b, 0x0005, 0xc60b, 0xc537, 0xc60d, 0xc60b, 0xc60d, - 0xc60d, 0xc533, 0xc60b, 0xc52d, 0xc52d, 0xc60b, 0xc60b, 0xc60b, - 0xc60b, 0xc60b, 0xc60b, 0x080c, 0x0d7d, 0x6010, 0x00b6, 0x2058, - 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d7d, - 0x00b6, 0x0013, 0x00be, 0x0005, 0xc628, 0xc6f5, 0xc62a, 0xc66a, - 0xc62a, 0xc66a, 0xc62a, 0xc638, 0xc628, 0xc66a, 0xc628, 0xc659, - 0x080c, 0x0d7d, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, - 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xc6f1, - 0x6004, 0x080c, 0xca29, 0x0904, 0xc70e, 0x908e, 0x0004, 0x1110, - 0x080c, 0x3215, 0x908e, 0x0021, 0x0904, 0xc712, 0x908e, 0x0022, - 0x0904, 0xc756, 0x908e, 0x003d, 0x0904, 0xc712, 0x908e, 0x0039, - 0x0904, 0xc716, 0x908e, 0x0035, 0x0904, 0xc716, 0x908e, 0x001e, - 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x31e4, 0x080c, 0xb591, - 0x0804, 0xac04, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, - 0xc6e2, 0x9186, 0x0002, 0x1904, 0xc6b7, 0x2001, 0x1837, 0x2004, - 0xd08c, 0x11c8, 0x080c, 0x74d5, 0x11b0, 0x080c, 0xcf2e, 0x0138, - 0x080c, 0x74f8, 0x1120, 0x080c, 0x73e0, 0x0804, 0xc73f, 0x2001, - 0x197d, 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, - 0x7406, 0x0804, 0xc73f, 0x6010, 0x2058, 0x2001, 0x1837, 0x2004, - 0xd0ac, 0x1904, 0xc73f, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xc73f, - 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, - 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x080c, - 0xab73, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, - 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, - 0x9086, 0x007e, 0x1170, 0x2009, 0x1837, 0x2104, 0xc085, 0x200a, - 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fb5, 0x00ee, 0x080c, 0xb591, - 0x0030, 0x080c, 0xb591, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x3215, 0x012e, 0x00ee, 0x080c, - 0xac04, 0x0005, 0x2001, 0x0002, 0x080c, 0x656e, 0x6003, 0x0001, - 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00de, 0x00ce, - 0x0c80, 0x080c, 0x3215, 0x0804, 0xc666, 0x00c6, 0x00d6, 0x6104, - 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, - 0x9005, 0x0904, 0xc6b7, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, - 0x91f4, 0x080c, 0x966f, 0x00de, 0x00ce, 0x0898, 0x080c, 0xb591, - 0x0804, 0xc668, 0x080c, 0xb5cd, 0x0804, 0xc668, 0x00d6, 0x2c68, - 0x6104, 0x080c, 0xcea6, 0x00de, 0x0118, 0x080c, 0xabc9, 0x00f0, - 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, - 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, - 0x1987, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, - 0x6026, 0x2160, 0x2009, 0x8020, 0x080c, 0x91ed, 0x0005, 0x00de, - 0x00ce, 0x080c, 0xb591, 0x080c, 0x31e4, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x080c, 0x3215, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, - 0x0398, 0x604b, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xb005, - 0x1904, 0xc70e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, - 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xc776, 0xc776, - 0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc532, - 0xc776, 0xc537, 0xc778, 0xc537, 0xc785, 0xc776, 0x080c, 0x0d7d, - 0x6004, 0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, - 0x2009, 0x8020, 0x080c, 0x91ed, 0x0005, 0x080c, 0xcf22, 0x0118, - 0x080c, 0xcf35, 0x0010, 0x080c, 0xcf43, 0x080c, 0xca03, 0x080c, - 0xc814, 0x0570, 0x080c, 0x31e4, 0x080c, 0xc814, 0x0168, 0x6014, - 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, - 0xc0ed, 0xa882, 0x080c, 0x6d70, 0x2c68, 0x080c, 0xab73, 0x0150, - 0x6810, 0x6012, 0x080c, 0xcca8, 0x00c6, 0x2d60, 0x080c, 0xac04, - 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, - 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00c8, - 0x080c, 0xcf22, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, - 0x31e4, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x31e4, 0x0868, 0x080c, - 0xac04, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0002, - 0xc7f0, 0xc7f0, 0xc7f2, 0xc7f2, 0xc7f2, 0xc7f0, 0xc7f0, 0xac04, - 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, - 0x080c, 0x0d7d, 0x080c, 0xa872, 0x080c, 0xaa06, 0x080c, 0xa88e, - 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6d70, 0x009e, - 0x0804, 0xabc9, 0x9284, 0x0003, 0x1158, 0x9282, 0x1ddc, 0x0240, - 0x2001, 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, - 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, - 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, - 0x10e5, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7354, - 0x7074, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xcf2e, - 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00c6, 0x080c, 0xac04, 0x00ce, - 0x0060, 0x080c, 0xcc1a, 0x0148, 0x080c, 0xca29, 0x1110, 0x080c, - 0xb591, 0x00c6, 0x080c, 0xabc9, 0x00ce, 0x9ce0, 0x001c, 0x7068, - 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, - 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, - 0x0128, 0x2061, 0x1b32, 0x6112, 0x080c, 0x31e4, 0x9006, 0x0010, - 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x080c, 0xab73, 0x01b0, 0x665e, 0x2b00, 0x6012, - 0x080c, 0x56db, 0x0118, 0x080c, 0xc945, 0x0168, 0x080c, 0xcca8, - 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xac68, 0x9085, 0x0001, + 0x000c, 0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, + 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, + 0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092, + 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xaca9, 0xc2dc, + 0xc2dc, 0xc2dc, 0xc2dc, 0xc2de, 0xc32b, 0xc2dc, 0xc2dc, 0xc2dc, + 0xc2dc, 0xc2dc, 0xc2dc, 0xc2dc, 0x080c, 0x0d7d, 0x0096, 0x6010, + 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, + 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, + 0x009e, 0x0804, 0xc33f, 0x080c, 0xc838, 0x1118, 0x080c, 0xca27, + 0x0068, 0x6014, 0x2048, 0x080c, 0xcf7e, 0x1110, 0x080c, 0xca27, + 0xa867, 0x0103, 0x080c, 0xcf32, 0x080c, 0x6d80, 0x00d6, 0x2c68, + 0x080c, 0xab97, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, + 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, + 0x613e, 0x6910, 0x6112, 0x080c, 0xcccc, 0x695c, 0x615e, 0x6023, + 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x2d60, 0x00de, 0x080c, + 0xabed, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, + 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, + 0x2c68, 0x080c, 0xceca, 0x11f0, 0x080c, 0xab97, 0x01d8, 0x6106, + 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, + 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, + 0x693c, 0x613e, 0x695c, 0x615e, 0x080c, 0xcccc, 0x2009, 0x8020, + 0x080c, 0x921e, 0x2d60, 0x00de, 0x0804, 0xabed, 0x0096, 0x6014, + 0x2048, 0x080c, 0xc838, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, + 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, + 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xcb3c, 0xa877, + 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x0804, 0xabed, + 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa867, + 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e, + 0x001e, 0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186, + 0x0027, 0x0118, 0x080c, 0xaca9, 0x0020, 0x080c, 0x95de, 0x080c, + 0xac28, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, + 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, + 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xc40b, + 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fec, 0x080c, + 0x103a, 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, 0x6d80, 0x2a48, 0x0cb8, 0x080c, + 0x6d80, 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, + 0xc488, 0xc488, 0xc483, 0xc4ac, 0xc460, 0xc483, 0xc462, 0xc483, + 0xc460, 0x90e4, 0xc483, 0xc483, 0xc483, 0xc460, 0xc460, 0xc460, + 0x080c, 0x0d7d, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c, + 0xc4ac, 0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc, + 0x0118, 0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d, + 0x0010, 0x2019, 0x0010, 0x080c, 0xde1b, 0x6023, 0x0006, 0x6003, + 0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, + 0x0096, 0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01d0, + 0x6043, 0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, + 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0, + 0x080c, 0xcb3c, 0x080c, 0x6d74, 0x080c, 0xac28, 0x9085, 0x0001, + 0x009e, 0x0005, 0x9006, 0x0ce0, 0x080c, 0xa896, 0x080c, 0xcf8c, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x002b, 0x0106, 0x080c, + 0xa8b2, 0x010e, 0x0005, 0xc4cb, 0xc4f9, 0xc4cd, 0xc520, 0xc4f4, + 0xc4cb, 0xc483, 0xc488, 0xc488, 0xc483, 0xc483, 0xc483, 0xc483, + 0xc483, 0xc483, 0xc483, 0x080c, 0x0d7d, 0x86ff, 0x1510, 0x6020, + 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838, + 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, + 0x0fec, 0x009e, 0x080c, 0xcb3c, 0x009e, 0x080c, 0xcf0c, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, + 0x9200, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1a6a, 0x006e, + 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7030, 0x9c06, 0x1120, 0x080c, + 0xa098, 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, + 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0xa218, + 0x009e, 0x008e, 0x0040, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d, + 0x080c, 0x9fa2, 0x006e, 0x00ee, 0x1904, 0xc4cd, 0x0804, 0xc483, + 0x0036, 0x00e6, 0x2071, 0x19e7, 0x704c, 0x9c06, 0x1138, 0x901e, + 0x080c, 0xa118, 0x00ee, 0x003e, 0x0804, 0xc4cd, 0x080c, 0xa34e, + 0x00ee, 0x003e, 0x1904, 0xc4cd, 0x0804, 0xc483, 0x00c6, 0x0066, + 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556, + 0xc618, 0xc77f, 0xc55e, 0xac28, 0xc556, 0xde0d, 0xcf74, 0xc618, + 0x90ab, 0xc7fe, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0x080c, + 0x0d7d, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x0005, 0x080c, + 0x95de, 0x0804, 0xabed, 0x601b, 0x0001, 0x0005, 0x080c, 0xc838, + 0x0130, 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c, + 0xa896, 0x080c, 0xcf8c, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, + 0x0013, 0x0804, 0xa8b2, 0xc583, 0xc585, 0xc5af, 0xc5c3, 0xc5ee, + 0xc583, 0xc556, 0xc556, 0xc556, 0xc5ca, 0xc5ca, 0xc583, 0xc583, + 0xc583, 0xc583, 0xc5d4, 0x080c, 0x0d7d, 0x00e6, 0x6014, 0x0096, + 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7030, + 0x9c06, 0x01d0, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d, 0x080c, + 0x9fa2, 0x006e, 0x080c, 0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b, + 0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020, + 0x080c, 0x9200, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, + 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xcf0c, + 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, + 0x080c, 0x9200, 0x0005, 0x080c, 0xa896, 0x080c, 0xaa2a, 0x080c, + 0xa8b2, 0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, + 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56e2, 0x01a8, 0x6014, + 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, + 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, + 0x0004, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x6014, 0x0096, + 0x904d, 0x0508, 0x080c, 0xcf78, 0x01f0, 0x080c, 0xa8b2, 0x2001, + 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, + 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08, + 0x080c, 0x1679, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, + 0x080c, 0xac8c, 0x0005, 0x009e, 0x080c, 0x1a6a, 0x0804, 0xc5af, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0xc62f, + 0xc55b, 0xc631, 0xc62f, 0xc631, 0xc631, 0xc557, 0xc62f, 0xc551, + 0xc551, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0x080c, + 0x0d7d, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, + 0x908a, 0x000c, 0x1a0c, 0x0d7d, 0x00b6, 0x0013, 0x00be, 0x0005, + 0xc64c, 0xc719, 0xc64e, 0xc68e, 0xc64e, 0xc68e, 0xc64e, 0xc65c, + 0xc64c, 0xc68e, 0xc64c, 0xc67d, 0x080c, 0x0d7d, 0x6004, 0x908e, + 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, + 0x908e, 0x0052, 0x0904, 0xc715, 0x6004, 0x080c, 0xca4d, 0x0904, + 0xc732, 0x908e, 0x0004, 0x1110, 0x080c, 0x321c, 0x908e, 0x0021, + 0x0904, 0xc736, 0x908e, 0x0022, 0x0904, 0xc77a, 0x908e, 0x003d, + 0x0904, 0xc736, 0x908e, 0x0039, 0x0904, 0xc73a, 0x908e, 0x0035, + 0x0904, 0xc73a, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, + 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, + 0x080c, 0x31e7, 0x080c, 0xb5b5, 0x0804, 0xac28, 0x00c6, 0x00d6, + 0x6104, 0x9186, 0x0016, 0x0904, 0xc706, 0x9186, 0x0002, 0x1904, + 0xc6db, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x74e9, + 0x11b0, 0x080c, 0xcf52, 0x0138, 0x080c, 0x750c, 0x1120, 0x080c, + 0x73f4, 0x0804, 0xc763, 0x2001, 0x197d, 0x2003, 0x0001, 0x2001, + 0x1800, 0x2003, 0x0001, 0x080c, 0x741a, 0x0804, 0xc763, 0x6010, + 0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xc763, 0xb8a0, + 0x9084, 0xff80, 0x1904, 0xc763, 0xb840, 0x9084, 0x00ff, 0x9005, + 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, + 0x0398, 0x604b, 0x0000, 0x080c, 0xab97, 0x0128, 0x2b00, 0x6012, + 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, + 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, + 0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, + 0x5fbc, 0x00ee, 0x080c, 0xb5b5, 0x0030, 0x080c, 0xb5b5, 0x080c, + 0x31e7, 0x080c, 0xcf67, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, + 0x321c, 0x012e, 0x00ee, 0x080c, 0xac28, 0x0005, 0x2001, 0x0002, + 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9225, + 0x080c, 0x96a0, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x321c, 0x0804, + 0xc68a, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, + 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc6db, 0x8001, + 0xb842, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x00de, + 0x00ce, 0x0898, 0x080c, 0xb5b5, 0x0804, 0xc68c, 0x080c, 0xb5f1, + 0x0804, 0xc68c, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xceca, 0x00de, + 0x0118, 0x080c, 0xabed, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, + 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, + 0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c, + 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020, + 0x080c, 0x921e, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb5b5, 0x080c, + 0x31e7, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x321c, 0x6017, + 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e, + 0x00ee, 0x0005, 0x080c, 0xb029, 0x1904, 0xc732, 0x0005, 0x6000, + 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x00d6, 0x001b, 0x00de, + 0x009e, 0x0005, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a, + 0xc79a, 0xc79a, 0xc79a, 0xc556, 0xc79a, 0xc55b, 0xc79c, 0xc55b, + 0xc7a9, 0xc79a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x008b, 0x0148, + 0x6007, 0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x921e, + 0x0005, 0x080c, 0xcf46, 0x0118, 0x080c, 0xcf59, 0x0010, 0x080c, + 0xcf67, 0x080c, 0xca27, 0x080c, 0xc838, 0x0570, 0x080c, 0x31e7, + 0x080c, 0xc838, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, + 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6d80, + 0x2c68, 0x080c, 0xab97, 0x0150, 0x6810, 0x6012, 0x080c, 0xcccc, + 0x00c6, 0x2d60, 0x080c, 0xac28, 0x00ce, 0x0008, 0x2d60, 0x6017, + 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, + 0x9225, 0x080c, 0x96a0, 0x00c8, 0x080c, 0xcf46, 0x0138, 0x6034, + 0x9086, 0x4000, 0x1118, 0x080c, 0x31e7, 0x08d0, 0x6034, 0x908c, + 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, + 0x080c, 0x31e7, 0x0868, 0x080c, 0xac28, 0x0005, 0x6000, 0x908a, + 0x0016, 0x1a0c, 0x0d7d, 0x0002, 0xc814, 0xc814, 0xc816, 0xc816, + 0xc816, 0xc814, 0xc814, 0xac28, 0xc814, 0xc814, 0xc814, 0xc814, + 0xc814, 0xc814, 0xc814, 0xc814, 0x080c, 0x0d7d, 0x080c, 0xa896, + 0x080c, 0xaa2a, 0x080c, 0xa8b2, 0x6114, 0x0096, 0x2148, 0xa87b, + 0x0006, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x9284, 0x0003, + 0x1158, 0x9282, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9202, + 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, + 0x0096, 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, + 0x9086, 0xf000, 0x0110, 0x080c, 0x10e5, 0x000e, 0x009e, 0x0005, + 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, + 0x1ddc, 0x2071, 0x1800, 0x7354, 0x7074, 0x9302, 0x1640, 0x6020, + 0x9206, 0x11f8, 0x080c, 0xcf52, 0x0180, 0x9286, 0x0001, 0x1168, + 0x6004, 0x9086, 0x0004, 0x1148, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x00c6, 0x080c, 0xac28, 0x00ce, 0x0060, 0x080c, 0xcc3e, 0x0148, + 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x00c6, 0x080c, 0xabed, + 0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e, + 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, + 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b32, 0x6112, + 0x080c, 0x31e7, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, + 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab97, + 0x01b0, 0x665e, 0x2b00, 0x6012, 0x080c, 0x56e2, 0x0118, 0x080c, + 0xc969, 0x0168, 0x080c, 0xcccc, 0x6023, 0x0003, 0x2009, 0x004b, + 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, + 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0xac5f, + 0x0580, 0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023, + 0x0003, 0x0016, 0x080c, 0xa896, 0x080c, 0x93a5, 0x0076, 0x903e, + 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2, + 0x001e, 0xd184, 0x0128, 0x080c, 0xabed, 0x9085, 0x0001, 0x0070, + 0x080c, 0x56e2, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc969, 0x0148, + 0x2009, 0x004c, 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, + 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, + 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, + 0xab97, 0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, + 0x2021, 0x0005, 0x080c, 0xc97b, 0x9186, 0x004d, 0x0118, 0x9186, + 0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60, + 0x080c, 0xabed, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120, + 0x2f60, 0x080c, 0xabed, 0x0088, 0x2f60, 0x080c, 0x56e2, 0x0138, + 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, + 0x0016, 0x080c, 0xac8c, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, + 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xab97, 0x2c78, + 0x0508, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, + 0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120, + 0x2f60, 0x080c, 0xabed, 0x0060, 0x2f60, 0x080c, 0x56e2, 0x0120, + 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xac8c, + 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, + 0x0c98, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x1120, 0x080c, 0xabed, + 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, + 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, + 0x080c, 0xa896, 0x080c, 0x6804, 0x0158, 0x2001, 0xc982, 0x0006, + 0x900e, 0x2400, 0x080c, 0x6fc0, 0x080c, 0x6d80, 0x000e, 0x0807, + 0x2418, 0x080c, 0x95a4, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, + 0x0001, 0x2608, 0x080c, 0x93bf, 0x008e, 0x080c, 0x9277, 0x2f08, + 0x2648, 0x080c, 0xdfeb, 0xb93c, 0x81ff, 0x090c, 0x9496, 0x080c, + 0xa8b2, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x080c, 0xab97, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, + 0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, + 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, + 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x01b8, 0x660a, + 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0008, 0x2900, 0x6016, + 0x00f6, 0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0021, 0x080c, + 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, + 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, + 0xab97, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, + 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xac8c, 0x9085, + 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x0188, 0x2b08, 0x6112, + 0x080c, 0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, + 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, + 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, + 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e, + 0x1140, 0xb8d0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b, + 0x0001, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, + 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, + 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, + 0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xc838, 0x0168, + 0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, + 0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, + 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, + 0x0198, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001, 0x2900, + 0x6016, 0x080c, 0x31e7, 0x2009, 0x0028, 0x080c, 0xac8c, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, + 0x11a8, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, + 0x080c, 0xb807, 0x00be, 0x080c, 0xba2a, 0x6003, 0x0001, 0x6007, + 0x0029, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0078, 0x6014, 0x0096, + 0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, + 0xce8b, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x0005, 0x0096, 0x6014, + 0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, + 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6d80, 0x012e, 0x009e, 0x080c, 0xabed, 0x0c30, 0x0096, + 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6575, 0x00e8, + 0x9186, 0x0015, 0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, + 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x66c0, 0x00be, 0x080c, + 0xbafb, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, + 0x0160, 0x2001, 0x0006, 0x080c, 0x6575, 0x6014, 0x2048, 0xa868, + 0xd0fc, 0x0170, 0x080c, 0xaffd, 0x0048, 0x6014, 0x2048, 0xa868, + 0xd0fc, 0x0528, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x009e, 0x0005, + 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0000, + 0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6914, 0x1108, + 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, + 0x8000, 0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x08f8, 0x6014, + 0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, + 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x0840, 0xa878, 0x9086, + 0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, + 0x604b, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, + 0x2009, 0x8023, 0x080c, 0x921e, 0x0005, 0x00c6, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084, + 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556, 0xcb6f, 0xcb6f, + 0xcb72, 0xe318, 0xe333, 0xe336, 0xc556, 0xc556, 0xc556, 0xc556, + 0xc556, 0xc556, 0xc556, 0xc556, 0xc556, 0x080c, 0x0d7d, 0xa001, + 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, + 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834, 0x2004, 0x9005, + 0x1540, 0x00f6, 0x2c78, 0x080c, 0xab97, 0x0508, 0x7810, 0x6012, + 0x080c, 0xcccc, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, + 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, + 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e, + 0x2009, 0x8020, 0x080c, 0x921e, 0x2f60, 0x00fe, 0x0005, 0x2f60, + 0x00fe, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096, + 0x6814, 0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108, + 0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, + 0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, + 0x080c, 0x0fec, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, + 0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, + 0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, + 0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, + 0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, + 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, + 0x695c, 0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, + 0x2009, 0x8020, 0x080c, 0x921e, 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, 0x1982, 0x200c, 0x8000, 0x2014, + 0x2001, 0x0032, 0x080c, 0x9166, 0x2001, 0x1986, 0x82ff, 0x1110, + 0x2011, 0x0014, 0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014, + 0x2071, 0x196c, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x9166, + 0x2001, 0x1987, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, + 0x1988, 0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0xa887, + 0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679, 0x080c, + 0x6a4c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, + 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, 0x2001, 0x1987, + 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, 0x701f, 0x07d0, + 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c, + 0xa887, 0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679, + 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110, + 0x080c, 0x106c, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, + 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0xac8c, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, + 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086, + 0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, + 0x080c, 0x975f, 0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080, + 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, + 0x900e, 0x080c, 0x323c, 0x080c, 0xaffd, 0x0020, 0x080c, 0xb5b5, + 0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54, + 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0xab97, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001, + 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, - 0x8000, 0xbaa0, 0x080c, 0xac3b, 0x0580, 0x605f, 0x0000, 0x2b00, - 0x6012, 0x080c, 0xcca8, 0x6023, 0x0003, 0x0016, 0x080c, 0xa872, - 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x2c08, 0x080c, - 0xdfc0, 0x007e, 0x080c, 0xa88e, 0x001e, 0xd184, 0x0128, 0x080c, - 0xabc9, 0x9085, 0x0001, 0x0070, 0x080c, 0x56db, 0x0128, 0xd18c, - 0x1170, 0x080c, 0xc945, 0x0148, 0x2009, 0x004c, 0x080c, 0xac68, - 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, - 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, - 0x00c6, 0x0046, 0x0016, 0x080c, 0xab73, 0x2c78, 0x0590, 0x7e5e, - 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xc957, - 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1980, - 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xabc9, 0x00d0, 0x2001, - 0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xabc9, 0x0088, - 0x2f60, 0x080c, 0x56db, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, - 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xac68, 0x9085, - 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, - 0x0046, 0x080c, 0xab73, 0x2c78, 0x0508, 0x7e5e, 0x2b00, 0x7812, - 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, - 0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xabc9, 0x0060, - 0x2f60, 0x080c, 0x56db, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, - 0x2009, 0x0052, 0x080c, 0xac68, 0x9085, 0x0001, 0x004e, 0x00ce, - 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4aa0, - 0x00ce, 0x1120, 0x080c, 0xabc9, 0x9006, 0x0005, 0xa867, 0x0000, - 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, - 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0xa872, 0x080c, 0x67fd, - 0x0158, 0x2001, 0xc95e, 0x0006, 0x900e, 0x2400, 0x080c, 0x6fb0, - 0x080c, 0x6d70, 0x000e, 0x0807, 0x2418, 0x080c, 0x9573, 0xbaa0, - 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x938e, - 0x008e, 0x080c, 0x9246, 0x2f08, 0x2648, 0x080c, 0xdfc0, 0xb93c, - 0x81ff, 0x090c, 0x9465, 0x080c, 0xa88e, 0x012e, 0x007e, 0x009e, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0190, - 0x660a, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, - 0x6016, 0x2009, 0x001f, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0xac3b, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcca8, - 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1731, - 0x00fe, 0x2009, 0x0021, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, - 0x0016, 0x2091, 0x8000, 0x080c, 0xab73, 0x0198, 0x660a, 0x2b08, - 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, - 0x0016, 0x080c, 0xac68, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, - 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, - 0xac3b, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, - 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xac68, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, - 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, - 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, 0xb8d0, 0x9005, 0x0128, - 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, 0x00be, 0x002e, 0x0005, - 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, - 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, - 0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014, - 0x904d, 0x080c, 0xc814, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158, - 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006, - 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x080c, 0xac3b, 0x0198, 0x2b08, 0x6112, 0x080c, - 0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x31e4, 0x2009, - 0x0028, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1824, 0x2204, - 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xb7e3, 0x00be, 0x080c, - 0xba06, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x91f4, 0x080c, - 0x966f, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, - 0x0148, 0x2001, 0x0001, 0x080c, 0xce67, 0x080c, 0xb591, 0x080c, - 0xabc9, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x009e, - 0x080c, 0xabc9, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, - 0x0004, 0x080c, 0x656e, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, - 0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, - 0x080c, 0x66b9, 0x00be, 0x080c, 0xbad7, 0x1198, 0x6010, 0x00b6, - 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, - 0x656e, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0xafd9, - 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xb591, - 0x080c, 0xabc9, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, - 0x090c, 0x0d7d, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, - 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, - 0x080c, 0xabc9, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x080c, - 0xabc9, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, - 0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b, 0x0000, 0x6017, 0x0000, - 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x91ed, - 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x0130, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, - 0x0005, 0xc532, 0xcb4b, 0xcb4b, 0xcb4e, 0xe2ed, 0xe308, 0xe30b, - 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, - 0xc532, 0x080c, 0x0d7d, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, - 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, - 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, - 0x2001, 0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, - 0xab73, 0x0508, 0x7810, 0x6012, 0x080c, 0xcca8, 0x7820, 0x9086, - 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, - 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, - 0x6003, 0x0001, 0x795c, 0x615e, 0x2009, 0x8020, 0x080c, 0x91ed, - 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, - 0x604a, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0x681c, 0xd0fc, - 0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4, 0x0180, 0xc0e4, 0xa87e, - 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130, - 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fec, 0x6830, 0x6036, - 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170, - 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803, - 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048, - 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c, - 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, - 0x6808, 0x603e, 0x6910, 0x6112, 0x695c, 0x615e, 0x6023, 0x0001, - 0x6007, 0x0039, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, - 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, - 0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x9135, - 0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, - 0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c, 0x711a, 0x721e, - 0x2001, 0x0064, 0x080c, 0x9135, 0x2001, 0x1987, 0x82ff, 0x1110, - 0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288, 0x000a, 0x2102, - 0x2001, 0x0017, 0x080c, 0xa863, 0x2001, 0x1a89, 0x2102, 0x2001, - 0x0032, 0x080c, 0x1679, 0x080c, 0x6a3c, 0x00ee, 0x003e, 0x002e, - 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986, - 0x2003, 0x0028, 0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c, - 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e, - 0x2102, 0x2001, 0x0017, 0x080c, 0xa863, 0x2001, 0x1a89, 0x2102, - 0x2001, 0x0032, 0x080c, 0x1679, 0x00ee, 0x001e, 0x000e, 0x0005, - 0x0096, 0x6060, 0x904d, 0x0110, 0x080c, 0x106c, 0x009e, 0x0005, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0180, - 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, - 0x0033, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048, - 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x972e, 0x01d8, 0x707c, - 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, 0x1140, 0x6210, - 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3235, 0x080c, - 0xafd9, 0x0020, 0x080c, 0xb591, 0x080c, 0xabc9, 0x00fe, 0x00ee, - 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0188, 0x2b08, 0x6112, - 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d, - 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0xab73, - 0x0180, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, - 0x6016, 0x001e, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046, - 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106, - 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x6014, - 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f, - 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, - 0x0016, 0x200c, 0x080c, 0xd540, 0x001e, 0xa804, 0x9005, 0x0110, - 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c, - 0xb591, 0x080c, 0xabc9, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e, - 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, 0x9086, 0x0004, - 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x972e, 0x01a8, 0x707c, - 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, 0x1110, 0x080c, - 0x31e4, 0x080c, 0xafd9, 0x0020, 0x080c, 0xb591, 0x080c, 0xabc9, - 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, 0x9206, 0x0d78, - 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, - 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78, - 0x080c, 0x972e, 0x05f0, 0x707c, 0xaacc, 0x9206, 0x1180, 0x7080, - 0xaad0, 0x9206, 0x1160, 0x080c, 0x31e4, 0x0016, 0xa998, 0xaab0, - 0x9284, 0x1000, 0xc0fd, 0x080c, 0x568b, 0x001e, 0x0010, 0x080c, - 0x5474, 0x080c, 0xc814, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000, - 0xa897, 0x4000, 0x0080, 0x080c, 0xc814, 0x01b8, 0x6014, 0x2048, - 0x080c, 0x5474, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, - 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, - 0x080c, 0x6d70, 0x012e, 0x080c, 0xabc9, 0x00fe, 0x00ee, 0x009e, - 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, 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, - 0x080c, 0xc814, 0x0904, 0xce63, 0x0096, 0x6314, 0x2348, 0xa87a, - 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009, - 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x690d, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004, - 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, - 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, - 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0fb7, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007, - 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2, - 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6d64, - 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, 0x25fb, 0x2118, 0x831f, 0x939c, 0xff00, - 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c, - 0x4b00, 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, - 0xc802, 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, 0xbe8f, 0x0005, - 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0, - 0x080c, 0xc814, 0x01c8, 0x080c, 0xca03, 0x6037, 0x4000, 0x6014, - 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xca29, 0x1118, - 0x080c, 0xb591, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff, - 0x1129, 0x080c, 0x6d70, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4, - 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118, - 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xcb18, 0xa877, - 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, - 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, - 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, - 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4cb7, - 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986, - 0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005, - 0x080c, 0xabc9, 0x0804, 0x966f, 0x611c, 0xd1fc, 0xa97c, 0x1108, - 0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c, 0x1108, 0xd0e4, 0x0005, - 0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c, 0x1108, 0xd0e4, 0x0005, - 0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128, 0x908c, 0x000f, 0x9186, - 0x0005, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x0005, - 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x001b, - 0x006e, 0x00be, 0x0005, 0xcf93, 0xd69b, 0xd7ec, 0xcf93, 0xcf93, - 0xcf93, 0xcf93, 0xcf93, 0xcfca, 0xd86a, 0xcf93, 0xcf93, 0xcf93, - 0xcf93, 0xcf93, 0xcf93, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2, - 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xcfae, 0xdd81, - 0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xdd30, 0xddd3, - 0xcfae, 0xe428, 0xe45c, 0xe428, 0xe45c, 0xcfae, 0x080c, 0x0d7d, - 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7d, 0x6000, 0x000a, 0x0005, - 0xcfc8, 0xda46, 0xdb0f, 0xdb31, 0xdbac, 0xcfc8, 0xdca6, 0xdc34, - 0xd874, 0xdd08, 0xdd1d, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc8, - 0x080c, 0x0d7d, 0x91b2, 0x0053, 0x1a0c, 0x0d7d, 0x2100, 0x91b2, - 0x0040, 0x1a04, 0xd411, 0x0002, 0xd014, 0xd202, 0xd014, 0xd014, - 0xd014, 0xd20b, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, - 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, - 0xd014, 0xd014, 0xd014, 0xd016, 0xd07d, 0xd08c, 0xd0f0, 0xd11b, - 0xd194, 0xd1ed, 0xd014, 0xd014, 0xd20e, 0xd014, 0xd014, 0xd223, - 0xd230, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd2b3, 0xd014, - 0xd014, 0xd2c7, 0xd014, 0xd014, 0xd282, 0xd014, 0xd014, 0xd014, - 0xd2df, 0xd014, 0xd014, 0xd014, 0xd35c, 0xd014, 0xd014, 0xd014, - 0xd014, 0xd014, 0xd014, 0xd3d9, 0x080c, 0x0d7d, 0x080c, 0x6a19, - 0x1150, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, - 0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, - 0x0000, 0x0804, 0xd1fb, 0x080c, 0x69be, 0x00e6, 0x00c6, 0x0036, - 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, - 0x080c, 0xa872, 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, - 0x2c08, 0x080c, 0xdfc0, 0x007e, 0x001e, 0x080c, 0xa88e, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x662d, - 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026, - 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xe685, - 0x002e, 0x001e, 0x1178, 0x080c, 0xdeee, 0x1904, 0xd0e8, 0x080c, - 0xde8a, 0x1120, 0x6007, 0x0008, 0x0804, 0xd1fb, 0x6007, 0x0009, - 0x0804, 0xd1fb, 0x080c, 0xe121, 0x0128, 0x080c, 0xdeee, 0x0d78, - 0x0804, 0xd0e8, 0x6017, 0x1900, 0x0c88, 0x080c, 0x332b, 0x1904, - 0xd40e, 0x6106, 0x080c, 0xde3d, 0x6007, 0x0006, 0x0804, 0xd1fb, - 0x6007, 0x0007, 0x0804, 0xd1fb, 0x080c, 0xe498, 0x1904, 0xd40e, - 0x080c, 0x332b, 0x1904, 0xd40e, 0x00d6, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, - 0x655a, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686, - 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140, - 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480, - 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034, - 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, - 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xdf56, - 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, - 0x900e, 0x080c, 0x3235, 0x002e, 0x080c, 0x66b9, 0x6007, 0x000a, - 0x00de, 0x0804, 0xd1fb, 0x6007, 0x000b, 0x00de, 0x0804, 0xd1fb, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x6007, 0x0001, 0x0804, 0xd1fb, - 0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, - 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014, - 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04, - 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, - 0x080c, 0x3235, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c, - 0xe665, 0x0804, 0xd1fb, 0x080c, 0x6a19, 0x1140, 0x2001, 0x1837, - 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd023, - 0x080c, 0x69be, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, - 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x659a, - 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, - 0x9686, 0x0006, 0x1904, 0xd0e8, 0x080c, 0xdf63, 0x1120, 0x6007, - 0x000e, 0x0804, 0xd1fb, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, - 0x080c, 0x31e4, 0x080c, 0xcf43, 0x004e, 0x0016, 0x9006, 0x2009, - 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe29e, + 0x8000, 0x0016, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x080c, + 0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xac8c, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, + 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014, + 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, + 0x19a0, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, + 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd565, + 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, + 0xa867, 0x0103, 0x0010, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe, + 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, + 0x11b8, 0x7090, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, + 0x080c, 0x975f, 0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080, + 0xaa78, 0x9206, 0x1110, 0x080c, 0x31e7, 0x080c, 0xaffd, 0x0020, + 0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, + 0x7060, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, + 0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004, + 0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x975f, 0x05f0, 0x707c, + 0xaacc, 0x9206, 0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c, + 0x31e7, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, + 0x5692, 0x001e, 0x0010, 0x080c, 0x547b, 0x080c, 0xc838, 0x0508, + 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, + 0xc838, 0x01b8, 0x6014, 0x2048, 0x080c, 0x547b, 0x1d70, 0xa87b, + 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, + 0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x6d80, 0x012e, 0x080c, + 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206, + 0x0930, 0x0888, 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, 0x080c, 0xc838, 0x0904, 0xce87, + 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, + 0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, + 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, + 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, + 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7, 0x00ce, 0x0090, + 0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, + 0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, + 0x00ff, 0xa89e, 0x080c, 0x6d74, 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, 0x25fb, + 0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, + 0x7c3c, 0x2011, 0x8018, 0x080c, 0x4b07, 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, 0xc826, 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, 0xbeb3, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, + 0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xc838, 0x01c8, 0x080c, + 0xca27, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, + 0xa87c, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5, 0x0040, 0xa867, + 0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6d80, 0x009e, + 0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, + 0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, + 0x0005, 0x080c, 0xcb3c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, + 0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, + 0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, + 0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, + 0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0005, 0x0c51, + 0x1d81, 0x0005, 0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001, + 0x1988, 0x2004, 0x604a, 0x0005, 0x080c, 0xabed, 0x0804, 0x96a0, + 0x611c, 0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc, + 0xa87c, 0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e, + 0xa87c, 0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc, + 0x1128, 0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003, + 0x0010, 0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, + 0x0016, 0x1a0c, 0x0d7d, 0x001b, 0x006e, 0x00be, 0x0005, 0xcfb7, + 0xd6c0, 0xd811, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfee, + 0xd893, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0x080c, + 0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, + 0x006e, 0x0005, 0xcfd2, 0xddaa, 0xcfd2, 0xcfd2, 0xcfd2, 0xcfd2, + 0xcfd2, 0xcfd2, 0xdd59, 0xddfc, 0xcfd2, 0xe453, 0xe487, 0xe453, + 0xe487, 0xcfd2, 0x080c, 0x0d7d, 0x6000, 0x9082, 0x0016, 0x1a0c, + 0x0d7d, 0x6000, 0x000a, 0x0005, 0xcfec, 0xda6f, 0xdb38, 0xdb5a, + 0xdbd5, 0xcfec, 0xdccf, 0xdc5d, 0xd89d, 0xdd31, 0xdd46, 0xcfec, + 0xcfec, 0xcfec, 0xcfec, 0xcfec, 0x080c, 0x0d7d, 0x91b2, 0x0053, + 0x1a0c, 0x0d7d, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xd436, 0x0002, + 0xd038, 0xd227, 0xd038, 0xd038, 0xd038, 0xd230, 0xd038, 0xd038, + 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, + 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd03a, + 0xd0a1, 0xd0b0, 0xd114, 0xd13f, 0xd1b8, 0xd212, 0xd038, 0xd038, + 0xd233, 0xd038, 0xd038, 0xd248, 0xd255, 0xd038, 0xd038, 0xd038, + 0xd038, 0xd038, 0xd2d8, 0xd038, 0xd038, 0xd2ec, 0xd038, 0xd038, + 0xd2a7, 0xd038, 0xd038, 0xd038, 0xd304, 0xd038, 0xd038, 0xd038, + 0xd381, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd3fe, + 0x080c, 0x0d7d, 0x080c, 0x6a29, 0x1150, 0x2001, 0x1837, 0x2004, + 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, + 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xd220, 0x080c, + 0x69c5, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, + 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0xa896, 0x080c, 0x93a5, + 0x0076, 0x903e, 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, + 0x001e, 0x080c, 0xa8b2, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, + 0x6610, 0x2658, 0x080c, 0x6634, 0xbe04, 0x9684, 0x00ff, 0x9082, + 0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, + 0x00be, 0x2c08, 0x080c, 0xe6b0, 0x002e, 0x001e, 0x1178, 0x080c, + 0xdf19, 0x1904, 0xd10c, 0x080c, 0xdeb5, 0x1120, 0x6007, 0x0008, + 0x0804, 0xd220, 0x6007, 0x0009, 0x0804, 0xd220, 0x080c, 0xe14c, + 0x0128, 0x080c, 0xdf19, 0x0d78, 0x0804, 0xd10c, 0x6017, 0x1900, + 0x0c88, 0x080c, 0x3332, 0x1904, 0xd433, 0x6106, 0x080c, 0xde66, + 0x6007, 0x0006, 0x0804, 0xd220, 0x6007, 0x0007, 0x0804, 0xd220, + 0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c, 0x3332, 0x1904, 0xd433, + 0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, + 0x1220, 0x2001, 0x0001, 0x080c, 0x6561, 0x96b4, 0xff00, 0x8637, + 0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, + 0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, + 0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, + 0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, + 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, + 0x00b0, 0x00ee, 0x080c, 0xdf81, 0x1190, 0x9686, 0x0006, 0x1140, + 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e, + 0x080c, 0x66c0, 0x6007, 0x000a, 0x00de, 0x0804, 0xd220, 0x6007, + 0x000b, 0x00de, 0x0804, 0xd220, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x6007, 0x0001, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433, + 0x080c, 0x3332, 0x1904, 0xd433, 0x2071, 0x0260, 0x7034, 0x90b4, + 0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, + 0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, + 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e, 0x6007, + 0x000c, 0x2001, 0x0001, 0x080c, 0xe690, 0x0804, 0xd220, 0x080c, + 0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, + 0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610, 0x2658, + 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, + 0x2001, 0x0006, 0x080c, 0x65a1, 0x002e, 0x0050, 0x96b4, 0xff00, + 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd10c, + 0x080c, 0xdf8e, 0x1120, 0x6007, 0x000e, 0x0804, 0xd220, 0x0046, + 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31e7, 0x080c, 0xcf67, + 0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, + 0x2009, 0x0029, 0x080c, 0xe2c9, 0x6010, 0x2058, 0xb800, 0xc0e5, + 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xd220, 0x2001, + 0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, + 0x0004, 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xbbae, 0x003e, + 0x002e, 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, + 0x9682, 0x0004, 0x0a04, 0xd10c, 0x9682, 0x0007, 0x0a04, 0xd168, + 0x0804, 0xd10c, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd220, + 0x080c, 0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, + 0x9086, 0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610, + 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150, + 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, + 0x1904, 0xd10c, 0x080c, 0xdfbc, 0x1130, 0x080c, 0xdeb5, 0x1118, + 0x6007, 0x0010, 0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, + 0x080c, 0x31e7, 0x080c, 0xcf67, 0x004e, 0x0016, 0x9006, 0x2009, + 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe2c9, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, - 0x0001, 0x0804, 0xd1fb, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156, - 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, - 0x0270, 0x080c, 0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, - 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xd0e8, - 0x9682, 0x0007, 0x0a04, 0xd144, 0x0804, 0xd0e8, 0x6017, 0x1900, - 0x6007, 0x0009, 0x0804, 0xd1fb, 0x080c, 0x6a19, 0x1140, 0x2001, - 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, - 0xd023, 0x080c, 0x69be, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, - 0x9082, 0x0006, 0x0690, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, - 0x0120, 0x9686, 0x0006, 0x1904, 0xd0e8, 0x080c, 0xdf91, 0x1130, - 0x080c, 0xde8a, 0x1118, 0x6007, 0x0010, 0x04e8, 0x0046, 0x6410, - 0x2458, 0xbca0, 0x0046, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x004e, - 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, - 0x0029, 0x080c, 0xe29e, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, - 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xe121, 0x0140, - 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0978, 0x0804, 0xd0e8, - 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x332b, 0x1904, - 0xd40e, 0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0xd5db, 0x1904, - 0xd0e8, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, - 0x966f, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, - 0x080c, 0x966f, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xe498, - 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c, 0xd5db, - 0x1904, 0xd0e8, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x91f4, - 0x080c, 0x966f, 0x0005, 0x080c, 0x332b, 0x1904, 0xd40e, 0x6007, - 0x0023, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005, - 0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, - 0x080c, 0xd5db, 0x1904, 0xd0e8, 0x0016, 0x0026, 0x00e6, 0x2071, - 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc802, - 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, - 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, - 0x080c, 0xe268, 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, 0xabc9, 0x2160, 0x6007, 0x0025, - 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00ee, 0x002e, - 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156, 0x0016, - 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, - 0x080c, 0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, - 0x0031, 0x0804, 0xd1fb, 0x080c, 0xb7fb, 0x080c, 0x74d5, 0x1190, - 0x0006, 0x0026, 0x0036, 0x080c, 0x74ef, 0x1138, 0x080c, 0x77d9, - 0x080c, 0x6022, 0x080c, 0x7406, 0x0010, 0x080c, 0x74a9, 0x003e, - 0x002e, 0x000e, 0x0005, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c, - 0xd5db, 0x1904, 0xd0e8, 0x6106, 0x080c, 0xd5f7, 0x1120, 0x6007, - 0x002b, 0x0804, 0xd1fb, 0x6007, 0x002c, 0x0804, 0xd1fb, 0x080c, - 0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c, - 0xd5db, 0x1904, 0xd0e8, 0x6106, 0x080c, 0xd5fc, 0x1120, 0x6007, - 0x002e, 0x0804, 0xd1fb, 0x6007, 0x002f, 0x0804, 0xd1fb, 0x080c, - 0x332b, 0x1904, 0xd40e, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, - 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, - 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, - 0xd202, 0x080c, 0x56d7, 0xd0e4, 0x0904, 0xd359, 0x2071, 0x026c, - 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6a57, - 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, - 0x0510, 0x080c, 0x6a53, 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, - 0x1590, 0x687c, 0x9106, 0x1578, 0x7210, 0x080c, 0xc802, 0x0590, - 0x080c, 0xd4c6, 0x0578, 0x080c, 0xe31a, 0x0560, 0x622e, 0x6007, - 0x0036, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce, - 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, - 0xc802, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, - 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe268, 0x2c10, - 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, - 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, - 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x332b, 0x1904, 0xd40e, - 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, - 0x1904, 0xd202, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x56d7, 0xd0e4, - 0x0904, 0xd3d1, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, - 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, - 0x9085, 0x0001, 0x080c, 0xe268, 0x2c10, 0x00ce, 0x05e8, 0x080c, - 0xc802, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, - 0x00c6, 0x0026, 0x2260, 0x080c, 0xc412, 0x002e, 0x00ce, 0x7118, - 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, - 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, - 0x0170, 0x080c, 0xd4c6, 0x0904, 0xd352, 0x0056, 0x7510, 0x7614, - 0x080c, 0xe333, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, - 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, - 0x8020, 0x080c, 0x91ed, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, - 0x6017, 0x0300, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, - 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, - 0xd329, 0x00e6, 0x0026, 0x080c, 0x6a19, 0x0550, 0x080c, 0x69be, - 0x080c, 0xe50a, 0x1518, 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, - 0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, - 0x78e6, 0x9284, 0xff00, 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, - 0x70e7, 0x0000, 0x080c, 0x6a57, 0x0120, 0x2011, 0x1a09, 0x2013, - 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2fb2, 0x0010, 0x080c, 0xe53c, - 0x002e, 0x00ee, 0x080c, 0xabc9, 0x0804, 0xd201, 0x080c, 0xabc9, - 0x0005, 0x2600, 0x0002, 0xd425, 0xd456, 0xd467, 0xd425, 0xd425, - 0xd427, 0xd478, 0xd425, 0xd425, 0xd425, 0xd444, 0xd425, 0xd425, - 0xd425, 0xd483, 0xd490, 0xd4c1, 0xd425, 0x080c, 0x0d7d, 0x080c, - 0xe498, 0x1d20, 0x080c, 0x332b, 0x1d08, 0x080c, 0xd5db, 0x1148, - 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x91f4, - 0x0005, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x6007, 0x0001, 0x6003, - 0x0001, 0x080c, 0x91f4, 0x0005, 0x080c, 0xe498, 0x1938, 0x080c, - 0x332b, 0x1920, 0x080c, 0xd5db, 0x1d60, 0x703c, 0x6016, 0x6007, - 0x004a, 0x6003, 0x0001, 0x080c, 0x91f4, 0x0005, 0x080c, 0x332b, - 0x1904, 0xd40e, 0x2009, 0x0041, 0x080c, 0xe545, 0x6007, 0x0047, - 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005, 0x080c, - 0x332b, 0x1904, 0xd40e, 0x2009, 0x0042, 0x080c, 0xe545, 0x6007, - 0x0047, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005, - 0x080c, 0x332b, 0x1904, 0xd40e, 0x2009, 0x0046, 0x080c, 0xe545, - 0x080c, 0xabc9, 0x0005, 0x080c, 0xd4e3, 0x0904, 0xd40e, 0x6007, - 0x004e, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005, - 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, - 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x19bd, 0x2004, - 0x9106, 0x11b0, 0x7144, 0x2001, 0x19be, 0x2004, 0x9106, 0x0190, - 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, - 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x0110, - 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, - 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, - 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4, - 0xd084, 0x0150, 0x7128, 0x6050, 0x9106, 0x1120, 0x712c, 0x604c, - 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, - 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, - 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7090, 0x908a, - 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, - 0x080c, 0x1053, 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004, 0xa816, - 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, - 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x1053, 0x01c0, 0x2900, - 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, - 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, - 0x1800, 0x7093, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fec, 0x9006, - 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, - 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, - 0x080c, 0x2189, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, - 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, - 0x080c, 0x2189, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x2189, 0x2061, - 0x19a0, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, - 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, - 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0, 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, 0x21a1, 0x20a1, 0x024c, 0x2001, - 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, - 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, - 0x0240, 0x0c98, 0x080c, 0x21a1, 0x2061, 0x19a3, 0x6004, 0x20a0, - 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, - 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, - 0x0240, 0x0c98, 0x2061, 0x19a3, 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, - 0x080c, 0xd671, 0x00de, 0x0005, 0x00d6, 0x080c, 0xd67e, 0x1520, - 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, - 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xe665, 0x2009, - 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, - 0x080c, 0x25fb, 0x1148, 0x2001, 0x0001, 0x080c, 0xe665, 0x2110, - 0x900e, 0x080c, 0x3235, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, - 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0xac3b, 0x0598, 0x0016, - 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, - 0x25fb, 0x1568, 0x080c, 0x65bd, 0x1550, 0xbe12, 0xbd16, 0x00ce, - 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xe498, 0x11c8, 0x080c, - 0x332b, 0x11b0, 0x080c, 0xd5db, 0x0500, 0x2001, 0x0007, 0x080c, - 0x656e, 0x2001, 0x0007, 0x080c, 0x659a, 0x6017, 0x0000, 0x6023, - 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x0010, - 0x080c, 0xabc9, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, - 0xabc9, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xabc9, 0x9006, - 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, - 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, - 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, - 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, - 0x6800, 0x9084, 0x00ff, 0x910d, 0x6162, 0x908e, 0x0014, 0x0110, - 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, - 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd7c0, - 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d7d, - 0x2001, 0x0007, 0x080c, 0x659a, 0x080c, 0x95ad, 0x080c, 0xac04, - 0x080c, 0x966f, 0x0005, 0xd6fb, 0xd6fd, 0xd6fb, 0xd6fb, 0xd6fb, - 0xd6fd, 0xd70a, 0xd7bd, 0xd75a, 0xd7bd, 0xd76e, 0xd7bd, 0xd70a, - 0xd7bd, 0xd7b5, 0xd7bd, 0xd7b5, 0xd7bd, 0xd7bd, 0xd6fb, 0xd6fb, - 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, - 0xd6fb, 0xd6fd, 0xd6fb, 0xd7bd, 0xd6fb, 0xd6fb, 0xd7bd, 0xd6fb, - 0xd7ba, 0xd7bd, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd7bd, 0xd7bd, - 0xd6fb, 0xd7bd, 0xd7bd, 0xd6fb, 0xd705, 0xd6fb, 0xd6fb, 0xd6fb, - 0xd6fb, 0xd7b9, 0xd7bd, 0xd6fb, 0xd6fb, 0xd7bd, 0xd7bd, 0xd6fb, - 0xd6fb, 0xd6fb, 0xd6fb, 0x080c, 0x0d7d, 0x080c, 0xcf46, 0x6003, - 0x0002, 0x080c, 0x966f, 0x0804, 0xd7bf, 0x9006, 0x080c, 0x655a, - 0x0804, 0xd7bd, 0x080c, 0x6a53, 0x1904, 0xd7bd, 0x9006, 0x080c, - 0x655a, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, - 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, - 0x2058, 0xb884, 0x9005, 0x1178, 0x080c, 0xcf2e, 0x1904, 0xd7bd, - 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4cb7, 0x004e, - 0x003e, 0x0804, 0xd7bd, 0x080c, 0x335c, 0x1904, 0xd7bd, 0x2001, - 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, - 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x2001, 0x0002, 0x080c, 0x656e, - 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, - 0x080c, 0x966f, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, 0x861b, - 0x0804, 0xd7bf, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, - 0x9686, 0x0006, 0x0904, 0xd7bd, 0x9686, 0x0004, 0x0904, 0xd7bd, - 0x080c, 0x8e99, 0x2001, 0x0004, 0x0804, 0xd7bb, 0x2001, 0x1800, - 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, - 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x2001, - 0x0006, 0x080c, 0xd7d9, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, - 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, - 0x080c, 0x659a, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, - 0x0006, 0x080c, 0x656e, 0x080c, 0x6a53, 0x11f8, 0x2001, 0x1837, - 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, - 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, - 0x0804, 0xd744, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0409, - 0x0020, 0x0018, 0x0010, 0x080c, 0x659a, 0x080c, 0xabc9, 0x0005, - 0x2600, 0x0002, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d6, - 0xd7d4, 0xd7d6, 0xd7d4, 0xd7d4, 0xd7d6, 0xd7d4, 0xd7d4, 0xd7d4, - 0xd7d6, 0xd7d6, 0xd7d6, 0xd7d6, 0x080c, 0x0d7d, 0x080c, 0xabc9, - 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, - 0x0138, 0x080c, 0x656e, 0x9006, 0x080c, 0x655a, 0x080c, 0x3215, - 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, - 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d7d, 0x91b6, 0x0015, - 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x006b, - 0x0005, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xd854, - 0xd819, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, - 0xb67a, 0xb67a, 0xb67a, 0xd854, 0xd85b, 0xb67a, 0xb67a, 0xb67a, - 0xb67a, 0x00f6, 0x080c, 0x6a53, 0x11d8, 0x080c, 0xcf2e, 0x11c0, - 0x6010, 0x905d, 0x01a8, 0xb884, 0x9005, 0x0190, 0x9006, 0x080c, - 0x655a, 0x2001, 0x0002, 0x080c, 0x656e, 0x6023, 0x0001, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00d0, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1190, - 0x080c, 0x661e, 0x0118, 0x080c, 0xabc9, 0x0060, 0xb810, 0x0006, - 0xb814, 0x0006, 0x080c, 0x603c, 0x000e, 0xb816, 0x000e, 0xb812, - 0x080c, 0xabc9, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, - 0x080c, 0xabc9, 0x0005, 0x080c, 0xba03, 0x1148, 0x6003, 0x0001, - 0x6007, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0010, 0x080c, - 0xabc9, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x080c, - 0x95ad, 0x080c, 0xac04, 0x0005, 0x9182, 0x0040, 0x0002, 0xd88a, - 0xd88a, 0xd88a, 0xd88a, 0xd88c, 0xd88a, 0xd88a, 0xd88a, 0xd88a, - 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, - 0xd88a, 0xd88a, 0x080c, 0x0d7d, 0x0096, 0x00b6, 0x00d6, 0x00e6, - 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11b0, - 0x6007, 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, - 0xd8f3, 0x080c, 0xe659, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, - 0x0001, 0x2011, 0x0200, 0x080c, 0x88bb, 0x0020, 0x9026, 0x080c, - 0xe4dd, 0x0c30, 0x080c, 0x103a, 0x090c, 0x0d7d, 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, - 0x6d70, 0x001e, 0x080c, 0xe659, 0x1904, 0xd953, 0x9486, 0x2000, - 0x1130, 0x2019, 0x0017, 0x080c, 0xe20e, 0x0804, 0xd953, 0x9486, - 0x0200, 0x1120, 0x080c, 0xe19e, 0x0804, 0xd953, 0x9486, 0x0400, - 0x0120, 0x9486, 0x1000, 0x1904, 0xd953, 0x2019, 0x0002, 0x080c, - 0xe1bd, 0x0804, 0xd953, 0x2069, 0x1a6f, 0x6a00, 0xd284, 0x0904, - 0xd9bd, 0x9284, 0x0300, 0x1904, 0xd9b6, 0x6804, 0x9005, 0x0904, - 0xd99e, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1053, 0x0904, 0xd95f, - 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, - 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd9c1, 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, 0xd95b, 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, 0x6d73, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, - 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, - 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x103a, 0x1904, 0xd908, - 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, - 0x080c, 0x91ed, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, - 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, - 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, - 0x0043, 0x2009, 0xa025, 0x080c, 0x91ed, 0x0828, 0x6868, 0x602e, - 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, - 0x2009, 0xa022, 0x080c, 0x91ed, 0x0804, 0xd953, 0x2001, 0x180e, - 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b00, 0x6017, - 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, - 0x2009, 0xa022, 0x080c, 0x91ed, 0x0804, 0xd953, 0x6017, 0xf500, - 0x0c98, 0x6017, 0xf600, 0x0804, 0xd973, 0x6017, 0xf200, 0x0804, - 0xd973, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, - 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xd95b, 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, - 0x0d7d, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xda3d, 0x2041, 0x0001, - 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, - 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, - 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1053, 0x0170, 0x2900, - 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, - 0x0118, 0x080c, 0x106c, 0x0cc8, 0x080c, 0x106c, 0x0804, 0xd95f, - 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, - 0x0000, 0x080c, 0xe241, 0x0804, 0xd953, 0x8010, 0x0004, 0x801a, - 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, - 0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d7d, 0x9082, 0x0040, - 0x0a0c, 0x0d7d, 0x2008, 0x0804, 0xdac8, 0x9186, 0x0051, 0x0108, - 0x0040, 0x080c, 0xaa84, 0x01e8, 0x9086, 0x0002, 0x0904, 0xdb0f, - 0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, 0x9186, - 0x0014, 0x0150, 0x190c, 0x0d7d, 0x080c, 0xaa84, 0x0150, 0x9086, - 0x0004, 0x0904, 0xdbac, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, - 0x001a, 0x080c, 0xac85, 0x0005, 0xda8f, 0xda91, 0xda91, 0xdab8, - 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, - 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0x080c, - 0x0d7d, 0x080c, 0x95ad, 0x080c, 0x966f, 0x0036, 0x0096, 0x6014, - 0x904d, 0x01d8, 0x080c, 0xc814, 0x01c0, 0x6003, 0x0002, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, - 0x080c, 0xe241, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, - 0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, - 0x0096, 0x080c, 0x95ad, 0x080c, 0x966f, 0x080c, 0xc814, 0x0120, - 0x6014, 0x2048, 0x080c, 0x106c, 0x080c, 0xac04, 0x009e, 0x0005, - 0x0002, 0xdadc, 0xdaf1, 0xdade, 0xdb06, 0xdadc, 0xdadc, 0xdadc, - 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, - 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0x080c, 0x0d7d, 0x0096, 0x6014, - 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, - 0x080c, 0xac68, 0x0010, 0x6003, 0x0004, 0x080c, 0x966f, 0x009e, - 0x0005, 0x080c, 0xc814, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, - 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8890, 0x080c, 0xabc9, 0x080c, - 0x966f, 0x0005, 0x080c, 0xe4a1, 0x0db0, 0x0cc8, 0x6003, 0x0001, - 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x91ed, 0x0005, 0x9182, - 0x0040, 0x0002, 0xdb25, 0xdb27, 0xdb25, 0xdb25, 0xdb25, 0xdb25, - 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, - 0xdb25, 0xdb25, 0xdb25, 0xdb28, 0xdb25, 0x080c, 0x0d7d, 0x0005, - 0x00d6, 0x080c, 0x8890, 0x00de, 0x080c, 0xe4f9, 0x080c, 0xabc9, - 0x0005, 0x9182, 0x0040, 0x0002, 0xdb47, 0xdb47, 0xdb47, 0xdb47, - 0xdb47, 0xdb47, 0xdb47, 0xdb47, 0xdb47, 0xdb49, 0xdb74, 0xdb47, - 0xdb47, 0xdb47, 0xdb47, 0xdb74, 0xdb47, 0xdb47, 0xdb47, 0x080c, - 0x0d7d, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x908c, - 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, 0x2009, - 0x0041, 0x009e, 0x0804, 0xdc34, 0x6003, 0x0007, 0x601b, 0x0000, - 0x080c, 0x8890, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, - 0x1130, 0x080c, 0x8890, 0x080c, 0xabc9, 0x009e, 0x0005, 0x080c, - 0xe4a1, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, - 0x2102, 0x0036, 0x080c, 0x960a, 0x080c, 0x966f, 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, 0xe241, 0x6018, 0x9005, 0x1128, - 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, - 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xdbc3, - 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc5, - 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, - 0xdbc3, 0xdbc3, 0xdc10, 0x080c, 0x0d7d, 0x6014, 0x0096, 0x2048, - 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, - 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, 0x0041, - 0x009e, 0x0804, 0xdc34, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, - 0x8890, 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, 0x180e, 0x210c, - 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, - 0x080c, 0x8892, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, - 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1670, 0x1904, 0xdbc5, 0x0005, - 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, - 0x080c, 0x1670, 0x1904, 0xdbc5, 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, 0x0d7d, 0x6024, - 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0xdc57, 0xdc63, 0xdc6f, 0xdc7b, - 0xdc57, 0xdc57, 0xdc57, 0xdc57, 0xdc5e, 0xdc59, 0xdc59, 0xdc57, - 0xdc57, 0xdc57, 0xdc57, 0xdc59, 0xdc57, 0xdc59, 0xdc57, 0x080c, - 0x0d7d, 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0x6014, 0x9005, - 0x190c, 0x0d7d, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, - 0x8000, 0x2009, 0xa022, 0x080c, 0x91cf, 0x012e, 0x0005, 0x6003, - 0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, - 0x91ed, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, 0x1c03, - 0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, - 0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, 0xd0cc, - 0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, 0x918d, - 0xb035, 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x9234, - 0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, 0x2091, - 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, - 0x012e, 0x0005, 0xdcc2, 0xdcc4, 0xdcd9, 0xdcf3, 0xdcc2, 0xdcc2, - 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, - 0xdcc2, 0xdcc2, 0x080c, 0x0d7d, 0x6014, 0x2048, 0xa87c, 0xd0fc, - 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001, - 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x91ed, - 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, - 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001, - 0x080c, 0x91ed, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, - 0x080c, 0xe241, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, - 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, - 0x080c, 0x1c03, 0x6144, 0x918d, 0xa035, 0x080c, 0x9234, 0x0005, - 0x080c, 0x95ad, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, - 0xe5f6, 0x0036, 0x2019, 0x0029, 0x080c, 0xe241, 0x003e, 0x009e, - 0x080c, 0xac04, 0x080c, 0x966f, 0x0005, 0x080c, 0x960a, 0x6114, - 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe5f6, 0x0036, 0x2019, - 0x0029, 0x080c, 0xe241, 0x003e, 0x009e, 0x080c, 0xac04, 0x0005, - 0x9182, 0x0085, 0x0002, 0xdd42, 0xdd40, 0xdd40, 0xdd4e, 0xdd40, - 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, - 0x080c, 0x0d7d, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, 0x8000, - 0x2009, 0x8020, 0x080c, 0x91ed, 0x012e, 0x0005, 0x0026, 0x00e6, - 0x080c, 0xe498, 0x0118, 0x080c, 0xabc9, 0x0440, 0x2071, 0x0260, - 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, - 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, - 0xaef6, 0x7220, 0x080c, 0xe0d7, 0x0118, 0x6007, 0x0086, 0x0040, - 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, - 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ee, 0x002e, - 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, - 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085, 0x00a2, - 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xac85, - 0x0050, 0x2001, 0x0007, 0x080c, 0x659a, 0x080c, 0x95ad, 0x080c, - 0xac04, 0x080c, 0x966f, 0x0005, 0xddb1, 0xddb3, 0xddb3, 0xddb1, - 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, - 0xddb1, 0x080c, 0x0d7d, 0x080c, 0xac04, 0x080c, 0x966f, 0x0005, - 0x9182, 0x0085, 0x0a0c, 0x0d7d, 0x9182, 0x0092, 0x1a0c, 0x0d7d, - 0x9182, 0x0085, 0x0002, 0xddd0, 0xddd0, 0xddd0, 0xddd2, 0xddd0, - 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, - 0x080c, 0x0d7d, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, - 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xac85, 0x0020, 0x080c, - 0x95ad, 0x080c, 0xac04, 0x0005, 0x0036, 0x080c, 0xe4f9, 0x604b, - 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, 0x0007, - 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, 0x0382, - 0x2004, 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, - 0xa872, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa1f4, 0x009e, - 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa29f, 0x007e, 0x1520, - 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, - 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe4f9, 0x080c, 0xcf46, - 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc814, - 0x0110, 0x080c, 0xe241, 0x009e, 0x6017, 0x0000, 0x080c, 0xe4f9, - 0x6023, 0x0007, 0x080c, 0xcf46, 0x000e, 0x9086, 0x0003, 0x0110, - 0x080c, 0xa88e, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, - 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x25fb, - 0x15d8, 0x0016, 0x00c6, 0x080c, 0x661e, 0x15a0, 0x001e, 0x00c6, - 0x2160, 0x080c, 0xcf43, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, - 0xa872, 0x2019, 0x0029, 0x080c, 0xa366, 0x080c, 0x9374, 0x0076, - 0x903e, 0x080c, 0x9246, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, - 0xdfc0, 0x007e, 0x080c, 0xa88e, 0x0026, 0xba04, 0x9294, 0xff00, - 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, - 0x080c, 0x32b7, 0x002e, 0x001e, 0x080c, 0x603c, 0xbe12, 0xbd16, - 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, - 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, - 0x2104, 0x9086, 0x0074, 0x1904, 0xdee3, 0x2069, 0x0260, 0x6944, - 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xdee0, - 0x2001, 0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb884, - 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, - 0x0648, 0x080c, 0xe65e, 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, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, - 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, - 0x662d, 0x0804, 0xdf4f, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, - 0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x15c8, 0x2011, - 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, - 0xbb9e, 0x009e, 0x1568, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, - 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, - 0xe29e, 0xb800, 0xc0e5, 0xb802, 0x080c, 0xa872, 0x2019, 0x0029, - 0x080c, 0x9374, 0x0076, 0x2039, 0x0000, 0x080c, 0x9246, 0x2c08, - 0x080c, 0xdfc0, 0x007e, 0x080c, 0xa88e, 0x2001, 0x0007, 0x080c, - 0x659a, 0x2001, 0x0007, 0x080c, 0x656e, 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, 0x25fb, 0x11d0, - 0x080c, 0x661e, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, - 0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x1158, 0x2011, - 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, - 0xbb9e, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, - 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, - 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x11d0, 0x080c, - 0x661e, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, - 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x1158, 0x2011, 0x027a, - 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbb9e, - 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, - 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, - 0x0126, 0x2091, 0x8000, 0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872, - 0x2740, 0x2029, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061, - 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, - 0x9186, 0x1b32, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe065, - 0x0018, 0x9606, 0x0904, 0xe065, 0x080c, 0x8b5f, 0x0904, 0xe05c, - 0x2100, 0x9c06, 0x0904, 0xe05c, 0x080c, 0xe2df, 0x1904, 0xe05c, - 0x080c, 0xe67b, 0x0904, 0xe05c, 0x080c, 0xe2cf, 0x0904, 0xe05c, - 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x335c, 0x0904, 0xe0a7, - 0x6004, 0x9086, 0x0000, 0x1904, 0xe0a7, 0x9786, 0x0004, 0x0904, - 0xe0a7, 0x9786, 0x0007, 0x0904, 0xe05c, 0x2500, 0x9c06, 0x0904, - 0xe05c, 0x2400, 0x9c06, 0x0904, 0xe05c, 0x88ff, 0x0118, 0x605c, - 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff, 0x6000, 0x9086, 0x0004, - 0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, 0x9786, 0x000a, 0x0148, - 0x080c, 0xca29, 0x1130, 0x080c, 0xb591, 0x009e, 0x080c, 0xac04, - 0x0418, 0x6014, 0x2048, 0x080c, 0xc814, 0x01d8, 0x9786, 0x0003, - 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, - 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, - 0xe5f6, 0x0016, 0x080c, 0xcb12, 0x080c, 0x6d64, 0x001e, 0x080c, - 0xca03, 0x009e, 0x080c, 0xac04, 0x9ce0, 0x001c, 0x2001, 0x181a, - 0x2004, 0x9c02, 0x1210, 0x0804, 0xdfd9, 0x010e, 0x190c, 0xa88e, - 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, - 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, - 0x080c, 0xe5f6, 0x080c, 0xe241, 0x08e0, 0x009e, 0x08e8, 0x9786, - 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086, - 0x0003, 0x11a0, 0x080c, 0x960a, 0x0096, 0x6114, 0x2148, 0x080c, - 0xc814, 0x0118, 0x6010, 0x080c, 0x6d70, 0x009e, 0x00c6, 0x080c, - 0xabc9, 0x00ce, 0x0036, 0x080c, 0x966f, 0x003e, 0x009e, 0x0804, - 0xe05c, 0x9786, 0x000a, 0x0904, 0xe043, 0x0804, 0xe041, 0x81ff, - 0x0904, 0xe05c, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138, - 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe05c, 0x6000, - 0x9086, 0x0002, 0x1904, 0xe05c, 0x080c, 0xca18, 0x0138, 0x080c, - 0xca29, 0x1904, 0xe05c, 0x080c, 0xb591, 0x0038, 0x080c, 0x3215, - 0x080c, 0xca29, 0x1110, 0x080c, 0xb591, 0x080c, 0xac04, 0x0804, - 0xe05c, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, - 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe268, 0x001e, - 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, - 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f8, 0xe0f6, - 0xe0f6, 0xe0f6, 0xe0f6, 0xac04, 0xac04, 0xe0f6, 0x9006, 0x0005, - 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, - 0x2c00, 0x2009, 0x0020, 0x080c, 0xe29e, 0x001e, 0x004e, 0x2019, - 0x0002, 0x080c, 0xddf2, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, - 0x080c, 0xc814, 0x0140, 0x6014, 0x904d, 0x080c, 0xc41f, 0x687b, - 0x0005, 0x080c, 0x6d70, 0x009e, 0x080c, 0xac04, 0x9085, 0x0001, - 0x0005, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156, 0x0016, 0x0026, - 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, - 0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, - 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, - 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079, 0x0001, 0x8fff, 0x0904, - 0xe191, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04, - 0xe191, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, - 0xe2cf, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, - 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, - 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106, 0x11d0, 0x0096, 0x601c, - 0xd084, 0x0140, 0x080c, 0xe4f9, 0x080c, 0xcf46, 0x080c, 0x1a6a, - 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc814, 0x0120, 0x0046, - 0x080c, 0xe241, 0x004e, 0x009e, 0x080c, 0xac04, 0x88ff, 0x1198, - 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, - 0xe146, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, - 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x080c, 0xa872, - 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, - 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xa1f4, - 0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x080c, 0xe137, 0x005e, - 0x007e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c, 0xa872, 0x00b6, - 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, - 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x661e, 0x1190, 0x0056, - 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, - 0xa1f4, 0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x080c, 0xe137, - 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe1ca, 0x015e, 0x00ce, - 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c, - 0xa872, 0x00b6, 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, - 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0xa1f4, - 0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x2c20, 0x080c, 0xe137, - 0x005e, 0x007e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c, 0xa872, - 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, - 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x661e, 0x11a0, 0x0086, - 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xe4dd, 0x004e, - 0x0096, 0x904e, 0x080c, 0xa1f4, 0x009e, 0x008e, 0x903e, 0x080c, - 0xa29f, 0x080c, 0xe137, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe21a, - 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, 0xa88e, - 0x0005, 0x0016, 0x00f6, 0x080c, 0xc812, 0x0198, 0xa864, 0x9084, - 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, - 0x0000, 0xab82, 0x080c, 0x6d70, 0x2f48, 0x0cb0, 0xab82, 0x080c, - 0x6d70, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, - 0x0000, 0x080c, 0x6d70, 0x2f48, 0x0cb8, 0x080c, 0x6d70, 0x0c88, - 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071, - 0x1800, 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06, - 0x0188, 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150, - 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424, - 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, - 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, - 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006, - 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xaae2, 0xa867, 0x010d, - 0xa88e, 0x0026, 0x2010, 0x080c, 0xc802, 0x2001, 0x0000, 0x0120, - 0x2200, 0x9080, 0x0017, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, - 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, - 0x198e, 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6d70, 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, 0x1987, - 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x91ed, 0x001e, 0x0005, - 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, - 0x080c, 0xcb59, 0x0030, 0x080c, 0xe4f9, 0x080c, 0x8890, 0x080c, - 0xabc9, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, - 0xe32e, 0xe32e, 0xe32e, 0xe330, 0xe32e, 0xe330, 0xe330, 0xe32e, - 0xe330, 0xe32e, 0xe32e, 0xe32e, 0xe32e, 0xe32e, 0x9006, 0x0005, - 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, - 0x0002, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe354, - 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0x6007, - 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, - 0x8020, 0x080c, 0x91ed, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, - 0xe4f9, 0x604b, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, - 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe3ad, - 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, - 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, - 0x080c, 0x91ed, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, - 0xe424, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, - 0x0d7d, 0x0804, 0xe424, 0x2048, 0x080c, 0xc814, 0x1130, 0x0028, - 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, - 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, - 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdc34, 0x0804, - 0xe424, 0x2009, 0x0041, 0x0804, 0xe41e, 0x9186, 0x0005, 0x15a0, - 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, - 0xe347, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0d7d, 0x0804, 0xe368, - 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, - 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, - 0x1904, 0xe424, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, - 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1731, - 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x103a, 0x090c, - 0x0d7d, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, - 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, - 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, - 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, - 0xae96, 0xa89f, 0x0001, 0x080c, 0x6d70, 0x2019, 0x0045, 0x6008, - 0x2068, 0x080c, 0xddf2, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, - 0x0007, 0x901e, 0x631a, 0x634a, 0x003e, 0x0038, 0x604b, 0x0000, - 0x6003, 0x0007, 0x080c, 0xdc34, 0x00ce, 0x00de, 0x009e, 0x0005, - 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, - 0x9186, 0x0027, 0x1178, 0x080c, 0x95ad, 0x0036, 0x0096, 0x6014, - 0x2048, 0x2019, 0x0004, 0x080c, 0xe241, 0x009e, 0x003e, 0x080c, - 0x966f, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xac85, 0x0005, - 0xe457, 0xe455, 0xe455, 0xe455, 0xe455, 0xe455, 0xe457, 0xe455, - 0xe455, 0xe455, 0xe455, 0xe455, 0xe455, 0x080c, 0x0d7d, 0x6003, - 0x000c, 0x080c, 0x966f, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, - 0x0085, 0x0208, 0x001a, 0x080c, 0xac85, 0x0005, 0xe473, 0xe473, - 0xe473, 0xe473, 0xe475, 0xe495, 0xe473, 0xe473, 0xe473, 0xe473, - 0xe473, 0xe473, 0xe473, 0x080c, 0x0d7d, 0x00d6, 0x2c68, 0x080c, - 0xab73, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, - 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, - 0x6910, 0x6112, 0x6023, 0x0004, 0x2009, 0x8020, 0x080c, 0x91ed, - 0x2d60, 0x080c, 0xabc9, 0x00de, 0x0005, 0x080c, 0xabc9, 0x0005, - 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, - 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, - 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988, 0x2004, - 0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, - 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, - 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, 0x2004, 0x9100, - 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6, 0x2058, 0xb8bc, 0x00be, - 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, - 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, - 0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c, - 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x8890, 0x080c, 0xabc9, - 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, - 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x2068, 0x9005, - 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, - 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182c, 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, - 0xbb9e, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, - 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbb9e, 0x009e, 0x1100, - 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, - 0x5fb5, 0x080c, 0x2fb2, 0x00ee, 0x0005, 0x0096, 0x0026, 0x080c, - 0x103a, 0x090c, 0x0d7d, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9, - 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046, 0x1118, - 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041, 0x0110, - 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294, 0xff00, - 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038, 0x9084, - 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c, 0x9294, - 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244, 0x9294, - 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2, 0x9186, - 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a, 0x2204, - 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210, 0x2204, - 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210, 0x9186, - 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6, 0x8210, - 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be, 0x8210, - 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013, 0x0001, - 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210, 0x2204, - 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011, 0x0260, - 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x9186, - 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a, 0x0146, - 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004, 0x8210, - 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205, 0x2013, - 0x0000, 0x002e, 0x080c, 0x6d70, 0x009e, 0x0005, 0x00e6, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, - 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6, - 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, - 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061, - 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578, 0x6720, - 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, - 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe2cf, 0x01b8, 0x080c, - 0xe2df, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, - 0x1a6a, 0x001e, 0x080c, 0xca18, 0x1110, 0x080c, 0x3215, 0x080c, - 0xca29, 0x1110, 0x080c, 0xb591, 0x080c, 0xac04, 0x9ce0, 0x001c, - 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, - 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, - 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001, - 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036, 0x0046, - 0x080c, 0xcf2e, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, 0x6010, - 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c, 0x4cb7, - 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, - 0xa366, 0x080c, 0xac04, 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, - 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001, - 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, 0x9086, 0x0000, - 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, 0x9ce0, 0x001c, - 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60, 0x9085, 0x0001, - 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x0126, - 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, - 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, 0x7000, 0x8000, - 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, - 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, - 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, - 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6, 0x0021, 0x00ee, - 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, 0x1220, 0x8e70, - 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, 0xfff4, 0x0c99, - 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69, 0x00ee, 0x0005, - 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7014, - 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002, - 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, - 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xf93e + 0x0001, 0x00f0, 0x080c, 0xe14c, 0x0140, 0x96b4, 0xff00, 0x8637, + 0x9686, 0x0006, 0x0978, 0x0804, 0xd10c, 0x6017, 0x1900, 0x6007, + 0x0009, 0x0070, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xe4c3, + 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007, 0x0012, + 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, + 0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0cb0, + 0x6007, 0x0005, 0x0c68, 0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c, + 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007, + 0x0020, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, + 0x080c, 0x3332, 0x1904, 0xd433, 0x6007, 0x0023, 0x6003, 0x0001, + 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0xe4c3, 0x1904, + 0xd433, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, + 0xd10c, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, + 0xffff, 0x0180, 0x2c08, 0x080c, 0xc826, 0x01b0, 0x2260, 0x7240, + 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, + 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xe293, 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, 0xabed, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, + 0x9225, 0x080c, 0x96a0, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, + 0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, + 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xbbae, 0x003e, + 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd220, + 0x080c, 0xb81f, 0x080c, 0x74e9, 0x1190, 0x0006, 0x0026, 0x0036, + 0x080c, 0x7503, 0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, + 0x741a, 0x0010, 0x080c, 0x74bd, 0x003e, 0x002e, 0x000e, 0x0005, + 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, + 0x6106, 0x080c, 0xd61c, 0x1120, 0x6007, 0x002b, 0x0804, 0xd220, + 0x6007, 0x002c, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433, + 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, + 0x6106, 0x080c, 0xd621, 0x1120, 0x6007, 0x002e, 0x0804, 0xd220, + 0x6007, 0x002f, 0x0804, 0xd220, 0x080c, 0x3332, 0x1904, 0xd433, + 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, + 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, + 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xd227, 0x080c, 0x56de, + 0xd0e4, 0x0904, 0xd37e, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, + 0x603e, 0x7108, 0x720c, 0x080c, 0x6a67, 0x0140, 0x6010, 0x2058, + 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x6a63, + 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106, + 0x1578, 0x7210, 0x080c, 0xc826, 0x0590, 0x080c, 0xd4eb, 0x0578, + 0x080c, 0xe345, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, + 0x2009, 0x8020, 0x080c, 0x921e, 0x00ce, 0x00de, 0x00ee, 0x0005, + 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xc826, 0x01c0, 0x9280, + 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, + 0x9085, 0x0001, 0x080c, 0xe293, 0x2c10, 0x2160, 0x0140, 0x0890, + 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, + 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, + 0x0868, 0x080c, 0x3332, 0x1904, 0xd433, 0x6010, 0x2058, 0xb804, + 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xd227, 0x00e6, + 0x00d6, 0x00c6, 0x080c, 0x56de, 0xd0e4, 0x0904, 0xd3f6, 0x2069, + 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, + 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, + 0xe293, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xc826, 0x05d0, 0x7108, + 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, + 0x080c, 0xc436, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, + 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, + 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd4eb, + 0x0904, 0xd377, 0x0056, 0x7510, 0x7614, 0x080c, 0xe35e, 0x005e, + 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, + 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, + 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, + 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0c10, 0x6007, 0x003b, + 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xd34e, 0x00e6, 0x0026, + 0x080c, 0x6a29, 0x0550, 0x080c, 0x69c5, 0x080c, 0xe535, 0x1518, + 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079, + 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00, + 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c, + 0x6a67, 0x0120, 0x2011, 0x1a09, 0x2013, 0x07d0, 0xd0ac, 0x1128, + 0x080c, 0x2fb2, 0x0010, 0x080c, 0xe567, 0x002e, 0x00ee, 0x080c, + 0xabed, 0x0804, 0xd226, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002, + 0xd44a, 0xd47b, 0xd48c, 0xd44a, 0xd44a, 0xd44c, 0xd49d, 0xd44a, + 0xd44a, 0xd44a, 0xd469, 0xd44a, 0xd44a, 0xd44a, 0xd4a8, 0xd4b5, + 0xd4e6, 0xd44a, 0x080c, 0x0d7d, 0x080c, 0xe4c3, 0x1d20, 0x080c, + 0x3332, 0x1d08, 0x080c, 0xd600, 0x1148, 0x7038, 0x6016, 0x6007, + 0x0045, 0x6003, 0x0001, 0x080c, 0x9225, 0x0005, 0x080c, 0x31e7, + 0x080c, 0xcf67, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225, + 0x0005, 0x080c, 0xe4c3, 0x1938, 0x080c, 0x3332, 0x1920, 0x080c, + 0xd600, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, + 0x080c, 0x9225, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433, 0x2009, + 0x0041, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, + 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433, + 0x2009, 0x0042, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001, + 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904, + 0xd433, 0x2009, 0x0046, 0x080c, 0xe570, 0x080c, 0xabed, 0x0005, + 0x080c, 0xd508, 0x0904, 0xd433, 0x6007, 0x004e, 0x6003, 0x0001, + 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x004f, 0x6017, + 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, + 0x1160, 0x7140, 0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144, + 0x2001, 0x19be, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, + 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, + 0x000a, 0x080c, 0xbbc2, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, + 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x0050, + 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, + 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4, 0xd084, 0x0150, 0x7128, + 0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006, + 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, + 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, + 0x8000, 0x2071, 0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1, + 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x080c, 0x1053, 0x05a0, + 0x2900, 0x6016, 0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, + 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e, + 0x2940, 0x080c, 0x1053, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, + 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e, + 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000, + 0x6014, 0x2048, 0x080c, 0x0fec, 0x9006, 0x012e, 0x01de, 0x01ce, + 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, + 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2189, 0x2099, + 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, + 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099, + 0x0260, 0x0ca8, 0x080c, 0x2189, 0x2061, 0x19a0, 0x6004, 0x2098, + 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, + 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099, 0x0260, 0x0ca8, + 0x2061, 0x19a0, 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, 0x21a1, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, + 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, + 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x080c, + 0x21a1, 0x2061, 0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, + 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, + 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x2061, + 0x19a3, 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, 0x080c, 0xd696, 0x00de, + 0x0005, 0x00d6, 0x080c, 0xd6a3, 0x1520, 0x680c, 0x908c, 0xff00, + 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, + 0x0130, 0x9006, 0x080c, 0xe690, 0x2009, 0x0001, 0x0078, 0xd1ec, + 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x25fb, 0x1148, + 0x2001, 0x0001, 0x080c, 0xe690, 0x2110, 0x900e, 0x080c, 0x323c, + 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, + 0x00c6, 0x080c, 0xac5f, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1568, 0x080c, + 0x65c4, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, + 0x6012, 0x080c, 0xe4c3, 0x11c8, 0x080c, 0x3332, 0x11b0, 0x080c, + 0xd600, 0x0500, 0x2001, 0x0007, 0x080c, 0x6575, 0x2001, 0x0007, + 0x080c, 0x65a1, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, + 0x6003, 0x0001, 0x080c, 0x9225, 0x0010, 0x080c, 0xabed, 0x9085, + 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xabed, 0x00ce, 0x002e, + 0x001e, 0x0ca8, 0x080c, 0xabed, 0x9006, 0x0c98, 0x2069, 0x026d, + 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, + 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, + 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, + 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, + 0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, + 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013, 0x1130, + 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd7e5, 0x0092, 0x91b6, 0x0027, + 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d7d, 0x2001, 0x0007, 0x080c, + 0x65a1, 0x080c, 0x95de, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, + 0xd720, 0xd722, 0xd720, 0xd720, 0xd720, 0xd722, 0xd72f, 0xd7e2, + 0xd77f, 0xd7e2, 0xd793, 0xd7e2, 0xd72f, 0xd7e2, 0xd7da, 0xd7e2, + 0xd7da, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720, + 0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd722, 0xd720, + 0xd7e2, 0xd720, 0xd720, 0xd7e2, 0xd720, 0xd7df, 0xd7e2, 0xd720, + 0xd720, 0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd7e2, 0xd7e2, + 0xd720, 0xd72a, 0xd720, 0xd720, 0xd720, 0xd720, 0xd7de, 0xd7e2, + 0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720, + 0x080c, 0x0d7d, 0x080c, 0xcf6a, 0x6003, 0x0002, 0x080c, 0x96a0, + 0x0804, 0xd7e4, 0x9006, 0x080c, 0x6561, 0x0804, 0xd7e2, 0x080c, + 0x6a63, 0x1904, 0xd7e2, 0x9006, 0x080c, 0x6561, 0x6010, 0x2058, + 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8, + 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005, + 0x1178, 0x080c, 0xcf52, 0x1904, 0xd7e2, 0x0036, 0x0046, 0xbba0, + 0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0804, 0xd7e2, + 0x080c, 0x3363, 0x1904, 0xd7e2, 0x2001, 0x1800, 0x2004, 0x9086, + 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, + 0x00fe, 0x2001, 0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003, + 0x0001, 0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x6110, + 0x2158, 0x2009, 0x0001, 0x080c, 0x864c, 0x0804, 0xd7e4, 0x6610, + 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, + 0xd7e2, 0x9686, 0x0004, 0x0904, 0xd7e2, 0x080c, 0x8eca, 0x2001, + 0x0004, 0x0804, 0xd7e0, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, + 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, + 0x080c, 0x4cbe, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd7fe, + 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, 0x65a1, 0x9284, + 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x6575, + 0x080c, 0x6a63, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x01d0, + 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, + 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xd769, 0x2001, + 0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010, + 0x080c, 0x65a1, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002, 0xd7f9, + 0xd7f9, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7f9, 0xd7fb, 0xd7f9, + 0xd7f9, 0xd7fb, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7fb, 0xd7fb, + 0xd7fb, 0x080c, 0x0d7d, 0x080c, 0xabed, 0x0005, 0x0016, 0x00b6, + 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x6575, + 0x9006, 0x080c, 0x6561, 0x080c, 0x321c, 0x00de, 0x00be, 0x001e, + 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, + 0x000c, 0x1a0c, 0x0d7d, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, + 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x006b, 0x0005, 0xb69e, 0xb69e, + 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xd87d, 0xd83e, 0xb69e, 0xb69e, + 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, + 0xd87d, 0xd884, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0x00f6, 0x080c, + 0x6a63, 0x11d8, 0x080c, 0xcf52, 0x11c0, 0x6010, 0x905d, 0x01a8, + 0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002, + 0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, + 0x080c, 0x9225, 0x080c, 0x96a0, 0x00f0, 0x2011, 0x0263, 0x2204, + 0x8211, 0x220c, 0x080c, 0x25fb, 0x11b0, 0x080c, 0x6625, 0x0118, + 0x080c, 0xabed, 0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884, + 0x0006, 0x080c, 0x6043, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e, + 0xb812, 0x080c, 0xabed, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, + 0x1110, 0x080c, 0xabed, 0x0005, 0x080c, 0xba27, 0x1148, 0x6003, + 0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0010, + 0x080c, 0xabed, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, + 0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x9182, 0x0040, 0x0002, + 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b5, 0xd8b3, 0xd8b3, 0xd8b3, + 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, + 0xd8b3, 0xd8b3, 0xd8b3, 0x080c, 0x0d7d, 0x0096, 0x00b6, 0x00d6, + 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, + 0x11b0, 0x6007, 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, + 0x0904, 0xd91c, 0x080c, 0xe684, 0x1170, 0x9486, 0x2000, 0x1158, + 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x88ec, 0x0020, 0x9026, + 0x080c, 0xe508, 0x0c30, 0x080c, 0x103a, 0x090c, 0x0d7d, 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, 0x6d80, 0x001e, 0x080c, 0xe684, 0x1904, 0xd97c, 0x9486, + 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xe239, 0x0804, 0xd97c, + 0x9486, 0x0200, 0x1120, 0x080c, 0xe1c9, 0x0804, 0xd97c, 0x9486, + 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd97c, 0x2019, 0x0002, + 0x080c, 0xe1e8, 0x0804, 0xd97c, 0x2069, 0x1a6f, 0x6a00, 0xd284, + 0x0904, 0xd9e6, 0x9284, 0x0300, 0x1904, 0xd9df, 0x6804, 0x9005, + 0x0904, 0xd9c7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1053, 0x0904, + 0xd988, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, + 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd9ea, 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, 0xd984, 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, 0x6d83, 0x002e, 0x004e, 0x00fe, 0x00ee, + 0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, + 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x103a, 0x1904, + 0xd931, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, + 0xa022, 0x080c, 0x921e, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, + 0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, + 0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, + 0x6007, 0x0043, 0x2009, 0xa025, 0x080c, 0x921e, 0x0828, 0x6868, + 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, + 0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x2001, + 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, + 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, + 0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x6017, + 0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd99c, 0x6017, 0xf200, + 0x0804, 0xd99c, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, + 0x2c00, 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xd984, 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, 0x0d7d, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, + 0x20e8, 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xda66, 0x2041, + 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, + 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, + 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1053, 0x0170, + 0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, + 0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, + 0x902d, 0x0118, 0x080c, 0x106c, 0x0cc8, 0x080c, 0x106c, 0x0804, + 0xd988, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, + 0x200b, 0x0000, 0x080c, 0xe26c, 0x0804, 0xd97c, 0x8010, 0x0004, + 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, + 0x0013, 0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d7d, 0x9082, + 0x0040, 0x0a0c, 0x0d7d, 0x2008, 0x0804, 0xdaf1, 0x9186, 0x0051, + 0x0108, 0x0040, 0x080c, 0xaaa8, 0x01e8, 0x9086, 0x0002, 0x0904, + 0xdb38, 0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, + 0x9186, 0x0014, 0x0150, 0x190c, 0x0d7d, 0x080c, 0xaaa8, 0x0150, + 0x9086, 0x0004, 0x0904, 0xdbd5, 0x0028, 0x6004, 0x9082, 0x0040, + 0x2008, 0x001a, 0x080c, 0xaca9, 0x0005, 0xdab8, 0xdaba, 0xdaba, + 0xdae1, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, + 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, + 0x080c, 0x0d7d, 0x080c, 0x95de, 0x080c, 0x96a0, 0x0036, 0x0096, + 0x6014, 0x904d, 0x01d8, 0x080c, 0xc838, 0x01c0, 0x6003, 0x0002, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, + 0x0004, 0x080c, 0xe26c, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, + 0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, + 0x0005, 0x0096, 0x080c, 0x95de, 0x080c, 0x96a0, 0x080c, 0xc838, + 0x0120, 0x6014, 0x2048, 0x080c, 0x106c, 0x080c, 0xac28, 0x009e, + 0x0005, 0x0002, 0xdb05, 0xdb1a, 0xdb07, 0xdb2f, 0xdb05, 0xdb05, + 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, + 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0x080c, 0x0d7d, 0x0096, + 0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, + 0x0043, 0x080c, 0xac8c, 0x0010, 0x6003, 0x0004, 0x080c, 0x96a0, + 0x009e, 0x0005, 0x080c, 0xc838, 0x0138, 0x6114, 0x0096, 0x2148, + 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x88c1, 0x080c, 0xabed, + 0x080c, 0x96a0, 0x0005, 0x080c, 0xe4cc, 0x0db0, 0x0cc8, 0x6003, + 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0005, + 0x9182, 0x0040, 0x0002, 0xdb4e, 0xdb50, 0xdb4e, 0xdb4e, 0xdb4e, + 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, + 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb51, 0xdb4e, 0x080c, 0x0d7d, + 0x0005, 0x00d6, 0x080c, 0x88c1, 0x00de, 0x080c, 0xe524, 0x080c, + 0xabed, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb70, 0xdb70, 0xdb70, + 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb72, 0xdb9d, + 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb9d, 0xdb70, 0xdb70, 0xdb70, + 0x080c, 0x0d7d, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, + 0x908c, 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, + 0x2009, 0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b, + 0x0000, 0x080c, 0x88c1, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, + 0xd1ec, 0x1130, 0x080c, 0x88c1, 0x080c, 0xabed, 0x009e, 0x0005, + 0x080c, 0xe4cc, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, + 0xc1d4, 0x2102, 0x0036, 0x080c, 0x963b, 0x080c, 0x96a0, 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, 0xe26c, 0x6018, 0x9005, + 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, + 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, + 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, + 0xdbee, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, + 0xdbec, 0xdbec, 0xdbec, 0xdc39, 0x080c, 0x0d7d, 0x6014, 0x0096, + 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, + 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, + 0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b, 0x0000, + 0x080c, 0x88c1, 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, 0x180e, + 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, + 0x00e9, 0x080c, 0x88c3, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, + 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1670, 0x1904, 0xdbee, + 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, + 0x1120, 0x080c, 0x1670, 0x1904, 0xdbee, 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, 0x0d7d, + 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0xdc80, 0xdc8c, 0xdc98, + 0xdca4, 0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc87, 0xdc82, 0xdc82, + 0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc82, 0xdc80, 0xdc82, 0xdc80, + 0x080c, 0x0d7d, 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0x6014, + 0x9005, 0x190c, 0x0d7d, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, + 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x9200, 0x012e, 0x0005, + 0x6003, 0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, + 0x080c, 0x921e, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, + 0x1c03, 0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, + 0xd0fc, 0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, + 0xd0cc, 0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, + 0x918d, 0xb035, 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, + 0x9265, 0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, + 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, + 0x003e, 0x012e, 0x0005, 0xdceb, 0xdced, 0xdd02, 0xdd1c, 0xdceb, + 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, + 0xdceb, 0xdceb, 0xdceb, 0x080c, 0x0d7d, 0x6014, 0x2048, 0xa87c, + 0xd0fc, 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, + 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, + 0x921e, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, + 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, + 0xa001, 0x080c, 0x921e, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, + 0x0004, 0x080c, 0xe26c, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, + 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, + 0x6106, 0x080c, 0x1c03, 0x6144, 0x918d, 0xa035, 0x080c, 0x9265, + 0x0005, 0x080c, 0x95de, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, + 0x080c, 0xe621, 0x0036, 0x2019, 0x0029, 0x080c, 0xe26c, 0x003e, + 0x009e, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0x080c, 0x963b, + 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe621, 0x0036, + 0x2019, 0x0029, 0x080c, 0xe26c, 0x003e, 0x009e, 0x080c, 0xac28, + 0x0005, 0x9182, 0x0085, 0x0002, 0xdd6b, 0xdd69, 0xdd69, 0xdd77, + 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, + 0xdd69, 0x080c, 0x0d7d, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, + 0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005, 0x0026, + 0x00e6, 0x080c, 0xe4c3, 0x0118, 0x080c, 0xabed, 0x0440, 0x2071, + 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, + 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, + 0x080c, 0xaf1a, 0x7220, 0x080c, 0xe102, 0x0118, 0x6007, 0x0086, + 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, + 0x0086, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00ee, + 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, + 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085, + 0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, + 0xaca9, 0x0050, 0x2001, 0x0007, 0x080c, 0x65a1, 0x080c, 0x95de, + 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0xddda, 0xdddc, 0xdddc, + 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, + 0xddda, 0xddda, 0x080c, 0x0d7d, 0x080c, 0xac28, 0x080c, 0x96a0, + 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d7d, 0x9182, 0x0092, 0x1a0c, + 0x0d7d, 0x9182, 0x0085, 0x0002, 0xddf9, 0xddf9, 0xddf9, 0xddfb, + 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, + 0xddf9, 0x080c, 0x0d7d, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, + 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaca9, 0x0020, + 0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x0036, 0x080c, 0xe524, + 0x604b, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, + 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, + 0x0382, 0x2004, 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, + 0x080c, 0xa896, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa218, + 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa2c3, 0x007e, + 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, + 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c, + 0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, + 0xc838, 0x0110, 0x080c, 0xe26c, 0x009e, 0x6017, 0x0000, 0x080c, + 0xe524, 0x6023, 0x0007, 0x080c, 0xcf6a, 0x000e, 0x9086, 0x0003, + 0x0110, 0x080c, 0xa8b2, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, + 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, + 0x25fb, 0x15e8, 0x0016, 0x00c6, 0x080c, 0x6625, 0x15b0, 0x001e, + 0x00c6, 0x2160, 0x080c, 0xcf67, 0x00ce, 0x002e, 0x0026, 0x0016, + 0x080c, 0xa896, 0x2019, 0x0029, 0x080c, 0xa38a, 0x080c, 0x93a5, + 0x0076, 0x903e, 0x080c, 0x9277, 0x007e, 0x001e, 0x0076, 0x903e, + 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2, 0x0026, 0xba04, 0x9294, + 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, + 0xbaa0, 0x080c, 0x32be, 0x002e, 0xbc84, 0x001e, 0x080c, 0x6043, + 0xbe12, 0xbd16, 0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, + 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, + 0x0016, 0x2009, 0x1824, 0x2104, 0x9086, 0x0074, 0x1904, 0xdf0e, + 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, + 0x8000, 0x0904, 0xdf0b, 0x2001, 0x197c, 0x2004, 0x9005, 0x1140, + 0x6010, 0x2058, 0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, + 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe689, 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, 0x0180, 0x9286, 0x0004, + 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, + 0x0004, 0x0120, 0x080c, 0x6634, 0x0804, 0xdf7a, 0x2011, 0x0276, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2, + 0x009e, 0x15c8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x1568, 0x0046, 0x0016, + 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138, + 0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xb802, 0x080c, + 0xa896, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000, + 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2, + 0x2001, 0x0007, 0x080c, 0x65a1, 0x2001, 0x0007, 0x080c, 0x6575, + 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, 0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0270, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2, + 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e, + 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, + 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0276, 0x20a9, + 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2, 0x009e, + 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, + 0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, + 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, + 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x080c, 0xa8f4, + 0x0106, 0x190c, 0xa896, 0x2740, 0x2029, 0x19f3, 0x252c, 0x2021, + 0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, + 0x81ff, 0x0150, 0x0006, 0x9186, 0x1b32, 0x000e, 0x0128, 0x8001, + 0x9602, 0x1a04, 0xe090, 0x0018, 0x9606, 0x0904, 0xe090, 0x080c, + 0x8b90, 0x0904, 0xe087, 0x2100, 0x9c06, 0x0904, 0xe087, 0x080c, + 0xe30a, 0x1904, 0xe087, 0x080c, 0xe6a6, 0x0904, 0xe087, 0x080c, + 0xe2fa, 0x0904, 0xe087, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, + 0x3363, 0x0904, 0xe0d2, 0x6004, 0x9086, 0x0000, 0x1904, 0xe0d2, + 0x9786, 0x0004, 0x0904, 0xe0d2, 0x9786, 0x0007, 0x0904, 0xe087, + 0x2500, 0x9c06, 0x0904, 0xe087, 0x2400, 0x9c06, 0x0904, 0xe087, + 0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff, + 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, + 0x9786, 0x000a, 0x0148, 0x080c, 0xca4d, 0x1130, 0x080c, 0xb5b5, + 0x009e, 0x080c, 0xac28, 0x0418, 0x6014, 0x2048, 0x080c, 0xc838, + 0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc, + 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, + 0xa877, 0x0000, 0x080c, 0xe621, 0x0016, 0x080c, 0xcb36, 0x080c, + 0x6d74, 0x001e, 0x080c, 0xca27, 0x009e, 0x080c, 0xac28, 0x9ce0, + 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe004, + 0x010e, 0x190c, 0xa8b2, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, + 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, + 0x9386, 0x0005, 0x0128, 0x080c, 0xe621, 0x080c, 0xe26c, 0x08e0, + 0x009e, 0x08e8, 0x9786, 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, + 0x01c0, 0x6000, 0x9086, 0x0003, 0x11a0, 0x080c, 0x963b, 0x0096, + 0x6114, 0x2148, 0x080c, 0xc838, 0x0118, 0x6010, 0x080c, 0x6d80, + 0x009e, 0x00c6, 0x080c, 0xabed, 0x00ce, 0x0036, 0x080c, 0x96a0, + 0x003e, 0x009e, 0x0804, 0xe087, 0x9786, 0x000a, 0x0904, 0xe06e, + 0x0804, 0xe06c, 0x81ff, 0x0904, 0xe087, 0x9180, 0x0001, 0x2004, + 0x9086, 0x0018, 0x0138, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, + 0x1904, 0xe087, 0x6000, 0x9086, 0x0002, 0x1904, 0xe087, 0x080c, + 0xca3c, 0x0138, 0x080c, 0xca4d, 0x1904, 0xe087, 0x080c, 0xb5b5, + 0x0038, 0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, + 0x080c, 0xac28, 0x0804, 0xe087, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, + 0x080c, 0xe293, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, + 0x00ee, 0x00ce, 0x0005, 0xe121, 0xe121, 0xe121, 0xe121, 0xe121, + 0xe121, 0xe123, 0xe121, 0xe121, 0xe121, 0xe121, 0xac28, 0xac28, + 0xe121, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, + 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xe2c9, + 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xde1b, 0x003e, 0x9085, + 0x0001, 0x0005, 0x0096, 0x080c, 0xc838, 0x0140, 0x6014, 0x904d, + 0x080c, 0xc443, 0x687b, 0x0005, 0x080c, 0x6d80, 0x009e, 0x080c, + 0xac28, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x6561, + 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, + 0x2011, 0x0276, 0x080c, 0xbbae, 0x003e, 0x002e, 0x001e, 0x015e, + 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, + 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079, + 0x0001, 0x8fff, 0x0904, 0xe1bc, 0x2071, 0x1800, 0x7654, 0x7074, + 0x8001, 0x9602, 0x1a04, 0xe1bc, 0x88ff, 0x0120, 0x2800, 0x9c06, + 0x1590, 0x2078, 0x080c, 0xe2fa, 0x0570, 0x2400, 0x9c06, 0x0558, + 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, + 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106, + 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c, + 0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, + 0xc838, 0x0120, 0x0046, 0x080c, 0xe26c, 0x004e, 0x009e, 0x080c, + 0xac28, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, + 0x9c02, 0x1210, 0x0804, 0xe171, 0x9006, 0x012e, 0x00be, 0x006e, + 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, + 0x0ca0, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, + 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, + 0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3, + 0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2, 0x0005, + 0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, + 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, + 0x6625, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, + 0x0096, 0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, + 0xa2c3, 0x080c, 0xe162, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, + 0xe1f5, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, + 0xa8b2, 0x0005, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x6210, + 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, + 0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3, + 0x2c20, 0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2, + 0x0005, 0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, + 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, + 0x6625, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, + 0x080c, 0xe508, 0x004e, 0x0096, 0x904e, 0x080c, 0xa218, 0x009e, + 0x008e, 0x903e, 0x080c, 0xa2c3, 0x080c, 0xe162, 0x003e, 0x001e, + 0x8108, 0x1f04, 0xe245, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, + 0x00be, 0x080c, 0xa8b2, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc836, + 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, + 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6d80, 0x2f48, + 0x0cb0, 0xab82, 0x080c, 0x6d80, 0x00fe, 0x001e, 0x0005, 0xa800, + 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6d80, 0x2f48, 0x0cb8, + 0x080c, 0x6d80, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc, + 0x9005, 0x1138, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001, 0x9402, + 0x12f8, 0x2100, 0x9c06, 0x0188, 0x6000, 0x9086, 0x0000, 0x0168, + 0x6008, 0x9206, 0x1150, 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, + 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, + 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, + 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, + 0x0c30, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, + 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xc826, + 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, 0x2004, 0x002e, + 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, + 0xa87f, 0x0000, 0x2001, 0x198e, 0x2004, 0xa882, 0x9006, 0xa802, + 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 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, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, + 0x921e, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, + 0x0158, 0xd0cc, 0x0118, 0x080c, 0xcb7d, 0x0030, 0x080c, 0xe524, + 0x080c, 0x88c1, 0x080c, 0xabed, 0x0005, 0x9280, 0x0008, 0x2004, + 0x9084, 0x000f, 0x0002, 0xe359, 0xe359, 0xe359, 0xe35b, 0xe359, + 0xe35b, 0xe35b, 0xe359, 0xe35b, 0xe359, 0xe359, 0xe359, 0xe359, + 0xe359, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, + 0x2004, 0x9084, 0x000f, 0x0002, 0xe372, 0xe372, 0xe372, 0xe372, + 0xe372, 0xe372, 0xe37f, 0xe372, 0xe372, 0xe372, 0xe372, 0xe372, + 0xe372, 0xe372, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, + 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0005, 0x0096, + 0x00c6, 0x2260, 0x080c, 0xe524, 0x604b, 0x0000, 0x6024, 0xc0f4, + 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, + 0x0007, 0x1904, 0xe3d8, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, + 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, + 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100, + 0x9186, 0x0002, 0x1904, 0xe44f, 0x6014, 0x9005, 0x1138, 0x6000, + 0x9086, 0x0007, 0x190c, 0x0d7d, 0x0804, 0xe44f, 0x2048, 0x080c, + 0xc838, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, + 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, + 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, + 0x080c, 0xdc5d, 0x0804, 0xe44f, 0x2009, 0x0041, 0x0804, 0xe449, + 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, + 0x00de, 0x009e, 0x0804, 0xe372, 0xd0b4, 0x0128, 0xd0fc, 0x090c, + 0x0d7d, 0x0804, 0xe393, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, + 0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, + 0x0120, 0x9186, 0x0004, 0x1904, 0xe44f, 0x6814, 0x2048, 0xa97c, + 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, + 0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, + 0x080c, 0x103a, 0x090c, 0x0d7d, 0xa867, 0x010d, 0x9006, 0xa802, + 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, + 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, + 0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006, + 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x6d80, + 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xde1b, 0x2d00, 0x600a, + 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x634a, 0x003e, + 0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, 0xdc5d, 0x00ce, + 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, + 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x95de, + 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xe26c, + 0x009e, 0x003e, 0x080c, 0x96a0, 0x0005, 0x9186, 0x0014, 0x0d70, + 0x080c, 0xaca9, 0x0005, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480, + 0xe480, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480, + 0x080c, 0x0d7d, 0x6003, 0x000c, 0x080c, 0x96a0, 0x0005, 0x9182, + 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaca9, + 0x0005, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe4a0, 0xe4c0, 0xe49e, + 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0x080c, 0x0d7d, + 0x00d6, 0x2c68, 0x080c, 0xab97, 0x01b0, 0x6003, 0x0001, 0x6007, + 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, + 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x2009, + 0x8020, 0x080c, 0x921e, 0x2d60, 0x080c, 0xabed, 0x00de, 0x0005, + 0x080c, 0xabed, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, + 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, + 0x2001, 0x1988, 0x2004, 0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4, + 0x1520, 0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, + 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, + 0x1986, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6, + 0x2058, 0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, + 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, + 0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180, + 0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, + 0x88c1, 0x080c, 0xabed, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, + 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, + 0xb8bc, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, + 0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, + 0x2011, 0x182c, 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, 0xbbc2, 0x009e, 0x1168, 0x2011, 0x0274, + 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, + 0xbbc2, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, + 0x2071, 0x1800, 0x080c, 0x5fbc, 0x080c, 0x2fb2, 0x00ee, 0x0005, + 0x0096, 0x0026, 0x080c, 0x103a, 0x090c, 0x0d7d, 0xa85c, 0x9080, + 0x001a, 0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, + 0x9186, 0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, + 0x9186, 0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, + 0x7240, 0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, + 0x1168, 0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, + 0xaa9e, 0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, + 0x00ff, 0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, + 0x00ff, 0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, + 0x9e90, 0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, + 0xa8aa, 0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, + 0xa8b2, 0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, + 0x8007, 0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, + 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, + 0x0205, 0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, + 0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, + 0x0001, 0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, + 0x8007, 0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, + 0x2011, 0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, + 0x0008, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, + 0x8007, 0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, + 0x2011, 0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6d80, 0x009e, + 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, + 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, + 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, + 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021, + 0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, + 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, + 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, + 0xe2fa, 0x01b8, 0x080c, 0xe30a, 0x11a0, 0x6000, 0x9086, 0x0004, + 0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, 0x080c, 0xca3c, 0x1110, + 0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x080c, + 0xac28, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, + 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, + 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, + 0x0005, 0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, + 0x0006, 0x0036, 0x0046, 0x080c, 0xcf52, 0x0168, 0x2019, 0xffff, + 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, + 0x0004, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, + 0x0001, 0x1128, 0x080c, 0xa38a, 0x080c, 0xac28, 0x9006, 0x0005, + 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, + 0x7454, 0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, + 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, + 0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, + 0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, + 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, + 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, + 0x0118, 0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, + 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, + 0x0005, 0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, + 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, + 0xfff6, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, + 0x2077, 0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, + 0x2071, 0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, + 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, + 0x2071, 0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, + 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, + 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, + 0x8000, 0x7155 }; #ifdef UNIQUE_FW_NAME -unsigned short fw2322ipx_length01 = 0xdf17; +unsigned short fw2322ipx_length01 = 0xdf42; #else -unsigned short risc_code_length01 = 0xdf17; +unsigned short risc_code_length01 = 0xdf42; #endif /* @@ -7472,9 +7478,9 @@ 0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010, 0x0000, 0x0010, 0x000b, 0x0489, 0x0004, 0x04a4, 0x0002, 0x3941, 0x0003, 0x0c37, 0x0000, 0x8072, 0x0000, 0x0400, 0x0003, 0x0013, 0x0004, 0x046e, - 0x0008, 0x11fc, 0x0003, 0x8c3f, 0x0000, 0x8072, 0x0000, 0x0400, + 0x0008, 0x11fc, 0x000b, 0xb43f, 0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010, 0x0000, 0x000e, 0x000b, 0x0489, 0x0000, 0x8060, - 0x0000, 0x0400, 0x0000, 0x04fc, 0x000b, 0x8c54, 0x0008, 0x808c, + 0x0000, 0x0400, 0x0000, 0x04fc, 0x0003, 0xb454, 0x0008, 0x808c, 0x0008, 0x0000, 0x0001, 0x9180, 0x0008, 0x0005, 0x0008, 0x7f62, 0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc44a, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, @@ -7502,7 +7508,7 @@ 0x0002, 0x3941, 0x0003, 0x0ca7, 0x000f, 0x4000, 0x0000, 0x8072, 0x0008, 0x0404, 0x000f, 0x4000, 0x0008, 0x8010, 0x0008, 0x0012, 0x000c, 0x035b, 0x0004, 0x046e, 0x0000, 0x1110, 0x000c, 0x035b, - 0x0008, 0x11fc, 0x000b, 0x8cad, 0x0003, 0x0013, 0x0009, 0xc2c0, + 0x0008, 0x11fc, 0x0003, 0xb4ad, 0x0003, 0x0013, 0x0009, 0xc2c0, 0x0008, 0x00ff, 0x0000, 0x7f00, 0x0001, 0xc3c0, 0x0008, 0xff00, 0x0009, 0x00d0, 0x000b, 0x0cd8, 0x0000, 0x0d0a, 0x0001, 0x8580, 0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400, @@ -7516,7 +7522,7 @@ 0x0000, 0x8066, 0x0000, 0x0809, 0x0003, 0xc4de, 0x0000, 0x8060, 0x0000, 0x0400, 0x0001, 0x84c0, 0x0008, 0xff00, 0x0002, 0x7f70, 0x0009, 0xff80, 0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8066, - 0x0000, 0x0809, 0x000b, 0xc4e9, 0x000f, 0x4000, 0xe552, 0xe9f6 + 0x0000, 0x0809, 0x000b, 0xc4e9, 0x000f, 0x4000, 0xe55a, 0x71f6 }; unsigned short rseqipx_code_length01 = 0x09d8; /* diff -Nru a/drivers/scsi/qla2xxx/ql6312_fw.c b/drivers/scsi/qla2xxx/ql6312_fw.c --- a/drivers/scsi/qla2xxx/ql6312_fw.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/qla2xxx/ql6312_fw.c Tue May 18 23:38:05 2004 @@ -18,7 +18,7 @@ *************************************************************************/ /* - * Firmware Version 3.02.26 (08:43 Mar 11, 2004) + * Firmware Version 3.02.28 (13:56 Apr 03, 2004) */ #ifdef UNIQUE_FW_NAME @@ -28,15 +28,15 @@ #endif #ifdef UNIQUE_FW_NAME -unsigned char fw2300flx_version_str[] = {3, 2,26}; +unsigned char fw2300flx_version_str[] = {3, 2,28}; #else -unsigned char firmware_version[] = {3, 2,26}; +unsigned char firmware_version[] = {3, 2,28}; #endif #ifdef UNIQUE_FW_NAME -#define fw2300flx_VERSION_STRING "3.02.26" +#define fw2300flx_VERSION_STRING "3.02.28" #else -#define FW_VERSION_STRING "3.02.26" +#define FW_VERSION_STRING "3.02.28" #endif #ifdef UNIQUE_FW_NAME @@ -50,12 +50,12 @@ #else unsigned short risc_code01[] = { #endif - 0x0470, 0x0000, 0x0000, 0xd57a, 0x0000, 0x0003, 0x0002, 0x001a, + 0x0470, 0x0000, 0x0000, 0xd59a, 0x0000, 0x0003, 0x0002, 0x001c, 0x0317, 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, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9, + 0x332e, 0x3032, 0x2e32, 0x3820, 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, @@ -78,94 +78,94 @@ 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f03, 0x080c, - 0x5cd8, 0x080c, 0x9daf, 0x080c, 0x10ba, 0x080c, 0x129f, 0x080c, - 0x1a53, 0x080c, 0x0d46, 0x080c, 0x103f, 0x080c, 0x3231, 0x080c, - 0x729f, 0x080c, 0x6616, 0x080c, 0x7f4b, 0x080c, 0x230a, 0x080c, - 0x8278, 0x080c, 0x7928, 0x080c, 0x2147, 0x080c, 0x227b, 0x080c, + 0x5cdf, 0x080c, 0x9dc8, 0x080c, 0x10ba, 0x080c, 0x129f, 0x080c, + 0x1a53, 0x080c, 0x0d46, 0x080c, 0x103f, 0x080c, 0x3238, 0x080c, + 0x72aa, 0x080c, 0x661d, 0x080c, 0x7f73, 0x080c, 0x230a, 0x080c, + 0x82a0, 0x080c, 0x7933, 0x080c, 0x2147, 0x080c, 0x227b, 0x080c, 0x22ff, 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, 0x1187, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c, - 0x4997, 0x080c, 0x3258, 0x080c, 0x7310, 0x080c, 0x6ad6, 0x080c, - 0x7f74, 0x080c, 0x2ab8, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941, + 0x499e, 0x080c, 0x325f, 0x080c, 0x731b, 0x080c, 0x6add, 0x080c, + 0x7f9c, 0x080c, 0x2ab8, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941, 0x0ad8, 0x093e, 0x0b8f, 0x0d45, 0x0d45, 0x0d45, 0x080c, 0x0db4, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001, - 0x1904, 0x0aab, 0x080c, 0x0e71, 0x080c, 0x6fa7, 0x0150, 0x080c, - 0x6fca, 0x15a0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, - 0x0468, 0x080c, 0x6ed9, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aab, - 0x7094, 0x9086, 0x0028, 0x1904, 0x0aab, 0x080c, 0x7f43, 0x080c, - 0x7f35, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827, - 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6e28, 0x080c, - 0x8010, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x2011, 0x5b33, 0x080c, - 0x8010, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, 0x080c, 0x53e0, - 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0aab, 0x2011, 0x5b33, - 0x080c, 0x8010, 0x2011, 0x6e28, 0x080c, 0x8010, 0x2011, 0x6e1b, - 0x080c, 0x80e4, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, + 0x1904, 0x0aab, 0x080c, 0x0e71, 0x080c, 0x6fb2, 0x0150, 0x080c, + 0x6fd5, 0x15a0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, + 0x0468, 0x080c, 0x6ee4, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aab, + 0x7094, 0x9086, 0x0028, 0x1904, 0x0aab, 0x080c, 0x7f6b, 0x080c, + 0x7f5d, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827, + 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6e33, 0x080c, + 0x8038, 0x2011, 0x6e26, 0x080c, 0x810c, 0x2011, 0x5b3a, 0x080c, + 0x8038, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, 0x080c, 0x53e7, + 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0aab, 0x2011, 0x5b3a, + 0x080c, 0x8038, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, + 0x080c, 0x810c, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1977, 0x2004, 0x9005, - 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5c80, 0x00ce, 0x0804, - 0x0aab, 0x780f, 0x006b, 0x7a28, 0x080c, 0x6faf, 0x0118, 0x9295, + 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5c87, 0x00ce, 0x0804, + 0x0aab, 0x780f, 0x006b, 0x7a28, 0x080c, 0x6fba, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011, 0x8010, 0x73d4, - 0x2001, 0x1978, 0x2003, 0x0001, 0x080c, 0x297e, 0x080c, 0x48d2, + 0x2001, 0x1978, 0x2003, 0x0001, 0x080c, 0x297e, 0x080c, 0x48d9, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, - 0x2102, 0x080c, 0x9626, 0x2011, 0x0004, 0x080c, 0xbb0e, 0x080c, - 0x645a, 0x080c, 0x6fa7, 0x1120, 0x080c, 0x29c2, 0x02e0, 0x0400, - 0x080c, 0x5c87, 0x0140, 0x7093, 0x0001, 0x70cf, 0x0000, 0x080c, - 0x55ad, 0x0804, 0x0aab, 0x080c, 0x537f, 0xd094, 0x0188, 0x2011, - 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5383, 0xd0d4, 0x1118, + 0x2102, 0x080c, 0x963f, 0x2011, 0x0004, 0x080c, 0xbb27, 0x080c, + 0x6461, 0x080c, 0x6fb2, 0x1120, 0x080c, 0x29c2, 0x02e0, 0x0400, + 0x080c, 0x5c8e, 0x0140, 0x7093, 0x0001, 0x70cf, 0x0000, 0x080c, + 0x55b4, 0x0804, 0x0aab, 0x080c, 0x5386, 0xd094, 0x0188, 0x2011, + 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x538a, 0xd0d4, 0x1118, 0x080c, 0x29c2, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088, - 0x080c, 0x5383, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, - 0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x6553, - 0x0008, 0x2012, 0x080c, 0x6519, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, - 0x00a8, 0x707b, 0x0000, 0x080c, 0x6fa7, 0x1130, 0x70ac, 0x9005, - 0x1168, 0x080c, 0xbf4a, 0x0050, 0x080c, 0xbf4a, 0x70d8, 0xd09c, - 0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c5d, 0x70e3, 0x0000, + 0x080c, 0x538a, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, + 0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x655a, + 0x0008, 0x2012, 0x080c, 0x6520, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, + 0x00a8, 0x707b, 0x0000, 0x080c, 0x6fb2, 0x1130, 0x70ac, 0x9005, + 0x1168, 0x080c, 0xbf63, 0x0050, 0x080c, 0xbf63, 0x70d8, 0xd09c, + 0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c64, 0x70e3, 0x0000, 0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x29ca, 0x0228, 0x2011, - 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x6fa7, 0x1178, + 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x6fb2, 0x1178, 0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e, 0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108, - 0xc295, 0x72da, 0x080c, 0x6fa7, 0x0118, 0x9296, 0x0004, 0x0548, - 0x2011, 0x0001, 0x080c, 0xbb0e, 0x70a7, 0x0000, 0x70ab, 0xffff, + 0xc295, 0x72da, 0x080c, 0x6fb2, 0x0118, 0x9296, 0x0004, 0x0548, + 0x2011, 0x0001, 0x080c, 0xbb27, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2dbb, 0x2011, 0x0005, 0x080c, - 0x9758, 0x080c, 0x894b, 0x080c, 0x6fa7, 0x0148, 0x00c6, 0x2061, + 0x9771, 0x080c, 0x8973, 0x080c, 0x6fb2, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, - 0x00fe, 0x2011, 0x0005, 0x080c, 0x9758, 0x080c, 0x894b, 0x080c, - 0x6fa7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, + 0x00fe, 0x2011, 0x0005, 0x080c, 0x9771, 0x080c, 0x8973, 0x080c, + 0x6fb2, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, - 0x080c, 0x6fa7, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, - 0x080c, 0x6fa7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, + 0x080c, 0x6fb2, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, + 0x080c, 0x6fb2, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, - 0x090c, 0x30ce, 0x8108, 0x1f04, 0x0abf, 0x707b, 0x0000, 0x707c, + 0x090c, 0x30d5, 0x8108, 0x1f04, 0x0abf, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b8c, 0x70a8, 0x9086, 0xffff, 0x0130, 0x080c, 0x2dbb, 0x080c, - 0x894b, 0x0804, 0x0b8c, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0540, + 0x8973, 0x0804, 0x0b8c, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0540, 0xd084, 0x0530, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, - 0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2f43, - 0x080c, 0x894b, 0x70d8, 0xd094, 0x1904, 0x0b8c, 0x2011, 0x0001, - 0x080c, 0xc1f9, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f7d, - 0x080c, 0x894b, 0x0804, 0x0b8c, 0x70e0, 0x9005, 0x1904, 0x0b8c, + 0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2f46, + 0x080c, 0x8973, 0x70d8, 0xd094, 0x1904, 0x0b8c, 0x2011, 0x0001, + 0x080c, 0xc212, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f80, + 0x080c, 0x8973, 0x0804, 0x0b8c, 0x70e0, 0x9005, 0x1904, 0x0b8c, 0x70a4, 0x9005, 0x1904, 0x0b8c, 0x70d8, 0xd0a4, 0x0118, 0xd0b4, - 0x0904, 0x0b8c, 0x080c, 0x6519, 0x1904, 0x0b8c, 0x080c, 0x656c, - 0x1904, 0x0b8c, 0x080c, 0x6553, 0x01c0, 0x0156, 0x00c6, 0x20a9, - 0x007f, 0x900e, 0x0016, 0x080c, 0x6237, 0x1118, 0xb800, 0xd0ec, + 0x0904, 0x0b8c, 0x080c, 0x6520, 0x1904, 0x0b8c, 0x080c, 0x6573, + 0x1904, 0x0b8c, 0x080c, 0x655a, 0x01c0, 0x0156, 0x00c6, 0x20a9, + 0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b32, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b8c, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1984, 0x080c, 0x0f73, 0x2011, 0x199e, 0x080c, 0x0f73, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e53, 0x9006, 0x080c, 0x260c, 0x0036, - 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e, - 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x6fca, 0x0150, 0x080c, - 0x6fa7, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, + 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e, + 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x6fd5, 0x0150, 0x080c, + 0x6fb2, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120, - 0x2011, 0x0000, 0x080c, 0x9758, 0x2011, 0x0000, 0x080c, 0x9762, - 0x080c, 0x894b, 0x080c, 0x8a26, 0x012e, 0x00be, 0x0005, 0x0016, + 0x2011, 0x0000, 0x080c, 0x9771, 0x2011, 0x0000, 0x080c, 0x977b, + 0x080c, 0x8973, 0x080c, 0x8a4e, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, - 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5c46, 0x7940, + 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5c4d, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x0c1c, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518, @@ -173,13 +173,13 @@ 0x0001, 0x080c, 0x2990, 0x00b8, 0x080c, 0x2a4d, 0x1138, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0068, 0x080c, 0x2a55, 0x1d50, 0x2001, 0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, - 0x27a7, 0x0804, 0x0cfc, 0x080c, 0x6fb8, 0x0148, 0x080c, 0x6fca, - 0x1118, 0x080c, 0x729a, 0x0050, 0x080c, 0x6faf, 0x0dd0, 0x080c, - 0x7295, 0x080c, 0x728b, 0x080c, 0x6ed9, 0x0058, 0x080c, 0x6fa7, - 0x0140, 0x2009, 0x00f8, 0x080c, 0x5c46, 0x7843, 0x0090, 0x7843, - 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x6fa7, + 0x27a7, 0x0804, 0x0cfc, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5, + 0x1118, 0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c, + 0x72a0, 0x080c, 0x7296, 0x080c, 0x6ee4, 0x0058, 0x080c, 0x6fb2, + 0x0140, 0x2009, 0x00f8, 0x080c, 0x5c4d, 0x7843, 0x0090, 0x7843, + 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x6fb2, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0d01, 0x1f04, 0x0bfb, 0x0070, - 0x7824, 0x080c, 0x6fc1, 0x0118, 0xd0ac, 0x1904, 0x0d01, 0x9084, + 0x7824, 0x080c, 0x6fcc, 0x0118, 0xd0ac, 0x1904, 0x0d01, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d01, 0x2001, 0x0001, 0x080c, 0x260c, 0x0804, 0x0d14, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518, 0x080c, 0x2a45, 0x1148, 0x2001, 0x0001, 0x080c, 0x29ad, @@ -189,46 +189,46 @@ 0x080c, 0x27a7, 0x0804, 0x0cfc, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a5d, 0x9085, 0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c55, 0x080c, - 0x80c4, 0x1f04, 0x0c55, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, - 0x7852, 0x793a, 0x080c, 0x6fb8, 0x0148, 0x080c, 0x6fca, 0x1118, - 0x080c, 0x729a, 0x0050, 0x080c, 0x6faf, 0x0dd0, 0x080c, 0x7295, - 0x080c, 0x728b, 0x080c, 0x6ed9, 0x0020, 0x2009, 0x00f8, 0x080c, - 0x5c46, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c7b, 0x7850, 0x9085, - 0x1400, 0x7852, 0x080c, 0x6fa7, 0x0120, 0x7843, 0x0090, 0x7843, - 0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x80c4, 0x7820, - 0xd09c, 0x1588, 0x080c, 0x6fa7, 0x0904, 0x0ce1, 0x7824, 0xd0ac, - 0x1904, 0x0d01, 0x080c, 0x6fca, 0x1530, 0x0046, 0x2021, 0x0320, + 0x80ec, 0x1f04, 0x0c55, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, + 0x7852, 0x793a, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5, 0x1118, + 0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c, 0x72a0, + 0x080c, 0x7296, 0x080c, 0x6ee4, 0x0020, 0x2009, 0x00f8, 0x080c, + 0x5c4d, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c7b, 0x7850, 0x9085, + 0x1400, 0x7852, 0x080c, 0x6fb2, 0x0120, 0x7843, 0x0090, 0x7843, + 0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x80ec, 0x7820, + 0xd09c, 0x1588, 0x080c, 0x6fb2, 0x0904, 0x0ce1, 0x7824, 0xd0ac, + 0x1904, 0x0d01, 0x080c, 0x6fd5, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a5d, 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0d22, 0x8421, 0x1158, - 0x1d04, 0x0cbc, 0x080c, 0x80c4, 0x080c, 0x7295, 0x080c, 0x728b, + 0x1d04, 0x0cbc, 0x080c, 0x80ec, 0x080c, 0x72a0, 0x080c, 0x7296, 0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cc9, 0x080c, - 0x80c4, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, + 0x80ec, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2a3e, 0x7924, 0x080c, 0x2a5d, 0xd19c, 0x0110, 0x080c, 0x297e, - 0x00d8, 0x080c, 0x6fb8, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, - 0x6f7f, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a5d, - 0x7824, 0x080c, 0x6fc1, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, + 0x00d8, 0x080c, 0x6fc3, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, + 0x6f8a, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a5d, + 0x7824, 0x080c, 0x6fcc, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x260c, 0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x1978, 0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x80c4, 0x015e, + 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x80ec, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086, 0x0001, - 0x1110, 0x080c, 0x3258, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, - 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a, 0x600f, + 0x1110, 0x080c, 0x325f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, + 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c, 0x600f, 0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a, - 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbf4a, 0x70e7, 0x00c0, + 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbf63, 0x70e7, 0x00c0, 0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x195a, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, - 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6237, 0x1178, + 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x623e, 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, @@ -247,7 +247,7 @@ 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, - 0x1001, 0x080c, 0x538e, 0x1108, 0x0099, 0x0cd8, 0x0005, 0x918c, + 0x1001, 0x080c, 0x5395, 0x1108, 0x0099, 0x0cd8, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, 0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0ecb, 0x20a9, 0x0900, @@ -313,7 +313,7 @@ 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, 0x080c, 0x7f35, 0x012e, 0x00ee, 0x0005, 0x2071, + 0x8000, 0x70be, 0x080c, 0x7f5d, 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, 0x1883, @@ -377,22 +377,22 @@ 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x10f4, 0x0005, 0x00de, 0x009e, 0x080c, 0x10f4, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0xa06c, 0x908e, 0x0100, 0x0130, - 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6878, + 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x687f, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x101d, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 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, 0x10d5, 0x00e8, 0xa97c, - 0xa894, 0x0016, 0x0006, 0x080c, 0x6878, 0x000e, 0x001e, 0xd1fc, - 0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9e19, 0x00ce, + 0xa894, 0x0016, 0x0006, 0x080c, 0x687f, 0x000e, 0x001e, 0xd1fc, + 0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9e32, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x101d, 0x7007, 0x0000, 0x080c, 0x10f4, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x1105, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a33, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, - 0x0000, 0x20a9, 0x0254, 0x2061, 0xd8c3, 0x2c0d, 0x7912, 0xe104, + 0x0000, 0x20a9, 0x0254, 0x2061, 0xd8e3, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12b5, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a34, 0x2003, @@ -401,9 +401,9 @@ 0x782b, 0x1a52, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a52, 0x602f, 0x1cd0, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, - 0x1f26, 0x2001, 0x3131, 0xd0fc, 0x190c, 0x0db4, 0x2001, 0x0003, - 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3131, 0x0020, 0x9084, 0xc000, - 0x783f, 0xb131, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, + 0x1f26, 0x2001, 0x3138, 0xd0fc, 0x190c, 0x0db4, 0x2001, 0x0003, + 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3138, 0x0020, 0x9084, 0xc000, + 0x783f, 0xb138, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070, 0x190c, 0x0dad, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0db4, 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x1347, 0x1347, 0x135e, 0x1363, 0x1367, @@ -412,17 +412,17 @@ 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x136e, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x134b, 0x1349, 0x080c, 0x0db4, 0x080c, 0x0dad, 0x080c, 0x14a2, 0x2009, 0x1a4b, 0x2104, - 0x8000, 0x200a, 0x080c, 0x79fc, 0x080c, 0x1958, 0x0005, 0x2009, - 0x0048, 0x2060, 0x080c, 0x9e93, 0x012e, 0x0005, 0x7004, 0xc085, + 0x8000, 0x200a, 0x080c, 0x7a07, 0x080c, 0x1958, 0x0005, 0x2009, + 0x0048, 0x2060, 0x080c, 0x9eac, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x14a2, 0x080c, 0x15de, 0x0005, 0x080c, 0x0db4, 0x080c, 0x14a2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, - 0x0048, 0x080c, 0x9e93, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, + 0x0048, 0x080c, 0x9eac, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14a7, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x14a2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, - 0x009e, 0x2009, 0x0048, 0x080c, 0x9e93, 0x0005, 0x080c, 0x14a2, + 0x009e, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x080c, 0x14a2, 0x080c, 0x0db4, 0x080c, 0x14a2, 0x080c, 0x141f, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, @@ -431,12 +431,12 @@ 0x0050, 0x2003, 0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x1438, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0db4, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, - 0x080c, 0x79fc, 0x080c, 0x1958, 0x080c, 0xbafe, 0x0158, 0xa9ac, + 0x080c, 0x7a07, 0x080c, 0x1958, 0x080c, 0xbb17, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x6024, 0x190c, 0xbee3, 0x2029, 0x00c8, 0x8529, 0x0128, - 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd86c, - 0xd5a4, 0x1118, 0x080c, 0x14a7, 0x0005, 0x080c, 0x79fc, 0x080c, + 0xd0bc, 0x6024, 0x190c, 0xbefc, 0x2029, 0x00c8, 0x8529, 0x0128, + 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd88c, + 0xd5a4, 0x1118, 0x080c, 0x14a7, 0x0005, 0x080c, 0x7a07, 0x080c, 0x1958, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1518, 0x00fe, @@ -454,7 +454,7 @@ 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12c5, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, - 0x9e93, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, + 0x9eac, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x141f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841, @@ -462,7 +462,7 @@ 0x080c, 0x150a, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, - 0x79fc, 0x080c, 0x1958, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, + 0x7a07, 0x080c, 0x1958, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, @@ -478,7 +478,7 @@ 0x1591, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x1591, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016, - 0x2009, 0x1a4d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x8382, + 0x2009, 0x1a4d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x83aa, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016, @@ -488,7 +488,7 @@ 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19c7, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a36, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009, - 0x1a4c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9417, 0x2009, + 0x1a4c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9430, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1541, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x080c, 0x153a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, @@ -498,9 +498,9 @@ 0x0904, 0x163d, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x163d, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x163d, 0x9c06, 0x15f0, 0x0126, - 0x2091, 0x2600, 0x080c, 0x7943, 0x012e, 0x7358, 0x745c, 0x6014, + 0x2091, 0x2600, 0x080c, 0x794e, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x190c, 0xbebe, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, + 0xd0bc, 0x190c, 0xbed7, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1f46, 0x1190, 0x080c, 0x17eb, 0x2a00, 0xa816, 0x0130, @@ -595,7 +595,7 @@ 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, 0x9e93, 0x0005, 0x0126, 0x00c6, 0x2091, + 0x2009, 0x0048, 0x0804, 0x9eac, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, @@ -606,17 +606,17 @@ 0x080c, 0x19f4, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e1, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, - 0x080c, 0x6fa7, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, + 0x080c, 0x6fb2, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, - 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7057, 0x006e, + 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7062, 0x006e, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a69, 0x2009, 0x003c, 0x080c, 0x2268, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, - 0x9084, 0x003c, 0x1de0, 0x080c, 0x7f35, 0x70a0, 0x70a2, 0x7098, + 0x9084, 0x003c, 0x1de0, 0x080c, 0x7f5d, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x12c5, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, - 0x202c, 0x2003, 0x0000, 0x080c, 0x6fa7, 0x1108, 0x0005, 0x2021, + 0x202c, 0x2003, 0x0000, 0x080c, 0x6fb2, 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, @@ -725,12 +725,12 @@ 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0db4, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000, 0x7004, 0x0016, 0x080c, 0x1b60, 0x001e, 0x2060, 0x6014, 0x2048, - 0x080c, 0xbafe, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, + 0x080c, 0xbb17, 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, 0xb731, 0x00ce, 0x2001, 0x19c7, + 0x7004, 0x2060, 0x00c6, 0x080c, 0xb74a, 0x00ce, 0x2001, 0x19c7, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, 0x2268, 0x080c, - 0x98d1, 0x2011, 0x0000, 0x080c, 0x9762, 0x080c, 0x8a26, 0x002e, + 0x98ea, 0x2011, 0x0000, 0x080c, 0x977b, 0x080c, 0x8a4e, 0x002e, 0x0804, 0x1e8e, 0x0126, 0x2091, 0x2400, 0xa858, 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d07, 0x7000, 0x0002, 0x1e8e, 0x1d5c, 0x1ddc, 0x1e8c, 0x8001, 0x7002, 0x7027, 0x0000, @@ -774,7 +774,7 @@ 0x0804, 0x1d7e, 0x0804, 0x1d7a, 0x080c, 0x0db4, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0904, 0x1ed9, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, - 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xd8b5, + 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xd8d5, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0db4, 0x0016, 0x2009, 0x0040, 0x080c, 0x2268, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, @@ -864,17 +864,17 @@ 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x2265, 0x7900, 0xd1dc, 0x1118, 0x9084, - 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x218d, 0x2185, 0x7943, - 0x2185, 0x2187, 0x2187, 0x2187, 0x2187, 0x7929, 0x2185, 0x2189, + 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x218d, 0x2185, 0x794e, + 0x2185, 0x2187, 0x2187, 0x2187, 0x2187, 0x7934, 0x2185, 0x2189, 0x2185, 0x2187, 0x2185, 0x2187, 0x2185, 0x080c, 0x0db4, 0x0031, - 0x0020, 0x080c, 0x7929, 0x080c, 0x7943, 0x0005, 0x0006, 0x0016, - 0x0026, 0x080c, 0xd8b5, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001, + 0x0020, 0x080c, 0x7934, 0x080c, 0x794e, 0x0005, 0x0006, 0x0016, + 0x0026, 0x080c, 0xd8d5, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001, 0x19c7, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004, 0x9005, - 0x090c, 0x0db4, 0x00c6, 0x2001, 0x19c7, 0x2064, 0x080c, 0xb731, + 0x090c, 0x0db4, 0x00c6, 0x2001, 0x19c7, 0x2064, 0x080c, 0xb74a, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x2268, 0x00d0, 0x9184, - 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x6fa7, - 0x1138, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9, 0x0010, - 0x080c, 0x5b89, 0x080c, 0x79f2, 0x0041, 0x0018, 0x9184, 0x9540, + 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x6fb2, + 0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010, + 0x080c, 0x5b90, 0x080c, 0x79fd, 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c, 0x1958, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128, @@ -919,96 +919,96 @@ 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2347, 0x232d, 0x2330, - 0x2333, 0x2338, 0x233a, 0x233e, 0x2342, 0x080c, 0x82b5, 0x00b8, - 0x080c, 0x8382, 0x00a0, 0x080c, 0x8382, 0x080c, 0x82b5, 0x0078, - 0x0099, 0x0068, 0x080c, 0x82b5, 0x0079, 0x0048, 0x080c, 0x8382, - 0x0059, 0x0028, 0x080c, 0x8382, 0x080c, 0x82b5, 0x0029, 0x002e, + 0x2333, 0x2338, 0x233a, 0x233e, 0x2342, 0x080c, 0x82dd, 0x00b8, + 0x080c, 0x83aa, 0x00a0, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0078, + 0x0099, 0x0068, 0x080c, 0x82dd, 0x0079, 0x0048, 0x080c, 0x83aa, + 0x0059, 0x0028, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2595, 0xd1f4, 0x190c, 0x0dad, 0x080c, - 0x6fa7, 0x0904, 0x23a2, 0x080c, 0xc1f9, 0x1120, 0x7000, 0x9086, - 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x6fca, - 0x0118, 0x080c, 0x6fb8, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000, - 0x080c, 0xc1f9, 0x0168, 0x080c, 0x6fca, 0x1150, 0x2001, 0x1978, - 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6e28, 0x0804, 0x2598, + 0x6fb2, 0x0904, 0x23a2, 0x080c, 0xc212, 0x1120, 0x7000, 0x9086, + 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x6fd5, + 0x0118, 0x080c, 0x6fc3, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000, + 0x080c, 0xc212, 0x0168, 0x080c, 0x6fd5, 0x1150, 0x2001, 0x1978, + 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6e33, 0x0804, 0x2598, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140, - 0x080c, 0x6ffe, 0x00de, 0x1904, 0x2598, 0x080c, 0x7295, 0x0428, - 0x080c, 0x6fca, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, - 0x080c, 0x7295, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9, + 0x080c, 0x7009, 0x00de, 0x1904, 0x2598, 0x080c, 0x72a0, 0x0428, + 0x080c, 0x6fd5, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, + 0x080c, 0x72a0, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0804, 0x2595, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028, - 0x1110, 0x080c, 0x717a, 0x0804, 0x2595, 0x080c, 0x7290, 0x0048, - 0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x70e0, 0x0804, - 0x2595, 0x080c, 0x7214, 0x0804, 0x2595, 0xd1ac, 0x0904, 0x24b6, - 0x080c, 0x6fa7, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, - 0x080c, 0x6fc1, 0x1158, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, - 0x6ed9, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e, - 0x000e, 0x080c, 0x6f7f, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, + 0x1110, 0x080c, 0x7185, 0x0804, 0x2595, 0x080c, 0x729b, 0x0048, + 0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x70eb, 0x0804, + 0x2595, 0x080c, 0x721f, 0x0804, 0x2595, 0xd1ac, 0x0904, 0x24b6, + 0x080c, 0x6fb2, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, + 0x080c, 0x6fcc, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, + 0x6ee4, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e, + 0x000e, 0x080c, 0x6f8a, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085, 0x7046, 0x0036, - 0x2418, 0x2011, 0x8016, 0x080c, 0x48d2, 0x003e, 0x080c, 0xc1f2, + 0x2418, 0x2011, 0x8016, 0x080c, 0x48d9, 0x003e, 0x080c, 0xc20b, 0x1904, 0x2493, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550, - 0x080c, 0x312c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6553, 0x1510, + 0x080c, 0x3133, 0x0128, 0xc18d, 0x7132, 0x080c, 0x655a, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2493, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2493, 0xc1ad, - 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d2, 0x003e, + 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d9, 0x003e, 0x0804, 0x2493, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2493, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, - 0x8013, 0x080c, 0x48d2, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, + 0x8013, 0x080c, 0x48d9, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, - 0x080c, 0x8207, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, - 0xd486, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3131, 0x200d, 0x918c, - 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xd50a, + 0x080c, 0x822f, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, + 0xd4a6, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3138, 0x200d, 0x918c, + 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xd52a, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, - 0x080c, 0x2fa2, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, - 0x900e, 0x080c, 0x6237, 0x1110, 0x080c, 0x5ce4, 0x8108, 0x1f04, - 0x2489, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x9d9f, 0x60e3, + 0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, + 0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108, 0x1f04, + 0x2489, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x9db8, 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, 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, - 0x2595, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x253e, 0x080c, 0x8090, - 0x080c, 0x9393, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19c1, 0x2304, + 0x2595, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x253e, 0x080c, 0x80b8, + 0x080c, 0x93ac, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19c1, 0x2304, 0x907d, 0x0904, 0x250d, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b24, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a3e, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, - 0x080c, 0x2b14, 0x080c, 0x8846, 0x080c, 0x894b, 0x7814, 0x2048, - 0xa867, 0x0103, 0x2f60, 0x080c, 0x9e19, 0x009e, 0x00ee, 0x00ce, + 0x080c, 0x2b14, 0x080c, 0x886e, 0x080c, 0x8973, 0x7814, 0x2048, + 0xa867, 0x0103, 0x2f60, 0x080c, 0x9e32, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x00de, - 0x00c6, 0x2061, 0x19b8, 0x6028, 0x080c, 0xc1f9, 0x0120, 0x909a, + 0x00c6, 0x2061, 0x19b8, 0x6028, 0x080c, 0xc212, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, - 0x00ce, 0x080c, 0x936f, 0x0804, 0x2594, 0x2061, 0x0100, 0x62c0, - 0x080c, 0x9c2a, 0x2019, 0x19c1, 0x2304, 0x9065, 0x0120, 0x2009, - 0x0027, 0x080c, 0x9e93, 0x00ce, 0x0804, 0x2594, 0xd2bc, 0x0904, - 0x2581, 0x080c, 0x809d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, + 0x00ce, 0x080c, 0x9388, 0x0804, 0x2594, 0x2061, 0x0100, 0x62c0, + 0x080c, 0x9c43, 0x2019, 0x19c1, 0x2304, 0x9065, 0x0120, 0x2009, + 0x0027, 0x080c, 0x9eac, 0x00ce, 0x0804, 0x2594, 0xd2bc, 0x0904, + 0x2581, 0x080c, 0x80c5, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x00de, 0x00c6, 0x2061, 0x19b8, - 0x6044, 0x080c, 0xc1f9, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, + 0x6044, 0x080c, 0xc212, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, - 0x0558, 0x2009, 0x07d0, 0x080c, 0x8095, 0x9080, 0x0008, 0x2004, + 0x0558, 0x2009, 0x07d0, 0x080c, 0x80bd, 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, - 0x96bf, 0x003e, 0x2019, 0x19c7, 0x2304, 0x9065, 0x0120, 0x2009, - 0x004f, 0x080c, 0x9e93, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2607, + 0x96d8, 0x003e, 0x2019, 0x19c7, 0x2304, 0x9065, 0x0120, 0x2009, + 0x004f, 0x080c, 0x9eac, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2607, 0x7038, 0xd0ac, 0x1904, 0x25dc, 0x0016, 0x0156, 0x6027, 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c, 0x2a5d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, - 0x25af, 0x080c, 0x80c4, 0x1f04, 0x25af, 0x6050, 0x9085, 0x0400, + 0x25af, 0x080c, 0x80ec, 0x1f04, 0x25af, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x25bd, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x25c6, - 0x080c, 0x80c4, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, + 0x080c, 0x80ec, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0, 0x080c, 0x2a25, 0x1f04, 0x25c6, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, - 0x080c, 0x9d9f, 0x60e3, 0x0000, 0x080c, 0xd894, 0x080c, 0xd8af, - 0x080c, 0x5383, 0xd0fc, 0x1138, 0x080c, 0xc1f2, 0x1120, 0x9085, - 0x0001, 0x080c, 0x6fee, 0x9006, 0x080c, 0x2b14, 0x2009, 0x0002, + 0x080c, 0x9db8, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, + 0x080c, 0x538a, 0xd0fc, 0x1138, 0x080c, 0xc20b, 0x1120, 0x9085, + 0x0001, 0x080c, 0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2009, 0x0002, 0x080c, 0x2a63, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0e80, 0x00ee, 0x6027, 0x0008, 0x080c, 0x0b8f, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, @@ -1016,33 +1016,33 @@ 0x70ce, 0x9116, 0x0904, 0x265b, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2a63, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, - 0x48d2, 0x0448, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001, + 0x48d9, 0x0448, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, - 0x2011, 0x8012, 0x080c, 0x48d2, 0x080c, 0x0e80, 0x080c, 0x5383, - 0xd0fc, 0x1188, 0x080c, 0xc1f2, 0x1170, 0x00c6, 0x080c, 0x26f7, - 0x080c, 0x9626, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, - 0x080c, 0x2fa2, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, + 0x2011, 0x8012, 0x080c, 0x48d9, 0x080c, 0x0e80, 0x080c, 0x538a, + 0xd0fc, 0x1188, 0x080c, 0xc20b, 0x1170, 0x00c6, 0x080c, 0x26f7, + 0x080c, 0x963f, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, + 0x080c, 0x2fa5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, - 0x2500, 0x080c, 0x7c2f, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3131, - 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3131, + 0x2500, 0x080c, 0x7c57, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3138, + 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3138, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x26a7, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, - 0x000f, 0x9080, 0xdd69, 0x2005, 0x6856, 0x8211, 0x1f04, 0x26bc, + 0x000f, 0x9080, 0xdd89, 0x2005, 0x6856, 0x8211, 0x1f04, 0x26bc, 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, 0x26ec, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, - 0x537f, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, - 0x2009, 0x002e, 0x080c, 0xd50a, 0x004e, 0x0005, 0x00f6, 0x0016, + 0x5386, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, + 0x2009, 0x002e, 0x080c, 0xd52a, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2763, 0x080c, 0x29c2, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, @@ -1051,9 +1051,9 @@ 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, 0x8248, 0x928c, 0xff00, 0x0110, 0x2011, + 0x0020, 0x2018, 0x080c, 0x8270, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, - 0x220a, 0x080c, 0x6fa7, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e, + 0x220a, 0x080c, 0x6fb2, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0dad, 0x002e, 0x001e, @@ -1069,17 +1069,17 @@ 0x2832, 0x2001, 0x0001, 0x080c, 0x260c, 0x080c, 0x2a20, 0x2001, 0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006, - 0x2009, 0x001e, 0x2011, 0x2833, 0x080c, 0x80a2, 0x0005, 0x2009, + 0x2009, 0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001, 0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001, 0x9006, 0x080c, 0x2990, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2833, - 0x080c, 0x80a2, 0x0005, 0x080c, 0x0db4, 0x2001, 0x196b, 0x2003, + 0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2990, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009, - 0x001e, 0x2011, 0x2833, 0x080c, 0x80a2, 0x0005, 0x080c, 0x0db4, + 0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4, 0x080c, 0x0db4, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1963, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0db4, 0x0043, 0x012e, 0x015e, @@ -1139,14 +1139,14 @@ 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, 0x2a0b, 0x080c, 0x80c4, 0x1f04, + 0x0004, 0x0000, 0x0006, 0x1d04, 0x2a0b, 0x080c, 0x80ec, 0x1f04, 0x2a0b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2a5d, 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, 0x2a2f, 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2a35, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a3e, - 0x080c, 0x80c4, 0x1f04, 0x2a3e, 0x0005, 0x0006, 0x2001, 0x196d, + 0x080c, 0x80ec, 0x1f04, 0x2a3e, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001, @@ -1172,13 +1172,13 @@ 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c, 0x200c, - 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, 0x6fc1, + 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, 0x6fcc, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, - 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x6fc1, 0x0110, 0xc0bc, + 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x6fcc, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x2dba, 0x2dba, 0x2bde, 0x2bde, 0x2bea, 0x2bea, 0x2bf6, 0x2bf6, 0x2c04, 0x2c04, 0x2c10, 0x2c10, 0x2c1e, 0x2c1e, 0x2c2c, 0x2c2c, 0x2c3e, 0x2c3e, @@ -1258,2610 +1258,2615 @@ 0x2766, 0x080c, 0x212b, 0x080c, 0x2313, 0x080c, 0x130c, 0x080c, 0x2166, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, - 0x080c, 0x6519, 0x1904, 0x2ebe, 0x72d8, 0x2001, 0x194d, 0x2004, + 0x080c, 0x6520, 0x1904, 0x2ec1, 0x72d8, 0x2001, 0x194d, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, - 0x2ebe, 0x080c, 0x2ec3, 0x0804, 0x2ebe, 0xd2cc, 0x1904, 0x2ebe, - 0x080c, 0x6fa7, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ebe, 0xd294, - 0x0120, 0x70ab, 0xffff, 0x0804, 0x2ebe, 0x080c, 0x3127, 0x0160, - 0x080c, 0xc1f9, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e50, - 0x70ab, 0xffff, 0x0804, 0x2ebe, 0x2001, 0x1817, 0x203c, 0x7290, - 0xd284, 0x0904, 0x2e50, 0xd28c, 0x1904, 0x2e50, 0x0036, 0x73a8, + 0x2ec1, 0x080c, 0x2ec6, 0x0804, 0x2ec1, 0xd2cc, 0x1904, 0x2ec1, + 0x080c, 0x6fb2, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0xd294, + 0x0120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0x080c, 0x312e, 0x0160, + 0x080c, 0xc212, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e53, + 0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2001, 0x1817, 0x203c, 0x7290, + 0xd284, 0x0904, 0x2e53, 0xd28c, 0x1904, 0x2e53, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, - 0x9084, 0x00ff, 0x970e, 0x0590, 0x908e, 0x0000, 0x0578, 0x908e, - 0x00ff, 0x1150, 0x7230, 0xd284, 0x1570, 0x7290, 0xc28d, 0x7292, - 0x70ab, 0xffff, 0x003e, 0x0460, 0x0026, 0x2011, 0x0010, 0x080c, - 0x657f, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00f8, 0x900e, 0x080c, - 0x2663, 0x080c, 0x61d7, 0x11a8, 0x080c, 0x655b, 0x1150, 0x7030, - 0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x2edc, 0x0148, - 0x0028, 0x080c, 0x3018, 0x080c, 0x2f08, 0x0118, 0x8318, 0x0804, - 0x2e05, 0x73aa, 0x0010, 0x70ab, 0xffff, 0x003e, 0x0804, 0x2ebe, - 0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, - 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, - 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70ab, 0xffff, 0x0804, - 0x2ebe, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x2eb3, 0x0026, - 0x2011, 0x0010, 0x080c, 0x657f, 0x002e, 0x0120, 0x2009, 0xffff, - 0x0804, 0x2ebb, 0xc484, 0x080c, 0x6237, 0x0138, 0x080c, 0xc1f9, - 0x1590, 0x080c, 0x61d7, 0x15b8, 0x0008, 0xc485, 0x080c, 0x655b, - 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7290, - 0xd28c, 0x0180, 0x080c, 0x655b, 0x9082, 0x0006, 0x02e0, 0xd484, - 0x1118, 0x080c, 0x61fb, 0x0028, 0x080c, 0x30a3, 0x01a0, 0x080c, - 0x30ce, 0x0088, 0x080c, 0x3018, 0x080c, 0xc1f9, 0x1160, 0x080c, - 0x2f08, 0x0188, 0x0040, 0x080c, 0xc1f9, 0x1118, 0x080c, 0x30a3, - 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2e69, - 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, 0x71aa, 0x004e, 0x002e, - 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70ab, 0x0001, 0x2009, - 0x007e, 0x080c, 0x61d7, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, - 0x080c, 0x3018, 0x04a9, 0x0128, 0x70d8, 0xc0bd, 0x70da, 0x080c, - 0xbf4a, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, - 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9e66, - 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0001, 0x9006, - 0x080c, 0x6174, 0x2001, 0x0000, 0x080c, 0x6188, 0x0126, 0x2091, - 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0004, 0x080c, - 0x9e93, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, - 0x00ff, 0xb842, 0x080c, 0x9e66, 0x0548, 0x2b00, 0x6012, 0xb800, - 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x2fd7, 0x080c, 0xbf73, - 0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c, - 0x6188, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, - 0x2009, 0x0002, 0x080c, 0x9e93, 0x9085, 0x0001, 0x00ce, 0x00de, - 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, - 0x080c, 0x61d7, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, - 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, - 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9dc3, 0x01d0, 0x2b00, 0x6012, - 0x080c, 0xbf73, 0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001, - 0x0002, 0x080c, 0x6188, 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, - 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, 0x9e93, 0x9085, 0x0001, - 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x61d7, 0x11b8, 0xb813, - 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004, 0x080c, 0x9dc3, 0x0170, - 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xbf73, - 0x2009, 0x0022, 0x080c, 0x9e93, 0x9085, 0x0001, 0x012e, 0x00de, - 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, - 0x21f0, 0x080c, 0x8554, 0x080c, 0x84e3, 0x080c, 0x9c71, 0x080c, - 0xad5e, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, - 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6237, 0x1140, - 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5ce4, - 0x001e, 0x8108, 0x1f04, 0x2fbc, 0x9686, 0x0001, 0x190c, 0x30fb, - 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, - 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0, - 0x0026, 0x2019, 0x0029, 0x080c, 0x8549, 0x0076, 0x2039, 0x0000, - 0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b, 0x007e, 0x001e, 0xba10, - 0xbb14, 0x080c, 0x5ce4, 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e, - 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, - 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, - 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, - 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, - 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, + 0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e, + 0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292, + 0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c, + 0x6586, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c, + 0x2663, 0x080c, 0x61de, 0x11c0, 0x080c, 0x6562, 0x1168, 0x7030, + 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x645e, 0x0120, + 0x080c, 0x2edf, 0x0148, 0x0028, 0x080c, 0x301f, 0x080c, 0x2f0b, + 0x0118, 0x8318, 0x0804, 0x2e05, 0x73aa, 0x0010, 0x70ab, 0xffff, + 0x003e, 0x0804, 0x2ec1, 0x9780, 0x3138, 0x203d, 0x97bc, 0xff00, + 0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, + 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, + 0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2700, 0x0156, 0x0016, 0x9106, + 0x0904, 0x2eb6, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e, + 0x0120, 0x2009, 0xffff, 0x0804, 0x2ebe, 0xc484, 0x080c, 0x623e, + 0x0138, 0x080c, 0xc212, 0x1590, 0x080c, 0x61de, 0x15b8, 0x0008, + 0xc485, 0x080c, 0x6562, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, + 0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6562, 0x9082, + 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6202, 0x0028, 0x080c, + 0x30aa, 0x01a0, 0x080c, 0x30d5, 0x0088, 0x080c, 0x301f, 0x080c, + 0xc212, 0x1160, 0x080c, 0x2f0b, 0x0188, 0x0040, 0x080c, 0xc212, + 0x1118, 0x080c, 0x30aa, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, + 0x015e, 0x1f04, 0x2e6c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, + 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, + 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x61de, 0x1168, 0xb813, + 0x00ff, 0xb817, 0xfffe, 0x080c, 0x301f, 0x04a9, 0x0128, 0x70d8, + 0xc0bd, 0x70da, 0x080c, 0xbf63, 0x001e, 0x00ce, 0x0005, 0x0016, + 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, + 0xb842, 0x080c, 0x9e7f, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c, + 0x6023, 0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0000, 0x080c, + 0x618f, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, + 0x2009, 0x0004, 0x080c, 0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de, + 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, + 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9e7f, 0x0548, + 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, + 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, + 0x2fda, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006, 0x080c, 0x617b, + 0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091, 0x8000, 0x70a4, + 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9eac, 0x9085, + 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, + 0x0026, 0x2009, 0x0080, 0x080c, 0x61de, 0x1140, 0xb813, 0x00ff, + 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, + 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9ddc, + 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006, + 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091, + 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, + 0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, + 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, + 0x61de, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004, + 0x080c, 0x9ddc, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, + 0x620a, 0x080c, 0xbf8c, 0x2009, 0x0022, 0x080c, 0x9eac, 0x9085, + 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, + 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x857c, 0x080c, 0x850b, + 0x080c, 0x9c8a, 0x080c, 0xad77, 0x3e08, 0x2130, 0x81ff, 0x0120, + 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, + 0x080c, 0x623e, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, + 0x1110, 0x080c, 0x5ceb, 0x001e, 0x8108, 0x1f04, 0x2fbf, 0x9686, + 0x0001, 0x190c, 0x3102, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, + 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, + 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, + 0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c, + 0xd29b, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5ceb, + 0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e, + 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, + 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4, + 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071, + 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800, + 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, - 0x0001, 0x0080, 0x080c, 0x537f, 0xd0c4, 0x0148, 0x0040, 0x9006, - 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xd50a, 0x004e, 0x20a9, - 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x3083, 0x928e, - 0x007f, 0x0904, 0x3083, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, - 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x195f, 0x0006, - 0x2003, 0x0001, 0x04e9, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, - 0x2158, 0x2001, 0x0001, 0x080c, 0x6525, 0x00ce, 0x00be, 0x2019, - 0x0029, 0x080c, 0x8549, 0x0076, 0x2039, 0x0000, 0x080c, 0x8441, - 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, - 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, - 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, - 0xd27b, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x303a, 0x015e, - 0x001e, 0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0x0046, 0x0026, 0x0016, 0x080c, 0x537f, 0xd0c4, 0x0140, 0xd0a4, - 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xd50a, 0x001e, - 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, - 0x82ff, 0x01e8, 0x080c, 0x6553, 0x11d0, 0x2100, 0x080c, 0x2696, - 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, - 0x1a80, 0x001e, 0x6112, 0x080c, 0x2fd7, 0x001e, 0x080c, 0x61fb, - 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, - 0x990d, 0x080c, 0xd7c2, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836, - 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6fa7, 0x1118, - 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6fa7, 0x1110, - 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, - 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x61fb, 0x8108, - 0x1f04, 0x310c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084, - 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, - 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, 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, + 0x0001, 0x0070, 0x080c, 0x5386, 0xd0c4, 0x0138, 0x0030, 0x9006, + 0x2020, 0x2009, 0x002d, 0x080c, 0xd52a, 0x20a9, 0x0800, 0x9016, + 0x0026, 0x928e, 0x007e, 0x0904, 0x3089, 0x928e, 0x007f, 0x0904, + 0x3089, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, + 0x05c0, 0x8fff, 0x1148, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001, + 0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, + 0x0001, 0x080c, 0x652c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, + 0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x00b6, 0x00c6, + 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, + 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, + 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xd29b, 0x001e, + 0x007e, 0x002e, 0x8210, 0x1f04, 0x3040, 0x015e, 0x001e, 0x002e, + 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, + 0x0026, 0x0016, 0x080c, 0x5386, 0xd0c4, 0x0140, 0xd0a4, 0x0130, + 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xd52a, 0x001e, 0x002e, + 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, + 0x01e8, 0x080c, 0x655a, 0x11d0, 0x2100, 0x080c, 0x2696, 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, 0x1a80, + 0x001e, 0x6112, 0x080c, 0x2fda, 0x001e, 0x080c, 0x6202, 0x012e, + 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0x9926, + 0x080c, 0xd7e2, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836, 0x2004, + 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6fb2, 0x1118, 0x20a9, + 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6fb2, 0x1110, 0x900e, + 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, + 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x6202, 0x8108, 0x1f04, + 0x3113, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff, + 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1875, + 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, 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, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, - 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, - 0x18b0, 0x7007, 0x0001, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900, - 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1004, 0x090c, - 0x0db4, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, - 0x2071, 0x1894, 0x7004, 0x0002, 0x3260, 0x3261, 0x3274, 0x3288, - 0x0005, 0x1004, 0x3271, 0x0e04, 0x3271, 0x2079, 0x0000, 0x0126, - 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, - 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18ae, - 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, - 0x335c, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, - 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, - 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, - 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, - 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, - 0x003f, 0x1a04, 0x3359, 0x61cc, 0x0804, 0x32ee, 0x3330, 0x3368, - 0x3372, 0x3376, 0x3380, 0x3386, 0x338a, 0x339a, 0x339d, 0x33a7, - 0x33ac, 0x33b1, 0x33bc, 0x33c7, 0x33d6, 0x33e5, 0x33f3, 0x340a, - 0x3425, 0x3359, 0x34ce, 0x350c, 0x35b2, 0x35c3, 0x35e6, 0x3359, - 0x3359, 0x3359, 0x361e, 0x363a, 0x3643, 0x3672, 0x3678, 0x3359, - 0x36be, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x36c9, 0x36d2, - 0x36da, 0x36dc, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, - 0x3708, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3725, 0x3780, - 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x0002, 0x37aa, - 0x37ad, 0x380c, 0x3825, 0x3855, 0x3af3, 0x3359, 0x4f58, 0x3359, - 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x33a7, - 0x33ac, 0x4014, 0x53a3, 0x402a, 0x4fe7, 0x5038, 0x513b, 0x3359, - 0x519d, 0x51d9, 0x520a, 0x530e, 0x5237, 0x528e, 0x3359, 0x402e, - 0x41cf, 0x41e5, 0x420a, 0x426f, 0x42e3, 0x4303, 0x437a, 0x43d6, - 0x4432, 0x4435, 0x445a, 0x44fa, 0x4560, 0x4568, 0x469a, 0x47fc, - 0x4830, 0x4a7a, 0x3359, 0x4a98, 0x4b5b, 0x4c31, 0x3359, 0x3359, - 0x3359, 0x3359, 0x4c97, 0x4cb2, 0x4568, 0x4ef8, 0x714c, 0x0000, - 0x2021, 0x4000, 0x080c, 0x48ae, 0x0126, 0x2091, 0x8000, 0x0e04, - 0x333a, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, - 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, - 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x1187, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, - 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, - 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, - 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, - 0x0804, 0x48bb, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, - 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48be, - 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x3330, 0x7984, 0x2114, - 0x0804, 0x3330, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, - 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, - 0x0804, 0x3330, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, - 0x0002, 0x2019, 0x001a, 0x789b, 0x0317, 0x0804, 0x3330, 0x2039, - 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, - 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3365, 0x2138, - 0x7d98, 0x7c9c, 0x0804, 0x336c, 0x79a0, 0x9182, 0x0040, 0x0210, - 0x0804, 0x3365, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x337a, 0x79a0, - 0x9182, 0x0040, 0x0210, 0x0804, 0x3365, 0x21e8, 0x7984, 0x7888, - 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x3330, 0x2061, 0x0800, - 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, - 0x9005, 0x0904, 0x3330, 0x0804, 0x335f, 0x79a0, 0x9182, 0x0040, - 0x0210, 0x0804, 0x3365, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, - 0x4012, 0x0804, 0x3330, 0x2069, 0x1853, 0x7884, 0x7990, 0x911a, - 0x1a04, 0x3365, 0x8019, 0x0904, 0x3365, 0x684a, 0x6942, 0x788c, - 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x72bc, - 0x0804, 0x3330, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, 0x1a04, - 0x3365, 0x8019, 0x0904, 0x3365, 0x684e, 0x6946, 0x788c, 0x6862, - 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, - 0x080c, 0x665d, 0x012e, 0x0804, 0x3330, 0x902e, 0x2520, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x7984, 0x7b88, 0x7a8c, - 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, 0x080c, - 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x2009, 0x0020, - 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48bb, 0x701f, 0x3449, - 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, - 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, - 0x0120, 0x9096, 0x0029, 0x1904, 0x3362, 0x810f, 0x918c, 0x00ff, - 0x0904, 0x3362, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, - 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x2009, 0x0020, - 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, - 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, - 0x0019, 0xaf60, 0x080c, 0x48bb, 0x701f, 0x3487, 0x0005, 0xa864, - 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, - 0x3362, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, - 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, - 0x5dd6, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, - 0x0050, 0x080c, 0x60ed, 0x1128, 0x7007, 0x0003, 0x701f, 0x34b3, - 0x0005, 0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, - 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, 0x9399, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, + 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, + 0x7007, 0x0001, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900, 0x706a, + 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1004, 0x090c, 0x0db4, + 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, + 0x1894, 0x7004, 0x0002, 0x3267, 0x3268, 0x327b, 0x328f, 0x0005, + 0x1004, 0x3278, 0x0e04, 0x3278, 0x2079, 0x0000, 0x0126, 0x2091, + 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, + 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18ae, 0x2c4c, + 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3363, + 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, + 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, + 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, + 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, + 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f, + 0x1a04, 0x3360, 0x61cc, 0x0804, 0x32f5, 0x3337, 0x336f, 0x3379, + 0x337d, 0x3387, 0x338d, 0x3391, 0x33a1, 0x33a4, 0x33ae, 0x33b3, + 0x33b8, 0x33c3, 0x33ce, 0x33dd, 0x33ec, 0x33fa, 0x3411, 0x342c, + 0x3360, 0x34d5, 0x3513, 0x35b9, 0x35ca, 0x35ed, 0x3360, 0x3360, + 0x3360, 0x3625, 0x3641, 0x364a, 0x3679, 0x367f, 0x3360, 0x36c5, + 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x36d0, 0x36d9, 0x36e1, + 0x36e3, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x370f, + 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x372c, 0x3787, 0x3360, + 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x0002, 0x37b1, 0x37b4, + 0x3813, 0x382c, 0x385c, 0x3afa, 0x3360, 0x4f5f, 0x3360, 0x3360, + 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x33ae, 0x33b3, + 0x401b, 0x53aa, 0x4031, 0x4fee, 0x503f, 0x5142, 0x3360, 0x51a4, + 0x51e0, 0x5211, 0x5315, 0x523e, 0x5295, 0x3360, 0x4035, 0x41d6, + 0x41ec, 0x4211, 0x4276, 0x42ea, 0x430a, 0x4381, 0x43dd, 0x4439, + 0x443c, 0x4461, 0x4501, 0x4567, 0x456f, 0x46a1, 0x4803, 0x4837, + 0x4a81, 0x3360, 0x4a9f, 0x4b62, 0x4c38, 0x3360, 0x3360, 0x3360, + 0x3360, 0x4c9e, 0x4cb9, 0x456f, 0x4eff, 0x714c, 0x0000, 0x2021, + 0x4000, 0x080c, 0x48b5, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3341, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, + 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, + 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, + 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, + 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, + 0x48c2, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, + 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48c5, 0x7984, + 0x7888, 0x2114, 0x200a, 0x0804, 0x3337, 0x7984, 0x2114, 0x0804, + 0x3337, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, + 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, + 0x3337, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, + 0x2019, 0x001c, 0x789b, 0x0317, 0x0804, 0x3337, 0x2039, 0x0001, + 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, + 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x336c, 0x2138, 0x7d98, + 0x7c9c, 0x0804, 0x3373, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, + 0x336c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3381, 0x79a0, 0x9182, + 0x0040, 0x0210, 0x0804, 0x336c, 0x21e8, 0x7984, 0x7888, 0x20a9, + 0x0001, 0x21a0, 0x4004, 0x0804, 0x3337, 0x2061, 0x0800, 0xe10c, + 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, + 0x0904, 0x3337, 0x0804, 0x3366, 0x79a0, 0x9182, 0x0040, 0x0210, + 0x0804, 0x336c, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, + 0x0804, 0x3337, 0x2069, 0x1853, 0x7884, 0x7990, 0x911a, 0x1a04, + 0x336c, 0x8019, 0x0904, 0x336c, 0x684a, 0x6942, 0x788c, 0x6852, + 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x72c7, 0x0804, + 0x3337, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, 0x1a04, 0x336c, + 0x8019, 0x0904, 0x336c, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, + 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6664, 0x012e, 0x0804, 0x3337, 0x902e, 0x2520, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3369, 0x7984, 0x7b88, 0x7a8c, 0x20a9, + 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, 0x080c, 0x4879, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0xa85c, + 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c2, 0x701f, 0x3450, 0x0005, + 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, + 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, + 0x9096, 0x0029, 0x1904, 0x3369, 0x810f, 0x918c, 0x00ff, 0x0904, + 0x3369, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x4879, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0x7068, + 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, - 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x48be, 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, 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, - 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, - 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3362, 0x7984, - 0x080c, 0x6237, 0x1904, 0x3365, 0x7e98, 0x9684, 0x3fff, 0x9082, - 0x4000, 0x1a04, 0x3365, 0x7c88, 0x7d8c, 0x080c, 0x639a, 0x080c, - 0x6369, 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, - 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, - 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x3362, 0x0c30, 0x080c, - 0xb731, 0x012e, 0x0904, 0x3362, 0x0804, 0x3330, 0x900e, 0x2001, - 0x0005, 0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x080c, 0xbdf3, - 0x080c, 0x6885, 0x012e, 0x0804, 0x3330, 0x00a6, 0x2950, 0xb198, - 0x080c, 0x6237, 0x1904, 0x359f, 0xb6a4, 0x9684, 0x3fff, 0x9082, - 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x639a, 0x080c, 0x6369, - 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, - 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, - 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, - 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb731, - 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, - 0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x080c, 0xbdf3, 0x080c, - 0x6878, 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, 0x3362, 0x080c, 0x4889, 0x0904, - 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0x080c, 0x63a0, 0x0904, - 0x3362, 0x0804, 0x42fa, 0x81ff, 0x1904, 0x3362, 0x080c, 0x48a5, - 0x0904, 0x3365, 0x080c, 0x642e, 0x0904, 0x3362, 0x2019, 0x0005, - 0x79a8, 0x080c, 0x63bb, 0x0904, 0x3362, 0x7888, 0x908a, 0x1000, - 0x1a04, 0x3365, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x801e, - 0x7984, 0xd184, 0x1904, 0x3330, 0x0804, 0x42fa, 0x0126, 0x2091, - 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, - 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x6237, 0x11d8, - 0x080c, 0x642e, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, - 0x2019, 0x0004, 0x900e, 0x080c, 0x63bb, 0x1118, 0x2009, 0x0006, - 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, - 0x9108, 0x080c, 0x801e, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x3330, - 0x012e, 0x0804, 0x3362, 0x012e, 0x0804, 0x3365, 0x080c, 0x4889, - 0x0904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0xbaa0, 0x2019, - 0x0005, 0x00c6, 0x9066, 0x080c, 0x8549, 0x0076, 0x903e, 0x080c, - 0x8441, 0x900e, 0x080c, 0xd27b, 0x007e, 0x00ce, 0x080c, 0x639a, - 0x0804, 0x3330, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c, 0x639a, - 0x2208, 0x0804, 0x3330, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1906, - 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, - 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, - 0x0059, 0x9210, 0x8d68, 0x1f04, 0x3654, 0x2300, 0x9218, 0x00ee, - 0x00de, 0x015e, 0x0804, 0x3330, 0x00f6, 0x0016, 0x907d, 0x0138, - 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, - 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, 0x0804, 0x3330, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x0126, 0x2091, - 0x8000, 0x080c, 0x5393, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, - 0x3362, 0x012e, 0x6158, 0x9190, 0x3131, 0x2215, 0x9294, 0x00ff, - 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, - 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, - 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, - 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6fa7, 0x1118, - 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, - 0x3362, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3330, 0x6148, 0x624c, - 0x2019, 0x1957, 0x231c, 0x2001, 0x1958, 0x2004, 0x789a, 0x0804, - 0x3330, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, - 0x0804, 0x3330, 0x080c, 0x48a5, 0x0904, 0x3365, 0xba44, 0xbb38, - 0x0804, 0x3330, 0x080c, 0x0db4, 0x080c, 0x48a5, 0x2110, 0x0904, - 0x3365, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, - 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3362, 0x0126, - 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x990d, - 0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x900e, 0x080c, - 0xd27b, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x3330, - 0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, - 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, - 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, - 0x2d04, 0x266a, 0x789a, 0x0804, 0x3330, 0x0126, 0x2091, 0x8000, - 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0e9b, 0xd0c4, - 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, - 0x196f, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, - 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, - 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, - 0x0010, 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, - 0xd1e4, 0x190c, 0x0eb1, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, - 0x0114, 0x2012, 0x012e, 0x0804, 0x3330, 0x00f6, 0x2079, 0x1800, - 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, - 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, - 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, - 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x3365, 0x788c, - 0x902d, 0x0904, 0x3365, 0x900e, 0x080c, 0x6237, 0x1120, 0xba44, - 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, - 0x080c, 0x48a5, 0x0904, 0x3365, 0x7888, 0x900d, 0x0904, 0x3365, - 0x788c, 0x9005, 0x0904, 0x3365, 0xba44, 0xb946, 0xbb38, 0xb83a, - 0x0804, 0x3330, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, - 0x5393, 0x1904, 0x3362, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, - 0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, - 0x9182, 0x007f, 0x16e0, 0x9188, 0x3131, 0x210d, 0x918c, 0x00ff, - 0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, - 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9dc3, 0x000e, - 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x61dd, 0x2b08, - 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4872, 0x01d0, - 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, - 0x701f, 0x3805, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9e93, - 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3362, 0x00ce, - 0x0804, 0x3365, 0x080c, 0x9e19, 0x0cb0, 0xa830, 0x9086, 0x0100, - 0x0904, 0x3362, 0x0804, 0x3330, 0x2061, 0x1a41, 0x0126, 0x2091, - 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, - 0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, - 0x0804, 0x3330, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3362, - 0x080c, 0x6fa7, 0x0904, 0x3362, 0x0126, 0x2091, 0x8000, 0x6250, - 0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26cc, 0x080c, - 0x55ad, 0x012e, 0x0804, 0x3330, 0x012e, 0x0804, 0x3365, 0x0006, - 0x0016, 0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, - 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x8248, 0x7206, - 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, - 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3332, 0x7884, - 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, - 0x012e, 0x0804, 0x3365, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, - 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3365, 0x012e, 0x0804, - 0x3362, 0x080c, 0x9d98, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x38d0, - 0x00c6, 0x080c, 0x4872, 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, 0x3a56, - 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, - 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, + 0xaf60, 0x080c, 0x48c2, 0x701f, 0x348e, 0x0005, 0xa864, 0x9084, + 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x3369, + 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, + 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x5ddd, + 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, + 0x080c, 0x60f4, 0x1128, 0x7007, 0x0003, 0x701f, 0x34ba, 0x0005, + 0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, + 0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, + 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, + 0x0020, 0x012e, 0xaf60, 0x0804, 0x48c5, 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, + 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, + 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, + 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3369, 0x7984, 0x080c, + 0x623e, 0x1904, 0x336c, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x1a04, 0x336c, 0x7c88, 0x7d8c, 0x080c, 0x63a1, 0x080c, 0x6370, + 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, + 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, + 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, + 0x1819, 0x2004, 0x9c02, 0x1a04, 0x3369, 0x0c30, 0x080c, 0xb74a, + 0x012e, 0x0904, 0x3369, 0x0804, 0x3337, 0x900e, 0x2001, 0x0005, + 0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c, + 0x688c, 0x012e, 0x0804, 0x3337, 0x00a6, 0x2950, 0xb198, 0x080c, + 0x623e, 0x1904, 0x35a6, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x63a1, 0x080c, 0x6370, 0x1520, + 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, + 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, + 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, + 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb74a, 0x012e, + 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, + 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c, 0x687f, + 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, 0x3369, 0x080c, 0x4890, 0x0904, 0x336c, + 0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904, 0x3369, + 0x0804, 0x4301, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904, + 0x336c, 0x080c, 0x6435, 0x0904, 0x3369, 0x2019, 0x0005, 0x79a8, + 0x080c, 0x63c2, 0x0904, 0x3369, 0x7888, 0x908a, 0x1000, 0x1a04, + 0x336c, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046, 0x7984, + 0xd184, 0x1904, 0x3337, 0x0804, 0x4301, 0x0126, 0x2091, 0x8000, + 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458, + 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x623e, 0x11d8, 0x080c, + 0x6435, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019, + 0x0004, 0x900e, 0x080c, 0x63c2, 0x1118, 0x2009, 0x0006, 0x0078, + 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, + 0x080c, 0x8046, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x3337, 0x012e, + 0x0804, 0x3369, 0x012e, 0x0804, 0x336c, 0x080c, 0x4890, 0x0904, + 0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0xbaa0, 0x2019, 0x0005, + 0x00c6, 0x9066, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, + 0x900e, 0x080c, 0xd29b, 0x007e, 0x00ce, 0x080c, 0x63a1, 0x0804, + 0x3337, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x63a1, 0x2208, + 0x0804, 0x3337, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1906, 0x6810, + 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, + 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, + 0x9210, 0x8d68, 0x1f04, 0x365b, 0x2300, 0x9218, 0x00ee, 0x00de, + 0x015e, 0x0804, 0x3337, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, + 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, + 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, 0x0804, 0x3337, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x0126, 0x2091, 0x8000, + 0x080c, 0x539a, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x3369, + 0x012e, 0x6158, 0x9190, 0x3138, 0x2215, 0x9294, 0x00ff, 0x6378, + 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, + 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, + 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, + 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6fb2, 0x1118, 0x2031, + 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x3369, + 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3337, 0x6148, 0x624c, 0x2019, + 0x1957, 0x231c, 0x2001, 0x1958, 0x2004, 0x789a, 0x0804, 0x3337, + 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, + 0x3337, 0x080c, 0x48ac, 0x0904, 0x336c, 0xba44, 0xbb38, 0x0804, + 0x3337, 0x080c, 0x0db4, 0x080c, 0x48ac, 0x2110, 0x0904, 0x336c, + 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, + 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3369, 0x0126, 0x2091, + 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x9926, 0x080c, + 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b, + 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x3337, 0x6148, + 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f, + 0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98, + 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04, + 0x266a, 0x789a, 0x0804, 0x3337, 0x0126, 0x2091, 0x8000, 0x6138, + 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0e9b, 0xd0c4, 0x01a8, + 0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f, + 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, + 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, + 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, + 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, + 0x190c, 0x0eb1, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, + 0x2012, 0x012e, 0x0804, 0x3337, 0x00f6, 0x2079, 0x1800, 0x7a38, + 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, + 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, + 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x336c, 0x788c, 0x902d, + 0x0904, 0x336c, 0x900e, 0x080c, 0x623e, 0x1120, 0xba44, 0xbb38, + 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, + 0x48ac, 0x0904, 0x336c, 0x7888, 0x900d, 0x0904, 0x336c, 0x788c, + 0x9005, 0x0904, 0x336c, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, + 0x3337, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x539a, + 0x1904, 0x3369, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, + 0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, + 0x007f, 0x16e0, 0x9188, 0x3138, 0x210d, 0x918c, 0x00ff, 0x2001, + 0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, + 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9ddc, 0x000e, 0x0510, + 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x61e4, 0x2b08, 0x00be, + 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4879, 0x01d0, 0x9006, + 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, + 0x380c, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9eac, 0x012e, + 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3369, 0x00ce, 0x0804, + 0x336c, 0x080c, 0x9e32, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, + 0x3369, 0x0804, 0x3337, 0x2061, 0x1a41, 0x0126, 0x2091, 0x8000, + 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, + 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, + 0x3337, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3369, 0x080c, + 0x6fb2, 0x0904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, + 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26cc, 0x080c, 0x55b4, + 0x012e, 0x0804, 0x3337, 0x012e, 0x0804, 0x336c, 0x0006, 0x0016, + 0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008, + 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x8270, 0x7206, 0x00ee, + 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, + 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339, 0x7884, 0xd0fc, + 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, + 0x0804, 0x336c, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908, + 0x9102, 0x1230, 0x012e, 0x0804, 0x336c, 0x012e, 0x0804, 0x3369, + 0x080c, 0x9db1, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x38d7, 0x00c6, + 0x080c, 0x4879, 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, 0x3a5d, 0x0928, + 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, + 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, + 0x48c2, 0x701f, 0x399a, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, + 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, + 0x080c, 0x3846, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021, 0x000a, + 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, + 0x60bf, 0x0012, 0x080c, 0x3acc, 0x080c, 0x3a8b, 0x00f6, 0x00e6, + 0x0086, 0x2940, 0x2071, 0x1a36, 0x2079, 0x0090, 0x00d6, 0x2069, + 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, + 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, + 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c, 0x080c, 0x3c91, + 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, + 0x3ed3, 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, 0x181f, 0x2004, 0x9106, 0x1168, + 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, + 0x080c, 0x3c9b, 0x080c, 0x3a86, 0x0058, 0x080c, 0x3a86, 0x080c, + 0x3df7, 0x080c, 0x3d82, 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, 0x129f, 0x2009, 0x0028, 0x080c, 0x2268, + 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x1970, 0x2004, + 0x9005, 0x1118, 0x012e, 0x0804, 0x3337, 0x012e, 0x2021, 0x400c, + 0x0804, 0x3339, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, + 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, + 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x39f6, 0x2048, 0x1f04, + 0x39aa, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, + 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, + 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, - 0x080c, 0x48bb, 0x701f, 0x3993, 0x7023, 0x0001, 0x012e, 0x0005, - 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x080c, 0x383f, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021, - 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, - 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3ac5, 0x080c, 0x3a84, 0x00f6, - 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a36, 0x2079, 0x0090, 0x00d6, - 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, - 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, - 0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d85, 0x080c, - 0x3c8a, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, - 0x080c, 0x3ecc, 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, 0x181f, 0x2004, 0x9106, - 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, - 0x0138, 0x080c, 0x3c94, 0x080c, 0x3a7f, 0x0058, 0x080c, 0x3a7f, - 0x080c, 0x3df0, 0x080c, 0x3d7b, 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, 0x129f, 0x2009, 0x0028, 0x080c, - 0x2268, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x1970, - 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3330, 0x012e, 0x2021, - 0x400c, 0x0804, 0x3332, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, - 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, - 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x39ef, 0x2048, - 0x1f04, 0x39a3, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, - 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, - 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, - 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x001b, 0x080c, 0x48bb, 0x701f, 0x3993, 0x00b0, 0x8906, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, - 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f68, 0x000e, - 0x080c, 0x48be, 0x701f, 0x3993, 0x015e, 0x00de, 0x009e, 0x008e, - 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, - 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3a54, 0x0450, - 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, - 0x61d7, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, - 0x080c, 0xbfc2, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, - 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x3362, 0x0016, 0x0026, - 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, - 0x701f, 0x3a26, 0x7007, 0x0003, 0x0804, 0x39e4, 0xa830, 0x9086, - 0x0100, 0x2021, 0x400c, 0x0904, 0x3332, 0x0076, 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, 0x0f68, 0x000e, 0x080c, 0x48be, 0x007e, 0x701f, - 0x3993, 0x7023, 0x0001, 0x0005, 0x0804, 0x3330, 0x0156, 0x00c6, - 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, - 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4872, 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, - 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, - 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, - 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4872, - 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, - 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, - 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, - 0x080c, 0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, - 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, - 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4872, - 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, 0x2a55, 0x1130, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, - 0x2990, 0x7884, 0x9084, 0x0007, 0x0002, 0x3b10, 0x3b19, 0x3b22, - 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x012e, 0x0804, 0x3365, - 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3cde, - 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, - 0x3cde, 0x0078, 0x080c, 0x6fa7, 0x1128, 0x012e, 0x2009, 0x0016, - 0x0804, 0x3362, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, - 0x3332, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x080c, 0x383f, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, - 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3fa7, 0x080c, - 0x3ef7, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, - 0x1a36, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, - 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, - 0x080c, 0x3e58, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, 0x2a5d, - 0x080c, 0x2a5d, 0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x080c, - 0x3d85, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3c94, 0x2001, - 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, - 0x080c, 0x3362, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, - 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, - 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3d63, 0x2d00, - 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3c94, 0x0804, 0x3c41, 0x080c, - 0x3ecc, 0x080c, 0x3df0, 0x080c, 0x3d46, 0x080c, 0x3d7b, 0x00f6, - 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3c94, - 0x00fe, 0x0804, 0x3c41, 0x00fe, 0x080c, 0x3c8a, 0x1150, 0x8d68, - 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3c94, - 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, - 0x8739, 0x0038, 0x2001, 0x1a33, 0x2004, 0x9086, 0x0000, 0x1904, - 0x3b91, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, - 0x2500, 0x9605, 0x0904, 0x3c41, 0x7884, 0xd0bc, 0x0128, 0x2d00, - 0x9c05, 0x9b05, 0x1904, 0x3c41, 0xa013, 0x0019, 0x2001, 0x032a, - 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a33, 0x2003, - 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, - 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, - 0x080c, 0x2268, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, - 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, - 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3c18, 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, - 0x3b4b, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, - 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, - 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x129f, - 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, - 0x080c, 0x2268, 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, 0x3330, 0x012e, 0x2021, 0x400c, - 0x0804, 0x3332, 0x9085, 0x0001, 0x1d04, 0x3c93, 0x2091, 0x6000, - 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, - 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a33, 0x2003, 0x0000, - 0x0071, 0x2009, 0x0048, 0x080c, 0x2268, 0x2001, 0x0227, 0x2024, - 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, - 0x00e6, 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, - 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, - 0x1120, 0x2009, 0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x0d88, - 0x080c, 0x3ecc, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, - 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b, - 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, - 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x26ac, - 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, - 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, - 0x0046, 0x1d04, 0x3cf9, 0x2091, 0x6000, 0x1f04, 0x3cf9, 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, 0x3d19, 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, 0x2b14, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, - 0x080c, 0x2b14, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, - 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a33, 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, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3a75, 0x1188, 0x2001, - 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, - 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, - 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 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, - 0x0092, 0x7016, 0x080c, 0x3ecc, 0x00f6, 0x2071, 0x1a33, 0x2079, - 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, - 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, - 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, - 0x3e58, 0x2011, 0x0001, 0x080c, 0x3e58, 0x00fe, 0x00ee, 0x0005, - 0x00f6, 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x792c, 0xd1fc, - 0x0904, 0x3e55, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e51, - 0x7000, 0x0002, 0x3e55, 0x3e06, 0x3e36, 0x3e51, 0xd1bc, 0x1170, - 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e58, - 0x0904, 0x3e55, 0x080c, 0x3e58, 0x0804, 0x3e55, 0x00f6, 0x2079, - 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, - 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, - 0x3d63, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, - 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, - 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3dfa, 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, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, - 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, - 0x0007, 0x1a0c, 0x0db4, 0x9398, 0x3e86, 0x231d, 0x083f, 0x9080, - 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, - 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, - 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3ec3, 0x3eba, - 0x3eb1, 0x3ea8, 0x3e9f, 0x3e96, 0x3e8d, 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, - 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, - 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, - 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, - 0x1a36, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, - 0x2940, 0x9026, 0x7000, 0x0002, 0x3ef3, 0x3edf, 0x3eea, 0x8001, - 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e58, 0x190c, - 0x3e58, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011, - 0x0001, 0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, - 0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, - 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, - 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4872, - 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, - 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, - 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f6f, 0x1d68, - 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4872, 0xa813, 0x0019, 0xa817, - 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, - 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, - 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, + 0x080c, 0x48c2, 0x701f, 0x399a, 0x00b0, 0x8906, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, + 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f68, 0x000e, 0x080c, + 0x48c5, 0x701f, 0x399a, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, + 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, + 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3a5b, 0x0450, 0x7014, + 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x61de, + 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, + 0xbfdb, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, + 0x003e, 0x002e, 0x001e, 0x0904, 0x3369, 0x0016, 0x0026, 0x0036, + 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, + 0x3a2d, 0x7007, 0x0003, 0x0804, 0x39eb, 0xa830, 0x9086, 0x0100, + 0x2021, 0x400c, 0x0904, 0x3339, 0x0076, 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, 0x0f68, 0x000e, 0x080c, 0x48c5, 0x007e, 0x701f, 0x399a, + 0x7023, 0x0001, 0x0005, 0x0804, 0x3337, 0x0156, 0x00c6, 0xa814, + 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, + 0x81ff, 0x0168, 0x0016, 0x080c, 0x4879, 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, 0x1970, + 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, + 0x2001, 0x197b, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x197a, + 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4879, 0xa813, + 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, + 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, - 0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, - 0x2001, 0x002b, 0x2004, 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, - 0x4872, 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, 0x4872, 0x2940, 0xa813, + 0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, + 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, + 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4879, 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, + 0x2a55, 0x1130, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, + 0x7884, 0x9084, 0x0007, 0x0002, 0x3b17, 0x3b20, 0x3b29, 0x3b14, + 0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x012e, 0x0804, 0x336c, 0x2009, + 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3ce5, 0x00c0, + 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3ce5, + 0x0078, 0x080c, 0x6fb2, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, + 0x3369, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339, + 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, + 0x080c, 0x3846, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, + 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3fae, 0x080c, 0x3efe, + 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a36, + 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, + 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, + 0x3e5f, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, + 0x2a5d, 0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c, + 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3c9b, 0x2001, 0x0004, + 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, + 0x3369, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, + 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, + 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3d6a, 0x2d00, 0x9c05, + 0x9b05, 0x0120, 0x080c, 0x3c9b, 0x0804, 0x3c48, 0x080c, 0x3ed3, + 0x080c, 0x3df7, 0x080c, 0x3d4d, 0x080c, 0x3d82, 0x00f6, 0x2079, + 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3c9b, 0x00fe, + 0x0804, 0x3c48, 0x00fe, 0x080c, 0x3c91, 0x1150, 0x8d68, 0x2001, + 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3c9b, 0x0080, + 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, + 0x0038, 0x2001, 0x1a33, 0x2004, 0x9086, 0x0000, 0x1904, 0x3b98, + 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, + 0x9605, 0x0904, 0x3c48, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, + 0x9b05, 0x1904, 0x3c48, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, + 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a33, 0x2003, 0x0003, + 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, + 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, + 0x2268, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, + 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, + 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3c1f, 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, 0x3b52, + 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, + 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, + 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x129f, 0x7884, + 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c, + 0x2268, 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, 0x3337, 0x012e, 0x2021, 0x400c, 0x0804, + 0x3339, 0x9085, 0x0001, 0x1d04, 0x3c9a, 0x2091, 0x6000, 0x8420, + 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, + 0x032a, 0x2003, 0x0004, 0x2001, 0x1a33, 0x2003, 0x0000, 0x0071, + 0x2009, 0x0048, 0x080c, 0x2268, 0x2001, 0x0227, 0x2024, 0x2402, + 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6, + 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090, + 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, + 0x2009, 0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x0d88, 0x080c, + 0x3ed3, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, + 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b, 0x0002, + 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, + 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x26ac, 0x7850, + 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, + 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, + 0x1d04, 0x3d00, 0x2091, 0x6000, 0x1f04, 0x3d00, 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, 0x3d20, 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, 0x2b14, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c, + 0x2b14, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, + 0x00f6, 0x00e6, 0x2071, 0x1a33, 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, + 0x197b, 0x2004, 0x70e2, 0x080c, 0x3a7c, 0x1188, 0x2001, 0x181f, + 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, + 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, + 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 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, 0x0092, + 0x7016, 0x080c, 0x3ed3, 0x00f6, 0x2071, 0x1a33, 0x2079, 0x0320, + 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, + 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, + 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, 0x3e5f, + 0x2011, 0x0001, 0x080c, 0x3e5f, 0x00fe, 0x00ee, 0x0005, 0x00f6, + 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, + 0x3e5c, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e58, 0x7000, + 0x0002, 0x3e5c, 0x3e0d, 0x3e3d, 0x3e58, 0xd1bc, 0x1170, 0xd1dc, + 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x0904, + 0x3e5c, 0x080c, 0x3e5f, 0x0804, 0x3e5c, 0x00f6, 0x2079, 0x0300, + 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, + 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3d6a, + 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, + 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, + 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e01, 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, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, 0x2048, + 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, 0x0007, + 0x1a0c, 0x0db4, 0x9398, 0x3e8d, 0x231d, 0x083f, 0x9080, 0x0004, + 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, 0x0035, + 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, 0x0019, + 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3eca, 0x3ec1, 0x3eb8, + 0x3eaf, 0x3ea6, 0x3e9d, 0x3e94, 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, + 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, 0x7916, + 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, 0xa9c0, + 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, 0x7912, + 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a36, + 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, + 0x9026, 0x7000, 0x0002, 0x3efa, 0x3ee6, 0x3ef1, 0x8001, 0x7002, + 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x190c, 0x3e5f, + 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, + 0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, + 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, + 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, + 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, 0x2001, + 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4879, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, - 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f6f, 0x1d68, 0x2900, - 0xa85a, 0x00d8, 0x080c, 0x4872, 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, 0x1a33, 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, - 0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, - 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, - 0x0804, 0x3330, 0x7d98, 0x7c9c, 0x0804, 0x3427, 0x080c, 0x6fa7, - 0x190c, 0x5c8f, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48bb, 0x701f, - 0x4042, 0x0005, 0x080c, 0x538e, 0x1130, 0x3b00, 0x3a08, 0xc194, - 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904, - 0x3365, 0x6804, 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, 0x3365, 0x9288, - 0x3131, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, - 0x908a, 0x007f, 0x1a04, 0x3365, 0x605a, 0x6888, 0x9084, 0x0030, - 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080, - 0x279f, 0x2005, 0x200a, 0x000e, 0x2009, 0x1983, 0x9080, 0x27a3, - 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3365, 0x908a, - 0x0841, 0x1a04, 0x3365, 0x9084, 0x0007, 0x1904, 0x3365, 0x680c, - 0x9005, 0x0904, 0x3365, 0x6810, 0x9005, 0x0904, 0x3365, 0x6848, - 0x6940, 0x910a, 0x1a04, 0x3365, 0x8001, 0x0904, 0x3365, 0x684c, - 0x6944, 0x910a, 0x1a04, 0x3365, 0x8001, 0x0904, 0x3365, 0x2009, - 0x1952, 0x200b, 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140, - 0x7884, 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, - 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, - 0x080c, 0x72bc, 0x080c, 0x6628, 0x080c, 0x665d, 0x6808, 0x602a, - 0x080c, 0x21da, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, - 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2706, 0x003e, 0x6000, - 0x9086, 0x0000, 0x1904, 0x41bf, 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, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, - 0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8119, 0x00c6, 0x900e, - 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, - 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, - 0x12b0, 0x3508, 0x8109, 0x080c, 0x7887, 0x6878, 0x6016, 0x6874, - 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, - 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, - 0x412e, 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, - 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0000, 0x00ce, 0x00e6, - 0x2c70, 0x080c, 0x0e80, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, - 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, - 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, - 0x2001, 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, - 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, - 0x080c, 0x277b, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, - 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, - 0x6fa7, 0x0128, 0x080c, 0x4c8b, 0x0110, 0x080c, 0x26cc, 0x60d0, - 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x41a7, 0x00d0, 0x080c, - 0x6fa7, 0x1168, 0x2011, 0x6e28, 0x080c, 0x8010, 0x2011, 0x6e1b, - 0x080c, 0x80e4, 0x080c, 0x7290, 0x080c, 0x6ed9, 0x0040, 0x080c, - 0x5b89, 0x0028, 0x6003, 0x0004, 0x2009, 0x41bf, 0x0010, 0x0804, - 0x3330, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, - 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, - 0x9086, 0x0000, 0x0904, 0x3362, 0x2069, 0x1853, 0x7890, 0x6842, - 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x2039, 0x0001, 0x0804, 0x48be, 0x9006, 0x080c, 0x26cc, - 0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7, 0x11b0, 0x080c, 0x728b, - 0x080c, 0x5cca, 0x080c, 0x312c, 0x0118, 0x6130, 0xc18d, 0x6132, - 0x080c, 0xc1f9, 0x0130, 0x080c, 0x6fca, 0x1118, 0x080c, 0x6f7f, - 0x0038, 0x080c, 0x6ed9, 0x0020, 0x080c, 0x5c8f, 0x080c, 0x5b89, - 0x0804, 0x3330, 0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7, 0x1110, - 0x0804, 0x3362, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, - 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, - 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x48be, 0x701f, 0x332e, - 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, - 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, - 0x6558, 0x9588, 0x3131, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, - 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6237, 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, 0x5c1a, 0x0804, 0x4217, 0x080c, - 0x48a5, 0x0904, 0x3365, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, - 0x0804, 0x3362, 0x080c, 0x537f, 0xd0b4, 0x0558, 0x7884, 0x908e, - 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, - 0x080c, 0x3127, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xbcc7, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362, - 0x7007, 0x0003, 0x701f, 0x42a5, 0x0005, 0x080c, 0x48a5, 0x0904, - 0x3365, 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, 0x0f68, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, - 0x000a, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f68, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x0804, 0x48be, 0x81ff, 0x1904, 0x3362, 0x080c, 0x4889, - 0x0904, 0x3365, 0x080c, 0x63a9, 0x0904, 0x3362, 0x0058, 0xa878, - 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x3362, 0xa974, 0xaa94, - 0x0804, 0x3330, 0x080c, 0x5387, 0x0904, 0x3330, 0x701f, 0x42ef, - 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x3362, 0x7888, 0x908a, - 0x1000, 0x1a04, 0x3365, 0x080c, 0x48a5, 0x0904, 0x3365, 0x080c, - 0x655b, 0x0120, 0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x642e, - 0x0904, 0x3362, 0x2019, 0x0004, 0x900e, 0x080c, 0x63bb, 0x0904, - 0x3362, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, - 0x12f8, 0x080c, 0x48a3, 0x01e0, 0x080c, 0x655b, 0x0118, 0x080c, - 0x6563, 0x11b0, 0x080c, 0x642e, 0x2009, 0x0002, 0x0168, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x63bb, 0x2009, 0x0003, 0x0120, - 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, - 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, - 0xa897, 0x4000, 0x080c, 0x5387, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, - 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, - 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, - 0x6237, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, - 0x801e, 0x0005, 0x81ff, 0x1904, 0x3362, 0x798c, 0x2001, 0x1951, - 0x918c, 0x8000, 0x2102, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c, - 0x655b, 0x0120, 0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x62fe, - 0x0904, 0x3362, 0x080c, 0x63b2, 0x0904, 0x3362, 0x2001, 0x1951, - 0x2004, 0xd0fc, 0x1904, 0x3330, 0x0804, 0x42fa, 0xa9a0, 0x2001, - 0x1951, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4896, 0x01a0, - 0x080c, 0x655b, 0x0118, 0x080c, 0x6563, 0x1170, 0x080c, 0x62fe, - 0x2009, 0x0002, 0x0128, 0x080c, 0x63b2, 0x1170, 0x2009, 0x0003, - 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, - 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5387, 0x0110, 0x9006, 0x0018, - 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, - 0x3362, 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, - 0x4889, 0x0904, 0x3365, 0x080c, 0x655b, 0x0120, 0x080c, 0x6563, - 0x1904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0x080c, 0x63a0, - 0x0904, 0x3362, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3330, - 0x0804, 0x42fa, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, - 0x2102, 0x080c, 0x4896, 0x01a0, 0x080c, 0x655b, 0x0118, 0x080c, - 0x6563, 0x1170, 0x080c, 0x62fe, 0x2009, 0x0002, 0x0128, 0x080c, - 0x63a0, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, - 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, - 0xa897, 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, - 0x5387, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0000, 0x0005, 0x6100, 0x0804, 0x3330, 0x080c, 0x48a5, 0x0904, - 0x3365, 0x080c, 0x5393, 0x1904, 0x3362, 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, 0x3330, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1148, 0x939a, - 0x0003, 0x1a04, 0x3362, 0x6258, 0x7884, 0x9206, 0x1904, 0x44aa, - 0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, - 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, - 0x78a8, 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a4f, - 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, - 0x2003, 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, - 0x003e, 0x000e, 0x000e, 0x0804, 0x48be, 0x000e, 0x2031, 0x0000, - 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, - 0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, - 0x44ca, 0x0005, 0x81ff, 0x1904, 0x3362, 0x080c, 0x48a5, 0x0904, - 0x3365, 0x080c, 0x655b, 0x1904, 0x3362, 0x00c6, 0x080c, 0x4872, - 0x00ce, 0x0904, 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x7ea8, 0x080c, 0xbc6d, 0x0904, 0x3362, 0x7007, 0x0003, 0x701f, - 0x44e4, 0x0005, 0x080c, 0x4014, 0x0006, 0x0036, 0x2001, 0x1a4f, - 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, - 0x2003, 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, - 0x003e, 0x000e, 0x0804, 0x3330, 0xa830, 0x9086, 0x0100, 0x0904, - 0x3362, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x0804, 0x48be, 0x9006, 0x080c, 0x26cc, 0x78a8, 0x9084, 0x00ff, - 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7, - 0x0110, 0x080c, 0x5c8f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3365, - 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3365, - 0x2100, 0x080c, 0x2696, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x2061, 0x19cb, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, - 0x6077, 0x0000, 0x080c, 0x6fa7, 0x1158, 0x080c, 0x728b, 0x080c, - 0x5cca, 0x9085, 0x0001, 0x080c, 0x6fee, 0x080c, 0x6ed9, 0x00d0, - 0x080c, 0x9d9f, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, - 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, - 0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bb5, - 0x080c, 0x80a2, 0x7984, 0x080c, 0x6fa7, 0x1110, 0x2009, 0x00ff, - 0x7a88, 0x080c, 0x435d, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3330, - 0x7984, 0x080c, 0x61d7, 0x2b08, 0x1904, 0x3365, 0x0804, 0x3330, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x60d8, 0xd0ac, - 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3362, 0x080c, - 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x7984, 0x9192, - 0x0021, 0x1a04, 0x3365, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, - 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48bb, 0x701f, - 0x4598, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e3d, 0x0005, - 0x2009, 0x0080, 0x080c, 0x6237, 0x1118, 0x080c, 0x655b, 0x0120, - 0x2021, 0x400a, 0x0804, 0x3332, 0x00d6, 0x0096, 0xa964, 0xaa6c, - 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, - 0x4631, 0x90be, 0x0112, 0x0904, 0x4631, 0x90be, 0x0113, 0x0904, - 0x4631, 0x90be, 0x0114, 0x0904, 0x4631, 0x90be, 0x0117, 0x0904, - 0x4631, 0x90be, 0x011a, 0x0904, 0x4631, 0x90be, 0x011c, 0x0904, - 0x4631, 0x90be, 0x0121, 0x0904, 0x4618, 0x90be, 0x0131, 0x0904, - 0x4618, 0x90be, 0x0171, 0x0904, 0x4631, 0x90be, 0x0173, 0x0904, - 0x4631, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, - 0x463c, 0x90be, 0x0212, 0x0904, 0x4625, 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, 0x3365, 0x7028, - 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, - 0x0007, 0x080c, 0x467a, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, - 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x467a, 0x00c8, - 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, - 0x20a9, 0x0001, 0x080c, 0x4687, 0x00b8, 0x7028, 0x9080, 0x000e, - 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, - 0x4687, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, - 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4872, 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, 0xbc88, - 0x1120, 0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, - 0x4671, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, - 0x3362, 0xa820, 0x9086, 0x8001, 0x1904, 0x3330, 0x2009, 0x0004, - 0x0804, 0x3362, 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, 0x3362, - 0x60d8, 0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, - 0x3362, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3362, 0x7984, - 0x78a8, 0x2040, 0x080c, 0x9d98, 0x1120, 0x9182, 0x007f, 0x0a04, - 0x3365, 0x9186, 0x00ff, 0x0904, 0x3365, 0x9182, 0x0800, 0x1a04, - 0x3365, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, - 0x0904, 0x3365, 0x99cc, 0xff00, 0x0904, 0x3365, 0x0126, 0x2091, - 0x8000, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f, 0x002e, 0x0140, - 0x918d, 0x8000, 0x080c, 0x65c9, 0x1118, 0x2001, 0x4009, 0x0458, - 0x080c, 0x478c, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, - 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, - 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, - 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, - 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3332, 0x2b00, - 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9e66, - 0x0904, 0x4759, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x2e58, 0x00ee, - 0x00e6, 0x00c6, 0x080c, 0x4872, 0x00ce, 0x2b70, 0x1158, 0x080c, - 0x9e19, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, - 0x0804, 0x3362, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, - 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2fd7, - 0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c, - 0x6188, 0x2009, 0x0002, 0x080c, 0x9e93, 0x78a8, 0xd094, 0x0138, - 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, - 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, - 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4768, 0x0005, - 0xa830, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, - 0x3332, 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, - 0xba04, 0x9294, 0x00ff, 0x0804, 0x52dc, 0x900e, 0xa868, 0xd0f4, - 0x1904, 0x3330, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x0804, 0x3330, 0x00e6, 0x00d6, 0x0096, 0x83ff, - 0x0904, 0x47d4, 0x902e, 0x080c, 0x9d98, 0x0130, 0x9026, 0x20a9, - 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, - 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, - 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, - 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, - 0x11d8, 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, - 0xbe14, 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, - 0x0568, 0xd894, 0x1558, 0x080c, 0x655b, 0x1540, 0x2001, 0x4000, - 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, - 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, - 0x9d98, 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, - 0x47a2, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, - 0x0030, 0x080c, 0x61d7, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, - 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x3362, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, - 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, - 0x0904, 0x3365, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, - 0x3365, 0x2010, 0x2918, 0x080c, 0x2f7d, 0x1120, 0x2009, 0x0003, - 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4827, 0x0005, 0xa830, - 0x9086, 0x0100, 0x1904, 0x3330, 0x2009, 0x0004, 0x0804, 0x3362, - 0x7984, 0x080c, 0x9d98, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3365, - 0x9186, 0x00ff, 0x0904, 0x3365, 0x9182, 0x0800, 0x1a04, 0x3365, - 0x2001, 0x9000, 0x080c, 0x5337, 0x1904, 0x3362, 0x0804, 0x3330, - 0xa998, 0x080c, 0x9d98, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, - 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, - 0x5337, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, + 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900, + 0xa85a, 0x00d0, 0x080c, 0x4879, 0xa813, 0x0019, 0xa817, 0x0001, + 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, + 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, + 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, 0x0100, + 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2268, + 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, + 0x002b, 0x2004, 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, 0x4879, + 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, 0x4879, 0x2940, 0xa813, 0x0019, + 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, + 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, + 0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900, 0xa85a, + 0x00d8, 0x080c, 0x4879, 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, 0x1a33, 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, 0x0013, + 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, + 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, + 0x3337, 0x7d98, 0x7c9c, 0x0804, 0x342e, 0x080c, 0x6fb2, 0x190c, + 0x5c96, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, + 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c2, 0x701f, 0x4049, + 0x0005, 0x080c, 0x5395, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, + 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904, 0x336c, + 0x6804, 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, 0x336c, 0x9288, 0x3138, + 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a, + 0x007f, 0x1a04, 0x336c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004, + 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080, 0x279f, + 0x2005, 0x200a, 0x000e, 0x2009, 0x1983, 0x9080, 0x27a3, 0x2005, + 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x336c, 0x908a, 0x0841, + 0x1a04, 0x336c, 0x9084, 0x0007, 0x1904, 0x336c, 0x680c, 0x9005, + 0x0904, 0x336c, 0x6810, 0x9005, 0x0904, 0x336c, 0x6848, 0x6940, + 0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x684c, 0x6944, + 0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x2009, 0x1952, + 0x200b, 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140, 0x7884, + 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, + 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c, + 0x72c7, 0x080c, 0x662f, 0x080c, 0x6664, 0x6808, 0x602a, 0x080c, + 0x21da, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, + 0x0000, 0x0036, 0x6b08, 0x080c, 0x2706, 0x003e, 0x6000, 0x9086, + 0x0000, 0x1904, 0x41c6, 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, + 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199e, + 0x20e9, 0x0001, 0x4001, 0x080c, 0x8141, 0x00c6, 0x900e, 0x20a9, + 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, + 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, + 0x3508, 0x8109, 0x080c, 0x7892, 0x6878, 0x6016, 0x6874, 0x2008, + 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, + 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4135, + 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c, + 0x29ad, 0x9006, 0x080c, 0x2990, 0x0000, 0x00ce, 0x00e6, 0x2c70, + 0x080c, 0x0e80, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, + 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, + 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, + 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, + 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, + 0x277b, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, + 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x6fb2, + 0x0128, 0x080c, 0x4c92, 0x0110, 0x080c, 0x26cc, 0x60d0, 0x9005, + 0x01c0, 0x6003, 0x0001, 0x2009, 0x41ae, 0x00d0, 0x080c, 0x6fb2, + 0x1168, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c, + 0x810c, 0x080c, 0x729b, 0x080c, 0x6ee4, 0x0040, 0x080c, 0x5b90, + 0x0028, 0x6003, 0x0004, 0x2009, 0x41c6, 0x0010, 0x0804, 0x3337, + 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, + 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, + 0x0000, 0x0904, 0x3369, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894, + 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0x2039, 0x0001, 0x0804, 0x48c5, 0x9006, 0x080c, 0x26cc, 0x81ff, + 0x1904, 0x3369, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0x7296, 0x080c, + 0x5cd1, 0x080c, 0x3133, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, + 0xc212, 0x0130, 0x080c, 0x6fd5, 0x1118, 0x080c, 0x6f8a, 0x0038, + 0x080c, 0x6ee4, 0x0020, 0x080c, 0x5c96, 0x080c, 0x5b90, 0x0804, + 0x3337, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x1110, 0x0804, + 0x3369, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1c80, + 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, + 0x8000, 0x2039, 0x0001, 0x080c, 0x48c5, 0x701f, 0x3335, 0x012e, + 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, + 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558, + 0x9588, 0x3138, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, + 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x623e, 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, 0x5c21, 0x0804, 0x421e, 0x080c, 0x48ac, + 0x0904, 0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, + 0x3369, 0x080c, 0x5386, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, + 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, + 0x312e, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, + 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, + 0x080c, 0xbce0, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, + 0x0003, 0x701f, 0x42ac, 0x0005, 0x080c, 0x48ac, 0x0904, 0x336c, + 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, 0x0f68, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, + 0x0f68, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0x0804, 0x48c5, 0x81ff, 0x1904, 0x3369, 0x080c, 0x4890, 0x0904, + 0x336c, 0x080c, 0x63b0, 0x0904, 0x3369, 0x0058, 0xa878, 0x9005, + 0x0120, 0x2009, 0x0004, 0x0804, 0x3369, 0xa974, 0xaa94, 0x0804, + 0x3337, 0x080c, 0x538e, 0x0904, 0x3337, 0x701f, 0x42f6, 0x7007, + 0x0003, 0x0005, 0x81ff, 0x1904, 0x3369, 0x7888, 0x908a, 0x1000, + 0x1a04, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562, + 0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6435, 0x0904, + 0x3369, 0x2019, 0x0004, 0x900e, 0x080c, 0x63c2, 0x0904, 0x3369, + 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, + 0x080c, 0x48aa, 0x01e0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, + 0x11b0, 0x080c, 0x6435, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, + 0x2019, 0x0004, 0x080c, 0x63c2, 0x2009, 0x0003, 0x0120, 0xa998, + 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, + 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, + 0x4000, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, + 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, + 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x623e, + 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046, + 0x0005, 0x81ff, 0x1904, 0x3369, 0x798c, 0x2001, 0x1951, 0x918c, + 0x8000, 0x2102, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562, + 0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904, + 0x3369, 0x080c, 0x63b9, 0x0904, 0x3369, 0x2001, 0x1951, 0x2004, + 0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0, 0x2001, 0x1951, + 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d, 0x01a0, 0x080c, + 0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c, 0x6305, 0x2009, + 0x0002, 0x0128, 0x080c, 0x63b9, 0x1170, 0x2009, 0x0003, 0xa897, + 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004, + 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3369, + 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x4890, + 0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c, 0x656a, 0x1904, + 0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904, + 0x3369, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804, + 0x4301, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102, + 0x080c, 0x489d, 0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, + 0x1170, 0x080c, 0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63a7, + 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, - 0x000a, 0x0c48, 0x080c, 0x0feb, 0x0198, 0x9006, 0xa802, 0x7014, - 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, - 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, - 0x0005, 0x7984, 0x080c, 0x6237, 0x1130, 0x7e88, 0x9684, 0x3fff, - 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, - 0x6237, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, - 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, - 0x6237, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, - 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x101d, 0x0cc8, 0x7116, - 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, - 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, - 0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, - 0x3330, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, - 0x2001, 0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48ef, 0x7a36, - 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x0804, 0x4955, 0x0016, - 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, - 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, - 0x0feb, 0x0904, 0x494d, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, - 0x0002, 0x9080, 0x1f26, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, - 0x0004, 0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, - 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, - 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, - 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, 0x8108, - 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0feb, 0x1130, 0x8109, - 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, - 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, - 0x9080, 0x1f26, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, - 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, - 0x2c00, 0x9082, 0x001b, 0x0002, 0x4977, 0x4977, 0x4979, 0x4977, - 0x4977, 0x4977, 0x497d, 0x4977, 0x4977, 0x4977, 0x4981, 0x4977, - 0x4977, 0x4977, 0x4985, 0x4977, 0x4977, 0x4977, 0x4989, 0x4977, - 0x4977, 0x4977, 0x498d, 0x4977, 0x4977, 0x4977, 0x4992, 0x080c, - 0x0db4, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, - 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, - 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, - 0x0804, 0x4950, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4950, 0x00e6, - 0x2071, 0x1894, 0x7048, 0x9005, 0x0904, 0x4a29, 0x0126, 0x2091, - 0x8000, 0x0e04, 0x4a28, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, - 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, - 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, - 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a2b, 0xa804, - 0x9005, 0x090c, 0x0db4, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, - 0x2001, 0x0002, 0x9080, 0x1f26, 0x2005, 0xa04a, 0x0804, 0x4a2b, - 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, - 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x87ff, - 0x0118, 0x2748, 0x080c, 0x101d, 0x7048, 0x8001, 0x704a, 0x9005, - 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x101d, 0x9006, - 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, - 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, - 0x90fa, 0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, - 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0db4, 0x2048, 0xa800, - 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1f26, - 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, - 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a4a, - 0x4a4a, 0x4a4c, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a51, 0x4a4a, 0x4a4a, - 0x4a4a, 0x4a56, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a5b, 0x4a4a, 0x4a4a, - 0x4a4a, 0x4a60, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a65, 0x4a4a, 0x4a4a, - 0x4a4a, 0x4a6a, 0x080c, 0x0db4, 0xaa74, 0xab78, 0xac7c, 0x0804, - 0x49d6, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x49d6, 0xaa94, 0xab98, - 0xac9c, 0x0804, 0x49d6, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49d6, - 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x49d6, 0xaac4, 0xabc8, 0xaccc, - 0x0804, 0x49d6, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49d6, 0x0026, - 0x080c, 0x537f, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d2, - 0x002e, 0x0005, 0x81ff, 0x1904, 0x3362, 0x0126, 0x2091, 0x8000, - 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x6fa7, 0x1158, - 0x080c, 0x728b, 0x080c, 0x5cca, 0x9085, 0x0001, 0x080c, 0x6fee, - 0x080c, 0x6ed9, 0x0010, 0x080c, 0x5b89, 0x012e, 0x0804, 0x3330, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x080c, 0x5393, - 0x0120, 0x2009, 0x0007, 0x0804, 0x3362, 0x080c, 0x6553, 0x0120, - 0x2009, 0x0008, 0x0804, 0x3362, 0x0026, 0x2011, 0x0010, 0x080c, - 0x657f, 0x002e, 0x0140, 0x7984, 0x080c, 0x65c9, 0x1120, 0x2009, - 0x4009, 0x0804, 0x3362, 0x080c, 0x3127, 0x0128, 0x7984, 0x080c, - 0x61d7, 0x1904, 0x3365, 0x080c, 0x48a5, 0x0904, 0x3365, 0x2b00, - 0x7026, 0x080c, 0x655b, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, - 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x0804, 0x3330, 0x080c, 0x4872, 0x0904, 0x3362, 0x9006, - 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd21, 0x0904, - 0x3362, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, - 0x0003, 0x701f, 0x4b40, 0x0005, 0x2061, 0x1800, 0x080c, 0x5393, - 0x2009, 0x0007, 0x1578, 0x080c, 0x6553, 0x0118, 0x2009, 0x0008, - 0x0448, 0x080c, 0x3127, 0x0120, 0xa998, 0x080c, 0x61d7, 0x1530, - 0x080c, 0x48a3, 0x0518, 0x080c, 0x655b, 0xa89c, 0x1168, 0x9084, - 0x0005, 0x1150, 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, - 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, - 0xbd21, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, - 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, + 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, + 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, + 0x0005, 0x6100, 0x0804, 0x3337, 0x080c, 0x48ac, 0x0904, 0x336c, + 0x080c, 0x539a, 0x1904, 0x3369, 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, + 0x3337, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1148, 0x939a, 0x0003, + 0x1a04, 0x3369, 0x6258, 0x7884, 0x9206, 0x1904, 0x44b1, 0x2031, + 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, + 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c, + 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003, + 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e, + 0x000e, 0x000e, 0x0804, 0x48c5, 0x000e, 0x2031, 0x0000, 0x2061, + 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, + 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x44d1, + 0x0005, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904, 0x336c, + 0x080c, 0x6562, 0x1904, 0x3369, 0x00c6, 0x080c, 0x4879, 0x00ce, + 0x0904, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, + 0x080c, 0xbc86, 0x0904, 0x3369, 0x7007, 0x0003, 0x701f, 0x44eb, + 0x0005, 0x080c, 0x401b, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c, + 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003, + 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e, + 0x000e, 0x0804, 0x3337, 0xa830, 0x9086, 0x0100, 0x0904, 0x3369, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, + 0x48c5, 0x9006, 0x080c, 0x26cc, 0x78a8, 0x9084, 0x00ff, 0x9086, + 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x0110, + 0x080c, 0x5c96, 0x7888, 0x908a, 0x1000, 0x1a04, 0x336c, 0x7984, + 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x336c, 0x2100, + 0x080c, 0x2696, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, + 0x19cb, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, + 0x0000, 0x080c, 0x6fb2, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1, + 0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c, 0x6ee4, 0x00d0, 0x080c, + 0x9db8, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, + 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, + 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c, + 0x80ca, 0x7984, 0x080c, 0x6fb2, 0x1110, 0x2009, 0x00ff, 0x7a88, + 0x080c, 0x4364, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3337, 0x7984, + 0x080c, 0x61de, 0x2b08, 0x1904, 0x336c, 0x0804, 0x3337, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x60d8, 0xd0ac, 0x1130, + 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x080c, 0x4879, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984, 0x9192, 0x0021, + 0x1a04, 0x336c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, + 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48c2, 0x701f, 0x459f, + 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e44, 0x0005, 0x2009, + 0x0080, 0x080c, 0x623e, 0x1118, 0x080c, 0x6562, 0x0120, 0x2021, + 0x400a, 0x0804, 0x3339, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, + 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4638, + 0x90be, 0x0112, 0x0904, 0x4638, 0x90be, 0x0113, 0x0904, 0x4638, + 0x90be, 0x0114, 0x0904, 0x4638, 0x90be, 0x0117, 0x0904, 0x4638, + 0x90be, 0x011a, 0x0904, 0x4638, 0x90be, 0x011c, 0x0904, 0x4638, + 0x90be, 0x0121, 0x0904, 0x461f, 0x90be, 0x0131, 0x0904, 0x461f, + 0x90be, 0x0171, 0x0904, 0x4638, 0x90be, 0x0173, 0x0904, 0x4638, + 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4643, + 0x90be, 0x0212, 0x0904, 0x462c, 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, 0x336c, 0x7028, 0x9080, + 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, + 0x080c, 0x4681, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, + 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4681, 0x00c8, 0x7028, + 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, + 0x0001, 0x080c, 0x468e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, + 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468e, + 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, + 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4879, 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, 0xbca1, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4678, + 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3369, + 0xa820, 0x9086, 0x8001, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804, + 0x3369, 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, 0x3369, 0x60d8, + 0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x3369, + 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x7984, 0x78a8, + 0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c, + 0x9186, 0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c, + 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904, + 0x336c, 0x99cc, 0xff00, 0x0904, 0x336c, 0x0126, 0x2091, 0x8000, + 0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0140, 0x918d, + 0x8000, 0x080c, 0x65d0, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c, + 0x4793, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e, + 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, + 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, + 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, + 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3339, 0x2b00, 0x7026, + 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9e7f, 0x0904, + 0x4760, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x2e58, 0x00ee, 0x00e6, + 0x00c6, 0x080c, 0x4879, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9e32, + 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, + 0x3369, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, + 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2fda, 0x6023, + 0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, + 0x2009, 0x0002, 0x080c, 0x9eac, 0x78a8, 0xd094, 0x0138, 0x00ee, + 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, 0x0001, + 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, + 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x476f, 0x0005, 0xa830, + 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339, + 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, + 0x9294, 0x00ff, 0x0804, 0x52e3, 0x900e, 0xa868, 0xd0f4, 0x1904, + 0x3337, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, + 0xc18d, 0x0804, 0x3337, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, + 0x47db, 0x902e, 0x080c, 0x9db1, 0x0130, 0x9026, 0x20a9, 0x0800, + 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, + 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, + 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, + 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, + 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, + 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, + 0xd894, 0x1558, 0x080c, 0x6562, 0x1540, 0x2001, 0x4000, 0x0430, + 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, + 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9db1, + 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a9, + 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, + 0x080c, 0x61de, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, + 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, + 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, + 0x336c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x336c, + 0x2010, 0x2918, 0x080c, 0x2f80, 0x1120, 0x2009, 0x0003, 0x0804, + 0x3369, 0x7007, 0x0003, 0x701f, 0x482e, 0x0005, 0xa830, 0x9086, + 0x0100, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804, 0x3369, 0x7984, + 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c, 0x9186, + 0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c, 0x2001, + 0x9000, 0x080c, 0x533e, 0x1904, 0x3369, 0x0804, 0x3337, 0xa998, + 0x080c, 0x9db1, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, + 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x533e, + 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, - 0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, - 0xa830, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, - 0x3332, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52dc, - 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x0804, 0x3330, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007, - 0x0804, 0x3362, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, - 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x900e, 0x2130, - 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, - 0x702a, 0x20a0, 0x080c, 0x6237, 0x1904, 0x4bde, 0x080c, 0x655b, - 0x0120, 0x080c, 0x6563, 0x1904, 0x4bde, 0x080c, 0x6553, 0x1130, - 0x080c, 0x6457, 0x1118, 0xd79c, 0x0904, 0x4bde, 0xd794, 0x1110, - 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, - 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, - 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x4687, 0x0048, 0x20a9, - 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4687, - 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, 0x467a, - 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, - 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, - 0x9d98, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, - 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, - 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b7a, - 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3330, 0x7033, 0x0001, - 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, - 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, - 0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, - 0x4c1a, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, - 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, - 0xa390, 0xa494, 0xa598, 0x0804, 0x4b7a, 0x7124, 0x810b, 0x0804, - 0x3330, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, - 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04, - 0x3365, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, - 0x0a04, 0x3365, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, - 0x3365, 0x9502, 0x0a04, 0x3365, 0x9284, 0x00ff, 0x90e2, 0x0020, - 0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365, 0x9384, 0xff00, 0x8007, - 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365, 0x9384, - 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365, - 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, - 0x0a04, 0x3365, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365, - 0x9502, 0x0a04, 0x3365, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, - 0x640e, 0x0804, 0x3330, 0x0006, 0x080c, 0x537f, 0xd0cc, 0x000e, - 0x0005, 0x0006, 0x080c, 0x5383, 0xd0bc, 0x000e, 0x0005, 0x6170, - 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3330, 0x83ff, - 0x1904, 0x3365, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3365, 0x2019, - 0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x3365, 0x7986, 0x6272, - 0x0804, 0x3330, 0x080c, 0x5393, 0x1904, 0x3362, 0x7c88, 0x7d84, - 0x7e98, 0x7f8c, 0x080c, 0x4872, 0x0904, 0x3362, 0x900e, 0x901e, - 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, - 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, - 0x655b, 0x0118, 0x080c, 0x6563, 0x1148, 0x20a9, 0x0001, 0xb814, - 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, - 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, - 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8248, 0x2208, 0x0804, - 0x3330, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, - 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, - 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10d5, 0x7007, - 0x0002, 0x701f, 0x4d0c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, - 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, - 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x4cca, 0x7224, 0x900e, - 0x2001, 0x0003, 0x080c, 0x8248, 0x2208, 0x0804, 0x3330, 0x00f6, - 0x00e6, 0x080c, 0x5393, 0x2009, 0x0007, 0x1904, 0x4d9f, 0x2071, - 0x1894, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4d9f, 0xac9c, - 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1004, 0x2009, 0x0002, - 0x0904, 0x4d9f, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, - 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, - 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x655b, 0x0118, 0x080c, - 0x6563, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, - 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, - 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, - 0x0003, 0x080c, 0x8248, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, - 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x9006, - 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, - 0x7054, 0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, - 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, - 0x4dab, 0x000e, 0xa0a2, 0x080c, 0x10d5, 0x9006, 0x0048, 0x009e, - 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, - 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0db4, - 0x00e6, 0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, - 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, - 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, - 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8248, - 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, - 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6885, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, - 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x655b, - 0x0118, 0x080c, 0x6563, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, + 0x0c48, 0x080c, 0x0feb, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, + 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, + 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, + 0x7984, 0x080c, 0x623e, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, + 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x623e, + 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, + 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x623e, + 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, + 0x0128, 0x2148, 0xa904, 0x080c, 0x101d, 0x0cc8, 0x7116, 0x711a, + 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, + 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, + 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x3337, + 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, + 0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48f6, 0x7a36, 0x7833, + 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x1187, 0x0804, 0x495c, 0x0016, 0x0086, + 0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540, + 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x0feb, + 0x0904, 0x4954, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, + 0x9080, 0x1f26, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, + 0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00, + 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, + 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, + 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, 0x8108, 0x2105, + 0x9005, 0xa146, 0x1520, 0x080c, 0x0feb, 0x1130, 0x8109, 0xa946, + 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, + 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, + 0x1f26, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, + 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, + 0x9082, 0x001b, 0x0002, 0x497e, 0x497e, 0x4980, 0x497e, 0x497e, + 0x497e, 0x4984, 0x497e, 0x497e, 0x497e, 0x4988, 0x497e, 0x497e, + 0x497e, 0x498c, 0x497e, 0x497e, 0x497e, 0x4990, 0x497e, 0x497e, + 0x497e, 0x4994, 0x497e, 0x497e, 0x497e, 0x4999, 0x080c, 0x0db4, + 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, + 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, + 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, + 0x4957, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4957, 0x00e6, 0x2071, + 0x1894, 0x7048, 0x9005, 0x0904, 0x4a30, 0x0126, 0x2091, 0x8000, + 0x0e04, 0x4a2f, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, + 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, + 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, + 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a32, 0xa804, 0x9005, + 0x090c, 0x0db4, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, + 0x0002, 0x9080, 0x1f26, 0x2005, 0xa04a, 0x0804, 0x4a32, 0x703c, + 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, + 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x87ff, 0x0118, + 0x2748, 0x080c, 0x101d, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, + 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x101d, 0x9006, 0x7042, + 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005, + 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, + 0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e, + 0x703a, 0x7044, 0x9005, 0x090c, 0x0db4, 0x2048, 0xa800, 0x9005, + 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1f26, 0x2005, + 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, + 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a51, 0x4a51, + 0x4a53, 0x4a51, 0x4a51, 0x4a51, 0x4a58, 0x4a51, 0x4a51, 0x4a51, + 0x4a5d, 0x4a51, 0x4a51, 0x4a51, 0x4a62, 0x4a51, 0x4a51, 0x4a51, + 0x4a67, 0x4a51, 0x4a51, 0x4a51, 0x4a6c, 0x4a51, 0x4a51, 0x4a51, + 0x4a71, 0x080c, 0x0db4, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dd, + 0xaa84, 0xab88, 0xac8c, 0x0804, 0x49dd, 0xaa94, 0xab98, 0xac9c, + 0x0804, 0x49dd, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dd, 0xaab4, + 0xabb8, 0xacbc, 0x0804, 0x49dd, 0xaac4, 0xabc8, 0xaccc, 0x0804, + 0x49dd, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dd, 0x0026, 0x080c, + 0x5386, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d9, 0x002e, + 0x0005, 0x81ff, 0x1904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6030, + 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x6fb2, 0x1158, 0x080c, + 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c, + 0x6ee4, 0x0010, 0x080c, 0x5b90, 0x012e, 0x0804, 0x3337, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120, + 0x2009, 0x0007, 0x0804, 0x3369, 0x080c, 0x655a, 0x0120, 0x2009, + 0x0008, 0x0804, 0x3369, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586, + 0x002e, 0x0140, 0x7984, 0x080c, 0x65d0, 0x1120, 0x2009, 0x4009, + 0x0804, 0x3369, 0x080c, 0x312e, 0x0128, 0x7984, 0x080c, 0x61de, + 0x1904, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x2b00, 0x7026, + 0x080c, 0x6562, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, + 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x0804, 0x3337, 0x080c, 0x4879, 0x0904, 0x3369, 0x9006, 0xa866, + 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x0904, 0x3369, + 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, 0x0003, + 0x701f, 0x4b47, 0x0005, 0x2061, 0x1800, 0x080c, 0x539a, 0x2009, + 0x0007, 0x1578, 0x080c, 0x655a, 0x0118, 0x2009, 0x0008, 0x0448, + 0x080c, 0x312e, 0x0120, 0xa998, 0x080c, 0x61de, 0x1530, 0x080c, + 0x48aa, 0x0518, 0x080c, 0x6562, 0xa89c, 0x1168, 0x9084, 0x0005, + 0x1150, 0x900e, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, + 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xbd3a, + 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, + 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339, + 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52e3, 0x900e, + 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x0804, 0x3337, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, + 0x3369, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4879, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x900e, 0x2130, 0x7126, + 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, + 0x20a0, 0x080c, 0x623e, 0x1904, 0x4be5, 0x080c, 0x6562, 0x0120, + 0x080c, 0x656a, 0x1904, 0x4be5, 0x080c, 0x655a, 0x1130, 0x080c, + 0x645e, 0x1118, 0xd79c, 0x0904, 0x4be5, 0xd794, 0x1110, 0xd784, + 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400, + 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, + 0x20e0, 0x20a9, 0x0002, 0x080c, 0x468e, 0x0048, 0x20a9, 0x0004, + 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468e, 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, 0x4681, 0x9c80, + 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, + 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9db1, + 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, + 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, + 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b81, 0x86ff, + 0x1120, 0x7124, 0x810b, 0x0804, 0x3337, 0x7033, 0x0001, 0x7122, + 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b, + 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, + 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4c21, + 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, + 0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, + 0xa494, 0xa598, 0x0804, 0x4b81, 0x7124, 0x810b, 0x0804, 0x3337, + 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, + 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, + 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, + 0x336c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, + 0x9502, 0x0a04, 0x336c, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, + 0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0xff00, 0x8007, 0x90e2, + 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0x00ff, + 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9484, + 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, + 0x336c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, + 0x0a04, 0x336c, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e, + 0x0804, 0x3337, 0x0006, 0x080c, 0x5386, 0xd0cc, 0x000e, 0x0005, + 0x0006, 0x080c, 0x538a, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, + 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3337, 0x83ff, 0x1904, + 0x336c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x336c, 0x2019, 0xffff, + 0x6074, 0x9302, 0x9200, 0x0a04, 0x336c, 0x7986, 0x6272, 0x0804, + 0x3337, 0x080c, 0x539a, 0x1904, 0x3369, 0x7c88, 0x7d84, 0x7e98, + 0x7f8c, 0x080c, 0x4879, 0x0904, 0x3369, 0x900e, 0x901e, 0x7326, + 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, + 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, + 0x0118, 0x080c, 0x656a, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, - 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, - 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0db4, - 0x2148, 0x080c, 0x101d, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, - 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6885, 0x012e, - 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, - 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, - 0x080c, 0x10d5, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, - 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, - 0x009e, 0x0804, 0x3365, 0xa884, 0xa988, 0x080c, 0x2663, 0x1518, - 0x080c, 0x61d7, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, - 0x4872, 0x01c8, 0x080c, 0x4872, 0x01b0, 0x009e, 0xa867, 0x0000, - 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, - 0xbca8, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, - 0x701f, 0x4e78, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3362, - 0x7124, 0x080c, 0x30ce, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, - 0x0004, 0x0804, 0x3362, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, - 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, - 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, - 0x20a9, 0x002a, 0x080c, 0x0f68, 0xaa6c, 0xab70, 0xac74, 0xad78, - 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, - 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, - 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x48be, 0x97c6, 0x7200, - 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, - 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, - 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4ed4, 0x0005, - 0x000e, 0x007e, 0x0804, 0x3365, 0x7020, 0x2048, 0xa804, 0x2048, - 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, - 0x002a, 0x080c, 0x0f68, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, - 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48be, - 0x81ff, 0x1904, 0x3362, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, - 0x2102, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c, 0x655b, 0x0120, - 0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, - 0x0126, 0x2091, 0x8000, 0x080c, 0x63c4, 0x012e, 0x0904, 0x3362, - 0x2001, 0x194f, 0x2004, 0xd0fc, 0x1904, 0x3330, 0x0804, 0x42fa, - 0xa9a0, 0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, - 0x4896, 0x01a0, 0x080c, 0x655b, 0x0118, 0x080c, 0x6563, 0x1170, - 0x080c, 0x62fe, 0x2009, 0x0002, 0x0128, 0x080c, 0x63c4, 0x1170, - 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, - 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, - 0x2001, 0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5387, 0x0110, - 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, - 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x426f, 0x080c, 0x48a5, - 0x0904, 0x3365, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, - 0x3362, 0x080c, 0x655b, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, - 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, - 0x0028, 0x080c, 0x537f, 0xd0b4, 0x0904, 0x42a9, 0x7884, 0x908e, - 0x007e, 0x0904, 0x42a9, 0x908e, 0x007f, 0x0904, 0x42a9, 0x908e, - 0x0080, 0x0904, 0x42a9, 0xb800, 0xd08c, 0x1904, 0x42a9, 0xa867, - 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbcc7, 0x1120, 0x2009, - 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4fa0, 0x0005, - 0x080c, 0x48a5, 0x0904, 0x3365, 0x0804, 0x42a9, 0x080c, 0x3127, - 0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x3362, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007, - 0x0804, 0x3362, 0x080c, 0x6553, 0x0120, 0x2009, 0x0008, 0x0804, - 0x3362, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42a9, 0x9006, - 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd21, 0x1120, - 0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4fd9, - 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, - 0x52dc, 0x080c, 0x48a5, 0x0904, 0x3365, 0x0804, 0x4f72, 0x81ff, - 0x2009, 0x0001, 0x1904, 0x3362, 0x080c, 0x5393, 0x2009, 0x0007, - 0x1904, 0x3362, 0x080c, 0x6553, 0x0120, 0x2009, 0x0008, 0x0804, - 0x3362, 0x080c, 0x48a5, 0x0904, 0x3365, 0x080c, 0x655b, 0x2009, - 0x0009, 0x1904, 0x3362, 0x080c, 0x4872, 0x2009, 0x0002, 0x0904, - 0x3362, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, - 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, - 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3365, - 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xbf74, 0x2009, 0x0003, - 0x0904, 0x3362, 0x7007, 0x0003, 0x701f, 0x502f, 0x0005, 0xa830, - 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3362, 0x0804, 0x3330, - 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x5393, - 0x1188, 0x2009, 0x0014, 0x0804, 0x3362, 0xd2dc, 0x1568, 0x81ff, - 0x2009, 0x0001, 0x1904, 0x3362, 0x080c, 0x5393, 0x2009, 0x0007, - 0x1904, 0x3362, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x535a, - 0x0804, 0x3330, 0xd2fc, 0x0158, 0x080c, 0x48a5, 0x0904, 0x3365, - 0x7984, 0x9284, 0x9000, 0x080c, 0x5337, 0x0804, 0x3330, 0x080c, - 0x48a5, 0x0904, 0x3365, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, - 0x2009, 0x0009, 0x1904, 0x5118, 0x080c, 0x4872, 0x2009, 0x0002, - 0x0904, 0x5118, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48bb, 0x701f, 0x5089, - 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, - 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3365, 0xa866, 0xa832, - 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x48a5, 0x1110, 0x0804, 0x3365, - 0x2009, 0x0043, 0x080c, 0xbfdc, 0x2009, 0x0003, 0x0904, 0x5118, - 0x7007, 0x0003, 0x701f, 0x50ad, 0x0005, 0xa830, 0x9086, 0x0100, - 0x2009, 0x0004, 0x0904, 0x5118, 0x7984, 0x7aa8, 0x9284, 0x1000, - 0x080c, 0x5337, 0x0804, 0x3330, 0x00c6, 0xaab0, 0x9284, 0xc000, - 0x0140, 0xd2ec, 0x0168, 0x080c, 0x5393, 0x1150, 0x2009, 0x0014, - 0x04f0, 0x2061, 0x1800, 0x080c, 0x5393, 0x2009, 0x0007, 0x15b8, - 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x535a, 0x0050, 0xd2fc, - 0x0178, 0x080c, 0x48a3, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, - 0x5337, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, - 0x080c, 0x48a3, 0x0510, 0x080c, 0x655b, 0x2009, 0x0009, 0x11b8, - 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, - 0x9084, 0xff00, 0x1190, 0x080c, 0x48a3, 0x1108, 0x0070, 0x2009, - 0x004b, 0x080c, 0xbfdc, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, - 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, - 0x7aa8, 0xd2dc, 0x0904, 0x3362, 0x0016, 0x7984, 0x9284, 0x1000, - 0xc0fd, 0x080c, 0x5337, 0x001e, 0x1904, 0x3362, 0x0804, 0x3330, - 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, - 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5337, 0x001e, - 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x3362, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007, 0x0804, 0x3362, - 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6237, 0x1904, 0x3365, - 0x9186, 0x007f, 0x0138, 0x080c, 0x655b, 0x0120, 0x2009, 0x0009, - 0x0804, 0x3362, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, - 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, - 0x8007, 0xa80a, 0x080c, 0xbce1, 0x1120, 0x2009, 0x0003, 0x0804, - 0x3362, 0x7007, 0x0003, 0x701f, 0x5176, 0x0005, 0xa808, 0x8007, - 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3362, 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, 0x48be, 0x080c, 0x4872, 0x1120, - 0x2009, 0x0002, 0x0804, 0x3362, 0x7984, 0x9194, 0xff00, 0x918c, - 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, - 0x0001, 0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x3365, 0x2009, - 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, - 0xaf60, 0x080c, 0x48bb, 0x701f, 0x51c6, 0x0005, 0x2001, 0x182d, - 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, - 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, - 0x3330, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, - 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, - 0x2099, 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, - 0x0010, 0x0804, 0x3365, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, - 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, + 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, + 0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337, + 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae, + 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, + 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10d5, 0x7007, 0x0002, + 0x701f, 0x4d13, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, + 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c, + 0xa590, 0xa694, 0xa798, 0x0804, 0x4cd1, 0x7224, 0x900e, 0x2001, + 0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337, 0x00f6, 0x00e6, + 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, 0x4da6, 0x2071, 0x1894, + 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4da6, 0xac9c, 0xad98, + 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1004, 0x2009, 0x0002, 0x0904, + 0x4da6, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, + 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, + 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, + 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, + 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, + 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, + 0x080c, 0x8270, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, + 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x9006, 0x705e, + 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, + 0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076, + 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db2, + 0x000e, 0xa0a2, 0x080c, 0x10d5, 0x9006, 0x0048, 0x009e, 0xa897, + 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, + 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0x00e6, + 0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, + 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, + 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, + 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, + 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0xaa9a, + 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x705f, + 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c, + 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, + 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118, + 0x080c, 0x656a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, + 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, + 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, + 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, + 0x080c, 0x101d, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, + 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0xa09f, + 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, + 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, + 0x10d5, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, + 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, + 0x0804, 0x336c, 0xa884, 0xa988, 0x080c, 0x2663, 0x1518, 0x080c, + 0x61de, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4879, + 0x01c8, 0x080c, 0x4879, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, + 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xbcc1, + 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, + 0x4e7f, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3369, 0x7124, + 0x080c, 0x30d5, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, + 0x0804, 0x3369, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, + 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, + 0x002a, 0x080c, 0x0f68, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, + 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, + 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, + 0x0004, 0x000e, 0x007e, 0x0804, 0x48c5, 0x97c6, 0x7200, 0x11b8, + 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44, + 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, + 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4edb, 0x0005, 0x000e, + 0x007e, 0x0804, 0x336c, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, + 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, + 0x080c, 0x0f68, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c, + 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c5, 0x81ff, + 0x1904, 0x3369, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102, + 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c, + 0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x0126, + 0x2091, 0x8000, 0x080c, 0x63cb, 0x012e, 0x0904, 0x3369, 0x2001, + 0x194f, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0, + 0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d, + 0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c, + 0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63cb, 0x1170, 0x2009, + 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, + 0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, + 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, + 0xd08c, 0x1118, 0xd084, 0x0904, 0x4276, 0x080c, 0x48ac, 0x0904, + 0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, + 0x080c, 0x6562, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, + 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, + 0x080c, 0x5386, 0xd0b4, 0x0904, 0x42b0, 0x7884, 0x908e, 0x007e, + 0x0904, 0x42b0, 0x908e, 0x007f, 0x0904, 0x42b0, 0x908e, 0x0080, + 0x0904, 0x42b0, 0xb800, 0xd08c, 0x1904, 0x42b0, 0xa867, 0x0000, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbce0, 0x1120, 0x2009, 0x0003, + 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fa7, 0x0005, 0x080c, + 0x48ac, 0x0904, 0x336c, 0x0804, 0x42b0, 0x080c, 0x312e, 0x0108, + 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, + 0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, + 0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369, + 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42b0, 0x9006, 0xa866, + 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fe0, 0x0005, + 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52e3, + 0x080c, 0x48ac, 0x0904, 0x336c, 0x0804, 0x4f79, 0x81ff, 0x2009, + 0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, + 0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369, + 0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562, 0x2009, 0x0009, + 0x1904, 0x3369, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904, 0x3369, + 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, + 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, + 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x336c, 0xc0e5, + 0xa952, 0xa956, 0xa83e, 0x080c, 0xbf8d, 0x2009, 0x0003, 0x0904, + 0x3369, 0x7007, 0x0003, 0x701f, 0x5036, 0x0005, 0xa830, 0x9086, + 0x0100, 0x2009, 0x0004, 0x0904, 0x3369, 0x0804, 0x3337, 0x7aa8, + 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x539a, 0x1188, + 0x2009, 0x0014, 0x0804, 0x3369, 0xd2dc, 0x1568, 0x81ff, 0x2009, + 0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, + 0x3369, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5361, 0x0804, + 0x3337, 0xd2fc, 0x0158, 0x080c, 0x48ac, 0x0904, 0x336c, 0x7984, + 0x9284, 0x9000, 0x080c, 0x533e, 0x0804, 0x3337, 0x080c, 0x48ac, + 0x0904, 0x336c, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, + 0x0009, 0x1904, 0x511f, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904, + 0x511f, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48c2, 0x701f, 0x5090, 0x0005, + 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, + 0x9084, 0xff00, 0x0110, 0x1904, 0x336c, 0xa866, 0xa832, 0xa868, + 0xc0fd, 0xa86a, 0x080c, 0x48ac, 0x1110, 0x0804, 0x336c, 0x2009, + 0x0043, 0x080c, 0xbff5, 0x2009, 0x0003, 0x0904, 0x511f, 0x7007, + 0x0003, 0x701f, 0x50b4, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, + 0x0004, 0x0904, 0x511f, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, + 0x533e, 0x0804, 0x3337, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, + 0xd2ec, 0x0168, 0x080c, 0x539a, 0x1150, 0x2009, 0x0014, 0x04f0, + 0x2061, 0x1800, 0x080c, 0x539a, 0x2009, 0x0007, 0x15b8, 0xd2f4, + 0x0128, 0x9284, 0x5000, 0x080c, 0x5361, 0x0050, 0xd2fc, 0x0178, + 0x080c, 0x48aa, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x533e, + 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, + 0x48aa, 0x0510, 0x080c, 0x6562, 0x2009, 0x0009, 0x11b8, 0xa8c4, + 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, + 0xff00, 0x1190, 0x080c, 0x48aa, 0x1108, 0x0070, 0x2009, 0x004b, + 0x080c, 0xbff5, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, + 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, + 0xd2dc, 0x0904, 0x3369, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, + 0x080c, 0x533e, 0x001e, 0x1904, 0x3369, 0x0804, 0x3337, 0x00f6, + 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, + 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x9085, + 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, + 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, 0x3369, 0x7984, + 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e, 0x1904, 0x336c, 0x9186, + 0x007f, 0x0138, 0x080c, 0x6562, 0x0120, 0x2009, 0x0009, 0x0804, + 0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, + 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, + 0xa80a, 0x080c, 0xbcfa, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, + 0x7007, 0x0003, 0x701f, 0x517d, 0x0005, 0xa808, 0x8007, 0x9086, + 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3369, 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, 0x48c5, 0x080c, 0x4879, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3369, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, + 0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001, + 0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x336c, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, - 0x0804, 0x48be, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3365, 0x0126, - 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, - 0x19cb, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3330, 0x00c6, 0x080c, - 0x6fa7, 0x1160, 0x080c, 0x728b, 0x080c, 0x5cca, 0x9085, 0x0001, - 0x080c, 0x6fee, 0x080c, 0x6ed9, 0x080c, 0x0db4, 0x2061, 0x1800, - 0x6030, 0xc09d, 0x6032, 0x080c, 0x5b89, 0x00ce, 0x0005, 0x00c6, - 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3362, 0x7884, - 0x9005, 0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, - 0x2a45, 0x01a0, 0x080c, 0x2a4d, 0x0188, 0x080c, 0x2a55, 0x0170, - 0x2162, 0x0804, 0x3365, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, - 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, - 0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, - 0x2011, 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c, 0x9762, - 0x002e, 0x080c, 0x9649, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e, - 0x60e3, 0x0000, 0x080c, 0xd894, 0x080c, 0xd8af, 0x9085, 0x0001, - 0x080c, 0x6fee, 0x9006, 0x080c, 0x2b14, 0x2001, 0x1800, 0x2003, - 0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3330, 0x81ff, 0x0120, - 0x2009, 0x0001, 0x0804, 0x3362, 0x080c, 0x5393, 0x0120, 0x2009, - 0x0007, 0x0804, 0x3362, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, - 0x6237, 0x1904, 0x3365, 0x9186, 0x007f, 0x0138, 0x080c, 0x655b, - 0x0120, 0x2009, 0x0009, 0x0804, 0x3362, 0x080c, 0x4872, 0x1120, - 0x2009, 0x0002, 0x0804, 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xbce4, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362, - 0x7007, 0x0003, 0x701f, 0x52c5, 0x0005, 0xa830, 0x9086, 0x0100, - 0x1120, 0x2009, 0x0004, 0x0804, 0x3362, 0xa8e0, 0xa866, 0xa834, - 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0xaf60, 0x0804, 0x48be, 0xa898, 0x9086, 0x000d, 0x1904, - 0x3362, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52e9, - 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, - 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, - 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x48ae, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x7007, 0x0001, - 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, - 0x8000, 0x00c6, 0x2061, 0x19cb, 0x7984, 0x6152, 0x614e, 0x6057, - 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, - 0x6062, 0x788c, 0x605e, 0x2001, 0x19d9, 0x2044, 0x2001, 0x19e0, - 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, - 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3330, 0x0126, - 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, - 0x080c, 0xbb4b, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, - 0x2004, 0x905d, 0x0160, 0x080c, 0x5ce4, 0x080c, 0x9d98, 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, 0x5362, 0x015e, 0x012e, 0x0005, 0x2001, - 0x1854, 0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, - 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, - 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, - 0x0005, 0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, - 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x3365, - 0x810c, 0x0016, 0x080c, 0x4872, 0x080c, 0x0ef3, 0x2100, 0x2238, - 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48bb, 0x701f, - 0x53ba, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, - 0x79a4, 0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, - 0x1894, 0x080c, 0x48be, 0x701f, 0x53ce, 0x0005, 0x2061, 0x18ae, - 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0efb, 0x002e, - 0x001e, 0x080c, 0x0fa8, 0x9006, 0xa802, 0xa806, 0x0804, 0x3330, - 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, - 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5589, 0x0068, - 0xd08c, 0x0118, 0x080c, 0x5492, 0x0040, 0xd094, 0x0118, 0x080c, - 0x5462, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, - 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, - 0x0006, 0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, - 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, - 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, - 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, - 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, - 0x080c, 0x5c46, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, - 0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, - 0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7093, - 0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b2c, 0x080c, - 0x80a2, 0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, - 0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5b2c, 0x080c, 0x8010, - 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, - 0x6044, 0xd08c, 0x1168, 0x1f04, 0x5478, 0x6242, 0x7097, 0x0000, - 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, - 0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5ccf, - 0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0db4, 0x000b, - 0x0005, 0x549c, 0x54ed, 0x5588, 0x00f6, 0x0016, 0x6900, 0x918c, - 0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, - 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, - 0x54ab, 0x080c, 0x0db4, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, - 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, - 0x080c, 0x5cab, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, - 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, - 0x20a9, 0x0004, 0x4003, 0x080c, 0x9c26, 0x20e1, 0x0001, 0x2099, + 0x080c, 0x48c2, 0x701f, 0x51cd, 0x0005, 0x2001, 0x182d, 0x2003, + 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, + 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x3337, + 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984, + 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, + 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010, + 0x0804, 0x336c, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, + 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, + 0x48c5, 0x7884, 0x908a, 0x1000, 0x1a04, 0x336c, 0x0126, 0x2091, + 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19cb, + 0x6142, 0x00ce, 0x012e, 0x0804, 0x3337, 0x00c6, 0x080c, 0x6fb2, + 0x1160, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c, + 0x6ff9, 0x080c, 0x6ee4, 0x080c, 0x0db4, 0x2061, 0x1800, 0x6030, + 0xc09d, 0x6032, 0x080c, 0x5b90, 0x00ce, 0x0005, 0x00c6, 0x2001, + 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3369, 0x7884, 0x9005, + 0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2a45, + 0x01a0, 0x080c, 0x2a4d, 0x0188, 0x080c, 0x2a55, 0x0170, 0x2162, + 0x0804, 0x336c, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, + 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, + 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, + 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, 0x002e, + 0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x60e3, + 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x9085, 0x0001, 0x080c, + 0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2001, 0x1800, 0x2003, 0x0004, + 0x6027, 0x0008, 0x00ce, 0x0804, 0x3337, 0x81ff, 0x0120, 0x2009, + 0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, + 0x0804, 0x3369, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e, + 0x1904, 0x336c, 0x9186, 0x007f, 0x0138, 0x080c, 0x6562, 0x0120, + 0x2009, 0x0009, 0x0804, 0x3369, 0x080c, 0x4879, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, + 0x080c, 0xbcfd, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, + 0x0003, 0x701f, 0x52cc, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, + 0x2009, 0x0004, 0x0804, 0x3369, 0xa8e0, 0xa866, 0xa834, 0x8007, + 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0xaf60, 0x0804, 0x48c5, 0xa898, 0x9086, 0x000d, 0x1904, 0x3369, + 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f0, 0x0010, + 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, + 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, + 0x799a, 0xa9a8, 0x799e, 0x080c, 0x48b5, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x7007, 0x0001, 0x2091, + 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, + 0x00c6, 0x2061, 0x19cb, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, + 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, + 0x788c, 0x605e, 0x2001, 0x19d9, 0x2044, 0x2001, 0x19e0, 0xa076, + 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, + 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3337, 0x0126, 0x2091, + 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, + 0xbb64, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, + 0x905d, 0x0160, 0x080c, 0x5ceb, 0x080c, 0x9db1, 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, 0x5369, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, + 0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, + 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, + 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, + 0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, + 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x336c, 0x810c, + 0x0016, 0x080c, 0x4879, 0x080c, 0x0ef3, 0x2100, 0x2238, 0x7d84, + 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c2, 0x701f, 0x53c1, + 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, + 0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894, + 0x080c, 0x48c5, 0x701f, 0x53d5, 0x0005, 0x2061, 0x18ae, 0x2c44, + 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0efb, 0x002e, 0x001e, + 0x080c, 0x0fa8, 0x9006, 0xa802, 0xa806, 0x0804, 0x3337, 0x0126, + 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, + 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, + 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5590, 0x0068, 0xd08c, + 0x0118, 0x080c, 0x5499, 0x0040, 0xd094, 0x0118, 0x080c, 0x5469, + 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, + 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, + 0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, + 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, + 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, + 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, + 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, + 0x5c4d, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, + 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, + 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000, + 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b33, 0x080c, 0x80ca, + 0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, + 0x7084, 0x9005, 0x1528, 0x2011, 0x5b33, 0x080c, 0x8038, 0x6040, + 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, + 0xd08c, 0x1168, 0x1f04, 0x547f, 0x6242, 0x7097, 0x0000, 0x6040, + 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, + 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5cd6, 0x0000, + 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0db4, 0x000b, 0x0005, + 0x54a3, 0x54f4, 0x558f, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, + 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, + 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b2, + 0x080c, 0x0db4, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, + 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, + 0x5cb2, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, + 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, + 0x0004, 0x4003, 0x080c, 0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00, + 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, + 0x000c, 0x600f, 0x0000, 0x080c, 0x5b64, 0x00fe, 0x9006, 0x708e, + 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, + 0x9025, 0x0904, 0x556c, 0x6020, 0xd0b4, 0x1904, 0x556a, 0x719c, + 0x81ff, 0x0904, 0x5558, 0x9486, 0x000c, 0x1904, 0x5565, 0x9480, + 0x0018, 0x8004, 0x20a8, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2019, + 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, + 0x5511, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, + 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, + 0x0002, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x080c, + 0x5cb2, 0x04c0, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7930, 0x918e, + 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, + 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5cab, 0x2011, 0x026e, + 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, + 0x11a0, 0x8210, 0x8318, 0x1f04, 0x554c, 0x0078, 0x709f, 0x0000, + 0x080c, 0x5cab, 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, 0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, - 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5b5d, 0x00fe, 0x9006, - 0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, - 0x0000, 0x9025, 0x0904, 0x5565, 0x6020, 0xd0b4, 0x1904, 0x5563, - 0x719c, 0x81ff, 0x0904, 0x5551, 0x9486, 0x000c, 0x1904, 0x555e, - 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ca4, 0x2011, 0x0260, - 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, - 0x1f04, 0x550a, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, - 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, - 0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5b33, 0x080c, 0x80a2, - 0x080c, 0x5cab, 0x04c0, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7930, - 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, - 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ca4, 0x2011, - 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, - 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5545, 0x0078, 0x709f, - 0x0000, 0x080c, 0x5ca4, 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, 0x9c26, 0x20e1, 0x0001, - 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, - 0x4003, 0x60c3, 0x000c, 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, - 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x938a, 0x08d8, - 0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0db4, 0x000b, 0x0005, - 0x55ba, 0x55cd, 0x55f6, 0x5616, 0x563c, 0x566b, 0x5691, 0x56c9, - 0x56ef, 0x571d, 0x5758, 0x5790, 0x57ae, 0x57d9, 0x57fb, 0x5816, - 0x5820, 0x5854, 0x587a, 0x58a9, 0x58cf, 0x5907, 0x594b, 0x5988, - 0x59a9, 0x5a02, 0x5a24, 0x5a52, 0x5a52, 0x00c6, 0x2061, 0x1800, - 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, - 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, - 0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, - 0x2011, 0x5b33, 0x080c, 0x80a2, 0x0005, 0x00f6, 0x708c, 0x9086, - 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5ca4, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, - 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, - 0x0001, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7097, 0x0010, 0x080c, - 0x5820, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, - 0x0003, 0x6043, 0x0004, 0x2011, 0x5b33, 0x080c, 0x8010, 0x080c, - 0x5c28, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, - 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x560b, - 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, 0x0005, 0x00f6, 0x708c, - 0x9005, 0x0500, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, - 0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, - 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, - 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, - 0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, - 0x5c28, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, - 0x5ca4, 0x080c, 0x5c87, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, - 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x0168, - 0x080c, 0x5c5d, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, - 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, - 0x5b5d, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, - 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4, + 0x60c3, 0x000c, 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x93a3, 0x08d8, 0x0005, + 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0db4, 0x000b, 0x0005, 0x55c1, + 0x55d4, 0x55fd, 0x561d, 0x5643, 0x5672, 0x5698, 0x56d0, 0x56f6, + 0x5724, 0x575f, 0x5797, 0x57b5, 0x57e0, 0x5802, 0x581d, 0x5827, + 0x585b, 0x5881, 0x58b0, 0x58d6, 0x590e, 0x5952, 0x598f, 0x59b0, + 0x5a09, 0x5a2b, 0x5a59, 0x5a59, 0x00c6, 0x2061, 0x1800, 0x6003, + 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, + 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, + 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, + 0x5b3a, 0x080c, 0x80ca, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, + 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cab, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, + 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, + 0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0010, 0x080c, 0x5827, + 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, + 0x6043, 0x0004, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x080c, 0x5c2f, + 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, + 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5612, 0x60c3, + 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, + 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, + 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, + 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, + 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, + 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c2f, + 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab, + 0x080c, 0x5c8e, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, + 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, + 0x5c64, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, + 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, + 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, + 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, + 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, + 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, + 0x00f6, 0x7097, 0x0007, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, + 0x1104, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8, + 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, + 0x3138, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, + 0x5ae7, 0x0180, 0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9, + 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, + 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038, + 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, + 0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, + 0x0009, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, + 0x0100, 0x080c, 0x5c8e, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, + 0x5a5a, 0x1188, 0x9085, 0x0001, 0x080c, 0x26cc, 0x20a9, 0x0008, + 0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x0010, + 0x080c, 0x55b4, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, + 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x1560, 0x080c, + 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, + 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, + 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, + 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, + 0x080c, 0x5802, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, + 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, + 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c2f, 0x2079, 0x0240, + 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c8e, 0x0118, 0x2013, + 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, + 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, + 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, + 0x5784, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x01c0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, + 0x0084, 0x1178, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, + 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, + 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, + 0x080c, 0x5cab, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, + 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, + 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, + 0x1f04, 0x57c8, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, + 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, 0x8038, + 0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, + 0x080c, 0x5c01, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c87, + 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5cd6, 0x7097, 0x000f, + 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, + 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, + 0x2011, 0x5b3a, 0x080c, 0x802c, 0x0005, 0x708c, 0x9005, 0x0130, + 0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0000, 0x0005, 0x7097, + 0x0011, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, + 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, + 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, + 0x5c8e, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, + 0x00ff, 0x0160, 0x080c, 0x2663, 0x9186, 0x007e, 0x0138, 0x9186, + 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x60c3, 0x0014, + 0x080c, 0x5b64, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, + 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, - 0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe, - 0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5c28, 0x2079, 0x0240, - 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c, 0x5c87, - 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, - 0x9180, 0x3131, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, - 0x080c, 0x5ae0, 0x0180, 0x080c, 0x4c91, 0x0110, 0x080c, 0x26cc, - 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, - 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, - 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b33, 0x080c, - 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, - 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, - 0x0008, 0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6, - 0x7097, 0x0009, 0x080c, 0x5c28, 0x2079, 0x0240, 0x7833, 0x1105, - 0x7837, 0x0100, 0x080c, 0x5c87, 0x1150, 0x7080, 0x9005, 0x1138, - 0x080c, 0x5a53, 0x1188, 0x9085, 0x0001, 0x080c, 0x26cc, 0x20a9, - 0x0008, 0x080c, 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, - 0x0010, 0x080c, 0x55ad, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, - 0x05a8, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x1560, - 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, - 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, - 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, - 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, - 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, - 0x000e, 0x080c, 0x57fb, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005, - 0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, - 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c28, 0x2079, - 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c87, 0x0118, - 0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, - 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, - 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, - 0x1f04, 0x577d, 0x60c3, 0x0084, 0x080c, 0x5b5d, 0x00fe, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5b33, 0x080c, 0x8010, - 0x9086, 0x0084, 0x1178, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, - 0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6, 0x7097, - 0x000d, 0x080c, 0x5c28, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, - 0x0000, 0x080c, 0x5ca4, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, - 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, - 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, - 0x0260, 0x1f04, 0x57c1, 0x60c3, 0x0084, 0x080c, 0x5b5d, 0x00fe, - 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b33, 0x080c, - 0x8010, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ca4, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, - 0x0001, 0x080c, 0x5bfa, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, - 0x5c80, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5ccf, 0x7097, - 0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, - 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, - 0x07d0, 0x2011, 0x5b33, 0x080c, 0x8004, 0x0005, 0x708c, 0x9005, - 0x0130, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7097, 0x0000, 0x0005, - 0x7097, 0x0011, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x20e1, 0x0000, - 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, - 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, - 0x080c, 0x5c87, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, - 0x9084, 0x00ff, 0x0160, 0x080c, 0x2663, 0x9186, 0x007e, 0x0138, - 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x60c3, - 0x0014, 0x080c, 0x5b5d, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, - 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, - 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, - 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, - 0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, - 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c36, 0x2079, - 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c, - 0x5c87, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, - 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x0168, 0x080c, 0x5c5d, - 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, - 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, - 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b33, 0x080c, - 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, - 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, - 0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, - 0x7097, 0x0015, 0x080c, 0x5c36, 0x2079, 0x0240, 0x7833, 0x1104, - 0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c, 0x5c87, 0x11b8, 0x7080, - 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3131, - 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae0, - 0x0180, 0x080c, 0x4c91, 0x0110, 0x080c, 0x26cc, 0x20a9, 0x0008, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, - 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, 0x0005, 0x00f6, - 0x708c, 0x9005, 0x05f0, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, - 0x0014, 0x15a8, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, - 0x1168, 0x9085, 0x0001, 0x080c, 0x5ccf, 0x7a38, 0xd2fc, 0x0128, - 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, - 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, - 0x9085, 0x0001, 0x080c, 0x5ccf, 0x7093, 0x0000, 0x7a38, 0xd2f4, - 0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, - 0x0000, 0x00fe, 0x0005, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x20e1, - 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, - 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, - 0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c87, - 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5a53, 0x1188, 0x9085, - 0x0001, 0x080c, 0x26cc, 0x20a9, 0x0008, 0x080c, 0x5ca4, 0x20e1, + 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, + 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c3d, 0x2079, 0x0240, + 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, + 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, + 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, 0x5c64, 0x20a9, + 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, + 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038, + 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, + 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, + 0x0015, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, + 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8, 0x7080, 0x9005, + 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3138, 0x200d, + 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0180, + 0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, - 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x0010, 0x080c, 0x55ad, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5b33, 0x080c, 0x8010, - 0x9086, 0x0084, 0x1190, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, - 0x5ccf, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, - 0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5c36, 0x2079, 0x0240, - 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x2009, 0x026e, - 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, - 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, - 0x59bc, 0x2039, 0x1c0e, 0x080c, 0x5c87, 0x11e8, 0x2728, 0x2514, - 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, - 0x9205, 0x202a, 0x705c, 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, 0x59ef, 0x60c3, 0x0084, 0x080c, 0x5b5d, - 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b33, - 0x080c, 0x8010, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ca4, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, - 0x7093, 0x0001, 0x080c, 0x5bfa, 0x7097, 0x001a, 0x0029, 0x0010, - 0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5ccf, - 0x7097, 0x001b, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x2011, 0x0260, - 0x2009, 0x0240, 0x748c, 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, 0x5a3b, 0x60c3, 0x0084, 0x080c, - 0x5b5d, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, - 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, - 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, - 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, - 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, - 0x1f04, 0x5a6d, 0x0804, 0x5adc, 0x82ff, 0x1160, 0xd5d4, 0x0120, - 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5adc, - 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, - 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, - 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a93, - 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aa5, - 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, - 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5ab4, - 0x755a, 0x95c8, 0x3131, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, - 0x6536, 0x0016, 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, - 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 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, 0x715a, 0x91a0, - 0x3131, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, - 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, - 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, - 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, - 0x0140, 0x080c, 0x5be9, 0x080c, 0x9393, 0x7004, 0x9084, 0x4000, - 0x0110, 0x080c, 0x2b24, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, - 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, - 0x5c46, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, - 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, - 0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, - 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, - 0x0056, 0x60a7, 0x9575, 0x080c, 0x938a, 0x6144, 0xd184, 0x0120, - 0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, - 0x196a, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5b33, 0x080c, 0x80a2, - 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, - 0x9d9f, 0x2009, 0x00f7, 0x080c, 0x5c46, 0x2061, 0x19cb, 0x900e, - 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, - 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a, - 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bb5, 0x080c, 0x8004, - 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, - 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9393, 0x2071, - 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x080c, - 0x6faf, 0x0188, 0x080c, 0x6fca, 0x1170, 0x080c, 0x7295, 0x0016, - 0x080c, 0x277b, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x7290, - 0x080c, 0x6ed9, 0x0050, 0x2009, 0x0001, 0x080c, 0x2a63, 0x2001, - 0x0001, 0x080c, 0x260c, 0x080c, 0x5b89, 0x012e, 0x000e, 0x00ee, - 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, - 0x2011, 0x8017, 0x2001, 0x196a, 0x201c, 0x080c, 0x48d2, 0x003e, - 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, - 0x080c, 0x5ca4, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, - 0x0020, 0x080c, 0x5c9e, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, - 0x20a9, 0x000e, 0x080c, 0x5ca1, 0x2099, 0x0260, 0x20a1, 0x1cb2, - 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, - 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c1e, 0x002e, 0x001e, 0x0005, - 0x080c, 0x9c26, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x9c26, - 0x080c, 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, - 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, 0x1138, - 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, - 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, - 0x6557, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd50a, - 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, - 0x080c, 0x2fa2, 0x080c, 0xc1f9, 0x0140, 0x0036, 0x2019, 0xffff, - 0x2021, 0x0007, 0x080c, 0x4a6f, 0x003e, 0x004e, 0x001e, 0x0005, - 0x080c, 0x5b89, 0x7097, 0x0000, 0x708f, 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, - 0x1977, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, - 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, - 0x1f04, 0x5cde, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, - 0x0146, 0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, - 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3131, 0x231d, 0x939c, 0x00ff, - 0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0x9d98, 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, 0x101d, 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, - 0x5db4, 0x9182, 0x0800, 0x1a04, 0x5db8, 0x2001, 0x180c, 0x2004, - 0x9084, 0x0003, 0x1904, 0x5dbe, 0x9188, 0x1000, 0x2104, 0x905d, - 0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, - 0x900d, 0x1904, 0x5dd0, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, - 0xb852, 0xb84e, 0x080c, 0x83e6, 0x9006, 0x012e, 0x0005, 0x00a6, - 0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, - 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, - 0x9082, 0x0006, 0x1290, 0x080c, 0x9d98, 0x1160, 0xb8a0, 0x9084, - 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 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, 0x655b, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d67, - 0x080c, 0x63d3, 0x0904, 0x5d80, 0x0804, 0x5d6b, 0x00b6, 0x00e6, - 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e51, - 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x5e29, 0xb8a0, 0x9086, - 0x007f, 0x0178, 0x080c, 0x6563, 0x0160, 0xa994, 0x81ff, 0x0130, - 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x655b, - 0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, - 0x0026, 0x2010, 0x080c, 0xbaec, 0x002e, 0x1120, 0x2001, 0x0008, - 0x0804, 0x5e53, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, - 0x0804, 0x5e53, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, - 0x080c, 0x9dc3, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, - 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9e93, 0x9006, - 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, - 0x9d98, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, - 0x0900, 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, 0x5ee8, 0x5ea3, 0x5eba, 0x5ee8, 0x5ee8, - 0x5ee8, 0x5ee8, 0x5ee8, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, - 0x61d7, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef0, 0xb814, - 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x478c, - 0x0150, 0x04b0, 0x080c, 0x6237, 0x1598, 0xb810, 0x9306, 0x1580, - 0xb814, 0x9206, 0x1568, 0x080c, 0x9dc3, 0x0530, 0x2b00, 0x6012, - 0x080c, 0xbf73, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, - 0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x2fd7, 0x9006, 0x080c, - 0x6174, 0x2001, 0x0002, 0x080c, 0x6188, 0x2001, 0x0200, 0xb86e, - 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9e93, 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, 0x60c5, 0x90c6, 0x0056, 0x0904, 0x60c9, - 0x90c6, 0x0066, 0x0904, 0x60cd, 0x90c6, 0x0067, 0x0904, 0x60d1, - 0x90c6, 0x0068, 0x0904, 0x60d5, 0x90c6, 0x0071, 0x0904, 0x60d9, - 0x90c6, 0x0074, 0x0904, 0x60dd, 0x90c6, 0x007c, 0x0904, 0x60e1, - 0x90c6, 0x007e, 0x0904, 0x60e5, 0x90c6, 0x0037, 0x0904, 0x60e9, - 0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c0, - 0x9182, 0x0800, 0x1a04, 0x60c0, 0x080c, 0x6237, 0x1198, 0xb804, - 0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, - 0x0148, 0x080c, 0x9d98, 0x1904, 0x60a9, 0xb8a0, 0x9084, 0xff80, - 0x1904, 0x60a9, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, - 0x0904, 0x6009, 0x90c6, 0x0064, 0x0904, 0x6032, 0x2008, 0x0804, - 0x5fcc, 0xa998, 0xa8b0, 0x2040, 0x080c, 0x9d98, 0x1120, 0x9182, - 0x007f, 0x0a04, 0x5fcc, 0x9186, 0x00ff, 0x0904, 0x5fcc, 0x9182, - 0x0800, 0x1a04, 0x5fcc, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, - 0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, - 0x5fcc, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, - 0x5fcc, 0x080c, 0x478c, 0x0904, 0x5fd5, 0x900e, 0x9016, 0x90c6, - 0x4000, 0x1558, 0x0006, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, - 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, - 0x2098, 0x080c, 0x0f68, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, - 0x2098, 0x080c, 0x0f68, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, - 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, - 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, - 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, - 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9dc3, 0x1130, - 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, - 0x080c, 0xbf73, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, - 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2fd7, - 0x012e, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c, 0x6188, - 0x2009, 0x0002, 0x080c, 0x9e93, 0xa8b0, 0xd094, 0x0118, 0xb8bc, - 0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, - 0x0005, 0x080c, 0x5393, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, - 0xaeb0, 0x080c, 0x6237, 0x1904, 0x5fc7, 0x9186, 0x007f, 0x0130, - 0x080c, 0x655b, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, - 0x0feb, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, - 0xa806, 0x080c, 0xbce4, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, - 0x0804, 0x5fce, 0xa998, 0xaeb0, 0x080c, 0x6237, 0x1904, 0x5fc7, - 0x0096, 0x080c, 0x0feb, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, - 0x6086, 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, 0x0f68, 0x009e, 0xa87b, - 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, - 0x537f, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, - 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x655b, 0x0118, 0xa89b, - 0x0009, 0x0080, 0x080c, 0x5393, 0x0118, 0xa89b, 0x0007, 0x0050, - 0x080c, 0xbcc7, 0x1904, 0x6002, 0x2009, 0x0003, 0x2001, 0x4005, - 0x0804, 0x5fce, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x122f, 0x080c, 0xa31b, 0x1904, 0x6002, 0x2009, 0x0002, - 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6003, 0x2009, 0x180c, - 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, - 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x6003, - 0x2001, 0x0029, 0x900e, 0x0804, 0x6003, 0x080c, 0x3555, 0x0804, - 0x6004, 0x080c, 0x50bc, 0x0804, 0x6004, 0x080c, 0x4325, 0x0804, - 0x6004, 0x080c, 0x439e, 0x0804, 0x6004, 0x080c, 0x43fa, 0x0804, - 0x6004, 0x080c, 0x4848, 0x0804, 0x6004, 0x080c, 0x4af4, 0x0804, - 0x6004, 0x080c, 0x4d27, 0x0804, 0x6004, 0x080c, 0x4f20, 0x0804, - 0x6004, 0x080c, 0x3765, 0x0804, 0x6004, 0x00b6, 0xa974, 0xae78, - 0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, - 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x655b, 0x1148, - 0x00e9, 0x080c, 0x6362, 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, 0x19b8, 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, - 0x6557, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, - 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, - 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db4, 0x000e, - 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, - 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, - 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6553, 0x1138, 0x9284, 0x00ff, - 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, - 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, - 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, - 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0feb, 0x2958, - 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, - 0x9006, 0xb8a6, 0x080c, 0x5ce4, 0x9006, 0x0010, 0x9085, 0x0001, - 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, 0x101d, 0x00d6, 0x00c6, 0xb8ac, 0x2060, - 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xbafe, - 0x0110, 0x080c, 0x0f9d, 0x080c, 0x9e19, 0x00ce, 0x0c88, 0x00ce, - 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x102d, - 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, 0x6fa7, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, - 0x9d98, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, - 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, - 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, - 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 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, 0x1873, 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, 0x0db4, 0x3c00, - 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, - 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0feb, 0x0170, 0x2900, - 0xb8a6, 0xa803, 0x0000, 0x080c, 0x63f3, 0xa807, 0x0001, 0xae12, - 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, - 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, - 0x1150, 0x080c, 0x6402, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, - 0x8001, 0xa806, 0x0020, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x83e6, 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, 0x9797, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, - 0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, - 0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, - 0x080c, 0x6457, 0x0128, 0x080c, 0xbbbb, 0x0010, 0x9085, 0x0001, - 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbb60, 0x0010, 0x9085, - 0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbbb8, 0x0010, - 0x9085, 0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbb7f, - 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, - 0xbbfc, 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, + 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, + 0x9005, 0x05f0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, + 0x15a8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, + 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, + 0x9085, 0x0001, 0x080c, 0x5cd6, 0x7a38, 0xd2fc, 0x0128, 0x70c0, + 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, + 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, + 0x0001, 0x080c, 0x5cd6, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, + 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, + 0x00fe, 0x0005, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000, + 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, + 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, + 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c8e, 0x1150, + 0x7080, 0x9005, 0x1138, 0x080c, 0x5a5a, 0x1188, 0x9085, 0x0001, + 0x080c, 0x26cc, 0x20a9, 0x0008, 0x080c, 0x5cab, 0x20e1, 0x0000, + 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, + 0x0014, 0x080c, 0x5b64, 0x0010, 0x080c, 0x55b4, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x01d8, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, + 0x0084, 0x1190, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5cd6, + 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, + 0x00f6, 0x7097, 0x0019, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833, + 0x1106, 0x7837, 0x0000, 0x080c, 0x5cab, 0x2009, 0x026e, 0x2039, + 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, + 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59c3, + 0x2039, 0x1c0e, 0x080c, 0x5c8e, 0x11e8, 0x2728, 0x2514, 0x8207, + 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, + 0x202a, 0x705c, 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, 0x59f6, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, + 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, + 0x8038, 0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, + 0x0001, 0x080c, 0x5c01, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, + 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5cd6, 0x7097, + 0x001b, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2009, + 0x0240, 0x748c, 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, 0x5a42, 0x60c3, 0x0084, 0x080c, 0x5b64, + 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, + 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cab, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, + 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, + 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, + 0x5a74, 0x0804, 0x5ae3, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, + 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5ae3, 0x918d, + 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, + 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, + 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a9a, 0x04d8, + 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aac, 0x2328, + 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, + 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5abb, 0x755a, + 0x95c8, 0x3138, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, + 0x0016, 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, + 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 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, 0x715a, 0x91a0, 0x3138, + 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, + 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, + 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, + 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, + 0x080c, 0x5bf0, 0x080c, 0x93ac, 0x7004, 0x9084, 0x4000, 0x0110, + 0x080c, 0x2b24, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, + 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c4d, + 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, + 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, + 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, + 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, + 0x60a7, 0x9575, 0x080c, 0x93a3, 0x6144, 0xd184, 0x0120, 0x7194, + 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a, + 0x2112, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x0005, + 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9db8, + 0x2009, 0x00f7, 0x080c, 0x5c4d, 0x2061, 0x19cb, 0x900e, 0x611a, + 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, + 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a, 0x200b, + 0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c, 0x802c, 0x012e, + 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, + 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x93ac, 0x2071, 0x0140, + 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x080c, 0x6fba, + 0x0188, 0x080c, 0x6fd5, 0x1170, 0x080c, 0x72a0, 0x0016, 0x080c, + 0x277b, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x729b, 0x080c, + 0x6ee4, 0x0050, 0x2009, 0x0001, 0x080c, 0x2a63, 0x2001, 0x0001, + 0x080c, 0x260c, 0x080c, 0x5b90, 0x012e, 0x000e, 0x00ee, 0x0005, + 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, + 0x8017, 0x2001, 0x196a, 0x201c, 0x080c, 0x48d9, 0x003e, 0x002e, + 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, + 0x5cab, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, + 0x080c, 0x5ca5, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, + 0x000e, 0x080c, 0x5ca8, 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, + 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, + 0x8108, 0x8210, 0x1f04, 0x5c25, 0x002e, 0x001e, 0x0005, 0x080c, + 0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x9c3f, 0x080c, + 0x5cab, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, + 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, + 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, 0x1138, 0x2001, + 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, + 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x655e, + 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd52a, 0x2001, + 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, + 0x2fa5, 0x080c, 0xc212, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, + 0x0007, 0x080c, 0x4a76, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, + 0x5b90, 0x7097, 0x0000, 0x708f, 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, 0x1977, + 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, + 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, + 0x5ce5, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, + 0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a, + 0xb80e, 0xb812, 0x9198, 0x3138, 0x231d, 0x939c, 0x00ff, 0xbb16, + 0x0016, 0x0026, 0xb8b2, 0x080c, 0x9db1, 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, 0x101d, 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, 0x5dbb, + 0x9182, 0x0800, 0x1a04, 0x5dbf, 0x2001, 0x180c, 0x2004, 0x9084, + 0x0003, 0x1904, 0x5dc5, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518, + 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d, + 0x1904, 0x5dd7, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, + 0xb84e, 0x080c, 0x840e, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, + 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, + 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, + 0x0006, 0x1290, 0x080c, 0x9db1, 0x1160, 0xb8a0, 0x9084, 0xff80, + 0x1140, 0xb900, 0xd1fc, 0x0990, 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, + 0x6562, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d6e, 0x080c, + 0x63da, 0x0904, 0x5d87, 0x0804, 0x5d72, 0x00b6, 0x00e6, 0x0126, + 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e58, 0x9188, + 0x1000, 0x2104, 0x905d, 0x0904, 0x5e30, 0xb8a0, 0x9086, 0x007f, + 0x0178, 0x080c, 0x656a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, + 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6562, 0x1598, + 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, + 0x2010, 0x080c, 0xbb05, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, + 0x5e5a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, + 0x5e5a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, + 0x9ddc, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, + 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9eac, 0x9006, 0x0458, + 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9db1, + 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, + 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, 0x5eef, 0x5eaa, 0x5ec1, 0x5eef, 0x5eef, 0x5eef, + 0x5eef, 0x5eef, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x61de, + 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef7, 0xb814, 0x9206, + 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4793, 0x0150, + 0x04b0, 0x080c, 0x623e, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, + 0x9206, 0x1568, 0x080c, 0x9ddc, 0x0530, 0x2b00, 0x6012, 0x080c, + 0xbf8c, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, + 0x9086, 0x0001, 0x1170, 0x080c, 0x2fda, 0x9006, 0x080c, 0x617b, + 0x2001, 0x0002, 0x080c, 0x618f, 0x2001, 0x0200, 0xb86e, 0xb893, + 0x0002, 0x2009, 0x0003, 0x080c, 0x9eac, 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, 0x60cc, 0x90c6, 0x0056, 0x0904, 0x60d0, 0x90c6, + 0x0066, 0x0904, 0x60d4, 0x90c6, 0x0067, 0x0904, 0x60d8, 0x90c6, + 0x0068, 0x0904, 0x60dc, 0x90c6, 0x0071, 0x0904, 0x60e0, 0x90c6, + 0x0074, 0x0904, 0x60e4, 0x90c6, 0x007c, 0x0904, 0x60e8, 0x90c6, + 0x007e, 0x0904, 0x60ec, 0x90c6, 0x0037, 0x0904, 0x60f0, 0x9016, + 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c7, 0x9182, + 0x0800, 0x1a04, 0x60c7, 0x080c, 0x623e, 0x1198, 0xb804, 0x9084, + 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, + 0x080c, 0x9db1, 0x1904, 0x60b0, 0xb8a0, 0x9084, 0xff80, 0x1904, + 0x60b0, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, + 0x6010, 0x90c6, 0x0064, 0x0904, 0x6039, 0x2008, 0x0804, 0x5fd3, + 0xa998, 0xa8b0, 0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, + 0x0a04, 0x5fd3, 0x9186, 0x00ff, 0x0904, 0x5fd3, 0x9182, 0x0800, + 0x1a04, 0x5fd3, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c, + 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fd3, + 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fd3, + 0x080c, 0x4793, 0x0904, 0x5fdc, 0x900e, 0x9016, 0x90c6, 0x4000, + 0x1558, 0x0006, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, + 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, + 0x080c, 0x0f68, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, + 0x080c, 0x0f68, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, + 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, + 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, + 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, + 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9ddc, 0x1130, 0x2001, + 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, + 0xbf8c, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, + 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2fda, 0x012e, + 0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x2009, + 0x0002, 0x080c, 0x9eac, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d, + 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, + 0x080c, 0x539a, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, + 0x080c, 0x623e, 0x1904, 0x5fce, 0x9186, 0x007f, 0x0130, 0x080c, + 0x6562, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0feb, + 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, + 0x080c, 0xbcfd, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, + 0x5fd5, 0xa998, 0xaeb0, 0x080c, 0x623e, 0x1904, 0x5fce, 0x0096, + 0x080c, 0x0feb, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x608d, + 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, 0x0f68, 0x009e, 0xa87b, 0x0000, + 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5386, + 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, + 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6562, 0x0118, 0xa89b, 0x0009, + 0x0080, 0x080c, 0x539a, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, + 0xbce0, 0x1904, 0x6009, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, + 0x5fd5, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, + 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, + 0x122f, 0x080c, 0xa334, 0x1904, 0x6009, 0x2009, 0x0002, 0x08e8, + 0x2001, 0x0028, 0x900e, 0x0804, 0x600a, 0x2009, 0x180c, 0x210c, + 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, + 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x600a, 0x2001, + 0x0029, 0x900e, 0x0804, 0x600a, 0x080c, 0x355c, 0x0804, 0x600b, + 0x080c, 0x50c3, 0x0804, 0x600b, 0x080c, 0x432c, 0x0804, 0x600b, + 0x080c, 0x43a5, 0x0804, 0x600b, 0x080c, 0x4401, 0x0804, 0x600b, + 0x080c, 0x484f, 0x0804, 0x600b, 0x080c, 0x4afb, 0x0804, 0x600b, + 0x080c, 0x4d2e, 0x0804, 0x600b, 0x080c, 0x4f27, 0x0804, 0x600b, + 0x080c, 0x376c, 0x0804, 0x600b, 0x00b6, 0xa974, 0xae78, 0x9684, + 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188, + 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6562, 0x1148, 0x00e9, + 0x080c, 0x6369, 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, 0x19b8, 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, 0x655e, + 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, + 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, + 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db4, 0x000e, 0x00ce, + 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, + 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, + 0xd0a4, 0x0150, 0x080c, 0x655a, 0x1138, 0x9284, 0x00ff, 0x9086, + 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, + 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, + 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, + 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0feb, 0x2958, 0x009e, + 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, + 0xb8a6, 0x080c, 0x5ceb, 0x9006, 0x0010, 0x9085, 0x0001, 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, 0x101d, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, + 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0110, + 0x080c, 0x0f9d, 0x080c, 0x9e32, 0x00ce, 0x0c88, 0x00ce, 0x00de, + 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x102d, 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, + 0x6fb2, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x9db1, + 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1953, + 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, + 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, + 0x6886, 0x2069, 0x1800, 0x68b2, 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, 0x1873, 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, 0x0db4, 0x3c00, 0x20e8, + 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, + 0x014e, 0x013e, 0x0060, 0x080c, 0x0feb, 0x0170, 0x2900, 0xb8a6, + 0xa803, 0x0000, 0x080c, 0x63fa, 0xa807, 0x0001, 0xae12, 0x9085, + 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, + 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, + 0x080c, 0x6409, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, + 0xa806, 0x0020, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x012e, + 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x840e, 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, + 0x97b0, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, + 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, + 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, + 0x645e, 0x0128, 0x080c, 0xbbd4, 0x0010, 0x9085, 0x0001, 0x0005, + 0x080c, 0x645e, 0x0128, 0x080c, 0xbb79, 0x0010, 0x9085, 0x0001, + 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbbd1, 0x0010, 0x9085, + 0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbb98, 0x0010, + 0x9085, 0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbc15, + 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, 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, 0x0feb, 0x0168, - 0x2900, 0xb8a6, 0x080c, 0x63f3, 0xa803, 0x0001, 0xa807, 0x0000, - 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, - 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, - 0x080c, 0x101d, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, - 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x6fa7, 0x01b0, 0x71c0, - 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, - 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, - 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, - 0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6237, - 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, - 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, - 0x1f04, 0x647d, 0x015e, 0x080c, 0x6519, 0x0120, 0x2001, 0x1956, - 0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0, - 0x2011, 0x64a7, 0x080c, 0x80a2, 0x00fe, 0x00be, 0x0005, 0x00b6, - 0x2011, 0x64a7, 0x080c, 0x8010, 0x080c, 0x6519, 0x01d8, 0x2001, - 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6557, - 0x0130, 0x2009, 0x07d0, 0x2011, 0x64a7, 0x080c, 0x80a2, 0x00e6, - 0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2dbb, - 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, - 0x080c, 0x6237, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0, - 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd50a, 0xb800, 0xc0e5, - 0xc0ec, 0xb802, 0x080c, 0x6553, 0x2001, 0x0707, 0x1128, 0xb804, - 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c, - 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x900e, 0x080c, 0xd27b, - 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x64cf, 0x00ce, 0x015e, - 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, - 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, - 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 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, - 0x0db4, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, - 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, - 0x0138, 0x2001, 0x1954, 0x200c, 0x2011, 0x6549, 0x080c, 0x80a2, - 0x0005, 0x2011, 0x6549, 0x080c, 0x8010, 0x2011, 0x1836, 0x2204, - 0xc0cc, 0x2012, 0x0005, 0x080c, 0x537f, 0xd0ac, 0x0005, 0x080c, - 0x537f, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, - 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, - 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xc1f9, - 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, - 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, - 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, - 0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, - 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, - 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, - 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, - 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, - 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, - 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, - 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, - 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, - 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1817, - 0x203c, 0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, - 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, - 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, - 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, - 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, - 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, - 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x2071, 0x1906, - 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, - 0x701e, 0x700a, 0x7046, 0x2001, 0x1919, 0x2003, 0x0000, 0x0005, - 0x0016, 0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, 0x080c, 0x537f, - 0xd0fc, 0x1140, 0x080c, 0x537f, 0x900e, 0xd09c, 0x0108, 0x8108, - 0x7102, 0x0400, 0x2001, 0x1873, 0x200c, 0x9184, 0x0007, 0x9006, - 0x0002, 0x6632, 0x6632, 0x6632, 0x6632, 0x6632, 0x6649, 0x6657, - 0x6632, 0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, 0xff00, - 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, - 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, - 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, - 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, - 0x080c, 0x72fd, 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, 0x1906, 0x7028, 0xc084, 0x702a, - 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, - 0xa868, 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, - 0x9005, 0x0904, 0x688a, 0xa87c, 0xd0bc, 0x1904, 0x688a, 0xa978, - 0xa874, 0x9105, 0x1904, 0x688a, 0x2001, 0x191a, 0x2004, 0x0002, - 0x688a, 0x66e3, 0x671f, 0x671f, 0x688a, 0x671f, 0x0005, 0xa868, - 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, - 0x0904, 0x688a, 0xa87c, 0xd0cc, 0x0904, 0x688a, 0xa880, 0x9084, - 0x00ff, 0x9086, 0x0001, 0x1904, 0x688a, 0x9186, 0x0003, 0x0904, - 0x671f, 0x9186, 0x0005, 0x0904, 0x671f, 0xa84f, 0x8021, 0xa853, - 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, - 0x1906, 0x701c, 0x9005, 0x1904, 0x6a4a, 0x0e04, 0x6a95, 0x2071, - 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, - 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x1187, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, - 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, - 0x080c, 0x7f35, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, - 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, - 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, - 0x7010, 0x9005, 0x1904, 0x680e, 0x782c, 0x908c, 0x0780, 0x190c, - 0x6bbc, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x673d, - 0x680e, 0x6762, 0x67a9, 0x080c, 0x0db4, 0x2071, 0x1800, 0x2900, - 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, - 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, - 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, - 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, - 0x7f35, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, - 0x1580, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, - 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, - 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, - 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6bbc, 0xd0a4, 0x19f0, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, - 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, - 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, - 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35, - 0x0800, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c, 0x11a0, 0x009e, - 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19cb, 0x703c, - 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, - 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, + 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, 0x0feb, 0x0168, 0x2900, + 0xb8a6, 0x080c, 0x63fa, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, + 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, + 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, + 0x101d, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, + 0x0005, 0x00b6, 0x00f6, 0x080c, 0x6fb2, 0x01b0, 0x71c0, 0x81ff, + 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, + 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, + 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, 0x00d0, + 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1168, + 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, + 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, + 0x6484, 0x015e, 0x080c, 0x6520, 0x0120, 0x2001, 0x1956, 0x200c, + 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0, 0x2011, + 0x64ae, 0x080c, 0x80ca, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011, + 0x64ae, 0x080c, 0x8038, 0x080c, 0x6520, 0x01d8, 0x2001, 0x107e, + 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x655e, 0x0130, + 0x2009, 0x07d0, 0x2011, 0x64ae, 0x080c, 0x80ca, 0x00e6, 0x2071, + 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2dbb, 0x00ee, + 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, + 0x623e, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0, 0x2220, + 0x9006, 0x2009, 0x0029, 0x080c, 0xd52a, 0xb800, 0xc0e5, 0xc0ec, + 0xb802, 0x080c, 0x655a, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084, + 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c, 0x8571, + 0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b, 0x007e, + 0x004e, 0x001e, 0x8108, 0x1f04, 0x64d6, 0x00ce, 0x015e, 0x00be, + 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, + 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, + 0x6010, 0x00b6, 0x905d, 0x0108, 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, 0x0db4, + 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, + 0x002e, 0x012e, 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, + 0x2001, 0x1954, 0x200c, 0x2011, 0x6550, 0x080c, 0x80ca, 0x0005, + 0x2011, 0x6550, 0x080c, 0x8038, 0x2011, 0x1836, 0x2204, 0xc0cc, + 0x2012, 0x0005, 0x080c, 0x5386, 0xd0ac, 0x0005, 0x080c, 0x5386, + 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, + 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, + 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xc212, 0x0158, + 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, + 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, + 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, + 0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008, + 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, + 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804, + 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, + 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, + 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, + 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005, + 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005, + 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, + 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1817, 0x203c, + 0x9780, 0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, + 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, + 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, + 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420, + 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, + 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, + 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x2071, 0x1906, 0x7003, + 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, + 0x700a, 0x7046, 0x2001, 0x1919, 0x2003, 0x0000, 0x0005, 0x0016, + 0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, 0x080c, 0x5386, 0xd0fc, + 0x1140, 0x080c, 0x5386, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, + 0x0400, 0x2001, 0x1873, 0x200c, 0x9184, 0x0007, 0x9006, 0x0002, + 0x6639, 0x6639, 0x6639, 0x6639, 0x6639, 0x6650, 0x665e, 0x6639, + 0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, 0xff00, 0x8007, + 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, + 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, + 0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, 0x702a, + 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, + 0x7308, 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, 0x1906, 0x7028, 0xc084, 0x702a, 0x7007, + 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, + 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, 0x9005, + 0x0904, 0x6891, 0xa87c, 0xd0bc, 0x1904, 0x6891, 0xa978, 0xa874, + 0x9105, 0x1904, 0x6891, 0x2001, 0x191a, 0x2004, 0x0002, 0x6891, + 0x66ea, 0x6726, 0x6726, 0x6891, 0x6726, 0x0005, 0xa868, 0xd0fc, + 0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, + 0x6891, 0xa87c, 0xd0cc, 0x0904, 0x6891, 0xa880, 0x9084, 0x00ff, + 0x9086, 0x0001, 0x1904, 0x6891, 0x9186, 0x0003, 0x0904, 0x6726, + 0x9186, 0x0005, 0x0904, 0x6726, 0xa84f, 0x8021, 0xa853, 0x0017, + 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1906, + 0x701c, 0x9005, 0x1904, 0x6a51, 0x0e04, 0x6a9c, 0x2071, 0x0000, + 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, + 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x1187, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, + 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, + 0x7f5d, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, + 0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, + 0x9005, 0x1904, 0x6815, 0x782c, 0x908c, 0x0780, 0x190c, 0x6bc3, + 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6744, 0x6815, + 0x6769, 0x67b0, 0x080c, 0x0db4, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, - 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, - 0x080c, 0x7f35, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, - 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, - 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6863, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6bbc, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, - 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, - 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c, 0x0d68, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x01b0, 0x00e6, - 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, - 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19cb, 0x703c, - 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, - 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35, 0x00ee, 0x0804, 0x681e, - 0xa868, 0xd0fc, 0x1904, 0x68c6, 0x0096, 0xa804, 0xa807, 0x0000, - 0x904d, 0x190c, 0x0f9d, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x15f0, - 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, - 0x1800, 0x70e8, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, 0xa803, - 0x0000, 0x7010, 0x9005, 0x1904, 0x69c4, 0x782c, 0x908c, 0x0780, - 0x190c, 0x6bbc, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, - 0x68c7, 0x69c4, 0x68e2, 0x6953, 0x080c, 0x0db4, 0x70eb, 0x0fa0, - 0x71e4, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, - 0x70e6, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, - 0xff3f, 0x9205, 0x20d0, 0x0888, 0x70ea, 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, 0x080c, - 0x7f35, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, - 0x1904, 0x6942, 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, 0x0058, 0x00ee, 0x2048, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x19f0, 0x0e04, - 0x6939, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, 0xc184, - 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, - 0x0005, 0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, - 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, + 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, + 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580, + 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, + 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, + 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, + 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, + 0xd0a4, 0x19f0, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001, + 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x0800, + 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, + 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x11a0, 0x009e, 0x2900, + 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19cb, 0x703c, 0x9005, + 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, + 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, + 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001, + 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, - 0x7f35, 0x0804, 0x68f5, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, - 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, - 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, - 0x1d60, 0x00ee, 0x0e04, 0x6997, 0x7838, 0x7938, 0x910e, 0x1de0, - 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, - 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6bbc, 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, 0x080c, 0x7f35, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, - 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1904, 0x6a35, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6bbc, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, - 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, - 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c, - 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x05c8, - 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a2e, + 0x7f5d, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, + 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, + 0x2148, 0xa804, 0x900d, 0x1904, 0x686a, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6bc3, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, + 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d68, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x01b0, 0x00e6, 0x7824, + 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, + 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19cb, 0x703c, 0x9005, + 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, + 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, + 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00ee, 0x0804, 0x6825, 0xa868, + 0xd0fc, 0x1904, 0x68cd, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, + 0x190c, 0x0f9d, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x15f0, 0x00e6, + 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, + 0x70e8, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, 0xa803, 0x0000, + 0x7010, 0x9005, 0x1904, 0x69cb, 0x782c, 0x908c, 0x0780, 0x190c, + 0x6bc3, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x68ce, + 0x69cb, 0x68e9, 0x695a, 0x080c, 0x0db4, 0x70eb, 0x0fa0, 0x71e4, + 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6, + 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, + 0x9205, 0x20d0, 0x0888, 0x70ea, 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, 0x080c, 0x7f5d, + 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, + 0x6949, 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, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, + 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x0e04, 0x6940, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, - 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, 0x1919, - 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, - 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, 0xc184, 0x2102, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, + 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, + 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, + 0x0804, 0x68fc, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, + 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, + 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60, + 0x00ee, 0x0e04, 0x699e, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, + 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, + 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6bc3, 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, 0x080c, 0x7f35, 0x00ee, - 0x0804, 0x69d4, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, - 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, - 0x711e, 0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6a75, 0x002e, + 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00fe, + 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, + 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, + 0x900d, 0x1904, 0x6a3c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, + 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, + 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, + 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d50, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x05c8, 0x00e6, + 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, + 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a35, 0x7838, + 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, + 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, 0x1919, 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, 0x080c, 0x7f5d, 0x00ee, 0x0804, + 0x69db, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, + 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, + 0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6a7c, 0x002e, 0x00ee, + 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, + 0x080c, 0x7f5d, 0x0e04, 0x6a66, 0x2071, 0x1906, 0x701c, 0x2048, + 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, + 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1906, 0x080c, + 0x6baf, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, 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, 0x080c, 0x7f35, 0x0e04, 0x6a5f, 0x2071, 0x1906, 0x701c, - 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, - 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1906, - 0x080c, 0x6ba8, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, 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, 0x080c, 0x7f35, 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, 0x1906, - 0x7004, 0x0002, 0x6ae0, 0x6ae1, 0x6ba7, 0x6ae1, 0x0db4, 0x6ba7, - 0x0005, 0x2001, 0x191a, 0x2004, 0x0002, 0x6aeb, 0x6aeb, 0x6b40, - 0x6b41, 0x6aeb, 0x6b41, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6bc7, - 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6b0f, - 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, - 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x1187, 0x2071, 0x1906, 0x080c, 0x6ba8, 0x012e, - 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6bbc, - 0xd09c, 0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, 0x0001, + 0x70be, 0x080c, 0x7f5d, 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, 0x1906, 0x7004, + 0x0002, 0x6ae7, 0x6ae8, 0x6bae, 0x6ae8, 0x0db4, 0x6bae, 0x0005, + 0x2001, 0x191a, 0x2004, 0x0002, 0x6af2, 0x6af2, 0x6b47, 0x6b48, + 0x6af2, 0x6b48, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6bce, 0x701c, + 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6b16, 0xa94c, + 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, + 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x1187, 0x2071, 0x1906, 0x080c, 0x6baf, 0x012e, 0x0470, + 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, + 0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, + 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, + 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, + 0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, + 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, + 0x00d6, 0x2008, 0x2069, 0x19cb, 0x683c, 0x9005, 0x0760, 0x0158, + 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1a98, + 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, + 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6b7a, 0x2069, 0x0000, + 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2069, 0x19cb, + 0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, + 0x6c3f, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, + 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, - 0x6822, 0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, 0x8001, - 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, - 0x0005, 0x00d6, 0x2008, 0x2069, 0x19cb, 0x683c, 0x9005, 0x0760, - 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, - 0x1a98, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, - 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6b73, 0x2069, - 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2069, - 0x19cb, 0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, - 0x1e0c, 0x6c38, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, - 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, 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, - 0x101d, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6bbe, - 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbd, 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, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, - 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, - 0x2009, 0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, - 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, - 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, - 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, - 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, - 0x2009, 0x1919, 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, 0x1187, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6bbc, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, - 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, - 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, - 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, 0x6808, - 0x690a, 0x2069, 0x19cb, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, - 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, - 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0db4, 0x9082, 0x001d, - 0x001b, 0x6027, 0x1e00, 0x0005, 0x6d5c, 0x6ce6, 0x6d02, 0x6d2a, - 0x6d4b, 0x6d8b, 0x6d9d, 0x6d02, 0x6d73, 0x6ca1, 0x6ccf, 0x6ca0, - 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, - 0x9005, 0x1518, 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, - 0x080c, 0x70e0, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, - 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, - 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c, - 0x1958, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, - 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, - 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x717a, - 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, - 0x0090, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, - 0x6e0a, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, - 0x0020, 0x080c, 0x6e0a, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, - 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b14, 0x6124, 0xd1cc, - 0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, - 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6fd3, 0x2001, - 0x0080, 0x080c, 0x2b14, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, - 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, - 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, - 0x6fd3, 0x2001, 0x0080, 0x080c, 0x2b14, 0x6124, 0xd1d4, 0x1180, - 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, - 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x6124, - 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1982, 0x7097, 0x001e, - 0x0010, 0x7097, 0x001d, 0x0005, 0x080c, 0x6e8d, 0x6124, 0xd1dc, - 0x1188, 0x080c, 0x6e0a, 0x0016, 0x080c, 0x1982, 0x001e, 0xd1d4, - 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, - 0x080c, 0x6e0a, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b14, - 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x0021, 0x0005, 0x080c, 0x6e8d, 0x6124, 0xd1d4, 0x1150, - 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, - 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, - 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, - 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, - 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, - 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x6fa7, 0x11d8, - 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, - 0x0200, 0x080c, 0x2a5d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, - 0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca, 0x0428, 0x6028, - 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6fc1, 0x0150, 0x080c, 0x6fb8, - 0x1138, 0x2001, 0x0001, 0x080c, 0x260c, 0x080c, 0x6f7f, 0x00a0, - 0x080c, 0x6e8a, 0x0178, 0x2001, 0x0001, 0x080c, 0x260c, 0x7094, - 0x9086, 0x001e, 0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, - 0x0025, 0x0010, 0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, - 0x001e, 0x0005, 0x0026, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x002e, - 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x6e1b, 0x080c, 0x80db, - 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9393, - 0x2071, 0x1800, 0x080c, 0x6db8, 0x001e, 0x00fe, 0x00ee, 0x0005, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, - 0x080c, 0x9393, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, - 0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c, 0x9649, 0x080c, - 0x8090, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e, 0x60e3, 0x0000, - 0x080c, 0xd894, 0x080c, 0xd8af, 0x2009, 0x0004, 0x080c, 0x2a63, - 0x080c, 0x297e, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, - 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x080c, 0x6fc1, 0x0118, 0x9006, - 0x080c, 0x2b14, 0x080c, 0x0b8f, 0x2001, 0x0001, 0x080c, 0x260c, - 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, - 0x0005, 0x0026, 0x00e6, 0x2011, 0x6e28, 0x2071, 0x19cb, 0x701c, - 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, - 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, - 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2b14, 0x0156, - 0x20a9, 0x002d, 0x1d04, 0x6e9a, 0x2091, 0x6000, 0x1f04, 0x6e9a, - 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, 0x8001, 0x0220, 0x0118, - 0x689a, 0x00de, 0x0005, 0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8, - 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x80f0, 0x0c90, 0x00c6, - 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x080c, 0x729a, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, - 0x60e2, 0x6886, 0x080c, 0x26d7, 0x9006, 0x080c, 0x2b14, 0x080c, - 0x5b89, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, - 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, 0x0158, - 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, - 0x0158, 0x0804, 0x6f6f, 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, - 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, - 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x26d7, 0x0026, 0x080c, - 0x9d9f, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, - 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, - 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, 0xc1f9, - 0x0118, 0x9006, 0x080c, 0x2b3e, 0x0804, 0x6f7b, 0x6800, 0x9084, - 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a5d, 0x6904, 0xd1d4, 0x1140, - 0x2001, 0x0100, 0x080c, 0x2b14, 0x1f04, 0x6f19, 0x080c, 0x6ffe, - 0x012e, 0x015e, 0x080c, 0x6fb8, 0x01a8, 0x6044, 0x9005, 0x0168, - 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x6ffe, 0x9006, - 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, - 0x080c, 0x6ffe, 0x080c, 0xc1f9, 0x0118, 0x9006, 0x080c, 0x2b3e, - 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, - 0x2011, 0x6e28, 0x080c, 0x80a2, 0x002e, 0x001e, 0x080c, 0x7f2c, - 0x7034, 0xc085, 0x7036, 0x2001, 0x194e, 0x2003, 0x0004, 0x080c, - 0x6c89, 0x080c, 0x6fb8, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, - 0x1100, 0x080c, 0x7290, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, - 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x080c, 0x7f43, 0x080c, 0x7f35, 0x080c, 0x729a, 0x2001, 0x193e, - 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x26d7, - 0x9006, 0x080c, 0x2b14, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, - 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, - 0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, - 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, - 0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, - 0x0005, 0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0010, - 0x000e, 0x0005, 0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, - 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, - 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x26f7, 0x900e, 0x0028, - 0x080c, 0x6553, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, - 0x2fa2, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, - 0x180c, 0x2e04, 0x0130, 0x080c, 0xc1f2, 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, 0x7013, 0x2091, 0x6000, 0x1f04, - 0x7013, 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, - 0x26d7, 0x2001, 0x00a0, 0x0006, 0x080c, 0xc1f9, 0x000e, 0x0130, - 0x080c, 0x2b32, 0x9006, 0x080c, 0x2b3e, 0x0010, 0x080c, 0x2b14, - 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, - 0x0100, 0x080c, 0x29d2, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2069, 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, - 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x70d2, 0x2001, - 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, - 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2b14, 0x20a9, 0x0366, - 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x7080, 0x2091, 0x6000, 0x1f04, - 0x7080, 0x2011, 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c, - 0x9762, 0x080c, 0x9649, 0x901e, 0x080c, 0x96bf, 0x2001, 0x00a0, - 0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0xc1f9, - 0x0110, 0x080c, 0x0d22, 0x9085, 0x0001, 0x0490, 0x86ff, 0x1110, - 0x080c, 0x1982, 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c, 0x26d7, - 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b14, 0x20a9, 0x0366, 0x6027, - 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x0138, - 0x1d04, 0x70b7, 0x2091, 0x6000, 0x1f04, 0x70b7, 0x0810, 0x6028, - 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, - 0x0008, 0x6886, 0x080c, 0xc1f9, 0x0110, 0x080c, 0x0d22, 0x9006, - 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, - 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, - 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, - 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, - 0x1a49, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, - 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x7145, 0x2001, 0x0088, - 0x080c, 0x2b14, 0x9006, 0x60e2, 0x6886, 0x080c, 0x26d7, 0x2069, - 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, - 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069, 0x1960, 0x7000, - 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, - 0x7127, 0x2091, 0x6000, 0x1f04, 0x7127, 0x0804, 0x7172, 0x2069, - 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, - 0x2a5d, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, - 0x7133, 0x2091, 0x6000, 0x1f04, 0x7133, 0x2011, 0x0003, 0x080c, - 0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c, 0x9649, 0x901e, - 0x080c, 0x96bf, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x728b, - 0x080c, 0x5cca, 0x9085, 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c, - 0x2b14, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, - 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x26d7, - 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, 0x9758, 0x2011, 0x0002, 0x080c, - 0x9762, 0x080c, 0x9649, 0x901e, 0x080c, 0x96bf, 0x2069, 0x0140, - 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca, - 0x0804, 0x720c, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, - 0x2102, 0x080c, 0x6e10, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, - 0x2b14, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, - 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, - 0x0200, 0x2069, 0x1960, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, - 0x0001, 0x0804, 0x720c, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, - 0x2a5d, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, - 0x71cb, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x7f74, - 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19cb, - 0x7018, 0x00ee, 0x9005, 0x19f8, 0x01f8, 0x0026, 0x2011, 0x6e28, - 0x080c, 0x8010, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x002e, 0x2069, - 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, - 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x26d7, 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, - 0xc1f2, 0x1904, 0x7279, 0x7130, 0xd184, 0x1170, 0x080c, 0x312c, - 0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120, - 0x7030, 0xd08c, 0x0904, 0x7279, 0x2011, 0x1854, 0x220c, 0x0438, - 0x0016, 0x2019, 0x000e, 0x080c, 0xd486, 0x0156, 0x00b6, 0x20a9, - 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, - 0x080c, 0x6237, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, - 0x080c, 0xd50a, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x8207, - 0x001e, 0x8108, 0x1f04, 0x7242, 0x00be, 0x015e, 0x001e, 0xd1ac, - 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2fa2, - 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, - 0x6237, 0x1110, 0x080c, 0x5ce4, 0x8108, 0x1f04, 0x726f, 0x00be, - 0x015e, 0x080c, 0x1982, 0x080c, 0x9d9f, 0x60e3, 0x0000, 0x080c, - 0x5cca, 0x080c, 0x6ed9, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, - 0x001e, 0x015e, 0x0005, 0x2001, 0x194e, 0x2003, 0x0001, 0x0005, - 0x2001, 0x194e, 0x2003, 0x0000, 0x0005, 0x2001, 0x194d, 0x2003, - 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003, 0x0000, 0x0005, 0x2071, - 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1004, 0x090c, - 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1004, 0x090c, - 0x0db4, 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, 0x18f0, 0x6807, 0x0001, 0x00de, - 0x080c, 0x788c, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, - 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, - 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7301, 0x015e, 0x0005, - 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, 0x0002, 0x7320, 0x7321, - 0x7358, 0x73b3, 0x74f4, 0x731e, 0x731e, 0x751e, 0x080c, 0x0db4, - 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x7918, - 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, - 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, - 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, - 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c, 0x73b3, - 0x782c, 0xd09c, 0x090c, 0x788c, 0x0005, 0x9082, 0x005a, 0x1218, - 0x2100, 0x003b, 0x0c18, 0x080c, 0x73e9, 0x0c90, 0x00e3, 0x08f0, - 0x0005, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x740b, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73f5, 0x73e9, 0x75f3, - 0x73e9, 0x73e9, 0x73e9, 0x740b, 0x73e9, 0x73f5, 0x7634, 0x7675, - 0x76bc, 0x76d0, 0x73e9, 0x73e9, 0x740b, 0x73f5, 0x73e9, 0x73e9, - 0x74c8, 0x777b, 0x7796, 0x73e9, 0x740b, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x74be, 0x7796, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x741f, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x78bc, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x7433, 0x73e9, 0x73e9, 0x73e9, - 0x73e9, 0x73e9, 0x73e9, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, - 0x1198, 0x782c, 0x080c, 0x78b5, 0xd0a4, 0x0170, 0x7824, 0x2048, - 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, - 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x788c, 0x0005, 0x73e9, - 0x73f5, 0x75df, 0x73e9, 0x73f5, 0x73e9, 0x73f5, 0x73f5, 0x73e9, - 0x73f5, 0x75df, 0x73f5, 0x73f5, 0x73f5, 0x73f5, 0x73f5, 0x73e9, - 0x73f5, 0x75df, 0x73e9, 0x73e9, 0x73f5, 0x73e9, 0x73e9, 0x73e9, - 0x73f5, 0x00e6, 0x2071, 0x18f0, 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, - 0x6885, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, - 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x759d, 0x7007, 0x0003, - 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x759d, 0x0005, 0xa864, - 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, - 0x0804, 0x75b8, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, - 0x704b, 0x75b8, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, - 0x0001, 0x1904, 0x73f1, 0x7007, 0x0001, 0x2009, 0x1833, 0x210c, - 0x81ff, 0x1904, 0x7495, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, - 0x0074, 0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x657f, 0x002e, - 0x0578, 0x0016, 0xa998, 0x080c, 0x65c9, 0x001e, 0x1548, 0x0400, - 0x080c, 0x6fa7, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, - 0x0030, 0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f, - 0x002e, 0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, - 0x918d, 0x8000, 0x080c, 0x65c9, 0x003e, 0x002e, 0x001e, 0x1140, - 0xa897, 0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, - 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x5ef9, - 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, - 0xa982, 0x080c, 0x6885, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, - 0x0904, 0x7443, 0x9186, 0x0064, 0x0904, 0x7443, 0x9186, 0x007c, - 0x0904, 0x7443, 0x9186, 0x0028, 0x0904, 0x7443, 0x9186, 0x0038, - 0x0904, 0x7443, 0x9186, 0x0078, 0x0904, 0x7443, 0x9186, 0x005f, - 0x0904, 0x7443, 0x9186, 0x0056, 0x0904, 0x7443, 0xa897, 0x4005, - 0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, - 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x77ad, - 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, 0x73f9, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x73f9, 0x82ff, - 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x755b, 0x0018, - 0x9280, 0x7551, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x753c, - 0x080c, 0x1004, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, - 0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, - 0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, - 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, - 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10d5, 0xa06c, 0x908e, - 0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, - 0x7020, 0x2048, 0x080c, 0x101d, 0x7014, 0x2048, 0x0804, 0x73f9, - 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, - 0xa906, 0x711a, 0x0804, 0x74f4, 0x7014, 0x2048, 0x7007, 0x0001, - 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x77ad, 0x0804, - 0x759d, 0x7553, 0x7557, 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, 0x5d46, 0x1108, 0x0005, 0x080c, 0x6abf, - 0x0126, 0x2091, 0x8000, 0x080c, 0xbded, 0x080c, 0x6885, 0x012e, - 0x0ca0, 0x080c, 0xc1f2, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, - 0x2009, 0x1833, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, - 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5e5b, 0x1138, - 0x0005, 0x9006, 0xa87a, 0x080c, 0x5dd6, 0x1108, 0x0005, 0x0126, - 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6885, 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, 0x6237, 0x11b8, 0x0066, 0xae80, - 0x080c, 0x6347, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, - 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6237, 0x1110, 0x080c, - 0x6447, 0x8108, 0x1f04, 0x761c, 0x00ce, 0xa87c, 0xd084, 0x1120, - 0x080c, 0x101d, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6885, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, - 0x0001, 0x080c, 0x6557, 0x0580, 0x2061, 0x1a41, 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, 0x7876, 0x012e, 0x0804, 0x7870, 0x012e, - 0x0804, 0x786a, 0x012e, 0x0804, 0x786d, 0x0126, 0x2091, 0x8000, - 0x7007, 0x0001, 0x080c, 0x6557, 0x05e0, 0x2061, 0x1a41, 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, 0x7876, 0x012e, 0x0804, - 0x7873, 0x012e, 0x0804, 0x7870, 0x0126, 0x2091, 0x8000, 0x7007, - 0x0001, 0x2061, 0x1a41, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, - 0x0220, 0x630a, 0x012e, 0x0804, 0x7884, 0x012e, 0x0804, 0x7873, - 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, - 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a41, 0x6000, 0x9084, 0xfcff, - 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, - 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, 0x9e49, - 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110, - 0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0x9e93, 0xa988, 0x918c, - 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, - 0x080c, 0x8207, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a41, - 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, - 0x012e, 0x00be, 0x0804, 0x7876, 0x00ce, 0x012e, 0x00be, 0x0804, - 0x7870, 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, 0x6237, 0x1968, 0xb800, 0xc0e4, - 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, - 0x1957, 0x2004, 0x601a, 0x0804, 0x770b, 0xa88c, 0x9065, 0x0960, - 0x00e6, 0xa890, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, 0x0150, - 0x080c, 0x9e49, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9e49, 0x00ee, - 0x0804, 0x770b, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, - 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, - 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, - 0x00ee, 0x0804, 0x770b, 0x2061, 0x1a41, 0x6000, 0xd084, 0x0190, - 0xd08c, 0x1904, 0x7884, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, - 0x0220, 0x6206, 0x012e, 0x0804, 0x7884, 0x012e, 0xa883, 0x0016, - 0x0804, 0x787d, 0xa883, 0x0007, 0x0804, 0x787d, 0xa864, 0x8007, - 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, - 0x0005, 0x080c, 0x73f1, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, - 0x7016, 0x701a, 0x704b, 0x77ad, 0x0005, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, - 0x782f, 0x6130, 0xd194, 0x1904, 0x7859, 0xa878, 0x2070, 0x9e82, - 0x1cd0, 0x0a04, 0x7823, 0x6064, 0x9e02, 0x1a04, 0x7823, 0x7120, - 0x9186, 0x0006, 0x1904, 0x7815, 0x7010, 0x905d, 0x0904, 0x782f, - 0xb800, 0xd0e4, 0x1904, 0x7853, 0x2061, 0x1a41, 0x6100, 0x9184, - 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x785c, - 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, - 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x785f, 0x080c, 0x537f, 0xd09c, - 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x8127, 0x012e, - 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, - 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x785f, 0x012e, 0x00ee, 0x00be, - 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x787d, - 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6237, - 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, - 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, - 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, - 0x5383, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0, - 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, - 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, - 0x9086, 0x0007, 0x1904, 0x77b9, 0x7003, 0x0002, 0x0804, 0x77b9, - 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, - 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, - 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd0c7, 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, 0x6885, 0x012e, 0x0005, 0x080c, 0x101d, 0x0005, 0x00d6, - 0x080c, 0x811e, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, - 0x190c, 0x7918, 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, 0x7918, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, - 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, - 0x7909, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, - 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, - 0x04b0, 0x2b10, 0x080c, 0x9dc3, 0x1118, 0x080c, 0x9e66, 0x05a8, - 0x6212, 0xa874, 0x0002, 0x78e7, 0x78ec, 0x78ef, 0x78f5, 0x2019, - 0x0002, 0x080c, 0xd486, 0x0060, 0x080c, 0xd422, 0x0048, 0x2019, - 0x0002, 0xa980, 0x080c, 0xd43d, 0x0018, 0xa980, 0x080c, 0xd422, - 0x080c, 0x9e19, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6885, 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, 0x791a, 0x0006, 0x0016, 0x2001, 0x8003, - 0x0006, 0x0804, 0x0dbd, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005, - 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, - 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, - 0x14a7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, - 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x799a, 0x68bc, - 0x90aa, 0x0005, 0x0a04, 0x7f2c, 0x7d44, 0x7c40, 0x9584, 0x00f6, - 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584, - 0x0700, 0x8007, 0x0804, 0x79a1, 0x7000, 0x9084, 0xff00, 0x9086, - 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, - 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd86c, 0x080c, 0x7e71, - 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x7ecf, - 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x79fc, 0x080c, - 0x21cd, 0x005e, 0x004e, 0x0020, 0x080c, 0xd86c, 0x7817, 0x0140, - 0x080c, 0x6fa7, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, - 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, - 0x080c, 0x79dd, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x894b, - 0x0005, 0x0002, 0x79b3, 0x7c93, 0x79aa, 0x79aa, 0x79aa, 0x79aa, - 0x79aa, 0x79aa, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, - 0x090c, 0x894b, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, - 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286, 0x2000, 0x1150, 0x6800, - 0x9086, 0x0001, 0x1118, 0x080c, 0x53e0, 0x0070, 0x080c, 0x7a1c, - 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7bce, 0x0028, 0x9286, - 0x8000, 0x1110, 0x080c, 0x7da1, 0x7817, 0x0140, 0x2001, 0x19c1, - 0x2004, 0x9005, 0x090c, 0x894b, 0x0005, 0x2001, 0x1810, 0x2004, - 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, - 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x48d2, 0x003e, - 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, - 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, - 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, - 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, - 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x48d2, 0x002e, 0x00fe, - 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, - 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, - 0x7b9f, 0x9186, 0x0023, 0x15c0, 0x080c, 0x7e36, 0x0904, 0x7b9f, - 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, - 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x7b9f, 0x7124, 0x610a, - 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x9e93, - 0x0804, 0x7b9f, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, - 0x2009, 0x0015, 0x080c, 0x9e93, 0x0804, 0x7b9f, 0x908e, 0x0100, - 0x1904, 0x7b9f, 0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x0016, - 0x080c, 0x9e93, 0x0804, 0x7b9f, 0x9186, 0x0022, 0x1904, 0x7b9f, - 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5, - 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6, - 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, - 0x2008, 0x080c, 0x26ac, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, - 0x080c, 0x2663, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, - 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7b9f, - 0x2009, 0x0017, 0x0804, 0x7b6c, 0x908e, 0x0400, 0x1190, 0x7034, - 0x9005, 0x1904, 0x7b9f, 0x080c, 0x6fa7, 0x0120, 0x2009, 0x001d, - 0x0804, 0x7b6c, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804, - 0x7b6c, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7b9f, - 0x2009, 0x0018, 0x0804, 0x7b6c, 0x908e, 0x2010, 0x1120, 0x2009, - 0x0019, 0x0804, 0x7b6c, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, - 0x0804, 0x7b6c, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, - 0x7b9f, 0x2009, 0x001b, 0x0804, 0x7b6c, 0x908e, 0x5000, 0x1140, - 0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x001c, 0x0804, 0x7b6c, - 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x7b6c, 0x908e, - 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x0024, - 0x0804, 0x7b6c, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, - 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7b6c, 0x080c, - 0xc89e, 0x1904, 0x7b9f, 0x0804, 0x7b6a, 0x908c, 0xff00, 0x918e, - 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7b6c, 0x908e, 0x0f00, - 0x1120, 0x2009, 0x0020, 0x0804, 0x7b6c, 0x908e, 0x6104, 0x1528, - 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, - 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, - 0x2124, 0x080c, 0x48d2, 0x004e, 0x8108, 0x0f04, 0x7b38, 0x9186, - 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, - 0x202b, 0x0000, 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, 0x6838, - 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, - 0x8211, 0x220c, 0x080c, 0x2663, 0x1568, 0x080c, 0x61d7, 0x1550, - 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb8b0, 0x9005, 0x1168, 0x9186, + 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, 0x101d, + 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6bc5, 0x0006, + 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbd, 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, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, + 0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, + 0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, + 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, + 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, + 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, + 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, + 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, + 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, + 0x1919, 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, 0x1187, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6bc3, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, + 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, + 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d70, + 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, 0x6808, 0x690a, + 0x2069, 0x19cb, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, + 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0db4, 0x9082, 0x001d, 0x001b, + 0x6027, 0x1e00, 0x0005, 0x6d67, 0x6ced, 0x6d09, 0x6d33, 0x6d56, + 0x6d96, 0x6da8, 0x6d09, 0x6d7e, 0x6ca8, 0x6cd6, 0x6ca7, 0x0005, + 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, + 0x1518, 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, + 0x70eb, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, + 0x2069, 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, + 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c, 0x1958, + 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, + 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, + 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x7185, 0x6028, + 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, + 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6e15, + 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, + 0x080c, 0x6e15, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, + 0x0005, 0x2001, 0x0088, 0x080c, 0x2b14, 0x6124, 0xd1cc, 0x11e8, + 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, + 0x1982, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6fde, + 0x2001, 0x0080, 0x080c, 0x2b14, 0x7097, 0x0028, 0x0058, 0x7097, + 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, + 0x7097, 0x001f, 0x0005, 0x080c, 0x1982, 0x60e3, 0x0001, 0x600c, + 0xc0b4, 0x600e, 0x080c, 0x6fde, 0x2001, 0x0080, 0x080c, 0x2b14, + 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, + 0x1e00, 0x1158, 0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, + 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, + 0x080c, 0x2b14, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, + 0x1982, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c, + 0x6e98, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x6e15, 0x0016, 0x080c, + 0x1982, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, + 0x0020, 0x7097, 0x001f, 0x080c, 0x6e15, 0x0005, 0x0006, 0x2001, + 0x00a0, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, + 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, + 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6e98, + 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, + 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, + 0x0006, 0x2001, 0x0090, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, + 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, + 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, + 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, + 0x080c, 0x6fb2, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, + 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2a5d, 0x6024, 0xd0cc, + 0x0148, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c, + 0x5cd1, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6fcc, + 0x0150, 0x080c, 0x6fc3, 0x1138, 0x2001, 0x0001, 0x080c, 0x260c, + 0x080c, 0x6f8a, 0x00a0, 0x080c, 0x6e95, 0x0178, 0x2001, 0x0001, + 0x080c, 0x260c, 0x7094, 0x9086, 0x001e, 0x0120, 0x7094, 0x9086, + 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, 0x0021, 0x012e, + 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6e26, + 0x080c, 0x810c, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, + 0x6e26, 0x080c, 0x8103, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, + 0x0016, 0x080c, 0x93ac, 0x2071, 0x1800, 0x080c, 0x6dc3, 0x001e, + 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x00f6, 0x0126, 0x080c, 0x93ac, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, + 0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, + 0x080c, 0x9662, 0x080c, 0x80b8, 0x0036, 0x901e, 0x080c, 0x96d8, + 0x003e, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x2009, + 0x0004, 0x080c, 0x2a63, 0x080c, 0x297e, 0x2001, 0x1800, 0x2003, + 0x0004, 0x6027, 0x0008, 0x2011, 0x6e26, 0x080c, 0x810c, 0x080c, + 0x6fcc, 0x0118, 0x9006, 0x080c, 0x2b14, 0x080c, 0x0b8f, 0x2001, + 0x0001, 0x080c, 0x260c, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6e33, + 0x2071, 0x19cb, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, + 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, + 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, + 0x080c, 0x2b14, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6ea5, 0x2091, + 0x6000, 0x1f04, 0x6ea5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, + 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014, + 0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, + 0x8118, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x080c, 0x72a5, 0x2001, 0x193e, 0x2003, + 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x26d7, 0x9006, + 0x080c, 0x2b14, 0x080c, 0x5b90, 0x6027, 0xffff, 0x602b, 0x182f, + 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x194e, 0x200c, + 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, + 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x6f7a, 0x7097, 0x0022, + 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, + 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, + 0x26d7, 0x0026, 0x080c, 0x9db8, 0x002e, 0x7000, 0x908e, 0x0004, + 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, + 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, + 0x015e, 0x080c, 0xc212, 0x0118, 0x9006, 0x080c, 0x2b3e, 0x0804, + 0x6f86, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a5d, + 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2b14, 0x1f04, + 0x6f24, 0x080c, 0x7009, 0x012e, 0x015e, 0x080c, 0x6fc3, 0x01a8, + 0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, + 0x080c, 0x7009, 0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, + 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7009, 0x080c, 0xc212, 0x0118, + 0x9006, 0x080c, 0x2b3e, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, + 0x0130, 0x2009, 0x00c8, 0x2011, 0x6e33, 0x080c, 0x80ca, 0x002e, + 0x001e, 0x080c, 0x7f54, 0x7034, 0xc085, 0x7036, 0x2001, 0x194e, + 0x2003, 0x0004, 0x080c, 0x6c90, 0x080c, 0x6fc3, 0x0138, 0x6804, + 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x729b, 0x00ee, 0x00de, + 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x080c, 0x7f6b, 0x080c, 0x7f5d, 0x080c, + 0x72a5, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, + 0x6886, 0x080c, 0x26d7, 0x9006, 0x080c, 0x2b14, 0x6043, 0x0090, + 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, + 0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, + 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030, 0x9086, + 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030, + 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, + 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, + 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, + 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, + 0x26f7, 0x900e, 0x0028, 0x080c, 0x655a, 0x1dc8, 0x2009, 0x0002, + 0x2019, 0x0028, 0x080c, 0x2fa5, 0x9006, 0x0019, 0x001e, 0x003e, + 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xc20b, + 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, 0x701e, + 0x2091, 0x6000, 0x1f04, 0x701e, 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, 0x26d7, 0x2001, 0x00a0, 0x0006, 0x080c, + 0xc212, 0x000e, 0x0130, 0x080c, 0x2b32, 0x9006, 0x080c, 0x2b3e, + 0x0010, 0x080c, 0x2b14, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, + 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x29d2, 0x00fe, 0x000e, + 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x6020, + 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102, + 0x0804, 0x70dd, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, + 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, + 0x2b14, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x708b, + 0x2091, 0x6000, 0x1f04, 0x708b, 0x2011, 0x0003, 0x080c, 0x9771, + 0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c, + 0x96d8, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c, + 0x5cd1, 0x080c, 0xc212, 0x0110, 0x080c, 0x0d22, 0x9085, 0x0001, + 0x0490, 0x86ff, 0x1110, 0x080c, 0x1982, 0x60e3, 0x0000, 0x2001, + 0x0002, 0x080c, 0x26d7, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b14, + 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a5d, + 0x6024, 0x910c, 0x0138, 0x1d04, 0x70c2, 0x2091, 0x6000, 0x1f04, + 0x70c2, 0x0810, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, + 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xc212, 0x0110, + 0x080c, 0x0d22, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, + 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, + 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, + 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, + 0x5540, 0x1128, 0x2069, 0x1a49, 0x2d04, 0x8000, 0x206a, 0x2069, + 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, + 0x7150, 0x2001, 0x0088, 0x080c, 0x2b14, 0x9006, 0x60e2, 0x6886, + 0x080c, 0x26d7, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, + 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, + 0x2069, 0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, + 0x20a9, 0x0002, 0x1d04, 0x7132, 0x2091, 0x6000, 0x1f04, 0x7132, + 0x0804, 0x717d, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, + 0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x0508, 0x9084, + 0x1a00, 0x11f0, 0x1d04, 0x713e, 0x2091, 0x6000, 0x1f04, 0x713e, + 0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, + 0x080c, 0x9662, 0x901e, 0x080c, 0x96d8, 0x2001, 0x00a0, 0x080c, + 0x2b14, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x00a8, + 0x2001, 0x0080, 0x080c, 0x2b14, 0x2069, 0x0140, 0x60e3, 0x0000, + 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, + 0x0002, 0x080c, 0x26d7, 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, 0x9771, + 0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c, + 0x96d8, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, + 0x7296, 0x080c, 0x5cd1, 0x0804, 0x7217, 0x2001, 0x180c, 0x200c, + 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6e1b, 0x2069, 0x0140, + 0x2001, 0x0080, 0x080c, 0x2b14, 0x60e3, 0x0000, 0x2069, 0x0200, + 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, + 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x1960, 0x7000, 0x206a, + 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7217, 0x6027, 0x1e00, + 0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x01c8, 0x9084, + 0x1c00, 0x11b0, 0x1d04, 0x71d6, 0x0006, 0x0016, 0x00c6, 0x00d6, + 0x00e6, 0x080c, 0x7f9c, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, + 0x00e6, 0x2071, 0x19cb, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x01f8, + 0x0026, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c, + 0x810c, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, + 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, + 0x26d7, 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, 0xc20b, 0x1904, 0x7284, 0x7130, 0xd184, + 0x1170, 0x080c, 0x3133, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, + 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x7284, 0x2011, + 0x1854, 0x220c, 0x0438, 0x0016, 0x2019, 0x000e, 0x080c, 0xd4a6, + 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, + 0x9186, 0x0080, 0x0188, 0x080c, 0x623e, 0x1170, 0x2120, 0x9006, + 0x0016, 0x2009, 0x000e, 0x080c, 0xd52a, 0x2009, 0x0001, 0x2011, + 0x0100, 0x080c, 0x822f, 0x001e, 0x8108, 0x1f04, 0x724d, 0x00be, + 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, + 0x0004, 0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, + 0x007f, 0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108, + 0x1f04, 0x727a, 0x00be, 0x015e, 0x080c, 0x1982, 0x080c, 0x9db8, + 0x60e3, 0x0000, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x00ee, 0x00ce, + 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x194e, + 0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000, 0x0005, + 0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003, + 0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000, + 0x080c, 0x1004, 0x090c, 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x704e, + 0x080c, 0x1004, 0x090c, 0x0db4, 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, 0x18f0, + 0x6807, 0x0001, 0x00de, 0x080c, 0x7897, 0x9006, 0x00ee, 0x0005, + 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, + 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, + 0x730c, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, + 0x0002, 0x732b, 0x732c, 0x7363, 0x73be, 0x74ff, 0x7329, 0x7329, + 0x7529, 0x080c, 0x0db4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, + 0x0780, 0x190c, 0x7923, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, + 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, + 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, + 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, + 0x19e8, 0x080c, 0x73be, 0x782c, 0xd09c, 0x090c, 0x7897, 0x0005, + 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x73f4, + 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x73f4, 0x73f4, 0x73f4, 0x73f4, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4, 0x73f4, 0x73f4, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, + 0x7400, 0x73f4, 0x75fe, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4, + 0x7400, 0x763f, 0x7680, 0x76c7, 0x76db, 0x73f4, 0x73f4, 0x7416, + 0x7400, 0x73f4, 0x73f4, 0x74d3, 0x7786, 0x77a1, 0x73f4, 0x7416, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x74c9, 0x77a1, 0x73f4, 0x73f4, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x742a, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, + 0x73f4, 0x78c7, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x743e, + 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x2079, 0x0040, + 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x78c0, 0xd0a4, + 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, + 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, + 0x7897, 0x0005, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x7400, 0x73f4, + 0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x7400, 0x7400, 0x7400, + 0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x73f4, 0x7400, + 0x73f4, 0x73f4, 0x73f4, 0x7400, 0x00e6, 0x2071, 0x18f0, 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, 0x688c, 0x012e, 0x0005, 0xa864, 0x8007, + 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, + 0x75a8, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, + 0x75a8, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, + 0x1120, 0x7007, 0x0001, 0x0804, 0x75c3, 0x7007, 0x0003, 0x7012, + 0x2900, 0x7016, 0x701a, 0x704b, 0x75c3, 0x0005, 0xa864, 0x8007, + 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x73fc, 0x7007, 0x0001, + 0x2009, 0x1833, 0x210c, 0x81ff, 0x1904, 0x74a0, 0xa994, 0x9186, + 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011, 0x0010, + 0x080c, 0x6586, 0x002e, 0x0578, 0x0016, 0xa998, 0x080c, 0x65d0, + 0x001e, 0x1548, 0x0400, 0x080c, 0x6fb2, 0x0140, 0xa897, 0x4005, + 0xa89b, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026, 0x2011, + 0x8008, 0x080c, 0x6586, 0x002e, 0x01b0, 0x0016, 0x0026, 0x0036, + 0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000, 0x080c, 0x65d0, 0x003e, + 0x002e, 0x001e, 0x1140, 0xa897, 0x4005, 0xa89b, 0x4009, 0x2001, + 0x0030, 0x900e, 0x0050, 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, + 0x0000, 0x080c, 0x5f00, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, + 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x688c, 0x012e, 0x0ca0, + 0xa994, 0x9186, 0x0071, 0x0904, 0x744e, 0x9186, 0x0064, 0x0904, + 0x744e, 0x9186, 0x007c, 0x0904, 0x744e, 0x9186, 0x0028, 0x0904, + 0x744e, 0x9186, 0x0038, 0x0904, 0x744e, 0x9186, 0x0078, 0x0904, + 0x744e, 0x9186, 0x005f, 0x0904, 0x744e, 0x9186, 0x0056, 0x0904, + 0x744e, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, + 0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, + 0x0001, 0x0804, 0x77b8, 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, 0x7404, 0xaab4, 0x928a, 0x0002, + 0x1a04, 0x7404, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, + 0x2001, 0x7566, 0x0018, 0x9280, 0x755c, 0x2005, 0x7056, 0x7010, + 0x9015, 0x0904, 0x7547, 0x080c, 0x1004, 0x1118, 0x7007, 0x0004, + 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, 0x7050, + 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, 0xe008, + 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, + 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, + 0x10d5, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, 0x0118, + 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x101d, 0x7014, + 0x2048, 0x0804, 0x7404, 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, + 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x74ff, 0x7014, + 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, + 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, + 0x0904, 0x77b8, 0x0804, 0x75a8, 0x755e, 0x7562, 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, 0x5d4d, 0x1108, + 0x0005, 0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe06, + 0x080c, 0x688c, 0x012e, 0x0ca0, 0x080c, 0xc20b, 0x1d70, 0x2001, + 0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11d8, + 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, + 0x080c, 0x5e62, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, 0x5ddd, + 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, + 0x688c, 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, 0x623e, + 0x11b8, 0x0066, 0xae80, 0x080c, 0x634e, 0x006e, 0x0088, 0x0046, + 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, + 0x623e, 0x1110, 0x080c, 0x644e, 0x8108, 0x1f04, 0x7627, 0x00ce, + 0xa87c, 0xd084, 0x1120, 0x080c, 0x101d, 0x00be, 0x0005, 0x0126, + 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x00be, 0x0005, 0x0126, + 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x0580, 0x2061, + 0x1a41, 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, 0x7881, 0x012e, + 0x0804, 0x787b, 0x012e, 0x0804, 0x7875, 0x012e, 0x0804, 0x7878, + 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x05e0, + 0x2061, 0x1a41, 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, + 0x7881, 0x012e, 0x0804, 0x787e, 0x012e, 0x0804, 0x787b, 0x0126, + 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a41, 0x6300, 0xd38c, + 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x788f, + 0x012e, 0x0804, 0x787e, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, + 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a41, + 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, + 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, + 0x0118, 0x080c, 0x9e62, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, + 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041, 0x080c, + 0x9eac, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, + 0x900e, 0x2011, 0xfdff, 0x080c, 0x822f, 0x002e, 0xa87c, 0xd0c4, + 0x0148, 0x2061, 0x1a41, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, + 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7881, 0x00ce, + 0x012e, 0x00be, 0x0804, 0x787b, 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, 0x623e, + 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, + 0x6007, 0x0024, 0x2001, 0x1957, 0x2004, 0x601a, 0x0804, 0x7716, + 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, 0x1833, + 0x2004, 0x9005, 0x0150, 0x080c, 0x9e62, 0x8eff, 0x0118, 0x2e60, + 0x080c, 0x9e62, 0x00ee, 0x0804, 0x7716, 0x6024, 0xc0dc, 0xc0d5, + 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, + 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x00ee, 0x0804, 0x7716, 0x2061, 0x1a41, + 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x788f, 0x0126, 0x2091, + 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x788f, + 0x012e, 0xa883, 0x0016, 0x0804, 0x7888, 0xa883, 0x0007, 0x0804, + 0x7888, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, + 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x73fc, 0x0040, 0x7007, + 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x77b8, 0x0005, + 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, + 0x61cc, 0x81ff, 0x1904, 0x783a, 0x6130, 0xd194, 0x1904, 0x7864, + 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x782e, 0x6064, 0x9e02, + 0x1a04, 0x782e, 0x7120, 0x9186, 0x0006, 0x1904, 0x7820, 0x7010, + 0x905d, 0x0904, 0x783a, 0xb800, 0xd0e4, 0x1904, 0x785e, 0x2061, + 0x1a41, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, + 0xd0dc, 0x1904, 0x7867, 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, + 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x786a, + 0x080c, 0x5386, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, + 0x080c, 0x814f, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, + 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x786a, + 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, + 0x00be, 0x0804, 0x7888, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, + 0xa974, 0x080c, 0x623e, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, + 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, + 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, + 0x0035, 0x0430, 0x080c, 0x538a, 0xd0fc, 0x01e8, 0xa878, 0x2070, + 0x9e82, 0x1cd0, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, + 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, + 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x77c4, 0x7003, + 0x0002, 0x0804, 0x77c4, 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, + 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, + 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, + 0xd0e5, 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, 0x688c, 0x012e, 0x0005, 0x080c, + 0x101d, 0x0005, 0x00d6, 0x080c, 0x8146, 0x00de, 0x0005, 0x00d6, + 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, + 0x01d8, 0x908c, 0x0780, 0x190c, 0x7923, 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, 0x7923, 0x000e, 0x0005, 0x00d6, + 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, + 0x9282, 0x0004, 0x1a04, 0x7914, 0xa97c, 0x9188, 0x1000, 0x2104, + 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, + 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ddc, 0x1118, + 0x080c, 0x9e7f, 0x05a8, 0x6212, 0xa874, 0x0002, 0x78f2, 0x78f7, + 0x78fa, 0x7900, 0x2019, 0x0002, 0x080c, 0xd4a6, 0x0060, 0x080c, + 0xd442, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xd45d, 0x0018, + 0xa980, 0x080c, 0xd442, 0x080c, 0x9e32, 0xa887, 0x0000, 0x0126, + 0x2091, 0x8000, 0x080c, 0x688c, 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, 0x7925, 0x0006, + 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0dbd, 0x2001, 0x1833, + 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, + 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, + 0xd1ec, 0x1120, 0x080c, 0x14a7, 0x00fe, 0x0005, 0x2001, 0x020d, + 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, + 0x0904, 0x79a5, 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x7f54, 0x7d44, + 0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, + 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x79ac, 0x7000, + 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, + 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, + 0xd88c, 0x080c, 0x7e99, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, + 0x1118, 0x080c, 0x7ef7, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, + 0x080c, 0x7a07, 0x080c, 0x21cd, 0x005e, 0x004e, 0x0020, 0x080c, + 0xd88c, 0x7817, 0x0140, 0x080c, 0x6fb2, 0x0168, 0x2001, 0x0111, + 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, + 0x0008, 0x2003, 0x0000, 0x080c, 0x79e8, 0x2001, 0x19c1, 0x2004, + 0x9005, 0x090c, 0x8973, 0x0005, 0x0002, 0x79be, 0x7cbb, 0x79b5, + 0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x7817, 0x0140, 0x2001, + 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005, 0x7000, 0x908c, + 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286, + 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x53e7, + 0x0070, 0x080c, 0x7a27, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, + 0x7bf6, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7dc9, 0x7817, + 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005, + 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, + 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, + 0x080c, 0x48d9, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, + 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, + 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, + 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, + 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, + 0x48d9, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, + 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, + 0x9096, 0x0023, 0x1904, 0x7bc7, 0x9186, 0x0023, 0x15c0, 0x080c, + 0x7e5e, 0x0904, 0x7bc7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, + 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, + 0x7bc7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, + 0x0015, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x908e, 0x0214, 0x0118, + 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9eac, 0x0804, + 0x7bc7, 0x908e, 0x0100, 0x1904, 0x7bc7, 0x7034, 0x9005, 0x1904, + 0x7bc7, 0x2009, 0x0016, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x9186, + 0x0022, 0x1904, 0x7bc7, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, + 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, + 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, + 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x26ac, 0x7932, 0x7936, + 0x001e, 0x000e, 0x00fe, 0x080c, 0x2663, 0x695a, 0x703c, 0x00e6, + 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, + 0x9005, 0x1904, 0x7bc7, 0x2009, 0x0017, 0x0804, 0x7b77, 0x908e, + 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x080c, 0x6fb2, + 0x0120, 0x2009, 0x001d, 0x0804, 0x7b77, 0x68d8, 0xc0a5, 0x68da, + 0x2009, 0x0030, 0x0804, 0x7b77, 0x908e, 0x0500, 0x1140, 0x7034, + 0x9005, 0x1904, 0x7bc7, 0x2009, 0x0018, 0x0804, 0x7b77, 0x908e, + 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7b77, 0x908e, 0x2110, + 0x1120, 0x2009, 0x001a, 0x0804, 0x7b77, 0x908e, 0x5200, 0x1140, + 0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009, 0x001b, 0x0804, 0x7b77, + 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009, + 0x001c, 0x0804, 0x7b77, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, + 0x0804, 0x7b77, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, + 0x7bc7, 0x2009, 0x0024, 0x0804, 0x7b77, 0x908c, 0xff00, 0x918e, + 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, + 0x0904, 0x7b77, 0x080c, 0xc8b8, 0x1904, 0x7bc7, 0x0804, 0x7b75, + 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, + 0x7b77, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7b77, + 0x908e, 0x6104, 0x1528, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, + 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, + 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x48d9, 0x004e, 0x8108, + 0x0f04, 0x7b43, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, + 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 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, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, + 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1904, + 0x7bca, 0x080c, 0x61de, 0x1904, 0x7bca, 0xbe12, 0xbd16, 0x001e, + 0x0016, 0x080c, 0x6fb2, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000, + 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040, + 0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120, + 0x9584, 0x00ff, 0xb8b2, 0x0080, 0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084, - 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9dc3, 0x01a8, 0x2b08, + 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ddc, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, - 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9e93, 0x00ce, + 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9eac, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, - 0x0120, 0x2011, 0x8049, 0x080c, 0x48d2, 0x080c, 0x9e66, 0x0d90, + 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f, 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, 0x8411, 0x08a0, 0x080c, 0x30f6, + 0x0009, 0x6003, 0x0001, 0x080c, 0x8439, 0x08a0, 0x080c, 0x30fd, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, - 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7e36, 0x0904, 0x7c2b, + 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7e5e, 0x0904, 0x7c53, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, - 0x15d0, 0x2009, 0x0015, 0x080c, 0x9e93, 0x04a8, 0x908e, 0x0100, - 0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9e93, + 0x15d0, 0x2009, 0x0015, 0x080c, 0x9eac, 0x04a8, 0x908e, 0x0100, + 0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9eac, 0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, - 0x080c, 0x2663, 0x11b8, 0x080c, 0x61d7, 0x11a0, 0xbe12, 0xbd16, - 0x080c, 0x9dc3, 0x0178, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, - 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9e93, 0x080c, 0x894b, + 0x080c, 0x2663, 0x11b8, 0x080c, 0x61de, 0x11a0, 0xbe12, 0xbd16, + 0x080c, 0x9ddc, 0x0178, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, + 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9eac, 0x080c, 0x8973, 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, 0x7c8d, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, - 0x7c8d, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, + 0x0804, 0x7cb5, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, + 0x7cb5, 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, 0x7c62, 0x82ff, 0x1118, + 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7c8a, 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, - 0x000f, 0x0002, 0x7caa, 0x7caa, 0x7caa, 0x7e48, 0x7caa, 0x7cb3, - 0x7cde, 0x7d6c, 0x7caa, 0x7caa, 0x7caa, 0x7caa, 0x7caa, 0x7caa, - 0x7caa, 0x7caa, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, - 0x090c, 0x894b, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, + 0x000f, 0x0002, 0x7cd2, 0x7cd2, 0x7cd2, 0x7e70, 0x7cd2, 0x7cdb, + 0x7d06, 0x7d94, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, + 0x7cd2, 0x7cd2, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, + 0x090c, 0x8973, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, - 0x2009, 0x0046, 0x080c, 0x9e93, 0x7817, 0x0140, 0x2001, 0x19c1, - 0x2004, 0x9005, 0x090c, 0x894b, 0x00be, 0x0005, 0x00b6, 0x00c6, - 0x9484, 0x0fff, 0x0904, 0x7d42, 0x7110, 0xd1bc, 0x1904, 0x7d42, + 0x2009, 0x0046, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001, 0x19c1, + 0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x00b6, 0x00c6, + 0x9484, 0x0fff, 0x0904, 0x7d6a, 0x7110, 0xd1bc, 0x1904, 0x7d6a, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, - 0x15b0, 0x81ff, 0x15a0, 0x9080, 0x3131, 0x200d, 0x918c, 0xff00, - 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7d42, 0x080c, 0x61d7, - 0x1904, 0x7d42, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, - 0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9dc3, 0x05e8, + 0x15b0, 0x81ff, 0x15a0, 0x9080, 0x3138, 0x200d, 0x918c, 0xff00, + 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7d6a, 0x080c, 0x61de, + 0x1904, 0x7d6a, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, + 0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9ddc, 0x05e8, 0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, - 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xcaf6, - 0x0408, 0x080c, 0x655b, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, - 0x7c2f, 0x11c0, 0x0898, 0x080c, 0x9dc3, 0x2b08, 0x0198, 0x6112, + 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xcb14, + 0x0408, 0x080c, 0x6562, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, + 0x7c57, 0x11c0, 0x0898, 0x080c, 0x9ddc, 0x2b08, 0x0198, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, - 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8411, - 0x080c, 0x894b, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, - 0x090c, 0x894b, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, - 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d2, 0x080c, 0x9e66, + 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439, + 0x080c, 0x8973, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, + 0x090c, 0x8973, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, + 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f, 0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x83c9, 0x080c, 0x894b, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, + 0x83f1, 0x080c, 0x8973, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, - 0x610a, 0x2009, 0x0045, 0x080c, 0x9e93, 0x7817, 0x0140, 0x2001, - 0x19c1, 0x2004, 0x9005, 0x090c, 0x894b, 0x00be, 0x0005, 0x6120, + 0x610a, 0x2009, 0x0045, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001, + 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, - 0x0005, 0x080c, 0x30f6, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, + 0x0005, 0x080c, 0x30fd, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, - 0x000b, 0x0005, 0x7db8, 0x7db9, 0x7db8, 0x7db8, 0x7e18, 0x7e27, + 0x000b, 0x0005, 0x7de0, 0x7de1, 0x7de0, 0x7de0, 0x7e40, 0x7e4f, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, - 0x7e16, 0x700c, 0x7108, 0x080c, 0x2663, 0x1904, 0x7e16, 0x080c, - 0x61d7, 0x1904, 0x7e16, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, - 0x080c, 0x655b, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, - 0x7e36, 0x00ce, 0x05d8, 0x080c, 0x9dc3, 0x2b08, 0x05b8, 0x6112, - 0x080c, 0xbf73, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, - 0x080c, 0x9e93, 0x0458, 0x080c, 0x655b, 0x0148, 0x9086, 0x0004, - 0x0130, 0x080c, 0x6563, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, - 0x9dc3, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0005, - 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9e93, 0x0078, 0x080c, - 0x9dc3, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0004, - 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9e93, 0x00be, 0x0005, - 0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7d97, 0x1130, - 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x9e93, 0x0005, 0x7110, - 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7d97, 0x1130, 0x7124, - 0x610a, 0x2009, 0x008a, 0x080c, 0x9e93, 0x0005, 0x7020, 0x2060, + 0x7e3e, 0x700c, 0x7108, 0x080c, 0x2663, 0x1904, 0x7e3e, 0x080c, + 0x61de, 0x1904, 0x7e3e, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, + 0x080c, 0x6562, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, + 0x7e5e, 0x00ce, 0x05d8, 0x080c, 0x9ddc, 0x2b08, 0x05b8, 0x6112, + 0x080c, 0xbf8c, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, + 0x080c, 0x9eac, 0x0458, 0x080c, 0x6562, 0x0148, 0x9086, 0x0004, + 0x0130, 0x080c, 0x656a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, + 0x9ddc, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0005, + 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9eac, 0x0078, 0x080c, + 0x9ddc, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0004, + 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9eac, 0x00be, 0x0005, + 0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7dbf, 0x1130, + 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x9eac, 0x0005, 0x7110, + 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7dbf, 0x1130, 0x7124, + 0x610a, 0x2009, 0x008a, 0x080c, 0x9eac, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, - 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9e93, 0x7817, - 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x894b, 0x00be, + 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9eac, 0x7817, + 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 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, 0x9dc3, 0x05b8, 0x0066, 0x00c6, 0x0046, + 0xc000, 0x05d0, 0x080c, 0x9ddc, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x15a0, - 0x080c, 0x61d7, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, - 0x6012, 0x080c, 0xbf73, 0x080c, 0x0feb, 0x0510, 0x2900, 0x605a, + 0x080c, 0x61de, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, + 0x6012, 0x080c, 0xbf8c, 0x080c, 0x0feb, 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, 0x8411, 0x080c, 0x894b, 0x00fe, 0x009e, 0x00ce, 0x0005, - 0x080c, 0x9e19, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, + 0x080c, 0x8439, 0x080c, 0x8973, 0x00fe, 0x009e, 0x00ce, 0x0005, + 0x080c, 0x9e32, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, - 0x1904, 0x7f26, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, - 0x9005, 0x1904, 0x7f28, 0x7030, 0x908e, 0x0400, 0x0904, 0x7f28, + 0x1904, 0x7f4e, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, + 0x9005, 0x1904, 0x7f50, 0x7030, 0x908e, 0x0400, 0x0904, 0x7f50, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, - 0x080c, 0x6519, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, + 0x080c, 0x6520, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 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, 0x7e36, + 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7e5e, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, @@ -3869,20 +3874,20 @@ 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x2071, 0x19cb, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, - 0x0000, 0x7026, 0x702b, 0x93a9, 0x7032, 0x7037, 0x9417, 0x703f, - 0xffff, 0x7042, 0x7047, 0x521e, 0x704a, 0x705b, 0x80ab, 0x080c, + 0x0000, 0x7026, 0x702b, 0x93c2, 0x7032, 0x7037, 0x9430, 0x703f, + 0xffff, 0x7042, 0x7047, 0x5225, 0x704a, 0x705b, 0x80d3, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, - 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19cb, 0x1d04, 0x7fff, + 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19cb, 0x1d04, 0x8027, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1510, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0db4, 0x700f, 0x0361, - 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x80f0, 0x7040, + 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x8118, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 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, 0x9524, 0x0010, + 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x953d, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, @@ -3890,22 +3895,22 @@ 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, - 0x0002, 0x8027, 0x8028, 0x8044, 0x00e6, 0x2071, 0x19cb, 0x7018, + 0x0002, 0x804f, 0x8050, 0x806c, 0x00e6, 0x2071, 0x19cb, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19cb, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19cb, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, - 0x00b6, 0x7110, 0x080c, 0x6237, 0x1168, 0xb888, 0x8001, 0x0250, - 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x894b, + 0x00b6, 0x7110, 0x080c, 0x623e, 0x1168, 0xb888, 0x8001, 0x0250, + 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8973, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042, 0x1110, 0x080c, - 0xbe04, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120, - 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xbafe, + 0xbe1d, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120, + 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xbb17, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c, - 0xb7fc, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1819, 0x2004, + 0xb815, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19cb, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19d4, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19cb, @@ -3915,7 +3920,7 @@ 0x2001, 0x19d9, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x10d5, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, - 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7f74, + 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7f9c, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19cb, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19cb, @@ -3930,93 +3935,93 @@ 0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a41, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, - 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x81b1, 0xd0b4, 0x1168, - 0xd0bc, 0x1904, 0x818a, 0x2009, 0x0006, 0x080c, 0x81de, 0x0005, + 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x81d9, 0xd0b4, 0x1168, + 0xd0bc, 0x1904, 0x81b2, 0x2009, 0x0006, 0x080c, 0x8206, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, - 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x81d8, 0x908c, 0x2020, + 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8200, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1875, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, - 0x9e93, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9e93, + 0x9eac, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9eac, 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, 0x81d8, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, + 0x0003, 0x1904, 0x8200, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x007e, 0x87ff, - 0x1120, 0x2009, 0x0042, 0x080c, 0x9e93, 0x0005, 0x6110, 0x00b6, + 0x1120, 0x2009, 0x0042, 0x080c, 0x9eac, 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, 0x9e93, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, - 0x2009, 0x0043, 0x080c, 0x9e93, 0x0cb0, 0x6110, 0x00b6, 0x2158, + 0x0041, 0x080c, 0x9eac, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, + 0x2009, 0x0043, 0x080c, 0x9eac, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, - 0xbafe, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, + 0xbb17, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a41, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, - 0x0208, 0x6206, 0x00ce, 0x080c, 0x66bf, 0x6014, 0x904d, 0x0076, - 0x2039, 0x0000, 0x190c, 0x8127, 0x007e, 0x009e, 0x0005, 0x0156, + 0x0208, 0x6206, 0x00ce, 0x080c, 0x66c6, 0x6014, 0x904d, 0x0076, + 0x2039, 0x0000, 0x190c, 0x814f, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a41, 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, 0x8229, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, + 0x1f04, 0x8251, 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, 0x8253, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, - 0x8253, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, + 0x1220, 0x1f04, 0x827b, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, + 0x827b, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069, 0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, - 0x2069, 0x0200, 0x080c, 0x9c26, 0x0401, 0x080c, 0x9c11, 0x00e9, - 0x080c, 0x9c14, 0x00d1, 0x080c, 0x9c17, 0x00b9, 0x080c, 0x9c1a, - 0x00a1, 0x080c, 0x9c1d, 0x0089, 0x080c, 0x9c20, 0x0071, 0x080c, - 0x9c23, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, + 0x2069, 0x0200, 0x080c, 0x9c3f, 0x0401, 0x080c, 0x9c2a, 0x00e9, + 0x080c, 0x9c2d, 0x00d1, 0x080c, 0x9c30, 0x00b9, 0x080c, 0x9c33, + 0x00a1, 0x080c, 0x9c36, 0x0089, 0x080c, 0x9c39, 0x0071, 0x080c, + 0x9c3c, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, - 0x7804, 0x9084, 0x0007, 0x0002, 0x82c6, 0x82ea, 0x8329, 0x82cc, - 0x82ea, 0x82c6, 0x82c4, 0x82c4, 0x080c, 0x0db4, 0x080c, 0x8090, - 0x080c, 0x894b, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, - 0x0005, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7828, 0x9092, 0x00c8, - 0x1228, 0x8000, 0x782a, 0x080c, 0x5b73, 0x0c88, 0x62c0, 0x080c, - 0x9c2a, 0x080c, 0x5b33, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, - 0x0000, 0x0c28, 0x080c, 0x8090, 0x6220, 0xd2a4, 0x0160, 0x782b, + 0x7804, 0x9084, 0x0007, 0x0002, 0x82ee, 0x8312, 0x8351, 0x82f4, + 0x8312, 0x82ee, 0x82ec, 0x82ec, 0x080c, 0x0db4, 0x080c, 0x80b8, + 0x080c, 0x8973, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, + 0x0005, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x7828, 0x9092, 0x00c8, + 0x1228, 0x8000, 0x782a, 0x080c, 0x5b7a, 0x0c88, 0x62c0, 0x080c, + 0x9c43, 0x080c, 0x5b3a, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, + 0x0000, 0x0c28, 0x080c, 0x80b8, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013, 0x080c, - 0x9e93, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db4, + 0x9eac, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db4, 0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x29ca, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, - 0x0db4, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x894b, - 0x0c00, 0x080c, 0x936f, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, - 0x9c2a, 0x080c, 0xd8a9, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00ce, + 0x0db4, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8973, + 0x0c00, 0x080c, 0x9388, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, + 0x9c43, 0x080c, 0xd8c9, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00ce, 0x0880, 0x2001, 0x19d4, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013, - 0x080c, 0x9ee5, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, + 0x080c, 0x9efe, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, 0x090c, 0x0db4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x29ca, 0x02f0, 0x00b6, 0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0db4, 0xb800, 0xc0dc, - 0xb802, 0x7924, 0x2160, 0x080c, 0x9e19, 0xb93c, 0x81ff, 0x090c, + 0xb802, 0x7924, 0x2160, 0x080c, 0x9e32, 0xb93c, 0x81ff, 0x090c, 0x0db4, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, - 0x00ce, 0x00be, 0x080c, 0x894b, 0x0868, 0x080c, 0x936f, 0x0850, - 0x2011, 0x0130, 0x2214, 0x080c, 0x9c2a, 0x080c, 0xd8a9, 0x7824, - 0x9065, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00de, 0x00ce, 0x00be, - 0x0804, 0x833a, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, + 0x00ce, 0x00be, 0x080c, 0x8973, 0x0868, 0x080c, 0x9388, 0x0850, + 0x2011, 0x0130, 0x2214, 0x080c, 0x9c43, 0x080c, 0xd8c9, 0x7824, + 0x9065, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00de, 0x00ce, 0x00be, + 0x0804, 0x8362, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d4a, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, - 0x9e93, 0x00ce, 0x0005, 0x2011, 0x19d7, 0x2013, 0x0000, 0x0cc8, + 0x9eac, 0x00ce, 0x0005, 0x2011, 0x19d7, 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, 0x9e93, 0x08a0, 0x7848, 0xc085, 0x784a, + 0x2009, 0x004a, 0x080c, 0x9eac, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b8, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19b8, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, - 0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x894b, 0x00de, + 0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8973, 0x00de, 0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19b8, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, @@ -4029,156 +4034,156 @@ 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19b8, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, - 0x0904, 0x84b8, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x84b3, - 0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x84b3, 0x703c, 0x9c06, - 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf, 0x7033, 0x0000, + 0x0904, 0x84e0, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x84db, + 0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x84db, 0x703c, 0x9c06, + 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 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, 0xbafe, 0x01c8, 0x6014, 0x2048, 0x6020, + 0x600f, 0x0000, 0x080c, 0xbb17, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, - 0x0016, 0x0036, 0x0076, 0x080c, 0xbded, 0x080c, 0xd7b3, 0x080c, - 0x6885, 0x007e, 0x003e, 0x001e, 0x080c, 0xbce7, 0x080c, 0x9e49, - 0x00ce, 0x0804, 0x8457, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8457, - 0x85ff, 0x0120, 0x0036, 0x080c, 0x8a26, 0x003e, 0x012e, 0x000e, + 0x0016, 0x0036, 0x0076, 0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c, + 0x688c, 0x007e, 0x003e, 0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62, + 0x00ce, 0x0804, 0x847f, 0x2c78, 0x600c, 0x2060, 0x0804, 0x847f, + 0x85ff, 0x0120, 0x0036, 0x080c, 0x8a4e, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xd7b3, 0x080c, 0xd4b5, + 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xd7d3, 0x080c, 0xd4d5, 0x007e, 0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x000a, 0x0904, - 0x849d, 0x0804, 0x849b, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, + 0x84c5, 0x0804, 0x84c3, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19b8, 0x7838, - 0x9065, 0x0904, 0x8533, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, - 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf, 0x7833, + 0x9065, 0x0904, 0x855b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, + 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, - 0xbafe, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, + 0xbb17, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, 0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180, 0x2001, 0x1959, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, - 0xa877, 0x0000, 0x080c, 0x6878, 0x080c, 0xbce7, 0x080c, 0x9e49, - 0x000e, 0x0804, 0x84f0, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, + 0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62, + 0x000e, 0x0804, 0x8518, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1118, 0x080c, 0xd4b5, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8, - 0x08e0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x8632, + 0x1118, 0x080c, 0xd4d5, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8, + 0x08e0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x865a, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x19b8, - 0x2091, 0x8000, 0x080c, 0x86c9, 0x080c, 0x8757, 0x012e, 0x00fe, + 0x2091, 0x8000, 0x080c, 0x86f1, 0x080c, 0x877f, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, - 0x2660, 0x2678, 0x8cff, 0x0904, 0x85f7, 0x6010, 0x2058, 0xb8a0, - 0x9206, 0x1904, 0x85f2, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904, - 0x85f2, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4, - 0x1508, 0x080c, 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, - 0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, + 0x2660, 0x2678, 0x8cff, 0x0904, 0x861f, 0x6010, 0x2058, 0xb8a0, + 0x9206, 0x1904, 0x861a, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904, + 0x861a, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4, + 0x1508, 0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, + 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, - 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x85f2, 0x7014, + 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x861a, 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, 0xbafe, 0x01e8, 0x6020, 0x9086, - 0x0003, 0x1580, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0098, + 0x0000, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01e8, 0x6020, 0x9086, + 0x0003, 0x1580, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, - 0x080c, 0xbded, 0x080c, 0xd7b3, 0x080c, 0x6885, 0x008e, 0x003e, - 0x001e, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x080c, 0x9797, 0x00ce, - 0x0804, 0x8572, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8572, 0x012e, + 0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c, 0x688c, 0x008e, 0x003e, + 0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce, + 0x0804, 0x859a, 0x2c78, 0x600c, 0x2060, 0x0804, 0x859a, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, - 0x0086, 0x080c, 0xd7b3, 0x080c, 0xd4b5, 0x008e, 0x003e, 0x001e, - 0x08d0, 0x080c, 0xa7a7, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004, - 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x85d8, 0x9086, 0x008b, - 0x0904, 0x85d8, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, + 0x0086, 0x080c, 0xd7d3, 0x080c, 0xd4d5, 0x008e, 0x003e, 0x001e, + 0x08d0, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004, + 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x8600, 0x9086, 0x008b, + 0x0904, 0x8600, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, 0x09b0, - 0x0804, 0x85eb, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126, - 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x86c2, + 0x0804, 0x8613, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126, + 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x86ea, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b8, 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, 0x616a, 0x0904, - 0x86be, 0x7624, 0x86ff, 0x0904, 0x86ad, 0x9680, 0x0005, 0x2004, + 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904, + 0x86e6, 0x7624, 0x86ff, 0x0904, 0x86d5, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0560, - 0x080c, 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, + 0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, - 0x080c, 0x9e49, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, - 0x0009, 0x630a, 0x00ce, 0x0804, 0x8665, 0x89ff, 0x0158, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbded, 0x080c, 0xd7b3, - 0x080c, 0x6885, 0x080c, 0x9797, 0x0804, 0x8665, 0x006e, 0x00de, + 0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, + 0x0009, 0x630a, 0x00ce, 0x0804, 0x868d, 0x89ff, 0x0158, 0xa867, + 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06, 0x080c, 0xd7d3, + 0x080c, 0x688c, 0x080c, 0x97b0, 0x0804, 0x868d, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814, - 0x9065, 0x0904, 0x872a, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, + 0x9065, 0x0904, 0x8752, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, - 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7827, + 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, - 0x080c, 0x6511, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, - 0x6014, 0x2048, 0x080c, 0xbafc, 0x01b0, 0x6020, 0x9086, 0x0003, - 0x1508, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0060, 0x080c, - 0x6511, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, - 0x6885, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x080c, 0x9797, 0x000e, - 0x0804, 0x86d0, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, - 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd4b5, - 0x0c50, 0x080c, 0xa7a7, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, + 0x080c, 0x6518, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, + 0x6014, 0x2048, 0x080c, 0xbb15, 0x01b0, 0x6020, 0x9086, 0x0003, + 0x1508, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0060, 0x080c, + 0x6518, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, + 0x688c, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x000e, + 0x0804, 0x86f8, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, + 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd4d5, + 0x0c50, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, - 0x87d7, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, - 0xc0dc, 0xb802, 0x080c, 0x616a, 0x0904, 0x87d4, 0x7e24, 0x86ff, - 0x0904, 0x87c7, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x87c7, - 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x87be, 0x080c, - 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7827, + 0x87ff, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, + 0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904, 0x87fc, 0x7e24, 0x86ff, + 0x0904, 0x87ef, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x87ef, + 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x87e6, 0x080c, + 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1959, 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, - 0x600f, 0x0000, 0x080c, 0x9e49, 0x00ce, 0x0048, 0x00de, 0x00c6, - 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x876a, 0x89ff, - 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6885, - 0x080c, 0x9797, 0x0804, 0x876a, 0x000e, 0x0804, 0x875e, 0x781e, + 0x600f, 0x0000, 0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6, + 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x8792, 0x89ff, + 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x688c, + 0x080c, 0x97b0, 0x0804, 0x8792, 0x000e, 0x0804, 0x8786, 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b8, 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, 0x9393, 0x78c3, - 0x0000, 0x080c, 0x98c1, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, + 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x93ac, 0x78c3, + 0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, - 0x7827, 0x0001, 0x080c, 0x98c1, 0x003e, 0x080c, 0x616a, 0x00c6, - 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9e19, - 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbded, - 0x080c, 0x6885, 0x080c, 0x9797, 0x00fe, 0x0005, 0x00b6, 0x00e6, + 0x7827, 0x0001, 0x080c, 0x98da, 0x003e, 0x080c, 0x6171, 0x00c6, + 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9e32, + 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06, + 0x080c, 0x688c, 0x080c, 0x97b0, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19b8, 0x7004, 0x9084, 0x0007, - 0x0002, 0x8863, 0x8867, 0x887e, 0x88a7, 0x88e5, 0x8863, 0x887e, - 0x8861, 0x080c, 0x0db4, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, + 0x0002, 0x888b, 0x888f, 0x88a6, 0x88cf, 0x890d, 0x888b, 0x88a6, + 0x8889, 0x080c, 0x0db4, 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, 0x616a, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, + 0x080c, 0x6171, 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, 0x894b, 0x0ca8, 0x7218, 0x721e, 0x080c, - 0x894b, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x8a26, 0x0c58, 0x7024, - 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x9797, 0x600c, + 0x0120, 0x721e, 0x080c, 0x8973, 0x0ca8, 0x7218, 0x721e, 0x080c, + 0x8973, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x8a4e, 0x0c58, 0x7024, + 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, - 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0x9797, 0x600c, 0x9015, + 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, - 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x616a, - 0xb800, 0xc0dc, 0xb802, 0x080c, 0x9797, 0x701c, 0x9065, 0x0138, + 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x6171, + 0xb800, 0xc0dc, 0xb802, 0x080c, 0x97b0, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, - 0x080c, 0x9797, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, - 0x080c, 0x98c1, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, + 0x080c, 0x97b0, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, + 0x080c, 0x98da, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19b8, 0x6830, 0x9084, - 0x0003, 0x0002, 0x8908, 0x890a, 0x892e, 0x8906, 0x080c, 0x0db4, + 0x0003, 0x0002, 0x8930, 0x8932, 0x8956, 0x892e, 0x080c, 0x0db4, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x19d7, 0x2013, 0x0000, @@ -4188,153 +4193,153 @@ 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, - 0xc1ec, 0x2102, 0x080c, 0x8a26, 0x2001, 0x19c4, 0x2004, 0x9086, + 0xc1ec, 0x2102, 0x080c, 0x8a4e, 0x2001, 0x19c4, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19b8, 0x6804, 0x9084, 0x0007, - 0x0002, 0x896b, 0x8a0e, 0x8a0e, 0x8a0e, 0x8a0e, 0x8a10, 0x8a0e, - 0x8969, 0x080c, 0x0db4, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, + 0x0002, 0x8993, 0x8a36, 0x8a36, 0x8a36, 0x8a36, 0x8a38, 0x8a36, + 0x8991, 0x080c, 0x0db4, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, - 0x0000, 0x080c, 0x8a7c, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, - 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8a7c, + 0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, + 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, - 0x0904, 0x89fa, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, - 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x89fa, 0x0028, 0x6818, - 0x920e, 0x0904, 0x89fa, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, + 0x0904, 0x8a22, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, + 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x8a22, 0x0028, 0x6818, + 0x920e, 0x0904, 0x8a22, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, - 0x080c, 0x9df0, 0x0904, 0x89fa, 0x8318, 0xbb3e, 0x6116, 0x2b10, + 0x080c, 0x9e09, 0x0904, 0x8a22, 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, 0x8fb4, 0x2069, 0x19b8, 0xbb00, 0xc3dd, 0xbb02, + 0x0240, 0x080c, 0x8fdc, 0x2069, 0x19b8, 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, - 0x9c4a, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, + 0x9c63, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b, - 0x0000, 0x080c, 0x8a7c, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, + 0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6, 0x2069, 0x19b8, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c, - 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x895a, 0x2069, + 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8982, 0x2069, 0x19b8, 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, 0x1ae8, 0x1178, 0x012e, 0x080c, 0x91e1, 0x00de, + 0x002e, 0x080c, 0x1ae8, 0x1178, 0x012e, 0x080c, 0x9209, 0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, - 0x7057, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, + 0x7062, 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, 0x8a1e, 0x6020, 0x9084, 0x000f, 0x000b, - 0x0005, 0x8a90, 0x8a95, 0x8eee, 0x8f7d, 0x8a95, 0x8eee, 0x8f7d, - 0x8a90, 0x8a95, 0x8a90, 0x8a90, 0x8a90, 0x8a90, 0x8a90, 0x8a90, - 0x080c, 0x8846, 0x080c, 0x894b, 0x0005, 0x00b6, 0x0156, 0x0136, + 0x0006, 0x0958, 0x0804, 0x8a46, 0x6020, 0x9084, 0x000f, 0x000b, + 0x0005, 0x8ab8, 0x8abd, 0x8f16, 0x8fa5, 0x8abd, 0x8f16, 0x8fa5, + 0x8ab8, 0x8abd, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, + 0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, - 0x0040, 0x1a04, 0x8b01, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8c78, - 0x8cb3, 0x8cdc, 0x8d7f, 0x8da0, 0x8da6, 0x8db3, 0x8dbb, 0x8dc7, - 0x8dcd, 0x8dde, 0x8dcd, 0x8e35, 0x8dbb, 0x8e41, 0x8e47, 0x8dc7, - 0x8e47, 0x8e53, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff, - 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x9576, 0x9599, 0x95aa, - 0x95ca, 0x95fc, 0x8db3, 0x8aff, 0x8db3, 0x8dcd, 0x8aff, 0x8cdc, - 0x8d7f, 0x8aff, 0x99ae, 0x8dcd, 0x8aff, 0x99ca, 0x8dcd, 0x8aff, - 0x8dc7, 0x8c72, 0x8b22, 0x8aff, 0x99e6, 0x9a53, 0x9b2a, 0x8aff, - 0x9b37, 0x8db0, 0x9b62, 0x8aff, 0x9606, 0x9b8f, 0x8aff, 0x080c, + 0x0040, 0x1a04, 0x8b29, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8ca0, + 0x8cdb, 0x8d04, 0x8da7, 0x8dc8, 0x8dce, 0x8ddb, 0x8de3, 0x8def, + 0x8df5, 0x8e06, 0x8df5, 0x8e5d, 0x8de3, 0x8e69, 0x8e6f, 0x8def, + 0x8e6f, 0x8e7b, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, + 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x958f, 0x95b2, 0x95c3, + 0x95e3, 0x9615, 0x8ddb, 0x8b27, 0x8ddb, 0x8df5, 0x8b27, 0x8d04, + 0x8da7, 0x8b27, 0x99c7, 0x8df5, 0x8b27, 0x99e3, 0x8df5, 0x8b27, + 0x8def, 0x8c9a, 0x8b4a, 0x8b27, 0x99ff, 0x9a6c, 0x9b43, 0x8b27, + 0x9b50, 0x8dd8, 0x9b7b, 0x8b27, 0x961f, 0x9ba8, 0x8b27, 0x080c, 0x0db4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, - 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8b20, 0x8b20, - 0x8b20, 0x8b49, 0x8bf5, 0x8c00, 0x8b20, 0x8b20, 0x8b20, 0x8c47, - 0x8c53, 0x8b64, 0x8b20, 0x8b7f, 0x8bb3, 0x9d0c, 0x9d51, 0x8dcd, - 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x8e66, 0x7003, 0x2414, + 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8b48, 0x8b48, + 0x8b48, 0x8b71, 0x8c1d, 0x8c28, 0x8b48, 0x8b48, 0x8b48, 0x8c6f, + 0x8c7b, 0x8b8c, 0x8b48, 0x8ba7, 0x8bdb, 0x9d25, 0x9d6a, 0x8df5, + 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, - 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x9367, + 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x9380, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be, - 0x080c, 0x9d98, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001, - 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e66, 0x7003, 0x0500, 0x7814, + 0x080c, 0x9db1, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001, + 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c, - 0x9367, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e66, + 0x9380, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e, - 0x60c3, 0x0010, 0x080c, 0x9367, 0x009e, 0x00de, 0x0005, 0x00d6, - 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e66, 0x20e9, 0x0000, + 0x60c3, 0x0010, 0x080c, 0x9380, 0x009e, 0x00de, 0x0005, 0x00d6, + 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e8e, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c, - 0x224d, 0x080c, 0xc800, 0x9006, 0x080c, 0x224d, 0x001e, 0xa804, - 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x9367, 0x012e, + 0x224d, 0x080c, 0xc81a, 0x9006, 0x080c, 0x224d, 0x001e, 0xa804, + 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x9380, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, - 0x080c, 0x8eb1, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, + 0x080c, 0x8ed9, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, - 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, 0xc800, 0x001e, + 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, 0xc81a, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048, - 0x080c, 0x0f9d, 0x080c, 0x9367, 0x012e, 0x009e, 0x00de, 0x0005, + 0x080c, 0x0f9d, 0x080c, 0x9380, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004, - 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8e66, 0x7003, - 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x9367, - 0x00d6, 0x00e6, 0x080c, 0x8eb1, 0x7814, 0x9084, 0xff00, 0x2073, + 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8e8e, 0x7003, + 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x9380, + 0x00d6, 0x00e6, 0x080c, 0x8ed9, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, - 0x8e70, 0x1f04, 0x8c16, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, - 0x8d68, 0x8e70, 0x1f04, 0x8c1f, 0x2069, 0x1984, 0x9086, 0xdf00, + 0x8e70, 0x1f04, 0x8c3e, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, + 0x8d68, 0x8e70, 0x1f04, 0x8c47, 0x2069, 0x1984, 0x9086, 0xdf00, 0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, - 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8c2d, - 0x60c3, 0x004c, 0x080c, 0x9367, 0x00ee, 0x00de, 0x0005, 0x080c, - 0x8e66, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x9367, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8eb1, + 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8c55, + 0x60c3, 0x004c, 0x080c, 0x9380, 0x00ee, 0x00de, 0x0005, 0x080c, + 0x8e8e, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, + 0x0008, 0x0804, 0x9380, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, - 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9367, 0x001e, 0x002e, - 0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x9367, - 0x080c, 0x8e66, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084, + 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9380, 0x001e, 0x002e, + 0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x9380, + 0x080c, 0x8e8e, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2696, 0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, - 0x4003, 0x080c, 0x9d98, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x4003, 0x080c, 0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, - 0x001c, 0x0804, 0x9367, 0x080c, 0x8e66, 0x7003, 0x0500, 0x080c, - 0x9d98, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, + 0x001c, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x080c, + 0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, - 0x60c3, 0x0010, 0x0804, 0x9367, 0x080c, 0x8e66, 0x9006, 0x080c, - 0x6525, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c, + 0x60c3, 0x0010, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x9006, 0x080c, + 0x652c, 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, 0x8d47, 0x00d6, 0x2069, 0x193d, 0x2001, 0x1836, + 0x007e, 0x1904, 0x8d6f, 0x00d6, 0x2069, 0x193d, 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, - 0x6fa7, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, + 0x6fb2, 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, 0x9c11, + 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9c2a, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, - 0x5383, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001, + 0x538a, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009, 0x0002, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x26d7, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, - 0x025a, 0x4003, 0x080c, 0x9c11, 0x20a1, 0x024e, 0x20a9, 0x0008, - 0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9367, 0x080c, - 0x8e66, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, + 0x025a, 0x4003, 0x080c, 0x9c2a, 0x20a1, 0x024e, 0x20a9, 0x0008, + 0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9380, 0x080c, + 0x8e8e, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010, 0x9085, 0x0002, - 0x00d6, 0x0804, 0x8e16, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9367, - 0x080c, 0x8e66, 0x7003, 0x5000, 0x0804, 0x8cf6, 0x080c, 0x8e66, - 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9367, - 0x080c, 0x8ea8, 0x0010, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x60c3, - 0x0004, 0x0804, 0x9367, 0x080c, 0x8eb1, 0x7003, 0x0100, 0x700b, - 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9367, 0x080c, - 0x8eb1, 0x7003, 0x0200, 0x0804, 0x8cf6, 0x080c, 0x8eb1, 0x7003, + 0x00d6, 0x0804, 0x8e3e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9380, + 0x080c, 0x8e8e, 0x7003, 0x5000, 0x0804, 0x8d1e, 0x080c, 0x8e8e, + 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9380, + 0x080c, 0x8ed0, 0x0010, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x60c3, + 0x0004, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b, + 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9380, 0x080c, + 0x8ed9, 0x7003, 0x0200, 0x0804, 0x8d1e, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, - 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x00d6, 0x080c, - 0x8eb1, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, + 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x00d6, 0x080c, + 0x8ed9, 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, @@ -4344,56 +4349,56 @@ 0x1873, 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, 0x9367, 0x080c, 0x8eb1, 0x7003, + 0x60c3, 0x0014, 0x00de, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804, - 0x9367, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x0804, 0x8c7c, 0x080c, - 0x8eb1, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, - 0x0008, 0x0804, 0x9367, 0x080c, 0x8eb1, 0x7003, 0x0100, 0x700b, - 0x000b, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0026, 0x00d6, 0x0036, + 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x0804, 0x8ca4, 0x080c, + 0x8ed9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, + 0x0008, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b, + 0x000b, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, - 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x9c26, + 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x9c3f, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e, - 0x00de, 0x080c, 0x9355, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, - 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x9c26, + 0x00de, 0x080c, 0x936e, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, + 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x9c3f, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 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, 0x9c26, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, + 0x0100, 0x080c, 0x9c3f, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de, - 0x080c, 0x9355, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, - 0x024c, 0x002e, 0x0005, 0x080c, 0x9355, 0x721a, 0x7a08, 0x7222, + 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, + 0x024c, 0x002e, 0x0005, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, - 0x8f1f, 0x8f2e, 0x8f39, 0x8f1d, 0x8f1d, 0x8f1d, 0x8f1f, 0x8f1d, - 0x8f1d, 0x8f1d, 0x8f1d, 0x8f1d, 0x8f1d, 0x080c, 0x0db4, 0x0411, + 0x8f47, 0x8f56, 0x8f61, 0x8f45, 0x8f45, 0x8f45, 0x8f47, 0x8f45, + 0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x080c, 0x0db4, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, - 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9367, 0x0431, 0x7808, + 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9380, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804, - 0x9367, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, - 0x0804, 0x9367, 0x0026, 0x080c, 0x9c26, 0xb810, 0x9085, 0x8100, + 0x9380, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, + 0x0804, 0x9380, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, - 0x700e, 0x7013, 0x0009, 0x0804, 0x8e81, 0x0026, 0x080c, 0x9c26, + 0x700e, 0x7013, 0x0009, 0x0804, 0x8ea9, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, - 0x8ee3, 0x0026, 0x080c, 0x9c26, 0xb810, 0x9085, 0x8500, 0x7002, + 0x8f0b, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, - 0x2001, 0x0099, 0x7012, 0x0804, 0x8ee3, 0x00b6, 0x00c6, 0x00d6, + 0x2001, 0x0099, 0x7012, 0x0804, 0x8f0b, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0db4, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, - 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8fb4, - 0x9070, 0x9043, 0x9192, 0x8fb2, 0x8fb2, 0x8fb2, 0x8fb2, 0x8fb2, - 0x8fb2, 0x8fb2, 0x9774, 0x977c, 0x9784, 0x978c, 0x8fb2, 0x9b6e, - 0x8fb2, 0x976c, 0x080c, 0x0db4, 0x0096, 0x780b, 0xffff, 0x080c, - 0x901f, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff, + 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8fdc, + 0x9098, 0x906b, 0x91ba, 0x8fda, 0x8fda, 0x8fda, 0x8fda, 0x8fda, + 0x8fda, 0x8fda, 0x978d, 0x9795, 0x979d, 0x97a5, 0x8fda, 0x9b87, + 0x8fda, 0x9785, 0x080c, 0x0db4, 0x0096, 0x780b, 0xffff, 0x080c, + 0x9047, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, 0x7036, 0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, @@ -4412,19 +4417,19 @@ 0x6a78, 0x720a, 0x6a7c, 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, 0x9367, 0x6813, 0x0008, + 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0x9380, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, - 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0889, 0x080c, 0x9355, + 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0889, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, - 0x00d6, 0x0096, 0x080c, 0x9170, 0x7814, 0x2048, 0x080c, 0xbafc, + 0x00d6, 0x0096, 0x080c, 0x9198, 0x7814, 0x2048, 0x080c, 0xbb15, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, 0x9006, - 0x001b, 0x009e, 0x00de, 0x0005, 0x908e, 0x90f7, 0x9107, 0x912d, - 0x9139, 0x914a, 0x9152, 0x908c, 0x080c, 0x0db4, 0x0016, 0x0036, + 0x001b, 0x009e, 0x00de, 0x0005, 0x90b6, 0x911f, 0x912f, 0x9155, + 0x9161, 0x9172, 0x917a, 0x90b4, 0x080c, 0x0db4, 0x0016, 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e, - 0x003e, 0x001e, 0x2001, 0x1982, 0x2004, 0x60c2, 0x0804, 0x9367, + 0x003e, 0x001e, 0x2001, 0x1982, 0x2004, 0x60c2, 0x0804, 0x9380, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0db4, 0xaba8, 0x7824, - 0xd0cc, 0x1904, 0x90f4, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e, + 0xd0cc, 0x1904, 0x911c, 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, @@ -4432,2071 +4437,2070 @@ 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, 0x9367, 0xc3e5, 0x0804, 0x90b3, 0x2011, + 0x003e, 0x001e, 0x0804, 0x9380, 0xc3e5, 0x0804, 0x90db, 0x2011, 0x0008, 0x2001, 0x180f, 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, 0x9367, 0x2011, 0x0028, 0x7824, - 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x9367, 0x0cd0, + 0x2500, 0x60c3, 0x0032, 0x0804, 0x9380, 0x2011, 0x0028, 0x7824, + 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x9380, 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, - 0x0804, 0x9367, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, + 0x0804, 0x9380, 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, 0x6878, 0x700a, 0x687c, 0x700e, 0x7824, - 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x9355, 0x721a, 0x7a08, + 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, - 0x001e, 0x0005, 0x91a2, 0x91a2, 0x91a4, 0x91a2, 0x91a2, 0x91a2, - 0x91be, 0x91a2, 0x080c, 0x0db4, 0x7914, 0x918c, 0x08ff, 0x918d, + 0x001e, 0x0005, 0x91ca, 0x91ca, 0x91cc, 0x91ca, 0x91ca, 0x91ca, + 0x91e6, 0x91ca, 0x080c, 0x0db4, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, - 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9367, 0x2009, 0x0003, - 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x9c26, 0x001e, + 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9380, 0x2009, 0x0003, + 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x9c3f, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, - 0x7116, 0x080c, 0x9355, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, + 0x7116, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x90be, 0x0006, - 0x0904, 0x92c4, 0x90be, 0x000a, 0x1904, 0x9280, 0x609f, 0x0000, - 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00, + 0x0904, 0x92dd, 0x90be, 0x000a, 0x1904, 0x9299, 0xb8b0, 0x609e, + 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, - 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510, + 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 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, 0x9c0b, 0x2009, 0x07d0, 0x60c4, 0x9084, - 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8095, 0x003e, - 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, - 0x7804, 0x9086, 0x0040, 0x0904, 0x9300, 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, 0x9c0b, - 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, - 0x1b58, 0x080c, 0x8095, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, - 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, - 0x0003, 0x9086, 0x0002, 0x0904, 0x931c, 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, 0x9be8, 0x0804, 0x92b0, - 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, 0x9293, 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, 0x9c0b, 0x0804, - 0x92b0, 0x080c, 0x9be8, 0x0804, 0x92b0, 0x7a10, 0x00b6, 0x2258, - 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, - 0x00d6, 0x2069, 0x19b8, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, - 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8087, 0x0005, 0x0016, - 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, - 0x0089, 0x080c, 0x8087, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, - 0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c1, 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, 0x6fa7, 0x11e8, 0x2001, 0x19d4, 0x2004, 0x9005, - 0x1904, 0x93f9, 0x0066, 0x2031, 0x0001, 0x080c, 0x7057, 0x006e, - 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, - 0x090c, 0x0db4, 0x080c, 0x8087, 0x0460, 0x00c6, 0x2061, 0x19b8, - 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x9393, 0x080c, - 0x2b24, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, 0x0008, 0x1258, - 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8087, - 0x080c, 0x938a, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, - 0xd8a9, 0x080c, 0x8090, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00ce, - 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19d4, - 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, - 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8087, 0x080c, - 0x5b89, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, - 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x809d, 0x2071, - 0x19b8, 0x713c, 0x81ff, 0x0904, 0x9489, 0x2061, 0x0100, 0x2069, - 0x0140, 0x080c, 0x6fa7, 0x11b0, 0x0036, 0x2019, 0x0002, 0x080c, - 0x96bf, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8a9, 0x2009, 0x004a, - 0x080c, 0x9e93, 0x0066, 0x2031, 0x0001, 0x080c, 0x7057, 0x006e, - 0x0804, 0x9489, 0x080c, 0x9495, 0x0904, 0x9489, 0x6904, 0xd1f4, - 0x0904, 0x9490, 0x080c, 0x2b24, 0x00c6, 0x703c, 0x9065, 0x090c, - 0x0db4, 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, 0x2a77, 0x6014, 0x9084, - 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, - 0x080c, 0x9e93, 0x0070, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf, - 0x003e, 0x713c, 0x2160, 0x080c, 0xd8a9, 0x2009, 0x004a, 0x080c, - 0x9e93, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, - 0xd1ec, 0x1904, 0x944a, 0x0804, 0x944c, 0x00d6, 0x00c6, 0x0096, - 0x703c, 0x9065, 0x090c, 0x0db4, 0x2001, 0x1836, 0x2004, 0xd09c, - 0x1904, 0x9521, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904, - 0x9521, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9521, 0x2001, - 0x020b, 0x2004, 0xd0fc, 0x0904, 0x9521, 0xd08c, 0x0904, 0x9521, - 0x2009, 0x1a50, 0x2104, 0x8000, 0x0208, 0x200a, 0x2069, 0x0100, - 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, - 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, 0x2001, 0x0306, - 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a36, - 0x2003, 0x0000, 0x2001, 0x1a3f, 0x2003, 0x0000, 0x6a88, 0x698c, - 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1a5c, 0x0040, 0x6014, - 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, - 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ae8, 0x190c, 0x0db4, - 0x012e, 0x0090, 0x2009, 0x1a51, 0x2104, 0x8000, 0x0208, 0x200a, - 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, - 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, - 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, - 0x2009, 0x07d0, 0x080c, 0x8095, 0x9006, 0x009e, 0x00ce, 0x00de, - 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19b8, - 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, 0x19b8, 0x7018, 0x2058, - 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, - 0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, - 0x6369, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x8e66, - 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, - 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, - 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, - 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, - 0x9367, 0x080c, 0x8e66, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, - 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, - 0x0804, 0x9367, 0x0156, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x2011, - 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, - 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, - 0x0002, 0x9290, 0x0002, 0x1f04, 0x95bb, 0x60c3, 0x001c, 0x015e, - 0x0804, 0x9367, 0x0016, 0x0026, 0x080c, 0x8e8d, 0x080c, 0x8e9f, - 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, 0x9367, 0x002e, - 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x9c11, 0x20a1, - 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8e66, 0x7003, 0x6200, - 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0016, 0x0026, - 0x080c, 0x8e66, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, - 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, - 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, - 0x60c2, 0x080c, 0x9367, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x700c, 0x2060, - 0x8cff, 0x0178, 0x080c, 0xbd04, 0x1110, 0x080c, 0xa7a7, 0x600c, - 0x0006, 0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x9797, 0x00ce, - 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, - 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, - 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, - 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, - 0x19b8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0x9393, 0x6ac0, - 0x68c3, 0x0000, 0x080c, 0x8090, 0x00c6, 0x2061, 0x0100, 0x080c, - 0x9c2a, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, - 0x9e93, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, - 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8090, 0x6814, - 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, - 0x0000, 0x2011, 0x5b33, 0x080c, 0x8010, 0x20a9, 0x01f4, 0x0009, - 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, - 0x4000, 0x190c, 0x2b24, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, - 0x0010, 0x1f04, 0x96a1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, - 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x0005, 0x0126, - 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, - 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, - 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, 0x703c, - 0x2060, 0x8cff, 0x0904, 0x974d, 0x9386, 0x0002, 0x1128, 0x6814, - 0x9084, 0x0002, 0x0904, 0x974d, 0x68af, 0x95f5, 0x6817, 0x0010, - 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, - 0x809d, 0x080c, 0x1e90, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e2f, - 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, - 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, - 0x0090, 0x2071, 0x1a36, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, - 0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, - 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, - 0x1952, 0x200c, 0x080c, 0x0e2f, 0x004e, 0x20a9, 0x03e8, 0x6824, - 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, - 0x2b24, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, - 0x9727, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2b14, 0x9006, 0x080c, 0x2b14, 0x6827, 0x4000, 0x6824, 0x83ff, - 0x1120, 0x2009, 0x0049, 0x080c, 0x9e93, 0x000e, 0x001e, 0x002e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, - 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, 0x012e, - 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, - 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x901f, 0x7854, 0x7032, - 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x901f, 0x7854, 0x7032, - 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x901f, 0x7854, 0x7032, - 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x901f, 0x7854, 0x7032, - 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x901f, 0x7854, 0x7032, - 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9367, 0x00e6, - 0x2071, 0x19b8, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, 0x2660, 0x2678, - 0x2039, 0x0001, 0x87ff, 0x0904, 0x983c, 0x8cff, 0x0904, 0x983c, - 0x6020, 0x9086, 0x0006, 0x1904, 0x9837, 0x88ff, 0x0138, 0x2800, - 0x9c06, 0x1904, 0x9837, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, - 0x1904, 0x9837, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x9837, - 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, - 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8090, 0x080c, - 0x98c1, 0x7027, 0x0000, 0x0428, 0x080c, 0x8090, 0x6820, 0xd0b4, - 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, - 0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, - 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, - 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, - 0x003e, 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, 0xbafc, 0x0110, 0x080c, 0xd4b5, 0x009e, 0x080c, 0x9e49, - 0x080c, 0x9797, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x97b2, 0x2c78, - 0x600c, 0x2060, 0x0804, 0x97b2, 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, - 0x19b8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98b0, 0x6020, - 0x9086, 0x0006, 0x1904, 0x98ab, 0x87ff, 0x0128, 0x2700, 0x9c06, - 0x1904, 0x98ab, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, - 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, - 0x0001, 0x080c, 0x96bf, 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, - 0xbafc, 0x0110, 0x080c, 0xd4b5, 0x080c, 0x9e49, 0x87ff, 0x1198, - 0x00ce, 0x0804, 0x985c, 0x2c78, 0x600c, 0x2060, 0x0804, 0x985c, - 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, - 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, - 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x2001, 0x1800, 0x2004, 0x9086, - 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, - 0x2091, 0x8000, 0x2071, 0x19b8, 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, 0x19b8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x999d, - 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9998, - 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, - 0x9974, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7027, - 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, - 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 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, 0xbcf3, 0x1158, 0x080c, 0x2ffc, 0x080c, 0xbd04, - 0x11f0, 0x080c, 0xa7a7, 0x00d8, 0x080c, 0x98c1, 0x08c0, 0x080c, - 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0090, 0x6014, 0x2048, 0x080c, - 0xbafc, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, - 0xab7a, 0xa877, 0x0000, 0x080c, 0x6878, 0x080c, 0xbce7, 0x080c, - 0xbf6b, 0x080c, 0x9e49, 0x080c, 0x9797, 0x00ce, 0x0804, 0x991d, - 0x2c78, 0x600c, 0x2060, 0x0804, 0x991d, 0x012e, 0x000e, 0x002e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1d20, 0x080c, 0xd4b5, 0x0c08, 0x00d6, 0x080c, - 0x8eb1, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, - 0x0001, 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, - 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x9367, - 0x00de, 0x0005, 0x080c, 0x8eb1, 0x700b, 0x0800, 0x7814, 0x9084, - 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, - 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858, 0x9084, - 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9367, 0x00b6, 0x00d6, - 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xc171, 0x00de, - 0x1904, 0x9a4b, 0x080c, 0x8e66, 0x7003, 0x1300, 0x782c, 0x080c, - 0x9b4d, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, - 0xbaa0, 0x080c, 0x9d98, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, - 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, - 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, - 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, - 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098, - 0x700e, 0x00a8, 0x080c, 0x9d98, 0x1130, 0x7810, 0x2058, 0xb8a0, - 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, 0x700a, - 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, - 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, - 0x9367, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, - 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, - 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x9ac5, 0x9186, 0x0005, - 0x0904, 0x9aae, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904, - 0x9ab6, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, - 0x9b2a, 0x0005, 0x080c, 0x9aeb, 0x00d6, 0x0026, 0x792c, 0x2168, - 0x2009, 0x4000, 0x6800, 0x0002, 0x9a8f, 0x9a9a, 0x9a91, 0x9a9a, - 0x9a96, 0x9a8f, 0x9a8f, 0x9a9a, 0x9a9a, 0x9a9a, 0x9a9a, 0x9a8f, - 0x9a8f, 0x9a8f, 0x9a8f, 0x9a8f, 0x9a9a, 0x9a8f, 0x9a9a, 0x080c, - 0x0db4, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, - 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x9ae4, - 0x080c, 0x9aeb, 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, 0x9367, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, - 0x080c, 0x8eb1, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, - 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9d98, 0x1118, 0x9092, - 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 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, 0x8eb1, 0x7003, 0x0100, 0x782c, 0x700a, - 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x080c, - 0x8e5d, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, - 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, - 0x701a, 0x60c3, 0x0010, 0x0804, 0x9367, 0x00e6, 0x2071, 0x0240, - 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084, - 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e, - 0x00ee, 0x0005, 0x080c, 0x8ea8, 0x7003, 0x0100, 0x782c, 0x700a, - 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0021, 0x60c3, - 0x0000, 0x0804, 0x9367, 0x00d6, 0x080c, 0x9c26, 0xb810, 0x9085, - 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, - 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9355, 0x721a, 0x2f10, - 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x00a9, - 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, - 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, - 0x080c, 0x938a, 0x080c, 0x8087, 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, 0x9c26, 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, 0x1983, 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, 0xa878, 0x6056, - 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, 0x0003, - 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, - 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1f24, 0x080c, 0x842e, - 0x0126, 0x2091, 0x8000, 0x080c, 0x8a26, 0x012e, 0x009e, 0x00de, - 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x760c, 0x2660, 0x2678, - 0x8cff, 0x0904, 0x9cf8, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, - 0x68c0, 0x9005, 0x0904, 0x9ccf, 0x080c, 0x9393, 0x68c3, 0x0000, - 0x080c, 0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, + 0xb8b0, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, + 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, 0x9c24, 0x2009, 0x07d0, 0x60c4, + 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x80bd, + 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, + 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x9319, 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, + 0x9c24, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, + 0x2009, 0x1b58, 0x080c, 0x80bd, 0x003e, 0x004e, 0x005e, 0x00ce, + 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, + 0x9084, 0x0003, 0x9086, 0x0002, 0x0904, 0x9335, 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, 0x9c01, 0x0804, + 0x92c9, 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, 0x92ac, 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, 0x9c24, + 0x0804, 0x92c9, 0x080c, 0x9c01, 0x0804, 0x92c9, 0x7a10, 0x00b6, + 0x2258, 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, + 0x0005, 0x00d6, 0x2069, 0x19b8, 0x6843, 0x0001, 0x00de, 0x0005, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x80af, 0x0005, + 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, + 0x0128, 0x0089, 0x080c, 0x80af, 0x001e, 0x0005, 0xc1e5, 0x2001, + 0x180c, 0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c1, + 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, 0x6fb2, 0x11e8, 0x2001, 0x19d4, 0x2004, + 0x9005, 0x1904, 0x9412, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062, + 0x006e, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, + 0xd084, 0x090c, 0x0db4, 0x080c, 0x80af, 0x0460, 0x00c6, 0x2061, + 0x19b8, 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x93ac, + 0x080c, 0x2b24, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, 0x0008, + 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, + 0x80af, 0x080c, 0x93a3, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, + 0x080c, 0xd8c9, 0x080c, 0x80b8, 0x2009, 0x0014, 0x080c, 0x9eac, + 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, + 0x19d4, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6128, + 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x80af, + 0x080c, 0x5b90, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, + 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x80c5, + 0x2071, 0x19b8, 0x713c, 0x81ff, 0x0904, 0x94a2, 0x2061, 0x0100, + 0x2069, 0x0140, 0x080c, 0x6fb2, 0x11b0, 0x0036, 0x2019, 0x0002, + 0x080c, 0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009, + 0x004a, 0x080c, 0x9eac, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062, + 0x006e, 0x0804, 0x94a2, 0x080c, 0x94ae, 0x0904, 0x94a2, 0x6904, + 0xd1f4, 0x0904, 0x94a9, 0x080c, 0x2b24, 0x00c6, 0x703c, 0x9065, + 0x090c, 0x0db4, 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, 0x2a77, 0x6014, + 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, + 0x0049, 0x080c, 0x9eac, 0x0070, 0x0036, 0x2019, 0x0001, 0x080c, + 0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009, 0x004a, + 0x080c, 0x9eac, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, + 0x0005, 0xd1ec, 0x1904, 0x9463, 0x0804, 0x9465, 0x00d6, 0x00c6, + 0x0096, 0x703c, 0x9065, 0x090c, 0x0db4, 0x2001, 0x1836, 0x2004, + 0xd09c, 0x1904, 0x953a, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, + 0x0904, 0x953a, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x953a, + 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, 0x953a, 0xd08c, 0x0904, + 0x953a, 0x2009, 0x1a50, 0x2104, 0x8000, 0x0208, 0x200a, 0x2069, + 0x0100, 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, 0x69c8, + 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, 0x2001, + 0x0306, 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, + 0x1a36, 0x2003, 0x0000, 0x2001, 0x1a3f, 0x2003, 0x0000, 0x6a88, + 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1a5c, 0x0040, + 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, + 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ae8, 0x190c, + 0x0db4, 0x012e, 0x0090, 0x2009, 0x1a51, 0x2104, 0x8000, 0x0208, + 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, + 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, + 0x6827, 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, + 0x704a, 0x2009, 0x07d0, 0x080c, 0x80bd, 0x9006, 0x009e, 0x00ce, + 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, + 0x19b8, 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, 0x19b8, 0x7018, + 0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, + 0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, + 0x080c, 0x6370, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, + 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, + 0x8e8e, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, + 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, + 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, + 0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, + 0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0f00, 0x7808, 0xd09c, + 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, + 0x0008, 0x0804, 0x9380, 0x0156, 0x080c, 0x8ed9, 0x7003, 0x0200, + 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, + 0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, + 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x95d4, 0x60c3, 0x001c, + 0x015e, 0x0804, 0x9380, 0x0016, 0x0026, 0x080c, 0x8eb5, 0x080c, + 0x8ec7, 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, 0x9380, + 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x9c2a, + 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8e8e, 0x7003, + 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0016, + 0x0026, 0x080c, 0x8e8e, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, + 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, + 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, + 0x8003, 0x60c2, 0x080c, 0x9380, 0x002e, 0x001e, 0x0005, 0x00e6, + 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x700c, + 0x2060, 0x8cff, 0x0178, 0x080c, 0xbd1d, 0x1110, 0x080c, 0xa7c0, + 0x600c, 0x0006, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x97b0, + 0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, + 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, + 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, + 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, + 0x2071, 0x19b8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0x93ac, + 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x80b8, 0x00c6, 0x2061, 0x0100, + 0x080c, 0x9c43, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, + 0x080c, 0x9eac, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, + 0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x80b8, + 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, + 0x68c3, 0x0000, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x20a9, 0x01f4, + 0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, + 0x9084, 0x4000, 0x190c, 0x2b24, 0x0090, 0xd084, 0x0118, 0x6827, + 0x0001, 0x0010, 0x1f04, 0x96ba, 0x7804, 0x9084, 0x1000, 0x0138, + 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x0005, + 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, + 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, + 0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, + 0x703c, 0x2060, 0x8cff, 0x0904, 0x9766, 0x9386, 0x0002, 0x1128, + 0x6814, 0x9084, 0x0002, 0x0904, 0x9766, 0x68af, 0x95f5, 0x6817, + 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, + 0x080c, 0x80c5, 0x080c, 0x1e90, 0x0046, 0x2009, 0x00a5, 0x080c, + 0x0e2f, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, + 0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, + 0x2079, 0x0090, 0x2071, 0x1a36, 0x6814, 0x9084, 0x1984, 0x9085, + 0x0012, 0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, + 0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, + 0x2001, 0x1952, 0x200c, 0x080c, 0x0e2f, 0x004e, 0x20a9, 0x03e8, + 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, + 0x190c, 0x2b24, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, + 0x1f04, 0x9740, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x6827, 0x4000, 0x6824, + 0x83ff, 0x1120, 0x2009, 0x0049, 0x080c, 0x9eac, 0x000e, 0x001e, + 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, + 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, + 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, + 0x19b8, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9047, 0x7854, + 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x9047, 0x7854, + 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x9047, 0x7854, + 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x9047, 0x7854, + 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x9047, 0x7854, + 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9380, + 0x00e6, 0x2071, 0x19b8, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, 0x2660, + 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9855, 0x8cff, 0x0904, + 0x9855, 0x6020, 0x9086, 0x0006, 0x1904, 0x9850, 0x88ff, 0x0138, + 0x2800, 0x9c06, 0x1904, 0x9850, 0x2039, 0x0000, 0x0050, 0x6010, + 0x9b06, 0x1904, 0x9850, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, + 0x9850, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, + 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x80b8, + 0x080c, 0x98da, 0x7027, 0x0000, 0x0428, 0x080c, 0x80b8, 0x6820, + 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 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, 0xbcf3, 0x1158, 0x080c, - 0x2ffc, 0x080c, 0xbd04, 0x11f0, 0x080c, 0xa7a7, 0x00d8, 0x080c, - 0x98c1, 0x08c0, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0090, - 0x6014, 0x2048, 0x080c, 0xbafc, 0x0168, 0x6020, 0x9086, 0x0003, - 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6885, - 0x080c, 0xbce7, 0x080c, 0xbf6b, 0x080c, 0x9e49, 0x080c, 0x9797, - 0x00ce, 0x0804, 0x9c80, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9c80, - 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, - 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1d08, 0x080c, 0xd4b5, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x8eb1, - 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, - 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, - 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, - 0x6fa7, 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, 0x9d40, 0x60c3, 0x0020, 0x080c, 0x9367, 0x015e, 0x00de, - 0x0005, 0x0156, 0x080c, 0x8eb1, 0x7a14, 0x82ff, 0x0168, 0x9286, - 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, - 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, - 0x700f, 0x0001, 0x2011, 0x198e, 0x2204, 0x8007, 0x701a, 0x8210, - 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, - 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, - 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, - 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, - 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9367, - 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, - 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c, - 0x9649, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e, 0x0005, 0x2071, - 0x1883, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800, - 0x7072, 0x7076, 0x7067, 0xffe0, 0x2071, 0x1800, 0x7070, 0x7052, - 0x7057, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, - 0x8000, 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, - 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, - 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, - 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, - 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, - 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, - 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, - 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, - 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1228, 0x7556, - 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc8, 0x9006, - 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0db4, 0x2001, 0x1819, 0x2004, - 0x9c02, 0x1a0c, 0x0db4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, - 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056, - 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, - 0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001, - 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x894b, 0x012e, - 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, - 0x190c, 0x190d, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1957, - 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, - 0x080c, 0xd767, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, - 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, + 0x0001, 0x003e, 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, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x009e, 0x080c, + 0x9e62, 0x080c, 0x97b0, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x97cb, + 0x2c78, 0x600c, 0x2060, 0x0804, 0x97cb, 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, 0x19b8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98c9, + 0x6020, 0x9086, 0x0006, 0x1904, 0x98c4, 0x87ff, 0x0128, 0x2700, + 0x9c06, 0x1904, 0x98c4, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, + 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, + 0x2019, 0x0001, 0x080c, 0x96d8, 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, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x080c, 0x9e62, 0x87ff, + 0x1198, 0x00ce, 0x0804, 0x9875, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x9875, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, + 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, + 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x2001, 0x1800, 0x2004, + 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, + 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 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, 0x19b8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, + 0x99b6, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, + 0x99b1, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, + 0x0904, 0x998d, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, + 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, + 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, + 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, 0xbd0c, 0x1158, 0x080c, 0x3003, 0x080c, + 0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8, 0x080c, 0x98da, 0x08c0, + 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0090, 0x6014, 0x2048, + 0x080c, 0xbb15, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, + 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00, + 0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce, 0x0804, + 0x9936, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9936, 0x012e, 0x000e, + 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, + 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd4d5, 0x0c08, 0x00d6, + 0x080c, 0x8ed9, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, + 0x20e1, 0x0001, 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, + 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, + 0x9380, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x700b, 0x0800, 0x7814, + 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, + 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858, + 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9380, 0x00b6, + 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xc18a, + 0x00de, 0x1904, 0x9a64, 0x080c, 0x8e8e, 0x7003, 0x1300, 0x782c, + 0x080c, 0x9b66, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, + 0x2058, 0xbaa0, 0x080c, 0x9db1, 0x11d8, 0x9286, 0x007e, 0x1128, + 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, + 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, + 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, + 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, + 0x6098, 0x700e, 0x00a8, 0x080c, 0x9db1, 0x1130, 0x7810, 0x2058, + 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, + 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, + 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, + 0x080c, 0x9380, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, + 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, + 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x9ade, 0x9186, + 0x0005, 0x0904, 0x9ac7, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, + 0x0904, 0x9acf, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, + 0x080c, 0x9b43, 0x0005, 0x080c, 0x9b04, 0x00d6, 0x0026, 0x792c, + 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0x9aa8, 0x9ab3, 0x9aaa, + 0x9ab3, 0x9aaf, 0x9aa8, 0x9aa8, 0x9ab3, 0x9ab3, 0x9ab3, 0x9ab3, + 0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9ab3, 0x9aa8, 0x9ab3, + 0x080c, 0x0db4, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, + 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, + 0x9afd, 0x080c, 0x9b04, 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, 0x9380, 0x00b6, 0x0036, 0x0046, 0x0056, + 0x0066, 0x080c, 0x8ed9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, + 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9db1, 0x1118, + 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 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, 0x8ed9, 0x7003, 0x0100, 0x782c, + 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, + 0x080c, 0x8e85, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, + 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, + 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0x9380, 0x00e6, 0x2071, + 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, + 0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, + 0x000e, 0x00ee, 0x0005, 0x080c, 0x8ed0, 0x7003, 0x0100, 0x782c, + 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0021, + 0x60c3, 0x0000, 0x0804, 0x9380, 0x00d6, 0x080c, 0x9c3f, 0xb810, + 0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, + 0x700a, 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x936e, 0x721a, + 0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, + 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, + 0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, + 0x002e, 0x080c, 0x93a3, 0x080c, 0x80af, 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, 0x9c3f, 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, 0x1983, 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, 0xa878, + 0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, + 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, + 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1f24, 0x080c, + 0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e, 0x009e, + 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, + 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x760c, 0x2660, + 0x2678, 0x8cff, 0x0904, 0x9d11, 0x7024, 0x9c06, 0x1520, 0x2069, + 0x0100, 0x68c0, 0x9005, 0x0904, 0x9ce8, 0x080c, 0x93ac, 0x68c3, + 0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, + 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, + 0x9006, 0x080c, 0x2b14, 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, 0xbd0c, 0x1158, + 0x080c, 0x3003, 0x080c, 0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8, + 0x080c, 0x98da, 0x08c0, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, + 0x0090, 0x6014, 0x2048, 0x080c, 0xbb15, 0x0168, 0x6020, 0x9086, + 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, + 0x688c, 0x080c, 0xbd00, 0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c, + 0x97b0, 0x00ce, 0x0804, 0x9c99, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x9c99, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, + 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, + 0x0006, 0x1d08, 0x080c, 0xd4d5, 0x08f0, 0x00d6, 0x0156, 0x080c, + 0x8ed9, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, + 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, + 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, + 0x080c, 0x6fb2, 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, 0x9d59, 0x60c3, 0x0020, 0x080c, 0x9380, 0x015e, + 0x00de, 0x0005, 0x0156, 0x080c, 0x8ed9, 0x7a14, 0x82ff, 0x0168, + 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, + 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, + 0x001c, 0x700f, 0x0001, 0x2011, 0x198e, 0x2204, 0x8007, 0x701a, + 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, + 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, + 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, + 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, + 0x9380, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, + 0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, + 0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x0005, + 0x2071, 0x1883, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, + 0x1800, 0x7072, 0x7076, 0x7067, 0xffe0, 0x2071, 0x1800, 0x7070, + 0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, + 0x2091, 0x8000, 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, + 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, + 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, + 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, + 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006, + 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, - 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, - 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, - 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x9ea6, - 0x9eaf, 0x9eca, 0x9ee5, 0xc21f, 0xc23c, 0xc257, 0x9ea6, 0x9eaf, - 0x9ea6, 0x9f01, 0x9ea6, 0x9ea6, 0x9ea6, 0x9ea6, 0x9186, 0x0013, - 0x1128, 0x080c, 0x8846, 0x080c, 0x894b, 0x0005, 0x0005, 0x0066, - 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, - 0x9ec8, 0xa620, 0xa7ee, 0x9ec8, 0xa87c, 0xa1e4, 0x9ec8, 0x9ec8, - 0xa5a2, 0xae1e, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8, + 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1228, + 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc8, + 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0db4, 0x2001, 0x1819, + 0x2004, 0x9c02, 0x1a0c, 0x0db4, 0x9006, 0x6006, 0x600a, 0x600e, + 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, + 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, + 0x603e, 0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, + 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973, + 0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, + 0xd084, 0x190c, 0x190d, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, + 0x1957, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, + 0x601a, 0x080c, 0xd787, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, + 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, + 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, + 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, + 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, + 0x9ebf, 0x9ec8, 0x9ee3, 0x9efe, 0xc238, 0xc255, 0xc270, 0x9ebf, + 0x9ec8, 0x9ebf, 0x9f1a, 0x9ebf, 0x9ebf, 0x9ebf, 0x9ebf, 0x9186, + 0x0013, 0x1128, 0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x0005, + 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, + 0x0005, 0x9ee1, 0xa639, 0xa807, 0x9ee1, 0xa895, 0xa1fd, 0x9ee1, + 0x9ee1, 0xa5bb, 0xae37, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1, + 0x9ee1, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, + 0x0db4, 0x0013, 0x006e, 0x0005, 0x9efc, 0xb50b, 0x9efc, 0x9efc, + 0x9efc, 0x9efc, 0x9efc, 0x9efc, 0xb4b0, 0xb68d, 0x9efc, 0xb54c, + 0xb5cb, 0xb54c, 0xb5cb, 0x9efc, 0x080c, 0x0db4, 0x6000, 0x9082, + 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x0002, 0x9f18, 0xae7e, 0xaf63, + 0xb093, 0xb23e, 0x9f18, 0x9f18, 0x9f18, 0xae52, 0xb43c, 0xb43f, + 0x9f18, 0x9f18, 0x9f18, 0x9f18, 0xb46e, 0x9f18, 0x9f18, 0x9f18, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, - 0x0013, 0x006e, 0x0005, 0x9ee3, 0xb4f2, 0x9ee3, 0x9ee3, 0x9ee3, - 0x9ee3, 0x9ee3, 0x9ee3, 0xb497, 0xb674, 0x9ee3, 0xb533, 0xb5b2, - 0xb533, 0xb5b2, 0x9ee3, 0x080c, 0x0db4, 0x6000, 0x9082, 0x0016, - 0x1a0c, 0x0db4, 0x6000, 0x0002, 0x9eff, 0xae65, 0xaf4a, 0xb07a, - 0xb225, 0x9eff, 0x9eff, 0x9eff, 0xae39, 0xb423, 0xb426, 0x9eff, - 0x9eff, 0x9eff, 0x9eff, 0xb455, 0x9eff, 0x9eff, 0x9eff, 0x080c, - 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, - 0x006e, 0x0005, 0x9f1a, 0x9f1a, 0x9f5d, 0x9ffc, 0xa091, 0x9f1a, - 0x9f1a, 0x9f1a, 0x9f1c, 0x9f1a, 0x9f1a, 0x9f1a, 0x9f1a, 0x9f1a, - 0x9f1a, 0x9f1a, 0x080c, 0x0db4, 0x9186, 0x004c, 0x0588, 0x9186, - 0x0003, 0x190c, 0x0db4, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, - 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, - 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, 0xa83a, - 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, - 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1a5c, 0x080c, - 0x842e, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a26, 0x012e, 0x0005, - 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xa0b3, - 0x080c, 0xc211, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, - 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, - 0x9290, 0x0018, 0xac78, 0xc4fc, 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, 0x9fc4, - 0x9fc4, 0x9fbf, 0x9fc2, 0x9fc4, 0x9fbc, 0x9faf, 0x9faf, 0x9faf, - 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, - 0x009e, 0x00de, 0x080c, 0x0db4, 0x080c, 0xaa5d, 0x0028, 0x080c, - 0xab80, 0x0010, 0x080c, 0xac6f, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xa171, 0x0530, - 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, - 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1249, 0x080c, - 0xa31b, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, - 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0x9e19, 0x2001, 0x002c, - 0x900e, 0x080c, 0xa1d7, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, - 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0db4, 0x91b2, 0x0050, - 0x1a0c, 0x0db4, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, 0x2004, - 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, - 0x080c, 0x8382, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, - 0x9086, 0x0002, 0x1110, 0x0804, 0x9f5d, 0x0005, 0xa02f, 0xa02f, - 0xa031, 0xa067, 0xa02f, 0xa02f, 0xa02f, 0xa02f, 0xa07a, 0x080c, - 0x0db4, 0x00d6, 0x0016, 0x0096, 0x080c, 0x88fb, 0x080c, 0x8a26, - 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, - 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, - 0x900e, 0x080c, 0xa1d7, 0x080c, 0x9e19, 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, - 0x88fb, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0120, - 0xa87b, 0x0006, 0x080c, 0x6885, 0x009e, 0x00de, 0x080c, 0x9e19, - 0x0804, 0x8a26, 0x080c, 0x88fb, 0x080c, 0x2fd7, 0x080c, 0xc20e, - 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0120, 0xa87b, - 0x0029, 0x080c, 0x6885, 0x009e, 0x00de, 0x080c, 0x9e19, 0x0804, - 0x8a26, 0x9182, 0x0047, 0x0002, 0xa0a1, 0xa0a3, 0xa0a1, 0xa0a1, - 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, - 0xa0a3, 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x150f, 0x6114, - 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6885, 0x009e, - 0x00de, 0x0804, 0x9e19, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, - 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c, 0x0db4, - 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, - 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188, 0x0018, - 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, - 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, - 0x2011, 0x001f, 0x080c, 0xb6f9, 0x04c0, 0x2130, 0x2009, 0x0034, - 0x2011, 0x001f, 0x080c, 0xb6f9, 0x96b2, 0x0034, 0xb004, 0x904d, - 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x01d0, 0x8528, 0xa867, - 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, - 0x2608, 0x2011, 0x001b, 0x080c, 0xb6f9, 0x00b8, 0x96b2, 0x003c, - 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb6f9, 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, 0x6885, 0x000e, 0x2048, 0x9005, - 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, - 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e, - 0x090c, 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, - 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, - 0x798c, 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, 0x6885, 0x009e, 0x00fe, 0x00de, - 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, - 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, - 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, - 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, - 0x003e, 0x1170, 0x0096, 0x080c, 0x0feb, 0x2900, 0x009e, 0x05c0, - 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, - 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, - 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, - 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, - 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, - 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, - 0x2310, 0x84ff, 0x0904, 0xa186, 0x0804, 0xa188, 0x9085, 0x0001, - 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, - 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6878, - 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, - 0x9e19, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x080c, 0x9e19, - 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, 0xbafe, 0x0130, - 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, - 0x9e19, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, - 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005, - 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, - 0x9e19, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, - 0x0006, 0x0016, 0x080c, 0xc1f9, 0x0188, 0x6014, 0x9005, 0x1170, - 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022, - 0x080c, 0xa5f8, 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, 0x9e19, 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, 0xb6f9, - 0x080c, 0xbafe, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, - 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e19, 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, - 0xb6f9, 0x009e, 0x080c, 0xbafe, 0x0148, 0xa804, 0x9005, 0x1158, - 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e19, - 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, - 0x0100, 0x1118, 0x080c, 0xa7a7, 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, 0x122f, 0x0019, - 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e, - 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, - 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, - 0x0086, 0x2940, 0x080c, 0x10d5, 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, 0xc171, 0x001e, 0x1158, - 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, - 0x9386, 0x0006, 0x0128, 0x080c, 0x9e19, 0x0020, 0x0039, 0x0010, - 0x080c, 0xa42d, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, - 0x2048, 0x9186, 0x0015, 0x0904, 0xa415, 0x918e, 0x0016, 0x1904, - 0xa42b, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, - 0x0300, 0x1904, 0xa3ef, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, - 0x0904, 0xa3d2, 0x0804, 0xa429, 0x6808, 0x9086, 0xffff, 0x1904, - 0xa417, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, - 0xa940, 0x9105, 0x1904, 0xa417, 0x6824, 0xd0b4, 0x1904, 0xa417, - 0x080c, 0xbce7, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, - 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x8248, - 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, - 0x00c6, 0x2d60, 0x080c, 0xb823, 0x00ce, 0x0804, 0xa429, 0x00c6, - 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d46, 0x0010, 0x080c, 0x60ed, - 0x00ce, 0x1904, 0xa417, 0x00c6, 0x2d60, 0x080c, 0x9e19, 0x00ce, - 0x0804, 0xa429, 0x00c6, 0x080c, 0x9e66, 0x0198, 0x6017, 0x0000, - 0x6810, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0003, 0x6904, 0x00c6, - 0x2d60, 0x080c, 0x9e19, 0x00ce, 0x080c, 0x9e93, 0x00ce, 0x0804, - 0xa429, 0x2001, 0x1959, 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, - 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, - 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xc1b3, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x83c9, - 0x080c, 0x894b, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, - 0x2001, 0x1959, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, - 0x090c, 0x0db4, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, - 0x0003, 0x080c, 0x66a0, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x00de, - 0x00ce, 0x080c, 0x9e19, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, - 0x2001, 0x1959, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, - 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd767, 0x080c, 0x81dc, 0x080c, - 0x9e19, 0x00ce, 0x080c, 0x9e19, 0x0005, 0x0026, 0x0036, 0x0046, - 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959, 0x2004, - 0x6842, 0x0804, 0xa4a7, 0x00c6, 0x2d60, 0x080c, 0xb724, 0x00ce, - 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, - 0x0001, 0x6007, 0x0050, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00ce, - 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0db4, - 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, - 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, - 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, - 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, - 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, - 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, - 0x0005, 0x6832, 0x080c, 0xbe6a, 0x080c, 0x894b, 0x0010, 0x080c, - 0x9e19, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, - 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, - 0x9206, 0x1904, 0xa512, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, - 0x00be, 0x9206, 0x1904, 0xa512, 0x6038, 0x2068, 0x6824, 0xc0dc, - 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa512, 0x9286, 0x0002, - 0x0904, 0xa512, 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, - 0xbafe, 0x090c, 0x0db4, 0xa87b, 0x0003, 0x009e, 0x080c, 0xc1b3, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x83c9, - 0x080c, 0x894b, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1959, - 0x2004, 0x7042, 0x080c, 0x9e19, 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, 0xadf4, 0x002e, 0x003e, 0x015e, - 0x009e, 0x1904, 0xa581, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, - 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xadf4, - 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, - 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, - 0x009e, 0x00be, 0x0804, 0xa21c, 0x0096, 0x2048, 0xaa12, 0xab16, - 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, - 0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x080c, 0xa31b, 0x0130, - 0x00fe, 0x009e, 0x080c, 0x9e19, 0x00be, 0x0005, 0x080c, 0xa7a7, - 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00fe, - 0x00c6, 0x080c, 0x9dc3, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, - 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, - 0x6188, 0x080c, 0x61b4, 0x080c, 0x8411, 0x080c, 0x894b, 0x00ce, - 0x0804, 0xa554, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x91b2, - 0x0040, 0x1a04, 0xa60a, 0x0002, 0xa5f8, 0xa5f8, 0xa5ee, 0xa5f8, - 0xa5f8, 0xa5f8, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5f8, 0xa5ec, 0xa5f8, 0xa5f8, 0xa5ec, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ee, 0xa5ec, 0xa5ec, 0xa5ec, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5f8, 0xa5f8, - 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, - 0xa5ec, 0xa5f8, 0xa5ec, 0xa5ec, 0x080c, 0x0db4, 0x0066, 0x00b6, - 0x6610, 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, - 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x8411, - 0x0010, 0x080c, 0x83c9, 0x0126, 0x2091, 0x8000, 0x080c, 0x894b, - 0x012e, 0x0005, 0x2600, 0x0002, 0xa61e, 0xa61e, 0xa61e, 0xa5f8, - 0xa5f8, 0xa61e, 0xa61e, 0xa61e, 0xa61e, 0xa5f8, 0xa61e, 0xa5f8, - 0xa61e, 0xa5f8, 0xa61e, 0xa61e, 0xa61e, 0xa61e, 0x080c, 0x0db4, - 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013, 0x0904, - 0xa6e2, 0x91b6, 0x0027, 0x1904, 0xa69d, 0x080c, 0x8846, 0x6004, - 0x080c, 0xbcf3, 0x01b0, 0x080c, 0xbd04, 0x01a8, 0x908e, 0x0021, - 0x0904, 0xa69a, 0x908e, 0x0022, 0x1130, 0x080c, 0xa248, 0x0904, - 0xa696, 0x0804, 0xa697, 0x908e, 0x003d, 0x0904, 0xa69a, 0x0804, - 0xa690, 0x080c, 0x2ffc, 0x2001, 0x0007, 0x080c, 0x6188, 0x6010, - 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa7a7, 0x9186, 0x007e, - 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x6fa7, 0x1108, - 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, - 0xd7c2, 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, - 0x0028, 0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x6010, - 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xd27b, 0x007e, - 0x003e, 0x002e, 0x001e, 0x080c, 0xc20e, 0x0016, 0x080c, 0xbf6b, - 0x080c, 0x9e19, 0x001e, 0x080c, 0x30ce, 0x080c, 0x894b, 0x0030, - 0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c, - 0xa7a7, 0x0cb0, 0x080c, 0xa7e3, 0x0c98, 0x9186, 0x0014, 0x1db0, - 0x080c, 0x8846, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa248, - 0x0d68, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x080c, 0xbcf3, 0x1190, - 0x080c, 0x2ffc, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, - 0xa7a7, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, - 0x2102, 0x0870, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0840, - 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894, - 0x2079, 0x0000, 0x080c, 0x3362, 0x00fe, 0x00ee, 0x0804, 0xa690, - 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, 0xa7a7, - 0x0804, 0xa690, 0x90b2, 0x0040, 0x1a04, 0xa790, 0x2008, 0x0002, - 0xa72a, 0xa72b, 0xa72e, 0xa731, 0xa734, 0xa737, 0xa728, 0xa728, - 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, - 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, - 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa73a, 0xa745, - 0xa728, 0xa747, 0xa745, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, - 0xa745, 0xa745, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, - 0xa728, 0xa728, 0xa777, 0xa745, 0xa728, 0xa741, 0xa728, 0xa728, - 0xa728, 0xa742, 0xa728, 0xa728, 0xa728, 0xa745, 0xa76e, 0xa728, - 0x080c, 0x0db4, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, - 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, - 0x0009, 0x00b0, 0x080c, 0x8846, 0x6003, 0x0005, 0x080c, 0x894b, - 0x0070, 0x0018, 0x0010, 0x080c, 0x6188, 0x0804, 0xa788, 0x080c, - 0x8846, 0x080c, 0xc211, 0x6003, 0x0004, 0x080c, 0x894b, 0x0005, - 0x080c, 0x6188, 0x080c, 0x8846, 0x6003, 0x0002, 0x0036, 0x2019, - 0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, 0x201c, - 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, - 0x9318, 0x631a, 0x003e, 0x080c, 0x894b, 0x0c08, 0x080c, 0x8846, - 0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x894b, 0x08c0, 0x00e6, - 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x3362, 0x00fe, - 0x00ee, 0x080c, 0x8846, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0838, - 0x080c, 0x8846, 0x6003, 0x0002, 0x080c, 0xc211, 0x0804, 0x894b, - 0x2600, 0x2008, 0x0002, 0xa7a5, 0xa7a5, 0xa7a5, 0xa788, 0xa788, - 0xa7a5, 0xa7a5, 0xa7a5, 0xa7a5, 0xa788, 0xa7a5, 0xa788, 0xa7a5, - 0xa788, 0xa7a5, 0xa7a5, 0xa7a5, 0xa7a5, 0x080c, 0x0db4, 0x00e6, - 0x0096, 0x0026, 0x0016, 0x080c, 0xbafe, 0x0568, 0x6014, 0x2048, - 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, - 0x080c, 0x5128, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, - 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xc0d8, - 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, 0x0db4, - 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbff7, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xc040, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xc06c, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbf8d, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xbd3d, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbd7e, 0x0804, 0xa86b, - 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0xa1f1, 0x04e0, 0x6604, - 0x96b6, 0x0000, 0x1118, 0x080c, 0xa518, 0x04a8, 0x6604, 0x96b6, - 0x0022, 0x1118, 0x080c, 0xa229, 0x0470, 0x6604, 0x96b6, 0x0035, - 0x1118, 0x080c, 0xa339, 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118, - 0x080c, 0xa4ad, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, - 0xa261, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa29d, - 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa2c8, 0x0058, - 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, - 0x00be, 0x0804, 0xab29, 0x00be, 0x0005, 0x080c, 0x9eae, 0x0cd8, - 0xa888, 0xa88b, 0xa888, 0xa8cf, 0xa888, 0xaa5d, 0xab36, 0xa888, - 0xa888, 0xab03, 0xa888, 0xab17, 0x0096, 0x080c, 0x150f, 0x6014, - 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0x9e19, - 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086, - 0x0074, 0x1540, 0x080c, 0xd24c, 0x11b0, 0x6010, 0x00b6, 0x2058, - 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, - 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6188, 0x080c, 0x2ffc, - 0x080c, 0x9e19, 0x0088, 0x2001, 0x000a, 0x080c, 0x6188, 0x080c, - 0x2ffc, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8411, 0x080c, - 0x894b, 0x0010, 0x080c, 0xaa48, 0x00ee, 0x0005, 0x00d6, 0xb800, - 0xd084, 0x0158, 0x9006, 0x080c, 0x6174, 0x2069, 0x1853, 0x6804, - 0x0020, 0x2001, 0x0006, 0x080c, 0x61b4, 0x00de, 0x0005, 0x00b6, - 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, - 0xaa21, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, - 0xac7a, 0x0804, 0xa986, 0x00d6, 0x080c, 0x6fa7, 0x0198, 0x0026, - 0x2011, 0x0010, 0x080c, 0x657f, 0x002e, 0x05c8, 0x080c, 0x5393, - 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, - 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f, 0x002e, - 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xc0d8, - 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, - 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x2ffc, 0x080c, - 0x9e19, 0x001e, 0x080c, 0x30ce, 0x00de, 0x0804, 0xaa22, 0x00de, - 0x080c, 0xac6f, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, - 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, - 0xc0d8, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, - 0x2001, 0x0006, 0x080c, 0x6188, 0x080c, 0x2ffc, 0x080c, 0x9e19, - 0x0804, 0xaa22, 0x080c, 0xaa30, 0x6014, 0x9005, 0x0190, 0x2048, - 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xc0d8, - 0x08f8, 0x080c, 0xaa26, 0x0160, 0x9006, 0x080c, 0x6174, 0x2001, - 0x0004, 0x080c, 0x61b4, 0x2001, 0x0007, 0x080c, 0x6188, 0x08a0, - 0x2001, 0x0004, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0003, - 0x080c, 0x8411, 0x080c, 0x894b, 0x0804, 0xaa22, 0xb85c, 0xd0e4, - 0x01d0, 0x080c, 0xbf0d, 0x080c, 0x6fa7, 0x0118, 0xd0dc, 0x1904, - 0xa948, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002, - 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x26d7, 0x78e2, - 0x00fe, 0x0804, 0xa948, 0x080c, 0xbf4a, 0x2011, 0x1836, 0x2204, - 0xc0a5, 0x2012, 0x0006, 0x080c, 0xd3a5, 0x000e, 0x1904, 0xa948, - 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6188, 0x9006, 0x080c, - 0x6174, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, - 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, - 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee, - 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26ac, 0x00f6, 0x2100, - 0x900e, 0x080c, 0x2663, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8, - 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, - 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, - 0x26ac, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x080c, - 0x2663, 0x795a, 0x00fe, 0x8108, 0x080c, 0x61d7, 0x2b00, 0x00ce, - 0x1904, 0xa948, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, - 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, - 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x6188, 0x6023, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411, 0x080c, 0x894b, - 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, - 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005, - 0x00e6, 0x080c, 0xd81b, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, - 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, - 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, - 0x2030, 0x2001, 0x0007, 0x080c, 0x6188, 0x080c, 0x5393, 0x1120, - 0x2001, 0x0007, 0x080c, 0x61b4, 0x080c, 0x2ffc, 0x6020, 0x9086, - 0x000a, 0x1108, 0x0005, 0x0804, 0x9e19, 0x00b6, 0x00e6, 0x0026, - 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, 0xaafa, - 0x00d6, 0x080c, 0x6fa7, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c, - 0x657f, 0x002e, 0x05c8, 0x080c, 0x5393, 0x1540, 0x6014, 0x2048, - 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026, - 0x2011, 0x8008, 0x080c, 0x657f, 0x002e, 0x0530, 0x6014, 0x2048, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, - 0x900e, 0x2011, 0x4009, 0x080c, 0xc0d8, 0x0040, 0x6014, 0x2048, - 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, - 0xb9a0, 0x0016, 0x080c, 0x2ffc, 0x080c, 0x9e19, 0x001e, 0x080c, - 0x30ce, 0x00de, 0x0804, 0xaafe, 0x00de, 0x080c, 0x5393, 0x1170, - 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, - 0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x00d6, 0x6010, - 0x2058, 0x080c, 0x62d2, 0x080c, 0xa8be, 0x00de, 0x080c, 0xad40, - 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, - 0x080c, 0x6188, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, - 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, - 0x4000, 0x080c, 0xc0d8, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, - 0x009e, 0x080c, 0x2ffc, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, - 0x9e19, 0x0020, 0x080c, 0xa7a7, 0x080c, 0xaa48, 0x001e, 0x002e, - 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, - 0x1160, 0x2001, 0x0002, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, - 0x0001, 0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x2030, - 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, - 0x1120, 0x2001, 0x0007, 0x080c, 0x6188, 0x0804, 0x9e19, 0x0804, - 0xaa48, 0x0002, 0xa888, 0xab41, 0xa888, 0xab80, 0xa888, 0xac2b, - 0xab36, 0xa888, 0xa888, 0xac3e, 0xa888, 0xac4e, 0x6604, 0x9686, - 0x0003, 0x0904, 0xaa5d, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9e19, - 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xac5e, 0x11a0, 0x9006, - 0x080c, 0x6174, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x2001, 0x0002, - 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411, - 0x080c, 0x894b, 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, 0x2fd7, - 0x080c, 0xc20e, 0x080c, 0xaa48, 0x00ce, 0x00de, 0x00be, 0x0005, - 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xac6c, 0x00d6, 0x2069, - 0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, - 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, - 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, - 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411, - 0x080c, 0x894b, 0x0804, 0xabfb, 0x080c, 0xbafe, 0x01b0, 0x6014, - 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, - 0x2001, 0x0002, 0x080c, 0xc132, 0x00b0, 0x6014, 0x2048, 0xa864, - 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, - 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, - 0x1110, 0x9006, 0x0c38, 0x080c, 0xa7a7, 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, 0x6188, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, - 0x0010, 0x080c, 0xaa48, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, - 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xbafe, 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, 0x5c5d, 0x00ee, 0x0010, - 0x080c, 0x2fd7, 0x0870, 0x080c, 0xac6c, 0x1160, 0x2001, 0x0004, - 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8411, - 0x0804, 0x894b, 0x080c, 0xa7a7, 0x0804, 0xaa48, 0x0469, 0x1160, - 0x2001, 0x0008, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0005, - 0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x00e9, 0x1160, - 0x2001, 0x000a, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0001, - 0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x2009, 0x026e, - 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, - 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, - 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x6246, 0x001e, 0x00ce, - 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, - 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a, - 0x080c, 0xad12, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, - 0x080c, 0x6557, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, - 0xd50a, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, - 0x2009, 0x0001, 0x080c, 0x2fa2, 0x00e6, 0x2071, 0x1800, 0x080c, - 0x2dbb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, - 0x080c, 0x30ce, 0x8108, 0x1f04, 0xacb0, 0x015e, 0x00ce, 0x080c, - 0xac6f, 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, 0x181e, - 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, - 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, - 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, - 0x26ac, 0x080c, 0x6fa7, 0x0170, 0x2071, 0x0260, 0x2069, 0x1953, - 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, - 0x080c, 0xbf0d, 0x0040, 0x2001, 0x0006, 0x080c, 0x6188, 0x080c, - 0x2ffc, 0x080c, 0x9e19, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, - 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, - 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, - 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, - 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, - 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, - 0xadf4, 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, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, - 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xadcc, - 0x080c, 0xd53b, 0x0904, 0xadc5, 0x6720, 0x9786, 0x0007, 0x0904, - 0xadc5, 0x2500, 0x9c06, 0x0904, 0xadc5, 0x2400, 0x9c06, 0x05e8, - 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, - 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000, 0x9086, - 0x0004, 0x1110, 0x080c, 0x190d, 0x9786, 0x000a, 0x0148, 0x080c, - 0xbd04, 0x1130, 0x00ce, 0x080c, 0xa7a7, 0x080c, 0x9e49, 0x00e8, - 0x6014, 0x2048, 0x080c, 0xbafe, 0x01a8, 0x9786, 0x0003, 0x1530, - 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, - 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6878, - 0x080c, 0xbce7, 0x080c, 0x9e49, 0x00ce, 0x9ce0, 0x0018, 0x7064, - 0x9c02, 0x1210, 0x0804, 0xad73, 0x012e, 0x000e, 0x002e, 0x004e, - 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, - 0x1118, 0x080c, 0xd4b5, 0x0c30, 0x9786, 0x000a, 0x0998, 0x0880, - 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xade0, - 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, 0x0db4, 0x080c, 0xbcf3, 0x0120, 0x080c, 0xbd04, - 0x0168, 0x0028, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x0138, 0x080c, - 0x8846, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c, 0xa7a7, - 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, - 0x0005, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55, - 0xae55, 0xae55, 0xae55, 0xae55, 0xae57, 0xae57, 0xae57, 0xae57, - 0xae55, 0xae55, 0xae55, 0xae57, 0xae55, 0x080c, 0x0db4, 0x600b, - 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091, - 0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, - 0x6004, 0x9082, 0x0040, 0x0804, 0xaf0c, 0x9186, 0x0027, 0x1520, - 0x080c, 0x8846, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x0096, 0x6114, - 0x2148, 0x080c, 0xbafe, 0x0198, 0x080c, 0xbd04, 0x1118, 0x080c, - 0xa7a7, 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, - 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x6885, 0x080c, 0xbce7, 0x009e, - 0x080c, 0x9e19, 0x0804, 0x894b, 0x9186, 0x0014, 0x1120, 0x6004, - 0x9082, 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, - 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0db4, - 0x2001, 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, 0x2800, - 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, - 0x19b8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x82b5, 0x00ce, - 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, - 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaf4a, 0x0005, 0x0002, - 0xaee6, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4, - 0xaee4, 0xaee4, 0xaee4, 0xaf01, 0xaf01, 0xaf01, 0xaf01, 0xaee4, - 0xaf01, 0xaee4, 0xaf01, 0xaee4, 0x080c, 0x0db4, 0x080c, 0x8846, - 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0168, 0xa867, 0x0103, - 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, - 0x6885, 0x080c, 0xbce7, 0x009e, 0x080c, 0x9e19, 0x080c, 0x894b, - 0x0005, 0x080c, 0x8846, 0x080c, 0xbd04, 0x090c, 0xa7a7, 0x080c, - 0x9e19, 0x080c, 0x894b, 0x0005, 0x0002, 0xaf23, 0xaf21, 0xaf21, - 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, - 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf21, 0xaf44, 0xaf21, 0xaf3a, - 0xaf21, 0x080c, 0x0db4, 0x0096, 0x080c, 0x8846, 0x6014, 0x2048, - 0x2001, 0x1959, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, - 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, - 0x0002, 0x0cb8, 0x080c, 0x8846, 0x080c, 0xc211, 0x080c, 0xc216, - 0x6003, 0x000f, 0x0804, 0x894b, 0x080c, 0x8846, 0x080c, 0x9e19, - 0x0804, 0x894b, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf68, - 0xb045, 0xaf66, 0xb079, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66, - 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xb079, 0x080c, 0x0db4, - 0x00b6, 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, - 0x1528, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb034, 0xa87b, - 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, - 0xa938, 0x9115, 0x190c, 0xb20e, 0x080c, 0x66a0, 0x6210, 0x2258, - 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, - 0xb018, 0x080c, 0x9e19, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, - 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb01c, 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, 0xaf6f, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, - 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, - 0x0025, 0x080c, 0xb6f9, 0x003e, 0xd6cc, 0x0904, 0xaf84, 0x7154, - 0xa98a, 0x81ff, 0x0904, 0xaf84, 0x9192, 0x0021, 0x1278, 0x8304, - 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb6f9, 0x2011, 0x0205, - 0x2013, 0x0000, 0x080c, 0xc19e, 0x0804, 0xaf84, 0xa868, 0xd0fc, - 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, - 0xb698, 0x00ae, 0x080c, 0xc19e, 0x080c, 0xb6e9, 0x0804, 0xaf86, - 0x080c, 0xbdf7, 0x0804, 0xaf93, 0xa87c, 0xd0ac, 0x0904, 0xaf9f, - 0xa880, 0xd0bc, 0x1904, 0xaf9f, 0x7348, 0xa838, 0x9306, 0x11c8, - 0x734c, 0xa834, 0x931e, 0x0904, 0xaf9f, 0xd6d4, 0x0190, 0xab38, - 0x9305, 0x0904, 0xaf9f, 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xaf77, - 0xa838, 0xa934, 0x9105, 0x0904, 0xaf77, 0xa880, 0xd0bc, 0x1904, - 0xaf77, 0x080c, 0xbe31, 0x0804, 0xaf93, 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, 0x1a5c, 0x080c, 0x842e, 0x080c, 0x8a26, 0x009e, - 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xb096, 0xb096, 0xb096, 0xb096, 0xb096, 0xb098, - 0xb12e, 0xb096, 0xb096, 0xb145, 0xb1d1, 0xb096, 0xb096, 0xb096, - 0xb096, 0xb1e6, 0xb096, 0xb096, 0xb096, 0xb096, 0x080c, 0x0db4, - 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, 0xb129, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, - 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xb129, - 0x080c, 0x0feb, 0x090c, 0x0db4, 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, - 0xb6f9, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, - 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, - 0x080c, 0xb6f9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, - 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, - 0xb698, 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, 0x1a5c, 0x0804, 0x9360, 0x6003, 0x0002, 0x6004, - 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, - 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, - 0x1648, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, - 0x080c, 0x8846, 0x080c, 0x894b, 0x0096, 0x2001, 0x1959, 0x2004, - 0x6042, 0x080c, 0x88fb, 0x080c, 0x8a26, 0x6114, 0x2148, 0xa97c, - 0xd1e4, 0x0904, 0xb1cc, 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, 0x0f9d, 0x001e, 0x0440, - 0x0016, 0x080c, 0x0f9d, 0x009e, 0xa974, 0x0016, 0x080c, 0xb6e9, - 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, 0x66a0, 0x001e, - 0xd1e4, 0x1120, 0x080c, 0x9e19, 0x009e, 0x0005, 0x080c, 0xbdf7, - 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8846, 0x080c, - 0x894b, 0x2019, 0x0001, 0x080c, 0x96bf, 0x6003, 0x0002, 0x080c, - 0xc216, 0x080c, 0x88fb, 0x080c, 0x8a26, 0x0005, 0x6004, 0x9086, - 0x0040, 0x1120, 0x080c, 0x8846, 0x080c, 0x894b, 0x2019, 0x0001, - 0x080c, 0x96bf, 0x080c, 0x88fb, 0x080c, 0x2fd7, 0x080c, 0xc20e, - 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0150, 0xa867, 0x0103, - 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x6885, 0x080c, 0xbce7, - 0x009e, 0x080c, 0x9e19, 0x080c, 0x8a26, 0x0005, 0xa87b, 0x0015, - 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, - 0x0000, 0x0006, 0x0016, 0x2009, 0x1a4a, 0x2104, 0x8000, 0x200a, - 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, - 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb241, 0xb241, 0xb241, - 0xb241, 0xb241, 0xb243, 0xb241, 0xb241, 0xb2e9, 0xb241, 0xb241, - 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, - 0xb41a, 0x080c, 0x0db4, 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, 0xb2e2, 0x9694, 0xff00, - 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, - 0x0300, 0x0904, 0xb2e2, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, - 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, - 0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, - 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, - 0xf000, 0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, + 0x0013, 0x006e, 0x0005, 0x9f33, 0x9f33, 0x9f76, 0xa015, 0xa0aa, + 0x9f33, 0x9f33, 0x9f33, 0x9f35, 0x9f33, 0x9f33, 0x9f33, 0x9f33, + 0x9f33, 0x9f33, 0x9f33, 0x080c, 0x0db4, 0x9186, 0x004c, 0x0588, + 0x9186, 0x0003, 0x190c, 0x0db4, 0x0096, 0x601c, 0xc0ed, 0x601e, + 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, + 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, + 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, + 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1a5c, + 0x080c, 0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e, + 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, + 0xa0cc, 0x080c, 0xc22a, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, + 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, + 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 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, + 0x9fdd, 0x9fdd, 0x9fd8, 0x9fdb, 0x9fdd, 0x9fd5, 0x9fc8, 0x9fc8, + 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, + 0x00fe, 0x009e, 0x00de, 0x080c, 0x0db4, 0x080c, 0xaa76, 0x0028, + 0x080c, 0xab99, 0x0010, 0x080c, 0xac88, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xa18a, + 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, + 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1249, + 0x080c, 0xa334, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, + 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0x9e32, 0x2001, + 0x002c, 0x900e, 0x080c, 0xa1f0, 0x0c70, 0x91b6, 0x0015, 0x0170, + 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0db4, 0x91b2, + 0x0050, 0x1a0c, 0x0db4, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, + 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, + 0x0026, 0x080c, 0x83aa, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, + 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0x9f76, 0x0005, 0xa048, + 0xa048, 0xa04a, 0xa080, 0xa048, 0xa048, 0xa048, 0xa048, 0xa093, + 0x080c, 0x0db4, 0x00d6, 0x0016, 0x0096, 0x080c, 0x8923, 0x080c, + 0x8a4e, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, + 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, + 0x0000, 0x900e, 0x080c, 0xa1f0, 0x080c, 0x9e32, 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, 0x8923, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, + 0x0120, 0xa87b, 0x0006, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c, + 0x9e32, 0x0804, 0x8a4e, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c, + 0xc227, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0120, + 0xa87b, 0x0029, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c, 0x9e32, + 0x0804, 0x8a4e, 0x9182, 0x0047, 0x0002, 0xa0ba, 0xa0bc, 0xa0ba, + 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, + 0xa0ba, 0xa0bc, 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x150f, + 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x688c, + 0x009e, 0x00de, 0x0804, 0x9e32, 0x0026, 0x0036, 0x0056, 0x0066, + 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c, + 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, + 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188, + 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, + 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, + 0x1228, 0x2011, 0x001f, 0x080c, 0xb712, 0x04c0, 0x2130, 0x2009, + 0x0034, 0x2011, 0x001f, 0x080c, 0xb712, 0x96b2, 0x0034, 0xb004, + 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x01d0, 0x8528, + 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, + 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb712, 0x00b8, 0x96b2, + 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb712, + 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, 0x688c, 0x000e, 0x2048, + 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, + 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0feb, + 0x000e, 0x090c, 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, + 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, + 0x1800, 0x798c, 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, 0x688c, 0x009e, 0x00fe, + 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, + 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, + 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, + 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, + 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0feb, 0x2900, 0x009e, + 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, + 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, + 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, + 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, + 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, + 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, + 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa19f, 0x0804, 0xa1a1, 0x9085, + 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, + 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, + 0x687f, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, + 0x080c, 0x9e32, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x080c, + 0x9e32, 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, 0xbb17, + 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, + 0x0804, 0x9e32, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, + 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, + 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, + 0x080c, 0x9e32, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, + 0x0cc8, 0x0006, 0x0016, 0x080c, 0xc212, 0x0188, 0x6014, 0x9005, + 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, + 0x0022, 0x080c, 0xa611, 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, 0x9e32, 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, + 0xb712, 0x080c, 0xbb17, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, + 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e32, 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, 0xb712, 0x009e, 0x080c, 0xbb17, 0x0148, 0xa804, 0x9005, + 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, + 0x9e32, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, + 0x9086, 0x0100, 0x1118, 0x080c, 0xa7c0, 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, 0x122f, + 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0feb, + 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, + 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, + 0xad9a, 0x0086, 0x2940, 0x080c, 0x10d5, 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, 0xc18a, 0x001e, + 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, + 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9e32, 0x0020, 0x0039, + 0x0010, 0x080c, 0xa446, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, + 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa42e, 0x918e, 0x0016, + 0x1904, 0xa444, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, + 0x9186, 0x0300, 0x1904, 0xa408, 0x89ff, 0x1138, 0x6800, 0x9086, + 0x000f, 0x0904, 0xa3eb, 0x0804, 0xa442, 0x6808, 0x9086, 0xffff, + 0x1904, 0xa430, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, + 0xa83c, 0xa940, 0x9105, 0x1904, 0xa430, 0x6824, 0xd0b4, 0x1904, + 0xa430, 0x080c, 0xbd00, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, + 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, + 0x8270, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, + 0x1138, 0x00c6, 0x2d60, 0x080c, 0xb83c, 0x00ce, 0x0804, 0xa442, + 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d4d, 0x0010, 0x080c, + 0x60f4, 0x00ce, 0x1904, 0xa430, 0x00c6, 0x2d60, 0x080c, 0x9e32, + 0x00ce, 0x0804, 0xa442, 0x00c6, 0x080c, 0x9e7f, 0x0198, 0x6017, + 0x0000, 0x6810, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x6904, + 0x00c6, 0x2d60, 0x080c, 0x9e32, 0x00ce, 0x080c, 0x9eac, 0x00ce, + 0x0804, 0xa442, 0x2001, 0x1959, 0x2004, 0x6842, 0x00ce, 0x04d0, + 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, + 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, + 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, + 0x1138, 0x2001, 0x1959, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, + 0x89ff, 0x090c, 0x0db4, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, + 0xa87b, 0x0003, 0x080c, 0x66a7, 0x080c, 0xbd00, 0x080c, 0x9e62, + 0x00de, 0x00ce, 0x080c, 0x9e32, 0x009e, 0x0005, 0x9186, 0x0015, + 0x1128, 0x2001, 0x1959, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, + 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd787, 0x080c, 0x8204, + 0x080c, 0x9e32, 0x00ce, 0x080c, 0x9e32, 0x0005, 0x0026, 0x0036, + 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959, + 0x2004, 0x6842, 0x0804, 0xa4c0, 0x00c6, 0x2d60, 0x080c, 0xb73d, + 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, + 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x83f1, 0x080c, 0x8973, + 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, + 0x0db4, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, + 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, + 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, + 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, + 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, + 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, + 0x2001, 0x0005, 0x6832, 0x080c, 0xbe83, 0x080c, 0x8973, 0x0010, + 0x080c, 0x9e32, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, + 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, + 0x00be, 0x9206, 0x1904, 0xa52b, 0x700c, 0x6210, 0x00b6, 0x2258, + 0xba14, 0x00be, 0x9206, 0x1904, 0xa52b, 0x6038, 0x2068, 0x6824, + 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa52b, 0x9286, + 0x0002, 0x0904, 0xa52b, 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, 0xbb17, 0x090c, 0x0db4, 0xa87b, 0x0003, 0x009e, 0x080c, + 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, + 0x1959, 0x2004, 0x7042, 0x080c, 0x9e32, 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, 0xae0d, 0x002e, 0x003e, + 0x015e, 0x009e, 0x1904, 0xa59a, 0x0096, 0x0156, 0x0036, 0x0026, + 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, + 0xae0d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, + 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, + 0x00fe, 0x009e, 0x00be, 0x0804, 0xa235, 0x0096, 0x2048, 0xaa12, + 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, + 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, + 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x080c, 0xa334, + 0x0130, 0x00fe, 0x009e, 0x080c, 0x9e32, 0x00be, 0x0005, 0x080c, + 0xa7c0, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x2fda, 0x080c, 0xc227, + 0x00fe, 0x00c6, 0x080c, 0x9ddc, 0x2f00, 0x6012, 0x6017, 0x0000, + 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, + 0x080c, 0x618f, 0x080c, 0x61bb, 0x080c, 0x8439, 0x080c, 0x8973, + 0x00ce, 0x0804, 0xa56d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0db4, + 0x91b2, 0x0040, 0x1a04, 0xa623, 0x0002, 0xa611, 0xa611, 0xa607, + 0xa611, 0xa611, 0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, + 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, + 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, + 0xa605, 0xa605, 0xa605, 0xa605, 0xa611, 0xa605, 0xa611, 0xa611, + 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa607, 0xa605, 0xa605, + 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa611, + 0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, + 0xa605, 0xa605, 0xa611, 0xa605, 0xa605, 0x080c, 0x0db4, 0x0066, + 0x00b6, 0x6610, 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e, + 0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, + 0x8439, 0x0010, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c, + 0x8973, 0x012e, 0x0005, 0x2600, 0x0002, 0xa637, 0xa637, 0xa637, + 0xa611, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0xa611, 0xa637, + 0xa611, 0xa637, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0x080c, + 0x0db4, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013, + 0x0904, 0xa6fb, 0x91b6, 0x0027, 0x1904, 0xa6b6, 0x080c, 0x886e, + 0x6004, 0x080c, 0xbd0c, 0x01b0, 0x080c, 0xbd1d, 0x01a8, 0x908e, + 0x0021, 0x0904, 0xa6b3, 0x908e, 0x0022, 0x1130, 0x080c, 0xa261, + 0x0904, 0xa6af, 0x0804, 0xa6b0, 0x908e, 0x003d, 0x0904, 0xa6b3, + 0x0804, 0xa6a9, 0x080c, 0x3003, 0x2001, 0x0007, 0x080c, 0x618f, + 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa7c0, 0x9186, + 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x6fb2, + 0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, + 0x080c, 0xd7e2, 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, + 0x2019, 0x0028, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, + 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xd29b, + 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xc227, 0x0016, 0x080c, + 0xbf84, 0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x080c, 0x8973, + 0x0030, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, + 0x080c, 0xa7c0, 0x0cb0, 0x080c, 0xa7fc, 0x0c98, 0x9186, 0x0014, + 0x1db0, 0x080c, 0x886e, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, + 0xa261, 0x0d68, 0x080c, 0x2fda, 0x080c, 0xc227, 0x080c, 0xbd0c, + 0x1190, 0x080c, 0x3003, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, + 0x080c, 0xa7c0, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, + 0xc185, 0x2102, 0x0870, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, + 0x0840, 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, + 0x1894, 0x2079, 0x0000, 0x080c, 0x3369, 0x00fe, 0x00ee, 0x0804, + 0xa6a9, 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, + 0xa7c0, 0x0804, 0xa6a9, 0x90b2, 0x0040, 0x1a04, 0xa7a9, 0x2008, + 0x0002, 0xa743, 0xa744, 0xa747, 0xa74a, 0xa74d, 0xa750, 0xa741, + 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, + 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, + 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa753, + 0xa75e, 0xa741, 0xa760, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741, + 0xa741, 0xa75e, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, + 0xa741, 0xa741, 0xa741, 0xa790, 0xa75e, 0xa741, 0xa75a, 0xa741, + 0xa741, 0xa741, 0xa75b, 0xa741, 0xa741, 0xa741, 0xa75e, 0xa787, + 0xa741, 0x080c, 0x0db4, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, + 0x0003, 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, + 0x2001, 0x0009, 0x00b0, 0x080c, 0x886e, 0x6003, 0x0005, 0x080c, + 0x8973, 0x0070, 0x0018, 0x0010, 0x080c, 0x618f, 0x0804, 0xa7a1, + 0x080c, 0x886e, 0x080c, 0xc22a, 0x6003, 0x0004, 0x080c, 0x8973, + 0x0005, 0x080c, 0x618f, 0x080c, 0x886e, 0x6003, 0x0002, 0x0036, + 0x2019, 0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, + 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, + 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8973, 0x0c08, 0x080c, + 0x886e, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x08c0, + 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x3369, + 0x00fe, 0x00ee, 0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, + 0x0838, 0x080c, 0x886e, 0x6003, 0x0002, 0x080c, 0xc22a, 0x0804, + 0x8973, 0x2600, 0x2008, 0x0002, 0xa7be, 0xa7be, 0xa7be, 0xa7a1, + 0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0xa7a1, 0xa7be, 0xa7a1, + 0xa7be, 0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0x080c, 0x0db4, + 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xbb17, 0x0568, 0x6014, + 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, + 0x1148, 0x080c, 0x512f, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, + 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, + 0xc0f1, 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, + 0x0db4, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xc010, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xc059, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xc085, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbfa6, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xbd56, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbd97, 0x0804, + 0xa884, 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0xa20a, 0x04e0, + 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xa531, 0x04a8, 0x6604, + 0x96b6, 0x0022, 0x1118, 0x080c, 0xa242, 0x0470, 0x6604, 0x96b6, + 0x0035, 0x1118, 0x080c, 0xa352, 0x0438, 0x6604, 0x96b6, 0x0039, + 0x1118, 0x080c, 0xa4c6, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, + 0x080c, 0xa27a, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, + 0xa2b6, 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa2e1, + 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, + 0x1128, 0x00be, 0x0804, 0xab42, 0x00be, 0x0005, 0x080c, 0x9ec7, + 0x0cd8, 0xa8a1, 0xa8a4, 0xa8a1, 0xa8e8, 0xa8a1, 0xaa76, 0xab4f, + 0xa8a1, 0xa8a1, 0xab1c, 0xa8a1, 0xab30, 0x0096, 0x080c, 0x150f, + 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, + 0x9e32, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, + 0x9086, 0x0074, 0x1540, 0x080c, 0xd26c, 0x11b0, 0x6010, 0x00b6, + 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, + 0xb802, 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, + 0x3003, 0x080c, 0x9e32, 0x0088, 0x2001, 0x000a, 0x080c, 0x618f, + 0x080c, 0x3003, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8439, + 0x080c, 0x8973, 0x0010, 0x080c, 0xaa61, 0x00ee, 0x0005, 0x00d6, + 0xb800, 0xd084, 0x0158, 0x9006, 0x080c, 0x617b, 0x2069, 0x1853, + 0x6804, 0x0020, 0x2001, 0x0006, 0x080c, 0x61bb, 0x00de, 0x0005, + 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, + 0x1904, 0xaa3a, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, + 0x080c, 0xac93, 0x0804, 0xa99f, 0x00d6, 0x080c, 0x6fb2, 0x0198, + 0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e, 0x05c8, 0x080c, + 0x539a, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, + 0xa833, 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x6586, + 0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, + 0xc0f1, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, + 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003, + 0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x00de, 0x0804, 0xaa3b, + 0x00de, 0x080c, 0xac88, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, + 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, + 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, + 0x080c, 0xc0f1, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, + 0x0200, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x3003, 0x080c, + 0x9e32, 0x0804, 0xaa3b, 0x080c, 0xaa49, 0x6014, 0x9005, 0x0190, + 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, + 0xc0f1, 0x08f8, 0x080c, 0xaa3f, 0x0160, 0x9006, 0x080c, 0x617b, + 0x2001, 0x0004, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f, + 0x08a0, 0x2001, 0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, + 0x0003, 0x080c, 0x8439, 0x080c, 0x8973, 0x0804, 0xaa3b, 0xb85c, + 0xd0e4, 0x01d0, 0x080c, 0xbf26, 0x080c, 0x6fb2, 0x0118, 0xd0dc, + 0x1904, 0xa961, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, + 0x0002, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x26d7, + 0x78e2, 0x00fe, 0x0804, 0xa961, 0x080c, 0xbf63, 0x2011, 0x1836, + 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xd3c5, 0x000e, 0x1904, + 0xa961, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x618f, 0x9006, + 0x080c, 0x617b, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, + 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, + 0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, + 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26ac, 0x00f6, + 0x2100, 0x900e, 0x080c, 0x2663, 0x795a, 0x00fe, 0x9186, 0x0081, + 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, + 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, + 0x080c, 0x26ac, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, + 0x080c, 0x2663, 0x795a, 0x00fe, 0x8108, 0x080c, 0x61de, 0x2b00, + 0x00ce, 0x1904, 0xa961, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, + 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, + 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023, + 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c, + 0x8973, 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, + 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, + 0x0005, 0x00e6, 0x080c, 0xd83b, 0x0190, 0x2071, 0x0260, 0x7108, + 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, + 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, + 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x618f, 0x080c, 0x539a, + 0x1120, 0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x3003, 0x6020, + 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9e32, 0x00b6, 0x00e6, + 0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, + 0xab13, 0x00d6, 0x080c, 0x6fb2, 0x0198, 0x0026, 0x2011, 0x0010, + 0x080c, 0x6586, 0x002e, 0x05c8, 0x080c, 0x539a, 0x1540, 0x6014, + 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, + 0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0530, 0x6014, + 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, + 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xc0f1, 0x0040, 0x6014, + 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, + 0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003, 0x080c, 0x9e32, 0x001e, + 0x080c, 0x30d5, 0x00de, 0x0804, 0xab17, 0x00de, 0x080c, 0x539a, + 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, + 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e, 0x003e, 0x00d6, + 0x6010, 0x2058, 0x080c, 0x62d9, 0x080c, 0xa8d7, 0x00de, 0x080c, + 0xad59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, + 0x0006, 0x080c, 0x618f, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, + 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, + 0x2011, 0x4000, 0x080c, 0xc0f1, 0x0060, 0xa864, 0x9084, 0x00ff, + 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, + 0x0200, 0x009e, 0x080c, 0x3003, 0x6020, 0x9086, 0x000a, 0x0138, + 0x080c, 0x9e32, 0x0020, 0x080c, 0xa7c0, 0x080c, 0xaa61, 0x001e, + 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, + 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, + 0x6007, 0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, + 0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, + 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x618f, 0x0804, 0x9e32, + 0x0804, 0xaa61, 0x0002, 0xa8a1, 0xab5a, 0xa8a1, 0xab99, 0xa8a1, + 0xac44, 0xab4f, 0xa8a1, 0xa8a1, 0xac57, 0xa8a1, 0xac67, 0x6604, + 0x9686, 0x0003, 0x0904, 0xaa76, 0x96b6, 0x001e, 0x1110, 0x080c, + 0x9e32, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xac77, 0x11a0, + 0x9006, 0x080c, 0x617b, 0x080c, 0x2fda, 0x080c, 0xc227, 0x2001, + 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x8439, 0x080c, 0x8973, 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, + 0x2fda, 0x080c, 0xc227, 0x080c, 0xaa61, 0x00ce, 0x00de, 0x00be, + 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xac85, 0x00d6, + 0x2069, 0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, + 0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, + 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x617b, 0x2001, + 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x8439, 0x080c, 0x8973, 0x0804, 0xac14, 0x080c, 0xbb17, 0x01b0, + 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, + 0x0016, 0x2001, 0x0002, 0x080c, 0xc14b, 0x00b0, 0x6014, 0x2048, + 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, + 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xa7c0, 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, 0x618f, 0x2001, 0x0028, 0x601a, 0x6007, + 0x0052, 0x0010, 0x080c, 0xaa61, 0x002e, 0x00be, 0x009e, 0x0005, + 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xbb17, 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, 0x5c64, 0x00ee, + 0x0010, 0x080c, 0x2fda, 0x0870, 0x080c, 0xac85, 0x1160, 0x2001, + 0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, + 0x8439, 0x0804, 0x8973, 0x080c, 0xa7c0, 0x0804, 0xaa61, 0x0469, + 0x1160, 0x2001, 0x0008, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, + 0x0005, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x00e9, + 0x1160, 0x2001, 0x000a, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, + 0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x2009, + 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, + 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, + 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x624d, 0x001e, + 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, + 0x0016, 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, + 0x200a, 0x080c, 0xad2b, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, + 0x200a, 0x080c, 0x655e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, + 0x080c, 0xd52a, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, + 0x002a, 0x2009, 0x0001, 0x080c, 0x2fa5, 0x00e6, 0x2071, 0x1800, + 0x080c, 0x2dbb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, + 0x007f, 0x080c, 0x30d5, 0x8108, 0x1f04, 0xacc9, 0x015e, 0x00ce, + 0x080c, 0xac88, 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, + 0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, + 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, + 0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, + 0x080c, 0x26ac, 0x080c, 0x6fb2, 0x0170, 0x2071, 0x0260, 0x2069, + 0x1953, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, + 0x680e, 0x080c, 0xbf26, 0x0040, 0x2001, 0x0006, 0x080c, 0x618f, + 0x080c, 0x3003, 0x080c, 0x9e32, 0x001e, 0x003e, 0x00de, 0x00ee, + 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, + 0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, + 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, + 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, + 0xae0d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, + 0x080c, 0xae0d, 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, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, + 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, + 0xade5, 0x080c, 0xd55b, 0x0904, 0xadde, 0x6720, 0x9786, 0x0007, + 0x0904, 0xadde, 0x2500, 0x9c06, 0x0904, 0xadde, 0x2400, 0x9c06, + 0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, + 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000, + 0x9086, 0x0004, 0x1110, 0x080c, 0x190d, 0x9786, 0x000a, 0x0148, + 0x080c, 0xbd1d, 0x1130, 0x00ce, 0x080c, 0xa7c0, 0x080c, 0x9e62, + 0x00e8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01a8, 0x9786, 0x0003, + 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, + 0x2048, 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, + 0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x00ce, 0x9ce0, 0x0018, + 0x7064, 0x9c02, 0x1210, 0x0804, 0xad8c, 0x012e, 0x000e, 0x002e, + 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, + 0x0006, 0x1118, 0x080c, 0xd4d5, 0x0c30, 0x9786, 0x000a, 0x0998, + 0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, + 0xadf9, 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, 0x0db4, 0x080c, 0xbd0c, 0x0120, 0x080c, + 0xbd1d, 0x0168, 0x0028, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x0138, + 0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x080c, + 0xa7c0, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, + 0x000a, 0x0005, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, + 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae70, 0xae70, + 0xae70, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae6e, 0x080c, 0x0db4, + 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x9186, 0x0013, + 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xaf25, 0x9186, 0x0027, + 0x1520, 0x080c, 0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096, + 0x6114, 0x2148, 0x080c, 0xbb17, 0x0198, 0x080c, 0xbd1d, 0x1118, + 0x080c, 0xa7c0, 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, + 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x688c, 0x080c, 0xbd00, + 0x009e, 0x080c, 0x9e32, 0x0804, 0x8973, 0x9186, 0x0014, 0x1120, + 0x6004, 0x9082, 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, + 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, + 0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, + 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, + 0x2079, 0x19b8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x82dd, + 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, + 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaf63, 0x0005, + 0x0002, 0xaeff, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd, + 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaf1a, 0xaf1a, 0xaf1a, 0xaf1a, + 0xaefd, 0xaf1a, 0xaefd, 0xaf1a, 0xaefd, 0x080c, 0x0db4, 0x080c, + 0x886e, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0168, 0xa867, + 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, + 0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c, + 0x8973, 0x0005, 0x080c, 0x886e, 0x080c, 0xbd1d, 0x090c, 0xa7c0, + 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x0002, 0xaf3c, 0xaf3a, + 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, + 0xaf3a, 0xaf53, 0xaf53, 0xaf53, 0xaf53, 0xaf3a, 0xaf5d, 0xaf3a, + 0xaf53, 0xaf3a, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014, + 0x2048, 0x2001, 0x1959, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, + 0x6003, 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, + 0x6003, 0x0002, 0x0cb8, 0x080c, 0x886e, 0x080c, 0xc22a, 0x080c, + 0xc22f, 0x6003, 0x000f, 0x0804, 0x8973, 0x080c, 0x886e, 0x080c, + 0x9e32, 0x0804, 0x8973, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, + 0x0208, 0x000a, 0x0005, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, + 0xaf81, 0xb05e, 0xaf7f, 0xb092, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, + 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xb092, 0x080c, + 0x0db4, 0x00b6, 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, + 0x86ff, 0x1528, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb04d, + 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, + 0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0x080c, 0x66a7, 0x6210, + 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, + 0x1904, 0xb031, 0x080c, 0x9e32, 0x009e, 0x00be, 0x0005, 0x968c, + 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb035, + 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, 0xaf88, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, + 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, + 0x2011, 0x0025, 0x080c, 0xb712, 0x003e, 0xd6cc, 0x0904, 0xaf9d, + 0x7154, 0xa98a, 0x81ff, 0x0904, 0xaf9d, 0x9192, 0x0021, 0x1278, + 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb712, 0x2011, + 0x0205, 0x2013, 0x0000, 0x080c, 0xc1b7, 0x0804, 0xaf9d, 0xa868, + 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, + 0x080c, 0xb6b1, 0x00ae, 0x080c, 0xc1b7, 0x080c, 0xb702, 0x0804, + 0xaf9f, 0x080c, 0xbe10, 0x0804, 0xafac, 0xa87c, 0xd0ac, 0x0904, + 0xafb8, 0xa880, 0xd0bc, 0x1904, 0xafb8, 0x7348, 0xa838, 0x9306, + 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xafb8, 0xd6d4, 0x0190, + 0xab38, 0x9305, 0x0904, 0xafb8, 0x0068, 0xa87c, 0xd0ac, 0x0904, + 0xaf90, 0xa838, 0xa934, 0x9105, 0x0904, 0xaf90, 0xa880, 0xd0bc, + 0x1904, 0xaf90, 0x080c, 0xbe4a, 0x0804, 0xafac, 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, 0x1a5c, 0x080c, 0x8456, 0x080c, 0x8a4e, + 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, + 0x0208, 0x000a, 0x0005, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0xb0af, + 0xb0b1, 0xb147, 0xb0af, 0xb0af, 0xb15e, 0xb1ea, 0xb0af, 0xb0af, + 0xb0af, 0xb0af, 0xb1ff, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0x080c, + 0x0db4, 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, 0xb142, 0x9694, 0xff00, 0x9284, 0x0c00, + 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, + 0xb142, 0x080c, 0x0feb, 0x090c, 0x0db4, 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, 0xb6f9, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, + 0x080c, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, - 0x0029, 0x080c, 0xb6f9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, + 0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, - 0x080c, 0xb698, 0x080c, 0x18eb, 0x009e, 0x00ee, 0x00ae, 0x007e, - 0x0005, 0x2001, 0x1959, 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, - 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, - 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xb415, 0x6043, 0x0000, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, - 0xb3e4, 0xa978, 0xa868, 0xd0fc, 0x0904, 0xb3a5, 0x0016, 0xa87c, - 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, - 0x90b6, 0x0002, 0x0904, 0xb373, 0x9086, 0x0028, 0x1904, 0xb35f, - 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xb37b, 0x6024, 0xd0f4, - 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, - 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, 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, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, - 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbe31, 0x0804, 0xb415, 0xd1dc, - 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0c1, 0x0118, + 0x080c, 0xb6b1, 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, 0x1a5c, 0x0804, 0x9379, 0x6003, 0x0002, + 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, + 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, + 0x080c, 0x1648, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, + 0x009e, 0x080c, 0x886e, 0x080c, 0x8973, 0x0096, 0x2001, 0x1959, + 0x2004, 0x6042, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x6114, 0x2148, + 0xa97c, 0xd1e4, 0x0904, 0xb1e5, 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, 0x0f9d, 0x001e, + 0x0440, 0x0016, 0x080c, 0x0f9d, 0x009e, 0xa974, 0x0016, 0x080c, + 0xb702, 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, 0x66a7, + 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005, 0x080c, + 0xbe10, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x886e, + 0x080c, 0x8973, 0x2019, 0x0001, 0x080c, 0x96d8, 0x6003, 0x0002, + 0x080c, 0xc22f, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x0005, 0x6004, + 0x9086, 0x0040, 0x1120, 0x080c, 0x886e, 0x080c, 0x8973, 0x2019, + 0x0001, 0x080c, 0x96d8, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c, + 0xc227, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0150, 0xa867, + 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x688c, 0x080c, + 0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8a4e, 0x0005, 0xa87b, + 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, + 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a4a, 0x2104, 0x8000, + 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, + 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb25a, 0xb25a, + 0xb25a, 0xb25a, 0xb25a, 0xb25c, 0xb25a, 0xb25a, 0xb302, 0xb25a, + 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, + 0xb25a, 0xb433, 0x080c, 0x0db4, 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, 0xb2fb, 0x9694, + 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, + 0x9284, 0x0300, 0x0904, 0xb2fb, 0x9686, 0x0100, 0x1130, 0x7064, + 0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0feb, 0x090c, + 0x0db4, 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, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, + 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, + 0x2011, 0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000, + 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, + 0x2950, 0x080c, 0xb6b1, 0x080c, 0x18eb, 0x009e, 0x00ee, 0x00ae, + 0x007e, 0x0005, 0x2001, 0x1959, 0x2004, 0x6042, 0x0096, 0x6114, + 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, + 0x6003, 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xb42e, 0x6043, 0x0000, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, + 0x0904, 0xb3fd, 0xa978, 0xa868, 0xd0fc, 0x0904, 0xb3be, 0x0016, + 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, + 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb38c, 0x9086, 0x0028, 0x1904, + 0xb378, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xb394, 0x6024, + 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, + 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, 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, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, + 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbe4a, 0x0804, 0xb42e, + 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da, + 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, + 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xb227, 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, 0xc1b7, 0x001e, 0xa874, 0x0006, + 0x2148, 0x080c, 0x0f9d, 0x001e, 0x0804, 0xb42a, 0x0016, 0x00a6, + 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, + 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, + 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, - 0x9115, 0x190c, 0xb20e, 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, 0xc19e, 0x001e, 0xa874, 0x0006, 0x2148, - 0x080c, 0x0f9d, 0x001e, 0x0804, 0xb411, 0x0016, 0x00a6, 0x2150, - 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, - 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, - 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0c1, 0x0118, 0xb174, - 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, - 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, - 0x190c, 0xb20e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, - 0x00ae, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xc19e, 0xa974, 0x0016, - 0x080c, 0xb6e9, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, - 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, - 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xc0c1, - 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, - 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, - 0xa938, 0x9115, 0x190c, 0xb20e, 0xa974, 0x0016, 0x080c, 0x66a0, - 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e19, 0x009e, 0x0005, 0x080c, - 0xbdf7, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, - 0x18f9, 0x009e, 0x0005, 0x080c, 0x8846, 0x0010, 0x080c, 0x88fb, - 0x080c, 0xbafe, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xbd04, - 0x1118, 0x080c, 0xa7a7, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, - 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, - 0x0029, 0x1110, 0x080c, 0xd7b3, 0xa877, 0x0000, 0x080c, 0x6885, - 0x009e, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0804, 0x8a26, 0xa87b, - 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, - 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb471, 0xb471, 0xb471, - 0xb471, 0xb471, 0xb473, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, - 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, - 0xb471, 0x080c, 0x0db4, 0x080c, 0x5387, 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, 0x6885, 0x009e, 0x0804, 0x9e19, 0x9182, - 0x0085, 0x0002, 0xb4a9, 0xb4a7, 0xb4a7, 0xb4b5, 0xb4a7, 0xb4a7, - 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0x080c, - 0x0db4, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091, - 0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, - 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xbaec, - 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, - 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb724, 0x00ce, 0x0128, - 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, - 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x9280, 0x0004, 0x00b6, - 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, - 0x00c6, 0x2260, 0x080c, 0xbe31, 0x00ce, 0x00ee, 0x00de, 0x005e, - 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, - 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085, - 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0db4, - 0x080c, 0x8846, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x0140, - 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6885, - 0x009e, 0x080c, 0x9e49, 0x0804, 0x894b, 0xb52a, 0xb52c, 0xb52c, - 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, - 0xb52a, 0xb52a, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e49, - 0x080c, 0x894b, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, - 0x0085, 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8846, - 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x0096, 0x6014, 0x2048, 0x080c, - 0xbafe, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, - 0x080c, 0x6885, 0x080c, 0xbce7, 0x009e, 0x080c, 0x9e19, 0x080c, - 0x894b, 0x0005, 0x080c, 0x9eae, 0x0ce0, 0x9186, 0x0014, 0x1dd0, - 0x080c, 0x8846, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x0d60, - 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, - 0xa882, 0x08f0, 0x0002, 0xb582, 0xb580, 0xb580, 0xb580, 0xb580, - 0xb580, 0xb59a, 0xb580, 0xb580, 0xb580, 0xb580, 0xb580, 0xb580, - 0x080c, 0x0db4, 0x080c, 0x8846, 0x6034, 0x908c, 0xff00, 0x810f, - 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957, - 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, - 0x894b, 0x0005, 0x080c, 0x8846, 0x6034, 0x908c, 0xff00, 0x810f, - 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957, - 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, - 0x894b, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, - 0x0012, 0x0804, 0x9eae, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5ca, - 0xb617, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, - 0x080c, 0x0db4, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb62b, 0x080c, - 0xbafe, 0x1118, 0x080c, 0xbce7, 0x0068, 0x6014, 0x2048, 0xa87c, - 0xd0e4, 0x1110, 0x080c, 0xbce7, 0xa867, 0x0103, 0x080c, 0xc1d9, - 0x080c, 0x6885, 0x00d6, 0x2c68, 0x080c, 0x9dc3, 0x01d0, 0x6003, - 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, - 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, - 0xbf73, 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x83c9, 0x080c, - 0x894b, 0x2d60, 0x00de, 0x080c, 0x9e19, 0x009e, 0x0005, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, - 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, - 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc171, 0x11f0, - 0x080c, 0x9dc3, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, - 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, - 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, - 0x080c, 0xbf73, 0x080c, 0x83c9, 0x080c, 0x894b, 0x2d60, 0x00de, - 0x0804, 0x9e19, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x01c8, - 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, - 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, - 0x0005, 0x080c, 0xbdf3, 0xa877, 0x0000, 0x080c, 0x6885, 0x080c, - 0xbce7, 0x009e, 0x0804, 0x9e19, 0x0016, 0x0096, 0x6014, 0x2048, - 0x080c, 0xbafe, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, - 0x0000, 0x080c, 0x6885, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, - 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9eae, - 0x0030, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, 0x0005, - 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, - 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, - 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb6f9, 0x96b2, 0x0020, - 0xb004, 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 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, 0x6885, 0x2a48, 0x0cb8, 0x080c, 0x6885, 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, 0xb75f, 0xb75f, - 0xb75a, 0xb781, 0xb74d, 0xb75a, 0xb781, 0xb75a, 0xb74d, 0xb74d, - 0xb75a, 0xb75a, 0xb75a, 0xb74d, 0xb74d, 0x080c, 0x0db4, 0x0036, - 0x2019, 0x0010, 0x080c, 0xd0c7, 0x6023, 0x0006, 0x6003, 0x0007, - 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, - 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xbafe, 0x01c0, 0xa864, - 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, - 0x900e, 0x2001, 0x0005, 0x080c, 0x6abf, 0x080c, 0xbdf3, 0x080c, - 0x6878, 0x080c, 0x9e49, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, - 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xb797, - 0xb7c5, 0xb799, 0xb7e6, 0xb7c0, 0xb797, 0xb75a, 0xb75f, 0xb75f, - 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0x080c, - 0x0db4, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, - 0x6014, 0x2048, 0x080c, 0xbafe, 0x0158, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbdf3, - 0x009e, 0x080c, 0xc1b3, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, - 0x0002, 0x080c, 0x83c9, 0x080c, 0x894b, 0x9085, 0x0001, 0x0005, - 0x0066, 0x080c, 0x190d, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19b8, - 0x7024, 0x9c06, 0x1120, 0x080c, 0x9649, 0x00ee, 0x0850, 0x6020, - 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, - 0x0001, 0x2c40, 0x080c, 0x97a1, 0x009e, 0x008e, 0x0010, 0x080c, - 0x9546, 0x00ee, 0x1904, 0xb799, 0x0804, 0xb75a, 0x0036, 0x00e6, - 0x2071, 0x19b8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x96bf, - 0x00ee, 0x003e, 0x0804, 0xb799, 0x080c, 0x98d1, 0x00ee, 0x003e, - 0x1904, 0xb799, 0x0804, 0xb75a, 0x00c6, 0x6020, 0x9084, 0x000f, - 0x0013, 0x00ce, 0x0005, 0xb819, 0xb8e2, 0xba49, 0xb823, 0x9e49, - 0xb819, 0xd0b9, 0xc21b, 0xb8e2, 0xb812, 0xbac8, 0xb812, 0xb812, - 0xb812, 0xb812, 0x080c, 0x0db4, 0x080c, 0xbd04, 0x1110, 0x080c, - 0xa7a7, 0x0005, 0x080c, 0x8846, 0x080c, 0x894b, 0x0804, 0x9e19, - 0x601b, 0x0001, 0x0005, 0x080c, 0xbafe, 0x0130, 0x6014, 0x0096, - 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, - 0x0db4, 0x0002, 0xb842, 0xb844, 0xb868, 0xb87c, 0xb8a0, 0xb842, - 0xb819, 0xb819, 0xb819, 0xb87c, 0xb87c, 0xb842, 0xb842, 0xb842, - 0xb842, 0xb886, 0x080c, 0x0db4, 0x00e6, 0x6014, 0x0096, 0x2048, - 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7024, 0x9c06, - 0x01a0, 0x080c, 0x9546, 0x080c, 0xc1b3, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c, - 0x83c9, 0x080c, 0x894b, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, - 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, - 0xc1b3, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, - 0x83c9, 0x080c, 0x894b, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, - 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x5387, - 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, - 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, - 0x4005, 0xa89b, 0x0004, 0x080c, 0x6885, 0x009e, 0x0804, 0x9e19, - 0x6014, 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, - 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, - 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, - 0x080c, 0x1518, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, - 0x6014, 0x0096, 0x904d, 0x090c, 0x0db4, 0xa880, 0xd0f4, 0x1130, - 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, 0x2001, - 0x0037, 0x2c08, 0x080c, 0x1518, 0x6000, 0x9086, 0x0004, 0x1120, - 0x2009, 0x0048, 0x080c, 0x9e93, 0x0005, 0x009e, 0x080c, 0x190d, - 0x0804, 0xb868, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x000b, - 0x0005, 0xb8f9, 0xb820, 0xb8fb, 0xb8f9, 0xb8fb, 0xb8fb, 0xb81a, - 0xb8f9, 0xb814, 0xb814, 0xb8f9, 0xb8f9, 0xb8f9, 0xb8f9, 0xb8f9, - 0xb8f9, 0x080c, 0x0db4, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, - 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0db4, 0x00b6, 0x0013, - 0x00be, 0x0005, 0xb916, 0xb9e3, 0xb918, 0xb958, 0xb918, 0xb958, - 0xb918, 0xb926, 0xb916, 0xb958, 0xb916, 0xb947, 0x080c, 0x0db4, - 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, - 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb9df, 0x6004, 0x080c, - 0xbd04, 0x0904, 0xb9fc, 0x908e, 0x0004, 0x1110, 0x080c, 0x2ffc, - 0x908e, 0x0021, 0x0904, 0xba00, 0x908e, 0x0022, 0x0904, 0xba44, - 0x908e, 0x003d, 0x0904, 0xba00, 0x908e, 0x0039, 0x0904, 0xba04, - 0x908e, 0x0035, 0x0904, 0xba04, 0x908e, 0x001e, 0x0178, 0x908e, - 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, - 0x0006, 0x0110, 0x080c, 0x2fd7, 0x080c, 0xa7a7, 0x0804, 0x9e49, - 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb9d0, 0x9186, - 0x0002, 0x1904, 0xb9a5, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, - 0x080c, 0x6fa7, 0x11b0, 0x080c, 0xc1f9, 0x0138, 0x080c, 0x6fca, - 0x1120, 0x080c, 0x6eb7, 0x0804, 0xba2d, 0x2001, 0x194e, 0x2003, - 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x6ed9, 0x0804, - 0xba2d, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, - 0xba2d, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xba2d, 0xb840, 0x9084, - 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, - 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x9dc3, 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, 0x5c5d, 0x00ee, 0x080c, 0xa7a7, 0x0030, 0x080c, - 0xa7a7, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x080c, 0x2ffc, 0x012e, 0x00ee, 0x080c, 0x9e49, 0x0005, - 0x2001, 0x0002, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002, - 0x080c, 0x8411, 0x080c, 0x894b, 0x00de, 0x00ce, 0x0c80, 0x080c, - 0x2ffc, 0x0804, 0xb954, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, - 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, - 0xb9a5, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c, - 0x894b, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa7a7, 0x0804, 0xb956, - 0x080c, 0xa7e3, 0x0804, 0xb956, 0x00d6, 0x2c68, 0x6104, 0x080c, - 0xc171, 0x00de, 0x0118, 0x080c, 0x9e19, 0x00f0, 0x6004, 0x8007, - 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1958, 0x2004, - 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, - 0x080c, 0x83c9, 0x080c, 0x894b, 0x0005, 0x00de, 0x00ce, 0x080c, - 0xa7a7, 0x080c, 0x2fd7, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, - 0x2ffc, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, - 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa248, 0x1904, 0xb9fc, - 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0096, 0x00d6, - 0x001b, 0x00de, 0x009e, 0x0005, 0xba64, 0xba64, 0xba64, 0xba64, - 0xba64, 0xba64, 0xba64, 0xba64, 0xba64, 0xb819, 0xba64, 0xb820, - 0xba66, 0xb820, 0xba73, 0xba64, 0x080c, 0x0db4, 0x6004, 0x9086, - 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x83c9, - 0x080c, 0x894b, 0x0005, 0x080c, 0xc1ed, 0x0118, 0x080c, 0xc200, - 0x0010, 0x080c, 0xc20e, 0x080c, 0xbce7, 0x080c, 0xbafe, 0x0570, - 0x080c, 0x2fd7, 0x080c, 0xbafe, 0x0168, 0x6014, 0x2048, 0xa867, - 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, - 0x080c, 0x6885, 0x2c68, 0x080c, 0x9dc3, 0x0150, 0x6810, 0x6012, - 0x080c, 0xbf73, 0x00c6, 0x2d60, 0x080c, 0x9e49, 0x00ce, 0x0008, - 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, - 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x00c8, 0x080c, 0xc1ed, - 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2fd7, 0x08d0, - 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, - 0x0035, 0x1118, 0x080c, 0x2fd7, 0x0868, 0x080c, 0x9e49, 0x0005, - 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xbade, 0xbade, - 0xbae0, 0xbae0, 0xbae0, 0xbade, 0xbade, 0x9e49, 0xbade, 0xbade, - 0xbade, 0xbade, 0xbade, 0xbade, 0xbade, 0xbade, 0x080c, 0x0db4, - 0x080c, 0x98d1, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, - 0x6885, 0x009e, 0x0804, 0x9e19, 0x9284, 0x0007, 0x1158, 0x9282, - 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, - 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, - 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, - 0x0110, 0x080c, 0x1096, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, - 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, - 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, - 0x080c, 0xc1f9, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, - 0x0004, 0x1148, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00c6, 0x080c, - 0x9e49, 0x00ce, 0x0060, 0x080c, 0xbeed, 0x0148, 0x080c, 0xbd04, - 0x1110, 0x080c, 0xa7a7, 0x00c6, 0x080c, 0x9e19, 0x00ce, 0x9ce0, - 0x0018, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, - 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, - 0x210c, 0x81ff, 0x0128, 0x2061, 0x1a80, 0x6112, 0x080c, 0x2fd7, - 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9dc3, 0x01b0, 0x6656, - 0x2b00, 0x6012, 0x080c, 0x5387, 0x0118, 0x080c, 0xbc2b, 0x0168, - 0x080c, 0xbf73, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0x9e93, - 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, - 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9e66, 0x0560, 0x6057, - 0x0000, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0003, 0x0016, - 0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x2c08, 0x080c, - 0xd27b, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x9e19, 0x9085, - 0x0001, 0x0070, 0x080c, 0x5387, 0x0128, 0xd18c, 0x1170, 0x080c, - 0xbc2b, 0x0148, 0x2009, 0x004c, 0x080c, 0x9e93, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, - 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, - 0x0016, 0x080c, 0x9dc3, 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, - 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xbc3d, 0x9186, 0x004d, - 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, 0x200c, 0xd1fc, - 0x0168, 0x2f60, 0x080c, 0x9e19, 0x00d0, 0x2001, 0x1950, 0x200c, - 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e19, 0x0088, 0x2f60, 0x080c, - 0x5387, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, - 0x7816, 0x001e, 0x0016, 0x080c, 0x9e93, 0x9085, 0x0001, 0x001e, - 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, - 0x9dc3, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, - 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194f, 0x200c, - 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e19, 0x0060, 0x2f60, 0x080c, - 0x5387, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, - 0x080c, 0x9e93, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, - 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4872, 0x00ce, 0x1120, - 0x080c, 0x9e19, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, - 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, - 0x2091, 0x8000, 0x080c, 0x636b, 0x0158, 0x2001, 0xbc42, 0x0006, - 0x900e, 0x2400, 0x080c, 0x6abf, 0x080c, 0x6885, 0x000e, 0x0807, - 0x2418, 0x080c, 0x87e0, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, - 0x0001, 0x2608, 0x080c, 0x8561, 0x008e, 0x080c, 0x8441, 0x2f08, - 0x2648, 0x080c, 0xd27b, 0xb93c, 0x81ff, 0x090c, 0x8632, 0x080c, - 0x894b, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, - 0x8000, 0x080c, 0x9dc3, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, - 0xbf73, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, - 0x9e93, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x01b8, 0x660a, - 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0008, 0x2900, 0x6016, - 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0021, 0x080c, - 0x9e93, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, - 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, - 0x9dc3, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, - 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9e93, 0x9085, - 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x0188, 0x2b08, 0x6112, - 0x080c, 0xbf73, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, - 0x080c, 0x9e93, 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, 0x6020, 0x9086, - 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xbafe, 0x0168, 0xa864, - 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, - 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x0198, - 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0001, 0x2900, 0x6016, - 0x080c, 0x2fd7, 0x2009, 0x0028, 0x080c, 0x9e93, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, - 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, - 0xaa30, 0x00be, 0x080c, 0xac6f, 0x6003, 0x0001, 0x6007, 0x0029, - 0x080c, 0x8411, 0x080c, 0x894b, 0x0078, 0x6014, 0x0096, 0x2048, - 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xc132, - 0x080c, 0xa7a7, 0x080c, 0x9e19, 0x0005, 0x0096, 0x6014, 0x904d, - 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, - 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6885, 0x012e, 0x009e, 0x080c, 0x9e19, 0x0c30, 0x0096, 0x9186, - 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6188, 0x00e8, 0x9186, - 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, - 0x6010, 0x00b6, 0x2058, 0x080c, 0x62d2, 0x00be, 0x080c, 0xad40, - 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, - 0x2001, 0x0006, 0x080c, 0x6188, 0x6014, 0x2048, 0xa868, 0xd0fc, - 0x0170, 0x080c, 0xa21c, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, - 0x0528, 0x080c, 0xa7a7, 0x080c, 0x9e19, 0x009e, 0x0005, 0x6014, - 0x6310, 0x2358, 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0000, 0xa883, - 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6885, 0x012e, 0x080c, 0x9e19, 0x08f8, 0x6014, 0x904d, - 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, - 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, - 0x6885, 0x012e, 0x080c, 0x9e19, 0x0840, 0xa878, 0x9086, 0x0005, - 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, - 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, - 0x83c9, 0x080c, 0x894b, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, - 0x00ce, 0x0005, 0xb819, 0xbe23, 0xbe23, 0xbe26, 0xd559, 0xd574, - 0xd577, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, - 0xb819, 0x080c, 0x0db4, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, - 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, - 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, - 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, - 0x9dc3, 0x0508, 0x7810, 0x6012, 0x080c, 0xbf73, 0x7820, 0x9086, - 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, - 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, - 0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x83c9, 0x080c, 0x894b, - 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959, 0x2004, - 0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, - 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, - 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, - 0x0f9d, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, - 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, - 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, - 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, - 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, - 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, - 0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, - 0x83c9, 0x080c, 0x894b, 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, 0x1953, 0x200c, 0x8000, 0x2014, 0x2001, - 0x0032, 0x080c, 0x8248, 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011, - 0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, 0x2071, - 0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8248, 0x2001, - 0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1959, - 0x9288, 0x000a, 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, - 0x080c, 0x1518, 0x080c, 0x653c, 0x00ee, 0x003e, 0x002e, 0x001e, - 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957, 0x2003, - 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d, 0x701b, - 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e, 0x2102, - 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, 0x080c, 0x1518, 0x00ee, - 0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, - 0x101d, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0x9dc3, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, - 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9e93, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, 0x0018, - 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, - 0x8b3b, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54, - 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, - 0x080c, 0x301c, 0x080c, 0xa21c, 0x0020, 0x080c, 0xa7a7, 0x080c, - 0x9e19, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206, - 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9dc3, - 0x0188, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0001, 0x2900, - 0x6016, 0x2009, 0x004d, 0x080c, 0x9e93, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x0016, 0x080c, 0x9dc3, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbf73, - 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9e93, 0x9085, - 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, - 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048, - 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971, - 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, - 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, - 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc7b4, 0x001e, - 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, - 0x0103, 0x0010, 0x080c, 0xa7a7, 0x080c, 0x9e19, 0x00fe, 0x00ee, - 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, - 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, - 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, - 0x8b3b, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78, - 0x9206, 0x1110, 0x080c, 0x2fd7, 0x080c, 0xa21c, 0x0020, 0x080c, - 0xa7a7, 0x080c, 0x9e19, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, - 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, - 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530, - 0x6014, 0x2048, 0x2c78, 0x080c, 0x8b3b, 0x05f0, 0x7078, 0xaacc, - 0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, 0x2fd7, - 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5337, - 0x001e, 0x0010, 0x080c, 0x5128, 0x080c, 0xbafe, 0x0508, 0xa87b, - 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xbafe, - 0x01b8, 0x6014, 0x2048, 0x080c, 0x5128, 0x1d70, 0xa87b, 0x0030, - 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, - 0x8000, 0xa867, 0x0139, 0x080c, 0x6885, 0x012e, 0x080c, 0x9e19, - 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930, - 0x0888, 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, 0x080c, 0xbafe, 0x0904, 0xc12e, 0x0096, - 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, - 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, - 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, - 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, - 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, - 0x0f68, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8, - 0x9080, 0x000a, 0x2098, 0x080c, 0x0f68, 0x00ce, 0x0090, 0xaa96, - 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, - 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, - 0xa89e, 0x080c, 0x6878, 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, 0x2663, 0x2118, - 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, - 0x2011, 0x8018, 0x080c, 0x48d2, 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, 0xbaec, 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, 0xb20e, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, - 0x901e, 0x0499, 0x01e0, 0x080c, 0xbafe, 0x01c8, 0x080c, 0xbce7, - 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, - 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0040, 0xa867, 0x0103, - 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6885, 0x009e, 0x003e, - 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, - 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, - 0x080c, 0xbdf3, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, - 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, - 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, - 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, - 0x0007, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, - 0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, 0x1959, - 0x2004, 0x6042, 0x0005, 0x080c, 0x9e19, 0x0804, 0x894b, 0x00b6, - 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x001b, 0x006e, - 0x00be, 0x0005, 0xc23a, 0xc911, 0xca6c, 0xc23a, 0xc23a, 0xc23a, - 0xc23a, 0xc23a, 0xc271, 0xcaea, 0xc23a, 0xc23a, 0xc23a, 0xc23a, - 0xc23a, 0xc23a, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, - 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, 0xc255, 0xd052, 0xc255, - 0xc255, 0xc255, 0xc255, 0xc255, 0xc255, 0xcfff, 0xd0a6, 0xc255, - 0xd694, 0xd6ca, 0xd694, 0xd6ca, 0xc255, 0x080c, 0x0db4, 0x6000, - 0x9082, 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x000a, 0x0005, 0xc26f, - 0xccc7, 0xcdb7, 0xcdd9, 0xce98, 0xc26f, 0xcf76, 0xcf20, 0xcaf6, - 0xcfd5, 0xcfea, 0xc26f, 0xc26f, 0xc26f, 0xc26f, 0xc26f, 0x080c, - 0x0db4, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x2100, 0x91b2, 0x0040, - 0x1a04, 0xc6b2, 0x0002, 0xc2bb, 0xc4a3, 0xc2bb, 0xc2bb, 0xc2bb, - 0xc4ac, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, - 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, - 0xc2bb, 0xc2bb, 0xc2bd, 0xc320, 0xc32f, 0xc393, 0xc3be, 0xc436, - 0xc48e, 0xc2bb, 0xc2bb, 0xc4af, 0xc2bb, 0xc2bb, 0xc4c4, 0xc4d1, - 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc554, 0xc2bb, 0xc2bb, - 0xc568, 0xc2bb, 0xc2bb, 0xc523, 0xc2bb, 0xc2bb, 0xc2bb, 0xc580, - 0xc2bb, 0xc2bb, 0xc2bb, 0xc5fd, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, - 0xc2bb, 0xc2bb, 0xc67a, 0x080c, 0x0db4, 0x080c, 0x6519, 0x1150, - 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, - 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, - 0x0804, 0xc49c, 0x080c, 0x6502, 0x00e6, 0x00c6, 0x0036, 0x0026, - 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, - 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b, - 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, - 0x2658, 0x080c, 0x6246, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, - 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, - 0x2c08, 0x080c, 0xd842, 0x002e, 0x001e, 0x1178, 0x080c, 0xd1ae, - 0x1904, 0xc38b, 0x080c, 0xd14a, 0x1120, 0x6007, 0x0008, 0x0804, - 0xc49c, 0x6007, 0x0009, 0x0804, 0xc49c, 0x080c, 0xd3a5, 0x0128, - 0x080c, 0xd1ae, 0x0d78, 0x0804, 0xc38b, 0x6017, 0x1900, 0x0c88, - 0x080c, 0x30f6, 0x1904, 0xc6af, 0x6106, 0x080c, 0xd101, 0x6007, - 0x0006, 0x0804, 0xc49c, 0x6007, 0x0007, 0x0804, 0xc49c, 0x080c, - 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af, 0x00d6, - 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, - 0x2001, 0x0001, 0x080c, 0x6174, 0x96b4, 0xff00, 0x8637, 0x9686, - 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, - 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, - 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, - 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, - 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, - 0x00ee, 0x080c, 0xd211, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, - 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x301c, 0x002e, 0x080c, - 0x62d2, 0x6007, 0x000a, 0x00de, 0x0804, 0xc49c, 0x6007, 0x000b, - 0x00de, 0x0804, 0xc49c, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x6007, - 0x0001, 0x0804, 0xc49c, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, - 0x30f6, 0x1904, 0xc6af, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, - 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, - 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, - 0x2258, 0xbaa0, 0x900e, 0x080c, 0x301c, 0x002e, 0x6007, 0x000c, - 0x2001, 0x0001, 0x080c, 0xd822, 0x0804, 0xc49c, 0x080c, 0x6519, - 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, - 0x1110, 0x0804, 0xc2ca, 0x080c, 0x6502, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001, - 0x0006, 0x080c, 0x61b4, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, - 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc38b, 0x080c, - 0xd21e, 0x1120, 0x6007, 0x000e, 0x0804, 0xc49c, 0x0046, 0x6410, - 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x004e, - 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029, - 0x080c, 0xd50a, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, - 0x004e, 0x6007, 0x0001, 0x0804, 0xc49c, 0x2001, 0x0001, 0x080c, - 0x6174, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, - 0x1805, 0x2011, 0x0270, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e, - 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, - 0x0a04, 0xc38b, 0x9682, 0x0007, 0x0a04, 0xc3e7, 0x0804, 0xc38b, - 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc49c, 0x080c, 0x6519, - 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, - 0x1110, 0x0804, 0xc2ca, 0x080c, 0x6502, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x0688, 0x96b4, 0xff00, 0x8637, - 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc38b, 0x080c, - 0xd24c, 0x1130, 0x080c, 0xd14a, 0x1118, 0x6007, 0x0010, 0x04e0, - 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fd7, 0x080c, - 0xc20e, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, - 0x2009, 0x0029, 0x080c, 0xd50a, 0x6010, 0x2058, 0xb800, 0xc0e5, - 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xd3a5, - 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0980, 0x0804, - 0xc38b, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x30f6, - 0x1904, 0xc6af, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0xc84f, - 0x1904, 0xc38b, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x8411, - 0x080c, 0x894b, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, - 0x8411, 0x080c, 0x894b, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, - 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af, 0x080c, - 0xc84f, 0x1904, 0xc38b, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, - 0x8411, 0x080c, 0x894b, 0x0005, 0x080c, 0x30f6, 0x1904, 0xc6af, - 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, - 0x0005, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, - 0xc6af, 0x080c, 0xc84f, 0x1904, 0xc38b, 0x0016, 0x0026, 0x00e6, - 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, - 0xbaec, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, - 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, - 0x9006, 0x080c, 0xd4dc, 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, 0x9e19, 0x2160, 0x6007, - 0x0025, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x00ee, - 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6174, 0x0156, - 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, - 0x0276, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, - 0x6007, 0x0031, 0x0804, 0xc49c, 0x080c, 0xaa48, 0x080c, 0x6fa7, - 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6fc1, 0x1138, 0x080c, - 0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9, 0x0010, 0x080c, 0x6f7f, - 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x30f6, 0x1904, 0xc6af, - 0x080c, 0xc84f, 0x1904, 0xc38b, 0x6106, 0x080c, 0xc86b, 0x1120, - 0x6007, 0x002b, 0x0804, 0xc49c, 0x6007, 0x002c, 0x0804, 0xc49c, - 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af, - 0x080c, 0xc84f, 0x1904, 0xc38b, 0x6106, 0x080c, 0xc870, 0x1120, - 0x6007, 0x002e, 0x0804, 0xc49c, 0x6007, 0x002f, 0x0804, 0xc49c, - 0x080c, 0x30f6, 0x1904, 0xc6af, 0x00e6, 0x00d6, 0x00c6, 0x6010, - 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, - 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, - 0x0804, 0xc4a3, 0x080c, 0x5383, 0xd0e4, 0x0904, 0xc5fa, 0x2071, - 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, - 0x6557, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, - 0x9206, 0x0510, 0x080c, 0x6553, 0x15b8, 0x2069, 0x1800, 0x687c, - 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xbaec, - 0x0590, 0x080c, 0xc73a, 0x0578, 0x080c, 0xd586, 0x0560, 0x622e, - 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, - 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, - 0x080c, 0xbaec, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, - 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4dc, - 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, - 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, - 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x30f6, 0x1904, - 0xc6af, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, - 0x0006, 0x1904, 0xc4a3, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5383, - 0xd0e4, 0x0904, 0xc672, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, - 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, - 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4dc, 0x2c10, 0x00ce, 0x05e8, - 0x080c, 0xbaec, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, - 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb724, 0x002e, 0x00ce, - 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, - 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, - 0x9005, 0x0170, 0x080c, 0xc73a, 0x0904, 0xc5f3, 0x0056, 0x7510, - 0x7614, 0x080c, 0xd59f, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, - 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, - 0x080c, 0x83c9, 0x080c, 0x894b, 0x0c78, 0x6007, 0x003b, 0x602f, - 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, - 0x894b, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, - 0x0804, 0xc5ca, 0x00e6, 0x0026, 0x080c, 0x6519, 0x0550, 0x080c, - 0x6502, 0x080c, 0xd778, 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, - 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, - 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, - 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6557, 0x0120, 0x2011, 0x19d1, - 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2dbb, 0x0010, 0x080c, - 0xd7aa, 0x002e, 0x00ee, 0x080c, 0x9e19, 0x0804, 0xc4a2, 0x080c, - 0x9e19, 0x0005, 0x2600, 0x0002, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6c6, - 0xc6c6, 0xc6c8, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6e5, 0xc6c6, - 0xc6c6, 0xc6c6, 0xc6f7, 0xc704, 0xc735, 0xc6c6, 0x080c, 0x0db4, - 0x080c, 0xd706, 0x1d20, 0x080c, 0x30f6, 0x1d08, 0x080c, 0xc84f, - 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, - 0x8411, 0x0005, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x6007, 0x0001, - 0x6003, 0x0001, 0x080c, 0x8411, 0x0005, 0x080c, 0xd706, 0x1938, - 0x080c, 0x30f6, 0x1920, 0x080c, 0xc84f, 0x1d60, 0x703c, 0x6016, - 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8411, 0x0005, 0x080c, - 0xc757, 0x0904, 0xc6af, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, - 0x8411, 0x080c, 0x894b, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, - 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, - 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, - 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, - 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, - 0x080c, 0xadf4, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, - 0x080c, 0x8411, 0x080c, 0x894b, 0x0005, 0x6007, 0x0050, 0x703c, - 0x6016, 0x0ca0, 0x0016, 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, 0x001e, 0x0005, 0x0016, - 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, - 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, - 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x1004, 0x05a0, 0x2900, - 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, - 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, - 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, 0x001e, 0x2940, - 0x080c, 0x1004, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, - 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, - 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, - 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, - 0x2048, 0x080c, 0x0f9d, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, - 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, - 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2241, 0x2099, 0x026c, - 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, - 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260, - 0x0ca8, 0x080c, 0x2241, 0x2061, 0x1971, 0x6004, 0x2098, 0x6008, - 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, - 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260, 0x0ca8, 0x2061, - 0x1971, 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, - 0x2259, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, - 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, - 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x2259, - 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, - 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, - 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x1974, - 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, 0x080c, 0xc8e7, 0x00de, 0x0005, - 0x00d6, 0x080c, 0xc8f4, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, - 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, - 0x9006, 0x080c, 0xd822, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, - 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2663, 0x1148, 0x2001, - 0x0001, 0x080c, 0xd822, 0x2110, 0x900e, 0x080c, 0x301c, 0x0018, - 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, - 0x080c, 0x9e66, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, - 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1578, 0x080c, 0x61d7, - 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, - 0x080c, 0xd706, 0x11d8, 0x080c, 0x30f6, 0x11c0, 0x080c, 0xc84f, - 0x0510, 0x2001, 0x0007, 0x080c, 0x6188, 0x2001, 0x0007, 0x080c, - 0x61b4, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, - 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x0010, 0x080c, 0x9e19, - 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9e19, 0x00ce, - 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9e19, 0x9006, 0x0c98, 0x2069, - 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, - 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, - 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, - 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, - 0x00ff, 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, - 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013, - 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xca3c, 0x0092, 0x91b6, - 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0db4, 0x2001, 0x0007, - 0x080c, 0x61b4, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, - 0x0005, 0xc971, 0xc973, 0xc971, 0xc971, 0xc971, 0xc973, 0xc982, - 0xca35, 0xc9d4, 0xca35, 0xc9e6, 0xca35, 0xc982, 0xca35, 0xca2d, - 0xca35, 0xca2d, 0xca35, 0xca35, 0xc971, 0xc971, 0xc971, 0xc971, - 0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc973, - 0xc971, 0xca35, 0xc971, 0xc971, 0xca35, 0xc971, 0xca32, 0xca35, - 0xc971, 0xc971, 0xc971, 0xc971, 0xca35, 0xca35, 0xc971, 0xca35, - 0xca35, 0xc971, 0xc97d, 0xc971, 0xc971, 0xc971, 0xc971, 0xca31, - 0xca35, 0xc971, 0xc971, 0xca35, 0xca35, 0xc971, 0xc971, 0xc971, - 0xc971, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0xc211, 0x6003, - 0x0002, 0x080c, 0x894b, 0x0804, 0xca3b, 0x9006, 0x080c, 0x6174, - 0x0804, 0xca35, 0x080c, 0x6553, 0x1904, 0xca35, 0x9006, 0x080c, - 0x6174, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, - 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0428, 0x6010, - 0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xc1f9, 0x1904, 0xca35, - 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4a6f, 0x004e, - 0x003e, 0x0804, 0xca35, 0x080c, 0x3127, 0x1904, 0xca35, 0x2001, - 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, - 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6188, - 0x080c, 0x8846, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, - 0x080c, 0x8411, 0x080c, 0x894b, 0x6110, 0x2158, 0x2009, 0x0001, - 0x080c, 0x801e, 0x0804, 0xca3b, 0x6610, 0x2658, 0xbe04, 0x96b4, - 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xca35, 0x9686, 0x0004, - 0x0904, 0xca35, 0x2001, 0x0004, 0x0804, 0xca33, 0x2001, 0x1800, - 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, - 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x2001, - 0x0006, 0x080c, 0xca59, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, - 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, - 0x080c, 0x61b4, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, - 0x0006, 0x080c, 0x6188, 0x080c, 0x6553, 0x11f8, 0x2001, 0x1836, - 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, - 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, - 0x0804, 0xc9bc, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449, - 0x0020, 0x0018, 0x0010, 0x080c, 0x61b4, 0x080c, 0x8846, 0x080c, - 0x9e19, 0x080c, 0x894b, 0x0005, 0x2600, 0x0002, 0xca50, 0xca50, - 0xca50, 0xca50, 0xca50, 0xca52, 0xca50, 0xca50, 0xca50, 0xca50, - 0xca52, 0xca50, 0xca50, 0xca50, 0xca52, 0xca52, 0xca52, 0xca52, - 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e19, 0x080c, 0x894b, - 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, - 0x0138, 0x080c, 0x6188, 0x9006, 0x080c, 0x6174, 0x080c, 0x2ffc, - 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, - 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0db4, 0x91b6, 0x0015, - 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x006b, - 0x0005, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xcad4, - 0xca99, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, - 0xa888, 0xa888, 0xa888, 0xcad4, 0xcadb, 0xa888, 0xa888, 0xa888, - 0xa888, 0x00f6, 0x080c, 0x6553, 0x11d8, 0x080c, 0xc1f9, 0x11c0, - 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006, 0x080c, - 0x6174, 0x2001, 0x0002, 0x080c, 0x6188, 0x6023, 0x0001, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x8411, 0x080c, 0x894b, 0x00d0, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1190, - 0x080c, 0x6237, 0x0118, 0x080c, 0x9e19, 0x0060, 0xb810, 0x0006, - 0xb814, 0x0006, 0x080c, 0x5ce4, 0x000e, 0xb816, 0x000e, 0xb812, - 0x080c, 0x9e19, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, - 0x080c, 0x9e19, 0x0005, 0x080c, 0xac6c, 0x1148, 0x6003, 0x0001, - 0x6007, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x0010, 0x080c, - 0x9e19, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, - 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, 0x0005, 0x9182, 0x0040, - 0x0002, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0e, 0xcb0c, 0xcb0c, - 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, - 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0x080c, 0x0db4, 0x0096, 0x00b6, - 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, - 0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, - 0x0904, 0xcb74, 0x080c, 0xd816, 0x1170, 0x9486, 0x2000, 0x1158, - 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8207, 0x0020, 0x9026, - 0x080c, 0xd74b, 0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, 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, 0x6885, 0x001e, 0x080c, 0xd816, 0x1904, 0xcbd4, 0x9486, - 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd486, 0x0804, 0xcbd4, - 0x9486, 0x0200, 0x1120, 0x080c, 0xd422, 0x0804, 0xcbd4, 0x9486, - 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xcbd4, 0x2019, 0x0002, - 0x080c, 0xd43d, 0x0804, 0xcbd4, 0x2069, 0x1a41, 0x6a00, 0xd284, - 0x0904, 0xcc3e, 0x9284, 0x0300, 0x1904, 0xcc37, 0x6804, 0x9005, - 0x0904, 0xcc1f, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1004, 0x0904, - 0xcbe0, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, - 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xcc42, 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, 0xcbdc, 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, 0x6885, 0x002e, 0x004e, 0x00fe, 0x00ee, - 0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, - 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x0feb, 0x1904, - 0xcb89, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x83c9, 0x080c, 0x894b, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, - 0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, - 0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, - 0x6007, 0x0043, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0828, 0x6868, - 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, - 0x0041, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0804, 0xcbd4, 0x2001, - 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d2, - 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, - 0x0041, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0804, 0xcbd4, 0x6017, - 0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xcbf4, 0x6017, 0xf200, - 0x0804, 0xcbf4, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, - 0x2c00, 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xcbdc, 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, 0x0db4, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xccbe, 0x2041, - 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, - 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, - 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1004, 0x0170, - 0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, - 0x902d, 0x0118, 0x080c, 0x101d, 0x0cc8, 0x080c, 0x101d, 0x0804, - 0xcbe0, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, - 0x200b, 0x0000, 0x080c, 0xd4b5, 0x0804, 0xcbd4, 0x8010, 0x0004, - 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, - 0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x9082, - 0x0040, 0x0a0c, 0x0db4, 0x2008, 0x0804, 0xcd6f, 0x9186, 0x0051, - 0x0108, 0x00c0, 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xcd20, - 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x82b5, - 0x002e, 0x001e, 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, - 0x0804, 0xcdb7, 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, - 0x9186, 0x0014, 0x0500, 0x190c, 0x0db4, 0x2001, 0x0109, 0x2004, - 0xd084, 0x01f0, 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, - 0x0100, 0x0006, 0x0016, 0x0026, 0x080c, 0x82b5, 0x002e, 0x001e, - 0x000e, 0x00ce, 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, - 0x0db4, 0x0804, 0xce98, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, - 0x080c, 0x9eae, 0x0005, 0xcd36, 0xcd38, 0xcd38, 0xcd5f, 0xcd36, - 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, - 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0x080c, 0x0db4, - 0x080c, 0x8846, 0x080c, 0x894b, 0x0036, 0x0096, 0x6014, 0x904d, - 0x01d8, 0x080c, 0xbafe, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, - 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, - 0xd4b5, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, - 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, - 0x080c, 0x8846, 0x080c, 0x894b, 0x080c, 0xbafe, 0x0120, 0x6014, - 0x2048, 0x080c, 0x101d, 0x080c, 0x9e49, 0x009e, 0x0005, 0x0002, - 0xcd83, 0xcd9a, 0xcd85, 0xcdb1, 0xcd83, 0xcd83, 0xcd83, 0xcd83, - 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, - 0xcd83, 0xcd83, 0xcd83, 0x080c, 0x0db4, 0x0096, 0x080c, 0x8846, - 0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, - 0x0043, 0x080c, 0x9e93, 0x0010, 0x6003, 0x0004, 0x080c, 0x894b, - 0x009e, 0x0005, 0x080c, 0x8846, 0x080c, 0xbafe, 0x0138, 0x6114, - 0x0096, 0x2148, 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x81dc, - 0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c, 0xd70f, 0x0db0, - 0x0cc8, 0x080c, 0x8846, 0x2009, 0x0041, 0x0804, 0xcf20, 0x9182, - 0x0040, 0x0002, 0xcdcd, 0xcdcf, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, - 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, - 0xcdcd, 0xcdcd, 0xcdcd, 0xcdd0, 0xcdcd, 0x080c, 0x0db4, 0x0005, - 0x00d6, 0x080c, 0x81dc, 0x00de, 0x080c, 0xd767, 0x080c, 0x9e19, - 0x0005, 0x9182, 0x0040, 0x0002, 0xcdef, 0xcdef, 0xcdef, 0xcdef, - 0xcdef, 0xcdef, 0xcdef, 0xcdef, 0xcdef, 0xcdf1, 0xce60, 0xcdef, - 0xcdef, 0xcdef, 0xcdef, 0xce60, 0xcdef, 0xcdef, 0xcdef, 0x080c, - 0x0db4, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, - 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xce60, - 0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xce60, 0xc0d4, 0x200a, - 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, - 0x2001, 0x1873, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, - 0x88fb, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, - 0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, - 0x11e0, 0x080c, 0x8a26, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf20, - 0x080c, 0x8a26, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x81dc, - 0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, - 0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, - 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2a77, 0x080c, 0x8a26, - 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x81dc, 0x080c, - 0x9e19, 0x009e, 0x0005, 0x080c, 0xd70f, 0x0db8, 0x009e, 0x0005, - 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x88fb, - 0x080c, 0x8a26, 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, - 0xd4b5, 0x6018, 0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003, - 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, - 0x9182, 0x0040, 0x0002, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf, - 0xceaf, 0xceaf, 0xceaf, 0xceb1, 0xceaf, 0xceaf, 0xceaf, 0xceaf, - 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xcefc, 0x080c, - 0x0db4, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, - 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, - 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf20, 0x6003, - 0x0007, 0x601b, 0x0000, 0x080c, 0x81dc, 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, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, - 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x81de, 0x009e, 0x0005, - 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, - 0x150f, 0x1904, 0xceb1, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, - 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x150f, 0x1904, 0xceb1, - 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, 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005, - 0xcf43, 0xcf4f, 0xcf5b, 0xcf67, 0xcf43, 0xcf43, 0xcf43, 0xcf43, - 0xcf4a, 0xcf45, 0xcf45, 0xcf43, 0xcf43, 0xcf43, 0xcf43, 0xcf45, - 0xcf43, 0xcf45, 0xcf43, 0x080c, 0x0db4, 0x6024, 0xd0dc, 0x090c, - 0x0db4, 0x0005, 0x6014, 0x9005, 0x190c, 0x0db4, 0x0005, 0x6003, - 0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091, 0x8000, 0x080c, - 0x894b, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, - 0x0126, 0x2091, 0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x6003, - 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, 0x0126, 0x2091, 0x8000, - 0x080c, 0x842e, 0x080c, 0x8a26, 0x012e, 0x0005, 0x0126, 0x2091, - 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, - 0x012e, 0x0005, 0xcf92, 0xcf94, 0xcfa6, 0xcfc0, 0xcf92, 0xcf92, - 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, - 0xcf92, 0xcf92, 0x080c, 0x0db4, 0x6014, 0x2048, 0xa87c, 0xd0fc, - 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, - 0x6106, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0470, 0x6014, 0x2048, - 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, - 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00e0, - 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, 0xd4b5, 0x00a0, - 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, - 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, - 0x080c, 0x842e, 0x080c, 0x8a26, 0x0005, 0x080c, 0x8846, 0x6114, - 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd7b3, 0x0036, 0x2019, - 0x0029, 0x080c, 0xd4b5, 0x003e, 0x009e, 0x080c, 0x9e49, 0x080c, - 0x894b, 0x0005, 0x080c, 0x88fb, 0x6114, 0x81ff, 0x0158, 0x0096, - 0x2148, 0x080c, 0xd7b3, 0x0036, 0x2019, 0x0029, 0x080c, 0xd4b5, - 0x003e, 0x009e, 0x080c, 0x9e49, 0x080c, 0x8a26, 0x0005, 0x9182, - 0x0085, 0x0002, 0xd011, 0xd00f, 0xd00f, 0xd01d, 0xd00f, 0xd00f, - 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0x080c, - 0x0db4, 0x6003, 0x000b, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091, - 0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, - 0xd706, 0x0118, 0x080c, 0x9e19, 0x0450, 0x2071, 0x0260, 0x7224, - 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, - 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa139, - 0x7220, 0x080c, 0xd35b, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, - 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, - 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x080c, 0x8a26, 0x00ee, - 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, - 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085, - 0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, - 0x9eae, 0x0050, 0x2001, 0x0007, 0x080c, 0x61b4, 0x080c, 0x8846, - 0x080c, 0x9e49, 0x080c, 0x894b, 0x0005, 0xd082, 0xd084, 0xd084, - 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, - 0xd082, 0xd082, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e49, - 0x080c, 0x894b, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0db4, 0x9182, - 0x0092, 0x1a0c, 0x0db4, 0x9182, 0x0085, 0x0002, 0xd0a3, 0xd0a3, - 0xd0a3, 0xd0a5, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, - 0xd0a3, 0xd0a3, 0xd0a3, 0x080c, 0x0db4, 0x0005, 0x9186, 0x0013, + 0x9115, 0x190c, 0xb227, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, + 0xb07e, 0x00ae, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xc1b7, 0xa974, + 0x0016, 0x080c, 0xb702, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, + 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, + 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, + 0xc0da, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, + 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, + 0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0xa974, 0x0016, 0x080c, + 0x66a7, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005, + 0x080c, 0xbe10, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, + 0x190c, 0x18f9, 0x009e, 0x0005, 0x080c, 0x886e, 0x0010, 0x080c, + 0x8923, 0x080c, 0xbb17, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, + 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x00a0, 0xa867, 0x0103, 0x2009, + 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, + 0x918e, 0x0029, 0x1110, 0x080c, 0xd7d3, 0xa877, 0x0000, 0x080c, + 0x688c, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0804, 0x8a4e, + 0xa87b, 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, + 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb48a, 0xb48a, + 0xb48a, 0xb48a, 0xb48a, 0xb48c, 0xb48a, 0xb48a, 0xb48a, 0xb48a, + 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, + 0xb48a, 0xb48a, 0x080c, 0x0db4, 0x080c, 0x538e, 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, 0x688c, 0x009e, 0x0804, 0x9e32, + 0x9182, 0x0085, 0x0002, 0xb4c2, 0xb4c0, 0xb4c0, 0xb4ce, 0xb4c0, + 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, + 0x080c, 0x0db4, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x0026, 0x0056, + 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, + 0xbb05, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, + 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb73d, 0x00ce, + 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, + 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9280, 0x0004, + 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, + 0x0128, 0x00c6, 0x2260, 0x080c, 0xbe4a, 0x00ce, 0x00ee, 0x00de, + 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, + 0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, + 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, + 0x0db4, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, + 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, + 0x688c, 0x009e, 0x080c, 0x9e62, 0x0804, 0x8973, 0xb543, 0xb545, + 0xb545, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, + 0xb543, 0xb543, 0xb543, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, + 0x9e62, 0x080c, 0x8973, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, + 0x9082, 0x0085, 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, + 0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096, 0x6014, 0x2048, + 0x080c, 0xbb17, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, + 0x0029, 0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32, + 0x080c, 0x8973, 0x0005, 0x080c, 0x9ec7, 0x0ce0, 0x9186, 0x0014, + 0x1dd0, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, + 0x0d60, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, + 0xc0ec, 0xa882, 0x08f0, 0x0002, 0xb59b, 0xb599, 0xb599, 0xb599, + 0xb599, 0xb599, 0xb5b3, 0xb599, 0xb599, 0xb599, 0xb599, 0xb599, + 0xb599, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, + 0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c, + 0x080c, 0x8973, 0x0005, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, + 0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000e, + 0x080c, 0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, + 0x0208, 0x0012, 0x0804, 0x9ec7, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, + 0xb5e3, 0xb630, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, + 0xb5e1, 0x080c, 0x0db4, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, + 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb644, + 0x080c, 0xbb17, 0x1118, 0x080c, 0xbd00, 0x0068, 0x6014, 0x2048, + 0xa87c, 0xd0e4, 0x1110, 0x080c, 0xbd00, 0xa867, 0x0103, 0x080c, + 0xc1f2, 0x080c, 0x688c, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01d0, + 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, + 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, + 0x080c, 0xbf8c, 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x83f1, + 0x080c, 0x8973, 0x2d60, 0x00de, 0x080c, 0x9e32, 0x009e, 0x0005, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, + 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, + 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc18a, + 0x11f0, 0x080c, 0x9ddc, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, + 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, + 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, + 0x6156, 0x080c, 0xbf8c, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60, + 0x00de, 0x0804, 0x9e32, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, + 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, + 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, + 0xa87b, 0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x080c, 0x688c, + 0x080c, 0xbd00, 0x009e, 0x0804, 0x9e32, 0x0016, 0x0096, 0x6014, + 0x2048, 0x080c, 0xbb17, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, + 0xa877, 0x0000, 0x080c, 0x688c, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, - 0x9eae, 0x0030, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, - 0x0005, 0x0036, 0x080c, 0xd767, 0x6043, 0x0000, 0x2019, 0x000b, - 0x0031, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, - 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, - 0x97a1, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x984c, - 0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, - 0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd767, - 0x080c, 0xc211, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, - 0x080c, 0xbafe, 0x0110, 0x080c, 0xd4b5, 0x009e, 0x6017, 0x0000, - 0x080c, 0xd767, 0x6023, 0x0007, 0x080c, 0xc211, 0x003e, 0x012e, - 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, - 0x7938, 0x783c, 0x080c, 0x2663, 0x15b8, 0x0016, 0x00c6, 0x080c, - 0x6237, 0x1580, 0x001e, 0x00c6, 0x2160, 0x080c, 0xc20e, 0x00ce, - 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x990d, 0x080c, - 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x007e, 0x001e, 0x0076, - 0x903e, 0x080c, 0xd27b, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, - 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, - 0x080c, 0x3090, 0x002e, 0x001e, 0x080c, 0x5ce4, 0xbe12, 0xbd16, + 0x9ec7, 0x0030, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973, + 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, + 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, + 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb712, 0x96b2, + 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, + 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, 0x688c, 0x2a48, 0x0cb8, 0x080c, 0x688c, + 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, 0xb778, + 0xb778, 0xb773, 0xb79a, 0xb766, 0xb773, 0xb79a, 0xb773, 0xb766, + 0xb766, 0xb773, 0xb773, 0xb773, 0xb766, 0xb766, 0x080c, 0x0db4, + 0x0036, 0x2019, 0x0010, 0x080c, 0xd0e5, 0x6023, 0x0006, 0x6003, + 0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, + 0x0096, 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01c0, + 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, + 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ac6, 0x080c, 0xbe0c, + 0x080c, 0x687f, 0x080c, 0x9e62, 0x9085, 0x0001, 0x009e, 0x0005, + 0x9006, 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, + 0xb7b0, 0xb7de, 0xb7b2, 0xb7ff, 0xb7d9, 0xb7b0, 0xb773, 0xb778, + 0xb778, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, + 0x080c, 0x0db4, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, + 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0158, 0xa87c, 0xd0cc, + 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, + 0xbe0c, 0x009e, 0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, + 0x6023, 0x0002, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9085, 0x0001, + 0x0005, 0x0066, 0x080c, 0x190d, 0x006e, 0x08a0, 0x00e6, 0x2071, + 0x19b8, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9662, 0x00ee, 0x0850, + 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, + 0x2049, 0x0001, 0x2c40, 0x080c, 0x97ba, 0x009e, 0x008e, 0x0010, + 0x080c, 0x955f, 0x00ee, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x0036, + 0x00e6, 0x2071, 0x19b8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, + 0x96d8, 0x00ee, 0x003e, 0x0804, 0xb7b2, 0x080c, 0x98ea, 0x00ee, + 0x003e, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x00c6, 0x6020, 0x9084, + 0x000f, 0x0013, 0x00ce, 0x0005, 0xb832, 0xb8fb, 0xba62, 0xb83c, + 0x9e62, 0xb832, 0xd0d7, 0xc234, 0xb8fb, 0xb82b, 0xbae1, 0xb82b, + 0xb82b, 0xb82b, 0xb82b, 0x080c, 0x0db4, 0x080c, 0xbd1d, 0x1110, + 0x080c, 0xa7c0, 0x0005, 0x080c, 0x886e, 0x080c, 0x8973, 0x0804, + 0x9e32, 0x601b, 0x0001, 0x0005, 0x080c, 0xbb17, 0x0130, 0x6014, + 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, + 0x1a0c, 0x0db4, 0x0002, 0xb85b, 0xb85d, 0xb881, 0xb895, 0xb8b9, + 0xb85b, 0xb832, 0xb832, 0xb832, 0xb895, 0xb895, 0xb85b, 0xb85b, + 0xb85b, 0xb85b, 0xb89f, 0x080c, 0x0db4, 0x00e6, 0x6014, 0x0096, + 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7024, + 0x9c06, 0x01a0, 0x080c, 0x955f, 0x080c, 0xc1cc, 0x6007, 0x0085, + 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1958, 0x2004, 0x601a, + 0x080c, 0x83f1, 0x080c, 0x8973, 0x00ee, 0x0005, 0x601b, 0x0001, + 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, + 0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, + 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x0096, 0x601b, 0x0001, + 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, + 0x538e, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, + 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, + 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x688c, 0x009e, 0x0804, + 0x9e32, 0x6014, 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, + 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, + 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, + 0x2c08, 0x080c, 0x1518, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, + 0x11a0, 0x6014, 0x0096, 0x904d, 0x090c, 0x0db4, 0xa880, 0xd0f4, + 0x1130, 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, + 0x2001, 0x0037, 0x2c08, 0x080c, 0x1518, 0x6000, 0x9086, 0x0004, + 0x1120, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x009e, 0x080c, + 0x190d, 0x0804, 0xb881, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, + 0x000b, 0x0005, 0xb912, 0xb839, 0xb914, 0xb912, 0xb914, 0xb914, + 0xb833, 0xb912, 0xb82d, 0xb82d, 0xb912, 0xb912, 0xb912, 0xb912, + 0xb912, 0xb912, 0x080c, 0x0db4, 0x6010, 0x00b6, 0x2058, 0xb804, + 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0db4, 0x00b6, + 0x0013, 0x00be, 0x0005, 0xb92f, 0xb9fc, 0xb931, 0xb971, 0xb931, + 0xb971, 0xb931, 0xb93f, 0xb92f, 0xb971, 0xb92f, 0xb960, 0x080c, + 0x0db4, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, + 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb9f8, 0x6004, + 0x080c, 0xbd1d, 0x0904, 0xba15, 0x908e, 0x0004, 0x1110, 0x080c, + 0x3003, 0x908e, 0x0021, 0x0904, 0xba19, 0x908e, 0x0022, 0x0904, + 0xba5d, 0x908e, 0x003d, 0x0904, 0xba19, 0x908e, 0x0039, 0x0904, + 0xba1d, 0x908e, 0x0035, 0x0904, 0xba1d, 0x908e, 0x001e, 0x0178, + 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, + 0x9086, 0x0006, 0x0110, 0x080c, 0x2fda, 0x080c, 0xa7c0, 0x0804, + 0x9e62, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb9e9, + 0x9186, 0x0002, 0x1904, 0xb9be, 0x2001, 0x1836, 0x2004, 0xd08c, + 0x11c8, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0xc212, 0x0138, 0x080c, + 0x6fd5, 0x1120, 0x080c, 0x6ec2, 0x0804, 0xba46, 0x2001, 0x194e, + 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x6ee4, + 0x0804, 0xba46, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac, + 0x1904, 0xba46, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xba46, 0xb840, + 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, + 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x9ddc, + 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, 0x5c64, 0x00ee, 0x080c, 0xa7c0, 0x0030, + 0x080c, 0xa7c0, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00e6, 0x0126, + 0x2091, 0x8000, 0x080c, 0x3003, 0x012e, 0x00ee, 0x080c, 0x9e62, + 0x0005, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, + 0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x00de, 0x00ce, 0x0c80, + 0x080c, 0x3003, 0x0804, 0xb96d, 0x00c6, 0x00d6, 0x6104, 0x9186, + 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, + 0x0904, 0xb9be, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x8439, + 0x080c, 0x8973, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa7c0, 0x0804, + 0xb96f, 0x080c, 0xa7fc, 0x0804, 0xb96f, 0x00d6, 0x2c68, 0x6104, + 0x080c, 0xc18a, 0x00de, 0x0118, 0x080c, 0x9e32, 0x00f0, 0x6004, + 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, + 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1958, + 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, + 0x2160, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00de, 0x00ce, + 0x080c, 0xa7c0, 0x080c, 0x2fda, 0x00e6, 0x0126, 0x2091, 0x8000, + 0x080c, 0x3003, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, + 0x6043, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa261, 0x1904, + 0xba15, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0096, + 0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xba7d, 0xba7d, 0xba7d, + 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xb832, 0xba7d, + 0xb839, 0xba7f, 0xb839, 0xba8c, 0xba7d, 0x080c, 0x0db4, 0x6004, + 0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x0005, 0x080c, 0xc206, 0x0118, 0x080c, + 0xc219, 0x0010, 0x080c, 0xc227, 0x080c, 0xbd00, 0x080c, 0xbb17, + 0x0570, 0x080c, 0x2fda, 0x080c, 0xbb17, 0x0168, 0x6014, 0x2048, + 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, + 0xa882, 0x080c, 0x688c, 0x2c68, 0x080c, 0x9ddc, 0x0150, 0x6810, + 0x6012, 0x080c, 0xbf8c, 0x00c6, 0x2d60, 0x080c, 0x9e62, 0x00ce, + 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, + 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x00c8, 0x080c, + 0xc206, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2fda, + 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, + 0x9186, 0x0035, 0x1118, 0x080c, 0x2fda, 0x0868, 0x080c, 0x9e62, + 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xbaf7, + 0xbaf7, 0xbaf9, 0xbaf9, 0xbaf9, 0xbaf7, 0xbaf7, 0x9e62, 0xbaf7, + 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0x080c, + 0x0db4, 0x080c, 0x98ea, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, + 0x080c, 0x688c, 0x009e, 0x0804, 0x9e32, 0x9284, 0x0007, 0x1158, + 0x9282, 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, + 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, + 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, + 0xf000, 0x0110, 0x080c, 0x1096, 0x000e, 0x009e, 0x0005, 0x00e6, + 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, + 0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, + 0x11f8, 0x080c, 0xc212, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, + 0x9086, 0x0004, 0x1148, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00c6, + 0x080c, 0x9e62, 0x00ce, 0x0060, 0x080c, 0xbf06, 0x0148, 0x080c, + 0xbd1d, 0x1110, 0x080c, 0xa7c0, 0x00c6, 0x080c, 0x9e32, 0x00ce, + 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, + 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, + 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1a80, 0x6112, 0x080c, + 0x2fda, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, + 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ddc, 0x01b0, + 0x6656, 0x2b00, 0x6012, 0x080c, 0x538e, 0x0118, 0x080c, 0xbc44, + 0x0168, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, + 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, + 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9e7f, 0x0560, + 0x6057, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003, + 0x0016, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08, + 0x080c, 0xd29b, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x9e32, + 0x9085, 0x0001, 0x0070, 0x080c, 0x538e, 0x0128, 0xd18c, 0x1170, + 0x080c, 0xbc44, 0x0148, 0x2009, 0x004c, 0x080c, 0x9eac, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, + 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, + 0x0046, 0x0016, 0x080c, 0x9ddc, 0x2c78, 0x0590, 0x7e56, 0x2b00, + 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xbc56, 0x9186, + 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, 0x200c, + 0xd1fc, 0x0168, 0x2f60, 0x080c, 0x9e32, 0x00d0, 0x2001, 0x1950, + 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0088, 0x2f60, + 0x080c, 0x538e, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, + 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0x9eac, 0x9085, 0x0001, + 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, + 0x080c, 0x9ddc, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, + 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194f, + 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0060, 0x2f60, + 0x080c, 0x538e, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, + 0x0052, 0x080c, 0x9eac, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, + 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4879, 0x00ce, + 0x1120, 0x080c, 0x9e32, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, + 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6372, 0x0158, 0x2001, 0xbc5b, + 0x0006, 0x900e, 0x2400, 0x080c, 0x6ac6, 0x080c, 0x688c, 0x000e, + 0x0807, 0x2418, 0x080c, 0x8808, 0xbaa0, 0x0086, 0x2041, 0x0001, + 0x2039, 0x0001, 0x2608, 0x080c, 0x8589, 0x008e, 0x080c, 0x8469, + 0x2f08, 0x2648, 0x080c, 0xd29b, 0xb93c, 0x81ff, 0x090c, 0x865a, + 0x080c, 0x8973, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, + 0x2091, 0x8000, 0x080c, 0x9ddc, 0x0190, 0x660a, 0x2b08, 0x6112, + 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, + 0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, + 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x01b8, + 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0008, 0x2900, + 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0021, + 0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, + 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, + 0x080c, 0x9ddc, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c, + 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9eac, + 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, + 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x0188, 0x2b08, + 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, + 0x0000, 0x080c, 0x9eac, 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, 0x6020, + 0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xbb17, 0x0168, + 0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, + 0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, + 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, + 0x0198, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, + 0x6016, 0x080c, 0x2fda, 0x2009, 0x0028, 0x080c, 0x9eac, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, + 0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, + 0x080c, 0xaa49, 0x00be, 0x080c, 0xac88, 0x6003, 0x0001, 0x6007, + 0x0029, 0x080c, 0x8439, 0x080c, 0x8973, 0x0078, 0x6014, 0x0096, + 0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, + 0xc14b, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x0005, 0x0096, 0x6014, + 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, + 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, + 0x080c, 0x688c, 0x012e, 0x009e, 0x080c, 0x9e32, 0x0c30, 0x0096, + 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x618f, 0x00e8, + 0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, + 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x62d9, 0x00be, 0x080c, + 0xad59, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, + 0x0160, 0x2001, 0x0006, 0x080c, 0x618f, 0x6014, 0x2048, 0xa868, + 0xd0fc, 0x0170, 0x080c, 0xa235, 0x0048, 0x6014, 0x2048, 0xa868, + 0xd0fc, 0x0528, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x009e, 0x0005, + 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0000, + 0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x645e, 0x1108, + 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, + 0x8000, 0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x08f8, 0x6014, + 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, + 0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, + 0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x0840, 0xa878, 0x9086, + 0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, + 0x6043, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, + 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00c6, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, + 0x0013, 0x00ce, 0x0005, 0xb832, 0xbe3c, 0xbe3c, 0xbe3f, 0xd579, + 0xd594, 0xd597, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832, + 0xb832, 0xb832, 0x080c, 0x0db4, 0xa001, 0xa001, 0x0005, 0x0096, + 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, + 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, + 0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, + 0x080c, 0x9ddc, 0x0508, 0x7810, 0x6012, 0x080c, 0xbf8c, 0x7820, + 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, + 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, + 0x0035, 0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x83f1, 0x080c, + 0x8973, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959, + 0x2004, 0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, + 0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, + 0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, + 0x080c, 0x0f9d, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, + 0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, + 0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, + 0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, + 0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, + 0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, + 0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, + 0x080c, 0x83f1, 0x080c, 0x8973, 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, 0x1953, 0x200c, 0x8000, 0x2014, + 0x2001, 0x0032, 0x080c, 0x8270, 0x2001, 0x1957, 0x82ff, 0x1110, + 0x2011, 0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, + 0x2071, 0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8270, + 0x2001, 0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, + 0x1959, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, + 0x0032, 0x080c, 0x1518, 0x080c, 0x6543, 0x00ee, 0x003e, 0x002e, + 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957, + 0x2003, 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d, + 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e, + 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, 0x080c, 0x1518, + 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, + 0x080c, 0x101d, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, + 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9eac, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, + 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, + 0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, + 0x080c, 0x8b63, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, + 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, + 0x900e, 0x080c, 0x3023, 0x080c, 0xa235, 0x0020, 0x080c, 0xa7c0, + 0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, + 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0x9ddc, 0x0188, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, + 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0x9eac, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x0016, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x080c, + 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9eac, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, + 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, + 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, + 0x1971, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, + 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc7ce, + 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, + 0xa867, 0x0103, 0x0010, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe, + 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, + 0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, + 0x080c, 0x8b63, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, + 0xaa78, 0x9206, 0x1110, 0x080c, 0x2fda, 0x080c, 0xa235, 0x0020, + 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, + 0x705c, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, + 0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, + 0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x8b63, 0x05f0, 0x7078, + 0xaacc, 0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, + 0x2fda, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, + 0x533e, 0x001e, 0x0010, 0x080c, 0x512f, 0x080c, 0xbb17, 0x0508, + 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, + 0xbb17, 0x01b8, 0x6014, 0x2048, 0x080c, 0x512f, 0x1d70, 0xa87b, + 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, + 0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x688c, 0x012e, 0x080c, + 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, + 0x0930, 0x0888, 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, 0x080c, 0xbb17, 0x0904, 0xc147, + 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, + 0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, + 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, + 0x080c, 0x0f68, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, + 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f68, 0x00ce, 0x0090, + 0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, + 0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, + 0x00ff, 0xa89e, 0x080c, 0x687f, 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, 0x2663, + 0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, + 0x7c3c, 0x2011, 0x8018, 0x080c, 0x48d9, 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, 0xbb05, 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, 0xb227, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, + 0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xbb17, 0x01c8, 0x080c, + 0xbd00, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, + 0xa87c, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0040, 0xa867, + 0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x688c, 0x009e, + 0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, + 0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, + 0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, + 0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, + 0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, + 0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, + 0x2021, 0x0007, 0x080c, 0x4a76, 0x004e, 0x003e, 0x0005, 0x0c51, + 0x1d81, 0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, + 0x1959, 0x2004, 0x6042, 0x0005, 0x080c, 0x9e32, 0x0804, 0x8973, + 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x001b, + 0x006e, 0x00be, 0x0005, 0xc253, 0xc92b, 0xca86, 0xc253, 0xc253, + 0xc253, 0xc253, 0xc253, 0xc28a, 0xcb08, 0xc253, 0xc253, 0xc253, + 0xc253, 0xc253, 0xc253, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, + 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, 0xc26e, 0xd070, + 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xd01d, 0xd0c4, + 0xc26e, 0xd6b4, 0xd6ea, 0xd6b4, 0xd6ea, 0xc26e, 0x080c, 0x0db4, + 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x000a, 0x0005, + 0xc288, 0xcce5, 0xcdd5, 0xcdf7, 0xceb6, 0xc288, 0xcf94, 0xcf3e, + 0xcb14, 0xcff3, 0xd008, 0xc288, 0xc288, 0xc288, 0xc288, 0xc288, + 0x080c, 0x0db4, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x2100, 0x91b2, + 0x0040, 0x1a04, 0xc6cc, 0x0002, 0xc2d4, 0xc4bd, 0xc2d4, 0xc2d4, + 0xc2d4, 0xc4c6, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, + 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, + 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d6, 0xc339, 0xc348, 0xc3ac, 0xc3d7, + 0xc44f, 0xc4a8, 0xc2d4, 0xc2d4, 0xc4c9, 0xc2d4, 0xc2d4, 0xc4de, + 0xc4eb, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc56e, 0xc2d4, + 0xc2d4, 0xc582, 0xc2d4, 0xc2d4, 0xc53d, 0xc2d4, 0xc2d4, 0xc2d4, + 0xc59a, 0xc2d4, 0xc2d4, 0xc2d4, 0xc617, 0xc2d4, 0xc2d4, 0xc2d4, + 0xc2d4, 0xc2d4, 0xc2d4, 0xc694, 0x080c, 0x0db4, 0x080c, 0x6520, + 0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, + 0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, + 0x0000, 0x0804, 0xc4b6, 0x080c, 0x6509, 0x00e6, 0x00c6, 0x0036, + 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, + 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08, 0x080c, + 0xd29b, 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, + 0x6610, 0x2658, 0x080c, 0x624d, 0xbe04, 0x9684, 0x00ff, 0x9082, + 0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, + 0x00be, 0x2c08, 0x080c, 0xd862, 0x002e, 0x001e, 0x1178, 0x080c, + 0xd1ce, 0x1904, 0xc3a4, 0x080c, 0xd16a, 0x1120, 0x6007, 0x0008, + 0x0804, 0xc4b6, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c, 0xd3c5, + 0x0128, 0x080c, 0xd1ce, 0x0d78, 0x0804, 0xc3a4, 0x6017, 0x1900, + 0x0c88, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x6106, 0x080c, 0xd11f, + 0x6007, 0x0006, 0x0804, 0xc4b6, 0x6007, 0x0007, 0x0804, 0xc4b6, + 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904, 0xc6c9, + 0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, + 0x1220, 0x2001, 0x0001, 0x080c, 0x617b, 0x96b4, 0xff00, 0x8637, + 0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, + 0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, + 0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, + 0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, + 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, + 0x00b0, 0x00ee, 0x080c, 0xd231, 0x1190, 0x9686, 0x0006, 0x1140, + 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e, + 0x080c, 0x62d9, 0x6007, 0x000a, 0x00de, 0x0804, 0xc4b6, 0x6007, + 0x000b, 0x00de, 0x0804, 0xc4b6, 0x080c, 0x2fda, 0x080c, 0xc227, + 0x6007, 0x0001, 0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9, + 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x2071, 0x0260, 0x7034, 0x90b4, + 0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, + 0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, + 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e, 0x6007, + 0x000c, 0x2001, 0x0001, 0x080c, 0xd842, 0x0804, 0xc4b6, 0x080c, + 0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, + 0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658, + 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, + 0x2001, 0x0006, 0x080c, 0x61bb, 0x002e, 0x0050, 0x96b4, 0xff00, + 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc3a4, + 0x080c, 0xd23e, 0x1120, 0x6007, 0x000e, 0x0804, 0xc4b6, 0x0046, + 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fda, 0x080c, 0xc227, + 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, + 0x0029, 0x080c, 0xd52a, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, + 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xc4b6, 0x2001, 0x0001, + 0x080c, 0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, + 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xadf9, 0x003e, 0x002e, + 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, + 0x0004, 0x0a04, 0xc3a4, 0x9682, 0x0007, 0x0a04, 0xc400, 0x0804, + 0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c, + 0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, + 0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658, + 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4, + 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, + 0xc3a4, 0x080c, 0xd26c, 0x1130, 0x080c, 0xd16a, 0x1118, 0x6007, + 0x0010, 0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, + 0x2fda, 0x080c, 0xc227, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, + 0x210c, 0x0048, 0x2009, 0x0029, 0x080c, 0xd52a, 0x6010, 0x2058, + 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, + 0x080c, 0xd3c5, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, + 0x0980, 0x0804, 0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, + 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x080c, 0xd726, 0x1904, 0xc6c9, + 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0012, 0x6003, 0x0001, + 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x0001, 0x6003, + 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0cb0, 0x6007, 0x0005, + 0x0c68, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904, + 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0020, 0x6003, + 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x080c, 0x30fd, + 0x1904, 0xc6c9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8439, + 0x080c, 0x8973, 0x0005, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, + 0x30fd, 0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x0016, + 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, + 0x2c08, 0x080c, 0xbb05, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, + 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, + 0x7240, 0x2c08, 0x9006, 0x080c, 0xd4fc, 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, 0x9e32, + 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, + 0x8973, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, + 0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e, + 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc4b6, 0x080c, 0xaa61, + 0x080c, 0x6fb2, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6fcc, + 0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010, + 0x080c, 0x6f8a, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x30fd, + 0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c, + 0xc885, 0x1120, 0x6007, 0x002b, 0x0804, 0xc4b6, 0x6007, 0x002c, + 0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, + 0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c, + 0xc88a, 0x1120, 0x6007, 0x002e, 0x0804, 0xc4b6, 0x6007, 0x002f, + 0x0804, 0xc4b6, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x00e6, 0x00d6, + 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, + 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, + 0x00de, 0x00ee, 0x0804, 0xc4bd, 0x080c, 0x538a, 0xd0e4, 0x0904, + 0xc614, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, + 0x720c, 0x080c, 0x655e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, + 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x655a, 0x15b8, 0x2069, + 0x1800, 0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, + 0x080c, 0xbb05, 0x0590, 0x080c, 0xc754, 0x0578, 0x080c, 0xd5a6, + 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x83f1, + 0x080c, 0x8973, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, + 0xffff, 0x0150, 0x080c, 0xbb05, 0x01c0, 0x9280, 0x0002, 0x2004, + 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, + 0x080c, 0xd4fc, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, + 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, + 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, + 0x30fd, 0x1904, 0xc6c9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, + 0x8007, 0x9086, 0x0006, 0x1904, 0xc4bd, 0x00e6, 0x00d6, 0x00c6, + 0x080c, 0x538a, 0xd0e4, 0x0904, 0xc68c, 0x2069, 0x1800, 0x2071, + 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, + 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4fc, 0x2c10, + 0x00ce, 0x05e8, 0x080c, 0xbb05, 0x05d0, 0x7108, 0x9280, 0x0002, + 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb73d, + 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, + 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, + 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xc754, 0x0904, 0xc60d, + 0x0056, 0x7510, 0x7614, 0x080c, 0xd5bf, 0x005e, 0x00ce, 0x00de, + 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, + 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0c78, 0x6007, + 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, + 0x6017, 0x0000, 0x0804, 0xc5e4, 0x00e6, 0x0026, 0x080c, 0x6520, + 0x0550, 0x080c, 0x6509, 0x080c, 0xd798, 0x1518, 0x2071, 0x1800, + 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, + 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, + 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x655e, 0x0120, + 0x2011, 0x19d1, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2dbb, + 0x0010, 0x080c, 0xd7ca, 0x002e, 0x00ee, 0x080c, 0x9e32, 0x0804, + 0xc4bc, 0x080c, 0x9e32, 0x0005, 0x2600, 0x0002, 0xc6e0, 0xc6e0, + 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e2, 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e0, + 0xc6ff, 0xc6e0, 0xc6e0, 0xc6e0, 0xc711, 0xc71e, 0xc74f, 0xc6e0, + 0x080c, 0x0db4, 0x080c, 0xd726, 0x1d20, 0x080c, 0x30fd, 0x1d08, + 0x080c, 0xc869, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, + 0x0001, 0x080c, 0x8439, 0x0005, 0x080c, 0x2fda, 0x080c, 0xc227, + 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x0005, 0x080c, + 0xd726, 0x1938, 0x080c, 0x30fd, 0x1920, 0x080c, 0xc869, 0x1d60, + 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8439, + 0x0005, 0x080c, 0xc771, 0x0904, 0xc6c9, 0x6007, 0x004e, 0x6003, + 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x004f, + 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, + 0x0001, 0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, + 0x7144, 0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, + 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, + 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x0110, 0x6017, 0x0001, + 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, + 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 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, 0x001e, + 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, + 0x2091, 0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, + 0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x1004, + 0x05a0, 0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, + 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, + 0x001e, 0x2940, 0x080c, 0x1004, 0x01c0, 0x2900, 0xa006, 0x2100, + 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, + 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, + 0x0000, 0x6014, 0x2048, 0x080c, 0x0f9d, 0x9006, 0x012e, 0x01de, + 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2241, + 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, + 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, + 0x2099, 0x0260, 0x0ca8, 0x080c, 0x2241, 0x2061, 0x1971, 0x6004, + 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, + 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260, + 0x0ca8, 0x2061, 0x1971, 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, 0x2259, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, + 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, + 0x01f8, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, + 0x080c, 0x2259, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, + 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, + 0x0138, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, + 0x2061, 0x1974, 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, 0x080c, 0xc901, + 0x00de, 0x0005, 0x00d6, 0x080c, 0xc90e, 0x1520, 0x680c, 0x908c, + 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, + 0xd1e4, 0x0130, 0x9006, 0x080c, 0xd842, 0x2009, 0x0001, 0x0078, + 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2663, + 0x1148, 0x2001, 0x0001, 0x080c, 0xd842, 0x2110, 0x900e, 0x080c, + 0x3023, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, + 0x00b6, 0x00c6, 0x080c, 0x9e7f, 0x05a8, 0x0016, 0x0026, 0x00c6, + 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1578, + 0x080c, 0x61de, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, + 0x2b00, 0x6012, 0x080c, 0xd726, 0x11d8, 0x080c, 0x30fd, 0x11c0, + 0x080c, 0xc869, 0x0510, 0x2001, 0x0007, 0x080c, 0x618f, 0x2001, + 0x0007, 0x080c, 0x61bb, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, + 0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0010, + 0x080c, 0x9e32, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, + 0x9e32, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9e32, 0x9006, + 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, + 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, + 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, + 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, + 0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, + 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, + 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xca56, + 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0db4, + 0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62, + 0x080c, 0x8973, 0x0005, 0xc98b, 0xc98d, 0xc98b, 0xc98b, 0xc98b, + 0xc98d, 0xc99c, 0xca4f, 0xc9ee, 0xca4f, 0xca00, 0xca4f, 0xc99c, + 0xca4f, 0xca47, 0xca4f, 0xca47, 0xca4f, 0xca4f, 0xc98b, 0xc98b, + 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, + 0xc98b, 0xc98d, 0xc98b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xc98b, + 0xca4c, 0xca4f, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xca4f, 0xca4f, + 0xc98b, 0xca4f, 0xca4f, 0xc98b, 0xc997, 0xc98b, 0xc98b, 0xc98b, + 0xc98b, 0xca4b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xca4f, 0xc98b, + 0xc98b, 0xc98b, 0xc98b, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, + 0xc22a, 0x6003, 0x0002, 0x080c, 0x8973, 0x0804, 0xca55, 0x9006, + 0x080c, 0x617b, 0x0804, 0xca4f, 0x080c, 0x655a, 0x1904, 0xca4f, + 0x9006, 0x080c, 0x617b, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, + 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, + 0x0428, 0x6010, 0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xc212, + 0x1904, 0xca4f, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, + 0x4a76, 0x004e, 0x003e, 0x0804, 0xca4f, 0x080c, 0x312e, 0x1904, + 0xca4f, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, + 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, + 0x080c, 0x618f, 0x080c, 0x886e, 0x6023, 0x0001, 0x6003, 0x0001, + 0x6007, 0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x6110, 0x2158, + 0x2009, 0x0001, 0x080c, 0x8046, 0x0804, 0xca55, 0x6610, 0x2658, + 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xca4f, + 0x9686, 0x0004, 0x0904, 0xca4f, 0x2001, 0x0004, 0x0804, 0xca4d, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, + 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e, + 0x003e, 0x2001, 0x0006, 0x080c, 0xca73, 0x6610, 0x2658, 0xbe04, + 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, + 0x2001, 0x0006, 0x080c, 0x61bb, 0x9284, 0x00ff, 0x908e, 0x0007, + 0x1120, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x655a, 0x11f8, + 0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, + 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, + 0x78a6, 0x00fe, 0x0804, 0xc9d6, 0x2001, 0x0004, 0x0030, 0x2001, + 0x0006, 0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x61bb, 0x080c, + 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x2600, 0x0002, + 0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a, + 0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6c, + 0xca6c, 0xca6c, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e32, + 0x080c, 0x8973, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, + 0xb900, 0xd184, 0x0138, 0x080c, 0x618f, 0x9006, 0x080c, 0x617b, + 0x080c, 0x3003, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, + 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0db4, + 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, + 0x0db4, 0x006b, 0x0005, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, + 0xa8a1, 0xcaf2, 0xcab3, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, + 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xcaf2, 0xcaf9, 0xa8a1, + 0xa8a1, 0xa8a1, 0xa8a1, 0x00f6, 0x080c, 0x655a, 0x11d8, 0x080c, + 0xc212, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, + 0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023, + 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c, + 0x8973, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x2663, 0x11b0, 0x080c, 0x623e, 0x0118, 0x080c, 0x9e32, 0x0080, + 0xb810, 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5ceb, + 0x000e, 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9e32, + 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9e32, + 0x0005, 0x080c, 0xac85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, + 0x080c, 0x8439, 0x080c, 0x8973, 0x0010, 0x080c, 0x9e32, 0x0005, + 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, 0x886e, 0x080c, + 0x9e62, 0x080c, 0x8973, 0x0005, 0x9182, 0x0040, 0x0002, 0xcb2a, + 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2c, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, + 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, + 0xcb2a, 0xcb2a, 0x080c, 0x0db4, 0x0096, 0x00b6, 0x00d6, 0x00e6, + 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11a8, + 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xcb92, + 0x080c, 0xd836, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, + 0x2011, 0x0200, 0x080c, 0x822f, 0x0020, 0x9026, 0x080c, 0xd76b, + 0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, 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, 0x688c, + 0x001e, 0x080c, 0xd836, 0x1904, 0xcbf2, 0x9486, 0x2000, 0x1130, + 0x2019, 0x0017, 0x080c, 0xd4a6, 0x0804, 0xcbf2, 0x9486, 0x0200, + 0x1120, 0x080c, 0xd442, 0x0804, 0xcbf2, 0x9486, 0x0400, 0x0120, + 0x9486, 0x1000, 0x1904, 0xcbf2, 0x2019, 0x0002, 0x080c, 0xd45d, + 0x0804, 0xcbf2, 0x2069, 0x1a41, 0x6a00, 0xd284, 0x0904, 0xcc5c, + 0x9284, 0x0300, 0x1904, 0xcc55, 0x6804, 0x9005, 0x0904, 0xcc3d, + 0x2d78, 0x6003, 0x0007, 0x080c, 0x1004, 0x0904, 0xcbfe, 0x7800, + 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, + 0x180f, 0x2004, 0xd084, 0x1904, 0xcc60, 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, 0xcbfa, 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, 0x688c, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, + 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, + 0x2004, 0xd084, 0x0120, 0x080c, 0x0feb, 0x1904, 0xcba7, 0x6017, + 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x83f1, 0x080c, + 0x8973, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, + 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, + 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, + 0x080c, 0x83f1, 0x080c, 0x8973, 0x0828, 0x6868, 0x602e, 0x686c, + 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x2001, 0x180e, 0x2004, + 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x6017, 0xf300, + 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x6017, 0xf500, 0x0c98, + 0x6017, 0xf600, 0x0804, 0xcc12, 0x6017, 0xf200, 0x0804, 0xcc12, + 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, + 0x7044, 0x9084, 0x0003, 0x9080, 0xcbfa, 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, 0x0db4, + 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0029, 0x20a0, 0x2011, 0xccdc, 0x2041, 0x0001, 0x223d, + 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, + 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, + 0x2098, 0x0c68, 0x2950, 0x080c, 0x1004, 0x0170, 0x2900, 0xb002, + 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, + 0x080c, 0x101d, 0x0cc8, 0x080c, 0x101d, 0x0804, 0xcbfe, 0x2548, + 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, + 0x080c, 0xd4d5, 0x0804, 0xcbf2, 0x8010, 0x0004, 0x801a, 0x0006, + 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, + 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x9082, 0x0040, 0x0a0c, + 0x0db4, 0x2008, 0x0804, 0xcd8d, 0x9186, 0x0051, 0x0108, 0x00c0, + 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xcd3e, 0x0126, 0x2091, + 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e, + 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xcdd5, + 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, + 0x0500, 0x190c, 0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, + 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006, + 0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e, 0x000e, 0x00ce, + 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0db4, 0x0804, + 0xceb6, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9ec7, + 0x0005, 0xcd54, 0xcd56, 0xcd56, 0xcd7d, 0xcd54, 0xcd54, 0xcd54, + 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, + 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0x080c, 0x0db4, 0x080c, 0x886e, + 0x080c, 0x8973, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, + 0xbb17, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x6017, + 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, 0x2004, 0x601a, + 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x886e, + 0x080c, 0x8973, 0x080c, 0xbb17, 0x0120, 0x6014, 0x2048, 0x080c, + 0x101d, 0x080c, 0x9e62, 0x009e, 0x0005, 0x0002, 0xcda1, 0xcdb8, + 0xcda3, 0xcdcf, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, + 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, + 0xcda1, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014, 0x2048, + 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, + 0x9eac, 0x0010, 0x6003, 0x0004, 0x080c, 0x8973, 0x009e, 0x0005, + 0x080c, 0x886e, 0x080c, 0xbb17, 0x0138, 0x6114, 0x0096, 0x2148, + 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8204, 0x080c, 0x9e32, + 0x080c, 0x8973, 0x0005, 0x080c, 0xd72f, 0x0db0, 0x0cc8, 0x080c, + 0x886e, 0x2009, 0x0041, 0x0804, 0xcf3e, 0x9182, 0x0040, 0x0002, + 0xcdeb, 0xcded, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, + 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, + 0xcdeb, 0xcdee, 0xcdeb, 0x080c, 0x0db4, 0x0005, 0x00d6, 0x080c, + 0x8204, 0x00de, 0x080c, 0xd787, 0x080c, 0x9e32, 0x0005, 0x9182, + 0x0040, 0x0002, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d, + 0xce0d, 0xce0d, 0xce0d, 0xce0f, 0xce7e, 0xce0d, 0xce0d, 0xce0d, + 0xce0d, 0xce7e, 0xce0d, 0xce0d, 0xce0d, 0x080c, 0x0db4, 0x2001, + 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, + 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xce7e, 0x2009, 0x180c, + 0x2104, 0xd0d4, 0x0904, 0xce7e, 0xc0d4, 0x200a, 0x2009, 0x0105, + 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1873, + 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x8923, 0x6014, + 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, + 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c, + 0x8a4e, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x080c, 0x8a4e, + 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8204, 0x009e, 0x0005, + 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, + 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, + 0xd1cc, 0x0110, 0x080c, 0x2a77, 0x080c, 0x8a4e, 0x6014, 0x2048, + 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8204, 0x080c, 0x9e32, 0x009e, + 0x0005, 0x080c, 0xd72f, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, + 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8923, 0x080c, 0x8a4e, + 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, 0xd4d5, 0x6018, + 0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003, 0x601a, 0x6017, + 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, + 0x0002, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, + 0xcecd, 0xcecf, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, + 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcf1a, 0x080c, 0x0db4, 0x6014, + 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, + 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, + 0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x6003, 0x0007, 0x601b, + 0x0000, 0x080c, 0x8204, 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, + 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, + 0x0006, 0x00e9, 0x080c, 0x8206, 0x009e, 0x0005, 0x6003, 0x0002, + 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x150f, 0x1904, + 0xcecf, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, + 0x9105, 0x1120, 0x080c, 0x150f, 0x1904, 0xcecf, 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, + 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005, 0xcf61, 0xcf6d, + 0xcf79, 0xcf85, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf68, 0xcf63, + 0xcf63, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf63, 0xcf61, 0xcf63, + 0xcf61, 0x080c, 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005, + 0x6014, 0x9005, 0x190c, 0x0db4, 0x0005, 0x6003, 0x0001, 0x6106, + 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973, 0x012e, + 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091, + 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, + 0x2c10, 0x080c, 0x1a5c, 0x0126, 0x2091, 0x8000, 0x080c, 0x8456, + 0x080c, 0x8a4e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, + 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, + 0xcfb0, 0xcfb2, 0xcfc4, 0xcfde, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, + 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, + 0x080c, 0x0db4, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, + 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, + 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, + 0x6106, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00e0, 0x901e, 0x6316, + 0x631a, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x00a0, 0x6014, 0x2048, + 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, + 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, 0x080c, 0x8456, + 0x080c, 0x8a4e, 0x0005, 0x080c, 0x886e, 0x6114, 0x81ff, 0x0158, + 0x0096, 0x2148, 0x080c, 0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c, + 0xd4d5, 0x003e, 0x009e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005, + 0x080c, 0x8923, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, + 0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c, 0xd4d5, 0x003e, 0x009e, + 0x080c, 0x9e62, 0x080c, 0x8a4e, 0x0005, 0x9182, 0x0085, 0x0002, + 0xd02f, 0xd02d, 0xd02d, 0xd03b, 0xd02d, 0xd02d, 0xd02d, 0xd02d, + 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0x080c, 0x0db4, 0x6003, + 0x000b, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c, + 0x8973, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd726, 0x0118, + 0x080c, 0x9e32, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, + 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, + 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa152, 0x7220, 0x080c, + 0xd37b, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, + 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, + 0x83f1, 0x080c, 0x8973, 0x080c, 0x8a4e, 0x00ee, 0x002e, 0x0005, + 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0db4, + 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085, 0x00a2, 0x9186, + 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ec7, 0x0050, + 0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62, + 0x080c, 0x8973, 0x0005, 0xd0a0, 0xd0a2, 0xd0a2, 0xd0a0, 0xd0a0, + 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, + 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973, + 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0db4, 0x9182, 0x0092, 0x1a0c, + 0x0db4, 0x9182, 0x0085, 0x0002, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c3, + 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, + 0xd0c1, 0x080c, 0x0db4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, + 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9ec7, 0x0030, + 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005, 0x0036, + 0x080c, 0xd787, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, + 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, + 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e, + 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9865, 0x007e, 0x1520, + 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, + 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787, 0x080c, 0xc22a, + 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xbb17, + 0x0110, 0x080c, 0xd4d5, 0x009e, 0x6017, 0x0000, 0x080c, 0xd787, + 0x6023, 0x0007, 0x080c, 0xc22a, 0x003e, 0x012e, 0x0005, 0x00f6, + 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, + 0x080c, 0x2663, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x623e, 0x1590, + 0x001e, 0x00c6, 0x2160, 0x080c, 0xc227, 0x00ce, 0x002e, 0x0026, + 0x0016, 0x2019, 0x0029, 0x080c, 0x9926, 0x080c, 0x8571, 0x0076, + 0x903e, 0x080c, 0x8469, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, + 0xd29b, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, + 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3097, + 0x002e, 0xbcb0, 0x001e, 0x080c, 0x5ceb, 0xbe12, 0xbd16, 0xbcb2, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, - 0x2104, 0x9086, 0x0074, 0x1904, 0xd1a3, 0x2069, 0x0260, 0x6944, - 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xd1a0, + 0x2104, 0x9086, 0x0074, 0x1904, 0xd1c3, 0x2069, 0x0260, 0x6944, + 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xd1c0, 0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8b0, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, - 0x0648, 0x080c, 0xd81b, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, + 0x0648, 0x080c, 0xd83b, 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, @@ -6507,105 +6511,105 @@ 0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, - 0x6246, 0x0804, 0xd20a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, - 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, 0x009e, 0x15a0, 0x2011, + 0x624d, 0x0804, 0xd22a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, + 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x15a0, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, - 0xadf4, 0x009e, 0x1540, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, - 0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd50a, - 0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x8549, 0x0076, - 0x2039, 0x0000, 0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b, 0x007e, - 0x2001, 0x0007, 0x080c, 0x61b4, 0x2001, 0x0007, 0x080c, 0x6188, + 0xae0d, 0x009e, 0x1540, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, + 0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd52a, + 0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x8571, 0x0076, + 0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c, 0xd29b, 0x007e, + 0x2001, 0x0007, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f, 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, 0x2663, 0x11d0, 0x080c, 0x6237, 0x11b8, 0x2011, 0x0270, - 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, + 0x080c, 0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0270, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, - 0x2019, 0x0006, 0x080c, 0xadf4, 0x009e, 0x015e, 0x003e, 0x002e, + 0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, - 0x2663, 0x11d0, 0x080c, 0x6237, 0x11b8, 0x2011, 0x0276, 0x20a9, - 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, 0x009e, + 0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0276, 0x20a9, + 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, - 0x0006, 0x080c, 0xadf4, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, + 0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a80, - 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd314, 0x0018, 0x9606, - 0x0904, 0xd314, 0x2100, 0x9c06, 0x0904, 0xd30b, 0x080c, 0xd54b, - 0x1904, 0xd30b, 0x080c, 0xd838, 0x0904, 0xd30b, 0x080c, 0xd53b, - 0x0904, 0xd30b, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x3127, - 0x0904, 0xd32f, 0x6004, 0x9086, 0x0000, 0x1904, 0xd32f, 0x9786, - 0x0004, 0x0904, 0xd32f, 0x9786, 0x0007, 0x0904, 0xd30b, 0x2500, - 0x9c06, 0x0904, 0xd30b, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, + 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd334, 0x0018, 0x9606, + 0x0904, 0xd334, 0x2100, 0x9c06, 0x0904, 0xd32b, 0x080c, 0xd56b, + 0x1904, 0xd32b, 0x080c, 0xd858, 0x0904, 0xd32b, 0x080c, 0xd55b, + 0x0904, 0xd32b, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x312e, + 0x0904, 0xd34f, 0x6004, 0x9086, 0x0000, 0x1904, 0xd34f, 0x9786, + 0x0004, 0x0904, 0xd34f, 0x9786, 0x0007, 0x0904, 0xd32b, 0x2500, + 0x9c06, 0x0904, 0xd32b, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x190d, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, - 0xbd04, 0x1130, 0x080c, 0xa7a7, 0x009e, 0x080c, 0x9e49, 0x0418, - 0x6014, 0x2048, 0x080c, 0xbafe, 0x01d8, 0x9786, 0x0003, 0x1570, + 0xbd1d, 0x1130, 0x080c, 0xa7c0, 0x009e, 0x080c, 0x9e62, 0x0418, + 0x6014, 0x2048, 0x080c, 0xbb17, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, - 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd7b3, - 0x0016, 0x080c, 0xbded, 0x080c, 0x6878, 0x001e, 0x080c, 0xbce7, - 0x009e, 0x080c, 0x9e49, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, - 0x9c02, 0x1210, 0x0804, 0xd28f, 0x012e, 0x002e, 0x004e, 0x005e, + 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd7d3, + 0x0016, 0x080c, 0xbe06, 0x080c, 0x687f, 0x001e, 0x080c, 0xbd00, + 0x009e, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, + 0x9c02, 0x1210, 0x0804, 0xd2af, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, - 0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd7b3, 0x080c, 0xd4b5, + 0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd7d3, 0x080c, 0xd4d5, 0x08f8, 0x009e, 0x0c00, 0x9786, 0x000a, 0x0920, 0x0808, 0x81ff, 0x09d0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, - 0x1950, 0x080c, 0xbcf3, 0x0130, 0x080c, 0xbd04, 0x1920, 0x080c, - 0xa7a7, 0x0038, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x1110, 0x080c, - 0xa7a7, 0x080c, 0x9e49, 0x0804, 0xd30b, 0xa864, 0x9084, 0x00ff, + 0x1950, 0x080c, 0xbd0c, 0x0130, 0x080c, 0xbd1d, 0x1920, 0x080c, + 0xa7c0, 0x0038, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c, + 0xa7c0, 0x080c, 0x9e62, 0x0804, 0xd32b, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, - 0x9006, 0x080c, 0xd4dc, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, - 0x001b, 0x00ee, 0x00ce, 0x0005, 0xd37a, 0xd37a, 0xd37a, 0xd37a, - 0xd37a, 0xd37a, 0xd37c, 0xd37a, 0xd37a, 0xd37a, 0xd37a, 0x9e49, - 0x9e49, 0xd37a, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, + 0x9006, 0x080c, 0xd4fc, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, + 0x001b, 0x00ee, 0x00ce, 0x0005, 0xd39a, 0xd39a, 0xd39a, 0xd39a, + 0xd39a, 0xd39a, 0xd39c, 0xd39a, 0xd39a, 0xd39a, 0xd39a, 0x9e62, + 0x9e62, 0xd39a, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, - 0xd50a, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xd0c7, 0x003e, - 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xbafe, 0x0140, 0x6014, - 0x904d, 0x080c, 0xb731, 0x687b, 0x0005, 0x080c, 0x6885, 0x009e, - 0x080c, 0x9e49, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, - 0x6174, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, - 0x1805, 0x2011, 0x0276, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e, + 0xd52a, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xd0e5, 0x003e, + 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xbb17, 0x0140, 0x6014, + 0x904d, 0x080c, 0xb74a, 0x687b, 0x0005, 0x080c, 0x688c, 0x009e, + 0x080c, 0x9e62, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, + 0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1cd0, - 0x2079, 0x0001, 0x8fff, 0x0904, 0xd415, 0x2071, 0x1800, 0x7650, - 0x7070, 0x8001, 0x9602, 0x1a04, 0xd415, 0x88ff, 0x0120, 0x2800, - 0x9c06, 0x1590, 0x2078, 0x080c, 0xd53b, 0x0570, 0x2400, 0x9c06, + 0x2079, 0x0001, 0x8fff, 0x0904, 0xd435, 0x2071, 0x1800, 0x7650, + 0x7070, 0x8001, 0x9602, 0x1a04, 0xd435, 0x88ff, 0x0120, 0x2800, + 0x9c06, 0x1590, 0x2078, 0x080c, 0xd55b, 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, 0xd767, - 0x080c, 0xc211, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, - 0x080c, 0xbafe, 0x0120, 0x0046, 0x080c, 0xd4b5, 0x004e, 0x009e, - 0x080c, 0x9e49, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, - 0x2004, 0x9c02, 0x1210, 0x0804, 0xd3ca, 0x9006, 0x012e, 0x00be, + 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787, + 0x080c, 0xc22a, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, + 0x080c, 0xbb17, 0x0120, 0x0046, 0x080c, 0xd4d5, 0x004e, 0x009e, + 0x080c, 0x9e62, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, + 0x2004, 0x9c02, 0x1210, 0x0804, 0xd3ea, 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, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x080c, - 0xd3bb, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, + 0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c, + 0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x0036, 0x080c, 0x6237, 0x1190, 0x0056, 0x0086, 0x9046, - 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x97a1, 0x009e, - 0x008e, 0x903e, 0x080c, 0x984c, 0x080c, 0xd3bb, 0x005e, 0x003e, - 0x001e, 0x8108, 0x1f04, 0xd448, 0x015e, 0x00ce, 0x007e, 0x005e, + 0x0016, 0x0036, 0x080c, 0x623e, 0x1190, 0x0056, 0x0086, 0x9046, + 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e, + 0x008e, 0x903e, 0x080c, 0x9865, 0x080c, 0xd3db, 0x005e, 0x003e, + 0x001e, 0x8108, 0x1f04, 0xd468, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x904e, - 0x080c, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x2c20, - 0x080c, 0xd3bb, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, + 0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x2c20, + 0x080c, 0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, - 0x0016, 0x0036, 0x080c, 0x6237, 0x11a0, 0x0086, 0x9046, 0x2828, - 0x0046, 0x2021, 0x0001, 0x080c, 0xd74b, 0x004e, 0x0096, 0x904e, - 0x080c, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x080c, - 0xd3bb, 0x003e, 0x001e, 0x8108, 0x1f04, 0xd490, 0x015e, 0x00ce, + 0x0016, 0x0036, 0x080c, 0x623e, 0x11a0, 0x0086, 0x9046, 0x2828, + 0x0046, 0x2021, 0x0001, 0x080c, 0xd76b, 0x004e, 0x0096, 0x904e, + 0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c, + 0xd3db, 0x003e, 0x001e, 0x8108, 0x1f04, 0xd4b0, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, - 0xbafc, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, - 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6885, - 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6885, 0x00fe, 0x001e, 0x0005, - 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6885, 0x2f48, - 0x0cb8, 0x080c, 0x6885, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, + 0xbb15, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, + 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x688c, + 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x688c, 0x00fe, 0x001e, 0x0005, + 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x688c, 0x2f48, + 0x0cb8, 0x080c, 0x688c, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, @@ -6613,43 +6617,43 @@ 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c, 0x0db4, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, - 0xbaec, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, + 0xbb05, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, 0x9006, - 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6885, + 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 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, 0x1958, 0x2004, 0x601a, 0x080c, 0x83c9, - 0x080c, 0x894b, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, - 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbe31, 0x0030, 0x080c, - 0xd767, 0x080c, 0x81dc, 0x080c, 0x9e19, 0x0005, 0x9280, 0x0008, - 0x2004, 0x9084, 0x000f, 0x0002, 0xd59a, 0xd59a, 0xd59a, 0xd59c, - 0xd59a, 0xd59c, 0xd59c, 0xd59a, 0xd59c, 0xd59a, 0xd59a, 0xd59a, - 0xd59a, 0xd59a, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, - 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd5b3, 0xd5b3, 0xd5b3, - 0xd5b3, 0xd5b3, 0xd5b3, 0xd5c0, 0xd5b3, 0xd5b3, 0xd5b3, 0xd5b3, - 0xd5b3, 0xd5b3, 0xd5b3, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, - 0x2a00, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0005, - 0x0096, 0x00c6, 0x2260, 0x080c, 0xd767, 0x6043, 0x0000, 0x6024, + 0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c, 0x83f1, + 0x080c, 0x8973, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, + 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbe4a, 0x0030, 0x080c, + 0xd787, 0x080c, 0x8204, 0x080c, 0x9e32, 0x0005, 0x9280, 0x0008, + 0x2004, 0x9084, 0x000f, 0x0002, 0xd5ba, 0xd5ba, 0xd5ba, 0xd5bc, + 0xd5ba, 0xd5bc, 0xd5bc, 0xd5ba, 0xd5bc, 0xd5ba, 0xd5ba, 0xd5ba, + 0xd5ba, 0xd5ba, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, + 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd5d3, 0xd5d3, 0xd5d3, + 0xd5d3, 0xd5d3, 0xd5d3, 0xd5e0, 0xd5d3, 0xd5d3, 0xd5d3, 0xd5d3, + 0xd5d3, 0xd5d3, 0xd5d3, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, + 0x2a00, 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, + 0x0096, 0x00c6, 0x2260, 0x080c, 0xd787, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, - 0x9186, 0x0007, 0x1904, 0xd619, 0x6814, 0x9005, 0x0138, 0x2048, + 0x9186, 0x0007, 0x1904, 0xd639, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, - 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00c6, 0x2d60, - 0x6100, 0x9186, 0x0002, 0x1904, 0xd690, 0x6014, 0x9005, 0x1138, - 0x6000, 0x9086, 0x0007, 0x190c, 0x0db4, 0x0804, 0xd690, 0x2048, - 0x080c, 0xbafe, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, + 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60, + 0x6100, 0x9186, 0x0002, 0x1904, 0xd6b0, 0x6014, 0x9005, 0x1138, + 0x6000, 0x9086, 0x0007, 0x190c, 0x0db4, 0x0804, 0xd6b0, 0x2048, + 0x080c, 0xbb17, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, - 0x0043, 0x080c, 0xcf20, 0x0804, 0xd690, 0x2009, 0x0041, 0x0804, - 0xd68a, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, - 0x1120, 0x00de, 0x009e, 0x0804, 0xd5b3, 0xd0b4, 0x0128, 0xd0fc, - 0x090c, 0x0db4, 0x0804, 0xd5d4, 0x6007, 0x003a, 0x6003, 0x0001, - 0x080c, 0x83c9, 0x080c, 0x894b, 0x00c6, 0x2d60, 0x6100, 0x9186, - 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd690, 0x6814, 0x2048, + 0x0043, 0x080c, 0xcf3e, 0x0804, 0xd6b0, 0x2009, 0x0041, 0x0804, + 0xd6aa, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, + 0x1120, 0x00de, 0x009e, 0x0804, 0xd5d3, 0xd0b4, 0x0128, 0xd0fc, + 0x090c, 0x0db4, 0x0804, 0xd5f4, 0x6007, 0x003a, 0x6003, 0x0001, + 0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60, 0x6100, 0x9186, + 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd6b0, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0feb, 0x090c, 0x0db4, 0xa867, 0x010d, 0x9006, @@ -6657,24 +6661,24 @@ 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, - 0x6885, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xd0c7, 0x2d00, + 0x688c, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xd0e5, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x6342, - 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xcf20, + 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xcf3e, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, - 0x8846, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, - 0xd4b5, 0x009e, 0x003e, 0x080c, 0x894b, 0x0005, 0x9186, 0x0014, - 0x0d70, 0x080c, 0x9eae, 0x0005, 0xd6c3, 0xd6c1, 0xd6c1, 0xd6c1, - 0xd6c1, 0xd6c1, 0xd6c3, 0xd6c1, 0xd6c1, 0xd6c1, 0xd6c1, 0xd6c1, - 0xd6c1, 0x080c, 0x0db4, 0x080c, 0x8846, 0x6003, 0x000c, 0x080c, - 0x894b, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, - 0x001a, 0x080c, 0x9eae, 0x0005, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, - 0xd6e3, 0xd703, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, - 0xd6e1, 0x080c, 0x0db4, 0x00d6, 0x2c68, 0x080c, 0x9dc3, 0x01b0, + 0x886e, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, + 0xd4d5, 0x009e, 0x003e, 0x080c, 0x8973, 0x0005, 0x9186, 0x0014, + 0x0d70, 0x080c, 0x9ec7, 0x0005, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1, + 0xd6e1, 0xd6e1, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, + 0xd6e1, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6003, 0x000c, 0x080c, + 0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, + 0x001a, 0x080c, 0x9ec7, 0x0005, 0xd701, 0xd701, 0xd701, 0xd701, + 0xd703, 0xd723, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701, + 0xd701, 0x080c, 0x0db4, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, - 0x6023, 0x0004, 0x080c, 0x83c9, 0x080c, 0x894b, 0x2d60, 0x080c, - 0x9e19, 0x00de, 0x0005, 0x080c, 0x9e19, 0x0005, 0x00e6, 0x6010, + 0x6023, 0x0004, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60, 0x080c, + 0x9e32, 0x00de, 0x0005, 0x080c, 0x9e32, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x6042, 0x2009, @@ -6685,17 +6689,17 @@ 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, 0x81dc, 0x080c, 0x9e19, 0x0010, 0x9cf0, + 0x600c, 0x2072, 0x080c, 0x8204, 0x080c, 0x9e32, 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, 0x182b, 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, 0xadf4, 0x009e, + 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, - 0x2019, 0x0006, 0x080c, 0xadf4, 0x009e, 0x1100, 0x015e, 0x003e, - 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c5d, 0x080c, + 0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x1100, 0x015e, 0x003e, + 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c64, 0x080c, 0x2dbb, 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, @@ -6703,17 +6707,17 @@ 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, - 0x01d0, 0x080c, 0xd53b, 0x01b8, 0x080c, 0xd54b, 0x11a0, 0x6000, + 0x01d0, 0x080c, 0xd55b, 0x01b8, 0x080c, 0xd56b, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x190d, 0x001e, 0x080c, - 0xbcf3, 0x1110, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x1110, 0x080c, - 0xa7a7, 0x080c, 0x9e49, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, + 0xbd0c, 0x1110, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c, + 0xa7c0, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, - 0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xc1f9, 0x0168, + 0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xc212, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, - 0x00be, 0x2021, 0x0004, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x000e, - 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x990d, 0x080c, 0x9e49, + 0x00be, 0x2021, 0x0004, 0x080c, 0x4a76, 0x004e, 0x003e, 0x000e, + 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9926, 0x080c, 0x9e62, 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, @@ -6881,11 +6885,11 @@ 0x000b, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x022a, 0x000b, 0x15b6, 0xf4ac, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, - 0x8000, 0xbd16 + 0x8000, 0x89e3 }; #ifdef UNIQUE_FW_NAME -unsigned short fw2300flx_length01 = 0xd57a; +unsigned short fw2300flx_length01 = 0xd59a; #else -unsigned short risc_code_length01 = 0xd57a; +unsigned short risc_code_length01 = 0xd59a; #endif diff -Nru a/drivers/scsi/qla2xxx/ql6322_fw.c b/drivers/scsi/qla2xxx/ql6322_fw.c --- a/drivers/scsi/qla2xxx/ql6322_fw.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/ql6322_fw.c Tue May 18 23:38:09 2004 @@ -18,7 +18,7 @@ *************************************************************************/ /* - * Firmware Version 3.02.26 (08:08 Mar 11, 2004) + * Firmware Version 3.02.28 (14:05 Apr 03, 2004) */ #ifdef UNIQUE_FW_NAME @@ -28,15 +28,15 @@ #endif #ifdef UNIQUE_FW_NAME -unsigned char fw2322flx_version_str[] = {3, 2,26}; +unsigned char fw2322flx_version_str[] = {3, 2,28}; #else -unsigned char firmware_version[] = {3, 2,26}; +unsigned char firmware_version[] = {3, 2,28}; #endif #ifdef UNIQUE_FW_NAME -#define fw2322flx_VERSION_STRING "3.02.26" +#define fw2322flx_VERSION_STRING "3.02.28" #else -#define FW_VERSION_STRING "3.02.26" +#define FW_VERSION_STRING "3.02.28" #endif #ifdef UNIQUE_FW_NAME @@ -50,12 +50,12 @@ #else unsigned short risc_code01[] = { #endif - 0x0470, 0x0000, 0x0000, 0xce19, 0x0000, 0x0003, 0x0002, 0x001a, + 0x0470, 0x0000, 0x0000, 0xce3b, 0x0000, 0x0003, 0x0002, 0x001c, 0x0317, 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, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9, + 0x332e, 0x3032, 0x2e32, 0x3820, 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, @@ -82,94 +82,94 @@ 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, 0x0f3a, 0x080c, 0x5ce3, 0x080c, 0x9b62, 0x080c, - 0x10f1, 0x080c, 0x12d6, 0x080c, 0x1a5a, 0x080c, 0x8418, 0x080c, - 0x0cf7, 0x080c, 0x1076, 0x080c, 0x3284, 0x080c, 0x73c0, 0x080c, - 0x671b, 0x080c, 0x8062, 0x080c, 0x20dd, 0x080c, 0x7a54, 0x080c, + 0x1dd8, 0x080c, 0x0f3a, 0x080c, 0x5cea, 0x080c, 0x9b7d, 0x080c, + 0x10f1, 0x080c, 0x12d6, 0x080c, 0x1a5a, 0x080c, 0x8440, 0x080c, + 0x0cf7, 0x080c, 0x1076, 0x080c, 0x328b, 0x080c, 0x73cb, 0x080c, + 0x6722, 0x080c, 0x808a, 0x080c, 0x20dd, 0x080c, 0x7a5f, 0x080c, 0x1f2b, 0x080c, 0x2065, 0x080c, 0x20d2, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x0941, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0935, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, - 0x908e, 0x0003, 0x1158, 0x080c, 0x4996, 0x080c, 0x32ab, 0x080c, - 0x7428, 0x080c, 0x6bc3, 0x080c, 0x808b, 0x0c78, 0x000b, 0x0c98, + 0x908e, 0x0003, 0x1158, 0x080c, 0x499d, 0x080c, 0x32b2, 0x080c, + 0x7433, 0x080c, 0x6bca, 0x080c, 0x80b3, 0x0c78, 0x000b, 0x0c98, 0x0962, 0x0963, 0x0afa, 0x0960, 0x0bab, 0x0cf6, 0x0cf6, 0x0cf6, 0x080c, 0x0d65, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, - 0x9086, 0x0001, 0x1904, 0x0acd, 0x080c, 0x0e8d, 0x080c, 0x70ac, - 0x0150, 0x080c, 0x70cf, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, - 0x1800, 0x782a, 0x0478, 0x080c, 0x6fdd, 0x7000, 0x9086, 0x0001, + 0x9086, 0x0001, 0x1904, 0x0acd, 0x080c, 0x0e8d, 0x080c, 0x70b7, + 0x0150, 0x080c, 0x70da, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, + 0x1800, 0x782a, 0x0478, 0x080c, 0x6fe8, 0x7000, 0x9086, 0x0001, 0x1904, 0x0acd, 0x7094, 0x9086, 0x0028, 0x1904, 0x0acd, 0x080c, - 0x805a, 0x080c, 0x804c, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, + 0x8082, 0x080c, 0x8074, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x2011, 0xffff, 0x080c, 0x286d, 0x7a28, 0x9295, 0x5e2c, - 0x7a2a, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011, 0x6f15, 0x080c, - 0x8237, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x2011, 0x8030, 0x901e, - 0x7392, 0x04d0, 0x080c, 0x53e7, 0x2079, 0x0100, 0x7844, 0x9005, - 0x1904, 0x0acd, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x2011, 0x6f22, - 0x080c, 0x8131, 0x2011, 0x6f15, 0x080c, 0x8237, 0x2001, 0x0265, + 0x7a2a, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, + 0x825f, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x8030, 0x901e, + 0x7392, 0x04d0, 0x080c, 0x53ee, 0x2079, 0x0100, 0x7844, 0x9005, + 0x1904, 0x0acd, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x6f2d, + 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1977, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, - 0x080c, 0x5c8b, 0x00ce, 0x0804, 0x0acd, 0x780f, 0x006b, 0x7a28, - 0x080c, 0x70b4, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c, + 0x080c, 0x5c92, 0x00ce, 0x0804, 0x0acd, 0x780f, 0x006b, 0x7a28, + 0x080c, 0x70bf, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c, 0x7a2a, 0x2011, 0x8010, 0x73d4, 0x2001, 0x1978, 0x2003, 0x0001, - 0x080c, 0x273f, 0x080c, 0x48d1, 0x7244, 0xc284, 0x7246, 0x2001, + 0x080c, 0x273f, 0x080c, 0x48d8, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x2001, 0x0390, 0x2003, - 0x0400, 0x080c, 0x98ad, 0x080c, 0x91c6, 0x2011, 0x0004, 0x080c, - 0xb83c, 0x080c, 0x98c9, 0x080c, 0x655b, 0x080c, 0x70ac, 0x1120, - 0x080c, 0x279a, 0x0600, 0x0420, 0x080c, 0x5c92, 0x0140, 0x7093, - 0x0001, 0x70cf, 0x0000, 0x080c, 0x55b4, 0x0804, 0x0acd, 0x080c, - 0x5386, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011, - 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x538a, 0xd0d4, 0x1118, + 0x0400, 0x080c, 0x98c8, 0x080c, 0x91e1, 0x2011, 0x0004, 0x080c, + 0xb857, 0x080c, 0x98e4, 0x080c, 0x6562, 0x080c, 0x70b7, 0x1120, + 0x080c, 0x279a, 0x0600, 0x0420, 0x080c, 0x5c99, 0x0140, 0x7093, + 0x0001, 0x70cf, 0x0000, 0x080c, 0x55bb, 0x0804, 0x0acd, 0x080c, + 0x538d, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011, + 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5391, 0xd0d4, 0x1118, 0x080c, 0x279a, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088, - 0x080c, 0x538a, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, - 0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x6658, - 0x0008, 0x2012, 0x080c, 0x661e, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, - 0x00a8, 0x707b, 0x0000, 0x080c, 0x70ac, 0x1130, 0x70ac, 0x9005, - 0x1168, 0x080c, 0xbc93, 0x0050, 0x080c, 0xbc93, 0x70d8, 0xd09c, - 0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c68, 0x70e3, 0x0000, + 0x080c, 0x5391, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, + 0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x665f, + 0x0008, 0x2012, 0x080c, 0x6625, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, + 0x00a8, 0x707b, 0x0000, 0x080c, 0x70b7, 0x1130, 0x70ac, 0x9005, + 0x1168, 0x080c, 0xbcae, 0x0050, 0x080c, 0xbcae, 0x70d8, 0xd09c, + 0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c6f, 0x70e3, 0x0000, 0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x27a2, 0x0228, 0x2011, - 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x70ac, 0x1178, + 0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x70b7, 0x1178, 0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e, 0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108, - 0xc295, 0x72da, 0x080c, 0x70ac, 0x0118, 0x9296, 0x0004, 0x0518, - 0x2011, 0x0001, 0x080c, 0xb83c, 0x70a7, 0x0000, 0x70ab, 0xffff, - 0x7003, 0x0002, 0x00fe, 0x080c, 0x2ddb, 0x080c, 0x98ad, 0x2011, - 0x0005, 0x080c, 0x931e, 0x080c, 0x98c9, 0x080c, 0x70ac, 0x0148, + 0xc295, 0x72da, 0x080c, 0x70b7, 0x0118, 0x9296, 0x0004, 0x0518, + 0x2011, 0x0001, 0x080c, 0xb857, 0x70a7, 0x0000, 0x70ab, 0xffff, + 0x7003, 0x0002, 0x00fe, 0x080c, 0x2ddb, 0x080c, 0x98c8, 0x2011, + 0x0005, 0x080c, 0x9339, 0x080c, 0x98e4, 0x080c, 0x70b7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x00e0, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, - 0x0002, 0x080c, 0x98ad, 0x2011, 0x0005, 0x080c, 0x931e, 0x080c, - 0x98c9, 0x080c, 0x70ac, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, + 0x0002, 0x080c, 0x98c8, 0x2011, 0x0005, 0x080c, 0x9339, 0x080c, + 0x98e4, 0x080c, 0x70b7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, - 0x00c6, 0x00b6, 0x080c, 0x70ac, 0x1118, 0x20a9, 0x0800, 0x0010, - 0x20a9, 0x0782, 0x080c, 0x70ac, 0x1110, 0x900e, 0x0010, 0x2009, + 0x00c6, 0x00b6, 0x080c, 0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010, + 0x20a9, 0x0782, 0x080c, 0x70b7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, - 0xb800, 0xd0bc, 0x090c, 0x3113, 0x8108, 0x1f04, 0x0ae1, 0x707b, + 0xb800, 0xd0bc, 0x090c, 0x311a, 0x8108, 0x1f04, 0x0ae1, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0ba8, 0x70a8, 0x9086, 0xffff, 0x0120, 0x080c, 0x2ddb, 0x0804, 0x0ba8, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0520, 0xd084, 0x0510, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, - 0xd08c, 0x01d0, 0x70dc, 0x9086, 0xffff, 0x0190, 0x080c, 0x2f63, - 0x70d8, 0xd094, 0x1904, 0x0ba8, 0x2011, 0x0001, 0x080c, 0xbf46, - 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f9d, 0x0804, 0x0ba8, + 0xd08c, 0x01d0, 0x70dc, 0x9086, 0xffff, 0x0190, 0x080c, 0x2f66, + 0x70d8, 0xd094, 0x1904, 0x0ba8, 0x2011, 0x0001, 0x080c, 0xbf61, + 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2fa0, 0x0804, 0x0ba8, 0x70e0, 0x9005, 0x1904, 0x0ba8, 0x70a4, 0x9005, 0x1904, 0x0ba8, - 0x70d8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0ba8, 0x080c, 0x661e, - 0x1904, 0x0ba8, 0x080c, 0x6671, 0x1904, 0x0ba8, 0x080c, 0x6658, + 0x70d8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0ba8, 0x080c, 0x6625, + 0x1904, 0x0ba8, 0x080c, 0x6678, 0x1904, 0x0ba8, 0x080c, 0x665f, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, - 0x6269, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, + 0x6270, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b4e, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0ba8, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1984, 0x080c, 0x0faa, 0x2011, 0x199e, 0x080c, 0x0faa, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e61, 0x9006, 0x080c, 0x23c9, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, - 0x0006, 0x080c, 0x4a6e, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, - 0x080c, 0x70cf, 0x0150, 0x080c, 0x70ac, 0x7828, 0x0118, 0x9084, - 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0x98ad, + 0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, + 0x080c, 0x70da, 0x0150, 0x080c, 0x70b7, 0x7828, 0x0118, 0x9084, + 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0x98c8, 0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000, - 0x080c, 0x931e, 0x2011, 0x0000, 0x080c, 0x9328, 0x080c, 0x98c9, + 0x080c, 0x9339, 0x2011, 0x0000, 0x080c, 0x9343, 0x080c, 0x98e4, 0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906, - 0x2009, 0x00f7, 0x080c, 0x5c51, 0x7940, 0x918c, 0x0010, 0x7942, + 0x2009, 0x00f7, 0x080c, 0x5c58, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x286d, 0xd19c, 0x0120, 0x2011, 0x0008, 0x080c, 0x286d, 0x0006, 0x0036, 0x0156, 0x0000, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518, 0x080c, 0x2801, @@ -178,26 +178,26 @@ 0x9006, 0x080c, 0x2751, 0x0068, 0x080c, 0x2811, 0x1d50, 0x2001, 0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2568, 0x0804, 0x0ca9, 0x080c, 0x2890, 0x080c, 0x28d4, 0x20a9, 0x003a, 0x1d04, - 0x0bff, 0x080c, 0x8217, 0x1f04, 0x0bff, 0x080c, 0x70bd, 0x0148, - 0x080c, 0x70cf, 0x1118, 0x080c, 0x73bb, 0x0050, 0x080c, 0x70b4, - 0x0dd0, 0x080c, 0x73b6, 0x080c, 0x73ac, 0x080c, 0x6fdd, 0x0020, - 0x2009, 0x00f8, 0x080c, 0x5c51, 0x7850, 0xc0e5, 0x7852, 0x080c, - 0x70ac, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, - 0x2019, 0xea60, 0x0d0c, 0x8217, 0x7820, 0xd09c, 0x15a0, 0x080c, - 0x70ac, 0x0904, 0x0c8b, 0x7824, 0xd0ac, 0x1904, 0x0cae, 0x080c, - 0x70cf, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, + 0x0bff, 0x080c, 0x823f, 0x1f04, 0x0bff, 0x080c, 0x70c8, 0x0148, + 0x080c, 0x70da, 0x1118, 0x080c, 0x73c6, 0x0050, 0x080c, 0x70bf, + 0x0dd0, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x6fe8, 0x0020, + 0x2009, 0x00f8, 0x080c, 0x5c58, 0x7850, 0xc0e5, 0x7852, 0x080c, + 0x70b7, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, + 0x2019, 0xea60, 0x0d0c, 0x823f, 0x7820, 0xd09c, 0x15a0, 0x080c, + 0x70b7, 0x0904, 0x0c8b, 0x7824, 0xd0ac, 0x1904, 0x0cae, 0x080c, + 0x70da, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x2011, 0x1800, 0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x8421, 0x1160, 0x1d04, - 0x0c5b, 0x080c, 0x8217, 0x080c, 0x73b6, 0x080c, 0x73ac, 0x7003, + 0x0c5b, 0x080c, 0x823f, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x7003, 0x0001, 0x0804, 0x0cae, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x1d04, 0x0c71, 0x080c, - 0x8217, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, + 0x823f, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x286d, 0x20a9, 0x0002, 0x080c, 0x27fa, 0x7924, 0x080c, 0x2819, 0xd19c, 0x0110, - 0x080c, 0x273f, 0x00f0, 0x080c, 0x70bd, 0x1140, 0x94a2, 0x03e8, - 0x1128, 0x080c, 0x7080, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800, - 0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x080c, 0x70c6, 0x0110, + 0x080c, 0x273f, 0x00f0, 0x080c, 0x70c8, 0x1140, 0x94a2, 0x03e8, + 0x1128, 0x080c, 0x708b, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800, + 0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x080c, 0x70d1, 0x0110, 0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c63, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x23c9, 0x00a0, 0x7850, 0xc0e4, 0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, @@ -205,20 +205,20 @@ 0x0028, 0x782a, 0x2001, 0x1978, 0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6, - 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x8217, 0x015e, + 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x823f, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086, - 0x0001, 0x1110, 0x080c, 0x32ab, 0x00ee, 0x0005, 0x0005, 0x2a70, - 0x2061, 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a, + 0x0001, 0x1110, 0x080c, 0x32b2, 0x00ee, 0x0005, 0x0005, 0x2a70, + 0x2061, 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c, 0x600f, 0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, - 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc93, 0x70eb, + 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbcae, 0x70eb, 0x00c0, 0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x195a, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, - 0x2020, 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6269, + 0x2020, 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6270, 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, @@ -237,11 +237,11 @@ 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, - 0x0002, 0x2003, 0x1001, 0x080c, 0x5395, 0x1170, 0x080c, 0x0efb, - 0x0110, 0x080c, 0x0e4e, 0x080c, 0x5395, 0x1130, 0x2071, 0x1800, + 0x0002, 0x2003, 0x1001, 0x080c, 0x539c, 0x1170, 0x080c, 0x0efb, + 0x0110, 0x080c, 0x0e4e, 0x080c, 0x539c, 0x1130, 0x2071, 0x1800, 0x2011, 0x8000, 0x080c, 0x0f0f, 0x0c70, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015, - 0x080c, 0x989e, 0x2079, 0x0380, 0x2069, 0x1ad4, 0x7818, 0x6802, + 0x080c, 0x98b9, 0x2079, 0x0380, 0x2069, 0x1ad4, 0x7818, 0x6802, 0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812, 0x2019, 0x1adf, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a, 0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead, @@ -320,7 +320,7 @@ 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, 0x080c, 0x804c, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, + 0x70be, 0x080c, 0x8074, 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, 0x1883, 0x7000, @@ -384,15 +384,15 @@ 0x008e, 0x00de, 0x009e, 0x080c, 0x112b, 0x0005, 0x00de, 0x009e, 0x080c, 0x112b, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6983, 0xa09f, + 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x698a, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x1054, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 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, 0x110c, 0x00e8, 0xa97c, 0xa894, - 0x0016, 0x0006, 0x080c, 0x6983, 0x000e, 0x001e, 0xd1fc, 0x1138, - 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9bcc, 0x00ce, 0x7008, + 0x0016, 0x0006, 0x080c, 0x698a, 0x000e, 0x001e, 0xd1fc, 0x1138, + 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9be7, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x1054, 0x7007, 0x0000, 0x080c, 0x112b, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, @@ -411,9 +411,9 @@ 0x190c, 0x0d5e, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000, 0x0540, 0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086, 0x0004, 0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103, 0x080c, - 0x67a5, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, 0xba3e, - 0xb8c0, 0x9005, 0x190c, 0x6394, 0x00be, 0x6044, 0xd0fc, 0x190c, - 0x98d6, 0x080c, 0x9bf4, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005, + 0x67ac, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, 0xba3e, + 0xb8c0, 0x9005, 0x190c, 0x639b, 0x00be, 0x6044, 0xd0fc, 0x190c, + 0x98f1, 0x080c, 0x9c0f, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005, 0x908a, 0x0024, 0x1a0c, 0x0d65, 0x002b, 0x012e, 0x0005, 0x04b0, 0x012e, 0x0005, 0x138e, 0x13b4, 0x13e4, 0x13e9, 0x13ed, 0x13f2, 0x141a, 0x141e, 0x142c, 0x1430, 0x138e, 0x14ba, 0x14be, 0x1521, @@ -421,25 +421,25 @@ 0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x13f4, 0x138e, 0x13bc, 0x13e1, 0x13a8, 0x138e, 0x13c8, 0x1392, 0x1390, 0x080c, 0x0d65, 0x080c, 0x0d5e, 0x080c, 0x1528, 0x2009, 0x1a49, 0x2104, 0x8000, - 0x200a, 0x080c, 0x7b17, 0x080c, 0x195f, 0x0005, 0x6044, 0xd0fc, - 0x190c, 0x98d6, 0x2009, 0x0055, 0x080c, 0x9c6a, 0x012e, 0x0005, - 0x080c, 0x1528, 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x2009, - 0x0055, 0x080c, 0x9c6a, 0x0005, 0x2009, 0x0048, 0x080c, 0x1528, - 0x2060, 0x080c, 0x9c6a, 0x0005, 0x2009, 0x0054, 0x080c, 0x1528, - 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x080c, 0x9c6a, 0x0005, + 0x200a, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005, 0x6044, 0xd0fc, + 0x190c, 0x98f1, 0x2009, 0x0055, 0x080c, 0x9c85, 0x012e, 0x0005, + 0x080c, 0x1528, 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x2009, + 0x0055, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0048, 0x080c, 0x1528, + 0x2060, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0054, 0x080c, 0x1528, + 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x080c, 0x9c85, 0x0005, 0x080c, 0x1528, 0x2060, 0x0056, 0x0066, 0x080c, 0x1528, 0x2028, 0x080c, 0x1528, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000, 0x2418, - 0x2009, 0x0056, 0x080c, 0x9c6a, 0x004e, 0x003e, 0x006e, 0x005e, + 0x2009, 0x0056, 0x080c, 0x9c85, 0x004e, 0x003e, 0x006e, 0x005e, 0x0005, 0x080c, 0x1528, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1528, 0x080c, 0x15e5, 0x0005, 0x080c, 0x0d65, 0x080c, 0x1528, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, - 0x9c6a, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, + 0x9c85, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x152d, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1528, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, - 0x0048, 0x080c, 0x9c6a, 0x0005, 0x080c, 0x1528, 0x080c, 0x0d65, + 0x0048, 0x080c, 0x9c85, 0x0005, 0x080c, 0x1528, 0x080c, 0x0d65, 0x080c, 0x1528, 0x080c, 0x14a5, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, @@ -447,13 +447,13 @@ 0xd1bc, 0x090c, 0x0d65, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x14be, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d65, 0x6014, - 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7b17, - 0x080c, 0x195f, 0x080c, 0xb82c, 0x0158, 0xa9ac, 0xa936, 0xa9b0, + 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7b22, + 0x080c, 0x195f, 0x080c, 0xb847, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, - 0x190c, 0xbc28, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, - 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd5b1, 0xd5a4, 0x1118, - 0x080c, 0x152d, 0x0005, 0x080c, 0x7b17, 0x080c, 0x195f, 0x0005, + 0x190c, 0xbc43, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, + 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd5d3, 0xd5a4, 0x1118, + 0x080c, 0x152d, 0x0005, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x159e, 0x00fe, 0x007e, 0x006e, @@ -470,7 +470,7 @@ 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, - 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x9c6a, 0x0005, + 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x9c85, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14a5, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1528, @@ -478,7 +478,7 @@ 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x1590, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005, - 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7b17, 0x080c, + 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, @@ -499,9 +499,9 @@ 0x1644, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x1644, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x1644, 0x9c06, 0x15f0, 0x0126, 0x2091, - 0x2600, 0x080c, 0x7a6f, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, + 0x2600, 0x080c, 0x7a7a, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x190c, 0xbc03, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4, + 0x190c, 0xbc1e, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x1d17, 0x1190, 0x080c, 0x17f2, 0x2a00, 0xa816, 0x0130, 0x2800, @@ -596,7 +596,7 @@ 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, 0x9c6a, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, + 0x0048, 0x0804, 0x9c85, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x132a, @@ -607,17 +607,17 @@ 0x19fb, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e8, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, - 0x70ac, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, + 0x70b7, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, - 0x0081, 0x2001, 0x0386, 0x2003, 0x2020, 0x080c, 0x714d, 0x0005, + 0x0081, 0x2001, 0x0386, 0x2003, 0x2020, 0x080c, 0x7158, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2825, 0x2009, 0x003c, 0x080c, 0x2052, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, - 0x003c, 0x1de0, 0x080c, 0x804c, 0x70a0, 0x70a2, 0x7098, 0x709a, + 0x003c, 0x1de0, 0x080c, 0x8074, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, - 0x2003, 0x0000, 0x080c, 0x70ac, 0x1108, 0x0005, 0x2021, 0x0260, + 0x2003, 0x0000, 0x080c, 0x70b7, 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, @@ -693,12 +693,12 @@ 0x080c, 0x0d65, 0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c, 0x9c06, 0x190c, 0x0d65, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, - 0xb82c, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, + 0xb847, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, 0x1170, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c, - 0x2060, 0x00c6, 0x080c, 0xb437, 0x080c, 0x98ad, 0x00ce, 0x704c, - 0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x949d, - 0x2011, 0x0000, 0x080c, 0x9328, 0x002e, 0x00ce, 0x009e, 0x00ee, + 0x2060, 0x00c6, 0x080c, 0xb452, 0x080c, 0x98c8, 0x00ce, 0x704c, + 0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x94b8, + 0x2011, 0x0000, 0x080c, 0x9343, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x2019, 0x1000, 0x8319, 0x090c, 0x0d65, 0x7820, 0xd0bc, @@ -708,11 +708,11 @@ 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0904, 0x1cc8, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, - 0x080c, 0xd5fa, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65, + 0x080c, 0xd61c, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x09a8, - 0x080c, 0x98c9, 0x782c, 0xd0fc, 0x1de8, 0x080c, 0x98ad, 0x7054, + 0x080c, 0x98e4, 0x782c, 0xd0fc, 0x1de8, 0x080c, 0x98c8, 0x7054, 0x9086, 0x0000, 0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x080c, 0x0d65, 0x8c60, 0x2c05, 0x9005, @@ -797,17 +797,17 @@ 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x204f, 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, - 0x0002, 0x1f71, 0x1f69, 0x7a6f, 0x1f69, 0x1f6b, 0x1f6b, 0x1f6b, - 0x1f6b, 0x7a55, 0x1f69, 0x1f6d, 0x1f69, 0x1f6b, 0x1f69, 0x1f6b, - 0x1f69, 0x080c, 0x0d65, 0x0031, 0x0020, 0x080c, 0x7a55, 0x080c, - 0x7a6f, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xd5fa, 0x7930, - 0x9184, 0x0003, 0x01f0, 0x080c, 0x98ad, 0x2001, 0x19cb, 0x2004, + 0x0002, 0x1f71, 0x1f69, 0x7a7a, 0x1f69, 0x1f6b, 0x1f6b, 0x1f6b, + 0x1f6b, 0x7a60, 0x1f69, 0x1f6d, 0x1f69, 0x1f6b, 0x1f69, 0x1f6b, + 0x1f69, 0x080c, 0x0d65, 0x0031, 0x0020, 0x080c, 0x7a60, 0x080c, + 0x7a7a, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xd61c, 0x7930, + 0x9184, 0x0003, 0x01f0, 0x080c, 0x98c8, 0x2001, 0x19cb, 0x2004, 0x9005, 0x0180, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65, - 0x00c6, 0x2001, 0x19cb, 0x2064, 0x080c, 0x98c9, 0x080c, 0xb437, - 0x00ce, 0x0408, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x98c9, + 0x00c6, 0x2001, 0x19cb, 0x2064, 0x080c, 0x98e4, 0x080c, 0xb452, + 0x00ce, 0x0408, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x98e4, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, - 0x080c, 0x70ac, 0x1138, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x080c, - 0x6fdd, 0x0010, 0x080c, 0x5b90, 0x080c, 0x7b0d, 0x0041, 0x0018, + 0x080c, 0x70b7, 0x1138, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, + 0x6fe8, 0x0010, 0x080c, 0x5b97, 0x080c, 0x7b18, 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, @@ -852,90 +852,90 @@ 0x0007, 0x0002, 0x2105, 0x2102, 0x2102, 0x2102, 0x2104, 0x2102, 0x2102, 0x2102, 0x080c, 0x0d65, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, - 0x1904, 0x2364, 0xd1f4, 0x190c, 0x0d5e, 0x080c, 0x70ac, 0x0904, - 0x2162, 0x080c, 0xbf46, 0x1120, 0x7000, 0x9086, 0x0003, 0x0580, - 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x70cf, 0x0118, 0x080c, - 0x70bd, 0x1530, 0x2011, 0x0020, 0x080c, 0x286d, 0x6043, 0x0000, - 0x080c, 0xbf46, 0x0168, 0x080c, 0x70cf, 0x1150, 0x2001, 0x1978, - 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6f22, 0x0804, 0x2367, + 0x1904, 0x2364, 0xd1f4, 0x190c, 0x0d5e, 0x080c, 0x70b7, 0x0904, + 0x2162, 0x080c, 0xbf61, 0x1120, 0x7000, 0x9086, 0x0003, 0x0580, + 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x70da, 0x0118, 0x080c, + 0x70c8, 0x1530, 0x2011, 0x0020, 0x080c, 0x286d, 0x6043, 0x0000, + 0x080c, 0xbf61, 0x0168, 0x080c, 0x70da, 0x1150, 0x2001, 0x1978, + 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6f2d, 0x0804, 0x2367, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140, - 0x080c, 0x7103, 0x00de, 0x1904, 0x2367, 0x080c, 0x73b6, 0x0428, - 0x080c, 0x70cf, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, - 0x080c, 0x73b6, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x080c, 0x6fdd, + 0x080c, 0x710e, 0x00de, 0x1904, 0x2367, 0x080c, 0x73c1, 0x0428, + 0x080c, 0x70da, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, + 0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x0804, 0x2364, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028, - 0x1110, 0x080c, 0x728f, 0x0804, 0x2364, 0x080c, 0x73b1, 0x0048, - 0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x71ed, 0x0804, - 0x2364, 0x080c, 0x7331, 0x0804, 0x2364, 0xd1ac, 0x0904, 0x227e, - 0x080c, 0x70ac, 0x11d0, 0x2011, 0x0020, 0x080c, 0x286d, 0x0006, - 0x0026, 0x0036, 0x080c, 0x70c6, 0x1158, 0x080c, 0x73ac, 0x080c, - 0x5cd5, 0x080c, 0x6fdd, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, - 0x003e, 0x002e, 0x000e, 0x080c, 0x7080, 0x0016, 0x0046, 0x00c6, + 0x1110, 0x080c, 0x729a, 0x0804, 0x2364, 0x080c, 0x73bc, 0x0048, + 0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x71f8, 0x0804, + 0x2364, 0x080c, 0x733c, 0x0804, 0x2364, 0xd1ac, 0x0904, 0x227e, + 0x080c, 0x70b7, 0x11d0, 0x2011, 0x0020, 0x080c, 0x286d, 0x0006, + 0x0026, 0x0036, 0x080c, 0x70d1, 0x1158, 0x080c, 0x73b7, 0x080c, + 0x5cdc, 0x080c, 0x6fe8, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, + 0x003e, 0x002e, 0x000e, 0x080c, 0x708b, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085, - 0x7046, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x48d1, 0x003e, - 0x080c, 0xbf3f, 0x1904, 0x2255, 0x9196, 0xff00, 0x05a8, 0x705c, + 0x7046, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x48d8, 0x003e, + 0x080c, 0xbf5a, 0x1904, 0x2255, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, - 0xd184, 0x1550, 0x080c, 0x317f, 0x0128, 0xc18d, 0x7132, 0x080c, - 0x6658, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, + 0xd184, 0x1550, 0x080c, 0x3186, 0x0128, 0xc18d, 0x7132, 0x080c, + 0x665f, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2255, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, - 0x48d1, 0x003e, 0x0804, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001, + 0x48d8, 0x003e, 0x0804, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2255, 0xc1ad, 0x2102, 0x0036, - 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d1, 0x003e, 0x7130, 0xc185, + 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d8, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001, - 0x2011, 0x0100, 0x080c, 0x83c3, 0x2019, 0x000e, 0x00c6, 0x2061, - 0x0000, 0x080c, 0xd1c9, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3184, + 0x2011, 0x0100, 0x080c, 0x83eb, 0x2019, 0x000e, 0x00c6, 0x2061, + 0x0000, 0x080c, 0xd1eb, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, - 0x080c, 0xd251, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, - 0x2019, 0x0004, 0x080c, 0x2fc2, 0x001e, 0x0078, 0x0156, 0x00b6, - 0x20a9, 0x007f, 0x900e, 0x080c, 0x6269, 0x1110, 0x080c, 0x5cef, + 0x080c, 0xd273, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, + 0x2019, 0x0004, 0x080c, 0x2fc5, 0x001e, 0x0078, 0x0156, 0x00b6, + 0x20a9, 0x007f, 0x900e, 0x080c, 0x6270, 0x1110, 0x080c, 0x5cf6, 0x8108, 0x1f04, 0x224b, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, - 0x98ad, 0x080c, 0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x001e, + 0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825, 0x2003, 0x0000, 0x2011, 0x0020, 0x080c, 0x286d, 0xd194, 0x0904, - 0x2364, 0x0016, 0x080c, 0x98ad, 0x6220, 0xd2b4, 0x0904, 0x230c, - 0x080c, 0x81e3, 0x080c, 0x8f9c, 0x2011, 0x0004, 0x080c, 0x286d, + 0x2364, 0x0016, 0x080c, 0x98c8, 0x6220, 0xd2b4, 0x0904, 0x230c, + 0x080c, 0x820b, 0x080c, 0x8fb7, 0x2011, 0x0004, 0x080c, 0x286d, 0x00f6, 0x2019, 0x19c4, 0x2304, 0x907d, 0x0904, 0x22d9, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2843, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x27fa, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, - 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x080c, 0x884c, - 0x080c, 0x98c9, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, - 0x9bcc, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, + 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x080c, 0x8874, + 0x080c, 0x98e4, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, + 0x9be7, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061, 0x19b8, 0x6034, - 0x080c, 0xbf46, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, - 0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x8f74, 0x0804, - 0x2361, 0x2061, 0x0100, 0x62c0, 0x080c, 0x97e3, 0x2019, 0x19c4, + 0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, + 0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x8f8f, 0x0804, + 0x2361, 0x2061, 0x0100, 0x62c0, 0x080c, 0x97fe, 0x2019, 0x19c4, 0x2304, 0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, - 0x9c6a, 0x00ce, 0x0804, 0x2361, 0xd2bc, 0x05e0, 0x080c, 0x81f0, + 0x9c85, 0x00ce, 0x0804, 0x2361, 0xd2bc, 0x05e0, 0x080c, 0x8218, 0x2011, 0x0004, 0x080c, 0x286d, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061, - 0x19b8, 0x6050, 0x080c, 0xbf46, 0x0120, 0x909a, 0x0003, 0x1638, + 0x19b8, 0x6050, 0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1638, 0x0018, 0x909a, 0x00c8, 0x1618, 0x8000, 0x6052, 0x604c, 0x00ce, - 0x9005, 0x0578, 0x2009, 0x07d0, 0x080c, 0x81e8, 0x9080, 0x0008, + 0x9005, 0x0578, 0x2009, 0x07d0, 0x080c, 0x8210, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x287c, 0x00f0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x287c, 0x00b8, 0x2011, 0x0004, 0x080c, 0x286d, 0x0090, 0x0036, - 0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x2019, 0x19cb, 0x2304, - 0x9065, 0x0130, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0x9c6a, - 0x00ce, 0x080c, 0x98c9, 0x001e, 0xd19c, 0x0904, 0x23c2, 0x7038, + 0x2019, 0x0001, 0x080c, 0x9286, 0x003e, 0x2019, 0x19cb, 0x2304, + 0x9065, 0x0130, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0x9c85, + 0x00ce, 0x080c, 0x98e4, 0x001e, 0xd19c, 0x0904, 0x23c2, 0x7038, 0xd0ac, 0x1538, 0x0016, 0x0156, 0x2011, 0x0008, 0x080c, 0x286d, 0x6050, 0xc0e5, 0x6052, 0x20a9, 0x0367, 0x1f04, 0x238f, 0x1d04, - 0x2377, 0x080c, 0x8217, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079, + 0x2377, 0x080c, 0x823f, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079, 0x0100, 0x080c, 0x27aa, 0x00fe, 0x1d80, 0x6050, 0xc0e4, 0x6052, 0x2011, 0x0008, 0x080c, 0x286d, 0x015e, 0x001e, 0x0498, 0x015e, - 0x001e, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98ad, 0x080c, - 0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9, 0x080c, - 0xd5f4, 0x080c, 0x538a, 0xd0fc, 0x1138, 0x080c, 0xbf3f, 0x1120, - 0x9085, 0x0001, 0x080c, 0x70f3, 0x9006, 0x080c, 0x2833, 0x2009, + 0x001e, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x080c, + 0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c, + 0xd616, 0x080c, 0x5391, 0xd0fc, 0x1138, 0x080c, 0xbf5a, 0x1120, + 0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2009, 0x0002, 0x080c, 0x281f, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0e9c, 0x00ee, 0x2011, 0x0008, 0x080c, 0x286d, 0x080c, 0x0bab, 0x001e, 0x918c, 0xffd0, 0x2110, 0x080c, 0x286d, 0x00ae, @@ -943,34 +943,34 @@ 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904, 0x241c, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x281f, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, - 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48d1, 0x0468, 0x2001, + 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48d8, 0x0468, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, - 0x48d1, 0x080c, 0x0e9c, 0x080c, 0x538a, 0xd0fc, 0x11a8, 0x080c, - 0xbf3f, 0x1190, 0x00c6, 0x080c, 0x24b8, 0x080c, 0x98ad, 0x080c, - 0x91c6, 0x080c, 0x98c9, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, - 0x0002, 0x080c, 0x2fc2, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, + 0x48d8, 0x080c, 0x0e9c, 0x080c, 0x5391, 0xd0fc, 0x11a8, 0x080c, + 0xbf5a, 0x1190, 0x00c6, 0x080c, 0x24b8, 0x080c, 0x98c8, 0x080c, + 0x91e1, 0x080c, 0x98e4, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, + 0x0002, 0x080c, 0x2fc5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, - 0x1120, 0x2500, 0x080c, 0x7d48, 0x0048, 0x9584, 0x00ff, 0x9080, - 0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, - 0x3184, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, + 0x1120, 0x2500, 0x080c, 0x7d70, 0x0048, 0x9584, 0x00ff, 0x9080, + 0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, + 0x318b, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x2468, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, - 0x9184, 0x000f, 0x9080, 0xd608, 0x2005, 0x6856, 0x8211, 0x1f04, + 0x9184, 0x000f, 0x9080, 0xd62a, 0x2005, 0x6856, 0x8211, 0x1f04, 0x247d, 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, 0x24ad, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, - 0x080c, 0x5386, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, - 0x2020, 0x2009, 0x002e, 0x080c, 0xd251, 0x004e, 0x0005, 0x00f6, + 0x080c, 0x538d, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, + 0x2020, 0x2009, 0x002e, 0x080c, 0xd273, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2524, 0x080c, 0x279a, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, @@ -979,9 +979,9 @@ 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, 0x83f1, 0x928c, 0xff00, 0x0110, + 0x9080, 0x0020, 0x2018, 0x080c, 0x8419, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, - 0x0138, 0x220a, 0x080c, 0x70ac, 0x1118, 0x2009, 0x193e, 0x220a, + 0x0138, 0x220a, 0x080c, 0x70b7, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d5e, 0x002e, @@ -997,17 +997,17 @@ 0x25f1, 0x25f3, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x27e4, 0x2001, 0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003, - 0x0006, 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x81f5, 0x0005, + 0x0006, 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005, 0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001, 0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001, 0x9006, 0x080c, 0x2751, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, - 0x25f4, 0x080c, 0x81f5, 0x0005, 0x080c, 0x0d65, 0x2001, 0x196b, + 0x25f4, 0x080c, 0x821d, 0x0005, 0x080c, 0x0d65, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2751, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003, 0x0006, - 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x81f5, 0x0005, 0x080c, + 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005, 0x080c, 0x0d65, 0x080c, 0x0d65, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1963, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d65, 0x0043, 0x012e, @@ -1069,24 +1069,24 @@ 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x27d6, - 0x080c, 0x8217, 0x1f04, 0x27d6, 0x7850, 0x9085, 0x1000, 0x7852, + 0x080c, 0x823f, 0x1f04, 0x27d6, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x28d4, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1100, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x27f1, 0x00fe, 0x015e, - 0x000e, 0x0005, 0x1d04, 0x27fa, 0x080c, 0x8217, 0x1f04, 0x27fa, + 0x000e, 0x0005, 0x1d04, 0x27fa, 0x080c, 0x823f, 0x1f04, 0x27fa, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1979, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, - 0xa001, 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x70c6, 0x0108, + 0xa001, 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x70d1, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, - 0x0140, 0x2104, 0x1128, 0x080c, 0x70c6, 0x0110, 0xc0bc, 0x0008, + 0x0140, 0x2104, 0x1128, 0x080c, 0x70d1, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202, 0x7843, 0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, @@ -1193,2654 +1193,2659 @@ 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2, + 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x1f20, 0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006, + 0x080c, 0x1f20, 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, - 0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, + 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x132a, 0x080c, 0x1f4a, + 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x20e6, + 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x9913, + 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, - 0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, + 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, - 0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, + 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, + 0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, + 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x1f4a, + 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, + 0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, + 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x132a, + 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, + 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, - 0x080c, 0x9913, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x04d8, 0x0106, + 0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x04d8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x2527, 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, + 0x2527, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x132a, - 0x080c, 0x9913, 0x080c, 0x1f4a, 0x00a8, 0x0106, 0x0006, 0x0126, + 0x080c, 0x992e, 0x080c, 0x1f4a, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, - 0x1f20, 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, + 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, - 0x080c, 0x661e, 0x1904, 0x2ede, 0x72d8, 0x2001, 0x194d, 0x2004, + 0x080c, 0x6625, 0x1904, 0x2ee1, 0x72d8, 0x2001, 0x194d, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, - 0x2ede, 0x080c, 0x2ee3, 0x0804, 0x2ede, 0xd2cc, 0x1904, 0x2ede, - 0x080c, 0x70ac, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ede, 0xd294, - 0x0120, 0x70ab, 0xffff, 0x0804, 0x2ede, 0x080c, 0x317a, 0x0160, - 0x080c, 0xbf46, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e70, - 0x70ab, 0xffff, 0x0804, 0x2ede, 0x2001, 0x1817, 0x203c, 0x7290, - 0xd284, 0x0904, 0x2e70, 0xd28c, 0x1904, 0x2e70, 0x0036, 0x73a8, + 0x2ee1, 0x080c, 0x2ee6, 0x0804, 0x2ee1, 0xd2cc, 0x1904, 0x2ee1, + 0x080c, 0x70b7, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0xd294, + 0x0120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0x080c, 0x3181, 0x0160, + 0x080c, 0xbf61, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e73, + 0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2001, 0x1817, 0x203c, 0x7290, + 0xd284, 0x0904, 0x2e73, 0xd28c, 0x1904, 0x2e73, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, - 0x9084, 0x00ff, 0x970e, 0x0590, 0x908e, 0x0000, 0x0578, 0x908e, - 0x00ff, 0x1150, 0x7230, 0xd284, 0x1570, 0x7290, 0xc28d, 0x7292, - 0x70ab, 0xffff, 0x003e, 0x0460, 0x0026, 0x2011, 0x0010, 0x080c, - 0x6684, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00f8, 0x900e, 0x080c, - 0x2424, 0x080c, 0x6209, 0x11a8, 0x080c, 0x6660, 0x1150, 0x7030, - 0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x2efc, 0x0148, - 0x0028, 0x080c, 0x3050, 0x080c, 0x2f28, 0x0118, 0x8318, 0x0804, - 0x2e25, 0x73aa, 0x0010, 0x70ab, 0xffff, 0x003e, 0x0804, 0x2ede, - 0x9780, 0x3184, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, - 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, - 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70ab, 0xffff, 0x0804, - 0x2ede, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x2ed3, 0x0026, - 0x2011, 0x0010, 0x080c, 0x6684, 0x002e, 0x0120, 0x2009, 0xffff, - 0x0804, 0x2edb, 0xc484, 0x080c, 0x6269, 0x0138, 0x080c, 0xbf46, - 0x1590, 0x080c, 0x6209, 0x15b8, 0x0008, 0xc485, 0x080c, 0x6660, - 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7290, - 0xd28c, 0x0180, 0x080c, 0x6660, 0x9082, 0x0006, 0x02e0, 0xd484, - 0x1118, 0x080c, 0x622d, 0x0028, 0x080c, 0x30e8, 0x01a0, 0x080c, - 0x3113, 0x0088, 0x080c, 0x3050, 0x080c, 0xbf46, 0x1160, 0x080c, - 0x2f28, 0x0188, 0x0040, 0x080c, 0xbf46, 0x1118, 0x080c, 0x30e8, - 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2e89, - 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, 0x71aa, 0x004e, 0x002e, - 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70ab, 0x0001, 0x2009, - 0x007e, 0x080c, 0x6209, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, - 0x080c, 0x3050, 0x04a9, 0x0128, 0x70d8, 0xc0bd, 0x70da, 0x080c, - 0xbc93, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, - 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9c3d, - 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x9006, - 0x080c, 0x61a6, 0x2001, 0x0000, 0x080c, 0x61ba, 0x0126, 0x2091, - 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0004, 0x080c, - 0x9c6a, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, - 0x00ff, 0xb842, 0x080c, 0x9c3d, 0x0548, 0x2b00, 0x6012, 0xb800, - 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x3003, 0x080c, 0xbcc0, - 0x6023, 0x0001, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, - 0x61ba, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, - 0x2009, 0x0002, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x00ce, 0x00de, - 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, - 0x080c, 0x6209, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, - 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, - 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9b76, 0x01d0, 0x2b00, 0x6012, - 0x080c, 0xbcc0, 0x6023, 0x0001, 0x9006, 0x080c, 0x61a6, 0x2001, - 0x0002, 0x080c, 0x61ba, 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, - 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, 0x9c6a, 0x9085, 0x0001, - 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x6209, 0x11b8, 0xb813, - 0x00ff, 0xb817, 0xfffd, 0xb8c7, 0x0004, 0x080c, 0x9b76, 0x0170, - 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xbcc0, - 0x2009, 0x0022, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00de, - 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, - 0x21f0, 0x9036, 0x080c, 0x98ad, 0x1110, 0x2031, 0x0001, 0x0066, - 0x080c, 0x861e, 0x080c, 0x859e, 0x080c, 0x9803, 0x080c, 0xab2b, - 0x006e, 0x86ff, 0x0110, 0x080c, 0x98c9, 0x3e08, 0x2130, 0x81ff, - 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x080c, 0x6269, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, - 0xd0bc, 0x1110, 0x080c, 0x5cef, 0x001e, 0x8108, 0x1f04, 0x2fe8, - 0x9686, 0x0001, 0x190c, 0x314e, 0x00be, 0x002e, 0x003e, 0x006e, - 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, - 0x00b6, 0x9016, 0x080c, 0x98ad, 0x1110, 0x2011, 0x0001, 0x0026, - 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8613, - 0x0076, 0x2039, 0x0000, 0x080c, 0x8502, 0x2c08, 0x080c, 0xcfa6, - 0x007e, 0x001e, 0x002e, 0x82ff, 0x0110, 0x080c, 0x98c9, 0xba10, - 0xbb14, 0x080c, 0x5cef, 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e, - 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, - 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, - 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, - 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, - 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, - 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, 0x98ad, + 0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e, + 0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292, + 0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c, + 0x668b, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c, + 0x2424, 0x080c, 0x6210, 0x11c0, 0x080c, 0x6667, 0x1168, 0x7030, + 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x655f, 0x0120, + 0x080c, 0x2eff, 0x0148, 0x0028, 0x080c, 0x3057, 0x080c, 0x2f2b, + 0x0118, 0x8318, 0x0804, 0x2e25, 0x73aa, 0x0010, 0x70ab, 0xffff, + 0x003e, 0x0804, 0x2ee1, 0x9780, 0x318b, 0x203d, 0x97bc, 0xff00, + 0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, + 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, + 0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2700, 0x0156, 0x0016, 0x9106, + 0x0904, 0x2ed6, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, + 0x0120, 0x2009, 0xffff, 0x0804, 0x2ede, 0xc484, 0x080c, 0x6270, + 0x0138, 0x080c, 0xbf61, 0x1590, 0x080c, 0x6210, 0x15b8, 0x0008, + 0xc485, 0x080c, 0x6667, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, + 0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6667, 0x9082, + 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6234, 0x0028, 0x080c, + 0x30ef, 0x01a0, 0x080c, 0x311a, 0x0088, 0x080c, 0x3057, 0x080c, + 0xbf61, 0x1160, 0x080c, 0x2f2b, 0x0188, 0x0040, 0x080c, 0xbf61, + 0x1118, 0x080c, 0x30ef, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, + 0x015e, 0x1f04, 0x2e8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, + 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, + 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6210, 0x1168, 0xb813, + 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3057, 0x04a9, 0x0128, 0x70d8, + 0xc0bd, 0x70da, 0x080c, 0xbcae, 0x001e, 0x00ce, 0x0005, 0x0016, + 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, + 0xb842, 0x080c, 0x9c58, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb, + 0x6023, 0x0001, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0000, 0x080c, + 0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, + 0x2009, 0x0004, 0x080c, 0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de, + 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, + 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9c58, 0x0548, + 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, + 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, + 0x3006, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006, 0x080c, 0x61ad, + 0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4, + 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9c85, 0x9085, + 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, + 0x0026, 0x2009, 0x0080, 0x080c, 0x6210, 0x1140, 0xb813, 0x00ff, + 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, + 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9b91, + 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006, + 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091, + 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, + 0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, + 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, + 0x6210, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8c7, 0x0004, + 0x080c, 0x9b91, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, + 0x620a, 0x080c, 0xbcdb, 0x2009, 0x0022, 0x080c, 0x9c85, 0x9085, + 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, + 0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0x98c8, 0x1110, + 0x2031, 0x0001, 0x0066, 0x080c, 0x8646, 0x080c, 0x85c6, 0x080c, + 0x981e, 0x080c, 0xab46, 0x006e, 0x86ff, 0x0110, 0x080c, 0x98e4, + 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, + 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270, 0x1140, 0x9686, + 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5cf6, 0x001e, + 0x8108, 0x1f04, 0x2feb, 0x9686, 0x0001, 0x190c, 0x3155, 0x00be, + 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, + 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c, 0x98c8, + 0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x0026, + 0x2019, 0x0029, 0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c, + 0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e, 0x002e, 0x82ff, + 0x0110, 0x080c, 0x98e4, 0xba10, 0xbb14, 0xbc84, 0x080c, 0x5cf6, + 0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e, + 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, + 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4, + 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071, + 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800, + 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, + 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, 0x98c8, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9, 0x0001, - 0x0080, 0x080c, 0x5386, 0xd0c4, 0x0148, 0x0040, 0x9006, 0x0046, - 0x2020, 0x2009, 0x002d, 0x080c, 0xd251, 0x004e, 0x20a9, 0x0800, - 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x30c3, 0x928e, 0x007f, - 0x0904, 0x30c3, 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c, - 0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x195f, 0x0006, 0x2003, - 0x0001, 0x080c, 0x30d5, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, - 0x2158, 0x2001, 0x0001, 0x080c, 0x662a, 0x00ce, 0x00be, 0x2019, - 0x0029, 0x080c, 0x8613, 0x0076, 0x2039, 0x0000, 0x080c, 0x8502, - 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, - 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, - 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, - 0xcfa6, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3079, 0x002e, - 0x82ff, 0x0110, 0x080c, 0x98c9, 0x015e, 0x001e, 0x002e, 0x003e, - 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, - 0x080c, 0x5386, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, - 0x2009, 0x0029, 0x080c, 0xd251, 0x001e, 0x002e, 0x004e, 0x0005, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, - 0x6658, 0x11d0, 0x2100, 0x080c, 0x2457, 0x81ff, 0x01b8, 0x2019, - 0x0001, 0x8314, 0x92e0, 0x1d80, 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, - 0x0066, 0x9036, 0x080c, 0x98ad, 0x1110, 0x2031, 0x0001, 0x0066, - 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, 0x0110, - 0x080c, 0x98c9, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, - 0x0016, 0x00c6, 0x2061, 0x1b02, 0x001e, 0x6112, 0x080c, 0x3003, - 0x001e, 0x080c, 0x622d, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, - 0x0026, 0x2110, 0x080c, 0x94d9, 0x080c, 0xd507, 0x002e, 0x001e, - 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, - 0x080c, 0x70ac, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, - 0x080c, 0x70ac, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, - 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, - 0x090c, 0x622d, 0x8108, 0x1f04, 0x315f, 0x2061, 0x1800, 0x607b, - 0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, - 0x00ce, 0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, - 0x1854, 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, + 0x0070, 0x080c, 0x538d, 0xd0c4, 0x0138, 0x0030, 0x9006, 0x2020, + 0x2009, 0x002d, 0x080c, 0xd273, 0x20a9, 0x0800, 0x9016, 0x0026, + 0x928e, 0x007e, 0x0904, 0x30c9, 0x928e, 0x007f, 0x0904, 0x30c9, + 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8, + 0x8fff, 0x1150, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001, 0x080c, + 0x30dc, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, + 0x0001, 0x080c, 0x6631, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, + 0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x00b6, 0x00c6, + 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, + 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, + 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xcfc8, 0x001e, + 0x007e, 0x002e, 0x8210, 0x1f04, 0x307f, 0x002e, 0x82ff, 0x0110, + 0x080c, 0x98e4, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be, + 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c, + 0x538d, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009, + 0x0029, 0x080c, 0xd273, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x665f, + 0x11d0, 0x2100, 0x080c, 0x2457, 0x81ff, 0x01b8, 0x2019, 0x0001, + 0x8314, 0x92e0, 0x1d80, 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, 0x0066, + 0x9036, 0x080c, 0x98c8, 0x1110, 0x2031, 0x0001, 0x0066, 0x0036, + 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, 0x0110, 0x080c, + 0x98e4, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, + 0x00c6, 0x2061, 0x1b02, 0x001e, 0x6112, 0x080c, 0x3006, 0x001e, + 0x080c, 0x6234, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, + 0x2110, 0x080c, 0x94f4, 0x080c, 0xd529, 0x002e, 0x001e, 0x0005, + 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, + 0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, + 0x70b7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, + 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, + 0x6234, 0x8108, 0x1f04, 0x3166, 0x2061, 0x1800, 0x607b, 0x0000, + 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, + 0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, + 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, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002, - 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, - 0x703b, 0x18b0, 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x103b, - 0x090c, 0x0d65, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, - 0x080c, 0x103b, 0x090c, 0x0d65, 0x2900, 0x706e, 0xa867, 0x0002, - 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x32b3, - 0x32b4, 0x32c7, 0x32db, 0x0005, 0x1004, 0x32c4, 0x0e04, 0x32c4, - 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, - 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, - 0x0000, 0x2061, 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, - 0x9086, 0x0200, 0x0904, 0x33af, 0x0005, 0x7018, 0x2048, 0x2061, - 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, - 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, - 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, - 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, - 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33ac, 0x61cc, 0x0804, - 0x3341, 0x3383, 0x33bb, 0x33c5, 0x33c9, 0x33d3, 0x33d9, 0x33dd, - 0x33ed, 0x33f0, 0x33fa, 0x33ff, 0x3404, 0x340f, 0x341a, 0x3429, - 0x3438, 0x3446, 0x345d, 0x3478, 0x33ac, 0x3521, 0x355f, 0x3604, - 0x3615, 0x3638, 0x33ac, 0x33ac, 0x33ac, 0x3670, 0x3690, 0x3699, - 0x36c5, 0x36cb, 0x33ac, 0x3711, 0x33ac, 0x33ac, 0x33ac, 0x33ac, - 0x33ac, 0x371c, 0x3725, 0x372d, 0x372f, 0x33ac, 0x33ac, 0x33ac, - 0x33ac, 0x33ac, 0x33ac, 0x375f, 0x33ac, 0x33ac, 0x33ac, 0x33ac, - 0x33ac, 0x377c, 0x37d7, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac, - 0x33ac, 0x0002, 0x3801, 0x3804, 0x3863, 0x387c, 0x38ac, 0x3b4e, - 0x33ac, 0x4f57, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac, - 0x33ac, 0x33ac, 0x33fa, 0x33ff, 0x404d, 0x53aa, 0x4063, 0x4fe6, - 0x5037, 0x513a, 0x33ac, 0x519c, 0x51d8, 0x5209, 0x5315, 0x5236, - 0x5295, 0x33ac, 0x4067, 0x41f7, 0x420d, 0x4232, 0x4297, 0x430b, - 0x432b, 0x43a2, 0x43fe, 0x445a, 0x445d, 0x4482, 0x44f5, 0x455f, - 0x4567, 0x4699, 0x47fb, 0x482f, 0x4a79, 0x33ac, 0x4a97, 0x4b5a, - 0x4c30, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x4c96, 0x4cb1, 0x4567, - 0x4ef7, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x48ad, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x338d, 0x0010, 0x012e, 0x0cc0, 0x7c36, - 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, - 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000, - 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, - 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, - 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, - 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48ba, 0x7883, 0x0004, 0x7884, - 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, - 0x7990, 0x0804, 0x48bd, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, - 0x3383, 0x7984, 0x2114, 0x0804, 0x3383, 0x20e1, 0x0000, 0x2099, - 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, - 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3383, 0x7884, 0x2060, 0x04d8, - 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a, 0x789b, 0x0317, - 0x0804, 0x3383, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, - 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, - 0x0804, 0x33b8, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x33bf, 0x79a0, - 0x9182, 0x0040, 0x0210, 0x0804, 0x33b8, 0x2138, 0x7d98, 0x7c9c, - 0x0804, 0x33cd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33b8, - 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, - 0x3383, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, - 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3383, 0x0804, 0x33b2, - 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33b8, 0x21e0, 0x20a9, - 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3383, 0x2069, 0x1853, - 0x7884, 0x7990, 0x911a, 0x1a04, 0x33b8, 0x8019, 0x0904, 0x33b8, - 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, - 0x685e, 0x080c, 0x73dd, 0x0804, 0x3383, 0x2069, 0x1853, 0x7884, - 0x7994, 0x911a, 0x1a04, 0x33b8, 0x8019, 0x0904, 0x33b8, 0x684e, - 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6762, 0x012e, 0x0804, 0x3383, - 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, - 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, - 0x189c, 0x4101, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, - 0x33b5, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, - 0x48ba, 0x701f, 0x349c, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, - 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, - 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x33b5, - 0x810f, 0x918c, 0x00ff, 0x0904, 0x33b5, 0x7112, 0x7010, 0x8001, - 0x0560, 0x7012, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, - 0x33b5, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, - 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, - 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48ba, 0x701f, - 0x34da, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, - 0x9096, 0x000a, 0x1904, 0x33b5, 0x0888, 0x7014, 0x2048, 0xa868, - 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, - 0xc2fd, 0xaa7a, 0x080c, 0x5ddd, 0x0150, 0x0126, 0x2091, 0x8000, - 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x60f4, 0x1128, 0x7007, - 0x0003, 0x701f, 0x3506, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, - 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, - 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, - 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, - 0x48bd, 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, 0x19f3, 0x2004, 0x9005, 0x0128, - 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, - 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, - 0x1904, 0x33b5, 0x7984, 0x080c, 0x6269, 0x1904, 0x33b8, 0x7e98, - 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x33b8, 0x7c88, 0x7d8c, - 0x080c, 0x649b, 0x080c, 0x642c, 0x1518, 0x2061, 0x1ddc, 0x0126, - 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, - 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, - 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33b5, - 0x0c30, 0x080c, 0xb437, 0x012e, 0x0904, 0x33b5, 0x0804, 0x3383, - 0x900e, 0x2001, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000, - 0x080c, 0xbb30, 0x080c, 0x698f, 0x012e, 0x0804, 0x3383, 0x00a6, - 0x2950, 0xb198, 0x080c, 0x6269, 0x1904, 0x35f1, 0xb6a4, 0x9684, - 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x649b, - 0x080c, 0x6446, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000, - 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, - 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, - 0x080c, 0xb437, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, - 0x2001, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000, 0x080c, - 0xbb30, 0x080c, 0x6983, 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, 0x33b5, 0x080c, - 0x4888, 0x0904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x080c, - 0x64a1, 0x0904, 0x33b5, 0x0804, 0x4322, 0x81ff, 0x1904, 0x33b5, - 0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c, 0x652f, 0x0904, 0x33b5, - 0x2019, 0x0005, 0x79a8, 0x080c, 0x64bc, 0x0904, 0x33b5, 0x7888, - 0x908a, 0x1000, 0x1a04, 0x33b8, 0x8003, 0x800b, 0x810b, 0x9108, - 0x080c, 0x813f, 0x7984, 0xd184, 0x1904, 0x3383, 0x0804, 0x4322, - 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, - 0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, - 0x6269, 0x11d8, 0x080c, 0x652f, 0x1128, 0x2009, 0x0002, 0x62bc, - 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x64bc, 0x1118, - 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, - 0x800b, 0x810b, 0x9108, 0x080c, 0x813f, 0x8529, 0x1ae0, 0x012e, - 0x0804, 0x3383, 0x012e, 0x0804, 0x33b5, 0x012e, 0x0804, 0x33b8, - 0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, - 0x080c, 0x98ad, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, - 0x8613, 0x0076, 0x903e, 0x080c, 0x8502, 0x900e, 0x080c, 0xcfa6, - 0x007e, 0x00ce, 0x080c, 0x98c9, 0x080c, 0x649b, 0x0804, 0x3383, - 0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x649b, 0x2208, 0x0804, - 0x3383, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1906, 0x6810, - 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071, - 0x19b8, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300, - 0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3383, 0x00f6, - 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, - 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, - 0x62b8, 0x0804, 0x3383, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x33b5, 0x0126, 0x2091, 0x8000, 0x080c, 0x539a, 0x0128, 0x2009, - 0x0007, 0x012e, 0x0804, 0x33b5, 0x012e, 0x6158, 0x9190, 0x3184, - 0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, - 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, - 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, - 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, - 0x080c, 0x70ac, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, - 0x2009, 0x0005, 0x0804, 0x33b5, 0x9036, 0x7e9a, 0x7f9e, 0x0804, - 0x3383, 0x6148, 0x624c, 0x2019, 0x1957, 0x231c, 0x2001, 0x1958, - 0x2004, 0x789a, 0x0804, 0x3383, 0x0126, 0x2091, 0x8000, 0x6138, - 0x623c, 0x6340, 0x012e, 0x0804, 0x3383, 0x080c, 0x48a4, 0x0904, - 0x33b8, 0xba44, 0xbb38, 0x0804, 0x3383, 0x080c, 0x0d65, 0x080c, - 0x48a4, 0x2110, 0x0904, 0x33b8, 0xb804, 0x908c, 0x00ff, 0x918e, - 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, - 0x1904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, - 0x9066, 0x080c, 0x98ad, 0x080c, 0x94d9, 0x080c, 0x8613, 0x0076, - 0x903e, 0x080c, 0x8502, 0x900e, 0x080c, 0xcfa6, 0x007e, 0x00ce, - 0x080c, 0x98c9, 0xb807, 0x0407, 0x012e, 0x0804, 0x3383, 0x6148, - 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f, - 0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98, - 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04, - 0x266a, 0x789a, 0x0804, 0x3383, 0x0126, 0x2091, 0x8000, 0x6138, - 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eb4, 0xd0c4, 0x01a8, - 0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f, - 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, - 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, - 0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010, - 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, - 0x190c, 0x0ecf, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, - 0x2012, 0x012e, 0x0804, 0x3383, 0x00f6, 0x2079, 0x1800, 0x7a38, - 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, - 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, - 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, - 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x33b8, 0x788c, 0x902d, - 0x0904, 0x33b8, 0x900e, 0x080c, 0x6269, 0x1120, 0xba44, 0xbb38, - 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, - 0x48a4, 0x0904, 0x33b8, 0x7888, 0x900d, 0x0904, 0x33b8, 0x788c, - 0x9005, 0x0904, 0x33b8, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, - 0x3383, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x539a, - 0x1904, 0x33b5, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, - 0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, - 0x007f, 0x16e0, 0x9188, 0x3184, 0x210d, 0x918c, 0x00ff, 0x2001, - 0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, - 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9b76, 0x000e, 0x0510, - 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x620f, 0x2b08, 0x00be, - 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4871, 0x01d0, 0x9006, - 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, - 0x385c, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9c6a, 0x012e, - 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x33b5, 0x00ce, 0x0804, - 0x33b8, 0x080c, 0x9bcc, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, - 0x33b5, 0x0804, 0x3383, 0x2061, 0x1a3f, 0x0126, 0x2091, 0x8000, - 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, - 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, - 0x3383, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x33b5, 0x080c, - 0x70ac, 0x0904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, - 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x248d, 0x080c, 0x55b4, - 0x012e, 0x0804, 0x3383, 0x012e, 0x0804, 0x33b8, 0x0006, 0x0016, - 0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008, - 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x83f1, 0x7206, 0x00ee, - 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, - 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3385, 0x7884, 0xd0fc, - 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, - 0x0804, 0x33b8, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908, - 0x9102, 0x1230, 0x012e, 0x0804, 0x33b8, 0x012e, 0x0804, 0x33b5, - 0x080c, 0x9b4b, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3927, 0x00c6, - 0x080c, 0x4871, 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, 0x3ab1, 0x0928, - 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, - 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, - 0x48ba, 0x701f, 0x39ee, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c, - 0x98ad, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x080c, 0x3896, 0x2001, 0x1970, 0x2003, 0x0000, - 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, - 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b20, 0x080c, 0x3adf, - 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, - 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, - 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, - 0x0001, 0x080c, 0x3e91, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dbe, - 0x080c, 0x3ceb, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, - 0x1db8, 0x080c, 0x3f05, 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, 0x181f, 0x2004, - 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, - 0x00ce, 0x0138, 0x080c, 0x3cf5, 0x080c, 0x3ada, 0x0058, 0x080c, - 0x3ada, 0x080c, 0x3e29, 0x080c, 0x3db4, 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, 0x12d6, 0x2009, 0x0028, - 0x080c, 0x2052, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0x98c9, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, - 0x004e, 0x2001, 0x1970, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, - 0x3383, 0x012e, 0x2021, 0x400c, 0x0804, 0x3385, 0x0016, 0x0026, - 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, - 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, - 0x0904, 0x3a4a, 0x2048, 0x1f04, 0x39fe, 0x7068, 0x2040, 0xa28c, - 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, - 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, - 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48ba, 0x701f, 0x39ee, - 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, - 0x080c, 0x0f9f, 0x000e, 0x080c, 0x48bd, 0x701f, 0x39ee, 0x015e, - 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, - 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, - 0x701f, 0x3aaf, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, - 0x2009, 0x007f, 0x080c, 0x6209, 0x0110, 0x9006, 0x0030, 0xb813, - 0x00ff, 0xb817, 0xfffd, 0x080c, 0xbd0f, 0x015e, 0x00de, 0x009e, - 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, - 0x33b5, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, - 0x0096, 0x00d6, 0x0156, 0x701f, 0x3a81, 0x7007, 0x0003, 0x0804, - 0x3a3f, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3385, - 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, + 0x8000, 0x8000, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006, + 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, + 0x18b0, 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x103b, 0x090c, + 0x0d65, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, + 0x103b, 0x090c, 0x0d65, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, + 0xdcb0, 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x32ba, 0x32bb, + 0x32ce, 0x32e2, 0x0005, 0x1004, 0x32cb, 0x0e04, 0x32cb, 0x2079, + 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, + 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, + 0x2061, 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, + 0x0200, 0x0904, 0x33b6, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, + 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, + 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, + 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, + 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, + 0x2100, 0x908a, 0x003f, 0x1a04, 0x33b3, 0x61cc, 0x0804, 0x3348, + 0x338a, 0x33c2, 0x33cc, 0x33d0, 0x33da, 0x33e0, 0x33e4, 0x33f4, + 0x33f7, 0x3401, 0x3406, 0x340b, 0x3416, 0x3421, 0x3430, 0x343f, + 0x344d, 0x3464, 0x347f, 0x33b3, 0x3528, 0x3566, 0x360b, 0x361c, + 0x363f, 0x33b3, 0x33b3, 0x33b3, 0x3677, 0x3697, 0x36a0, 0x36cc, + 0x36d2, 0x33b3, 0x3718, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, + 0x3723, 0x372c, 0x3734, 0x3736, 0x33b3, 0x33b3, 0x33b3, 0x33b3, + 0x33b3, 0x33b3, 0x3766, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, + 0x3783, 0x37de, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, + 0x0002, 0x3808, 0x380b, 0x386a, 0x3883, 0x38b3, 0x3b55, 0x33b3, + 0x4f5e, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, + 0x33b3, 0x3401, 0x3406, 0x4054, 0x53b1, 0x406a, 0x4fed, 0x503e, + 0x5141, 0x33b3, 0x51a3, 0x51df, 0x5210, 0x531c, 0x523d, 0x529c, + 0x33b3, 0x406e, 0x41fe, 0x4214, 0x4239, 0x429e, 0x4312, 0x4332, + 0x43a9, 0x4405, 0x4461, 0x4464, 0x4489, 0x44fc, 0x4566, 0x456e, + 0x46a0, 0x4802, 0x4836, 0x4a80, 0x33b3, 0x4a9e, 0x4b61, 0x4c37, + 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x4c9d, 0x4cb8, 0x456e, 0x4efe, + 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x48b4, 0x0126, 0x2091, + 0x8000, 0x0e04, 0x3394, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, + 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, + 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, + 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, + 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, + 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, + 0x7884, 0x7990, 0x0804, 0x48c1, 0x7883, 0x0004, 0x7884, 0x0807, + 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, + 0x0804, 0x48c4, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x338a, + 0x7984, 0x2114, 0x0804, 0x338a, 0x20e1, 0x0000, 0x2099, 0x0021, + 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, + 0x7a88, 0x7b8c, 0x0804, 0x338a, 0x7884, 0x2060, 0x04d8, 0x2009, + 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0317, 0x0804, + 0x338a, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, + 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, + 0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x33c6, 0x79a0, 0x9182, + 0x0040, 0x0210, 0x0804, 0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804, + 0x33d4, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e8, + 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x338a, + 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, + 0x1dd8, 0x2010, 0x9005, 0x0904, 0x338a, 0x0804, 0x33b9, 0x79a0, + 0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e0, 0x20a9, 0x0001, + 0x7984, 0x2198, 0x4012, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884, + 0x7990, 0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684a, + 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, + 0x080c, 0x73e8, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884, 0x7994, + 0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684e, 0x6946, + 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6769, 0x012e, 0x0804, 0x338a, 0x902e, + 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x7984, + 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, + 0x4101, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, + 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1, + 0x701f, 0x34a3, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, + 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, + 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x33bc, 0x810f, + 0x918c, 0x00ff, 0x0904, 0x33bc, 0x7112, 0x7010, 0x8001, 0x0560, + 0x7012, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, + 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, + 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, + 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1, 0x701f, 0x34e1, + 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, + 0x000a, 0x1904, 0x33bc, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, + 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, + 0xaa7a, 0x080c, 0x5de4, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, + 0xa982, 0x012e, 0x0050, 0x080c, 0x60fb, 0x1128, 0x7007, 0x0003, + 0x701f, 0x350d, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, + 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100, + 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, + 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x48c4, + 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, 0x19f3, 0x2004, 0x9005, 0x0128, 0x2001, + 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, + 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, + 0x33bc, 0x7984, 0x080c, 0x6270, 0x1904, 0x33bf, 0x7e98, 0x9684, + 0x3fff, 0x9082, 0x4000, 0x1a04, 0x33bf, 0x7c88, 0x7d8c, 0x080c, + 0x64a2, 0x080c, 0x6433, 0x1518, 0x2061, 0x1ddc, 0x0126, 0x2091, + 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, + 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, + 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33bc, 0x0c30, + 0x080c, 0xb452, 0x012e, 0x0904, 0x33bc, 0x0804, 0x338a, 0x900e, + 0x2001, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c, + 0xbb4b, 0x080c, 0x6996, 0x012e, 0x0804, 0x338a, 0x00a6, 0x2950, + 0xb198, 0x080c, 0x6270, 0x1904, 0x35f8, 0xb6a4, 0x9684, 0x3fff, + 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x64a2, 0x080c, + 0x644d, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000, 0x6000, + 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, + 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c, 0x2001, + 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, + 0xb452, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, + 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c, 0xbb4b, + 0x080c, 0x698a, 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, 0x33bc, 0x080c, 0x488f, + 0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8, + 0x0904, 0x33bc, 0x0804, 0x4329, 0x81ff, 0x1904, 0x33bc, 0x080c, + 0x48ab, 0x0904, 0x33bf, 0x080c, 0x6536, 0x0904, 0x33bc, 0x2019, + 0x0005, 0x79a8, 0x080c, 0x64c3, 0x0904, 0x33bc, 0x7888, 0x908a, + 0x1000, 0x1a04, 0x33bf, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, + 0x8167, 0x7984, 0xd184, 0x1904, 0x338a, 0x0804, 0x4329, 0x0126, + 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, + 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x6270, + 0x11d8, 0x080c, 0x6536, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, + 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x1118, 0x2009, + 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, + 0x810b, 0x9108, 0x080c, 0x8167, 0x8529, 0x1ae0, 0x012e, 0x0804, + 0x338a, 0x012e, 0x0804, 0x33bc, 0x012e, 0x0804, 0x33bf, 0x080c, + 0x488f, 0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, + 0x98c8, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x863b, + 0x0076, 0x903e, 0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e, + 0x00ce, 0x080c, 0x98e4, 0x080c, 0x64a2, 0x0804, 0x338a, 0x080c, + 0x488f, 0x0904, 0x33bf, 0x080c, 0x64a2, 0x2208, 0x0804, 0x338a, + 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1906, 0x6810, 0x6914, + 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071, 0x19b8, + 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300, 0x9218, + 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x338a, 0x00f6, 0x0016, + 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, + 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, + 0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, + 0x0126, 0x2091, 0x8000, 0x080c, 0x53a1, 0x0128, 0x2009, 0x0007, + 0x012e, 0x0804, 0x33bc, 0x012e, 0x6158, 0x9190, 0x318b, 0x2215, + 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, + 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, + 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, + 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, + 0x70b7, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, + 0x0005, 0x0804, 0x33bc, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x338a, + 0x6148, 0x624c, 0x2019, 0x1957, 0x231c, 0x2001, 0x1958, 0x2004, + 0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, + 0x6340, 0x012e, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf, + 0xba44, 0xbb38, 0x0804, 0x338a, 0x080c, 0x0d65, 0x080c, 0x48ab, + 0x2110, 0x0904, 0x33bf, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, + 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, + 0x33bc, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, + 0x080c, 0x98c8, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e, + 0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e, 0x00ce, 0x080c, + 0x98e4, 0xb807, 0x0407, 0x012e, 0x0804, 0x338a, 0x6148, 0x624c, + 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f, 0x9305, + 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98, 0x9682, + 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04, 0x266a, + 0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, + 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eb4, 0xd0c4, 0x01a8, 0x00d6, + 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f, 0x2012, + 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, + 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, 0x0116, + 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010, 0x918c, + 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, 0x190c, + 0x0ecf, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, + 0x012e, 0x0804, 0x338a, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898, + 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, + 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, + 0x01a8, 0x7888, 0x9025, 0x0904, 0x33bf, 0x788c, 0x902d, 0x0904, + 0x33bf, 0x900e, 0x080c, 0x6270, 0x1120, 0xba44, 0xbb38, 0xbc46, + 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x48ab, + 0x0904, 0x33bf, 0x7888, 0x900d, 0x0904, 0x33bf, 0x788c, 0x9005, + 0x0904, 0x33bf, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x338a, + 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x53a1, 0x1904, + 0x33bc, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, + 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, + 0x16e0, 0x9188, 0x318b, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817, + 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, + 0x2091, 0x8000, 0x0006, 0x080c, 0x9b91, 0x000e, 0x0510, 0x602e, + 0x620a, 0x7984, 0x00b6, 0x080c, 0x6216, 0x2b08, 0x00be, 0x1500, + 0x6112, 0x6023, 0x0001, 0x080c, 0x4878, 0x01d0, 0x9006, 0xa866, + 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, 0x3863, + 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9c85, 0x012e, 0x00ce, + 0x0005, 0x012e, 0x00ce, 0x0804, 0x33bc, 0x00ce, 0x0804, 0x33bf, + 0x080c, 0x9be7, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33bc, + 0x0804, 0x338a, 0x2061, 0x1a3f, 0x0126, 0x2091, 0x8000, 0x6000, + 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070, + 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x338a, + 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7, + 0x0904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202, + 0x0248, 0x9085, 0x0001, 0x080c, 0x248d, 0x080c, 0x55bb, 0x012e, + 0x0804, 0x338a, 0x012e, 0x0804, 0x33bf, 0x0006, 0x0016, 0x00c6, + 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008, 0x2072, + 0x900e, 0x2011, 0x1400, 0x080c, 0x8419, 0x7206, 0x00ee, 0x00ce, + 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, + 0x012e, 0x2021, 0x400b, 0x0804, 0x338c, 0x7884, 0xd0fc, 0x0148, + 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, 0x0804, + 0x33bf, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908, 0x9102, + 0x1230, 0x012e, 0x0804, 0x33bf, 0x012e, 0x0804, 0x33bc, 0x080c, + 0x9b66, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x392e, 0x00c6, 0x080c, + 0x4878, 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, 0x3ab8, 0x0928, 0x7014, + 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, - 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f9f, 0x000e, 0x080c, - 0x48bd, 0x007e, 0x701f, 0x39ee, 0x7023, 0x0001, 0x0005, 0x0804, - 0x3383, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, - 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, - 0x4871, 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, 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, - 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, - 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, - 0x6106, 0x080c, 0x4871, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, - 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, - 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, - 0x6036, 0x2009, 0x0040, 0x080c, 0x2052, 0x2001, 0x002a, 0x2004, - 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, - 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0x00e6, 0x080c, 0x4871, 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, 0x2811, 0x1130, 0x9006, 0x080c, - 0x276e, 0x9006, 0x080c, 0x2751, 0x7884, 0x9084, 0x0007, 0x0002, - 0x3b6b, 0x3b74, 0x3b7d, 0x3b68, 0x3b68, 0x3b68, 0x3b68, 0x3b68, - 0x012e, 0x0804, 0x33b8, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, - 0x200a, 0x080c, 0x3d3f, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, - 0x4000, 0x200a, 0x080c, 0x3d3f, 0x0078, 0x080c, 0x70ac, 0x1128, - 0x012e, 0x2009, 0x0016, 0x0804, 0x33b5, 0x81ff, 0x0128, 0x012e, - 0x2021, 0x400b, 0x0804, 0x3385, 0x080c, 0x98ad, 0x0086, 0x0096, - 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3896, - 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, - 0x2060, 0x2058, 0x080c, 0x3fe0, 0x080c, 0x3f30, 0x903e, 0x2720, - 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, - 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, - 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3e91, 0x080c, - 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, - 0x3e91, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dbe, 0x2009, 0x9c40, - 0x8109, 0x11b0, 0x080c, 0x3cf5, 0x2001, 0x0004, 0x200c, 0x918c, - 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, - 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x33b5, 0x0cf8, - 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, - 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, - 0x81ff, 0x0150, 0x080c, 0x3d9c, 0x2d00, 0x9c05, 0x9b05, 0x0120, - 0x080c, 0x3cf5, 0x0804, 0x3c9e, 0x080c, 0x3f05, 0x080c, 0x3e29, - 0x080c, 0x3d7f, 0x080c, 0x3db4, 0x00f6, 0x2079, 0x0100, 0x7824, - 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3cf5, 0x00fe, 0x0804, 0x3c9e, - 0x00fe, 0x080c, 0x3ceb, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, - 0x2001, 0x0033, 0x2502, 0x080c, 0x3cf5, 0x0080, 0x87ff, 0x0138, - 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, - 0x1a3c, 0x2004, 0x9086, 0x0000, 0x1904, 0x3bee, 0x2001, 0x032f, - 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, - 0x3c9e, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, - 0x3c9e, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, - 0xd0ac, 0x1148, 0x2001, 0x1a3c, 0x2003, 0x0003, 0x2001, 0x032a, - 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, - 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2052, 0x2900, - 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, - 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, - 0x0203, 0x2004, 0x1f04, 0x3c75, 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, 0x3ba8, 0x001e, 0x00c6, - 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, - 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, - 0x918c, 0xfffd, 0x2102, 0x080c, 0x12d6, 0x7884, 0x9084, 0x0003, - 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2052, 0x2001, - 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x28d4, - 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, - 0x0010, 0x080c, 0x98c9, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, - 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, - 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3383, 0x012e, 0x2021, - 0x400c, 0x0804, 0x3385, 0x9085, 0x0001, 0x1d04, 0x3cf4, 0x2091, - 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, - 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a3c, 0x2003, - 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x2052, 0x2001, 0x0227, - 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, - 0x00f6, 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0520, - 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, - 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, - 0x0d88, 0x080c, 0x3f05, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b, - 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052, - 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, - 0x246d, 0x080c, 0x2890, 0x080c, 0x28d4, 0x784b, 0xf7f7, 0x7843, - 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8, - 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852, - 0x2011, 0x0048, 0x080c, 0x286d, 0x7843, 0x0040, 0x2019, 0x01f4, - 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2833, - 0x2011, 0x0020, 0x080c, 0x286d, 0x7843, 0x0000, 0x9006, 0x080c, - 0x2833, 0x2011, 0x0048, 0x080c, 0x286d, 0x00fe, 0x0005, 0x7884, - 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 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, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3ad0, 0x1188, - 0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, - 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, - 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 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, 0x0092, 0x7016, 0x080c, 0x3f05, 0x00f6, 0x2071, 0x1a3c, - 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, - 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, - 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, - 0x080c, 0x3e91, 0x2011, 0x0001, 0x080c, 0x3e91, 0x00fe, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x792c, - 0xd1fc, 0x0904, 0x3e8e, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, - 0x3e8a, 0x7000, 0x0002, 0x3e8e, 0x3e3f, 0x3e6f, 0x3e8a, 0xd1bc, - 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, - 0x3e91, 0x0904, 0x3e8e, 0x080c, 0x3e91, 0x0804, 0x3e8e, 0x00f6, - 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, - 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, - 0x080c, 0x3d9c, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, - 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, - 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e33, - 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, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, - 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, - 0x938a, 0x0007, 0x1a0c, 0x0d65, 0x9398, 0x3ebf, 0x231d, 0x083f, - 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, - 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, - 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3efc, - 0x3ef3, 0x3eea, 0x3ee1, 0x3ed8, 0x3ecf, 0x3ec6, 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, - 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, - 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, - 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, - 0x2071, 0x19b8, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, - 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x3f2c, 0x3f18, 0x3f23, - 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e91, - 0x190c, 0x3e91, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, 0x1d38, - 0x2011, 0x0001, 0x080c, 0x3e91, 0x008e, 0x00ee, 0x00fe, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, - 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, - 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, - 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, - 0x4871, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, - 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, - 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3fa8, - 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4871, 0xa813, 0x0019, - 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, - 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, - 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, - 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, - 0x080c, 0x2052, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, - 0x0006, 0x2001, 0x002b, 0x2004, 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, 0x4871, 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, 0x4871, 0x2940, - 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, - 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, - 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3fa8, 0x1d68, - 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4871, 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, 0x1a3c, 0x2003, - 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1, + 0x701f, 0x39f5, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c, 0x98c8, + 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, + 0x00f6, 0x080c, 0x389d, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021, + 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, + 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b27, 0x080c, 0x3ae6, 0x00f6, + 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6, + 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, + 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, + 0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x080c, + 0x3cf2, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, + 0x080c, 0x3f0c, 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, 0x181f, 0x2004, 0x9106, + 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, + 0x0138, 0x080c, 0x3cfc, 0x080c, 0x3ae1, 0x0058, 0x080c, 0x3ae1, + 0x080c, 0x3e30, 0x080c, 0x3dbb, 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, 0x12d6, 0x2009, 0x0028, 0x080c, + 0x2052, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0x98e4, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, + 0x2001, 0x1970, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x338a, + 0x012e, 0x2021, 0x400c, 0x0804, 0x338c, 0x0016, 0x0026, 0x0036, + 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, + 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, + 0x3a51, 0x2048, 0x1f04, 0x3a05, 0x7068, 0x2040, 0xa28c, 0xa390, + 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, + 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, + 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1, 0x701f, 0x39f5, 0x00b0, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, + 0x0f9f, 0x000e, 0x080c, 0x48c4, 0x701f, 0x39f5, 0x015e, 0x00de, + 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, + 0x3ab6, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, + 0x007f, 0x080c, 0x6210, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, + 0xb817, 0xfffd, 0x080c, 0xbd2a, 0x015e, 0x00de, 0x009e, 0x008e, + 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33bc, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, + 0x00d6, 0x0156, 0x701f, 0x3a88, 0x7007, 0x0003, 0x0804, 0x3a46, + 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x338c, 0x0076, + 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, 0x0f9f, 0x000e, 0x080c, 0x48c4, + 0x007e, 0x701f, 0x39f5, 0x7023, 0x0001, 0x0005, 0x0804, 0x338a, + 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, + 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4878, + 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, 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, + 0x00c6, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, 0x2061, + 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, + 0x080c, 0x4878, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, + 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, + 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, + 0x2009, 0x0040, 0x080c, 0x2052, 0x2001, 0x002a, 0x2004, 0x9084, + 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, + 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, + 0x080c, 0x4878, 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, - 0x20a9, 0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, - 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, - 0x0005, 0x0804, 0x3383, 0x7d98, 0x7c9c, 0x0804, 0x347a, 0x080c, - 0x70ac, 0x190c, 0x5c9a, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48ba, - 0x701f, 0x407b, 0x0005, 0x080c, 0x5395, 0x1130, 0x3b00, 0x3a08, - 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, - 0x0904, 0x33b8, 0x6804, 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, 0x33b8, - 0x9288, 0x3184, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, - 0x6828, 0x908a, 0x007f, 0x1a04, 0x33b8, 0x605a, 0x6888, 0x9084, - 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, - 0x9080, 0x2560, 0x2005, 0x200a, 0x2008, 0x2001, 0x0018, 0x080c, - 0x989e, 0x2009, 0x0390, 0x200b, 0x0400, 0x000e, 0x2009, 0x1983, - 0x9080, 0x2564, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, - 0x33b8, 0x908a, 0x0841, 0x1a04, 0x33b8, 0x9084, 0x0007, 0x1904, - 0x33b8, 0x680c, 0x9005, 0x0904, 0x33b8, 0x6810, 0x9005, 0x0904, - 0x33b8, 0x6848, 0x6940, 0x910a, 0x1a04, 0x33b8, 0x8001, 0x0904, - 0x33b8, 0x684c, 0x6944, 0x910a, 0x1a04, 0x33b8, 0x8001, 0x0904, - 0x33b8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, - 0x604e, 0x080c, 0x73dd, 0x080c, 0x672d, 0x080c, 0x6762, 0x6808, - 0x602a, 0x080c, 0x1fc4, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, - 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x24c7, 0x003e, - 0x6000, 0x9086, 0x0000, 0x1904, 0x41e7, 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, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, - 0x20a1, 0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x82a8, 0x00c6, - 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, - 0x12b0, 0x3508, 0x8109, 0x080c, 0x79b3, 0x6878, 0x6016, 0x6874, - 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, - 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, - 0x415f, 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, - 0x080c, 0x276e, 0x9006, 0x080c, 0x2751, 0x0000, 0x00ce, 0x00e6, - 0x2c70, 0x080c, 0x0e9c, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, - 0x0114, 0x2204, 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, - 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, - 0x2001, 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, - 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, - 0x080c, 0x253c, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, - 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, - 0x70ac, 0x0128, 0x080c, 0x4c8a, 0x0110, 0x080c, 0x248d, 0x60d0, - 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x41cf, 0x00d0, 0x080c, - 0x70ac, 0x1168, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011, 0x6f15, - 0x080c, 0x8237, 0x080c, 0x73b1, 0x080c, 0x6fdd, 0x0040, 0x080c, - 0x5b90, 0x0028, 0x6003, 0x0004, 0x2009, 0x41e7, 0x0010, 0x0804, - 0x3383, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, - 0x1118, 0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, - 0x9086, 0x0000, 0x0904, 0x33b5, 0x2069, 0x1853, 0x7890, 0x6842, - 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x2039, 0x0001, 0x0804, 0x48bd, 0x9006, 0x080c, 0x248d, - 0x81ff, 0x1904, 0x33b5, 0x080c, 0x70ac, 0x11b0, 0x080c, 0x73ac, - 0x080c, 0x5cd5, 0x080c, 0x317f, 0x0118, 0x6130, 0xc18d, 0x6132, - 0x080c, 0xbf46, 0x0130, 0x080c, 0x70cf, 0x1118, 0x080c, 0x7080, - 0x0038, 0x080c, 0x6fdd, 0x0020, 0x080c, 0x5c9a, 0x080c, 0x5b90, - 0x0804, 0x3383, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x70ac, 0x1110, - 0x0804, 0x33b5, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, - 0x1d80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, - 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x48bd, 0x701f, 0x3381, - 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, - 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, - 0x6558, 0x9588, 0x3184, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, - 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6269, 0x1190, - 0xb814, 0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, - 0x201a, 0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, - 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, - 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, - 0x1d80, 0x2099, 0x1d80, 0x080c, 0x5c25, 0x0804, 0x423f, 0x080c, - 0x48a4, 0x0904, 0x33b8, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, - 0x0804, 0x33b5, 0x080c, 0x5386, 0xd0b4, 0x0558, 0x7884, 0x908e, - 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, - 0x080c, 0x317a, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xb9fb, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, - 0x7007, 0x0003, 0x701f, 0x42cd, 0x0005, 0x080c, 0x48a4, 0x0904, - 0x33b8, 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, 0x0f9f, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, - 0x000a, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f9f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x0804, 0x48bd, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x4888, - 0x0904, 0x33b8, 0x080c, 0x64aa, 0x0904, 0x33b5, 0x0058, 0xa878, - 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x33b5, 0xa974, 0xaa94, - 0x0804, 0x3383, 0x080c, 0x538e, 0x0904, 0x3383, 0x701f, 0x4317, - 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x7888, 0x908a, - 0x1000, 0x1a04, 0x33b8, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c, - 0x6660, 0x0120, 0x080c, 0x6668, 0x1904, 0x33b8, 0x080c, 0x652f, - 0x0904, 0x33b5, 0x2019, 0x0004, 0x900e, 0x080c, 0x64bc, 0x0904, - 0x33b5, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, - 0x12f8, 0x080c, 0x48a2, 0x01e0, 0x080c, 0x6660, 0x0118, 0x080c, - 0x6668, 0x11b0, 0x080c, 0x652f, 0x2009, 0x0002, 0x0168, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x64bc, 0x2009, 0x0003, 0x0120, - 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, - 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, - 0xa897, 0x4000, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, - 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, - 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, - 0x6269, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, - 0x813f, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x798c, 0x2001, 0x1951, - 0x918c, 0x8000, 0x2102, 0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, - 0x6660, 0x0120, 0x080c, 0x6668, 0x1904, 0x33b8, 0x080c, 0x6330, - 0x0904, 0x33b5, 0x080c, 0x64b3, 0x0904, 0x33b5, 0x2001, 0x1951, - 0x2004, 0xd0fc, 0x1904, 0x3383, 0x0804, 0x4322, 0xa9a0, 0x2001, - 0x1951, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4895, 0x01a0, - 0x080c, 0x6660, 0x0118, 0x080c, 0x6668, 0x1170, 0x080c, 0x6330, - 0x2009, 0x0002, 0x0128, 0x080c, 0x64b3, 0x1170, 0x2009, 0x0003, - 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, - 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, - 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, - 0x33b5, 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, - 0x4888, 0x0904, 0x33b8, 0x080c, 0x6660, 0x0120, 0x080c, 0x6668, - 0x1904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x080c, 0x64a1, - 0x0904, 0x33b5, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3383, - 0x0804, 0x4322, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, - 0x2102, 0x080c, 0x4895, 0x01a0, 0x080c, 0x6660, 0x0118, 0x080c, - 0x6668, 0x1170, 0x080c, 0x6330, 0x2009, 0x0002, 0x0128, 0x080c, - 0x64a1, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, - 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, - 0xa897, 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, - 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, - 0x0000, 0x0005, 0x6100, 0x0804, 0x3383, 0x080c, 0x48a4, 0x0904, - 0x33b8, 0x080c, 0x539a, 0x1904, 0x33b5, 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, 0x3383, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, - 0x0003, 0x1a04, 0x33b5, 0x6258, 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, 0x48bd, 0x000e, 0x2031, - 0x0000, 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, - 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, - 0x701f, 0x44db, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x48a4, - 0x0904, 0x33b8, 0x080c, 0x6660, 0x1904, 0x33b5, 0x00c6, 0x080c, - 0x4871, 0x00ce, 0x0904, 0x33b5, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x7ea8, 0x080c, 0xb9a1, 0x0904, 0x33b5, 0x7007, 0x0003, - 0x701f, 0x44df, 0x0005, 0x080c, 0x404d, 0x0804, 0x3383, 0xa830, - 0x9086, 0x0100, 0x0904, 0x33b5, 0x8906, 0x8006, 0x8007, 0x90bc, - 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48bd, 0x9006, 0x080c, 0x248d, - 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, - 0x33b5, 0x080c, 0x70ac, 0x0110, 0x080c, 0x5c9a, 0x7888, 0x908a, - 0x1000, 0x1a04, 0x33b8, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, - 0x007f, 0x1a04, 0x33b8, 0x2100, 0x080c, 0x2457, 0x0026, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x2061, 0x19d4, 0x601b, 0x0000, 0x601f, - 0x0000, 0x6073, 0x0000, 0x6077, 0x0000, 0x080c, 0x70ac, 0x1158, - 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c, 0x70f3, - 0x080c, 0x6fdd, 0x00f0, 0x080c, 0x98ad, 0x080c, 0x9b52, 0x080c, - 0x98c9, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, - 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, - 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc0, 0x080c, - 0x81f5, 0x7984, 0x080c, 0x70ac, 0x1110, 0x2009, 0x00ff, 0x7a88, - 0x080c, 0x4385, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3383, 0x7984, - 0x080c, 0x6209, 0x2b08, 0x1904, 0x33b8, 0x0804, 0x3383, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, 0x60d8, 0xd0ac, 0x1130, - 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33b5, 0x080c, 0x4871, - 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7984, 0x9192, 0x0021, - 0x1a04, 0x33b8, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, - 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48ba, 0x701f, 0x4597, - 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e3c, 0x0005, 0x2009, - 0x0080, 0x080c, 0x6269, 0x1118, 0x080c, 0x6660, 0x0120, 0x2021, - 0x400a, 0x0804, 0x3385, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, - 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4630, - 0x90be, 0x0112, 0x0904, 0x4630, 0x90be, 0x0113, 0x0904, 0x4630, - 0x90be, 0x0114, 0x0904, 0x4630, 0x90be, 0x0117, 0x0904, 0x4630, - 0x90be, 0x011a, 0x0904, 0x4630, 0x90be, 0x011c, 0x0904, 0x4630, - 0x90be, 0x0121, 0x0904, 0x4617, 0x90be, 0x0131, 0x0904, 0x4617, - 0x90be, 0x0171, 0x0904, 0x4630, 0x90be, 0x0173, 0x0904, 0x4630, - 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x463b, - 0x90be, 0x0212, 0x0904, 0x4624, 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, 0x33b8, 0x7028, 0x9080, - 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, - 0x080c, 0x4679, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, - 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4679, 0x00c8, 0x7028, + 0x81ff, 0x0148, 0x080c, 0x2811, 0x1130, 0x9006, 0x080c, 0x276e, + 0x9006, 0x080c, 0x2751, 0x7884, 0x9084, 0x0007, 0x0002, 0x3b72, + 0x3b7b, 0x3b84, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x012e, + 0x0804, 0x33bf, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, + 0x080c, 0x3d46, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, + 0x200a, 0x080c, 0x3d46, 0x0078, 0x080c, 0x70b7, 0x1128, 0x012e, + 0x2009, 0x0016, 0x0804, 0x33bc, 0x81ff, 0x0128, 0x012e, 0x2021, + 0x400b, 0x0804, 0x338c, 0x080c, 0x98c8, 0x0086, 0x0096, 0x00a6, + 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x389d, 0x2009, + 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, + 0x2058, 0x080c, 0x3fe7, 0x080c, 0x3f37, 0x903e, 0x2720, 0x00f6, + 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6, + 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, + 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3e98, 0x080c, 0x2819, + 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x3e98, + 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x2009, 0x9c40, 0x8109, + 0x11b0, 0x080c, 0x3cfc, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, + 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, + 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x33bc, 0x0cf8, 0x2001, + 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, + 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, + 0x0150, 0x080c, 0x3da3, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, + 0x3cfc, 0x0804, 0x3ca5, 0x080c, 0x3f0c, 0x080c, 0x3e30, 0x080c, + 0x3d86, 0x080c, 0x3dbb, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, + 0x0130, 0x8b58, 0x080c, 0x3cfc, 0x00fe, 0x0804, 0x3ca5, 0x00fe, + 0x080c, 0x3cf2, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, + 0x0033, 0x2502, 0x080c, 0x3cfc, 0x0080, 0x87ff, 0x0138, 0x2001, + 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a3c, + 0x2004, 0x9086, 0x0000, 0x1904, 0x3bf5, 0x2001, 0x032f, 0x2003, + 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3ca5, + 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3ca5, + 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, + 0x1148, 0x2001, 0x1a3c, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, + 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, + 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2052, 0x2900, 0xa85a, + 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, + 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, + 0x2004, 0x1f04, 0x3c7c, 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, 0x3baf, 0x001e, 0x00c6, 0x2001, + 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, + 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, + 0xfffd, 0x2102, 0x080c, 0x12d6, 0x7884, 0x9084, 0x0003, 0x9086, + 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2052, 0x2001, 0x0227, + 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x28d4, 0x6052, + 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010, + 0x080c, 0x98e4, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, + 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, + 0x008e, 0x1118, 0x012e, 0x0804, 0x338a, 0x012e, 0x2021, 0x400c, + 0x0804, 0x338c, 0x9085, 0x0001, 0x1d04, 0x3cfb, 0x2091, 0x6000, + 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, + 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a3c, 0x2003, 0x0000, + 0x0071, 0x2009, 0x0048, 0x080c, 0x2052, 0x2001, 0x0227, 0x2024, + 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, + 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0520, 0x2079, + 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, + 0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x0d88, + 0x080c, 0x3f0c, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, + 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052, 0x782b, + 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, + 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x246d, + 0x080c, 0x2890, 0x080c, 0x28d4, 0x784b, 0xf7f7, 0x7843, 0x0090, + 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8, 0x7820, + 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852, 0x2011, + 0x0048, 0x080c, 0x286d, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, + 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2833, 0x2011, + 0x0020, 0x080c, 0x286d, 0x7843, 0x0000, 0x9006, 0x080c, 0x2833, + 0x2011, 0x0048, 0x080c, 0x286d, 0x00fe, 0x0005, 0x7884, 0xd0ac, + 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 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, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3ad7, 0x1188, 0x2001, + 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, + 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, + 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 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, + 0x0092, 0x7016, 0x080c, 0x3f0c, 0x00f6, 0x2071, 0x1a3c, 0x2079, + 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, + 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, + 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, + 0x3e98, 0x2011, 0x0001, 0x080c, 0x3e98, 0x00fe, 0x00ee, 0x0005, + 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x792c, 0xd1fc, + 0x0904, 0x3e95, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e91, + 0x7000, 0x0002, 0x3e95, 0x3e46, 0x3e76, 0x3e91, 0xd1bc, 0x1170, + 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e98, + 0x0904, 0x3e95, 0x080c, 0x3e98, 0x0804, 0x3e95, 0x00f6, 0x2079, + 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, + 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, + 0x3da3, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, + 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, + 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e3a, 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, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, + 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, + 0x0007, 0x1a0c, 0x0d65, 0x9398, 0x3ec6, 0x231d, 0x083f, 0x9080, + 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, + 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, + 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3f03, 0x3efa, + 0x3ef1, 0x3ee8, 0x3edf, 0x3ed6, 0x3ecd, 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, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, + 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, + 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, + 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, + 0x19b8, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, + 0x2940, 0x9026, 0x7054, 0x0002, 0x3f33, 0x3f1f, 0x3f2a, 0x8001, + 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e98, 0x190c, + 0x3e98, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, 0x1d38, 0x2011, + 0x0001, 0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, + 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, + 0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, + 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, + 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4878, + 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, + 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, + 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68, + 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4878, 0xa813, 0x0019, 0xa817, + 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, + 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, + 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, + 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, + 0x2052, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, + 0x2001, 0x002b, 0x2004, 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, + 0x4878, 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, 0x4878, 0x2940, 0xa813, + 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, + 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, + 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68, 0x2900, + 0xa85a, 0x00d8, 0x080c, 0x4878, 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, 0x1a3c, 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, + 0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, + 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, + 0x0804, 0x338a, 0x7d98, 0x7c9c, 0x0804, 0x3481, 0x080c, 0x70b7, + 0x190c, 0x5ca1, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c1, 0x701f, + 0x4082, 0x0005, 0x080c, 0x539c, 0x1130, 0x3b00, 0x3a08, 0xc194, + 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904, + 0x33bf, 0x6804, 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, 0x33bf, 0x9288, + 0x318b, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, + 0x908a, 0x007f, 0x1a04, 0x33bf, 0x605a, 0x6888, 0x9084, 0x0030, + 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080, + 0x2560, 0x2005, 0x200a, 0x2008, 0x2001, 0x0018, 0x080c, 0x98b9, + 0x2009, 0x0390, 0x200b, 0x0400, 0x000e, 0x2009, 0x1983, 0x9080, + 0x2564, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x33bf, + 0x908a, 0x0841, 0x1a04, 0x33bf, 0x9084, 0x0007, 0x1904, 0x33bf, + 0x680c, 0x9005, 0x0904, 0x33bf, 0x6810, 0x9005, 0x0904, 0x33bf, + 0x6848, 0x6940, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf, + 0x684c, 0x6944, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf, + 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, + 0x080c, 0x73e8, 0x080c, 0x6734, 0x080c, 0x6769, 0x6808, 0x602a, + 0x080c, 0x1fc4, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, + 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x24c7, 0x003e, 0x6000, + 0x9086, 0x0000, 0x1904, 0x41ee, 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, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, + 0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x82d0, 0x00c6, 0x900e, + 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0, + 0x3508, 0x8109, 0x080c, 0x79be, 0x6878, 0x6016, 0x6874, 0x2008, + 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, + 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4166, + 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c, + 0x276e, 0x9006, 0x080c, 0x2751, 0x0000, 0x00ce, 0x00e6, 0x2c70, + 0x080c, 0x0e9c, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, + 0x2204, 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, + 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, + 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, + 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, + 0x253c, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, + 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x70b7, + 0x0128, 0x080c, 0x4c91, 0x0110, 0x080c, 0x248d, 0x60d0, 0x9005, + 0x01c0, 0x6003, 0x0001, 0x2009, 0x41d6, 0x00d0, 0x080c, 0x70b7, + 0x1168, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, + 0x825f, 0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0040, 0x080c, 0x5b97, + 0x0028, 0x6003, 0x0004, 0x2009, 0x41ee, 0x0010, 0x0804, 0x338a, + 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, + 0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086, + 0x0000, 0x0904, 0x33bc, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894, + 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0x2039, 0x0001, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x81ff, + 0x1904, 0x33bc, 0x080c, 0x70b7, 0x11b0, 0x080c, 0x73b7, 0x080c, + 0x5cdc, 0x080c, 0x3186, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, + 0xbf61, 0x0130, 0x080c, 0x70da, 0x1118, 0x080c, 0x708b, 0x0038, + 0x080c, 0x6fe8, 0x0020, 0x080c, 0x5ca1, 0x080c, 0x5b97, 0x0804, + 0x338a, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7, 0x1110, 0x0804, + 0x33bc, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80, + 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, + 0x8000, 0x2039, 0x0001, 0x080c, 0x48c4, 0x701f, 0x3388, 0x012e, + 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040, + 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x6558, + 0x9588, 0x318b, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, + 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6270, 0x1190, 0xb814, + 0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a, + 0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, + 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, + 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80, + 0x2099, 0x1d80, 0x080c, 0x5c2c, 0x0804, 0x4246, 0x080c, 0x48ab, + 0x0904, 0x33bf, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, + 0x33bc, 0x080c, 0x538d, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, + 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, + 0x3181, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, + 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, + 0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, + 0x0003, 0x701f, 0x42d4, 0x0005, 0x080c, 0x48ab, 0x0904, 0x33bf, + 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, 0x0f9f, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, + 0x0f9f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0x0804, 0x48c4, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x488f, 0x0904, + 0x33bf, 0x080c, 0x64b1, 0x0904, 0x33bc, 0x0058, 0xa878, 0x9005, + 0x0120, 0x2009, 0x0004, 0x0804, 0x33bc, 0xa974, 0xaa94, 0x0804, + 0x338a, 0x080c, 0x5395, 0x0904, 0x338a, 0x701f, 0x431e, 0x7007, + 0x0003, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x7888, 0x908a, 0x1000, + 0x1a04, 0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667, + 0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6536, 0x0904, + 0x33bc, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x0904, 0x33bc, + 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, + 0x080c, 0x48a9, 0x01e0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, + 0x11b0, 0x080c, 0x6536, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, + 0x2019, 0x0004, 0x080c, 0x64c3, 0x2009, 0x0003, 0x0120, 0xa998, + 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, + 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, + 0x4000, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, + 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, + 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6270, + 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8167, + 0x0005, 0x81ff, 0x1904, 0x33bc, 0x798c, 0x2001, 0x1951, 0x918c, + 0x8000, 0x2102, 0x080c, 0x488f, 0x0904, 0x33bf, 0x080c, 0x6667, + 0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6337, 0x0904, + 0x33bc, 0x080c, 0x64ba, 0x0904, 0x33bc, 0x2001, 0x1951, 0x2004, + 0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001, 0x1951, + 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0, 0x080c, + 0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337, 0x2009, + 0x0002, 0x0128, 0x080c, 0x64ba, 0x1170, 0x2009, 0x0003, 0xa897, + 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004, + 0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x33bc, + 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x488f, + 0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f, 0x1904, + 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8, 0x0904, + 0x33bc, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804, + 0x4329, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102, + 0x080c, 0x489c, 0x01a0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, + 0x1170, 0x080c, 0x6337, 0x2009, 0x0002, 0x0128, 0x080c, 0x64a8, + 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, + 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, + 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395, + 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, + 0x0005, 0x6100, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf, + 0x080c, 0x53a1, 0x1904, 0x33bc, 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, + 0x338a, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, + 0x1a04, 0x33bc, 0x6258, 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, 0x48c4, 0x000e, 0x2031, 0x0000, + 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, + 0xa392, 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, + 0x44e2, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x48ab, 0x0904, + 0x33bf, 0x080c, 0x6667, 0x1904, 0x33bc, 0x00c6, 0x080c, 0x4878, + 0x00ce, 0x0904, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, + 0x7ea8, 0x080c, 0xb9bc, 0x0904, 0x33bc, 0x7007, 0x0003, 0x701f, + 0x44e6, 0x0005, 0x080c, 0x4054, 0x0804, 0x338a, 0xa830, 0x9086, + 0x0100, 0x0904, 0x33bc, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, + 0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, + 0x7c9c, 0x7d98, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x78a8, + 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33bc, + 0x080c, 0x70b7, 0x0110, 0x080c, 0x5ca1, 0x7888, 0x908a, 0x1000, + 0x1a04, 0x33bf, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, + 0x1a04, 0x33bf, 0x2100, 0x080c, 0x2457, 0x0026, 0x00c6, 0x0126, + 0x2091, 0x8000, 0x2061, 0x19d4, 0x601b, 0x0000, 0x601f, 0x0000, + 0x6073, 0x0000, 0x6077, 0x0000, 0x080c, 0x70b7, 0x1158, 0x080c, + 0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c, + 0x6fe8, 0x00f0, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4, + 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f, + 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a, + 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7, 0x080c, 0x821d, + 0x7984, 0x080c, 0x70b7, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, + 0x438c, 0x012e, 0x00ce, 0x002e, 0x0804, 0x338a, 0x7984, 0x080c, + 0x6210, 0x2b08, 0x1904, 0x33bf, 0x0804, 0x338a, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x33bc, 0x60d8, 0xd0ac, 0x1130, 0xd09c, + 0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120, + 0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9192, 0x0021, 0x1a04, + 0x33bf, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, + 0x702a, 0xaf60, 0x7736, 0x080c, 0x48c1, 0x701f, 0x459e, 0x7880, + 0x9086, 0x006e, 0x0110, 0x701f, 0x4e43, 0x0005, 0x2009, 0x0080, + 0x080c, 0x6270, 0x1118, 0x080c, 0x6667, 0x0120, 0x2021, 0x400a, + 0x0804, 0x338c, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, + 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4637, 0x90be, + 0x0112, 0x0904, 0x4637, 0x90be, 0x0113, 0x0904, 0x4637, 0x90be, + 0x0114, 0x0904, 0x4637, 0x90be, 0x0117, 0x0904, 0x4637, 0x90be, + 0x011a, 0x0904, 0x4637, 0x90be, 0x011c, 0x0904, 0x4637, 0x90be, + 0x0121, 0x0904, 0x461e, 0x90be, 0x0131, 0x0904, 0x461e, 0x90be, + 0x0171, 0x0904, 0x4637, 0x90be, 0x0173, 0x0904, 0x4637, 0x90be, + 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4642, 0x90be, + 0x0212, 0x0904, 0x462b, 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, 0x33bf, 0x7028, 0x9080, 0x0010, + 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, + 0x4680, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, + 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4680, 0x00c8, 0x7028, 0x9080, + 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, + 0x080c, 0x468d, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, + 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468d, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, - 0x0001, 0x080c, 0x4686, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, - 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4686, - 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, - 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4871, 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, 0xb9bc, 0x1120, - 0x2009, 0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4670, - 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x33b5, - 0xa820, 0x9086, 0x8001, 0x1904, 0x3383, 0x2009, 0x0004, 0x0804, - 0x33b5, 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, 0x33b5, 0x60d8, - 0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x33b5, - 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33b5, 0x7984, 0x78a8, - 0x2040, 0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33b8, - 0x9186, 0x00ff, 0x0904, 0x33b8, 0x9182, 0x0800, 0x1a04, 0x33b8, - 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904, - 0x33b8, 0x99cc, 0xff00, 0x0904, 0x33b8, 0x0126, 0x2091, 0x8000, - 0x0026, 0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x0140, 0x918d, - 0x8000, 0x080c, 0x66ce, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c, - 0x478b, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e, - 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, - 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, - 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, - 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, - 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3385, 0x2b00, 0x7026, - 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9c3d, 0x0904, - 0x4758, 0x2b00, 0x6012, 0x080c, 0xbcc0, 0x2e58, 0x00ee, 0x00e6, - 0x00c6, 0x080c, 0x4871, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9bcc, - 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, - 0x33b5, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, - 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x3003, 0x6023, - 0x0001, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba, - 0x2009, 0x0002, 0x080c, 0x9c6a, 0x78a8, 0xd094, 0x0138, 0x00ee, - 0x7024, 0x00e6, 0x2058, 0xb8c4, 0xc08d, 0xb8c6, 0x9085, 0x0001, - 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, - 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4767, 0x0005, 0xa830, - 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3385, - 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, - 0x9294, 0x00ff, 0x0804, 0x52e3, 0x900e, 0xa868, 0xd0f4, 0x1904, - 0x3383, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x0804, 0x3383, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, - 0x47d3, 0x902e, 0x080c, 0x9b4b, 0x0130, 0x9026, 0x20a9, 0x0800, - 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, - 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, - 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, - 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, - 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, - 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, - 0xd894, 0x1558, 0x080c, 0x6660, 0x1540, 0x2001, 0x4000, 0x0430, - 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, - 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9b4b, - 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a1, - 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, - 0x080c, 0x6209, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, - 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x33b5, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, - 0x33b8, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x33b8, - 0x2010, 0x2918, 0x080c, 0x2f9d, 0x1120, 0x2009, 0x0003, 0x0804, - 0x33b5, 0x7007, 0x0003, 0x701f, 0x4826, 0x0005, 0xa830, 0x9086, - 0x0100, 0x1904, 0x3383, 0x2009, 0x0004, 0x0804, 0x33b5, 0x7984, - 0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33b8, 0x9186, - 0x00ff, 0x0904, 0x33b8, 0x9182, 0x0800, 0x1a04, 0x33b8, 0x2001, - 0x9000, 0x080c, 0x533e, 0x1904, 0x33b5, 0x0804, 0x3383, 0xa998, - 0x080c, 0x9b4b, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, - 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x533e, - 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, 0x1022, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, - 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, - 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, - 0x7984, 0x080c, 0x6269, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, - 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6269, - 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, - 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6269, - 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, - 0x0128, 0x2148, 0xa904, 0x080c, 0x1054, 0x0cc8, 0x7116, 0x711a, - 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, - 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, - 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x3383, - 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, - 0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48ee, 0x7a36, 0x7833, - 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x11be, 0x0804, 0x4954, 0x0016, 0x0086, - 0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540, - 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1022, - 0x0904, 0x494c, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, - 0x9080, 0x1cf7, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, - 0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00, - 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, - 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, - 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, 0x2105, - 0x9005, 0xa146, 0x1520, 0x080c, 0x1022, 0x1130, 0x8109, 0xa946, - 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, - 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, - 0x1cf7, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, - 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, - 0x9082, 0x001b, 0x0002, 0x4976, 0x4976, 0x4978, 0x4976, 0x4976, - 0x4976, 0x497c, 0x4976, 0x4976, 0x4976, 0x4980, 0x4976, 0x4976, - 0x4976, 0x4984, 0x4976, 0x4976, 0x4976, 0x4988, 0x4976, 0x4976, - 0x4976, 0x498c, 0x4976, 0x4976, 0x4976, 0x4991, 0x080c, 0x0d65, - 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, - 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, - 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, - 0x494f, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x494f, 0x00e6, 0x2071, - 0x1894, 0x7048, 0x9005, 0x0904, 0x4a28, 0x0126, 0x2091, 0x8000, - 0x0e04, 0x4a27, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, - 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, - 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, - 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a2a, 0xa804, 0x9005, - 0x090c, 0x0d65, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, - 0x0002, 0x9080, 0x1cf7, 0x2005, 0xa04a, 0x0804, 0x4a2a, 0x703c, - 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, - 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x87ff, 0x0118, - 0x2748, 0x080c, 0x1054, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, - 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x1054, 0x9006, 0x7042, - 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005, - 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, - 0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e, - 0x703a, 0x7044, 0x9005, 0x090c, 0x0d65, 0x2048, 0xa800, 0x9005, - 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1cf7, 0x2005, - 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, - 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a49, 0x4a49, - 0x4a4b, 0x4a49, 0x4a49, 0x4a49, 0x4a50, 0x4a49, 0x4a49, 0x4a49, - 0x4a55, 0x4a49, 0x4a49, 0x4a49, 0x4a5a, 0x4a49, 0x4a49, 0x4a49, - 0x4a5f, 0x4a49, 0x4a49, 0x4a49, 0x4a64, 0x4a49, 0x4a49, 0x4a49, - 0x4a69, 0x080c, 0x0d65, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49d5, - 0xaa84, 0xab88, 0xac8c, 0x0804, 0x49d5, 0xaa94, 0xab98, 0xac9c, - 0x0804, 0x49d5, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49d5, 0xaab4, - 0xabb8, 0xacbc, 0x0804, 0x49d5, 0xaac4, 0xabc8, 0xaccc, 0x0804, - 0x49d5, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49d5, 0x0026, 0x080c, - 0x5386, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d1, 0x002e, - 0x0005, 0x81ff, 0x1904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x6030, - 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x70ac, 0x1158, 0x080c, - 0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c, 0x70f3, 0x080c, - 0x6fdd, 0x0010, 0x080c, 0x5b90, 0x012e, 0x0804, 0x3383, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, 0x080c, 0x539a, 0x0120, - 0x2009, 0x0007, 0x0804, 0x33b5, 0x080c, 0x6658, 0x0120, 0x2009, - 0x0008, 0x0804, 0x33b5, 0x0026, 0x2011, 0x0010, 0x080c, 0x6684, - 0x002e, 0x0140, 0x7984, 0x080c, 0x66ce, 0x1120, 0x2009, 0x4009, - 0x0804, 0x33b5, 0x080c, 0x317a, 0x0128, 0x7984, 0x080c, 0x6209, - 0x1904, 0x33b8, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x2b00, 0x7026, - 0x080c, 0x6660, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, - 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, - 0x0804, 0x3383, 0x080c, 0x4871, 0x0904, 0x33b5, 0x9006, 0xa866, - 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba5e, 0x0904, 0x33b5, - 0x7888, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x7007, 0x0003, - 0x701f, 0x4b3f, 0x0005, 0x2061, 0x1800, 0x080c, 0x539a, 0x2009, - 0x0007, 0x1578, 0x080c, 0x6658, 0x0118, 0x2009, 0x0008, 0x0448, - 0x080c, 0x317a, 0x0120, 0xa998, 0x080c, 0x6209, 0x1530, 0x080c, - 0x48a2, 0x0518, 0x080c, 0x6660, 0xa89c, 0x1168, 0x9084, 0x0005, - 0x1150, 0x900e, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xba5e, - 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 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, - 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3385, - 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52e3, 0x900e, - 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, - 0x0804, 0x3383, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, - 0x33b5, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4871, - 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x900e, 0x2130, 0x7126, - 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, - 0x20a0, 0x080c, 0x6269, 0x1904, 0x4bdd, 0x080c, 0x6660, 0x0120, - 0x080c, 0x6668, 0x1904, 0x4bdd, 0x080c, 0x6658, 0x1130, 0x080c, - 0x6558, 0x1118, 0xd79c, 0x0904, 0x4bdd, 0xd794, 0x1110, 0xd784, - 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400, - 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, - 0x20e0, 0x20a9, 0x0002, 0x080c, 0x4686, 0x0048, 0x20a9, 0x0004, - 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4686, 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, 0x4679, 0x9c80, - 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, - 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9b4b, - 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, - 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, - 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b79, 0x86ff, - 0x1120, 0x7124, 0x810b, 0x0804, 0x3383, 0x7033, 0x0001, 0x7122, - 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b, - 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, - 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4c19, - 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, - 0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, - 0xa494, 0xa598, 0x0804, 0x4b79, 0x7124, 0x810b, 0x0804, 0x3383, - 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, - 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8, - 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, - 0x33b8, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8, - 0x9502, 0x0a04, 0x33b8, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, - 0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9384, 0xff00, 0x8007, 0x90e2, - 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9384, 0x00ff, - 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9484, - 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, - 0x33b8, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, - 0x0a04, 0x33b8, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e, - 0x0804, 0x3383, 0x0006, 0x080c, 0x5386, 0xd0cc, 0x000e, 0x0005, - 0x0006, 0x080c, 0x538a, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, - 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3383, 0x83ff, 0x1904, - 0x33b8, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x33b8, 0x2019, 0xffff, - 0x6074, 0x9302, 0x9200, 0x0a04, 0x33b8, 0x7986, 0x6272, 0x0804, - 0x3383, 0x080c, 0x539a, 0x1904, 0x33b5, 0x7c88, 0x7d84, 0x7e98, - 0x7f8c, 0x080c, 0x4871, 0x0904, 0x33b5, 0x900e, 0x901e, 0x7326, - 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, - 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660, - 0x0118, 0x080c, 0x6668, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, - 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, - 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, - 0x900e, 0x2001, 0x0003, 0x080c, 0x83f1, 0x2208, 0x0804, 0x3383, - 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae, - 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, - 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, 0x7007, 0x0002, - 0x701f, 0x4d0b, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, - 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c, - 0xa590, 0xa694, 0xa798, 0x0804, 0x4cc9, 0x7224, 0x900e, 0x2001, - 0x0003, 0x080c, 0x83f1, 0x2208, 0x0804, 0x3383, 0x00f6, 0x00e6, - 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, 0x4d9e, 0x2071, 0x1894, - 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4d9e, 0xac9c, 0xad98, - 0xaea4, 0xafa0, 0x0096, 0x080c, 0x103b, 0x2009, 0x0002, 0x0904, - 0x4d9e, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, - 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, - 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660, 0x0118, 0x080c, 0x6668, - 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, - 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, - 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, - 0x080c, 0x83f1, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, - 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x9006, 0x705e, - 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, - 0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076, - 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4daa, - 0x000e, 0xa0a2, 0x080c, 0x110c, 0x9006, 0x0048, 0x009e, 0xa897, - 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, - 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0x00e6, - 0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, - 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, - 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, - 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, - 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x83f1, 0xaa9a, - 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x705f, - 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, - 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, - 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660, 0x0118, - 0x080c, 0x6668, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, + 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4878, 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, 0xb9d7, 0x1120, 0x2009, + 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4677, 0x0005, + 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa820, + 0x9086, 0x8001, 0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc, + 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, 0x33bc, 0x60d8, 0xd0ac, + 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x33bc, 0xd09c, + 0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x7984, 0x78a8, 0x2040, + 0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186, + 0x00ff, 0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x7a8c, + 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904, 0x33bf, + 0x99cc, 0xff00, 0x0904, 0x33bf, 0x0126, 0x2091, 0x8000, 0x0026, + 0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0140, 0x918d, 0x8000, + 0x080c, 0x66d5, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c, 0x4792, + 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e, 0x080c, + 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e, + 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, + 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, + 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, + 0x000a, 0x2020, 0x012e, 0x0804, 0x338c, 0x2b00, 0x7026, 0x0016, + 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9c58, 0x0904, 0x475f, + 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x2e58, 0x00ee, 0x00e6, 0x00c6, + 0x080c, 0x4878, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9be7, 0x00ee, + 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33bc, + 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, + 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x3006, 0x6023, 0x0001, + 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009, + 0x0002, 0x080c, 0x9c85, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, + 0x00e6, 0x2058, 0xb8c4, 0xc08d, 0xb8c6, 0x9085, 0x0001, 0x00ee, + 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, + 0x33bc, 0x7007, 0x0003, 0x701f, 0x476e, 0x0005, 0xa830, 0x2008, + 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086, + 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, + 0x00ff, 0x0804, 0x52ea, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x338a, + 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, + 0x0804, 0x338a, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x47da, + 0x902e, 0x080c, 0x9b66, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, + 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, + 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, 0x94ce, + 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, 0x0080, + 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, 0xc5fd, + 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, 0x2600, + 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, 0xd894, + 0x1558, 0x080c, 0x6667, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, + 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, + 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9b66, 0x1930, + 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a8, 0x85ff, + 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, + 0x6210, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, + 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, + 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x33bf, + 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x33bf, 0x2010, + 0x2918, 0x080c, 0x2fa0, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, + 0x7007, 0x0003, 0x701f, 0x482d, 0x0005, 0xa830, 0x9086, 0x0100, + 0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc, 0x7984, 0x080c, + 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186, 0x00ff, + 0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x2001, 0x9000, + 0x080c, 0x5345, 0x1904, 0x33bc, 0x0804, 0x338a, 0xa998, 0x080c, + 0x9b66, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, + 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5345, 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, 0x1022, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, + 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, + 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, + 0x080c, 0x6270, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6270, 0x1130, + 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, + 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6270, 0x1108, + 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, + 0x2148, 0xa904, 0x080c, 0x1054, 0x0cc8, 0x7116, 0x711a, 0x001e, + 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18ae, + 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, + 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x338a, 0x0005, + 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18a6, + 0x2004, 0x9005, 0x1190, 0x0e04, 0x48f5, 0x7a36, 0x7833, 0x0012, + 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x190c, 0x11be, 0x0804, 0x495b, 0x0016, 0x0086, 0x0096, + 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540, 0x7148, + 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1022, 0x0904, + 0x4953, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, + 0x1cf7, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, + 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00, 0x703a, + 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, + 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, + 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, + 0xa146, 0x1520, 0x080c, 0x1022, 0x1130, 0x8109, 0xa946, 0x7148, + 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, + 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1cf7, + 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, + 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, + 0x001b, 0x0002, 0x497d, 0x497d, 0x497f, 0x497d, 0x497d, 0x497d, + 0x4983, 0x497d, 0x497d, 0x497d, 0x4987, 0x497d, 0x497d, 0x497d, + 0x498b, 0x497d, 0x497d, 0x497d, 0x498f, 0x497d, 0x497d, 0x497d, + 0x4993, 0x497d, 0x497d, 0x497d, 0x4998, 0x080c, 0x0d65, 0xa276, + 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, + 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, + 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4956, + 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4956, 0x00e6, 0x2071, 0x1894, + 0x7048, 0x9005, 0x0904, 0x4a2f, 0x0126, 0x2091, 0x8000, 0x0e04, + 0x4a2e, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, + 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, + 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, + 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a31, 0xa804, 0x9005, 0x090c, + 0x0d65, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, + 0x9080, 0x1cf7, 0x2005, 0xa04a, 0x0804, 0x4a31, 0x703c, 0x2060, + 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, + 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x87ff, 0x0118, 0x2748, + 0x080c, 0x1054, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, + 0x2048, 0x9005, 0x0128, 0x080c, 0x1054, 0x9006, 0x7042, 0x7046, + 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005, 0x1508, + 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18f0, + 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, + 0x7044, 0x9005, 0x090c, 0x0d65, 0x2048, 0xa800, 0x9005, 0x1de0, + 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1cf7, 0x2005, 0xa84a, + 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, + 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a50, 0x4a50, 0x4a52, + 0x4a50, 0x4a50, 0x4a50, 0x4a57, 0x4a50, 0x4a50, 0x4a50, 0x4a5c, + 0x4a50, 0x4a50, 0x4a50, 0x4a61, 0x4a50, 0x4a50, 0x4a50, 0x4a66, + 0x4a50, 0x4a50, 0x4a50, 0x4a6b, 0x4a50, 0x4a50, 0x4a50, 0x4a70, + 0x080c, 0x0d65, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dc, 0xaa84, + 0xab88, 0xac8c, 0x0804, 0x49dc, 0xaa94, 0xab98, 0xac9c, 0x0804, + 0x49dc, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dc, 0xaab4, 0xabb8, + 0xacbc, 0x0804, 0x49dc, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x49dc, + 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dc, 0x0026, 0x080c, 0x538d, + 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d8, 0x002e, 0x0005, + 0x81ff, 0x1904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, + 0xc085, 0xc0ac, 0x6032, 0x080c, 0x70b7, 0x1158, 0x080c, 0x73b7, + 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c, 0x6fe8, + 0x0010, 0x080c, 0x5b97, 0x012e, 0x0804, 0x338a, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, + 0x0007, 0x0804, 0x33bc, 0x080c, 0x665f, 0x0120, 0x2009, 0x0008, + 0x0804, 0x33bc, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, + 0x0140, 0x7984, 0x080c, 0x66d5, 0x1120, 0x2009, 0x4009, 0x0804, + 0x33bc, 0x080c, 0x3181, 0x0128, 0x7984, 0x080c, 0x6210, 0x1904, + 0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x2b00, 0x7026, 0x080c, + 0x6667, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, + 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, + 0x338a, 0x080c, 0x4878, 0x0904, 0x33bc, 0x9006, 0xa866, 0xa832, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x0904, 0x33bc, 0x7888, + 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x7007, 0x0003, 0x701f, + 0x4b46, 0x0005, 0x2061, 0x1800, 0x080c, 0x53a1, 0x2009, 0x0007, + 0x1578, 0x080c, 0x665f, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, + 0x3181, 0x0120, 0xa998, 0x080c, 0x6210, 0x1530, 0x080c, 0x48a9, + 0x0518, 0x080c, 0x6667, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, + 0x900e, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, + 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xba79, 0x11e0, + 0xa89c, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 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, 0x2008, + 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086, + 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52ea, 0x900e, 0x080c, + 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, + 0x338a, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc, + 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4878, 0x1120, + 0x2009, 0x0002, 0x0804, 0x33bc, 0x900e, 0x2130, 0x7126, 0x7132, + 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, + 0x080c, 0x6270, 0x1904, 0x4be4, 0x080c, 0x6667, 0x0120, 0x080c, + 0x666f, 0x1904, 0x4be4, 0x080c, 0x665f, 0x1130, 0x080c, 0x655f, + 0x1118, 0xd79c, 0x0904, 0x4be4, 0xd794, 0x1110, 0xd784, 0x01a8, + 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, + 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, + 0x20a9, 0x0002, 0x080c, 0x468d, 0x0048, 0x20a9, 0x0004, 0x4003, + 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468d, 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, 0x4680, 0x9c80, 0x0026, + 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, + 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9b66, 0x0118, + 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, + 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, + 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b80, 0x86ff, 0x1120, + 0x7124, 0x810b, 0x0804, 0x338a, 0x7033, 0x0001, 0x7122, 0x7024, + 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, + 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, + 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4c20, 0x0005, + 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, + 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, 0xa494, + 0xa598, 0x0804, 0x4b80, 0x7124, 0x810b, 0x0804, 0x338a, 0x2029, + 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, + 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9184, + 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, + 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, + 0x0a04, 0x33bf, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, + 0x9502, 0x0a04, 0x33bf, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, + 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9384, 0x00ff, 0x90e2, + 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9484, 0xff00, + 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, + 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, + 0x33bf, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, + 0x338a, 0x0006, 0x080c, 0x538d, 0xd0cc, 0x000e, 0x0005, 0x0006, + 0x080c, 0x5391, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300, + 0x82ff, 0x1118, 0x7986, 0x0804, 0x338a, 0x83ff, 0x1904, 0x33bf, + 0x2001, 0xfff0, 0x9200, 0x1a04, 0x33bf, 0x2019, 0xffff, 0x6074, + 0x9302, 0x9200, 0x0a04, 0x33bf, 0x7986, 0x6272, 0x0804, 0x338a, + 0x080c, 0x53a1, 0x1904, 0x33bc, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, + 0x080c, 0x4878, 0x0904, 0x33bc, 0x900e, 0x901e, 0x7326, 0x7332, + 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, + 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, + 0x080c, 0x666f, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, - 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, - 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, - 0x080c, 0x1054, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, - 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0xa09f, - 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, - 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, - 0x110c, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, - 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, - 0x0804, 0x33b8, 0xa884, 0xa988, 0x080c, 0x2424, 0x1518, 0x080c, - 0x6209, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4871, - 0x01c8, 0x080c, 0x4871, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, - 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xb9dc, - 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, - 0x4e77, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7124, - 0x080c, 0x3113, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, - 0x0804, 0x33b5, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, - 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, - 0x002a, 0x080c, 0x0f9f, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, - 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, - 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, - 0x0004, 0x000e, 0x007e, 0x0804, 0x48bd, 0x97c6, 0x7200, 0x11b8, - 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44, - 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, - 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4ed3, 0x0005, 0x000e, - 0x007e, 0x0804, 0x33b8, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, - 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, - 0x080c, 0x0f9f, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c, - 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48bd, 0x81ff, - 0x1904, 0x33b5, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102, - 0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x6660, 0x0120, 0x080c, - 0x6668, 0x1904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x0126, - 0x2091, 0x8000, 0x080c, 0x64c5, 0x012e, 0x0904, 0x33b5, 0x2001, - 0x194f, 0x2004, 0xd0fc, 0x1904, 0x3383, 0x0804, 0x4322, 0xa9a0, - 0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4895, - 0x01a0, 0x080c, 0x6660, 0x0118, 0x080c, 0x6668, 0x1170, 0x080c, - 0x6330, 0x2009, 0x0002, 0x0128, 0x080c, 0x64c5, 0x1170, 0x2009, - 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, - 0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, - 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, - 0xd08c, 0x1118, 0xd084, 0x0904, 0x4297, 0x080c, 0x48a4, 0x0904, - 0x33b8, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, - 0x080c, 0x6660, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, - 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, - 0x080c, 0x5386, 0xd0b4, 0x0904, 0x42d1, 0x7884, 0x908e, 0x007e, - 0x0904, 0x42d1, 0x908e, 0x007f, 0x0904, 0x42d1, 0x908e, 0x0080, - 0x0904, 0x42d1, 0xb800, 0xd08c, 0x1904, 0x42d1, 0xa867, 0x0000, - 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb9fb, 0x1120, 0x2009, 0x0003, - 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4f9f, 0x0005, 0x080c, - 0x48a4, 0x0904, 0x33b8, 0x0804, 0x42d1, 0x080c, 0x317a, 0x0108, - 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x33b5, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, - 0x33b5, 0x080c, 0x6658, 0x0120, 0x2009, 0x0008, 0x0804, 0x33b5, - 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42d1, 0x9006, 0xa866, - 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba5e, 0x1120, 0x2009, - 0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4fd8, 0x0005, - 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52e3, - 0x080c, 0x48a4, 0x0904, 0x33b8, 0x0804, 0x4f71, 0x81ff, 0x2009, - 0x0001, 0x1904, 0x33b5, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, - 0x33b5, 0x080c, 0x6658, 0x0120, 0x2009, 0x0008, 0x0804, 0x33b5, - 0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c, 0x6660, 0x2009, 0x0009, - 0x1904, 0x33b5, 0x080c, 0x4871, 0x2009, 0x0002, 0x0904, 0x33b5, - 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, - 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, - 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x33b8, 0xc0e5, - 0xa952, 0xa956, 0xa83e, 0x080c, 0xbcc1, 0x2009, 0x0003, 0x0904, - 0x33b5, 0x7007, 0x0003, 0x701f, 0x502e, 0x0005, 0xa830, 0x9086, - 0x0100, 0x2009, 0x0004, 0x0904, 0x33b5, 0x0804, 0x3383, 0x7aa8, - 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x539a, 0x1188, - 0x2009, 0x0014, 0x0804, 0x33b5, 0xd2dc, 0x1568, 0x81ff, 0x2009, - 0x0001, 0x1904, 0x33b5, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904, - 0x33b5, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5361, 0x0804, - 0x3383, 0xd2fc, 0x0158, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x7984, - 0x9284, 0x9000, 0x080c, 0x533e, 0x0804, 0x3383, 0x080c, 0x48a4, - 0x0904, 0x33b8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, - 0x0009, 0x1904, 0x5117, 0x080c, 0x4871, 0x2009, 0x0002, 0x0904, - 0x5117, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48ba, 0x701f, 0x5088, 0x0005, - 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, - 0x9084, 0xff00, 0x0110, 0x1904, 0x33b8, 0xa866, 0xa832, 0xa868, - 0xc0fd, 0xa86a, 0x080c, 0x48a4, 0x1110, 0x0804, 0x33b8, 0x2009, - 0x0043, 0x080c, 0xbd29, 0x2009, 0x0003, 0x0904, 0x5117, 0x7007, - 0x0003, 0x701f, 0x50ac, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, - 0x0004, 0x0904, 0x5117, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, - 0x533e, 0x0804, 0x3383, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, - 0xd2ec, 0x0168, 0x080c, 0x539a, 0x1150, 0x2009, 0x0014, 0x04f0, - 0x2061, 0x1800, 0x080c, 0x539a, 0x2009, 0x0007, 0x15b8, 0xd2f4, - 0x0128, 0x9284, 0x5000, 0x080c, 0x5361, 0x0050, 0xd2fc, 0x0178, - 0x080c, 0x48a2, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x533e, - 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, - 0x48a2, 0x0510, 0x080c, 0x6660, 0x2009, 0x0009, 0x11b8, 0xa8c4, - 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, - 0xff00, 0x1190, 0x080c, 0x48a2, 0x1108, 0x0070, 0x2009, 0x004b, - 0x080c, 0xbd29, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, + 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, + 0x2001, 0x0003, 0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x7033, + 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae, 0x2c44, + 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, + 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, + 0x4d12, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, + 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c, 0xa590, + 0xa694, 0xa798, 0x0804, 0x4cd0, 0x7224, 0x900e, 0x2001, 0x0003, + 0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x00f6, 0x00e6, 0x080c, + 0x53a1, 0x2009, 0x0007, 0x1904, 0x4da5, 0x2071, 0x1894, 0x745c, + 0x84ff, 0x2009, 0x000e, 0x1904, 0x4da5, 0xac9c, 0xad98, 0xaea4, + 0xafa0, 0x0096, 0x080c, 0x103b, 0x2009, 0x0002, 0x0904, 0x4da5, + 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, + 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, + 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1148, + 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, + 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, + 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, + 0x8419, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, + 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x9006, 0x705e, 0x918d, + 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, + 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, + 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db1, 0x000e, + 0xa0a2, 0x080c, 0x110c, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, + 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, + 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0x00e6, 0x2071, + 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, + 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, + 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, + 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, + 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8419, 0xaa9a, 0x715c, + 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x705f, 0x0000, + 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e, + 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, + 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c, + 0x666f, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, + 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, + 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, + 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, + 0x1054, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e, 0xa09f, 0x0000, + 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, + 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, + 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, + 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, + 0x33bf, 0xa884, 0xa988, 0x080c, 0x2424, 0x1518, 0x080c, 0x6210, + 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4878, 0x01c8, + 0x080c, 0x4878, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, + 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xb9f7, 0x1120, + 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4e7e, + 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7124, 0x080c, + 0x311a, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, + 0x33bc, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, + 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, + 0x080c, 0x0f9f, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18ae, + 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, + 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, + 0x000e, 0x007e, 0x0804, 0x48c4, 0x97c6, 0x7200, 0x11b8, 0x96c2, + 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44, 0xa076, + 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, + 0x110c, 0x7007, 0x0002, 0x701f, 0x4eda, 0x0005, 0x000e, 0x007e, + 0x0804, 0x33bf, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, + 0x0f9f, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, + 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c4, 0x81ff, 0x1904, + 0x33bc, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102, 0x080c, + 0x488f, 0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f, + 0x1904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x0126, 0x2091, + 0x8000, 0x080c, 0x64cc, 0x012e, 0x0904, 0x33bc, 0x2001, 0x194f, + 0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001, + 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0, + 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337, + 0x2009, 0x0002, 0x0128, 0x080c, 0x64cc, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, - 0xd2dc, 0x0904, 0x33b5, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, - 0x080c, 0x533e, 0x001e, 0x1904, 0x33b5, 0x0804, 0x3383, 0x00f6, - 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, - 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x9085, - 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, - 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, 0x33b5, 0x7984, - 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6269, 0x1904, 0x33b8, 0x9186, - 0x007f, 0x0138, 0x080c, 0x6660, 0x0120, 0x2009, 0x0009, 0x0804, - 0x33b5, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, - 0xa80a, 0x080c, 0xba15, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, - 0x7007, 0x0003, 0x701f, 0x5175, 0x0005, 0xa808, 0x8007, 0x9086, - 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33b5, 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, 0x48bd, 0x080c, 0x4871, 0x1120, 0x2009, - 0x0002, 0x0804, 0x33b5, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, - 0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001, - 0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x33b8, 0x2009, 0x001a, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, - 0x080c, 0x48ba, 0x701f, 0x51c5, 0x0005, 0x2001, 0x182d, 0x2003, - 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, - 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x3383, - 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7984, - 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, - 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010, - 0x0804, 0x33b8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, - 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, - 0x48bd, 0x7884, 0x908a, 0x1000, 0x1a04, 0x33b8, 0x0126, 0x2091, - 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d4, - 0x6142, 0x00ce, 0x012e, 0x0804, 0x3383, 0x00c6, 0x080c, 0x70ac, - 0x1160, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c, - 0x70f3, 0x080c, 0x6fdd, 0x080c, 0x0d65, 0x2061, 0x1800, 0x6030, - 0xc09d, 0x6032, 0x080c, 0x5b90, 0x00ce, 0x0005, 0x00c6, 0x2001, - 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x33b5, 0x7884, 0x9005, - 0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2801, - 0x01a0, 0x080c, 0x2809, 0x0188, 0x080c, 0x2811, 0x0170, 0x2162, - 0x0804, 0x33b8, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, - 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, - 0x1588, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98ad, - 0x0026, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, - 0x9328, 0x002e, 0x080c, 0x91eb, 0x0036, 0x901e, 0x080c, 0x926b, - 0x003e, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9, 0x080c, - 0xd5f4, 0x9085, 0x0001, 0x080c, 0x70f3, 0x9006, 0x080c, 0x2833, - 0x2001, 0x1800, 0x2003, 0x0004, 0x0026, 0x2011, 0x0008, 0x080c, - 0x286d, 0x002e, 0x00ce, 0x0804, 0x3383, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x33b5, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, - 0x0804, 0x33b5, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6269, - 0x1904, 0x33b8, 0x9186, 0x007f, 0x0138, 0x080c, 0x6660, 0x0120, - 0x2009, 0x0009, 0x0804, 0x33b5, 0x080c, 0x4871, 0x1120, 0x2009, - 0x0002, 0x0804, 0x33b5, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x080c, 0xba18, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, 0x7007, - 0x0003, 0x701f, 0x52cc, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, - 0x2009, 0x0004, 0x0804, 0x33b5, 0xa8e0, 0xa866, 0xa834, 0x8007, - 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0xaf60, 0x0804, 0x48bd, 0xa898, 0x9086, 0x000d, 0x1904, 0x33b5, - 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f0, 0x0010, - 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, - 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, - 0x799a, 0xa9a8, 0x799e, 0x080c, 0x48ad, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, - 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, - 0x00c6, 0x2061, 0x19d4, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, - 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, - 0x788c, 0x605e, 0x2001, 0x19e2, 0x2044, 0x2001, 0x19e9, 0xa076, - 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, - 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3383, 0x0126, 0x2091, - 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, - 0xb879, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, - 0x905d, 0x0160, 0x080c, 0x5cef, 0x080c, 0x9b4b, 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, 0x5369, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, - 0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, - 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, - 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, - 0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, - 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x33b8, 0x810c, - 0x0016, 0x080c, 0x4871, 0x080c, 0x0f2a, 0x2100, 0x2238, 0x7d84, - 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48ba, 0x701f, 0x53c1, - 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, - 0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894, - 0x080c, 0x48bd, 0x701f, 0x53d5, 0x0005, 0x2061, 0x18ae, 0x2c44, - 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f32, 0x002e, 0x001e, - 0x080c, 0x0fdf, 0x9006, 0xa802, 0xa806, 0x0804, 0x3383, 0x0126, - 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, - 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5590, 0x0068, 0xd08c, - 0x0118, 0x080c, 0x5499, 0x0040, 0xd094, 0x0118, 0x080c, 0x5469, - 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, - 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, - 0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, - 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, - 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, - 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, - 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, - 0x5c51, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, - 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, - 0x70db, 0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7093, 0x0000, - 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b33, 0x080c, 0x81f5, - 0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, - 0x7084, 0x9005, 0x1528, 0x2011, 0x5b33, 0x080c, 0x8131, 0x6040, - 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, - 0xd08c, 0x1168, 0x1f04, 0x547f, 0x6242, 0x7097, 0x0000, 0x6040, - 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, - 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5cda, 0x0000, - 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0d65, 0x000b, 0x0005, - 0x54a3, 0x54f4, 0x558f, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, - 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, - 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b2, - 0x080c, 0x0d65, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, - 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, - 0x5cb6, 0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, - 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, - 0x0004, 0x4003, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099, 0x1d00, + 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x194f, + 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, + 0x1118, 0xd084, 0x0904, 0x429e, 0x080c, 0x48ab, 0x0904, 0x33bf, + 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x080c, + 0x6667, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, + 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, + 0x538d, 0xd0b4, 0x0904, 0x42d8, 0x7884, 0x908e, 0x007e, 0x0904, + 0x42d8, 0x908e, 0x007f, 0x0904, 0x42d8, 0x908e, 0x0080, 0x0904, + 0x42d8, 0xb800, 0xd08c, 0x1904, 0x42d8, 0xa867, 0x0000, 0xa868, + 0xc0fd, 0xa86a, 0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804, + 0x33bc, 0x7007, 0x0003, 0x701f, 0x4fa6, 0x0005, 0x080c, 0x48ab, + 0x0904, 0x33bf, 0x0804, 0x42d8, 0x080c, 0x3181, 0x0108, 0x0005, + 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc, + 0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0xb89c, + 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42d8, 0x9006, 0xa866, 0xa832, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x1120, 0x2009, 0x0003, + 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4fdf, 0x0005, 0xa830, + 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52ea, 0x080c, + 0x48ab, 0x0904, 0x33bf, 0x0804, 0x4f78, 0x81ff, 0x2009, 0x0001, + 0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc, + 0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0x080c, + 0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667, 0x2009, 0x0009, 0x1904, + 0x33bc, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x33bc, 0x9006, + 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, + 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, + 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x33bf, 0xc0e5, 0xa952, + 0xa956, 0xa83e, 0x080c, 0xbcdc, 0x2009, 0x0003, 0x0904, 0x33bc, + 0x7007, 0x0003, 0x701f, 0x5035, 0x0005, 0xa830, 0x9086, 0x0100, + 0x2009, 0x0004, 0x0904, 0x33bc, 0x0804, 0x338a, 0x7aa8, 0x9284, + 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x53a1, 0x1188, 0x2009, + 0x0014, 0x0804, 0x33bc, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, + 0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc, + 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5368, 0x0804, 0x338a, + 0xd2fc, 0x0158, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x7984, 0x9284, + 0x9000, 0x080c, 0x5345, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, + 0x33bf, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, + 0x1904, 0x511e, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x511e, + 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, + 0x7c9c, 0x7d98, 0x080c, 0x48c1, 0x701f, 0x508f, 0x0005, 0xa86c, + 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, + 0xff00, 0x0110, 0x1904, 0x33bf, 0xa866, 0xa832, 0xa868, 0xc0fd, + 0xa86a, 0x080c, 0x48ab, 0x1110, 0x0804, 0x33bf, 0x2009, 0x0043, + 0x080c, 0xbd44, 0x2009, 0x0003, 0x0904, 0x511e, 0x7007, 0x0003, + 0x701f, 0x50b3, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, + 0x0904, 0x511e, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x5345, + 0x0804, 0x338a, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, + 0x0168, 0x080c, 0x53a1, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, + 0x1800, 0x080c, 0x53a1, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, + 0x9284, 0x5000, 0x080c, 0x5368, 0x0050, 0xd2fc, 0x0178, 0x080c, + 0x48a9, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x5345, 0xa87b, + 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x48a9, + 0x0510, 0x080c, 0x6667, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, + 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, + 0x1190, 0x080c, 0x48a9, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, + 0xbd44, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, + 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, + 0x0904, 0x33bc, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, + 0x5345, 0x001e, 0x1904, 0x33bc, 0x0804, 0x338a, 0x00f6, 0x2d78, + 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, + 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345, 0x001e, 0x9085, 0x0001, + 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x080c, + 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc, 0x7984, 0x7ea8, + 0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904, 0x33bf, 0x9186, 0x007f, + 0x0138, 0x080c, 0x6667, 0x0120, 0x2009, 0x0009, 0x0804, 0x33bc, + 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, + 0x080c, 0xba30, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, + 0x0003, 0x701f, 0x517c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, + 0x1120, 0x2009, 0x0004, 0x0804, 0x33bc, 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, 0x48c4, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, + 0x0804, 0x33bc, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, + 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, + 0x7023, 0x199e, 0x0010, 0x0804, 0x33bf, 0x2009, 0x001a, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, + 0x48c1, 0x701f, 0x51cc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001, + 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, + 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x338a, 0x080c, + 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9194, + 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1984, + 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010, 0x0804, + 0x33bf, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, + 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, + 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x48c4, + 0x7884, 0x908a, 0x1000, 0x1a04, 0x33bf, 0x0126, 0x2091, 0x8000, + 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d4, 0x6142, + 0x00ce, 0x012e, 0x0804, 0x338a, 0x00c6, 0x080c, 0x70b7, 0x1160, + 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, + 0x080c, 0x6fe8, 0x080c, 0x0d65, 0x2061, 0x1800, 0x6030, 0xc09d, + 0x6032, 0x080c, 0x5b97, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, + 0x2004, 0x908e, 0x0000, 0x0904, 0x33bc, 0x7884, 0x9005, 0x0188, + 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2801, 0x01a0, + 0x080c, 0x2809, 0x0188, 0x080c, 0x2811, 0x0170, 0x2162, 0x0804, + 0x33bf, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, + 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1588, + 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x0026, + 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c, 0x9343, + 0x002e, 0x080c, 0x9206, 0x0036, 0x901e, 0x080c, 0x9286, 0x003e, + 0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616, + 0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2001, + 0x1800, 0x2003, 0x0004, 0x0026, 0x2011, 0x0008, 0x080c, 0x286d, + 0x002e, 0x00ce, 0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001, + 0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, + 0x33bc, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904, + 0x33bf, 0x9186, 0x007f, 0x0138, 0x080c, 0x6667, 0x0120, 0x2009, + 0x0009, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, + 0x0804, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, + 0xba33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, + 0x701f, 0x52d3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, + 0x0004, 0x0804, 0x33bc, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, + 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, + 0x0804, 0x48c4, 0xa898, 0x9086, 0x000d, 0x1904, 0x33bc, 0x2021, + 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f7, 0x0010, 0x012e, + 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, + 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, + 0xa9a8, 0x799e, 0x080c, 0x48b4, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000, + 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, + 0x2061, 0x19d4, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, + 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, + 0x605e, 0x2001, 0x19e2, 0x2044, 0x2001, 0x19e9, 0xa076, 0xa060, + 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, + 0x0000, 0x00ce, 0x012e, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, + 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xb894, + 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, + 0x0160, 0x080c, 0x5cf6, 0x080c, 0x9b66, 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, 0x5370, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, 0x2004, + 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, + 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, + 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016, + 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, + 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x33bf, 0x810c, 0x0016, + 0x080c, 0x4878, 0x080c, 0x0f2a, 0x2100, 0x2238, 0x7d84, 0x7c88, + 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c1, 0x701f, 0x53c8, 0x0005, + 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, + 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894, 0x080c, + 0x48c4, 0x701f, 0x53dc, 0x0005, 0x2061, 0x18ae, 0x2c44, 0x0016, + 0x0026, 0xa270, 0xa174, 0x080c, 0x0f32, 0x002e, 0x001e, 0x080c, + 0x0fdf, 0x9006, 0xa802, 0xa806, 0x0804, 0x338a, 0x0126, 0x0156, + 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, + 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, + 0x11e8, 0xd084, 0x0118, 0x080c, 0x5597, 0x0068, 0xd08c, 0x0118, + 0x080c, 0x54a0, 0x0040, 0xd094, 0x0118, 0x080c, 0x5470, 0x0018, + 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, + 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, + 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7094, + 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c, + 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, + 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, + 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, + 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5c58, + 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, + 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db, + 0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087, + 0x000f, 0x2009, 0x000f, 0x2011, 0x5b3a, 0x080c, 0x821d, 0x0005, + 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084, + 0x9005, 0x1528, 0x2011, 0x5b3a, 0x080c, 0x8159, 0x6040, 0x9094, + 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, + 0x1168, 0x1f04, 0x5486, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094, + 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097, + 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5ce1, 0x0000, 0x0005, + 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x54aa, + 0x54fb, 0x5596, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b, + 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, + 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b9, 0x080c, + 0x0d65, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, + 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5cbd, + 0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, + 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, + 0x4003, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, + 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, + 0x600f, 0x0000, 0x080c, 0x5b6b, 0x00fe, 0x9006, 0x708e, 0x6043, + 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025, + 0x0904, 0x5573, 0x6020, 0xd0b4, 0x1904, 0x5571, 0x719c, 0x81ff, + 0x0904, 0x555f, 0x9486, 0x000c, 0x1904, 0x556c, 0x9480, 0x0018, + 0x8004, 0x20a8, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2019, 0x1d00, + 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5518, + 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, + 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002, + 0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x080c, 0x5cbd, + 0x04c0, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, + 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, + 0x7804, 0x9005, 0x0190, 0x080c, 0x5cb6, 0x2011, 0x026e, 0x2019, + 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, + 0x8210, 0x8318, 0x1f04, 0x5553, 0x0078, 0x709f, 0x0000, 0x080c, + 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, + 0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, + 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, + 0xd0b4, 0x1db8, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, - 0x000c, 0x600f, 0x0000, 0x080c, 0x5b64, 0x00fe, 0x9006, 0x708e, - 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, - 0x9025, 0x0904, 0x556c, 0x6020, 0xd0b4, 0x1904, 0x556a, 0x719c, - 0x81ff, 0x0904, 0x5558, 0x9486, 0x000c, 0x1904, 0x5565, 0x9480, - 0x0018, 0x8004, 0x20a8, 0x080c, 0x5caf, 0x2011, 0x0260, 0x2019, - 0x1d00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, - 0x5511, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, - 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, - 0x0002, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x81f5, 0x080c, - 0x5cb6, 0x04c0, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7930, 0x918e, - 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, - 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5caf, 0x2011, 0x026e, - 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, - 0x11a0, 0x8210, 0x8318, 0x1f04, 0x554c, 0x0078, 0x709f, 0x0000, - 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, - 0x20a1, 0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, - 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, - 0x6020, 0xd0b4, 0x1db8, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099, - 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, - 0x60c3, 0x000c, 0x2011, 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8f8f, 0x08d8, 0x0005, - 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x55c1, - 0x55d4, 0x55fd, 0x561d, 0x5643, 0x5672, 0x5698, 0x56d0, 0x56f6, - 0x5724, 0x575f, 0x5797, 0x57b5, 0x57e0, 0x5802, 0x581d, 0x5827, - 0x585b, 0x5881, 0x58b0, 0x58d6, 0x590e, 0x5952, 0x598f, 0x59b0, - 0x5a09, 0x5a2b, 0x5a59, 0x5a59, 0x00c6, 0x2061, 0x1800, 0x6003, - 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, - 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, - 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, - 0x5b3a, 0x080c, 0x81f5, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, - 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5caf, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, - 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, - 0x2011, 0x5b3a, 0x080c, 0x8131, 0x7097, 0x0010, 0x080c, 0x5827, - 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, - 0x6043, 0x0004, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x080c, 0x5c33, - 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, - 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5612, 0x60c3, - 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, - 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, - 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, - 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c33, - 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5caf, - 0x080c, 0x5c92, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, - 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, - 0x5c68, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, - 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, - 0x080c, 0x8131, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079, + 0x000c, 0x2011, 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x080c, 0x8faa, 0x08d8, 0x0005, 0x7094, + 0x908a, 0x001d, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x55c8, 0x55db, + 0x5604, 0x5624, 0x564a, 0x5679, 0x569f, 0x56d7, 0x56fd, 0x572b, + 0x5766, 0x579e, 0x57bc, 0x57e7, 0x5809, 0x5824, 0x582e, 0x5862, + 0x5888, 0x58b7, 0x58dd, 0x5915, 0x5959, 0x5996, 0x59b7, 0x5a10, + 0x5a32, 0x5a60, 0x5a60, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, + 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, + 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, + 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5b41, + 0x080c, 0x821d, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510, + 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cb6, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, + 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, + 0x5b41, 0x080c, 0x8159, 0x7097, 0x0010, 0x080c, 0x582e, 0x0010, + 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043, + 0x0004, 0x2011, 0x5b41, 0x080c, 0x8159, 0x080c, 0x5c3a, 0x2079, + 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, + 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5619, 0x60c3, 0x0014, + 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, + 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, + 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5c92, + 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c3a, 0x2079, + 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, + 0x5c99, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, + 0x0138, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f, + 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, + 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, + 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, + 0x0006, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, + 0x7097, 0x0007, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1104, + 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080, + 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b, + 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee, + 0x0180, 0x080c, 0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029, + 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009, + 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, + 0x080c, 0x5c99, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5a61, + 0x1188, 0x9085, 0x0001, 0x080c, 0x248d, 0x20a9, 0x0008, 0x080c, + 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x0010, 0x080c, + 0x55bb, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011, + 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x1560, 0x080c, 0x5cb6, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, + 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1, + 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, + 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c, + 0x5809, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, + 0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, + 0x2019, 0xffff, 0x4304, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, + 0x1106, 0x7837, 0x0000, 0x080c, 0x5c99, 0x0118, 0x2013, 0x0000, + 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, + 0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, + 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x578b, + 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, + 0x9005, 0x01c0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084, + 0x1178, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, + 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010, + 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c, + 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, + 0x5cb6, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, + 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, + 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, + 0x57cf, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, + 0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, + 0x5c0c, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe, + 0x0005, 0x918d, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x000f, 0x708f, + 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, + 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, + 0x5b41, 0x080c, 0x814d, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011, + 0x5b41, 0x080c, 0x8159, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011, + 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260, + 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, + 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5c99, + 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff, + 0x0160, 0x080c, 0x2424, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, + 0x0120, 0x2011, 0x0008, 0x080c, 0x5aee, 0x60c3, 0x0014, 0x080c, + 0x5b6b, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, + 0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, - 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, - 0x00f6, 0x7097, 0x0007, 0x080c, 0x5c33, 0x2079, 0x0240, 0x7833, - 0x1104, 0x7837, 0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92, 0x11b8, - 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, - 0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, - 0x5ae7, 0x0180, 0x080c, 0x4c90, 0x0110, 0x080c, 0x248d, 0x20a9, - 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, - 0x0029, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097, - 0x0009, 0x080c, 0x5c33, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, - 0x0100, 0x080c, 0x5c92, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, - 0x5a5a, 0x1188, 0x9085, 0x0001, 0x080c, 0x248d, 0x20a9, 0x0008, - 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, - 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x0010, - 0x080c, 0x55b4, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, - 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x1560, 0x080c, - 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, - 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, - 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, - 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, - 0x080c, 0x5802, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, - 0x7097, 0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, - 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c33, 0x2079, 0x0240, - 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c92, 0x0118, 0x2013, - 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, - 0x2009, 0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, - 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, - 0x5784, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, - 0x708c, 0x9005, 0x01c0, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, - 0x0084, 0x1178, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, - 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, - 0x080c, 0x5c33, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, - 0x080c, 0x5caf, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, - 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, - 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, - 0x1f04, 0x57c8, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, 0x8131, - 0x9086, 0x0084, 0x1198, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, - 0x080c, 0x5c05, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c8b, - 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5cda, 0x7097, 0x000f, - 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, - 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, - 0x2011, 0x5b3a, 0x080c, 0x8125, 0x0005, 0x708c, 0x9005, 0x0130, - 0x2011, 0x5b3a, 0x080c, 0x8131, 0x7097, 0x0000, 0x0005, 0x7097, - 0x0011, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, - 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, - 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, - 0x5c92, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, - 0x00ff, 0x0160, 0x080c, 0x2424, 0x9186, 0x007e, 0x0138, 0x9186, - 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x60c3, 0x0014, - 0x080c, 0x5b64, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, - 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, - 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, - 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, - 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c41, 0x2079, 0x0240, - 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92, - 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, - 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, 0x5c68, 0x20a9, - 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, - 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, - 0x0015, 0x080c, 0x5c41, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, - 0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92, 0x11b8, 0x7080, 0x9005, - 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3184, 0x200d, - 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0180, - 0x080c, 0x4c90, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, 0x20e1, - 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, - 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, - 0x9005, 0x05f0, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, - 0x15a8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, - 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, - 0x9085, 0x0001, 0x080c, 0x5cda, 0x7a38, 0xd2fc, 0x0128, 0x70c0, - 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, - 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, - 0x0001, 0x080c, 0x5cda, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, - 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, - 0x00fe, 0x0005, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000, - 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, - 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, - 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c92, 0x1150, - 0x7080, 0x9005, 0x1138, 0x080c, 0x5a5a, 0x1188, 0x9085, 0x0001, - 0x080c, 0x248d, 0x20a9, 0x0008, 0x080c, 0x5caf, 0x20e1, 0x0000, + 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, + 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, + 0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x1170, + 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, + 0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f, 0x20a9, 0x0008, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029, + 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015, + 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, + 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080, 0x9005, 0x11a0, + 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b, 0x200d, 0x918c, + 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0180, 0x080c, + 0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x5b64, 0x0010, 0x080c, 0x55b4, 0x0005, 0x00f6, - 0x708c, 0x9005, 0x01d8, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, - 0x0084, 0x1190, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5cda, - 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, - 0x00f6, 0x7097, 0x0019, 0x080c, 0x5c41, 0x2079, 0x0240, 0x7833, - 0x1106, 0x7837, 0x0000, 0x080c, 0x5caf, 0x2009, 0x026e, 0x2039, - 0x1d0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, - 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59c3, - 0x2039, 0x1d0e, 0x080c, 0x5c92, 0x11e8, 0x2728, 0x2514, 0x8207, - 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, - 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1d0e, 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, 0x59f6, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, - 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, - 0x8131, 0x9086, 0x0084, 0x1198, 0x080c, 0x5caf, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, - 0x0001, 0x080c, 0x5c05, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, - 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5cda, 0x7097, - 0x001b, 0x080c, 0x97df, 0x080c, 0x5caf, 0x2011, 0x0260, 0x2009, - 0x0240, 0x748c, 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, 0x5a42, 0x60c3, 0x0084, 0x080c, 0x5b64, - 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, - 0x0008, 0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5caf, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, - 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, - 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, - 0x5a74, 0x0804, 0x5ae3, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, - 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5ae3, 0x918d, - 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, - 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, - 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a9a, 0x04d8, - 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aac, 0x2328, - 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, - 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5abb, 0x755a, - 0x95c8, 0x3184, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, - 0x0016, 0x2508, 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, - 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 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, 0x715a, 0x91a0, 0x3184, - 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, - 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, - 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, - 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, - 0x080c, 0x5bf4, 0x080c, 0x8f9c, 0x7004, 0x9084, 0x4000, 0x0110, - 0x080c, 0x2843, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, - 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c51, - 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, - 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, - 0x27a2, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, - 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x080c, 0x8f8f, 0x6144, 0xd184, 0x0120, 0x7194, - 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a, - 0x2112, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x81f5, 0x0005, - 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x98ad, - 0x080c, 0x9b52, 0x080c, 0x98c9, 0x2009, 0x00f7, 0x080c, 0x5c51, - 0x2061, 0x19d4, 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, - 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, - 0x0010, 0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, - 0x5bc0, 0x080c, 0x8125, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, - 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, - 0x080c, 0x8f9c, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, - 0x080c, 0x2843, 0x080c, 0x70b4, 0x0188, 0x080c, 0x70cf, 0x1170, - 0x080c, 0x73b6, 0x0016, 0x080c, 0x253c, 0x2001, 0x193e, 0x2102, - 0x001e, 0x080c, 0x73b1, 0x080c, 0x6fdd, 0x0050, 0x2009, 0x0001, - 0x080c, 0x281f, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x5b90, - 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, - 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x196a, 0x201c, - 0x080c, 0x48d1, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, - 0x0001, 0x20a1, 0x1d80, 0x080c, 0x5caf, 0x20e9, 0x0000, 0x2099, - 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5ca9, 0x2099, 0x0260, - 0x20a1, 0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5cac, 0x2099, - 0x0260, 0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, - 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c29, - 0x002e, 0x001e, 0x0005, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099, - 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, - 0x0005, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, - 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, - 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, - 0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, - 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, - 0x0016, 0x0046, 0x080c, 0x665c, 0x0158, 0x9006, 0x2020, 0x2009, - 0x002a, 0x080c, 0xd251, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, - 0x2019, 0x002a, 0x900e, 0x080c, 0x2fc2, 0x080c, 0xbf46, 0x0140, - 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4a6e, 0x003e, - 0x004e, 0x001e, 0x0005, 0x080c, 0x5b90, 0x7097, 0x0000, 0x708f, - 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, - 0x1d00, 0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, - 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, - 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, - 0x0001, 0x0005, 0x2001, 0x1977, 0x0118, 0x2003, 0x0001, 0x0010, - 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, - 0x9006, 0x200a, 0x8108, 0x1f04, 0x5ce9, 0x015e, 0x0005, 0x00d6, - 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1853, 0x9006, 0xb802, - 0xb8c6, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3184, - 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, - 0x9b4b, 0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, - 0xb8b4, 0x20e8, 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, - 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, - 0xb83e, 0xb842, 0xb8be, 0xb8c2, 0xb85e, 0xb862, 0xb866, 0xb86a, - 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, - 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, - 0x904d, 0x0110, 0x080c, 0x1054, 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, 0x5dad, 0x9182, 0x0800, 0x1a04, 0x5db1, 0x2001, 0x180c, - 0x2004, 0x9084, 0x0003, 0x1904, 0x5db7, 0x9188, 0x1000, 0x2104, - 0x905d, 0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, - 0xb8a4, 0x900d, 0x1904, 0x5dc9, 0x080c, 0x6123, 0x9006, 0x012e, - 0x0005, 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, - 0x0498, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b4b, 0x1160, 0xb8a0, - 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 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, 0x9065, - 0x09a8, 0x080c, 0x6660, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, - 0x5d70, 0x080c, 0x64d4, 0x0904, 0x5d79, 0x0804, 0x5d74, 0x00e6, - 0x2071, 0x19b8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080, - 0x0004, 0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e58, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0904, 0x5e30, 0xb8a0, 0x9086, 0x007f, - 0x0178, 0x080c, 0x6668, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, - 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6660, 0x1598, - 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, - 0x2010, 0x080c, 0xb81a, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, - 0x5e5a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, - 0x5e5a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, - 0x9b76, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, - 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9c6a, 0x9006, 0x0458, - 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b4b, - 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, - 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, 0x5eef, 0x5eaa, 0x5ec1, 0x5eef, 0x5eef, 0x5eef, - 0x5eef, 0x5eef, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6209, - 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef7, 0xb814, 0x9206, - 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x478b, 0x0150, - 0x04b0, 0x080c, 0x6269, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, - 0x9206, 0x1568, 0x080c, 0x9b76, 0x0530, 0x2b00, 0x6012, 0x080c, - 0xbcc0, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, - 0x9086, 0x0001, 0x1170, 0x080c, 0x3003, 0x9006, 0x080c, 0x61a6, - 0x2001, 0x0002, 0x080c, 0x61ba, 0x2001, 0x0200, 0xb86e, 0xb893, - 0x0002, 0x2009, 0x0003, 0x080c, 0x9c6a, 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, 0x60cc, 0x90c6, 0x0056, 0x0904, 0x60d0, 0x90c6, - 0x0066, 0x0904, 0x60d4, 0x90c6, 0x0067, 0x0904, 0x60d8, 0x90c6, - 0x0068, 0x0904, 0x60dc, 0x90c6, 0x0071, 0x0904, 0x60e0, 0x90c6, - 0x0074, 0x0904, 0x60e4, 0x90c6, 0x007c, 0x0904, 0x60e8, 0x90c6, - 0x007e, 0x0904, 0x60ec, 0x90c6, 0x0037, 0x0904, 0x60f0, 0x9016, - 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c7, 0x9182, - 0x0800, 0x1a04, 0x60c7, 0x080c, 0x6269, 0x1198, 0xb804, 0x9084, - 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, - 0x080c, 0x9b4b, 0x1904, 0x60b0, 0xb8a0, 0x9084, 0xff80, 0x1904, - 0x60b0, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, - 0x6010, 0x90c6, 0x0064, 0x0904, 0x6039, 0x2008, 0x0804, 0x5fd3, - 0xa998, 0xa8b0, 0x2040, 0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f, - 0x0a04, 0x5fd3, 0x9186, 0x00ff, 0x0904, 0x5fd3, 0x9182, 0x0800, - 0x1a04, 0x5fd3, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c, - 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fd3, - 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fd3, - 0x080c, 0x478b, 0x0904, 0x5fdc, 0x900e, 0x9016, 0x90c6, 0x4000, - 0x1558, 0x0006, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, - 0x080c, 0x0f9f, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f9f, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, - 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, - 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, - 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, - 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9b76, 0x1130, 0x2001, - 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, - 0xbcc0, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, - 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x3003, 0x012e, - 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba, 0x2009, - 0x0002, 0x080c, 0x9c6a, 0xa8b0, 0xd094, 0x0118, 0xb8c4, 0xc08d, - 0xb8c6, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, - 0x080c, 0x539a, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, - 0x080c, 0x6269, 0x1904, 0x5fce, 0x9186, 0x007f, 0x0130, 0x080c, - 0x6660, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1022, - 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, - 0x080c, 0xba18, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, - 0x5fd5, 0xa998, 0xaeb0, 0x080c, 0x6269, 0x1904, 0x5fce, 0x0096, - 0x080c, 0x1022, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x608d, - 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, 0x0f9f, 0x009e, 0xa87b, 0x0000, - 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5386, - 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, - 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6660, 0x0118, 0xa89b, 0x0009, - 0x0080, 0x080c, 0x539a, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, - 0xb9fb, 0x1904, 0x6009, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, - 0x5fd5, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, - 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, - 0x1266, 0x080c, 0xa0da, 0x1904, 0x6009, 0x2009, 0x0002, 0x08e8, - 0x2001, 0x0028, 0x900e, 0x0804, 0x600a, 0x2009, 0x180c, 0x210c, - 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, - 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x600a, 0x2001, - 0x0029, 0x900e, 0x0804, 0x600a, 0x080c, 0x35a7, 0x0804, 0x600b, - 0x080c, 0x50bb, 0x0804, 0x600b, 0x080c, 0x434d, 0x0804, 0x600b, - 0x080c, 0x43c6, 0x0804, 0x600b, 0x080c, 0x4422, 0x0804, 0x600b, - 0x080c, 0x4847, 0x0804, 0x600b, 0x080c, 0x4af3, 0x0804, 0x600b, - 0x080c, 0x4d26, 0x0804, 0x600b, 0x080c, 0x4f1f, 0x0804, 0x600b, - 0x080c, 0x37bc, 0x0804, 0x600b, 0x00b6, 0xa974, 0xae78, 0x9684, - 0x3fff, 0x9082, 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0130, 0x080c, 0x6660, 0x1138, 0x00d9, - 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, - 0x1240, 0xb900, 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000, - 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, - 0x9005, 0x00be, 0x0005, 0xa877, 0x0000, 0xb8c0, 0x9005, 0x1904, - 0x619a, 0xb888, 0x9005, 0x1904, 0x619a, 0xb838, 0xb93c, 0x9102, - 0x1a04, 0x619a, 0x2b10, 0x080c, 0x9ba3, 0x0904, 0x6196, 0x8108, - 0xb93e, 0x6212, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, + 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, + 0x05f0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x15a8, + 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, + 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, + 0x0001, 0x080c, 0x5ce1, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, + 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001, + 0x080c, 0x5ce1, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, + 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, + 0x0005, 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, + 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, + 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, + 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c99, 0x1150, 0x7080, + 0x9005, 0x1138, 0x080c, 0x5a61, 0x1188, 0x9085, 0x0001, 0x080c, + 0x248d, 0x20a9, 0x0008, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, + 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, + 0x080c, 0x5b6b, 0x0010, 0x080c, 0x55bb, 0x0005, 0x00f6, 0x708c, + 0x9005, 0x01d8, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084, + 0x1190, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, + 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5ce1, 0x7097, + 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, + 0x7097, 0x0019, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1106, + 0x7837, 0x0000, 0x080c, 0x5cb6, 0x2009, 0x026e, 0x2039, 0x1d0e, + 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, + 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59ca, 0x2039, + 0x1d0e, 0x080c, 0x5c99, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, + 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, + 0x705c, 0x2310, 0x8214, 0x92a0, 0x1d0e, 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, 0x59fd, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, + 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159, + 0x9086, 0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, + 0x080c, 0x5c0c, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000, + 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x001b, + 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2009, 0x0240, + 0x748c, 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, 0x5a49, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x0005, + 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, 0x0008, + 0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cb6, 0x20e1, + 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, + 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, + 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5a7b, + 0x0804, 0x5aea, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, + 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5aea, 0x918d, 0xc000, + 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, + 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, + 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5aa1, 0x04d8, 0x23a8, + 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5ab3, 0x2328, 0x8529, + 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, + 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5ac2, 0x755a, 0x95c8, + 0x318b, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, + 0x2508, 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, + 0x2304, 0x9405, 0x201a, 0x7083, 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, 0x715a, 0x91a0, 0x318b, 0x242d, + 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, + 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084, + 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee, + 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, + 0x5bfb, 0x080c, 0x8fb7, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, + 0x2843, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000, + 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x001e, + 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, + 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x27a2, + 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19c5, + 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, + 0x9575, 0x080c, 0x8faa, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d, + 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a, 0x2112, + 0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x0005, 0x0016, + 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x98c8, 0x080c, + 0x9b6d, 0x080c, 0x98e4, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x2061, + 0x19d4, 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, + 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, + 0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7, + 0x080c, 0x814d, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, + 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, + 0x8fb7, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, + 0x2843, 0x080c, 0x70bf, 0x0188, 0x080c, 0x70da, 0x1170, 0x080c, + 0x73c1, 0x0016, 0x080c, 0x253c, 0x2001, 0x193e, 0x2102, 0x001e, + 0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0050, 0x2009, 0x0001, 0x080c, + 0x281f, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x5b97, 0x012e, + 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, + 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x196a, 0x201c, 0x080c, + 0x48d8, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, + 0x20a1, 0x1d80, 0x080c, 0x5cb6, 0x20e9, 0x0000, 0x2099, 0x026e, + 0x0099, 0x20a9, 0x0020, 0x080c, 0x5cb0, 0x2099, 0x0260, 0x20a1, + 0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5cb3, 0x2099, 0x0260, + 0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, + 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c30, 0x002e, + 0x001e, 0x0005, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00, + 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, + 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260, + 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, + 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, + 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, + 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, + 0x0046, 0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, + 0x080c, 0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, + 0x002a, 0x900e, 0x080c, 0x2fc5, 0x080c, 0xbf61, 0x0140, 0x0036, + 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4a75, 0x003e, 0x004e, + 0x001e, 0x0005, 0x080c, 0x5b97, 0x7097, 0x0000, 0x708f, 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, 0x1d00, + 0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, + 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, + 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, + 0x0005, 0x2001, 0x1977, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, + 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, + 0x200a, 0x8108, 0x1f04, 0x5cf0, 0x015e, 0x0005, 0x00d6, 0x0036, + 0x0156, 0x0136, 0x0146, 0x2069, 0x1853, 0x9006, 0xb802, 0xb8c6, + 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x318b, 0x231d, + 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, 0x9b66, + 0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8b4, + 0x20e8, 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, + 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, + 0xb842, 0xb8be, 0xb8c2, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, + 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, + 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, + 0x0110, 0x080c, 0x1054, 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, + 0x5db4, 0x9182, 0x0800, 0x1a04, 0x5db8, 0x2001, 0x180c, 0x2004, + 0x9084, 0x0003, 0x1904, 0x5dbe, 0x9188, 0x1000, 0x2104, 0x905d, + 0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, + 0x900d, 0x1904, 0x5dd0, 0x080c, 0x612a, 0x9006, 0x012e, 0x0005, + 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, + 0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160, 0xb8a0, 0x9084, + 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 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, 0x9065, 0x09a8, + 0x080c, 0x6667, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d77, + 0x080c, 0x64db, 0x0904, 0x5d80, 0x0804, 0x5d7b, 0x00e6, 0x2071, + 0x19b8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080, 0x0004, + 0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, + 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e5f, 0x9188, 0x1000, + 0x2104, 0x905d, 0x0904, 0x5e37, 0xb8a0, 0x9086, 0x007f, 0x0178, + 0x080c, 0x666f, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, + 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6667, 0x1598, 0xa87c, + 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, + 0x080c, 0xb835, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x5e61, + 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x5e61, + 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0x9b91, + 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, + 0x000a, 0x2009, 0x0003, 0x080c, 0x9c85, 0x9006, 0x0458, 0x2001, + 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160, + 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 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, 0x5ef6, 0x5eb1, 0x5ec8, 0x5ef6, 0x5ef6, 0x5ef6, 0x5ef6, + 0x5ef6, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6210, 0x0148, + 0x9046, 0xb810, 0x9306, 0x1904, 0x5efe, 0xb814, 0x9206, 0x15f0, + 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4792, 0x0150, 0x04b0, + 0x080c, 0x6270, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, + 0x1568, 0x080c, 0x9b91, 0x0530, 0x2b00, 0x6012, 0x080c, 0xbcdb, + 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, + 0x0001, 0x1170, 0x080c, 0x3006, 0x9006, 0x080c, 0x61ad, 0x2001, + 0x0002, 0x080c, 0x61c1, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, + 0x2009, 0x0003, 0x080c, 0x9c85, 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, 0x60d3, 0x90c6, 0x0056, 0x0904, 0x60d7, 0x90c6, 0x0066, + 0x0904, 0x60db, 0x90c6, 0x0067, 0x0904, 0x60df, 0x90c6, 0x0068, + 0x0904, 0x60e3, 0x90c6, 0x0071, 0x0904, 0x60e7, 0x90c6, 0x0074, + 0x0904, 0x60eb, 0x90c6, 0x007c, 0x0904, 0x60ef, 0x90c6, 0x007e, + 0x0904, 0x60f3, 0x90c6, 0x0037, 0x0904, 0x60f7, 0x9016, 0x2079, + 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60ce, 0x9182, 0x0800, + 0x1a04, 0x60ce, 0x080c, 0x6270, 0x1198, 0xb804, 0x9084, 0x00ff, + 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, + 0x9b66, 0x1904, 0x60b7, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x60b7, + 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x6017, + 0x90c6, 0x0064, 0x0904, 0x6040, 0x2008, 0x0804, 0x5fda, 0xa998, + 0xa8b0, 0x2040, 0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, + 0x5fda, 0x9186, 0x00ff, 0x0904, 0x5fda, 0x9182, 0x0800, 0x1a04, + 0x5fda, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c, 0x0096, + 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fda, 0x99cc, + 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fda, 0x080c, + 0x4792, 0x0904, 0x5fe3, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1558, + 0x0006, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, + 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, + 0x0f9f, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, + 0x0f9f, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0, + 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009, + 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009, + 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001, + 0x0030, 0x900e, 0x0470, 0x080c, 0x9b91, 0x1130, 0x2001, 0x4005, + 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, 0xbcdb, + 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, + 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x3006, 0x012e, 0x9006, + 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009, 0x0002, + 0x080c, 0x9c85, 0xa8b0, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, + 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, + 0x53a1, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c, + 0x6270, 0x1904, 0x5fd5, 0x9186, 0x007f, 0x0130, 0x080c, 0x6667, + 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1022, 0x1120, + 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, 0x080c, + 0xba33, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc, + 0xa998, 0xaeb0, 0x080c, 0x6270, 0x1904, 0x5fd5, 0x0096, 0x080c, + 0x1022, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x6094, 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, 0x0f9f, 0x009e, 0xa87b, 0x0000, 0xa883, + 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x538d, 0xd0b4, + 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, + 0x000c, 0x00b0, 0x080c, 0x6667, 0x0118, 0xa89b, 0x0009, 0x0080, + 0x080c, 0x53a1, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, 0xba16, + 0x1904, 0x6010, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc, + 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, + 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266, + 0x080c, 0xa0f5, 0x1904, 0x6010, 0x2009, 0x0002, 0x08e8, 0x2001, + 0x0028, 0x900e, 0x0804, 0x6011, 0x2009, 0x180c, 0x210c, 0xd18c, + 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, + 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x6011, 0x2001, 0x0029, + 0x900e, 0x0804, 0x6011, 0x080c, 0x35ae, 0x0804, 0x6012, 0x080c, + 0x50c2, 0x0804, 0x6012, 0x080c, 0x4354, 0x0804, 0x6012, 0x080c, + 0x43cd, 0x0804, 0x6012, 0x080c, 0x4429, 0x0804, 0x6012, 0x080c, + 0x484e, 0x0804, 0x6012, 0x080c, 0x4afa, 0x0804, 0x6012, 0x080c, + 0x4d2d, 0x0804, 0x6012, 0x080c, 0x4f26, 0x0804, 0x6012, 0x080c, + 0x37c3, 0x0804, 0x6012, 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff, + 0x9082, 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188, 0x1000, + 0x2104, 0x905d, 0x0130, 0x080c, 0x6667, 0x1138, 0x00d9, 0x9006, + 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, 0x1240, + 0xb900, 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000, 0x0038, + 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, + 0x00be, 0x0005, 0xa877, 0x0000, 0xb8c0, 0x9005, 0x1904, 0x61a1, + 0xb888, 0x9005, 0x1904, 0x61a1, 0xb838, 0xb93c, 0x9102, 0x1a04, + 0x61a1, 0x2b10, 0x080c, 0x9bbe, 0x0904, 0x619d, 0x8108, 0xb93e, + 0x6212, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, + 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, + 0x0000, 0xa87c, 0xd0ac, 0x05c0, 0xc0dd, 0xa87e, 0xa888, 0x8001, + 0x1568, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, + 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, + 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, + 0x000f, 0x8001, 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, 0x6046, + 0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, + 0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, 0x164f, + 0x601c, 0xc0bd, 0x601e, 0x0c38, 0x0006, 0x2001, 0x00e8, 0x8001, + 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0xd0b4, 0x190c, 0x1ad2, + 0x2001, 0x8004, 0x6003, 0x0002, 0x08d0, 0x81ff, 0x1110, 0xb88b, + 0x0001, 0x2908, 0xb8bc, 0xb9be, 0x9005, 0x1110, 0xb9c2, 0x0020, + 0x0096, 0x2048, 0xa902, 0x009e, 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, 0x6663, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, + 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, + 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d65, + 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, + 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, + 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x665f, 0x1138, 0x9284, + 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, + 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, + 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, + 0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x1022, + 0x2958, 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, + 0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x5cf6, 0x9006, 0x0010, 0x9085, + 0x0001, 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, 0x1054, 0x00d6, 0x00c6, 0xb8ac, + 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, + 0xb847, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x9be7, 0x00ce, 0x0c88, + 0x00ce, 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, + 0x1064, 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, 0x70b7, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, + 0x080c, 0x9b66, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, + 0x2061, 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, + 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, + 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 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, 0xbbc4, + 0xc384, 0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec, + 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, + 0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, + 0xba02, 0xbbc6, 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, 0x0d65, + 0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, + 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1022, 0x0170, + 0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x64fb, 0xa807, 0x0001, + 0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, + 0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, + 0x9005, 0x1150, 0x080c, 0x650a, 0x1158, 0xa804, 0x908a, 0x0002, + 0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1054, 0xb8a7, 0x0000, + 0x009e, 0x012e, 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, + 0x63f4, 0xb8c0, 0x904d, 0x0904, 0x63f4, 0x080c, 0x9bbe, 0x0904, + 0x63f0, 0x8210, 0xba3e, 0xa800, 0xb8c2, 0x9005, 0x1108, 0xb8be, + 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, - 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x05c0, 0xc0dd, 0xa87e, 0xa888, - 0x8001, 0x1568, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, - 0x1dd8, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, - 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, - 0x2001, 0x000f, 0x8001, 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, - 0x6046, 0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, - 0x0010, 0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, - 0x164f, 0x601c, 0xc0bd, 0x601e, 0x0c38, 0x0006, 0x2001, 0x00e8, - 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0xd0b4, 0x190c, - 0x1ad2, 0x2001, 0x8004, 0x6003, 0x0002, 0x08d0, 0x81ff, 0x1110, - 0xb88b, 0x0001, 0x2908, 0xb8bc, 0xb9be, 0x9005, 0x1110, 0xb9c2, - 0x0020, 0x0096, 0x2048, 0xa902, 0x009e, 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, 0x665c, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, - 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, - 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, - 0x0d65, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, - 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, - 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6658, 0x1138, - 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, - 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, - 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, - 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, - 0x1022, 0x2958, 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, - 0xb860, 0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x5cef, 0x9006, 0x0010, - 0x9085, 0x0001, 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, 0x1054, 0x00d6, 0x00c6, - 0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, - 0x080c, 0xb82c, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x9bcc, 0x00ce, - 0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, - 0x080c, 0x1064, 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, 0x70ac, 0x1510, 0xb8a0, 0x9086, 0x007e, - 0x0120, 0x080c, 0x9b4b, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, - 0x00c6, 0x2061, 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, - 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, - 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 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, - 0xbbc4, 0xc384, 0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, - 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, - 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, - 0xc2bc, 0xba02, 0xbbc6, 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, - 0x0d65, 0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, - 0xaa06, 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1022, - 0x0170, 0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x64f4, 0xa807, - 0x0001, 0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, - 0x0cd8, 0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, - 0xa800, 0x9005, 0x1150, 0x080c, 0x6503, 0x1158, 0xa804, 0x908a, - 0x0002, 0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1054, 0xb8a7, - 0x0000, 0x009e, 0x012e, 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, - 0x1904, 0x63ed, 0xb8c0, 0x904d, 0x0904, 0x63ed, 0x080c, 0x9ba3, - 0x0904, 0x63e9, 0x8210, 0xba3e, 0xa800, 0xb8c2, 0x9005, 0x1108, - 0xb8be, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, - 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, - 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, - 0xa888, 0x8001, 0x1568, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, - 0x0011, 0x1530, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, - 0xa836, 0xaa3a, 0x2001, 0x8004, 0x6003, 0x0004, 0x0030, 0x080c, - 0x1ad2, 0x2001, 0x8004, 0x6003, 0x0002, 0x6046, 0x2001, 0x0010, - 0x2c08, 0x080c, 0x989e, 0xb838, 0xba3c, 0x9202, 0x0a04, 0x639a, - 0x0020, 0x82ff, 0x1110, 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, - 0x080c, 0x164f, 0x601c, 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, - 0x0016, 0x20a9, 0x0800, 0x900e, 0x0016, 0x080c, 0x6269, 0x1158, - 0xb8c0, 0x904d, 0x0140, 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, - 0xd0bc, 0x1108, 0x0041, 0x001e, 0x8108, 0x1f04, 0x63fc, 0x001e, - 0x00be, 0x009e, 0x0005, 0x0096, 0x0016, 0xb8c0, 0x904d, 0x0188, - 0xa800, 0xb8c2, 0x9005, 0x1108, 0xb8be, 0x9006, 0xa802, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb2a, 0x080c, 0x698f, - 0x0c60, 0x001e, 0x009e, 0x0005, 0x0086, 0x9046, 0xb8c0, 0x904d, - 0x0198, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0128, 0x2940, - 0xa800, 0x904d, 0x0148, 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8c2, - 0x0008, 0xa002, 0xa803, 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, - 0x2019, 0x0001, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, - 0x2091, 0x8000, 0x2071, 0x19b8, 0x9046, 0x7028, 0x9065, 0x01e8, - 0x6014, 0x2068, 0x83ff, 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, - 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, - 0x2060, 0x0c60, 0x600c, 0x0006, 0x0066, 0x2830, 0x080c, 0x90f5, - 0x006e, 0x000e, 0x83ff, 0x0508, 0x0c08, 0x9046, 0xb8c0, 0x904d, - 0x01e0, 0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, - 0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, - 0x0c70, 0xb8c0, 0xaa00, 0x0026, 0x9906, 0x1110, 0xbac2, 0x0008, - 0xa202, 0x000e, 0x83ff, 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, - 0x009e, 0x00ee, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, - 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb8ed, 0x0010, 0x9085, - 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb88e, 0x0010, - 0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb8ea, - 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, - 0xb8ad, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, - 0x080c, 0xb92e, 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, + 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, + 0x8001, 0x1568, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, + 0x1530, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, + 0xaa3a, 0x2001, 0x8004, 0x6003, 0x0004, 0x0030, 0x080c, 0x1ad2, + 0x2001, 0x8004, 0x6003, 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, + 0x080c, 0x98b9, 0xb838, 0xba3c, 0x9202, 0x0a04, 0x63a1, 0x0020, + 0x82ff, 0x1110, 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, + 0x164f, 0x601c, 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, + 0x20a9, 0x0800, 0x900e, 0x0016, 0x080c, 0x6270, 0x1158, 0xb8c0, + 0x904d, 0x0140, 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, + 0x1108, 0x0041, 0x001e, 0x8108, 0x1f04, 0x6403, 0x001e, 0x00be, + 0x009e, 0x0005, 0x0096, 0x0016, 0xb8c0, 0x904d, 0x0188, 0xa800, + 0xb8c2, 0x9005, 0x1108, 0xb8be, 0x9006, 0xa802, 0xa867, 0x0103, + 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x0c60, + 0x001e, 0x009e, 0x0005, 0x0086, 0x9046, 0xb8c0, 0x904d, 0x0198, + 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0128, 0x2940, 0xa800, + 0x904d, 0x0148, 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8c2, 0x0008, + 0xa002, 0xa803, 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019, + 0x0001, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, + 0x8000, 0x2071, 0x19b8, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, + 0x2068, 0x83ff, 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, + 0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, + 0x0c60, 0x600c, 0x0006, 0x0066, 0x2830, 0x080c, 0x9110, 0x006e, + 0x000e, 0x83ff, 0x0508, 0x0c08, 0x9046, 0xb8c0, 0x904d, 0x01e0, + 0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, + 0x1118, 0xa870, 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, + 0xb8c0, 0xaa00, 0x0026, 0x9906, 0x1110, 0xbac2, 0x0008, 0xa202, + 0x000e, 0x83ff, 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, + 0x00ee, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, + 0x080c, 0x655f, 0x0128, 0x080c, 0xb908, 0x0010, 0x9085, 0x0001, + 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8a9, 0x0010, 0x9085, + 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb905, 0x0010, + 0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8c8, + 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, + 0xb949, 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, 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, 0x1022, - 0x0168, 0x2900, 0xb8a6, 0x080c, 0x64f4, 0xa803, 0x0001, 0xa807, - 0x0000, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, - 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, - 0x0000, 0x080c, 0x1054, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, - 0xb89c, 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x70ac, 0x01b0, - 0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, - 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, - 0x7804, 0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, - 0x6269, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, - 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, - 0x8108, 0x1f04, 0x657e, 0x015e, 0x080c, 0x661e, 0x0120, 0x2001, - 0x1956, 0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, - 0x07d0, 0x2011, 0x65a8, 0x080c, 0x81f5, 0x00fe, 0x00be, 0x0005, - 0x00b6, 0x2011, 0x65a8, 0x080c, 0x8131, 0x080c, 0x661e, 0x01d8, - 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, - 0x665c, 0x0130, 0x2009, 0x07d0, 0x2011, 0x65a8, 0x080c, 0x81f5, - 0x00e6, 0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, - 0x2ddb, 0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x080c, 0x6269, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, - 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd251, 0xb800, - 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6658, 0x2001, 0x0707, 0x1128, - 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0x98ad, - 0x2019, 0x0029, 0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502, - 0x900e, 0x080c, 0xcfa6, 0x007e, 0x004e, 0x080c, 0x98c9, 0x001e, - 0x8108, 0x1f04, 0x65d0, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, - 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, - 0x905d, 0x0108, 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, 0x0d65, 0x000e, 0xba00, - 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, - 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1954, - 0x200c, 0x2011, 0x664e, 0x080c, 0x81f5, 0x0005, 0x2011, 0x664e, - 0x080c, 0x8131, 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, - 0x080c, 0x5386, 0xd0ac, 0x0005, 0x080c, 0x5386, 0xd0a4, 0x0005, - 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, - 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, - 0x0005, 0x00b6, 0x00f6, 0x080c, 0xbf46, 0x0158, 0x70d8, 0x9084, - 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8c4, - 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, - 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, 0x3184, 0x203d, - 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, - 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, - 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, - 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, - 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, - 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, - 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, - 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, - 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, - 0x9184, 0x8000, 0x0580, 0x2001, 0x1817, 0x203c, 0x9780, 0x3184, - 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, - 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, - 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, - 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, - 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, - 0x004e, 0x9006, 0x0005, 0x2071, 0x1906, 0x7003, 0x0001, 0x7007, - 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, - 0x2001, 0x1919, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, - 0x191a, 0x900e, 0x710a, 0x080c, 0x5386, 0xd0fc, 0x1140, 0x080c, - 0x5386, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0400, 0x2001, - 0x1873, 0x200c, 0x9184, 0x0007, 0x9006, 0x0002, 0x6737, 0x6737, - 0x6737, 0x6737, 0x6737, 0x674e, 0x675c, 0x6737, 0x7003, 0x0003, - 0x2009, 0x1874, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, - 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, - 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, - 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, - 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x741e, 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, 0x1906, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, - 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11d8, - 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, 0x9005, 0x0904, 0x6994, - 0xa87c, 0xd0bc, 0x1904, 0x6994, 0xa978, 0xa874, 0x9105, 0x1904, - 0x6994, 0x2001, 0x191a, 0x2004, 0x0002, 0x6994, 0x67e8, 0x6824, - 0x6824, 0x6994, 0x6824, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, - 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, 0x6994, 0xa87c, - 0xd0cc, 0x0904, 0x6994, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, - 0x1904, 0x6994, 0x9186, 0x0003, 0x0904, 0x6824, 0x9186, 0x0005, - 0x0904, 0x6824, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, - 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1906, 0x701c, 0x9005, - 0x1904, 0x6b37, 0x0e04, 0x6b82, 0x2071, 0x0000, 0xa84c, 0x7082, - 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, - 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, - 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x002e, - 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, - 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, - 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, - 0x6919, 0x782c, 0x908c, 0x0780, 0x190c, 0x6ca9, 0x8004, 0x8004, - 0x8004, 0x9084, 0x0003, 0x0002, 0x6842, 0x6919, 0x6867, 0x68b4, - 0x080c, 0x0d65, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, - 0x1170, 0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, - 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, - 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0c10, 0x2071, - 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6, - 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, - 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, - 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x2071, 0x19d4, 0x703c, - 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, - 0x080c, 0x804c, 0x0804, 0x686e, 0x0096, 0x00e6, 0x7824, 0x2048, - 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, - 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, - 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, - 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, - 0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, - 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, - 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, - 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4, - 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, - 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x00fe, 0x002e, 0x00ee, - 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, - 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, - 0x696e, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x1198, - 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, - 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6ca9, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, - 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x1d60, 0x00ee, + 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, 0x1022, 0x0168, + 0x2900, 0xb8a6, 0x080c, 0x64fb, 0xa803, 0x0001, 0xa807, 0x0000, + 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, + 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, + 0x080c, 0x1054, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, + 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x70b7, 0x01b0, 0x71c0, + 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, + 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, + 0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270, + 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, + 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, + 0x1f04, 0x6585, 0x015e, 0x080c, 0x6625, 0x0120, 0x2001, 0x1956, + 0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0, + 0x2011, 0x65af, 0x080c, 0x821d, 0x00fe, 0x00be, 0x0005, 0x00b6, + 0x2011, 0x65af, 0x080c, 0x8159, 0x080c, 0x6625, 0x01d8, 0x2001, + 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6663, + 0x0130, 0x2009, 0x07d0, 0x2011, 0x65af, 0x080c, 0x821d, 0x00e6, + 0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ddb, + 0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, + 0x080c, 0x6270, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, + 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd273, 0xb800, 0xc0e5, + 0xc0ec, 0xb802, 0x080c, 0x665f, 0x2001, 0x0707, 0x1128, 0xb804, + 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0x98c8, 0x2019, + 0x0029, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x900e, + 0x080c, 0xcfc8, 0x007e, 0x004e, 0x080c, 0x98e4, 0x001e, 0x8108, + 0x1f04, 0x65d7, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, + 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, + 0x0108, 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, 0x0d65, 0x000e, 0xba00, 0x9005, + 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, + 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1954, 0x200c, + 0x2011, 0x6655, 0x080c, 0x821d, 0x0005, 0x2011, 0x6655, 0x080c, + 0x8159, 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, + 0x538d, 0xd0ac, 0x0005, 0x080c, 0x538d, 0xd0a4, 0x0005, 0x0016, + 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, + 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, + 0x00b6, 0x00f6, 0x080c, 0xbf61, 0x0158, 0x70d8, 0x9084, 0x0028, + 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8c4, 0xd094, + 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, + 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d, 0x97bc, + 0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, + 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, + 0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, + 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, + 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, + 0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, + 0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, + 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, + 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, + 0x8000, 0x0580, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d, + 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, + 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, + 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, + 0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, + 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, + 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, + 0x9006, 0x0005, 0x2071, 0x1906, 0x7003, 0x0001, 0x7007, 0x0000, + 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, + 0x1919, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x191a, + 0x900e, 0x710a, 0x080c, 0x538d, 0xd0fc, 0x1140, 0x080c, 0x538d, + 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0400, 0x2001, 0x1873, + 0x200c, 0x9184, 0x0007, 0x9006, 0x0002, 0x673e, 0x673e, 0x673e, + 0x673e, 0x673e, 0x6755, 0x6763, 0x673e, 0x7003, 0x0003, 0x2009, + 0x1874, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, + 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, + 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, + 0x2071, 0x1906, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, + 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x7429, 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, + 0x1906, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, + 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11d8, 0x00e6, + 0x0026, 0x2001, 0x191a, 0x2004, 0x9005, 0x0904, 0x699b, 0xa87c, + 0xd0bc, 0x1904, 0x699b, 0xa978, 0xa874, 0x9105, 0x1904, 0x699b, + 0x2001, 0x191a, 0x2004, 0x0002, 0x699b, 0x67ef, 0x682b, 0x682b, + 0x699b, 0x682b, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, + 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, 0x699b, 0xa87c, 0xd0cc, + 0x0904, 0x699b, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, + 0x699b, 0x9186, 0x0003, 0x0904, 0x682b, 0x9186, 0x0005, 0x0904, + 0x682b, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, + 0x8020, 0xa853, 0x0016, 0x2071, 0x1906, 0x701c, 0x9005, 0x1904, + 0x6b3e, 0x0e04, 0x6b89, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, + 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, 0x1800, + 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, + 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x002e, 0x00ee, + 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, + 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6920, + 0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004, + 0x9084, 0x0003, 0x0002, 0x6849, 0x6920, 0x686e, 0x68bb, 0x080c, + 0x0d65, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, - 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, - 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, - 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, - 0x00ee, 0x0804, 0x6929, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, - 0xa807, 0x0000, 0x904d, 0x190c, 0x0fd4, 0x009e, 0x0018, 0xa868, - 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, - 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, - 0x6ab1, 0x782c, 0x908c, 0x0780, 0x190c, 0x6ca9, 0x8004, 0x8004, - 0x8004, 0x9084, 0x0003, 0x0002, 0x69b3, 0x6ab1, 0x69ce, 0x6a40, - 0x080c, 0x0d65, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, - 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, + 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0c60, 0x2071, 0x1800, - 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6a2f, 0x7830, 0xd0dc, - 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, + 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0c10, 0x2071, 0x1800, + 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, - 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, - 0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x0e04, 0x6a26, 0x7838, 0x7938, - 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, - 0x00de, 0x2001, 0x1917, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, - 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1917, - 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, - 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0804, 0x69dd, - 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, - 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, - 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, - 0x6a84, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, - 0x1919, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, - 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, 0x080c, 0x804c, 0x00fe, 0x002e, 0x00ee, - 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, - 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, - 0x6b22, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x11b0, - 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, - 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, - 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x0d50, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, - 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, - 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, - 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6b1b, 0x7838, 0x7938, 0x910e, + 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x2071, 0x19d4, 0x703c, 0x9005, + 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, + 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, + 0x8074, 0x0804, 0x6875, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, + 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, + 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, + 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, + 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, + 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, + 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, + 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, + 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4, 0x703c, + 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, + 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, + 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, + 0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, + 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6975, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x1198, 0x701c, + 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, + 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, + 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, + 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, + 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x2071, + 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, + 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x00ee, + 0x0804, 0x6930, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807, + 0x0000, 0x904d, 0x190c, 0x0fd4, 0x009e, 0x0018, 0xa868, 0xd0fc, + 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, + 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6ab8, + 0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004, + 0x9084, 0x0003, 0x0002, 0x69ba, 0x6ab8, 0x69d5, 0x6a47, 0x080c, + 0x0d65, 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, 0x080c, 0x8074, 0x0c60, 0x2071, 0x1800, 0x2900, + 0x7822, 0xa804, 0x900d, 0x1904, 0x6a36, 0x7830, 0xd0dc, 0x1120, + 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, + 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, + 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, + 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, + 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6cb0, 0xd0a4, 0x19c8, 0x0e04, 0x6a2d, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, - 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, - 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, + 0x2001, 0x1917, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, 0x200b, + 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1917, 0x200c, + 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, + 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, + 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0804, 0x69e4, 0x0096, + 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, + 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a8b, + 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, + 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, + 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 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, 0x080c, 0x804c, 0x00ee, 0x0804, 0x6ac1, 0x2071, - 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, - 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, - 0x900d, 0x1128, 0x1e04, 0x6b62, 0x002e, 0x00ee, 0x0005, 0x2071, + 0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, + 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6b29, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x11b0, 0x701c, + 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, + 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6cb0, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071, + 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, + 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, + 0x1d60, 0x00ee, 0x0e04, 0x6b22, 0x7838, 0x7938, 0x910e, 0x1de0, + 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, + 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11be, 0x2009, 0x1919, 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, 0x080c, 0x8074, 0x00ee, 0x0804, 0x6ac8, 0x2071, 0x1906, + 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, + 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, + 0x1128, 0x1e04, 0x6b69, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, + 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0e04, + 0x6b53, 0x2071, 0x1906, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, + 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, + 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11be, 0x2071, 0x1906, 0x080c, 0x6c9c, 0x002e, 0x00ee, + 0x0005, 0x2071, 0x1906, 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, 0x080c, 0x804c, - 0x0e04, 0x6b4c, 0x2071, 0x1906, 0x701c, 0x2048, 0xa84c, 0x900d, - 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, - 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x11be, 0x2071, 0x1906, 0x080c, 0x6c95, 0x002e, - 0x00ee, 0x0005, 0x2071, 0x1906, 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, 0x080c, - 0x804c, 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, 0x1906, 0x7004, 0x0002, 0x6bcd, - 0x6bce, 0x6c94, 0x6bce, 0x0d65, 0x6c94, 0x0005, 0x2001, 0x191a, - 0x2004, 0x0002, 0x6bd8, 0x6bd8, 0x6c2d, 0x6c2e, 0x6bd8, 0x6c2e, - 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6cb4, 0x701c, 0x904d, 0x01e0, - 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6bfc, 0xa94c, 0x2071, 0x0000, - 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, - 0x2071, 0x1906, 0x080c, 0x6c95, 0x012e, 0x0470, 0x2001, 0x005b, - 0x2004, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x2071, 0x1906, - 0x1510, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, - 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, - 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, - 0x1906, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, - 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, - 0x2069, 0x19d4, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, - 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1b1e, 0x210c, 0x9102, - 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, - 0x9106, 0x0190, 0x0e04, 0x6c60, 0x2069, 0x0000, 0x6837, 0x8040, - 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x11be, 0x2069, 0x19d4, 0x683f, 0xffff, - 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6d2a, 0x701c, - 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, - 0xd09c, 0x1500, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, - 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, - 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, + 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, 0x1906, 0x7004, 0x0002, 0x6bd4, 0x6bd5, + 0x6c9b, 0x6bd5, 0x0d65, 0x6c9b, 0x0005, 0x2001, 0x191a, 0x2004, + 0x0002, 0x6bdf, 0x6bdf, 0x6c34, 0x6c35, 0x6bdf, 0x6c35, 0x0126, + 0x2091, 0x8000, 0x1e0c, 0x6cbb, 0x701c, 0x904d, 0x01e0, 0xa84c, + 0x9005, 0x01d8, 0x0e04, 0x6c03, 0xa94c, 0x2071, 0x0000, 0x7182, + 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, + 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, + 0x1906, 0x080c, 0x6c9c, 0x012e, 0x0470, 0x2001, 0x005b, 0x2004, + 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x2071, 0x1906, 0x1510, + 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, + 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, + 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1906, 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, 0x1054, 0x0005, 0x012e, - 0x0005, 0x2091, 0x8000, 0x0e04, 0x6cab, 0x0006, 0x0016, 0x2001, - 0x8004, 0x0006, 0x0804, 0x0d6e, 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, 0x11be, - 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, - 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1919, 0x2104, - 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800, - 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, - 0x182f, 0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, - 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, - 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x7838, - 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, - 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x11be, 0x2009, 0x1919, 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, 0x11be, 0x00fe, 0x0005, 0x782c, - 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x0db8, 0x00e6, 0x2071, - 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, - 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6ca9, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, - 0x191a, 0x6808, 0x690a, 0x2069, 0x19d4, 0x9102, 0x1118, 0x683c, - 0x9005, 0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, - 0x00ee, 0x00fe, 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0d65, - 0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, 0x286d, - 0x002e, 0x0005, 0x6e52, 0x6ddc, 0x6df8, 0x6e20, 0x6e41, 0x6e81, - 0x6e93, 0x6df8, 0x6e69, 0x6d97, 0x6dc5, 0x6d96, 0x0005, 0x00d6, - 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, - 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x71ed, - 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, 0x2069, - 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, - 0x0036, 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e, - 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, - 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, 0x0028, - 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x728f, 0x6028, 0x9085, - 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, - 0x2833, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6f04, 0xd1d4, - 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, 0x080c, - 0x6f04, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, - 0x2001, 0x0088, 0x080c, 0x2833, 0x6124, 0xd1cc, 0x11d8, 0xd1dc, - 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001, - 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70d8, 0x2001, 0x0080, 0x080c, - 0x2833, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, 0x0040, 0x7097, - 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, - 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70d8, 0x2001, - 0x0080, 0x080c, 0x2833, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, - 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0028, 0x0040, - 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, - 0x0005, 0x2001, 0x00a0, 0x080c, 0x2833, 0x6124, 0xd1dc, 0x1138, - 0xd1e4, 0x0138, 0x080c, 0x1989, 0x7097, 0x001e, 0x0010, 0x7097, - 0x001d, 0x0005, 0x080c, 0x6f8d, 0x6124, 0xd1dc, 0x1188, 0x080c, - 0x6f04, 0x0016, 0x080c, 0x1989, 0x001e, 0xd1d4, 0x1128, 0xd1e4, - 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x6f04, - 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2833, 0x000e, 0x6124, - 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, - 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, - 0x0005, 0x080c, 0x6f8d, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2833, - 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, - 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, - 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x2091, 0x8000, 0x080c, 0x70ac, 0x11f8, 0x2001, 0x180c, - 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200, - 0x080c, 0x286d, 0x002e, 0x080c, 0x2819, 0x6024, 0xd0cc, 0x0148, - 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, 0x5cd5, - 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x70c6, 0x0150, - 0x080c, 0x70bd, 0x1138, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, - 0x7080, 0x00a0, 0x080c, 0x6f8a, 0x0178, 0x2001, 0x0001, 0x080c, - 0x23c9, 0x7094, 0x9086, 0x001e, 0x0120, 0x7094, 0x9086, 0x0022, - 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, 0x0021, 0x012e, 0x00ee, - 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6f15, 0x080c, - 0x8237, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x6f15, - 0x080c, 0x822e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, - 0x080c, 0x8f9c, 0x2071, 0x1800, 0x080c, 0x6eae, 0x001e, 0x00fe, - 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x0126, 0x080c, 0x8f9c, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x080c, - 0x98ad, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, - 0x9328, 0x080c, 0x91eb, 0x080c, 0x81e3, 0x0036, 0x901e, 0x080c, - 0x926b, 0x003e, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9, - 0x080c, 0xd5f4, 0x2009, 0x0004, 0x080c, 0x281f, 0x080c, 0x273f, - 0x2001, 0x1800, 0x2003, 0x0004, 0x2011, 0x0008, 0x080c, 0x286d, - 0x2011, 0x6f15, 0x080c, 0x8237, 0x080c, 0x70c6, 0x0118, 0x9006, - 0x080c, 0x2833, 0x080c, 0x0bab, 0x2001, 0x0001, 0x080c, 0x23c9, - 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, - 0x0005, 0x0026, 0x00e6, 0x2011, 0x6f22, 0x2071, 0x19d4, 0x701c, - 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, - 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, - 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2833, 0x0156, - 0x20a9, 0x002d, 0x1d04, 0x6f9a, 0x2091, 0x6000, 0x1f04, 0x6f9a, - 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, 0x8001, 0x0220, 0x0118, - 0x689a, 0x00de, 0x0005, 0x689b, 0x0014, 0x68e8, 0xd0dc, 0x0dc8, - 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8243, 0x0c90, 0x00c6, - 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x080c, 0x73bb, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, - 0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, 0x080c, 0x2833, 0x080c, - 0x5b90, 0x0026, 0x2011, 0xffff, 0x080c, 0x286d, 0x002e, 0x602b, - 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, - 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x194e, - 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, - 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7070, 0x7097, - 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, - 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, - 0x080c, 0x2498, 0x080c, 0x98ad, 0x0026, 0x080c, 0x9b52, 0x002e, - 0x080c, 0x98c9, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, - 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, - 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, 0xbf46, - 0x0118, 0x9006, 0x080c, 0x285d, 0x0804, 0x707c, 0x6800, 0x9084, - 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2819, 0x6904, 0xd1d4, 0x1140, - 0x2001, 0x0100, 0x080c, 0x2833, 0x1f04, 0x7021, 0x080c, 0x7103, - 0x012e, 0x015e, 0x080c, 0x70bd, 0x0170, 0x6044, 0x9005, 0x0130, - 0x080c, 0x7103, 0x9006, 0x8001, 0x1df0, 0x0028, 0x6804, 0xd0d4, - 0x1110, 0x080c, 0x7103, 0x080c, 0xbf46, 0x0118, 0x9006, 0x080c, - 0x285d, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, - 0x00c8, 0x2011, 0x6f22, 0x080c, 0x81f5, 0x002e, 0x001e, 0x080c, - 0x8043, 0x7034, 0xc085, 0x7036, 0x2001, 0x194e, 0x2003, 0x0004, - 0x080c, 0x6d7b, 0x080c, 0x70bd, 0x0138, 0x6804, 0xd0d4, 0x1120, - 0xd0dc, 0x1100, 0x080c, 0x73b1, 0x00ee, 0x00de, 0x00ce, 0x0005, + 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, + 0x19d4, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, + 0x2001, 0x1814, 0x2004, 0x2009, 0x1b1e, 0x210c, 0x9102, 0x1500, + 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, + 0x0190, 0x0e04, 0x6c67, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, + 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x190c, 0x11be, 0x2069, 0x19d4, 0x683f, 0xffff, 0x012e, + 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6d31, 0x701c, 0x904d, + 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, + 0x1500, 0x2071, 0x1906, 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, 0x1054, 0x0005, 0x012e, 0x0005, + 0x2091, 0x8000, 0x0e04, 0x6cb2, 0x0006, 0x0016, 0x2001, 0x8004, + 0x0006, 0x0804, 0x0d6e, 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, 0x11be, 0x2009, + 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, + 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1919, 0x2104, 0x8000, + 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800, 0x7824, + 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, + 0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, + 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, + 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x7838, 0x7938, + 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, + 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x11be, 0x2009, 0x1919, 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, 0x11be, 0x00fe, 0x0005, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, + 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, + 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, + 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, + 0x6808, 0x690a, 0x2069, 0x19d4, 0x9102, 0x1118, 0x683c, 0x9005, + 0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, + 0x00fe, 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0d65, 0x9082, + 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, 0x286d, 0x002e, + 0x0005, 0x6e5d, 0x6de3, 0x6dff, 0x6e29, 0x6e4c, 0x6e8c, 0x6e9e, + 0x6dff, 0x6e74, 0x6d9e, 0x6dcc, 0x6d9d, 0x0005, 0x00d6, 0x2069, + 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x7097, + 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x71f8, 0x6028, + 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, 0x2069, 0x1960, + 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036, + 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e, 0x004e, + 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, + 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, 0x0028, 0x2069, + 0x1960, 0x2d04, 0x7002, 0x080c, 0x729a, 0x6028, 0x9085, 0x0600, + 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2833, + 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6f0f, 0xd1d4, 0x1160, + 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, 0x080c, 0x6f0f, + 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001, + 0x0088, 0x080c, 0x2833, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, + 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1989, 0x60e3, + 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70e3, 0x2001, 0x0080, + 0x080c, 0x2833, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, 0x0040, + 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, + 0x0005, 0x080c, 0x1989, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, + 0x080c, 0x70e3, 0x2001, 0x0080, 0x080c, 0x2833, 0x6124, 0xd1d4, + 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, + 0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, + 0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2833, + 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1989, 0x7097, + 0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c, 0x6f98, 0x6124, + 0xd1dc, 0x1188, 0x080c, 0x6f0f, 0x0016, 0x080c, 0x1989, 0x001e, + 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, + 0x001f, 0x080c, 0x6f0f, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, + 0x2833, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, + 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, + 0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6f98, 0x6124, 0xd1d4, + 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, + 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, + 0x0090, 0x080c, 0x2833, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, + 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, + 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, + 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, + 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x70b7, + 0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, + 0x0026, 0x2011, 0x0200, 0x080c, 0x286d, 0x002e, 0x080c, 0x2819, + 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, + 0x73b7, 0x080c, 0x5cdc, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, + 0x080c, 0x70d1, 0x0150, 0x080c, 0x70c8, 0x1138, 0x2001, 0x0001, + 0x080c, 0x23c9, 0x080c, 0x708b, 0x00a0, 0x080c, 0x6f95, 0x0178, + 0x2001, 0x0001, 0x080c, 0x23c9, 0x7094, 0x9086, 0x001e, 0x0120, + 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, + 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, + 0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x0016, 0x0026, 0x2009, + 0x0064, 0x2011, 0x6f20, 0x080c, 0x8256, 0x002e, 0x001e, 0x0005, + 0x00e6, 0x00f6, 0x0016, 0x080c, 0x8fb7, 0x2071, 0x1800, 0x080c, + 0x6eb9, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8fb7, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, + 0xc09c, 0x602a, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, + 0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x080c, 0x820b, + 0x0036, 0x901e, 0x080c, 0x9286, 0x003e, 0x080c, 0x98e4, 0x60e3, + 0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616, 0x2009, 0x0004, 0x080c, + 0x281f, 0x080c, 0x273f, 0x2001, 0x1800, 0x2003, 0x0004, 0x2011, + 0x0008, 0x080c, 0x286d, 0x2011, 0x6f20, 0x080c, 0x825f, 0x080c, + 0x70d1, 0x0118, 0x9006, 0x080c, 0x2833, 0x080c, 0x0bab, 0x2001, + 0x0001, 0x080c, 0x23c9, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6f2d, + 0x2071, 0x19d4, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, + 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, + 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, + 0x080c, 0x2833, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6fa5, 0x2091, + 0x6000, 0x1f04, 0x6fa5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, + 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014, + 0x68e8, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, + 0x826b, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x080c, 0x73c6, 0x2001, 0x193e, 0x2003, + 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, + 0x080c, 0x2833, 0x080c, 0x5b97, 0x0026, 0x2011, 0xffff, 0x080c, + 0x286d, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x805a, 0x080c, 0x804c, 0x080c, 0x73bb, 0x2001, - 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, - 0x2498, 0x9006, 0x080c, 0x2833, 0x6043, 0x0090, 0x6043, 0x0010, - 0x0026, 0x2011, 0xffff, 0x080c, 0x286d, 0x002e, 0x602b, 0x182c, - 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004, - 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, - 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, - 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, - 0x538a, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, - 0x080c, 0x538a, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, - 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, - 0x0020, 0x080c, 0x24b8, 0x900e, 0x0028, 0x080c, 0x6658, 0x1dc8, - 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x2fc2, 0x9006, 0x0019, - 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, - 0x080c, 0xbf3f, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, - 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, - 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f, - 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x20a9, 0x0002, 0x080c, - 0x27fa, 0x0026, 0x2011, 0x0040, 0x080c, 0x286d, 0x002e, 0x000e, - 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, - 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2498, 0x2001, - 0x00a0, 0x0006, 0x080c, 0xbf46, 0x000e, 0x0130, 0x080c, 0x2851, - 0x9006, 0x080c, 0x285d, 0x0010, 0x080c, 0x2833, 0x000e, 0x6052, - 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, - 0x27aa, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, - 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x1800, 0x080c, 0x990b, 0x0158, 0x2001, 0x0386, 0x2004, - 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c, 0x989e, 0x0804, 0x71df, - 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, - 0x602a, 0x2011, 0x0200, 0x080c, 0x286d, 0x2001, 0x0090, 0x080c, - 0x2833, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1558, 0x1d04, 0x717b, - 0x2091, 0x6000, 0x1f04, 0x717b, 0x080c, 0x98ad, 0x2011, 0x0003, - 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328, 0x080c, 0x91eb, - 0x901e, 0x080c, 0x926b, 0x2001, 0x0386, 0x2003, 0x7000, 0x080c, - 0x98c9, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, - 0x5cd5, 0x080c, 0xbf46, 0x0110, 0x080c, 0x0cd1, 0x9085, 0x0001, - 0x04e0, 0x2001, 0x0386, 0x2004, 0xd0ac, 0x0110, 0x080c, 0x1989, - 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x2001, - 0x0080, 0x080c, 0x2833, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c, - 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, 0x0140, - 0x1d04, 0x71bd, 0x2091, 0x6000, 0x1f04, 0x71bd, 0x0804, 0x7184, - 0x2001, 0x0386, 0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a, - 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, - 0xbf46, 0x0110, 0x080c, 0x0cd1, 0x9006, 0x00ee, 0x00de, 0x00ce, - 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, - 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, - 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, - 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a47, 0x2d04, 0x8000, - 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, - 0x9005, 0x1904, 0x7256, 0x2001, 0x0088, 0x080c, 0x2833, 0x9006, - 0x60e2, 0x6886, 0x080c, 0x2498, 0x2069, 0x0200, 0x6804, 0x9005, - 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a, - 0x2011, 0x0400, 0x080c, 0x286d, 0x2069, 0x1960, 0x7000, 0x206a, - 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x7236, - 0x2091, 0x6000, 0x1f04, 0x7236, 0x0804, 0x7287, 0x2069, 0x0140, - 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, - 0x080c, 0x2819, 0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510, - 0x1d04, 0x7242, 0x2091, 0x6000, 0x1f04, 0x7242, 0x080c, 0x98ad, - 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328, - 0x080c, 0x91eb, 0x901e, 0x080c, 0x926b, 0x080c, 0x98c9, 0x2001, - 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085, - 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c, 0x2833, 0x2069, 0x0140, - 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, - 0x6886, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x9006, 0x00ee, - 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c, 0x98ad, - 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328, - 0x080c, 0x91eb, 0x901e, 0x080c, 0x926b, 0x080c, 0x98c9, 0x2069, - 0x0140, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, - 0x5cd5, 0x0804, 0x7329, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, - 0xc1b5, 0x2102, 0x080c, 0x6f0a, 0x2069, 0x0140, 0x2001, 0x0080, - 0x080c, 0x2833, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, - 0x1118, 0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff, 0x602a, - 0x2011, 0x0200, 0x080c, 0x286d, 0x2069, 0x1960, 0x7000, 0x206a, - 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7329, 0x2011, 0x1e00, - 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, - 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x72e6, 0x0006, 0x0016, - 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x808b, 0x00ee, 0x00de, 0x00ce, - 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d4, 0x7018, 0x00ee, 0x9005, - 0x19e8, 0x01f8, 0x0026, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011, - 0x6f15, 0x080c, 0x8237, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, - 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, - 0x0002, 0x080c, 0x2498, 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, 0xbf3f, 0x1904, 0x7396, - 0x7130, 0xd184, 0x1170, 0x080c, 0x317f, 0x0138, 0xc18d, 0x7132, - 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, - 0x7396, 0x2011, 0x1854, 0x220c, 0x0438, 0x0016, 0x2019, 0x000e, - 0x080c, 0xd1c9, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, - 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6269, 0x1170, - 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xd251, 0x2009, - 0x0001, 0x2011, 0x0100, 0x080c, 0x83c3, 0x001e, 0x8108, 0x1f04, - 0x735f, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x2fc2, 0x001e, 0x0078, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6269, 0x1110, 0x080c, - 0x5cef, 0x8108, 0x1f04, 0x738c, 0x00be, 0x015e, 0x080c, 0x1989, - 0x080c, 0x98ad, 0x080c, 0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000, - 0x080c, 0x5cd5, 0x080c, 0x6fdd, 0x00ee, 0x00ce, 0x004e, 0x003e, - 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x194e, 0x2003, 0x0001, - 0x0005, 0x2001, 0x194e, 0x2003, 0x0000, 0x0005, 0x2001, 0x194d, - 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003, 0x0000, 0x0005, - 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x103b, - 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x103b, - 0x090c, 0x0d65, 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, 0x18f0, 0x6807, 0x0001, - 0x00de, 0x080c, 0x79b8, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, - 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7422, 0x015e, 0x0005, - 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, 0x0002, 0x7438, 0x7439, - 0x7484, 0x74df, 0x7620, 0x7436, 0x7436, 0x764a, 0x080c, 0x0d65, - 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003, 0x0000, 0x782c, - 0x908c, 0x0780, 0x190c, 0x7a44, 0xd0a4, 0x0570, 0x2001, 0x1dc0, - 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, 0x7456, 0x2001, 0x19d7, - 0x200c, 0x8109, 0x0508, 0x2091, 0x6000, 0x2102, 0x7824, 0x2048, - 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, - 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, - 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, - 0x0003, 0x1968, 0x080c, 0x74df, 0x782c, 0xd09c, 0x090c, 0x79b8, - 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, - 0x7515, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x7515, 0x7515, 0x7515, - 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7537, 0x7515, 0x7515, - 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, - 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, - 0x7515, 0x7521, 0x7515, 0x771f, 0x7515, 0x7515, 0x7515, 0x7537, - 0x7515, 0x7521, 0x7760, 0x77a1, 0x77e8, 0x77fc, 0x7515, 0x7515, - 0x7537, 0x7521, 0x7515, 0x7515, 0x75f4, 0x78a7, 0x78c2, 0x7515, - 0x7537, 0x7515, 0x7515, 0x7515, 0x7515, 0x75ea, 0x78c2, 0x7515, - 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, - 0x754b, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, - 0x7515, 0x7515, 0x79e8, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, - 0x755f, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x2079, - 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x79e1, - 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, - 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, - 0x080c, 0x79b8, 0x0005, 0x7515, 0x7521, 0x770b, 0x7515, 0x7521, - 0x7515, 0x7521, 0x7521, 0x7515, 0x7521, 0x770b, 0x7521, 0x7521, - 0x7521, 0x7521, 0x7521, 0x7515, 0x7521, 0x770b, 0x7515, 0x7515, - 0x7521, 0x7515, 0x7515, 0x7515, 0x7521, 0x00e6, 0x2071, 0x18f0, - 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, 0x698f, 0x012e, 0x0005, 0xa864, - 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, - 0x0804, 0x76c9, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, - 0x704b, 0x76c9, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, - 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x76e4, 0x7007, 0x0003, - 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x76e4, 0x0005, 0xa864, - 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x751d, 0x7007, - 0x0001, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1904, 0x75c1, 0xa994, - 0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011, - 0x0010, 0x080c, 0x6684, 0x002e, 0x0578, 0x0016, 0xa998, 0x080c, - 0x66ce, 0x001e, 0x1548, 0x0400, 0x080c, 0x70ac, 0x0140, 0xa897, - 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026, - 0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x01b0, 0x0016, 0x0026, - 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000, 0x080c, 0x66ce, - 0x003e, 0x002e, 0x001e, 0x1140, 0xa897, 0x4005, 0xa89b, 0x4009, - 0x2001, 0x0030, 0x900e, 0x0050, 0xa868, 0x9084, 0x00ff, 0xa86a, - 0xa883, 0x0000, 0x080c, 0x5f00, 0x1108, 0x0005, 0x0126, 0x2091, - 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x698f, 0x012e, - 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904, 0x756f, 0x9186, 0x0064, - 0x0904, 0x756f, 0x9186, 0x007c, 0x0904, 0x756f, 0x9186, 0x0028, - 0x0904, 0x756f, 0x9186, 0x0038, 0x0904, 0x756f, 0x9186, 0x0078, - 0x0904, 0x756f, 0x9186, 0x005f, 0x0904, 0x756f, 0x9186, 0x0056, - 0x0904, 0x756f, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030, - 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, - 0x7007, 0x0001, 0x0804, 0x78d9, 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, 0x7525, 0xaab4, 0x928a, - 0x0002, 0x1a04, 0x7525, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, - 0x0118, 0x2001, 0x7687, 0x0018, 0x9280, 0x767d, 0x2005, 0x7056, - 0x7010, 0x9015, 0x0904, 0x7668, 0x080c, 0x103b, 0x1118, 0x7007, - 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, - 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, - 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, - 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, - 0x080c, 0x110c, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, - 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1054, - 0x7014, 0x2048, 0x0804, 0x7525, 0x7020, 0x2048, 0x7018, 0xa802, - 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7620, - 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, - 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x001e, 0x0904, 0x78d9, 0x0804, 0x76c9, 0x767f, 0x7683, 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, 0x5d4f, - 0x1108, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000, 0x080c, - 0xbb2a, 0x080c, 0x698f, 0x012e, 0x0ca0, 0x080c, 0xbf3f, 0x1d70, - 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c, 0x81ff, - 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, - 0x0120, 0x080c, 0x5e62, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, - 0x5ddd, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, - 0x080c, 0x698f, 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, - 0x6269, 0x11b8, 0x0066, 0xae80, 0x080c, 0x6379, 0x006e, 0x0088, - 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, - 0x080c, 0x6269, 0x1110, 0x080c, 0x6548, 0x8108, 0x1f04, 0x7748, - 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1054, 0x00be, 0x0005, - 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x00be, 0x0005, - 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x665c, 0x0580, - 0x2061, 0x1a3f, 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, 0x79a2, - 0x012e, 0x0804, 0x799c, 0x012e, 0x0804, 0x7996, 0x012e, 0x0804, - 0x7999, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x665c, - 0x05e0, 0x2061, 0x1a3f, 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, 0x79a2, 0x012e, 0x0804, 0x799f, 0x012e, 0x0804, 0x799c, - 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a3f, 0x6300, - 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, - 0x79b0, 0x012e, 0x0804, 0x799f, 0x00b6, 0x0126, 0x00c6, 0x2091, - 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, - 0x1a3f, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, - 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, - 0x9005, 0x0118, 0x080c, 0x9c06, 0x0068, 0x6017, 0xf400, 0x6063, - 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x6162, 0x2009, 0x0041, - 0x080c, 0x9c6a, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, - 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x83c3, 0x002e, 0xa87c, - 0xd0c4, 0x0148, 0x2061, 0x1a3f, 0x6000, 0xd08c, 0x1120, 0x6008, - 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x79a2, - 0x00ce, 0x012e, 0x00be, 0x0804, 0x799c, 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, - 0x6269, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, - 0x09b8, 0x6007, 0x0024, 0x2001, 0x1957, 0x2004, 0x601a, 0x0804, - 0x7837, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, - 0x1833, 0x2004, 0x9005, 0x0150, 0x080c, 0x9c06, 0x8eff, 0x0118, - 0x2e60, 0x080c, 0x9c06, 0x00ee, 0x0804, 0x7837, 0x6024, 0xc0dc, - 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, - 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, - 0x2009, 0x8020, 0x080c, 0x84a9, 0x00ee, 0x0804, 0x7837, 0x2061, - 0x1a3f, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x79b0, 0x0126, - 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, - 0x79b0, 0x012e, 0xa883, 0x0016, 0x0804, 0x79a9, 0xa883, 0x0007, - 0x0804, 0x79a9, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, - 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x751d, 0x0040, - 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78d9, - 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, - 0x1800, 0x61cc, 0x81ff, 0x1904, 0x795b, 0x6130, 0xd194, 0x1904, - 0x7985, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x0a04, 0x794f, 0x6064, - 0x9e02, 0x1a04, 0x794f, 0x7120, 0x9186, 0x0006, 0x1904, 0x7941, - 0x7010, 0x905d, 0x0904, 0x795b, 0xb800, 0xd0e4, 0x1904, 0x797f, - 0x2061, 0x1a3f, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, - 0x7024, 0xd0dc, 0x1904, 0x7988, 0xa883, 0x0000, 0xa803, 0x0000, - 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, - 0x798b, 0x080c, 0x5386, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, - 0x2e60, 0x080c, 0x82b6, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, - 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, - 0x798b, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, - 0x0006, 0x00be, 0x0804, 0x79a9, 0xd184, 0x0db8, 0xd1c4, 0x1190, - 0x00a0, 0xa974, 0x080c, 0x6269, 0x15d0, 0xb800, 0xd0e4, 0x15b8, - 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, - 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, - 0xa883, 0x0035, 0x0430, 0x080c, 0x538a, 0xd0fc, 0x01e8, 0xa878, - 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, - 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, - 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x78e5, - 0x7003, 0x0002, 0x0804, 0x78e5, 0xa883, 0x0028, 0x0010, 0xa883, - 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, - 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, - 0x080c, 0xcdd9, 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, 0x698f, 0x012e, 0x0005, - 0x080c, 0x1054, 0x0005, 0x00d6, 0x080c, 0x82ad, 0x00de, 0x0005, - 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, - 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7a44, 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, 0x7a44, 0x000e, 0x0005, - 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, - 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7a35, 0xa97c, 0x9188, 0x1000, - 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, - 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9b76, - 0x1118, 0x080c, 0x9c3d, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7a13, - 0x7a18, 0x7a1b, 0x7a21, 0x2019, 0x0002, 0x080c, 0xd1c9, 0x0060, - 0x080c, 0xd159, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xd178, - 0x0018, 0xa980, 0x080c, 0xd159, 0x080c, 0x9bcc, 0xa887, 0x0000, - 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 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, 0x7a46, - 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0d6e, 0x2001, - 0x1833, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, - 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, - 0x210c, 0xd1ec, 0x1120, 0x080c, 0x152d, 0x00fe, 0x0005, 0x2001, - 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, - 0xd08c, 0x0904, 0x7ac7, 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x8043, - 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d65, 0x9584, 0x00f6, 0x1508, - 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, - 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, - 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, - 0x8100, 0x11c0, 0x080c, 0xd5b1, 0x080c, 0x7f8a, 0x7817, 0x0140, - 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x7fe6, 0x19c8, 0xd5a4, - 0x0148, 0x0046, 0x0056, 0x080c, 0x7b17, 0x080c, 0x1fb7, 0x005e, - 0x004e, 0x0020, 0x080c, 0xd5b1, 0x7817, 0x0140, 0x080c, 0x70ac, - 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, - 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x0489, 0x0005, - 0x0002, 0x7ad4, 0x7dac, 0x7ad1, 0x7ad1, 0x7ad1, 0x7ad1, 0x7ad1, - 0x7ad1, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, - 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286, 0x2000, 0x1150, - 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x53e7, 0x0070, 0x080c, - 0x7b37, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7ce9, 0x0028, - 0x9286, 0x8000, 0x1110, 0x080c, 0x7ec0, 0x7817, 0x0140, 0x0005, - 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, - 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, - 0x080c, 0x48d1, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, - 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, - 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, - 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, - 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, - 0x48d1, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, - 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, - 0x9096, 0x0023, 0x1904, 0x7cba, 0x9186, 0x0023, 0x15c0, 0x080c, - 0x7f55, 0x0904, 0x7cba, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, - 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, - 0x7cba, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, - 0x0015, 0x080c, 0x9c6a, 0x0804, 0x7cba, 0x908e, 0x0214, 0x0118, - 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9c6a, 0x0804, - 0x7cba, 0x908e, 0x0100, 0x1904, 0x7cba, 0x7034, 0x9005, 0x1904, - 0x7cba, 0x2009, 0x0016, 0x080c, 0x9c6a, 0x0804, 0x7cba, 0x9186, - 0x0022, 0x1904, 0x7cba, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, - 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, - 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, - 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x246d, 0x7932, 0x7936, - 0x001e, 0x000e, 0x00fe, 0x080c, 0x2424, 0x695a, 0x703c, 0x00e6, - 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, - 0x9005, 0x1904, 0x7cba, 0x2009, 0x0017, 0x0804, 0x7c87, 0x908e, - 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7cba, 0x080c, 0x70ac, - 0x0120, 0x2009, 0x001d, 0x0804, 0x7c87, 0x68d8, 0xc0a5, 0x68da, - 0x2009, 0x0030, 0x0804, 0x7c87, 0x908e, 0x0500, 0x1140, 0x7034, - 0x9005, 0x1904, 0x7cba, 0x2009, 0x0018, 0x0804, 0x7c87, 0x908e, - 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7c87, 0x908e, 0x2110, - 0x1120, 0x2009, 0x001a, 0x0804, 0x7c87, 0x908e, 0x5200, 0x1140, - 0x7034, 0x9005, 0x1904, 0x7cba, 0x2009, 0x001b, 0x0804, 0x7c87, - 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7cba, 0x2009, - 0x001c, 0x0804, 0x7c87, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, - 0x0804, 0x7c87, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, - 0x7cba, 0x2009, 0x0024, 0x0804, 0x7c87, 0x908c, 0xff00, 0x918e, - 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, - 0x0904, 0x7c87, 0x080c, 0xc613, 0x1904, 0x7cba, 0x0804, 0x7c85, - 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, - 0x7c87, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7c87, - 0x908e, 0x6104, 0x1528, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, - 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, - 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x48d1, 0x004e, 0x8108, - 0x0f04, 0x7c53, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, - 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 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, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1568, - 0x080c, 0x6209, 0x1550, 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb884, + 0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, + 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, + 0x0804, 0x707b, 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, + 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, + 0x0001, 0x2001, 0x0001, 0x080c, 0x2498, 0x080c, 0x98c8, 0x0026, + 0x080c, 0x9b6d, 0x002e, 0x080c, 0x98e4, 0x7000, 0x908e, 0x0004, + 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, + 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, + 0x015e, 0x080c, 0xbf61, 0x0118, 0x9006, 0x080c, 0x285d, 0x0804, + 0x7087, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2819, + 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2833, 0x1f04, + 0x702c, 0x080c, 0x710e, 0x012e, 0x015e, 0x080c, 0x70c8, 0x0170, + 0x6044, 0x9005, 0x0130, 0x080c, 0x710e, 0x9006, 0x8001, 0x1df0, + 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x710e, 0x080c, 0xbf61, + 0x0118, 0x9006, 0x080c, 0x285d, 0x0016, 0x0026, 0x7000, 0x908e, + 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x6f2d, 0x080c, 0x821d, + 0x002e, 0x001e, 0x080c, 0x806b, 0x7034, 0xc085, 0x7036, 0x2001, + 0x194e, 0x2003, 0x0004, 0x080c, 0x6d82, 0x080c, 0x70c8, 0x0138, + 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x73bc, 0x00ee, + 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, + 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8082, 0x080c, 0x8074, + 0x080c, 0x73c6, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, + 0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, 0x080c, 0x2833, 0x6043, + 0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x286d, + 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, + 0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, + 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, + 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, + 0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0010, + 0x000e, 0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, + 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, + 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x24b8, 0x900e, 0x0028, + 0x080c, 0x665f, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, + 0x2fc5, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, + 0x180c, 0x2e04, 0x0130, 0x080c, 0xbf5a, 0x1128, 0x9085, 0x0010, + 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, + 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, + 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, + 0x20a9, 0x0002, 0x080c, 0x27fa, 0x0026, 0x2011, 0x0040, 0x080c, + 0x286d, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, + 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, + 0x080c, 0x2498, 0x2001, 0x00a0, 0x0006, 0x080c, 0xbf61, 0x000e, + 0x0130, 0x080c, 0x2851, 0x9006, 0x080c, 0x285d, 0x0010, 0x080c, + 0x2833, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, + 0x2079, 0x0100, 0x080c, 0x27aa, 0x00fe, 0x000e, 0x6052, 0x0005, + 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x9926, 0x0158, + 0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c, + 0x98b9, 0x0804, 0x71ea, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, + 0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d, + 0x2001, 0x0090, 0x080c, 0x2833, 0x20a9, 0x0366, 0x6024, 0xd0cc, + 0x1558, 0x1d04, 0x7186, 0x2091, 0x6000, 0x1f04, 0x7186, 0x080c, + 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c, + 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286, 0x2001, 0x0386, + 0x2003, 0x7000, 0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833, + 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0xbf61, 0x0110, 0x080c, + 0x0cd1, 0x9085, 0x0001, 0x04e0, 0x2001, 0x0386, 0x2004, 0xd0ac, + 0x0110, 0x080c, 0x1989, 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c, + 0x2498, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2833, 0x20a9, 0x0366, + 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, + 0x6024, 0x910c, 0x0140, 0x1d04, 0x71c8, 0x2091, 0x6000, 0x1f04, + 0x71c8, 0x0804, 0x718f, 0x2001, 0x0386, 0x2003, 0x7000, 0x6028, + 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, + 0x0008, 0x6886, 0x080c, 0xbf61, 0x0110, 0x080c, 0x0cd1, 0x9006, + 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, + 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, + 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, + 0x1a47, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, + 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x7261, 0x2001, 0x0088, + 0x080c, 0x2833, 0x9006, 0x60e2, 0x6886, 0x080c, 0x2498, 0x2069, + 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028, + 0x9084, 0xfbff, 0x602a, 0x2011, 0x0400, 0x080c, 0x286d, 0x2069, + 0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9, + 0x0002, 0x1d04, 0x7241, 0x2091, 0x6000, 0x1f04, 0x7241, 0x0804, + 0x7292, 0x2069, 0x0140, 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c, + 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, 0x0528, + 0x9084, 0x1a00, 0x1510, 0x1d04, 0x724d, 0x2091, 0x6000, 0x1f04, + 0x724d, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, + 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286, + 0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73b7, + 0x080c, 0x5cdc, 0x9085, 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c, + 0x2833, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, + 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498, + 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, + 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, + 0x01e8, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, + 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286, + 0x080c, 0x98e4, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2833, + 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x0804, 0x7334, 0x2001, 0x180c, + 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6f15, 0x2069, + 0x0140, 0x2001, 0x0080, 0x080c, 0x2833, 0x60e3, 0x0000, 0x2069, + 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028, + 0x9084, 0xfdff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d, 0x2069, + 0x1960, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, + 0x7334, 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, + 0x2819, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, + 0x72f1, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x80b3, + 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d4, + 0x7018, 0x00ee, 0x9005, 0x19e8, 0x01f8, 0x0026, 0x2011, 0x6f2d, + 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x2069, + 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, + 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498, 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, + 0xbf5a, 0x1904, 0x73a1, 0x7130, 0xd184, 0x1170, 0x080c, 0x3186, + 0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120, + 0x7030, 0xd08c, 0x0904, 0x73a1, 0x2011, 0x1854, 0x220c, 0x0438, + 0x0016, 0x2019, 0x000e, 0x080c, 0xd1eb, 0x0156, 0x00b6, 0x20a9, + 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, + 0x080c, 0x6270, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, + 0x080c, 0xd273, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x83eb, + 0x001e, 0x8108, 0x1f04, 0x736a, 0x00be, 0x015e, 0x001e, 0xd1ac, + 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2fc5, + 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, + 0x6270, 0x1110, 0x080c, 0x5cf6, 0x8108, 0x1f04, 0x7397, 0x00be, + 0x015e, 0x080c, 0x1989, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c, + 0x98e4, 0x60e3, 0x0000, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x00ee, + 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, + 0x194e, 0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000, + 0x0005, 0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, + 0x2003, 0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, + 0x0000, 0x080c, 0x103b, 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900, + 0x704e, 0x080c, 0x103b, 0x090c, 0x0d65, 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, + 0x18f0, 0x6807, 0x0001, 0x00de, 0x080c, 0x79c3, 0x9006, 0x00ee, + 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, + 0x742d, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, + 0x0002, 0x7443, 0x7444, 0x748f, 0x74ea, 0x762b, 0x7441, 0x7441, + 0x7655, 0x080c, 0x0d65, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, + 0x2003, 0x0000, 0x782c, 0x908c, 0x0780, 0x190c, 0x7a4f, 0xd0a4, + 0x0570, 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, + 0x7461, 0x2001, 0x19d7, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000, + 0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, + 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, + 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, + 0x0007, 0x0128, 0x9186, 0x0003, 0x1968, 0x080c, 0x74ea, 0x782c, + 0xd09c, 0x090c, 0x79c3, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, + 0x003b, 0x0c18, 0x080c, 0x7520, 0x0c90, 0x00e3, 0x08f0, 0x0005, + 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7542, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7520, 0x7520, 0x7520, 0x7520, 0x752c, 0x7520, 0x772a, 0x7520, + 0x7520, 0x7520, 0x7542, 0x7520, 0x752c, 0x776b, 0x77ac, 0x77f3, + 0x7807, 0x7520, 0x7520, 0x7542, 0x752c, 0x7520, 0x7520, 0x75ff, + 0x78b2, 0x78cd, 0x7520, 0x7542, 0x7520, 0x7520, 0x7520, 0x7520, + 0x75f5, 0x78cd, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7520, 0x7520, 0x7520, 0x7556, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x79f3, 0x7520, 0x7520, + 0x7520, 0x7520, 0x7520, 0x756a, 0x7520, 0x7520, 0x7520, 0x7520, + 0x7520, 0x7520, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, + 0x782c, 0x080c, 0x79ec, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, + 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, + 0x002b, 0x0c50, 0x00e9, 0x080c, 0x79c3, 0x0005, 0x7520, 0x752c, + 0x7716, 0x7520, 0x752c, 0x7520, 0x752c, 0x752c, 0x7520, 0x752c, + 0x7716, 0x752c, 0x752c, 0x752c, 0x752c, 0x752c, 0x7520, 0x752c, + 0x7716, 0x7520, 0x7520, 0x752c, 0x7520, 0x7520, 0x7520, 0x752c, + 0x00e6, 0x2071, 0x18f0, 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, 0x6996, + 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, + 0x1120, 0x7007, 0x0001, 0x0804, 0x76d4, 0x7007, 0x0003, 0x7012, + 0x2900, 0x7016, 0x701a, 0x704b, 0x76d4, 0x0005, 0xa864, 0x8007, + 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, + 0x76ef, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, + 0x76ef, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, + 0x1904, 0x7528, 0x7007, 0x0001, 0x2009, 0x1833, 0x210c, 0x81ff, + 0x1904, 0x75cc, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074, + 0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x0578, + 0x0016, 0xa998, 0x080c, 0x66d5, 0x001e, 0x1548, 0x0400, 0x080c, + 0x70b7, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030, + 0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e, + 0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d, + 0x8000, 0x080c, 0x66d5, 0x003e, 0x002e, 0x001e, 0x1140, 0xa897, + 0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa868, + 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x5f07, 0x1108, + 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, + 0x080c, 0x6996, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904, + 0x757a, 0x9186, 0x0064, 0x0904, 0x757a, 0x9186, 0x007c, 0x0904, + 0x757a, 0x9186, 0x0028, 0x0904, 0x757a, 0x9186, 0x0038, 0x0904, + 0x757a, 0x9186, 0x0078, 0x0904, 0x757a, 0x9186, 0x005f, 0x0904, + 0x757a, 0x9186, 0x0056, 0x0904, 0x757a, 0xa897, 0x4005, 0xa89b, + 0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0, + 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x78e4, 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, + 0x7530, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7530, 0x82ff, 0x1138, + 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7692, 0x0018, 0x9280, + 0x7688, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7673, 0x080c, + 0x103b, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, + 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, + 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, + 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, + 0xa17a, 0x810b, 0xa17e, 0x080c, 0x110c, 0xa06c, 0x908e, 0x0100, + 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, + 0x2048, 0x080c, 0x1054, 0x7014, 0x2048, 0x0804, 0x7530, 0x7020, + 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, + 0x711a, 0x0804, 0x762b, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, + 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, + 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x78e4, 0x0804, 0x76d4, + 0x768a, 0x768e, 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, 0x5d56, 0x1108, 0x0005, 0x080c, 0x6bb3, 0x0126, + 0x2091, 0x8000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x012e, 0x0ca0, + 0x080c, 0xbf5a, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, + 0x1833, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, + 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5e69, 0x1138, 0x0005, + 0x9006, 0xa87a, 0x080c, 0x5de4, 0x1108, 0x0005, 0x0126, 0x2091, + 0x8000, 0xa87a, 0xa982, 0x080c, 0x6996, 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, 0x6270, 0x11b8, 0x0066, 0xae80, 0x080c, + 0x6380, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, + 0x2412, 0x004e, 0x00c6, 0x080c, 0x6270, 0x1110, 0x080c, 0x654f, + 0x8108, 0x1f04, 0x7753, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, + 0x1054, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, + 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, + 0x080c, 0x6663, 0x0580, 0x2061, 0x1a3f, 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, 0x79ad, 0x012e, 0x0804, 0x79a7, 0x012e, 0x0804, + 0x79a1, 0x012e, 0x0804, 0x79a4, 0x0126, 0x2091, 0x8000, 0x7007, + 0x0001, 0x080c, 0x6663, 0x05e0, 0x2061, 0x1a3f, 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, 0x79ad, 0x012e, 0x0804, 0x79aa, + 0x012e, 0x0804, 0x79a7, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, + 0x2061, 0x1a3f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, + 0x630a, 0x012e, 0x0804, 0x79bb, 0x012e, 0x0804, 0x79aa, 0x00b6, + 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, + 0x0148, 0x00c6, 0x2061, 0x1a3f, 0x6000, 0x9084, 0xfcff, 0x6002, + 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, + 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, 0x9c21, 0x0068, + 0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, + 0x6162, 0x2009, 0x0041, 0x080c, 0x9c85, 0xa988, 0x918c, 0xff00, + 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, + 0x83eb, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a3f, 0x6000, + 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, + 0x00be, 0x0804, 0x79ad, 0x00ce, 0x012e, 0x00be, 0x0804, 0x79a7, + 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, 0x6270, 0x1968, 0xb800, 0xc0e4, 0xb802, + 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1957, + 0x2004, 0x601a, 0x0804, 0x7842, 0xa88c, 0x9065, 0x0960, 0x00e6, + 0xa890, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, 0x0150, 0x080c, + 0x9c21, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9c21, 0x00ee, 0x0804, + 0x7842, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, + 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, + 0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee, + 0x0804, 0x7842, 0x2061, 0x1a3f, 0x6000, 0xd084, 0x0190, 0xd08c, + 0x1904, 0x79bb, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, + 0x6206, 0x012e, 0x0804, 0x79bb, 0x012e, 0xa883, 0x0016, 0x0804, + 0x79b4, 0xa883, 0x0007, 0x0804, 0x79b4, 0xa864, 0x8007, 0x9084, + 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, + 0x080c, 0x7528, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, + 0x701a, 0x704b, 0x78e4, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, + 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, 0x7966, + 0x6130, 0xd194, 0x1904, 0x7990, 0xa878, 0x2070, 0x9e82, 0x1ddc, + 0x0a04, 0x795a, 0x6064, 0x9e02, 0x1a04, 0x795a, 0x7120, 0x9186, + 0x0006, 0x1904, 0x794c, 0x7010, 0x905d, 0x0904, 0x7966, 0xb800, + 0xd0e4, 0x1904, 0x798a, 0x2061, 0x1a3f, 0x6100, 0x9184, 0x0301, + 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7993, 0xa883, + 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, + 0xa87c, 0xd0f4, 0x1904, 0x7996, 0x080c, 0x538d, 0xd09c, 0x1118, + 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x82de, 0x012e, 0x00ee, + 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, + 0xa87c, 0xd0f4, 0x1904, 0x7996, 0x012e, 0x00ee, 0x00be, 0x0005, + 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x79b4, 0xd184, + 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6270, 0x15d0, + 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, + 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, + 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x5391, + 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6064, + 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, + 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, + 0x0007, 0x1904, 0x78f0, 0x7003, 0x0002, 0x0804, 0x78f0, 0xa883, + 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, + 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, + 0x0002, 0x601b, 0x0014, 0x080c, 0xcdf9, 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, + 0x6996, 0x012e, 0x0005, 0x080c, 0x1054, 0x0005, 0x00d6, 0x080c, + 0x82d5, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, + 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, + 0x7a4f, 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, + 0x7a4f, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, + 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7a40, + 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, + 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, + 0x2b10, 0x080c, 0x9b91, 0x1118, 0x080c, 0x9c58, 0x05a8, 0x6212, + 0xa874, 0x0002, 0x7a1e, 0x7a23, 0x7a26, 0x7a2c, 0x2019, 0x0002, + 0x080c, 0xd1eb, 0x0060, 0x080c, 0xd17b, 0x0048, 0x2019, 0x0002, + 0xa980, 0x080c, 0xd19a, 0x0018, 0xa980, 0x080c, 0xd17b, 0x080c, + 0x9be7, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, + 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, 0x7a51, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, + 0x0804, 0x0d6e, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005, 0x0005, + 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, + 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x152d, + 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, + 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7ad2, 0x68bc, 0x90aa, + 0x0005, 0x0a04, 0x806b, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d65, + 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, + 0x1258, 0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, + 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, + 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd5d3, 0x080c, + 0x7fb2, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, + 0x800e, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7b22, + 0x080c, 0x1fb7, 0x005e, 0x004e, 0x0020, 0x080c, 0xd5d3, 0x7817, + 0x0140, 0x080c, 0x70b7, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, + 0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, + 0x0000, 0x0489, 0x0005, 0x0002, 0x7adf, 0x7dd4, 0x7adc, 0x7adc, + 0x7adc, 0x7adc, 0x7adc, 0x7adc, 0x7817, 0x0140, 0x0005, 0x7000, + 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, + 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, + 0x53ee, 0x0070, 0x080c, 0x7b42, 0x0058, 0x9286, 0x3000, 0x1118, + 0x080c, 0x7d11, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7ee8, + 0x7817, 0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, + 0x2011, 0x8048, 0x2518, 0x080c, 0x48d8, 0x003e, 0x002e, 0x0005, + 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, + 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, + 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, + 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, + 0x2011, 0x8048, 0x080c, 0x48d8, 0x002e, 0x00fe, 0x005e, 0x004e, + 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, + 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ce2, 0x9186, + 0x0023, 0x15c0, 0x080c, 0x7f7d, 0x0904, 0x7ce2, 0x6120, 0x9186, + 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, + 0x9186, 0x000a, 0x1904, 0x7ce2, 0x7124, 0x610a, 0x7030, 0x908e, + 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x9c85, 0x0804, 0x7ce2, + 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, + 0x080c, 0x9c85, 0x0804, 0x7ce2, 0x908e, 0x0100, 0x1904, 0x7ce2, + 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0016, 0x080c, 0x9c85, + 0x0804, 0x7ce2, 0x9186, 0x0022, 0x1904, 0x7ce2, 0x7030, 0x908e, + 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, + 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, + 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, + 0x246d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x2424, + 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, + 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0017, + 0x0804, 0x7c92, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, + 0x7ce2, 0x080c, 0x70b7, 0x0120, 0x2009, 0x001d, 0x0804, 0x7c92, + 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804, 0x7c92, 0x908e, + 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0018, + 0x0804, 0x7c92, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, + 0x7c92, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7c92, + 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, + 0x001b, 0x0804, 0x7c92, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, + 0x1904, 0x7ce2, 0x2009, 0x001c, 0x0804, 0x7c92, 0x908e, 0x1300, + 0x1120, 0x2009, 0x0034, 0x0804, 0x7c92, 0x908e, 0x1200, 0x1140, + 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0024, 0x0804, 0x7c92, + 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, + 0x1810, 0x2004, 0xd09c, 0x0904, 0x7c92, 0x080c, 0xc62f, 0x1904, + 0x7ce2, 0x0804, 0x7c90, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, + 0x2009, 0x002a, 0x0804, 0x7c92, 0x908e, 0x0f00, 0x1120, 0x2009, + 0x0020, 0x0804, 0x7c92, 0x908e, 0x6104, 0x1528, 0x2029, 0x0205, + 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, + 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, + 0x48d8, 0x004e, 0x8108, 0x0f04, 0x7c5e, 0x9186, 0x0280, 0x1d88, + 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, + 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, 0x6838, 0xd0d4, 0x0110, + 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, + 0x080c, 0x2424, 0x1904, 0x7ce5, 0x080c, 0x6210, 0x1904, 0x7ce5, + 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x70b7, 0x01c0, 0x68d8, + 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, + 0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c, 0x9506, + 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, - 0x9b76, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, + 0x9b91, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, - 0x080c, 0x9c6a, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, - 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1, - 0x080c, 0x9c3d, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, + 0x080c, 0x9c85, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, + 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, + 0x080c, 0x9c58, 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, 0x84b0, - 0x08a0, 0x080c, 0x3149, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, + 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x84d8, + 0x08a0, 0x080c, 0x3150, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, - 0x7f55, 0x0904, 0x7d44, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, - 0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0x9c6a, + 0x7f7d, 0x0904, 0x7d6c, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, + 0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0x9c85, 0x0498, 0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, - 0x0016, 0x080c, 0x9c6a, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, + 0x0016, 0x080c, 0x9c85, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e, 0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, - 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11a8, 0x080c, 0x6209, - 0x1190, 0xbe12, 0xbd16, 0x080c, 0x9b76, 0x0168, 0x2b08, 0x6112, - 0x080c, 0xbcc0, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, - 0x9c6a, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, + 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11a8, 0x080c, 0x6210, + 0x1190, 0xbe12, 0xbd16, 0x080c, 0x9b91, 0x0168, 0x2b08, 0x6112, + 0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, + 0x9c85, 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, 0x7da6, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, - 0x0804, 0x7da6, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, + 0x007f, 0x0804, 0x7dce, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, + 0x0804, 0x7dce, 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, 0x7d7b, 0x82ff, + 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7da3, 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, - 0x9184, 0x000f, 0x0002, 0x7dc3, 0x7dc3, 0x7dc3, 0x7f67, 0x7dc3, - 0x7dc6, 0x7deb, 0x7e74, 0x7dc3, 0x7dc3, 0x7dc3, 0x7dc3, 0x7dc3, - 0x7dc3, 0x7dc3, 0x7dc3, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, + 0x9184, 0x000f, 0x0002, 0x7deb, 0x7deb, 0x7deb, 0x7f8f, 0x7deb, + 0x7dee, 0x7e13, 0x7e9c, 0x7deb, 0x7deb, 0x7deb, 0x7deb, 0x7deb, + 0x7deb, 0x7deb, 0x7deb, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc, 0x02a8, 0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, - 0x1130, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9c6a, 0x7817, + 0x1130, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9c85, 0x7817, 0x0140, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, - 0x7e50, 0x7110, 0xd1bc, 0x1904, 0x7e50, 0x7108, 0x700c, 0x2028, + 0x7e78, 0x7110, 0xd1bc, 0x1904, 0x7e78, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, - 0x9080, 0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, - 0x9106, 0x0904, 0x7e50, 0x9182, 0x0801, 0x1a04, 0x7e50, 0x9190, + 0x9080, 0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, + 0x9106, 0x0904, 0x7e78, 0x9182, 0x0801, 0x1a04, 0x7e78, 0x9190, 0x1000, 0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, - 0x9b76, 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, - 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xc873, - 0x00f8, 0x080c, 0x6660, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, - 0x7d48, 0x11b0, 0x0880, 0x080c, 0x9b76, 0x2b08, 0x0188, 0x6112, + 0x9b91, 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, + 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xc893, + 0x00f8, 0x080c, 0x6667, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, + 0x7d70, 0x11b0, 0x0880, 0x080c, 0x9b91, 0x2b08, 0x0188, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, - 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, + 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8, 0x7817, 0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, - 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1, 0x080c, 0x9c3d, + 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x080c, 0x9c58, 0x0d78, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, - 0xa022, 0x080c, 0x84a9, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, + 0xa022, 0x080c, 0x84d1, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020, 0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6864, 0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, @@ -3848,55 +3853,55 @@ 0x11c8, 0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631, 0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, - 0x080c, 0x9c6a, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, + 0x080c, 0x9c85, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, - 0x080c, 0x3149, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, + 0x080c, 0x3150, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, - 0x0005, 0x7ed7, 0x7ed8, 0x7ed7, 0x7ed7, 0x7f37, 0x7f46, 0x0005, - 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7f35, - 0x700c, 0x7108, 0x080c, 0x2424, 0x1904, 0x7f35, 0x080c, 0x6209, - 0x1904, 0x7f35, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, - 0x6660, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7f55, - 0x00ce, 0x05d8, 0x080c, 0x9b76, 0x2b08, 0x05b8, 0x6112, 0x080c, - 0xbcc0, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, - 0x9c6a, 0x0458, 0x080c, 0x6660, 0x0148, 0x9086, 0x0004, 0x0130, - 0x080c, 0x6668, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9b76, - 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0005, 0x7120, - 0x610a, 0x2009, 0x0088, 0x080c, 0x9c6a, 0x0078, 0x080c, 0x9b76, - 0x2b08, 0x0158, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0004, 0x7120, - 0x610a, 0x2009, 0x0001, 0x080c, 0x9c6a, 0x00be, 0x0005, 0x7110, - 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7eb6, 0x1130, 0x7124, - 0x610a, 0x2009, 0x0089, 0x080c, 0x9c6a, 0x0005, 0x7110, 0xd1bc, - 0x0158, 0x0059, 0x0148, 0x080c, 0x7eb6, 0x1130, 0x7124, 0x610a, - 0x2009, 0x008a, 0x080c, 0x9c6a, 0x0005, 0x7020, 0x2060, 0x9c84, + 0x0005, 0x7eff, 0x7f00, 0x7eff, 0x7eff, 0x7f5f, 0x7f6e, 0x0005, + 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7f5d, + 0x700c, 0x7108, 0x080c, 0x2424, 0x1904, 0x7f5d, 0x080c, 0x6210, + 0x1904, 0x7f5d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, + 0x6667, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7f7d, + 0x00ce, 0x05d8, 0x080c, 0x9b91, 0x2b08, 0x05b8, 0x6112, 0x080c, + 0xbcdb, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, + 0x9c85, 0x0458, 0x080c, 0x6667, 0x0148, 0x9086, 0x0004, 0x0130, + 0x080c, 0x666f, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9b91, + 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0005, 0x7120, + 0x610a, 0x2009, 0x0088, 0x080c, 0x9c85, 0x0078, 0x080c, 0x9b91, + 0x2b08, 0x0158, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120, + 0x610a, 0x2009, 0x0001, 0x080c, 0x9c85, 0x00be, 0x0005, 0x7110, + 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124, + 0x610a, 0x2009, 0x0089, 0x080c, 0x9c85, 0x0005, 0x7110, 0xd1bc, + 0x0158, 0x0059, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124, 0x610a, + 0x2009, 0x008a, 0x080c, 0x9c85, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82, 0x1ddc, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, - 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9c6a, 0x7817, 0x0140, + 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9c85, 0x7817, 0x0140, 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, 0x05c0, 0x080c, 0x9b76, 0x05a8, 0x0066, 0x00c6, + 0x9086, 0xc000, 0x05c0, 0x080c, 0x9b91, 0x05a8, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, - 0x1590, 0x080c, 0x6209, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, - 0x00ce, 0x6012, 0x080c, 0xbcc0, 0x080c, 0x1022, 0x0500, 0x2900, + 0x1590, 0x080c, 0x6210, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, + 0x00ce, 0x6012, 0x080c, 0xbcdb, 0x080c, 0x1022, 0x0500, 0x2900, 0x6062, 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, 0x84b0, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, - 0x9bcc, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, + 0x0001, 0x080c, 0x84d8, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, + 0x9be7, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, - 0x803d, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, - 0x1904, 0x803f, 0x7030, 0x908e, 0x0400, 0x0904, 0x803f, 0x908e, + 0x8065, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, + 0x1904, 0x8067, 0x7030, 0x908e, 0x0400, 0x0904, 0x8067, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, - 0x661e, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, + 0x6625, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 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, 0x7f55, 0x0128, + 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7f7d, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, @@ -3904,21 +3909,21 @@ 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x2071, 0x19d4, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, - 0x7026, 0x702b, 0x8fbe, 0x7032, 0x7037, 0x903b, 0x703f, 0xffff, - 0x7042, 0x7047, 0x521d, 0x704a, 0x705b, 0x81fe, 0x080c, 0x103b, + 0x7026, 0x702b, 0x8fd9, 0x7032, 0x7037, 0x9056, 0x703f, 0xffff, + 0x7042, 0x7047, 0x5224, 0x704a, 0x705b, 0x8226, 0x080c, 0x103b, 0x090c, 0x0d65, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, - 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19d4, 0x1d04, 0x8120, 0x2091, + 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19d4, 0x1d04, 0x8148, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1560, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0d65, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x2069, 0x1800, 0x69e8, 0xd1e4, - 0x1138, 0xd1dc, 0x1118, 0x080c, 0x826c, 0x0010, 0x080c, 0x8243, + 0x1138, 0xd1dc, 0x1118, 0x080c, 0x8294, 0x0010, 0x080c, 0x826b, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 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, 0x90c3, + 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x90de, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, @@ -3926,29 +3931,29 @@ 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, - 0x7004, 0x0002, 0x8148, 0x8149, 0x8173, 0x00e6, 0x2071, 0x19d4, + 0x7004, 0x0002, 0x8170, 0x8171, 0x819b, 0x00e6, 0x2071, 0x19d4, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d4, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19d4, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, - 0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c, 0x6269, 0x11a8, + 0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c, 0x6270, 0x11a8, 0xb888, 0x8001, 0x0290, 0xb88a, 0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8c0, 0x9005, 0x0138, 0x0026, 0xba3c, 0x0016, 0x080c, - 0x6394, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108, 0x9182, 0x0800, + 0x639b, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128, 0x7112, 0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x2031, 0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048, 0x9005, 0x0128, 0x8001, 0x604a, 0x1110, - 0x080c, 0xbb41, 0x6018, 0x9005, 0x0904, 0x81c5, 0x00f6, 0x2079, - 0x0300, 0x7918, 0xd1b4, 0x1904, 0x81d8, 0x781b, 0x2020, 0xa001, - 0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804, 0x81d8, 0x8001, + 0x080c, 0xbb5c, 0x6018, 0x9005, 0x0904, 0x81ed, 0x00f6, 0x2079, + 0x0300, 0x7918, 0xd1b4, 0x1904, 0x8200, 0x781b, 0x2020, 0xa001, + 0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804, 0x8200, 0x8001, 0x601a, 0x0106, 0x781b, 0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186, - 0x0006, 0x11c8, 0x080c, 0xb82c, 0x01b0, 0x6014, 0x2048, 0xa884, + 0x0006, 0x11c8, 0x080c, 0xb847, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, - 0x080c, 0xbf72, 0x0110, 0x080c, 0xb52a, 0x012e, 0x9c88, 0x001c, + 0x080c, 0xbf8d, 0x0110, 0x080c, 0xb545, 0x012e, 0x9c88, 0x001c, 0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x1228, 0x8631, 0x0138, - 0x2160, 0x0804, 0x8177, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005, + 0x2160, 0x0804, 0x819f, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x19d4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19dd, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d4, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, @@ -3958,7 +3963,7 @@ 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x110c, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x0156, 0x080c, 0x808b, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x0156, 0x080c, 0x80b3, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19d4, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d4, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, @@ -3980,8 +3985,8 @@ 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a3f, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, - 0x00c0, 0x918e, 0x00c0, 0x0904, 0x836d, 0xd0b4, 0x1168, 0xd0bc, - 0x1904, 0x8346, 0x2009, 0x0006, 0x080c, 0x839a, 0x0005, 0x900e, + 0x00c0, 0x918e, 0x00c0, 0x0904, 0x8395, 0xd0b4, 0x1168, 0xd0bc, + 0x1904, 0x836e, 0x2009, 0x0006, 0x080c, 0x83c2, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, 0x2023, 0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, 0x6100, 0x918e, 0x0007, 0x1500, 0x2009, 0x1875, 0x210c, 0xd184, 0x11d8, @@ -3989,44 +3994,44 @@ 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, - 0x1904, 0x8394, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, + 0x1904, 0x83bc, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1875, 0x2104, 0xd084, 0x1138, 0x87ff, - 0x1120, 0x2009, 0x0043, 0x0804, 0x9c6a, 0x0005, 0x87ff, 0x1de8, - 0x2009, 0x0042, 0x0804, 0x9c6a, 0x6110, 0x00b6, 0x2158, 0xb900, + 0x1120, 0x2009, 0x0043, 0x0804, 0x9c85, 0x0005, 0x87ff, 0x1de8, + 0x2009, 0x0042, 0x0804, 0x9c85, 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, 0x8394, 0x908c, + 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x83bc, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, 0x164f, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, - 0x9c6a, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, + 0x9c85, 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, 0x9c6a, 0x0005, - 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9c6a, + 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x9c85, 0x0005, + 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9c85, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, - 0x2009, 0x0001, 0x0096, 0x080c, 0xb82c, 0x0518, 0x6014, 0x2048, + 0x2009, 0x0001, 0x0096, 0x080c, 0xb847, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a3f, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, - 0x67c4, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x82b6, + 0x67cb, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x82de, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a3f, 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, 0x8086, 0x818e, 0x1208, - 0x9200, 0x1f04, 0x83e5, 0x8086, 0x818e, 0x004e, 0x003e, 0x012e, + 0x9200, 0x1f04, 0x840d, 0x8086, 0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a, 0x12b8, 0x8213, 0x818d, 0x0228, 0x911a, - 0x1220, 0x1f04, 0x83fc, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, - 0x83fc, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, + 0x1220, 0x1f04, 0x8424, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, + 0x8424, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069, 0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, - 0x2069, 0x0200, 0x080c, 0x97df, 0x04a9, 0x080c, 0x97ca, 0x0491, - 0x080c, 0x97cd, 0x0479, 0x080c, 0x97d0, 0x0461, 0x080c, 0x97d3, - 0x0449, 0x080c, 0x97d6, 0x0431, 0x080c, 0x97d9, 0x0419, 0x080c, - 0x97dc, 0x0401, 0x01de, 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6, + 0x2069, 0x0200, 0x080c, 0x97fa, 0x04a9, 0x080c, 0x97e5, 0x0491, + 0x080c, 0x97e8, 0x0479, 0x080c, 0x97eb, 0x0461, 0x080c, 0x97ee, + 0x0449, 0x080c, 0x97f1, 0x0431, 0x080c, 0x97f4, 0x0419, 0x080c, + 0x97f7, 0x0401, 0x01de, 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9, 0x7807, 0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004, 0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100, 0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe, @@ -4039,256 +4044,256 @@ 0x9086, 0x0001, 0x01b0, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x611e, 0x00ce, 0x0005, 0x6122, 0x611e, - 0x0cd8, 0x6146, 0x2c08, 0x2001, 0x0012, 0x080c, 0x989e, 0x0005, + 0x0cd8, 0x6146, 0x2c08, 0x2001, 0x0012, 0x080c, 0x98b9, 0x0005, 0x0016, 0x2009, 0x8020, 0x6146, 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1128, 0x2001, 0x0019, 0x080c, - 0x989e, 0x0088, 0x00c6, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e, + 0x98b9, 0x0088, 0x00c6, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128, 0x9080, 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19b8, 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146, 0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8, - 0x6146, 0x600f, 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0x989e, + 0x6146, 0x600f, 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0x98b9, 0x0005, 0x6044, 0xd0dc, 0x0128, 0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19b8, 0x7648, 0x2660, 0x2678, 0x2091, 0x8000, - 0x8cff, 0x0904, 0x857b, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, - 0x8576, 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x8576, 0x704c, - 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x703f, + 0x8cff, 0x0904, 0x85a3, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, + 0x859e, 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x859e, 0x704c, + 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9286, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x003e, 0x2029, - 0x0001, 0x080c, 0x84f9, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, + 0x0001, 0x080c, 0x8521, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, - 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb82c, 0x01c8, + 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb847, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1560, 0xa867, 0x0103, - 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xbb2a, - 0x080c, 0xd4f8, 0x080c, 0x698f, 0x007e, 0x003e, 0x001e, 0x080c, - 0xba1b, 0x080c, 0x9c06, 0x00ce, 0x0804, 0x8518, 0x2c78, 0x600c, - 0x2060, 0x0804, 0x8518, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, + 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xbb45, + 0x080c, 0xd51a, 0x080c, 0x6996, 0x007e, 0x003e, 0x001e, 0x080c, + 0xba36, 0x080c, 0x9c21, 0x00ce, 0x0804, 0x8540, 0x2c78, 0x600c, + 0x2060, 0x0804, 0x8540, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, - 0x0076, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x007e, 0x003e, 0x001e, + 0x0076, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086, 0x000a, 0x0918, 0x0800, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, - 0x2079, 0x19b8, 0x7848, 0x9065, 0x0904, 0x85fd, 0x600c, 0x0006, + 0x2079, 0x19b8, 0x7848, 0x9065, 0x0904, 0x8625, 0x600c, 0x0006, 0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001, - 0x080c, 0x926b, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52, + 0x080c, 0x9286, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52, 0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000, - 0x0006, 0x00e6, 0x2f70, 0x080c, 0x84f9, 0x00ee, 0x080c, 0xb82c, + 0x0006, 0x00e6, 0x2f70, 0x080c, 0x8521, 0x00ee, 0x080c, 0xb847, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001, 0x1959, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877, - 0x0000, 0x080c, 0x6983, 0x080c, 0xba1b, 0x6044, 0xc0fc, 0x6046, - 0x080c, 0x9c06, 0x000e, 0x0804, 0x85ab, 0x7e4a, 0x7e46, 0x012e, + 0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x6044, 0xc0fc, 0x6046, + 0x080c, 0x9c21, 0x000e, 0x0804, 0x85d3, 0x7e4a, 0x7e46, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1118, 0x080c, 0xd1fc, 0x0c38, 0x6020, 0x9086, + 0x9086, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c38, 0x6020, 0x9086, 0x000a, 0x09e0, 0x08c8, 0x0016, 0x0026, 0x0086, 0x9046, 0x00a9, - 0x080c, 0x8704, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, - 0x2079, 0x19b8, 0x2091, 0x8000, 0x080c, 0x874d, 0x080c, 0x87e1, - 0x080c, 0x63f6, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, + 0x080c, 0x872c, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, + 0x2079, 0x19b8, 0x2091, 0x8000, 0x080c, 0x8775, 0x080c, 0x8809, + 0x080c, 0x63fd, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, 0x2678, 0x8cff, 0x0904, - 0x86c9, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x86c4, 0x88ff, - 0x0120, 0x605c, 0x9106, 0x1904, 0x86c4, 0x7030, 0x9c06, 0x1570, - 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x81e3, 0x080c, - 0x8f9c, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036, + 0x86f1, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x86ec, 0x88ff, + 0x0120, 0x605c, 0x9106, 0x1904, 0x86ec, 0x7030, 0x9c06, 0x1570, + 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b, 0x080c, + 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008, 0xc0ad, - 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x86c4, 0x7020, 0x9c36, + 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x86ec, 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, - 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01e8, - 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xba41, 0x1118, 0x080c, - 0xa574, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, - 0x0036, 0x0086, 0x080c, 0xbb2a, 0x080c, 0xd4f8, 0x080c, 0x698f, - 0x008e, 0x003e, 0x001e, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x080c, - 0x935d, 0x00ce, 0x0804, 0x863e, 0x2c78, 0x600c, 0x2060, 0x0804, - 0x863e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, + 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xb847, 0x01e8, + 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xba5c, 0x1118, 0x080c, + 0xa58f, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, + 0x0036, 0x0086, 0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996, + 0x008e, 0x003e, 0x001e, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c, + 0x9378, 0x00ce, 0x0804, 0x8666, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x8666, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, - 0x0016, 0x0036, 0x0086, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x008e, - 0x003e, 0x001e, 0x08d0, 0x080c, 0xa574, 0x6020, 0x9086, 0x0002, - 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x86aa, - 0x9086, 0x008b, 0x0904, 0x86aa, 0x0840, 0x6020, 0x9086, 0x0005, + 0x0016, 0x0036, 0x0086, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x008e, + 0x003e, 0x001e, 0x08d0, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002, + 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x86d2, + 0x9086, 0x008b, 0x0904, 0x86d2, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, - 0x008b, 0x09b0, 0x0804, 0x86bd, 0x0006, 0x00f6, 0x00e6, 0x0096, + 0x008b, 0x09b0, 0x0804, 0x86e5, 0x0006, 0x00f6, 0x00e6, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19b8, 0x9036, 0x7828, 0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff, 0x080c, - 0x9a69, 0x01d8, 0x610c, 0x0016, 0x080c, 0x90f5, 0x6014, 0x2048, + 0x9a84, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, - 0x080c, 0xbb2a, 0x080c, 0xd4f8, 0x080c, 0x698f, 0x008e, 0x003e, - 0x001e, 0x080c, 0x9c06, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060, - 0x08b8, 0x080c, 0x6413, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be, + 0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996, 0x008e, 0x003e, + 0x001e, 0x080c, 0x9c21, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060, + 0x08b8, 0x080c, 0x641a, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006, 0x0066, - 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x87b4, 0x600c, + 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x87dc, 0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830, 0x9c06, - 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x81e3, - 0x080c, 0x8f9c, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7833, 0x0000, + 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b, + 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7833, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058, 0x080c, - 0x6616, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, 0x780a, - 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xb82a, 0x01b0, 0x6020, - 0x9086, 0x0003, 0x1508, 0x080c, 0xba41, 0x1118, 0x080c, 0xa574, - 0x0060, 0x080c, 0x6616, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, - 0x0000, 0x080c, 0x698f, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x080c, - 0x935d, 0x000e, 0x0804, 0x8754, 0x7e22, 0x7e1e, 0x00de, 0x00ce, + 0x661d, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, 0x780a, + 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xb845, 0x01b0, 0x6020, + 0x9086, 0x0003, 0x1508, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, + 0x0060, 0x080c, 0x661d, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c, + 0x9378, 0x000e, 0x0804, 0x877c, 0x7e22, 0x7e1e, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, - 0x080c, 0xd1fc, 0x0c50, 0x080c, 0xa574, 0x6020, 0x9086, 0x0002, + 0x080c, 0xd21e, 0x0c50, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036, 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08, 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff, 0x080c, - 0x9a69, 0x0180, 0x610c, 0x080c, 0x90f5, 0x6014, 0x2048, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c, 0x9c06, + 0x9a84, 0x0180, 0x610c, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867, + 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0x9c21, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be, 0x009e, - 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, 0x5dcf, + 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, 0x5dd6, 0x11b0, 0x2071, 0x19b8, 0x7030, 0x9080, 0x0005, 0x2004, 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19b8, 0x7030, 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043, 0xffff, - 0x080c, 0x9a69, 0x0178, 0x080c, 0x90f5, 0x6014, 0x2048, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb2a, 0x080c, 0x698f, - 0x080c, 0x9c06, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x080c, - 0x990b, 0x0106, 0x190c, 0x98ad, 0x2071, 0x0101, 0x2e04, 0xc0c4, - 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0x98c9, 0x00ce, + 0x080c, 0x9a84, 0x0178, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867, + 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996, + 0x080c, 0x9c21, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x080c, + 0x9926, 0x0106, 0x190c, 0x98c8, 0x2071, 0x0101, 0x2e04, 0xc0c4, + 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19b8, 0x7030, 0x9005, 0x0da0, - 0x9c06, 0x190c, 0x0d65, 0x7036, 0x080c, 0x81e3, 0x7004, 0x9084, - 0x0007, 0x0002, 0x887c, 0x887e, 0x8885, 0x888f, 0x889d, 0x887c, - 0x8885, 0x887a, 0x080c, 0x0d65, 0x0428, 0x0005, 0x080c, 0x9a54, + 0x9c06, 0x190c, 0x0d65, 0x7036, 0x080c, 0x820b, 0x7004, 0x9084, + 0x0007, 0x0002, 0x88a4, 0x88a6, 0x88ad, 0x88b7, 0x88c5, 0x88a4, + 0x88ad, 0x88a2, 0x080c, 0x0d65, 0x0428, 0x0005, 0x080c, 0x9a6f, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036, 0x080c, - 0x90f5, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c, - 0x9a3f, 0x0140, 0x080c, 0x9a54, 0x0128, 0x0066, 0x9036, 0x080c, - 0x90f5, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0x9a3f, 0x080c, - 0x9487, 0x0000, 0x010e, 0x190c, 0x98c9, 0x00ce, 0x00ee, 0x00be, - 0x0005, 0x00d6, 0x00c6, 0x080c, 0x990b, 0x0106, 0x190c, 0x98ad, - 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0x98c9, 0x00ce, 0x00de, + 0x9110, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c, + 0x9a5a, 0x0140, 0x080c, 0x9a6f, 0x0128, 0x0066, 0x9036, 0x080c, + 0x9110, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0x9a5a, 0x080c, + 0x94a2, 0x0000, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00ee, 0x00be, + 0x0005, 0x00d6, 0x00c6, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, + 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de, 0x0005, 0x2069, 0x19b8, 0x684c, 0x9005, 0x0da8, 0x9c06, 0x190c, - 0x0d65, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x84f9, 0x00ee, 0x080c, - 0x81f0, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x683c, - 0x9084, 0x0003, 0x0002, 0x88d9, 0x88da, 0x88f8, 0x88d7, 0x080c, + 0x0d65, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x8521, 0x00ee, 0x080c, + 0x8218, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x683c, + 0x9084, 0x0003, 0x0002, 0x8901, 0x8902, 0x8920, 0x88ff, 0x080c, 0x0d65, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, 0x600c, 0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, 0x6846, 0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, 0x0002, 0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, 0x0120, 0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, 0x684f, 0x0000, - 0x010e, 0x190c, 0x98c9, 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020, - 0x9084, 0x000f, 0x000b, 0x0005, 0x8924, 0x8927, 0x8d80, 0x8e0f, - 0x8927, 0x8d80, 0x8e0f, 0x8924, 0x8927, 0x8924, 0x8924, 0x8924, - 0x8924, 0x8924, 0x8924, 0x8924, 0x080c, 0x884c, 0x0005, 0x00b6, + 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020, + 0x9084, 0x000f, 0x000b, 0x0005, 0x894c, 0x894f, 0x8da8, 0x8e37, + 0x894f, 0x8da8, 0x8e37, 0x894c, 0x894f, 0x894c, 0x894c, 0x894c, + 0x894c, 0x894c, 0x894c, 0x894c, 0x080c, 0x8874, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, - 0x619a, 0x908a, 0x0040, 0x1a04, 0x8993, 0x005b, 0x00fe, 0x00ee, + 0x619a, 0x908a, 0x0040, 0x1a04, 0x89bb, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, - 0x0005, 0x8b0a, 0x8b45, 0x8b6e, 0x8c11, 0x8c32, 0x8c38, 0x8c45, - 0x8c4d, 0x8c59, 0x8c5f, 0x8c70, 0x8c5f, 0x8cc7, 0x8c4d, 0x8cd3, - 0x8cd9, 0x8c59, 0x8cd9, 0x8ce5, 0x8991, 0x8991, 0x8991, 0x8991, - 0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x9116, - 0x9139, 0x914a, 0x916a, 0x919c, 0x8c45, 0x8991, 0x8c45, 0x8c5f, - 0x8991, 0x8b6e, 0x8c11, 0x8991, 0x957a, 0x8c5f, 0x8991, 0x9596, - 0x8c5f, 0x8991, 0x8c59, 0x8b04, 0x89b4, 0x8991, 0x95b2, 0x961f, - 0x96ff, 0x8991, 0x970c, 0x8c42, 0x9737, 0x8991, 0x91a6, 0x9743, - 0x8991, 0x080c, 0x0d65, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, + 0x0005, 0x8b32, 0x8b6d, 0x8b96, 0x8c39, 0x8c5a, 0x8c60, 0x8c6d, + 0x8c75, 0x8c81, 0x8c87, 0x8c98, 0x8c87, 0x8cef, 0x8c75, 0x8cfb, + 0x8d01, 0x8c81, 0x8d01, 0x8d0d, 0x89b9, 0x89b9, 0x89b9, 0x89b9, + 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x9131, + 0x9154, 0x9165, 0x9185, 0x91b7, 0x8c6d, 0x89b9, 0x8c6d, 0x8c87, + 0x89b9, 0x8b96, 0x8c39, 0x89b9, 0x9595, 0x8c87, 0x89b9, 0x95b1, + 0x8c87, 0x89b9, 0x8c81, 0x8b2c, 0x89dc, 0x89b9, 0x95cd, 0x963a, + 0x971a, 0x89b9, 0x9727, 0x8c6a, 0x9752, 0x89b9, 0x91c1, 0x975e, + 0x89b9, 0x080c, 0x0d65, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, - 0x89b2, 0x89b2, 0x89b2, 0x89db, 0x8a87, 0x8a92, 0x89b2, 0x89b2, - 0x89b2, 0x8ad9, 0x8ae5, 0x89f6, 0x89b2, 0x8a11, 0x8a45, 0x9abf, - 0x9b04, 0x8c5f, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x8cf8, + 0x89da, 0x89da, 0x89da, 0x8a03, 0x8aaf, 0x8aba, 0x89da, 0x89da, + 0x89da, 0x8b01, 0x8b0d, 0x8a1e, 0x89da, 0x8a39, 0x8a6d, 0x9ada, + 0x9b1f, 0x8c87, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x8d20, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, - 0x080c, 0x8f6c, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, - 0xb8a0, 0x00be, 0x080c, 0x9b4b, 0x1118, 0x9084, 0xff80, 0x0110, - 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8cf8, 0x7003, + 0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, + 0xb8a0, 0x00be, 0x080c, 0x9b66, 0x1118, 0x9084, 0xff80, 0x0110, + 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8d20, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, - 0x0010, 0x080c, 0x8f6c, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, - 0x080c, 0x8cf8, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, + 0x0010, 0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, + 0x080c, 0x8d20, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, - 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f6c, 0x009e, 0x00de, - 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8cf8, + 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f87, 0x009e, 0x00de, + 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d20, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001, - 0x0001, 0x080c, 0x2037, 0x080c, 0xc575, 0x9006, 0x080c, 0x2037, + 0x0001, 0x080c, 0x2037, 0x080c, 0xc591, 0x9006, 0x080c, 0x2037, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, - 0x8f6c, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, - 0x2091, 0x8000, 0x080c, 0x8d43, 0x20e9, 0x0000, 0x2001, 0x1974, + 0x8f87, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8d6b, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, - 0xc575, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, - 0x7814, 0x2048, 0x080c, 0x0fd4, 0x080c, 0x8f6c, 0x012e, 0x009e, + 0xc591, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, + 0x7814, 0x2048, 0x080c, 0x0fd4, 0x080c, 0x8f87, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, - 0x8cf8, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, - 0x0804, 0x8f6c, 0x00d6, 0x00e6, 0x080c, 0x8d43, 0x7814, 0x9084, + 0x8d20, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, + 0x0804, 0x8f87, 0x00d6, 0x00e6, 0x080c, 0x8d6b, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, - 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8aa8, 0x2069, 0x1801, 0x20a9, - 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ab1, 0x2069, 0x1984, + 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad0, 0x2069, 0x1801, 0x20a9, + 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad9, 0x2069, 0x1984, 0x9086, 0xdf00, 0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, - 0x1f04, 0x8abf, 0x60c3, 0x004c, 0x080c, 0x8f6c, 0x00ee, 0x00de, - 0x0005, 0x080c, 0x8cf8, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, - 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x00d6, 0x0026, 0x0016, - 0x080c, 0x8d43, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, + 0x1f04, 0x8ae7, 0x60c3, 0x004c, 0x080c, 0x8f87, 0x00ee, 0x00de, + 0x0005, 0x080c, 0x8d20, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, + 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00d6, 0x0026, 0x0016, + 0x080c, 0x8d6b, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, - 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f6c, + 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f87, 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, - 0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x5200, 0x2069, 0x1853, + 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2457, 0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, - 0x20a1, 0x0254, 0x4003, 0x080c, 0x9b4b, 0x1120, 0xb8a0, 0x9082, + 0x20a1, 0x0254, 0x4003, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, - 0x7036, 0x60c3, 0x001c, 0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003, - 0x0500, 0x080c, 0x9b4b, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x7036, 0x60c3, 0x001c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, + 0x0500, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, - 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x8f6c, 0x080c, 0x8cf8, - 0x9006, 0x080c, 0x662a, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, + 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x080c, 0x8d20, + 0x9006, 0x080c, 0x6631, 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, 0x8bd9, 0x00d6, 0x2069, 0x193d, + 0xb8a0, 0x9086, 0x007e, 0x1904, 0x8c01, 0x00d6, 0x2069, 0x193d, 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, 0x70ac, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, + 0x6808, 0x080c, 0x70b7, 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, 0x97ca, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd, - 0x7002, 0x080c, 0x538a, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, + 0x080c, 0x97e5, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd, + 0x7002, 0x080c, 0x5391, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009, 0x0002, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2498, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, - 0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97ca, 0x20a1, 0x024e, + 0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97e5, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, - 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, + 0x8f87, 0x080c, 0x8d20, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010, - 0x9085, 0x0002, 0x00d6, 0x0804, 0x8ca8, 0x7026, 0x60c3, 0x0014, - 0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x5000, 0x0804, 0x8b88, - 0x080c, 0x8cf8, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, - 0x0804, 0x8f6c, 0x080c, 0x8d3a, 0x0010, 0x080c, 0x8d43, 0x7003, - 0x0200, 0x60c3, 0x0004, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003, + 0x9085, 0x0002, 0x00d6, 0x0804, 0x8cd0, 0x7026, 0x60c3, 0x0014, + 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5000, 0x0804, 0x8bb0, + 0x080c, 0x8d20, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, + 0x0804, 0x8f87, 0x080c, 0x8d62, 0x0010, 0x080c, 0x8d6b, 0x7003, + 0x0200, 0x60c3, 0x0004, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, - 0x8f6c, 0x080c, 0x8d43, 0x7003, 0x0200, 0x0804, 0x8b88, 0x080c, - 0x8d43, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, - 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c, - 0x00d6, 0x080c, 0x8d43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, + 0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804, 0x8bb0, 0x080c, + 0x8d6b, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, + 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, + 0x00d6, 0x080c, 0x8d6b, 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, @@ -4298,2359 +4303,2358 @@ 0x0026, 0x2009, 0x1873, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbac4, 0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, - 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x8f6c, 0x080c, - 0x8d43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, - 0x0014, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003, 0x0200, 0x0804, - 0x8b0e, 0x080c, 0x8d43, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, - 0x2a00, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003, - 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x0026, + 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x8f87, 0x080c, + 0x8d6b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, + 0x0014, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804, + 0x8b36, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, + 0x2a00, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003, + 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, - 0x080c, 0x97df, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, + 0x080c, 0x97fa, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, - 0x004e, 0x003e, 0x00de, 0x080c, 0x8f60, 0x721a, 0x9f95, 0x0000, + 0x004e, 0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, - 0x080c, 0x97df, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, + 0x080c, 0x97fa, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 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, 0x97df, 0xb810, 0x9305, 0x7002, + 0x2300, 0x2021, 0x0100, 0x080c, 0x97fa, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, - 0x003e, 0x00de, 0x080c, 0x8f60, 0x721a, 0x7a08, 0x7222, 0x2f10, - 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8f60, 0x721a, + 0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10, + 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x00be, 0x0005, 0x8db1, 0x8dc0, 0x8dcb, 0x8daf, 0x8daf, 0x8daf, - 0x8db1, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x080c, + 0x00be, 0x0005, 0x8dd9, 0x8de8, 0x8df3, 0x8dd7, 0x8dd7, 0x8dd7, + 0x8dd9, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x080c, 0x0d65, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x27a2, 0x0228, - 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x8f6c, + 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x8f87, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, - 0x000c, 0x0804, 0x8f6c, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, - 0x60c3, 0x0004, 0x0804, 0x8f6c, 0x0026, 0x080c, 0x97df, 0xb810, + 0x000c, 0x0804, 0x8f87, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, + 0x60c3, 0x0004, 0x0804, 0x8f87, 0x0026, 0x080c, 0x97fa, 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, - 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x8d13, 0x0026, - 0x080c, 0x97df, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, + 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x8d3b, 0x0026, + 0x080c, 0x97fa, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, - 0x7012, 0x0804, 0x8d75, 0x0026, 0x080c, 0x97df, 0xb810, 0x9085, + 0x7012, 0x0804, 0x8d9d, 0x0026, 0x080c, 0x97fa, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, - 0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8d75, 0x00b6, + 0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8d9d, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d65, 0x908a, 0x0057, 0x1a0c, 0x0d65, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, - 0x0005, 0x8e44, 0x8e44, 0x8e44, 0x8e68, 0x8e44, 0x8e44, 0x8e44, - 0x8e44, 0x8e44, 0x8e44, 0x8e44, 0x933a, 0x9342, 0x934a, 0x9352, - 0x8e44, 0x8e44, 0x8e44, 0x9332, 0x080c, 0x0d65, 0x6813, 0x0008, + 0x0005, 0x8e6c, 0x8e6c, 0x8e6c, 0x8e92, 0x8e6c, 0x8e6c, 0x8e6c, + 0x8e6c, 0x8e6c, 0x8e6c, 0x8e6c, 0x9355, 0x935d, 0x9365, 0x936d, + 0x8e6c, 0x8e6c, 0x8e6c, 0x934d, 0x080c, 0x0d65, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8c4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, - 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x6a78, 0x720a, 0x6a7c, - 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, - 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, - 0x8e78, 0x8e78, 0x8e7a, 0x8e78, 0x8e78, 0x8e78, 0x8e94, 0x8e78, - 0x080c, 0x0d65, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, - 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804, 0xd0bc, 0x0130, - 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, - 0x60c3, 0x0001, 0x0804, 0x8f6c, 0x2009, 0x0003, 0x0019, 0x7033, - 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97df, 0x001e, 0xb810, 0x9085, - 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, - 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, - 0x8f60, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, - 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, - 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, - 0xba14, 0x7378, 0x747c, 0x7820, 0x0002, 0x8edc, 0x8edc, 0x8edc, - 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8ede, - 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x080c, 0x0d65, 0x609f, 0x0000, - 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00, - 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, - 0xa878, 0xc0fc, 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, 0xa848, 0x608a, 0xa844, 0x608e, - 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0x080c, 0x97bf, 0x2009, 0x07d0, 0x60c4, 0x9084, - 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x81e8, 0x003e, - 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, - 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19b8, - 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x00f1, 0x080c, 0x81da, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c, - 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x81da, - 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19b9, - 0x2003, 0x0000, 0x2001, 0x19c4, 0x2003, 0x0000, 0x0c88, 0x0006, - 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0009, 0x080c, 0x287c, - 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x080c, - 0x990b, 0x0106, 0x190c, 0x98ad, 0x2061, 0x0100, 0x61a4, 0x60a7, - 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0008, 0x080c, - 0x287c, 0x002e, 0x001e, 0x010e, 0x190c, 0x98c9, 0x000e, 0xa001, - 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, - 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x70ac, - 0x1510, 0x2001, 0x19dd, 0x2004, 0x9005, 0x1904, 0x901d, 0x080c, - 0x714d, 0x11a8, 0x2069, 0x0380, 0x6843, 0x0101, 0x6844, 0xd084, - 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, - 0x090c, 0x0d65, 0x6843, 0x0100, 0x080c, 0x81da, 0x04b0, 0x00c6, - 0x2061, 0x19b8, 0x00f0, 0x6904, 0x9194, 0x4000, 0x0598, 0x080c, - 0x8f9c, 0x080c, 0x2843, 0x00c6, 0x2061, 0x19b8, 0x6134, 0x9192, - 0x0008, 0x1278, 0x8108, 0x6136, 0x080c, 0x98ad, 0x6130, 0x080c, - 0x98c9, 0x00ce, 0x81ff, 0x01c8, 0x080c, 0x81da, 0x080c, 0x8f8f, - 0x00a0, 0x080c, 0x98ad, 0x6130, 0x91e5, 0x0000, 0x0150, 0x080c, - 0xd5ee, 0x080c, 0x81e3, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, - 0x9c6a, 0x080c, 0x98c9, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, - 0x00ce, 0x0005, 0x2001, 0x19dd, 0x2004, 0x9005, 0x1db0, 0x00c6, - 0x2061, 0x19b8, 0x6134, 0x9192, 0x0003, 0x1ad8, 0x8108, 0x6136, - 0x00ce, 0x080c, 0x81da, 0x080c, 0x5b90, 0x2009, 0x1852, 0x2114, - 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, - 0x0026, 0x080c, 0x81f0, 0x080c, 0x98ad, 0x2001, 0x0387, 0x2003, - 0x0202, 0x2071, 0x19b8, 0x714c, 0x81ff, 0x0904, 0x90b1, 0x2061, - 0x0100, 0x2069, 0x0140, 0x080c, 0x70ac, 0x11c0, 0x0036, 0x2019, - 0x0002, 0x080c, 0x926b, 0x003e, 0x714c, 0x2160, 0x080c, 0xd5ee, - 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0x9c6a, 0x2001, 0x0386, - 0x2003, 0x5040, 0x080c, 0x714d, 0x0804, 0x90b1, 0x6904, 0xd1f4, - 0x0904, 0x90be, 0x080c, 0x2843, 0x00c6, 0x704c, 0x9065, 0x090c, - 0x0d65, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1518, 0x61c8, 0x60c4, - 0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01d0, 0x6214, - 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1510, 0x0010, - 0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, - 0x704c, 0x2060, 0x080c, 0x88a9, 0x2009, 0x0049, 0x080c, 0x9c6a, - 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x714c, - 0x2160, 0x080c, 0xd5ee, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, - 0x9c6a, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c, 0x98c9, 0x002e, - 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, - 0x9072, 0x0804, 0x9074, 0x0026, 0x00e6, 0x2071, 0x19b8, 0x706c, - 0xd084, 0x01d0, 0xc084, 0x706e, 0x714c, 0x81ff, 0x01a8, 0x2071, - 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x2009, - 0x1984, 0x2011, 0x0012, 0x080c, 0x287c, 0x0030, 0x2009, 0x1984, - 0x2011, 0x0016, 0x080c, 0x287c, 0x00ee, 0x002e, 0x0005, 0x9036, - 0x2001, 0x19c2, 0x2004, 0x9005, 0x0128, 0x9c06, 0x0128, 0x2c30, - 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005, 0x00f6, 0x2079, 0x19b8, - 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc, 0x6046, 0x86ff, 0x1140, - 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a, 0x0050, 0x792a, 0x0040, - 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824, 0x9c06, 0x1108, 0x7e26, - 0x080c, 0x935d, 0x080c, 0xba1b, 0x00fe, 0x0005, 0x080c, 0x8cf8, - 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, - 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, - 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, - 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, - 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, - 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, - 0x0804, 0x8f6c, 0x0156, 0x080c, 0x8d43, 0x7003, 0x0200, 0x2011, - 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, - 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, - 0x0002, 0x9290, 0x0002, 0x1f04, 0x915b, 0x60c3, 0x001c, 0x015e, - 0x0804, 0x8f6c, 0x0016, 0x0026, 0x080c, 0x8d1f, 0x080c, 0x8d31, - 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, 0x8f6c, 0x002e, - 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x97ca, 0x20a1, - 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8cf8, 0x7003, 0x6200, - 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x0016, 0x0026, - 0x080c, 0x8cf8, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, - 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, - 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, - 0x60c2, 0x080c, 0x8f6c, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7010, 0x2060, - 0x8cff, 0x0188, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574, 0x600c, - 0x0006, 0x080c, 0xbcb8, 0x600f, 0x0000, 0x080c, 0x9bcc, 0x080c, - 0x935d, 0x00ce, 0x0c68, 0x2c00, 0x7012, 0x700e, 0x012e, 0x000e, - 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, - 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, - 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, - 0x0140, 0x2071, 0x19b8, 0x7030, 0x2060, 0x8cff, 0x0548, 0x080c, - 0x8f9c, 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x81e3, 0x00c6, 0x2061, - 0x0100, 0x080c, 0x97e3, 0x00ce, 0x20a9, 0x01f4, 0x04b1, 0x080c, - 0x884c, 0x6044, 0xd0ac, 0x1128, 0x2001, 0x1959, 0x2004, 0x604a, - 0x0020, 0x2009, 0x0013, 0x080c, 0x9c6a, 0x000e, 0x001e, 0x002e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, - 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, - 0x0d60, 0x080c, 0x81e3, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, - 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5b3a, 0x080c, - 0x8131, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, - 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2843, 0x0090, - 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x924d, 0x7804, - 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, - 0x080c, 0x2833, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, - 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, - 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, - 0x0140, 0x2071, 0x0380, 0x701c, 0x0006, 0x701f, 0x0202, 0x2071, - 0x19b8, 0x704c, 0x2060, 0x8cff, 0x0904, 0x930c, 0x9386, 0x0002, - 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, 0x930c, 0x68af, 0x95f5, - 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, - 0x0008, 0x080c, 0x81f0, 0x080c, 0x1c7a, 0x0046, 0x2009, 0x00a5, - 0x080c, 0x0e3d, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, - 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, - 0x00f6, 0x2079, 0x0090, 0x2071, 0x19b8, 0x6814, 0x9084, 0x1984, - 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, - 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, - 0x0001, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x2009, - 0x0000, 0x080c, 0x0e3d, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, - 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2843, - 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x92de, - 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, - 0x9006, 0x080c, 0x2833, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1160, - 0x2009, 0x0049, 0x080c, 0x88a9, 0x6044, 0xd0ac, 0x1118, 0x6003, - 0x0002, 0x0010, 0x080c, 0x9c6a, 0x000e, 0x2071, 0x0380, 0xd08c, - 0x1110, 0x701f, 0x0200, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, - 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, 0x012e, 0x00de, 0x0005, - 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a3e, 0x012e, - 0x00de, 0x0005, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047, - 0x1000, 0x00f8, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047, - 0x4000, 0x00b8, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047, - 0x2000, 0x0078, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047, - 0x0400, 0x0038, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047, - 0x0200, 0x60c3, 0x0020, 0x0804, 0x8f6c, 0x00e6, 0x2071, 0x19b8, - 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005, 0x00f6, - 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, 0x2678, 0x2039, 0x0001, - 0x87ff, 0x0904, 0x9402, 0x8cff, 0x0904, 0x9402, 0x6020, 0x9086, - 0x0006, 0x1904, 0x93fd, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, - 0x93fd, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0x93fd, - 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x93fd, 0x7030, 0x9c06, - 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, - 0x0148, 0x6827, 0x0001, 0x080c, 0x81e3, 0x080c, 0x9487, 0x7033, - 0x0000, 0x0428, 0x080c, 0x81e3, 0x6820, 0xd0b4, 0x0110, 0x68a7, - 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7033, + 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78, + 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, + 0xffff, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, + 0x001e, 0x0005, 0x8ea2, 0x8ea2, 0x8ea4, 0x8ea2, 0x8ea2, 0x8ea2, + 0x8ebe, 0x8ea2, 0x080c, 0x0d65, 0x7914, 0x918c, 0x08ff, 0x918d, + 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804, + 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, + 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x8f87, 0x2009, 0x0003, + 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97fa, 0x001e, + 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, + 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, + 0x7116, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, + 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, + 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, + 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x0002, 0x8f06, + 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, + 0x8f06, 0x8f08, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x080c, 0x0d65, + 0xb884, 0x609e, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, + 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, + 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, + 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, + 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, + 0x6077, 0x0000, 0xb884, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, + 0x6072, 0x0cc0, 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, 0xa848, + 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c, + 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x97da, 0x2009, + 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, + 0x080c, 0x8210, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, + 0x009e, 0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005, + 0x00d6, 0x2069, 0x19b8, 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8202, 0x0005, 0x0016, + 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, + 0x0089, 0x080c, 0x8202, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, + 0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c4, 0x2003, + 0x0000, 0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, + 0x0009, 0x080c, 0x287c, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, + 0x00c6, 0x0006, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2061, + 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, + 0x2011, 0x0008, 0x080c, 0x287c, 0x002e, 0x001e, 0x010e, 0x190c, + 0x98e4, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, + 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, + 0x0140, 0x080c, 0x70b7, 0x1510, 0x2001, 0x19dd, 0x2004, 0x9005, + 0x1904, 0x9038, 0x080c, 0x7158, 0x11a8, 0x2069, 0x0380, 0x6843, + 0x0101, 0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, + 0x1120, 0x6024, 0xd084, 0x090c, 0x0d65, 0x6843, 0x0100, 0x080c, + 0x8202, 0x04b0, 0x00c6, 0x2061, 0x19b8, 0x00f0, 0x6904, 0x9194, + 0x4000, 0x0598, 0x080c, 0x8fb7, 0x080c, 0x2843, 0x00c6, 0x2061, + 0x19b8, 0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c, + 0x98c8, 0x6130, 0x080c, 0x98e4, 0x00ce, 0x81ff, 0x01c8, 0x080c, + 0x8202, 0x080c, 0x8faa, 0x00a0, 0x080c, 0x98c8, 0x6130, 0x91e5, + 0x0000, 0x0150, 0x080c, 0xd610, 0x080c, 0x820b, 0x6003, 0x0001, + 0x2009, 0x0014, 0x080c, 0x9c85, 0x080c, 0x98e4, 0x00ce, 0x0000, + 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19dd, 0x2004, + 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6134, 0x9192, 0x0003, + 0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c, 0x8202, 0x080c, 0x5b97, + 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, + 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8218, 0x080c, 0x98c8, + 0x2001, 0x0387, 0x2003, 0x0202, 0x2071, 0x19b8, 0x714c, 0x81ff, + 0x0904, 0x90cc, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x70b7, + 0x11c0, 0x0036, 0x2019, 0x0002, 0x080c, 0x9286, 0x003e, 0x714c, + 0x2160, 0x080c, 0xd610, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, + 0x9c85, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c, 0x7158, 0x0804, + 0x90cc, 0x6904, 0xd1f4, 0x0904, 0x90d9, 0x080c, 0x2843, 0x00c6, + 0x704c, 0x9065, 0x090c, 0x0d65, 0x6020, 0x00ce, 0x9086, 0x0006, + 0x1518, 0x61c8, 0x60c4, 0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, + 0xd0d4, 0x01d0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, + 0x0002, 0x1510, 0x0010, 0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, + 0x9085, 0x0010, 0x6016, 0x704c, 0x2060, 0x080c, 0x88d1, 0x2009, + 0x0049, 0x080c, 0x9c85, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, + 0x9286, 0x003e, 0x714c, 0x2160, 0x080c, 0xd610, 0x2009, 0x004a, + 0x6003, 0x0003, 0x080c, 0x9c85, 0x2001, 0x0387, 0x2003, 0x0200, + 0x080c, 0x98e4, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, + 0x0005, 0xd1ec, 0x1904, 0x908d, 0x0804, 0x908f, 0x0026, 0x00e6, + 0x2071, 0x19b8, 0x706c, 0xd084, 0x01d0, 0xc084, 0x706e, 0x714c, + 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, + 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x287c, + 0x0030, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x287c, 0x00ee, + 0x002e, 0x0005, 0x9036, 0x2001, 0x19c2, 0x2004, 0x9005, 0x0128, + 0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005, + 0x00f6, 0x2079, 0x19b8, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc, + 0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a, + 0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824, + 0x9c06, 0x1108, 0x7e26, 0x080c, 0x9378, 0x080c, 0xba36, 0x00fe, + 0x0005, 0x080c, 0x8d20, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, + 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, + 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, + 0x1800, 0x6078, 0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, + 0x60c3, 0x002c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x0f00, + 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, + 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0156, 0x080c, 0x8d6b, + 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, + 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, + 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9176, + 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0016, 0x0026, 0x080c, + 0x8d47, 0x080c, 0x8d59, 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, 0x8f87, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, + 0x080c, 0x97e5, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, + 0x8d20, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, + 0x8f87, 0x0016, 0x0026, 0x080c, 0x8d20, 0x20e9, 0x0000, 0x20a1, + 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, + 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, + 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x8f87, 0x002e, 0x001e, + 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, + 0x19b8, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c, 0xba5c, 0x1110, + 0x080c, 0xa58f, 0x600c, 0x0006, 0x080c, 0xbcd3, 0x600f, 0x0000, + 0x080c, 0x9be7, 0x080c, 0x9378, 0x00ce, 0x0c68, 0x2c00, 0x7012, + 0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, + 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, + 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, + 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, 0x7030, 0x2060, + 0x8cff, 0x0548, 0x080c, 0x8fb7, 0x6ac0, 0x68c3, 0x0000, 0x080c, + 0x820b, 0x00c6, 0x2061, 0x0100, 0x080c, 0x97fe, 0x00ce, 0x20a9, + 0x01f4, 0x04b1, 0x080c, 0x8874, 0x6044, 0xd0ac, 0x1128, 0x2001, + 0x1959, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0x9c85, + 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, + 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, + 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x820b, 0x6814, 0x9084, + 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x2011, 0x5b41, 0x080c, 0x8159, 0x20a9, 0x01f4, 0x0009, 0x08c0, + 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, + 0x190c, 0x2843, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, + 0x1f04, 0x9268, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, + 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x0005, 0x0126, 0x0156, + 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, + 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, + 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006, + 0x701f, 0x0202, 0x2071, 0x19b8, 0x704c, 0x2060, 0x8cff, 0x0904, + 0x9327, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, + 0x9327, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, + 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8218, 0x080c, 0x1c7a, + 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e3d, 0x2021, 0x0169, 0x2404, + 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, + 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x19b8, + 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, + 0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, + 0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009, 0x0040, 0x080c, + 0x2052, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e3d, 0x004e, 0x20a9, + 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, + 0x4000, 0x190c, 0x2843, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, + 0x0010, 0x1f04, 0x92f9, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, + 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x6827, 0x4000, + 0x6824, 0x83ff, 0x1160, 0x2009, 0x0049, 0x080c, 0x88d1, 0x6044, + 0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c, 0x9c85, 0x000e, + 0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e, + 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, + 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, + 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, + 0x19b8, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c, 0x8e6e, 0x785c, + 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x8e6e, 0x785c, + 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x8e6e, 0x785c, + 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x8e6e, 0x785c, + 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x8e6e, 0x785c, + 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x8f87, + 0x00e6, 0x2071, 0x19b8, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, + 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x941d, 0x8cff, 0x0904, + 0x941d, 0x6020, 0x9086, 0x0006, 0x1904, 0x9418, 0x88ff, 0x0138, + 0x2800, 0x9c06, 0x1904, 0x9418, 0x2039, 0x0000, 0x0050, 0x6010, + 0x9b06, 0x1904, 0x9418, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, + 0x9418, 0x7030, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, + 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x820b, + 0x080c, 0x94a2, 0x7033, 0x0000, 0x0428, 0x080c, 0x820b, 0x6820, + 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, + 0x080c, 0x94a2, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, + 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, + 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, + 0x0001, 0x003e, 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, + 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, + 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, + 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, + 0x2048, 0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x009e, 0x080c, + 0x9c21, 0x080c, 0x9378, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9393, + 0x2c78, 0x600c, 0x2060, 0x0804, 0x9393, 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, 0x19b8, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9491, + 0x6020, 0x9086, 0x0006, 0x1904, 0x948c, 0x87ff, 0x0128, 0x2700, + 0x9c06, 0x1904, 0x948c, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, + 0x0118, 0x605c, 0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, + 0x2019, 0x0001, 0x080c, 0x9286, 0x703f, 0x0000, 0x9006, 0x704e, + 0x706a, 0x7052, 0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, + 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, + 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, + 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, + 0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x080c, 0x9c21, 0x87ff, + 0x1198, 0x00ce, 0x0804, 0x943d, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x943d, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, + 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, + 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x7033, 0x0000, 0x7004, + 0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, + 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, + 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, + 0x8000, 0x2071, 0x19b8, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, + 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, + 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, + 0x7046, 0x0010, 0x7047, 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, + 0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9584, 0x6010, + 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x957f, 0x7030, + 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x955b, + 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000, + 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, + 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, + 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, + 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, + 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, + 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, + 0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c, 0x11f0, + 0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c, 0xba5c, + 0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c, 0xb845, + 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, + 0xa877, 0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0xbcd3, + 0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x9504, 0x2c78, + 0x600c, 0x2060, 0x0804, 0x9504, 0x012e, 0x000e, 0x002e, 0x006e, + 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, + 0x0006, 0x1d20, 0x080c, 0xd21e, 0x0c08, 0x00d6, 0x080c, 0x8d6b, + 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, + 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, + 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8f87, 0x00de, + 0x0005, 0x080c, 0x8d6b, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, + 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, + 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00, + 0x8007, 0x7006, 0x60c2, 0x0804, 0x8f87, 0x00b6, 0x00d6, 0x0016, + 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xbed9, 0x00de, 0x1904, + 0x9632, 0x080c, 0x8d20, 0x7003, 0x1300, 0x782c, 0x080c, 0x973d, + 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, + 0x080c, 0x9b66, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, + 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, + 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, + 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, + 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, + 0x00a8, 0x080c, 0x9b66, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, + 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, + 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, + 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x8f87, + 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, + 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, + 0x01c0, 0x9186, 0x0003, 0x0904, 0x96b0, 0x9186, 0x0005, 0x0904, + 0x9698, 0x9186, 0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0x96a1, + 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0x971a, + 0x0005, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, + 0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8, 0x0002, 0x9679, 0x9684, + 0x967b, 0x9684, 0x9680, 0x9679, 0x9679, 0x9684, 0x9684, 0x9684, + 0x9684, 0x9679, 0x9679, 0x9679, 0x9679, 0x9679, 0x9684, 0x9679, + 0x9684, 0x080c, 0x0d65, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, + 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, + 0x0804, 0x96d4, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, + 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, + 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, + 0x0498, 0x04c9, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, + 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420, + 0x0451, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, + 0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, + 0x7226, 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, + 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, + 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, + 0x00de, 0x0804, 0x8f87, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, + 0x080c, 0x8d6b, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, + 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9b66, 0x1118, 0x9092, + 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34, + 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, + 0xbc84, 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, 0x8d6b, 0x7003, 0x0100, 0x782c, 0x700a, + 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c, + 0x8d17, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, + 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, + 0x701a, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x00e6, 0x2071, 0x0240, + 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8c4, 0xd084, + 0x0120, 0x7850, 0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, + 0x00ee, 0x0005, 0x080c, 0x8d62, 0x7003, 0x0100, 0x782c, 0x700a, + 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00a9, 0x7914, + 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x27a2, + 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, + 0x8faa, 0x080c, 0x8202, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, + 0x7860, 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, 0x97fa, 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, 0x1983, 0x210c, 0x009e, 0x918d, + 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, + 0x900e, 0x080c, 0x287c, 0x002e, 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, 0x00f6, 0x00e6, + 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, + 0x2071, 0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98a5, + 0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, + 0x987c, 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7020, - 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, - 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xb82a, - 0x0110, 0x080c, 0xd1fc, 0x009e, 0x080c, 0x9c06, 0x080c, 0x935d, - 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9378, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x9378, 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, 0x19b8, 0x7648, - 0x2660, 0x2678, 0x8cff, 0x0904, 0x9476, 0x6020, 0x9086, 0x0006, - 0x1904, 0x9471, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x9471, - 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x605c, 0x9106, - 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, - 0x926b, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, - 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, - 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, - 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, - 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0110, - 0x080c, 0xd1fc, 0x080c, 0x9c06, 0x87ff, 0x1198, 0x00ce, 0x0804, - 0x9422, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9422, 0x9006, 0x012e, - 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, - 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, - 0x2071, 0x19b8, 0x7033, 0x0000, 0x7004, 0x9086, 0x0003, 0x0158, - 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, - 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, - 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, - 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, - 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, - 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, - 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, 0x19b8, 0x7610, 0x2660, - 0x2678, 0x8cff, 0x0904, 0x9569, 0x6010, 0x00b6, 0x2058, 0xb8a0, - 0x00be, 0x9206, 0x1904, 0x9564, 0x7030, 0x9c06, 0x1520, 0x2069, - 0x0100, 0x68c0, 0x9005, 0x0904, 0x9540, 0x080c, 0x8f9c, 0x68c3, - 0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, + 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, + 0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, + 0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, + 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, + 0x0000, 0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c, + 0x11f0, 0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c, + 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c, + 0xb845, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, + 0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c, + 0xbcd3, 0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x982d, + 0x2c78, 0x600c, 0x2060, 0x0804, 0x982d, 0x7013, 0x0000, 0x700f, + 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, + 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xd21e, + 0x08f0, 0x00f6, 0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, + 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, + 0x0016, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, + 0x1188, 0x2001, 0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, + 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, + 0x080c, 0x0d65, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, + 0x0007, 0x9086, 0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001, + 0x0005, 0x0156, 0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19b8, + 0x0469, 0x0106, 0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, + 0x1000, 0x6044, 0xd0fc, 0x01d8, 0x1f04, 0x9901, 0x080c, 0x0d65, + 0x080c, 0x98c8, 0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, + 0x080c, 0x8874, 0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, + 0x7042, 0x704c, 0x9c06, 0x190c, 0x0d65, 0x080c, 0x88d1, 0x010e, + 0x1919, 0x00ee, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382, + 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091, + 0x2400, 0x7808, 0xd0a4, 0x190c, 0x0d5e, 0xd09c, 0x0128, 0x7820, + 0x908c, 0xf000, 0x11b8, 0x0012, 0x012e, 0x0005, 0x994e, 0x998c, + 0x99b3, 0x99e3, 0x99f3, 0x9a04, 0x9a13, 0x9a21, 0x9a32, 0x9a36, + 0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x080c, 0x0d65, + 0x012e, 0x0005, 0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0012, 0x012e, 0x0005, + 0x9973, 0x9975, 0x9973, 0x997b, 0x9973, 0x9973, 0x9973, 0x9973, + 0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9973, + 0x9973, 0x9975, 0x9973, 0x080c, 0x0d65, 0x2009, 0x0013, 0x080c, + 0x9c85, 0x012e, 0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, + 0x080c, 0x83c0, 0x080c, 0x9be7, 0x012e, 0x0005, 0x2009, 0x0049, + 0x080c, 0x9c85, 0x012e, 0x0005, 0x080c, 0x98c8, 0x2001, 0x19dd, + 0x2003, 0x0000, 0x7030, 0x9065, 0x090c, 0x0d65, 0x7034, 0x9092, + 0x00c8, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110, + 0x7007, 0x0000, 0x781f, 0x0808, 0x0040, 0x080c, 0xd610, 0x6003, + 0x0001, 0x2009, 0x0014, 0x080c, 0x9c85, 0x781f, 0x0100, 0x080c, + 0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x81ff, 0x1128, + 0x2011, 0x19e0, 0x2013, 0x0000, 0x0400, 0x2061, 0x0100, 0x7150, + 0x9192, 0x7530, 0x12b8, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008, + 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, + 0x0012, 0x6016, 0x0050, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, + 0x6016, 0x0018, 0x706c, 0xc085, 0x706e, 0x781f, 0x0200, 0x080c, + 0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x2160, 0x6003, + 0x0003, 0x2009, 0x004a, 0x080c, 0x9c85, 0x781f, 0x0200, 0x080c, + 0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, + 0x6003, 0x0003, 0x080c, 0x98c8, 0x080c, 0x1c02, 0x781f, 0x0400, + 0x080c, 0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, + 0x2060, 0x080c, 0x98c8, 0x080c, 0x1c4a, 0x781f, 0x0400, 0x080c, + 0x98e4, 0x012e, 0x0005, 0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, + 0x6046, 0x7104, 0x9186, 0x0003, 0x0110, 0x080c, 0x8937, 0x012e, + 0x0005, 0x00f6, 0x703c, 0x9086, 0x0002, 0x0148, 0x704c, 0x907d, + 0x0130, 0x7844, 0xc0bc, 0x7846, 0x080c, 0x8ee1, 0x0000, 0x00fe, + 0x012e, 0x0005, 0x080c, 0x7158, 0x012e, 0x0005, 0x080c, 0x0d65, + 0x0005, 0x00e6, 0x2071, 0x19b8, 0x6044, 0xc0bc, 0x6046, 0xd0fc, + 0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c, 0x9286, + 0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138, 0x2001, + 0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c, 0x94b8, + 0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c, 0x9378, + 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212, 0x600f, + 0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005, 0x0026, + 0x7020, 0x9c06, 0x1178, 0x080c, 0x9378, 0x6044, 0xc0fc, 0x6046, + 0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010, 0x7222, + 0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06, + 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c, 0x820b, + 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, - 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, 0x7612, - 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e, - 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, - 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xba30, 0x1158, - 0x080c, 0x3034, 0x080c, 0xba41, 0x11f0, 0x080c, 0xa574, 0x00d8, - 0x080c, 0x9487, 0x08c0, 0x080c, 0xba41, 0x1118, 0x080c, 0xa574, - 0x0090, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0168, 0x6020, 0x9086, - 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, - 0x6983, 0x080c, 0xba1b, 0x080c, 0xbcb8, 0x080c, 0x9c06, 0x080c, - 0x935d, 0x00ce, 0x0804, 0x94e9, 0x2c78, 0x600c, 0x2060, 0x0804, - 0x94e9, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, - 0xd1fc, 0x0c08, 0x00d6, 0x080c, 0x8d43, 0x7003, 0x0200, 0x7007, - 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x195a, 0x20e9, - 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, - 0x7027, 0x7878, 0x080c, 0x8f6c, 0x00de, 0x0005, 0x080c, 0x8d43, - 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, - 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff, 0x9085, - 0x0200, 0x7002, 0x7860, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, - 0x0804, 0x8f6c, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, - 0x0035, 0x080c, 0xbebe, 0x00de, 0x1904, 0x9617, 0x080c, 0x8cf8, - 0x7003, 0x1300, 0x782c, 0x080c, 0x9722, 0x2068, 0x6820, 0x9086, - 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0x9b4b, 0x11d8, - 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, - 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, - 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, - 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, - 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c, 0x9b4b, - 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, - 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, - 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, - 0x000c, 0x001e, 0x00de, 0x080c, 0x8f6c, 0x00be, 0x0005, 0x781b, - 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, - 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, - 0x0904, 0x9695, 0x9186, 0x0005, 0x0904, 0x967d, 0x9186, 0x0004, - 0x05f0, 0x9186, 0x0008, 0x0904, 0x9686, 0x7807, 0x0037, 0x782f, - 0x0003, 0x7817, 0x1700, 0x080c, 0x96ff, 0x0005, 0x080c, 0x96c0, - 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x6a44, - 0xd2fc, 0x11f8, 0x0002, 0x965e, 0x9669, 0x9660, 0x9669, 0x9665, - 0x965e, 0x965e, 0x9669, 0x9669, 0x9669, 0x9669, 0x965e, 0x965e, - 0x965e, 0x965e, 0x965e, 0x9669, 0x965e, 0x9669, 0x080c, 0x0d65, - 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, - 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x96b9, 0x080c, - 0x96c0, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, - 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, 0x080c, 0x96c0, 0x00d6, - 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0498, 0x04c9, 0x00d6, - 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, - 0x9286, 0x0002, 0x1108, 0x900e, 0x0420, 0x0451, 0x00d6, 0x0026, - 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, - 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, - 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000, 0x2004, 0x908e, - 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0008, - 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, 0x8f6c, - 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x8d43, 0x9006, - 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, - 0xb8a0, 0x080c, 0x9b4b, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, - 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, - 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84, 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, - 0x8d43, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, - 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x080c, 0x8cef, 0x7003, 0x1400, - 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, - 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, - 0x0804, 0x8f6c, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, - 0x7810, 0x00b6, 0x2058, 0xb8c4, 0xd084, 0x0120, 0x7850, 0x702a, - 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, - 0x8d3a, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x8f6c, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, - 0x60a7, 0x9575, 0x0026, 0x080c, 0x27a2, 0x0228, 0x2011, 0x0101, - 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x8f8f, 0x080c, 0x81da, - 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860, 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, 0x97df, 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, 0x1983, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, - 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e, 0x080c, 0x287c, - 0x002e, 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, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, - 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7610, - 0x2660, 0x2678, 0x8cff, 0x0904, 0x988a, 0x7030, 0x9c06, 0x1520, - 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9861, 0x080c, 0x8f9c, - 0x68c3, 0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036, 0x2069, - 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, - 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, - 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, - 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, - 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xba30, - 0x1158, 0x080c, 0x3034, 0x080c, 0xba41, 0x11f0, 0x080c, 0xa574, - 0x00d8, 0x080c, 0x9487, 0x08c0, 0x080c, 0xba41, 0x1118, 0x080c, - 0xa574, 0x0090, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0168, 0x6020, - 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, - 0x080c, 0x698f, 0x080c, 0xba1b, 0x080c, 0xbcb8, 0x080c, 0x9c06, - 0x080c, 0x935d, 0x00ce, 0x0804, 0x9812, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x9812, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e, 0x006e, - 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1d08, 0x080c, 0xd1fc, 0x08f0, 0x00f6, 0x0036, - 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936, 0x7a3a, - 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001, 0x0382, - 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001, 0x0015, - 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, - 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d65, 0x001e, - 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, - 0x1120, 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156, 0x0016, - 0x0026, 0x00e6, 0x900e, 0x2071, 0x19b8, 0x0469, 0x0106, 0x0190, - 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044, 0xd0fc, - 0x01d8, 0x1f04, 0x98e6, 0x080c, 0x0d65, 0x080c, 0x98ad, 0x6044, - 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x884c, 0x6044, - 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c, 0x9c06, - 0x190c, 0x0d65, 0x080c, 0x88a9, 0x010e, 0x1919, 0x00ee, 0x002e, - 0x001e, 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, - 0x9086, 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808, 0xd0a4, - 0x190c, 0x0d5e, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000, 0x11b8, - 0x0012, 0x012e, 0x0005, 0x9933, 0x9971, 0x9998, 0x99c8, 0x99d8, - 0x99e9, 0x99f8, 0x9a06, 0x9a17, 0x9a1b, 0x9933, 0x9933, 0x9933, - 0x9933, 0x9933, 0x9933, 0x080c, 0x0d65, 0x012e, 0x0005, 0x2060, - 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a, 0x0016, - 0x1a0c, 0x0d65, 0x0012, 0x012e, 0x0005, 0x9958, 0x995a, 0x9958, - 0x9960, 0x9958, 0x9958, 0x9958, 0x9958, 0x9958, 0x995a, 0x9958, - 0x995a, 0x9958, 0x995a, 0x9958, 0x9958, 0x9958, 0x995a, 0x9958, - 0x080c, 0x0d65, 0x2009, 0x0013, 0x080c, 0x9c6a, 0x012e, 0x0005, - 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x8398, 0x080c, - 0x9bcc, 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0x9c6a, 0x012e, - 0x0005, 0x080c, 0x98ad, 0x2001, 0x19dd, 0x2003, 0x0000, 0x7030, - 0x9065, 0x090c, 0x0d65, 0x7034, 0x9092, 0x00c8, 0x1258, 0x8000, - 0x7036, 0x7004, 0x9086, 0x0003, 0x0110, 0x7007, 0x0000, 0x781f, - 0x0808, 0x0040, 0x080c, 0xd5ee, 0x6003, 0x0001, 0x2009, 0x0014, - 0x080c, 0x9c6a, 0x781f, 0x0100, 0x080c, 0x98c9, 0x012e, 0x0005, - 0x080c, 0x98ad, 0x714c, 0x81ff, 0x1128, 0x2011, 0x19e0, 0x2013, - 0x0000, 0x0400, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530, 0x12b8, - 0x8108, 0x7152, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, - 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0050, - 0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x0018, 0x706c, - 0xc085, 0x706e, 0x781f, 0x0200, 0x080c, 0x98c9, 0x012e, 0x0005, - 0x080c, 0x98ad, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a, - 0x080c, 0x9c6a, 0x781f, 0x0200, 0x080c, 0x98c9, 0x012e, 0x0005, - 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c, - 0x98ad, 0x080c, 0x1c02, 0x781f, 0x0400, 0x080c, 0x98c9, 0x012e, - 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0x98ad, - 0x080c, 0x1c4a, 0x781f, 0x0400, 0x080c, 0x98c9, 0x012e, 0x0005, - 0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186, - 0x0003, 0x0110, 0x080c, 0x890f, 0x012e, 0x0005, 0x00f6, 0x703c, - 0x9086, 0x0002, 0x0148, 0x704c, 0x907d, 0x0130, 0x7844, 0xc0bc, - 0x7846, 0x080c, 0x8eb7, 0x0000, 0x00fe, 0x012e, 0x0005, 0x080c, - 0x714d, 0x012e, 0x0005, 0x080c, 0x0d65, 0x0005, 0x00e6, 0x2071, - 0x19b8, 0x6044, 0xc0bc, 0x6046, 0xd0fc, 0x01b8, 0x704c, 0x9c06, - 0x1190, 0x2019, 0x0001, 0x080c, 0x926b, 0x704f, 0x0000, 0x2001, - 0x0109, 0x2004, 0xd08c, 0x1138, 0x2001, 0x0108, 0x2004, 0xd0bc, - 0x1110, 0x703f, 0x0000, 0x080c, 0x949d, 0x00ee, 0x0005, 0x0026, - 0x7010, 0x9c06, 0x1178, 0x080c, 0x935d, 0x6044, 0xc0fc, 0x6046, - 0x600c, 0x9015, 0x0120, 0x7212, 0x600f, 0x0000, 0x0010, 0x7212, - 0x720e, 0x9006, 0x002e, 0x0005, 0x0026, 0x7020, 0x9c06, 0x1178, - 0x080c, 0x935d, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, - 0x7222, 0x600f, 0x0000, 0x0010, 0x7222, 0x721e, 0x9006, 0x002e, - 0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06, 0x1558, 0x2069, 0x0100, - 0x68c0, 0x9005, 0x01f8, 0x080c, 0x81e3, 0x080c, 0x8f9c, 0x68c3, - 0x0000, 0x080c, 0x9487, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x9085, - 0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a, 0x6003, 0x0009, 0x630a, - 0x9006, 0x003e, 0x00de, 0x0005, 0x0016, 0x0026, 0x0036, 0x6100, - 0x2019, 0x0100, 0x2001, 0x0382, 0x2004, 0xd09c, 0x0190, 0x00c6, - 0x0126, 0x2091, 0x2800, 0x0016, 0x0036, 0x080c, 0x9913, 0x003e, - 0x001e, 0x012e, 0x00ce, 0x6200, 0x2200, 0x9106, 0x0d58, 0x2200, - 0x0010, 0x8319, 0x1d38, 0x003e, 0x002e, 0x001e, 0x0005, 0x00d6, - 0x0156, 0x080c, 0x8d43, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, - 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, - 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, - 0xc38d, 0x0060, 0x080c, 0x70ac, 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, 0x9af3, 0x60c3, 0x0020, 0x080c, - 0x8f6c, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x8d43, 0x7a14, - 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, - 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, - 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x198e, 0x2204, - 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, - 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, - 0x2001, 0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, - 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, - 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, - 0x015e, 0x0804, 0x8f6c, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, - 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, - 0x080c, 0x9328, 0x080c, 0x91eb, 0x0036, 0x901e, 0x080c, 0x926b, - 0x003e, 0x0005, 0x2071, 0x1883, 0x7000, 0x9005, 0x0140, 0x2001, - 0x0812, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffd4, 0x2071, - 0x1800, 0x7070, 0x7052, 0x7057, 0x1ddc, 0x0005, 0x00e6, 0x0126, - 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010, 0x0608, - 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, - 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, - 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064, 0x9502, 0x1230, - 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1ddc, - 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, - 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, + 0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a, + 0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005, 0x0016, + 0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382, 0x2004, + 0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016, 0x0036, + 0x080c, 0x992e, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200, 0x2200, + 0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e, 0x002e, + 0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x8d6b, 0x7a14, 0x82ff, + 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, + 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, + 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x70b7, 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, 0x9b0e, + 0x60c3, 0x0020, 0x080c, 0x8f87, 0x015e, 0x00de, 0x0005, 0x0156, + 0x080c, 0x8d6b, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, + 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, + 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, + 0x2011, 0x198e, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, + 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, + 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026, 0x0030, + 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, + 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, + 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0006, 0x2001, + 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, + 0x9339, 0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x0036, + 0x901e, 0x080c, 0x9286, 0x003e, 0x0005, 0x2071, 0x1883, 0x7000, + 0x9005, 0x0140, 0x2001, 0x0812, 0x2071, 0x1800, 0x7072, 0x7076, + 0x7067, 0xffd4, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1ddc, + 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, + 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, + 0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, + 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, + 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, + 0x0005, 0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, + 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, + 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, + 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, + 0x9ca8, 0x001c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, + 0x00ee, 0x0005, 0x7057, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, + 0x1ddc, 0x0a0c, 0x0d65, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, + 0x0d65, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, + 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, + 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x6046, + 0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x0005, 0x9006, + 0x600e, 0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, + 0x6062, 0x604a, 0x6046, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, + 0x0005, 0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, + 0x190c, 0x1914, 0x6023, 0x0007, 0x2001, 0x1957, 0x2004, 0x0006, + 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xd4ce, + 0x604b, 0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, + 0x000e, 0x0005, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2001, + 0x19cb, 0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, + 0x9286, 0x003e, 0x080c, 0x94b8, 0x010e, 0x190c, 0x98e4, 0x0005, + 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, + 0x0001, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064, - 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, - 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, 0x0d65, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0d65, 0x9006, 0x6006, - 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, - 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e, 0x6032, - 0x6036, 0x603a, 0x603e, 0x604a, 0x6046, 0x6042, 0x2061, 0x1800, - 0x6050, 0x8000, 0x6052, 0x0005, 0x9006, 0x600e, 0x6016, 0x601a, - 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062, 0x604a, 0x6046, - 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x0005, 0x0006, 0x6000, - 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, 0x190c, 0x1914, 0x6023, - 0x0007, 0x2001, 0x1957, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, - 0x0208, 0x8004, 0x601a, 0x080c, 0xd4ac, 0x604b, 0x0000, 0x6044, - 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, 0x000e, 0x0005, 0x080c, - 0x990b, 0x0106, 0x190c, 0x98ad, 0x2001, 0x19cb, 0x2004, 0x9c06, - 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x080c, - 0x949d, 0x010e, 0x190c, 0x98c9, 0x0005, 0x00e6, 0x0126, 0x2071, - 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, - 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064, - 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, - 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064, 0x9502, 0x1230, 0x7556, - 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1ddc, 0x0cc0, - 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x9c7e, 0x9c88, - 0x9ca3, 0x9cbe, 0xbf90, 0xbfad, 0xbfc8, 0x9c7e, 0x9c88, 0x9c7e, - 0x9cda, 0x9c7e, 0x9c7e, 0x9c7e, 0x9c7e, 0x9c7e, 0x9186, 0x0013, - 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x884c, 0x0005, 0x0005, - 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, - 0x0005, 0x9ca1, 0xa3e9, 0xa5bb, 0x9ca1, 0xa649, 0x9fa3, 0x9ca1, - 0x9ca1, 0xa36b, 0xabee, 0x9ca1, 0x9ca1, 0x9ca1, 0x9ca1, 0x9ca1, - 0x9ca1, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, - 0x0d65, 0x0013, 0x006e, 0x0005, 0x9cbc, 0xb1f9, 0x9cbc, 0x9cbc, - 0x9cbc, 0x9cbc, 0x9cbc, 0x9cbc, 0xb19e, 0xb37c, 0x9cbc, 0xb236, - 0xb2ba, 0xb236, 0xb2ba, 0x9cbc, 0x080c, 0x0d65, 0x6000, 0x9082, - 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x0002, 0x9cd8, 0xac38, 0xaccf, - 0xae4f, 0xaebe, 0x9cd8, 0x9cd8, 0x9cd8, 0xac07, 0xb11f, 0xb122, - 0x9cd8, 0x9cd8, 0x9cd8, 0x9cd8, 0xb152, 0x9cd8, 0x9cd8, 0x9cd8, - 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, - 0x0013, 0x006e, 0x0005, 0x9cf3, 0x9cf3, 0x9d31, 0x9dd0, 0x9e50, - 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf5, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, - 0x9cf3, 0x9cf3, 0x9cf3, 0x080c, 0x0d65, 0x9186, 0x004c, 0x0560, - 0x9186, 0x0003, 0x190c, 0x0d65, 0x0096, 0x601c, 0xc0ed, 0x601e, - 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, - 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0x9006, 0xa846, - 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, - 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x080c, 0x1a64, 0x2009, - 0x8030, 0x080c, 0x84f0, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, - 0x00be, 0x2c00, 0x080c, 0x9e72, 0x080c, 0xbf5e, 0x6003, 0x0007, - 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, - 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, - 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, 0x9d98, 0x9d98, 0x9d93, 0x9d96, 0x9d98, - 0x9d90, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83, - 0x9d83, 0x9d83, 0x9d83, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, - 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d65, - 0x080c, 0xa82a, 0x0028, 0x080c, 0xa94d, 0x0010, 0x080c, 0xaa3c, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, - 0x000e, 0x080c, 0x9f30, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, - 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, - 0x0000, 0x2041, 0x1280, 0x080c, 0xa0da, 0x0160, 0x000e, 0x9005, - 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, - 0x0804, 0x9bcc, 0x2001, 0x002c, 0x900e, 0x080c, 0x9f96, 0x0c70, - 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, - 0x0a0c, 0x0d65, 0x91b2, 0x0050, 0x1a0c, 0x0d65, 0x9182, 0x0047, - 0x0042, 0x080c, 0x9a9c, 0x0120, 0x9086, 0x0002, 0x0904, 0x9d31, - 0x0005, 0x9df2, 0x9df2, 0x9df4, 0x9e26, 0x9df2, 0x9df2, 0x9df2, - 0x9df2, 0x9e39, 0x080c, 0x0d65, 0x00d6, 0x0016, 0x0096, 0x6003, - 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, - 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, - 0x080c, 0x9f96, 0x080c, 0x9bcc, 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, 0x88a9, - 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0120, 0xa87b, - 0x0006, 0x080c, 0x698f, 0x009e, 0x00de, 0x080c, 0x9bcc, 0x0804, - 0x890e, 0x080c, 0x88a9, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x00d6, - 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0120, 0xa87b, 0x0029, - 0x080c, 0x698f, 0x009e, 0x00de, 0x080c, 0x9bcc, 0x0804, 0x890e, - 0x9182, 0x0047, 0x0002, 0x9e60, 0x9e62, 0x9e60, 0x9e60, 0x9e60, - 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e62, - 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x1595, 0x6114, 0x2148, - 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x698f, 0x009e, 0x00de, - 0x0804, 0x9bcc, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, - 0x00f6, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c, 0x0d65, 0xa960, - 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, - 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188, 0x0018, 0x918c, - 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, - 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011, - 0x001f, 0x080c, 0xb3ff, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, - 0x001f, 0x080c, 0xb3ff, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, - 0x080c, 0x0fd4, 0x080c, 0x1022, 0x01d0, 0x8528, 0xa867, 0x0110, - 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, - 0x2011, 0x001b, 0x080c, 0xb3ff, 0x00b8, 0x96b2, 0x003c, 0x2009, - 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb3ff, 0x0c18, 0x2001, + 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, + 0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, + 0x0002, 0x9c99, 0x9ca3, 0x9cbe, 0x9cd9, 0xbfab, 0xbfc8, 0xbfe3, + 0x9c99, 0x9ca3, 0x9c99, 0x9cf5, 0x9c99, 0x9c99, 0x9c99, 0x9c99, + 0x9c99, 0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, + 0x8874, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, + 0x0d65, 0x0013, 0x006e, 0x0005, 0x9cbc, 0xa404, 0xa5d6, 0x9cbc, + 0xa664, 0x9fbe, 0x9cbc, 0x9cbc, 0xa386, 0xac09, 0x9cbc, 0x9cbc, + 0x9cbc, 0x9cbc, 0x9cbc, 0x9cbc, 0x080c, 0x0d65, 0x0066, 0x6000, + 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9cd7, + 0xb214, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0xb1b9, + 0xb397, 0x9cd7, 0xb251, 0xb2d5, 0xb251, 0xb2d5, 0x9cd7, 0x080c, + 0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x0002, + 0x9cf3, 0xac53, 0xacea, 0xae6a, 0xaed9, 0x9cf3, 0x9cf3, 0x9cf3, + 0xac22, 0xb13a, 0xb13d, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0xb16d, + 0x9cf3, 0x9cf3, 0x9cf3, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, + 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9d0e, 0x9d0e, + 0x9d4c, 0x9deb, 0x9e6b, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d10, 0x9d0e, + 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x080c, 0x0d65, + 0x9186, 0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d65, 0x0096, + 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, + 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, + 0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, + 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, + 0x080c, 0x1a64, 0x2009, 0x8030, 0x080c, 0x8518, 0x0005, 0x6010, + 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0x9e8d, 0x080c, + 0xbf79, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, + 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, + 0x0018, 0xac78, 0xc4fc, 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, 0x9db3, 0x9db3, + 0x9dae, 0x9db1, 0x9db3, 0x9dab, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, + 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x00fe, 0x00ee, + 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, + 0x00de, 0x080c, 0x0d65, 0x080c, 0xa845, 0x0028, 0x080c, 0xa968, + 0x0010, 0x080c, 0xaa57, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, + 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0x9f4b, 0x0530, 0xa804, + 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, + 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1280, 0x080c, 0xa0f5, + 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, + 0x00fe, 0x009e, 0x00de, 0x0804, 0x9be7, 0x2001, 0x002c, 0x900e, + 0x080c, 0x9fb1, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, + 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d65, 0x91b2, 0x0050, 0x1a0c, + 0x0d65, 0x9182, 0x0047, 0x0042, 0x080c, 0x9ab7, 0x0120, 0x9086, + 0x0002, 0x0904, 0x9d4c, 0x0005, 0x9e0d, 0x9e0d, 0x9e0f, 0x9e41, + 0x9e0d, 0x9e0d, 0x9e0d, 0x9e0d, 0x9e54, 0x080c, 0x0d65, 0x00d6, + 0x0016, 0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, + 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, + 0x2001, 0x0000, 0x900e, 0x080c, 0x9fb1, 0x080c, 0x9be7, 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, 0x88d1, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, + 0xb847, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6996, 0x009e, 0x00de, + 0x080c, 0x9be7, 0x0804, 0x8936, 0x080c, 0x88d1, 0x080c, 0x3006, + 0x080c, 0xbf76, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xb847, + 0x0120, 0xa87b, 0x0029, 0x080c, 0x6996, 0x009e, 0x00de, 0x080c, + 0x9be7, 0x0804, 0x8936, 0x9182, 0x0047, 0x0002, 0x9e7b, 0x9e7d, + 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, + 0x9e7b, 0x9e7b, 0x9e7d, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, + 0x1595, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, + 0x6996, 0x009e, 0x00de, 0x0804, 0x9be7, 0x0026, 0x0036, 0x0056, + 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1022, 0x000e, + 0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, + 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, + 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, + 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, + 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xb41a, 0x04c0, 0x2130, + 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xb41a, 0x96b2, 0x0034, + 0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, 0x01d0, + 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, + 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb41a, 0x00b8, + 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, + 0xb41a, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, + 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 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, 0x698f, 0x000e, 0x2048, 0x9005, 0x1db0, - 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, - 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c, - 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, - 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x798c, - 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, 0x698f, 0x009e, 0x00fe, 0x00de, 0x0005, - 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, - 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, - 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, - 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, - 0x1170, 0x0096, 0x080c, 0x1022, 0x2900, 0x009e, 0x05c0, 0xa806, - 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, - 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, - 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, - 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, - 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, - 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, - 0x84ff, 0x0904, 0x9f45, 0x0804, 0x9f47, 0x9085, 0x0001, 0x7817, - 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, - 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6983, 0x009e, - 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0x9bcc, - 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d65, 0x080c, 0x9bcc, 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, 0xb82c, 0x0130, 0x6014, - 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0x9bcc, - 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, - 0x00b6, 0x2058, 0xb8c7, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, - 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0x9bcc, - 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, - 0x0016, 0x080c, 0xbf46, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, - 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009, 0x0022, 0x080c, - 0xa3c1, 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, - 0x9bcc, 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, 0xb3ff, 0x080c, - 0xb82c, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, - 0xa867, 0x0103, 0x080c, 0x9bcc, 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, 0xb3ff, - 0x009e, 0x080c, 0xb82c, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, - 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9bcc, 0x009e, - 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, - 0x1118, 0x080c, 0xa574, 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, 0x1266, 0x0019, 0x0d08, - 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x01b0, - 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, - 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, - 0x2940, 0x080c, 0x110c, 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, 0x604b, 0x0000, 0x2c68, - 0x0016, 0x2009, 0x0035, 0x080c, 0xbebe, 0x001e, 0x1158, 0x622c, - 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, - 0x0006, 0x0128, 0x080c, 0x9bcc, 0x0020, 0x0039, 0x0010, 0x080c, - 0xa1f6, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, - 0x9186, 0x0015, 0x0904, 0xa1d5, 0x918e, 0x0016, 0x1904, 0xa1f4, - 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, - 0x1904, 0xa1af, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, - 0xa191, 0x0804, 0xa1f2, 0x6808, 0x9086, 0xffff, 0x1904, 0xa1d7, - 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, - 0x9105, 0x1904, 0xa1d7, 0x6824, 0xd0b4, 0x1904, 0xa1d7, 0x080c, - 0xba1b, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, - 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x83f1, 0xa884, - 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, - 0x2d60, 0x080c, 0xb552, 0x00ce, 0x0804, 0xa1f2, 0x00c6, 0xa868, - 0xd0fc, 0x1118, 0x080c, 0x5d4f, 0x0010, 0x080c, 0x60f4, 0x00ce, - 0x1904, 0xa1d7, 0x00c6, 0x2d60, 0x080c, 0x9bcc, 0x00ce, 0x0804, - 0xa1f2, 0x00c6, 0x080c, 0x9c3d, 0x0198, 0x6017, 0x0000, 0x6810, - 0x6012, 0x080c, 0xbcc0, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, - 0x080c, 0x9bcc, 0x00ce, 0x080c, 0x9c6a, 0x00ce, 0x0804, 0xa1f2, - 0x2001, 0x1959, 0x2004, 0x684a, 0x00ce, 0x0804, 0xa1f2, 0x7008, - 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, - 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xbf00, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, - 0x080c, 0x84a9, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00, 0x1138, - 0x2001, 0x1959, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8, 0x89ff, - 0x090c, 0x0d65, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, - 0x0003, 0x080c, 0x67a5, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x0026, - 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x6394, 0x00be, 0x002e, - 0x00de, 0x00ce, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x9186, 0x0015, - 0x1128, 0x2001, 0x1959, 0x2004, 0x684a, 0x0068, 0x918e, 0x0016, - 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd4ac, 0x080c, 0x8398, - 0x080c, 0x9bcc, 0x00ce, 0x080c, 0x9bcc, 0x0005, 0x0026, 0x0036, - 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959, - 0x2004, 0x684a, 0x0804, 0xa270, 0x00c6, 0x2d60, 0x080c, 0xb42a, - 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, - 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x84a9, - 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, - 0x0d65, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, - 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, - 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, - 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, - 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, - 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, - 0x2001, 0x0005, 0x6832, 0x080c, 0xbbaa, 0x080c, 0x890e, 0x0010, - 0x080c, 0x9bcc, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, - 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, - 0x00be, 0x9206, 0x1904, 0xa2db, 0x700c, 0x6210, 0x00b6, 0x2258, - 0xba14, 0x00be, 0x9206, 0x1904, 0xa2db, 0x6038, 0x2068, 0x6824, - 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa2db, 0x9286, - 0x0002, 0x0904, 0xa2db, 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, 0xb82c, 0x090c, 0x0d65, 0xa87b, 0x0003, 0x009e, 0x080c, - 0xbf00, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, - 0x8020, 0x080c, 0x84a9, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, - 0x1959, 0x2004, 0x704a, 0x080c, 0x9bcc, 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, 0xabc4, 0x002e, 0x003e, - 0x015e, 0x009e, 0x1904, 0xa34a, 0x0096, 0x0156, 0x0036, 0x0026, - 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, - 0xabc4, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, - 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, - 0x00fe, 0x009e, 0x00be, 0x0804, 0x9fdb, 0x0096, 0x2048, 0xaa12, - 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, - 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266, 0x080c, 0xa0da, - 0x0130, 0x00fe, 0x009e, 0x080c, 0x9bcc, 0x00be, 0x0005, 0x080c, - 0xa574, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3003, 0x080c, 0xbf5b, - 0x00fe, 0x00c6, 0x080c, 0x9b76, 0x2f00, 0x6012, 0x6017, 0x0000, - 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, - 0x080c, 0x61ba, 0x080c, 0x61e6, 0x080c, 0x84b0, 0x080c, 0x890e, - 0x00ce, 0x0804, 0xa31d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d65, - 0x91b2, 0x0040, 0x1a04, 0xa3d3, 0x0002, 0xa3c1, 0xa3c1, 0xa3b7, - 0xa3c1, 0xa3c1, 0xa3c1, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, - 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, - 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, - 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3c1, 0xa3b5, 0xa3c1, 0xa3c1, - 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b7, 0xa3b5, 0xa3b5, - 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3c1, - 0xa3c1, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, - 0xa3b5, 0xa3b5, 0xa3c1, 0xa3b5, 0xa3b5, 0x080c, 0x0d65, 0x0066, - 0x00b6, 0x6610, 0x2658, 0xb8c4, 0xc08c, 0xb8c6, 0x00be, 0x006e, - 0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, - 0x84b0, 0x0010, 0x080c, 0x84a9, 0x0126, 0x2091, 0x8000, 0x080c, - 0x890e, 0x012e, 0x0005, 0x2600, 0x0002, 0xa3e7, 0xa3e7, 0xa3e7, - 0xa3c1, 0xa3c1, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3c1, 0xa3e7, - 0xa3c1, 0xa3e7, 0xa3c1, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3e7, 0x080c, - 0x0d65, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d65, 0x91b6, 0x0013, - 0x0904, 0xa4be, 0x91b6, 0x0027, 0x1904, 0xa46a, 0x080c, 0x884c, - 0x6004, 0x080c, 0xba30, 0x01b0, 0x080c, 0xba41, 0x01a8, 0x908e, - 0x0021, 0x0904, 0xa467, 0x908e, 0x0022, 0x1130, 0x080c, 0xa007, - 0x0904, 0xa463, 0x0804, 0xa464, 0x908e, 0x003d, 0x0904, 0xa467, - 0x0804, 0xa45d, 0x080c, 0x3034, 0x2001, 0x0007, 0x080c, 0x61ba, - 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa574, 0x9186, - 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x70ac, - 0x1108, 0xc2ad, 0x2202, 0x080c, 0x98ad, 0x0036, 0x0026, 0x2019, - 0x0028, 0x2110, 0x080c, 0xd507, 0x002e, 0x003e, 0x0016, 0x0026, - 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8613, 0x0076, 0x903e, - 0x080c, 0x8502, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, - 0x080c, 0xcfa6, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x98c9, - 0x080c, 0xbf5b, 0x0016, 0x080c, 0xbcb8, 0x080c, 0x9bcc, 0x001e, - 0x080c, 0x3113, 0x080c, 0x890e, 0x0030, 0x080c, 0xbcb8, 0x080c, - 0x9bcc, 0x080c, 0x890e, 0x0005, 0x080c, 0xa574, 0x0cb0, 0x080c, - 0xa5b0, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1140, - 0x080c, 0x9a9c, 0x0d80, 0x9086, 0x0002, 0x0904, 0xa5bb, 0x0c58, - 0x9186, 0x0014, 0x1d40, 0x080c, 0x884c, 0x6004, 0x908e, 0x0022, - 0x1118, 0x080c, 0xa007, 0x09f8, 0x080c, 0x3003, 0x080c, 0xbf5b, - 0x080c, 0xba30, 0x1190, 0x080c, 0x3034, 0x6010, 0x00b6, 0x2058, - 0xb9a0, 0x00be, 0x080c, 0xa574, 0x9186, 0x007e, 0x1128, 0x2001, - 0x1836, 0x200c, 0xc185, 0x2102, 0x0800, 0x080c, 0xba41, 0x1120, - 0x080c, 0xa574, 0x0804, 0xa45d, 0x6004, 0x908e, 0x0032, 0x1160, - 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x33b5, - 0x00fe, 0x00ee, 0x0804, 0xa45d, 0x6004, 0x908e, 0x0021, 0x0d40, - 0x908e, 0x0022, 0x090c, 0xa574, 0x0804, 0xa45d, 0x90b2, 0x0040, - 0x1a04, 0xa55d, 0x2008, 0x0002, 0xa506, 0xa507, 0xa50a, 0xa50d, - 0xa510, 0xa513, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, - 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, - 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, - 0xa504, 0xa504, 0xa516, 0xa51f, 0xa504, 0xa520, 0xa51f, 0xa504, - 0xa504, 0xa504, 0xa504, 0xa504, 0xa51f, 0xa51f, 0xa504, 0xa504, - 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa548, 0xa51f, - 0xa504, 0xa51b, 0xa504, 0xa504, 0xa504, 0xa51c, 0xa504, 0xa504, - 0xa504, 0xa51f, 0xa543, 0xa504, 0x080c, 0x0d65, 0x00c0, 0x2001, - 0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, 0x2001, 0x0005, 0x00b8, - 0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, 0x0088, 0x6003, 0x0005, - 0x080c, 0x890e, 0x0058, 0x0018, 0x0010, 0x080c, 0x61ba, 0x04b8, - 0x080c, 0xbf5e, 0x6003, 0x0004, 0x080c, 0x890e, 0x0005, 0x080c, - 0x61ba, 0x6003, 0x0002, 0x0036, 0x2019, 0x185e, 0x2304, 0x9084, - 0xff00, 0x1120, 0x2001, 0x1957, 0x201c, 0x0040, 0x8007, 0x909a, - 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, - 0x080c, 0x890e, 0x0c18, 0x080c, 0xbcb8, 0x080c, 0x9bcc, 0x08f0, - 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x33b5, - 0x00fe, 0x00ee, 0x080c, 0x884c, 0x080c, 0x9bcc, 0x0878, 0x6003, - 0x0002, 0x080c, 0xbf5e, 0x0804, 0x890e, 0x2600, 0x2008, 0x0002, - 0xa572, 0xa572, 0xa572, 0xa557, 0xa557, 0xa572, 0xa572, 0xa572, - 0xa572, 0xa557, 0xa572, 0xa557, 0xa572, 0xa557, 0xa572, 0xa572, - 0xa572, 0xa572, 0x080c, 0x0d65, 0x00e6, 0x0096, 0x0026, 0x0016, - 0x080c, 0xb82c, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, - 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x5127, 0x0130, - 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, - 0x900e, 0x2011, 0x4005, 0x080c, 0xbe25, 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, 0x0d65, 0x6604, 0x96b6, 0x004d, - 0x1120, 0x080c, 0xbd44, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0043, - 0x1120, 0x080c, 0xbd8d, 0x0804, 0xa638, 0x6604, 0x96b6, 0x004b, - 0x1120, 0x080c, 0xbdb9, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0033, - 0x1120, 0x080c, 0xbcda, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0028, - 0x1120, 0x080c, 0xba7a, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0029, - 0x1120, 0x080c, 0xbabb, 0x0804, 0xa638, 0x6604, 0x96b6, 0x001f, - 0x1118, 0x080c, 0x9fb0, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, - 0x080c, 0xa2e1, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, - 0x9fe8, 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa0f8, - 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xa276, 0x0400, - 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xa020, 0x00c8, 0x6604, - 0x96b6, 0x0044, 0x1118, 0x080c, 0xa05c, 0x0090, 0x6604, 0x96b6, - 0x0049, 0x1118, 0x080c, 0xa087, 0x0058, 0x91b6, 0x0015, 0x1110, - 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xa8f6, - 0x00be, 0x0005, 0x080c, 0x9c87, 0x0cd8, 0xa655, 0xa658, 0xa655, - 0xa69c, 0xa655, 0xa82a, 0xa903, 0xa655, 0xa655, 0xa8d0, 0xa655, - 0xa8e4, 0x0096, 0x080c, 0x1595, 0x6014, 0x2048, 0xa800, 0x2048, - 0xa867, 0x0103, 0x009e, 0x0804, 0x9bcc, 0xa001, 0xa001, 0x0005, - 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1540, 0x080c, - 0xcf77, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, - 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00e9, 0x00be, 0x2001, - 0x0006, 0x080c, 0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x0088, - 0x2001, 0x000a, 0x080c, 0x61ba, 0x080c, 0x3034, 0x6003, 0x0001, - 0x6007, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0010, 0x080c, - 0xa815, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0158, 0x9006, - 0x080c, 0x61a6, 0x2069, 0x1853, 0x6804, 0x0020, 0x2001, 0x0006, - 0x080c, 0x61e6, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, - 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa7ee, 0x6010, 0x2058, - 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xaa47, 0x0804, 0xa753, - 0x00d6, 0x080c, 0x70ac, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c, - 0x6684, 0x002e, 0x05c8, 0x080c, 0x539a, 0x1540, 0x6014, 0x2048, + 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6996, 0x000e, + 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, + 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, + 0x1022, 0x000e, 0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, + 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, + 0x2079, 0x1800, 0x798c, 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, 0x6996, 0x009e, + 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, + 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, + 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, + 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, + 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1022, 0x2900, + 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, + 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, + 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, + 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, + 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, + 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x9f60, 0x0804, 0x9f62, + 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, + 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, + 0x080c, 0x698a, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, + 0x1118, 0x080c, 0x9be7, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d65, + 0x080c, 0x9be7, 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, + 0xb847, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, + 0x009e, 0x0804, 0x9be7, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, + 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8c7, 0x0000, 0x00be, + 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, + 0xab32, 0x080c, 0x9be7, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, + 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbf61, 0x0188, 0x6014, + 0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, + 0x2009, 0x0022, 0x080c, 0xa3dc, 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, 0x9be7, 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, 0xb41a, 0x080c, 0xb847, 0x0140, 0x6014, 0x2048, 0xa807, + 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9be7, 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, 0xb41a, 0x009e, 0x080c, 0xb847, 0x0148, 0xa804, + 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, + 0x080c, 0x9be7, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, + 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xa58f, 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, + 0x1266, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, + 0x1022, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, + 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, + 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x110c, 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, + 0x604b, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xbed9, + 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, + 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9be7, 0x0020, + 0x0039, 0x0010, 0x080c, 0xa211, 0x002e, 0x00de, 0x00ee, 0x0005, + 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa1f0, 0x918e, + 0x0016, 0x1904, 0xa20f, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, + 0x0120, 0x9186, 0x0300, 0x1904, 0xa1ca, 0x89ff, 0x1138, 0x6800, + 0x9086, 0x000f, 0x0904, 0xa1ac, 0x0804, 0xa20d, 0x6808, 0x9086, + 0xffff, 0x1904, 0xa1f2, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, + 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0xa1f2, 0x6824, 0xd0b4, + 0x1904, 0xa1f2, 0x080c, 0xba36, 0x6864, 0xa882, 0xa87c, 0xc0dc, + 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, + 0x080c, 0x8419, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, + 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xb56d, 0x00ce, 0x0804, + 0xa20d, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d56, 0x0010, + 0x080c, 0x60fb, 0x00ce, 0x1904, 0xa1f2, 0x00c6, 0x2d60, 0x080c, + 0x9be7, 0x00ce, 0x0804, 0xa20d, 0x00c6, 0x080c, 0x9c58, 0x0198, + 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003, + 0x6904, 0x00c6, 0x2d60, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9c85, + 0x00ce, 0x0804, 0xa20d, 0x2001, 0x1959, 0x2004, 0x684a, 0x00ce, + 0x0804, 0xa20d, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, + 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, + 0x0003, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, + 0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0430, 0x700c, + 0x9086, 0x2a00, 0x1138, 0x2001, 0x1959, 0x2004, 0x684a, 0x00e8, + 0x04c1, 0x00e8, 0x89ff, 0x090c, 0x0d65, 0x00c6, 0x00d6, 0x2d60, + 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x67ac, 0x080c, 0xba36, + 0x080c, 0x9c21, 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, + 0x639b, 0x00be, 0x002e, 0x00de, 0x00ce, 0x080c, 0x9be7, 0x009e, + 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1959, 0x2004, 0x684a, + 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, + 0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9be7, + 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, + 0x0130, 0x2001, 0x1959, 0x2004, 0x684a, 0x0804, 0xa28b, 0x00c6, + 0x2d60, 0x080c, 0xb445, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, + 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, + 0x8023, 0x080c, 0x84d1, 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, + 0x01a8, 0x89ff, 0x090c, 0x0d65, 0x6800, 0x9086, 0x0004, 0x1190, + 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, + 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, 0x0007, + 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, + 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, + 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, + 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xbbc5, + 0x080c, 0x8936, 0x0010, 0x080c, 0x9be7, 0x004e, 0x003e, 0x002e, + 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, + 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xa2f6, 0x700c, + 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0xa2f6, + 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, + 0x0904, 0xa2f6, 0x9286, 0x0002, 0x0904, 0xa2f6, 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, 0xb847, 0x090c, 0x0d65, 0xa87b, + 0x0003, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, + 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0030, + 0x6038, 0x2070, 0x2001, 0x1959, 0x2004, 0x704a, 0x080c, 0x9be7, + 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, + 0xabdf, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xa365, 0x0096, + 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, + 0x20a9, 0x0004, 0x080c, 0xabdf, 0x002e, 0x003e, 0x015e, 0x009e, + 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, + 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0x9ff6, + 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, + 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, + 0x1266, 0x080c, 0xa0f5, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9be7, + 0x00be, 0x0005, 0x080c, 0xa58f, 0x0cb8, 0x2b78, 0x00f6, 0x080c, + 0x3006, 0x080c, 0xbf76, 0x00fe, 0x00c6, 0x080c, 0x9b91, 0x2f00, + 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, + 0x0001, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x61ed, 0x080c, + 0x84d8, 0x080c, 0x8936, 0x00ce, 0x0804, 0xa338, 0x2100, 0x91b2, + 0x0053, 0x1a0c, 0x0d65, 0x91b2, 0x0040, 0x1a04, 0xa3ee, 0x0002, + 0xa3dc, 0xa3dc, 0xa3d2, 0xa3dc, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, + 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, + 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, + 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc, + 0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, + 0xa3d2, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, + 0xa3d0, 0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, + 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc, 0xa3d0, 0xa3d0, + 0x080c, 0x0d65, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8c4, 0xc08c, + 0xb8c6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, 0x9186, + 0x0032, 0x0118, 0x080c, 0x84d8, 0x0010, 0x080c, 0x84d1, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8936, 0x012e, 0x0005, 0x2600, 0x0002, + 0xa402, 0xa402, 0xa402, 0xa3dc, 0xa3dc, 0xa402, 0xa402, 0xa402, + 0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa402, + 0xa402, 0xa402, 0x080c, 0x0d65, 0x6004, 0x90b2, 0x0053, 0x1a0c, + 0x0d65, 0x91b6, 0x0013, 0x0904, 0xa4d9, 0x91b6, 0x0027, 0x1904, + 0xa485, 0x080c, 0x8874, 0x6004, 0x080c, 0xba4b, 0x01b0, 0x080c, + 0xba5c, 0x01a8, 0x908e, 0x0021, 0x0904, 0xa482, 0x908e, 0x0022, + 0x1130, 0x080c, 0xa022, 0x0904, 0xa47e, 0x0804, 0xa47f, 0x908e, + 0x003d, 0x0904, 0xa482, 0x0804, 0xa478, 0x080c, 0x303b, 0x2001, + 0x0007, 0x080c, 0x61c1, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, + 0x080c, 0xa58f, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, + 0xc285, 0x080c, 0x70b7, 0x1108, 0xc2ad, 0x2202, 0x080c, 0x98c8, + 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xd529, 0x002e, + 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, + 0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x6010, 0x00b6, 0x905d, + 0x0100, 0x00be, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x003e, 0x002e, + 0x001e, 0x080c, 0x98e4, 0x080c, 0xbf76, 0x0016, 0x080c, 0xbcd3, + 0x080c, 0x9be7, 0x001e, 0x080c, 0x311a, 0x080c, 0x8936, 0x0030, + 0x080c, 0xbcd3, 0x080c, 0x9be7, 0x080c, 0x8936, 0x0005, 0x080c, + 0xa58f, 0x0cb0, 0x080c, 0xa5cb, 0x0c98, 0x9186, 0x0015, 0x0118, + 0x9186, 0x0016, 0x1140, 0x080c, 0x9ab7, 0x0d80, 0x9086, 0x0002, + 0x0904, 0xa5d6, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c, 0x8874, + 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa022, 0x09f8, 0x080c, + 0x3006, 0x080c, 0xbf76, 0x080c, 0xba4b, 0x1190, 0x080c, 0x303b, + 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa58f, 0x9186, + 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0800, + 0x080c, 0xba5c, 0x1120, 0x080c, 0xa58f, 0x0804, 0xa478, 0x6004, + 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, + 0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x0804, 0xa478, 0x6004, + 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xa58f, 0x0804, + 0xa478, 0x90b2, 0x0040, 0x1a04, 0xa578, 0x2008, 0x0002, 0xa521, + 0xa522, 0xa525, 0xa528, 0xa52b, 0xa52e, 0xa51f, 0xa51f, 0xa51f, + 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, + 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, + 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa531, 0xa53a, 0xa51f, + 0xa53b, 0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa53a, + 0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, + 0xa51f, 0xa563, 0xa53a, 0xa51f, 0xa536, 0xa51f, 0xa51f, 0xa51f, + 0xa537, 0xa51f, 0xa51f, 0xa51f, 0xa53a, 0xa55e, 0xa51f, 0x080c, + 0x0d65, 0x00c0, 0x2001, 0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, + 0x2001, 0x0005, 0x00b8, 0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, + 0x0088, 0x6003, 0x0005, 0x080c, 0x8936, 0x0058, 0x0018, 0x0010, + 0x080c, 0x61c1, 0x04b8, 0x080c, 0xbf79, 0x6003, 0x0004, 0x080c, + 0x8936, 0x0005, 0x080c, 0x61c1, 0x6003, 0x0002, 0x0036, 0x2019, + 0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, 0x201c, + 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, + 0x9318, 0x631a, 0x003e, 0x080c, 0x8936, 0x0c18, 0x080c, 0xbcd3, + 0x080c, 0x9be7, 0x08f0, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, + 0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x080c, 0x8874, 0x080c, + 0x9be7, 0x0878, 0x6003, 0x0002, 0x080c, 0xbf79, 0x0804, 0x8936, + 0x2600, 0x2008, 0x0002, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa572, + 0xa58d, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa58d, 0xa572, 0xa58d, + 0xa572, 0xa58d, 0xa58d, 0xa58d, 0xa58d, 0x080c, 0x0d65, 0x00e6, + 0x0096, 0x0026, 0x0016, 0x080c, 0xb847, 0x0568, 0x6014, 0x2048, + 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, + 0x080c, 0x512e, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, + 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe40, + 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, 0x0d65, + 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd5f, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbda8, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbdd4, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcf5, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xba95, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbad6, 0x0804, 0xa653, + 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x9fcb, 0x04e0, 0x6604, + 0x96b6, 0x0000, 0x1118, 0x080c, 0xa2fc, 0x04a8, 0x6604, 0x96b6, + 0x0022, 0x1118, 0x080c, 0xa003, 0x0470, 0x6604, 0x96b6, 0x0035, + 0x1118, 0x080c, 0xa113, 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118, + 0x080c, 0xa291, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, + 0xa03b, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa077, + 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa0a2, 0x0058, + 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, + 0x00be, 0x0804, 0xa911, 0x00be, 0x0005, 0x080c, 0x9ca2, 0x0cd8, + 0xa670, 0xa673, 0xa670, 0xa6b7, 0xa670, 0xa845, 0xa91e, 0xa670, + 0xa670, 0xa8eb, 0xa670, 0xa8ff, 0x0096, 0x080c, 0x1595, 0x6014, + 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0x9be7, + 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086, + 0x0074, 0x1540, 0x080c, 0xcf99, 0x11b0, 0x6010, 0x00b6, 0x2058, + 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, + 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b, + 0x080c, 0x9be7, 0x0088, 0x2001, 0x000a, 0x080c, 0x61c1, 0x080c, + 0x303b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84d8, 0x080c, + 0x8936, 0x0010, 0x080c, 0xa830, 0x00ee, 0x0005, 0x00d6, 0xb800, + 0xd084, 0x0158, 0x9006, 0x080c, 0x61ad, 0x2069, 0x1853, 0x6804, + 0x0020, 0x2001, 0x0006, 0x080c, 0x61ed, 0x00de, 0x0005, 0x00b6, + 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, + 0xa809, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, + 0xaa62, 0x0804, 0xa76e, 0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026, + 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1, + 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, + 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e, + 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, + 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe40, + 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, + 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c, + 0x9be7, 0x001e, 0x080c, 0x311a, 0x00de, 0x0804, 0xa80a, 0x00de, + 0x080c, 0xaa57, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, + 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, + 0xbe40, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, + 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b, 0x080c, 0x9be7, + 0x0804, 0xa80a, 0x080c, 0xa818, 0x6014, 0x9005, 0x0190, 0x2048, + 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, + 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe40, + 0x08f8, 0x080c, 0xa80e, 0x0160, 0x9006, 0x080c, 0x61ad, 0x2001, + 0x0004, 0x080c, 0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 0x08a0, + 0x2001, 0x0004, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003, + 0x080c, 0x84d8, 0x080c, 0x8936, 0x0804, 0xa80a, 0xb85c, 0xd0e4, + 0x01d0, 0x080c, 0xbc6d, 0x080c, 0x70b7, 0x0118, 0xd0dc, 0x1904, + 0xa730, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002, + 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2498, 0x78e2, + 0x00fe, 0x0804, 0xa730, 0x080c, 0xbcae, 0x2011, 0x1836, 0x2204, + 0xc0a5, 0x2012, 0x0006, 0x080c, 0xd0fe, 0x000e, 0x1904, 0xa730, + 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x61c1, 0x9006, 0x080c, + 0x61ad, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, + 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, + 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee, + 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2100, + 0x900e, 0x080c, 0x2424, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8, + 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, + 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, + 0x246d, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x080c, + 0x2424, 0x795a, 0x00fe, 0x8108, 0x080c, 0x6210, 0x2b00, 0x00ce, + 0x1904, 0xa730, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, + 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, + 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001, + 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936, + 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, + 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005, + 0x00e6, 0x080c, 0xd582, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, + 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, + 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, + 0x2030, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x53a1, 0x1120, + 0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x303b, 0x6020, 0x9086, + 0x000a, 0x1108, 0x0005, 0x0804, 0x9be7, 0x00b6, 0x00e6, 0x0026, + 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, 0xa8e2, + 0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c, + 0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026, - 0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x0530, 0x6014, 0x2048, + 0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, - 0x900e, 0x2011, 0x4009, 0x080c, 0xbe25, 0x0040, 0x6014, 0x2048, + 0x900e, 0x2011, 0x4009, 0x080c, 0xbe40, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, - 0xb9a0, 0x0016, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x001e, 0x080c, - 0x3113, 0x00de, 0x0804, 0xa7ef, 0x00de, 0x080c, 0xaa3c, 0x6010, - 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, - 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, - 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe25, 0x0030, 0xa807, - 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, - 0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x0804, 0xa7ef, 0x080c, - 0xa7fd, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, - 0x900e, 0x2011, 0x4000, 0x080c, 0xbe25, 0x08f8, 0x080c, 0xa7f3, - 0x0160, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0004, 0x080c, 0x61e6, - 0x2001, 0x0007, 0x080c, 0x61ba, 0x08a0, 0x2001, 0x0004, 0x080c, - 0x61ba, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x84b0, 0x080c, - 0x890e, 0x0804, 0xa7ef, 0xb85c, 0xd0e4, 0x01d0, 0x080c, 0xbc52, - 0x080c, 0x70ac, 0x0118, 0xd0dc, 0x1904, 0xa715, 0x2011, 0x1836, - 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002, 0x00f6, 0x2079, 0x0100, - 0x78e3, 0x0000, 0x080c, 0x2498, 0x78e2, 0x00fe, 0x0804, 0xa715, - 0x080c, 0xbc93, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006, - 0x080c, 0xd0dc, 0x000e, 0x1904, 0xa715, 0xc0b5, 0x2012, 0x2001, - 0x0006, 0x080c, 0x61ba, 0x9006, 0x080c, 0x61a6, 0x00c6, 0x2001, - 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, - 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010, - 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, - 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2100, 0x900e, 0x080c, 0x2424, - 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, - 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, - 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2079, - 0x1800, 0x797e, 0x2100, 0x900e, 0x080c, 0x2424, 0x795a, 0x00fe, - 0x8108, 0x080c, 0x6209, 0x2b00, 0x00ce, 0x1904, 0xa715, 0x6012, - 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, - 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, - 0x0002, 0x080c, 0x61ba, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, - 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0008, 0x0431, 0x00de, - 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, - 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xd560, - 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, - 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, - 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007, - 0x080c, 0x61ba, 0x080c, 0x539a, 0x1120, 0x2001, 0x0007, 0x080c, - 0x61e6, 0x080c, 0x3034, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, - 0x0804, 0x9bcc, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, - 0x708c, 0x9086, 0x0014, 0x1904, 0xa8c7, 0x00d6, 0x080c, 0x70ac, - 0x0198, 0x0026, 0x2011, 0x0010, 0x080c, 0x6684, 0x002e, 0x05c8, - 0x080c, 0x539a, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, - 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, - 0x6684, 0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, - 0x080c, 0xbe25, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, - 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, - 0x3034, 0x080c, 0x9bcc, 0x001e, 0x080c, 0x3113, 0x00de, 0x0804, - 0xa8cb, 0x00de, 0x080c, 0x539a, 0x1170, 0x6014, 0x9005, 0x1158, - 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, - 0x4a6e, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x6304, - 0x080c, 0xa68b, 0x00de, 0x080c, 0xab0d, 0x1588, 0x6010, 0x2058, - 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x61ba, 0x0096, - 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe25, - 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, - 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x3034, - 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x9bcc, 0x0020, 0x080c, - 0xa574, 0x080c, 0xa815, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, - 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, - 0x080c, 0x61ba, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84b0, - 0x0804, 0x890e, 0x0804, 0xa815, 0x2030, 0x2011, 0x1823, 0x2204, - 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, - 0x080c, 0x61ba, 0x0804, 0x9bcc, 0x0804, 0xa815, 0x0002, 0xa655, - 0xa90e, 0xa655, 0xa94d, 0xa655, 0xa9f8, 0xa903, 0xa655, 0xa655, - 0xaa0b, 0xa655, 0xaa1b, 0x6604, 0x9686, 0x0003, 0x0904, 0xa82a, - 0x96b6, 0x001e, 0x1110, 0x080c, 0x9bcc, 0x0005, 0x00b6, 0x00d6, - 0x00c6, 0x080c, 0xaa2b, 0x11a0, 0x9006, 0x080c, 0x61a6, 0x080c, - 0x3003, 0x080c, 0xbf5b, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 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, 0x3003, 0x080c, 0xbf5b, 0x080c, - 0xa815, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, - 0x9016, 0x080c, 0xaa39, 0x00d6, 0x2069, 0x194d, 0x2d04, 0x9005, - 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, - 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, - 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0804, - 0xa9c8, 0x080c, 0xb82c, 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, - 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, - 0xbe7f, 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, - 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, - 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, - 0x080c, 0xa574, 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, 0x61ba, - 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa815, - 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, - 0x2048, 0x080c, 0xb82c, 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, 0x5c68, 0x00ee, 0x0010, 0x080c, 0x3003, 0x0870, - 0x080c, 0xaa39, 0x1160, 0x2001, 0x0004, 0x080c, 0x61ba, 0x6003, - 0x0001, 0x6007, 0x0003, 0x080c, 0x84b0, 0x0804, 0x890e, 0x080c, - 0xa574, 0x0804, 0xa815, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c, - 0x61ba, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x84b0, 0x0804, - 0x890e, 0x0804, 0xa815, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c, - 0x61ba, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84b0, 0x0804, - 0x890e, 0x0804, 0xa815, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, - 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, - 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, - 0x2158, 0x080c, 0x6278, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, - 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, - 0x1836, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaadf, 0x0560, - 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x665c, 0x0158, - 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd251, 0x2001, 0x180c, - 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, - 0x2fc2, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2ddb, 0x00ee, 0x00c6, - 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x3113, 0x8108, - 0x1f04, 0xaa7d, 0x015e, 0x00ce, 0x080c, 0xaa3c, 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, 0x181e, 0x206a, 0x78e6, 0x0006, - 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836, - 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a, - 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x246d, 0x080c, 0x70ac, - 0x0170, 0x2071, 0x0260, 0x2069, 0x1953, 0x7048, 0x206a, 0x704c, - 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xbc52, 0x0040, - 0x2001, 0x0006, 0x080c, 0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc, - 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, - 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c, 0x83ff, - 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, - 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, - 0x2b48, 0x2019, 0x000a, 0x080c, 0xabc4, 0x1148, 0x2011, 0x027a, - 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xabc4, 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, 0x19c4, - 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, - 0x7250, 0x7070, 0x9202, 0x1a04, 0xab9c, 0x080c, 0xd282, 0x0904, - 0xab95, 0x6720, 0x9786, 0x0007, 0x0904, 0xab95, 0x2500, 0x9c06, - 0x0904, 0xab95, 0x2400, 0x9c06, 0x0904, 0xab95, 0x3e08, 0x9186, - 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff, 0x6000, 0x9086, - 0x0004, 0x1110, 0x080c, 0x1914, 0x9786, 0x000a, 0x0148, 0x080c, - 0xba41, 0x1130, 0x00ce, 0x080c, 0xa574, 0x080c, 0x9c06, 0x00e8, - 0x6014, 0x2048, 0x080c, 0xb82c, 0x01a8, 0x9786, 0x0003, 0x1530, - 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, - 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6983, - 0x080c, 0xba1b, 0x080c, 0x9c06, 0x00ce, 0x9ce0, 0x001c, 0x7064, - 0x9c02, 0x1210, 0x0804, 0xab40, 0x012e, 0x000e, 0x002e, 0x004e, - 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, - 0x1118, 0x080c, 0xd1fc, 0x0c30, 0x9786, 0x000a, 0x0998, 0x0880, - 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xabb0, - 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, 0x0d65, 0x080c, 0xba30, 0x0120, 0x080c, 0xba41, - 0x0158, 0x0028, 0x080c, 0x3034, 0x080c, 0xba41, 0x0128, 0x080c, - 0x884c, 0x080c, 0x9bcc, 0x0005, 0x080c, 0xa574, 0x0cc0, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xac26, - 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, - 0xac26, 0xac26, 0xac28, 0xac28, 0xac28, 0xac28, 0xac26, 0xac26, - 0xac26, 0xac28, 0xac26, 0xac26, 0xac26, 0xac26, 0x080c, 0x0d65, - 0x600b, 0xffff, 0x6003, 0x000f, 0x6106, 0x0126, 0x2091, 0x8000, - 0x080c, 0xbf5e, 0x2009, 0x8000, 0x080c, 0x84a9, 0x012e, 0x0005, - 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xacad, - 0x9186, 0x0027, 0x1520, 0x080c, 0x884c, 0x080c, 0x3003, 0x080c, - 0xbf5b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0198, 0x080c, - 0xba41, 0x1118, 0x080c, 0xa574, 0x0068, 0xa867, 0x0103, 0xa87b, - 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x698f, - 0x080c, 0xba1b, 0x009e, 0x080c, 0x9bcc, 0x0804, 0x890e, 0x9186, - 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0018, 0x080c, 0x0d65, - 0x0005, 0x0002, 0xac8b, 0xac89, 0xac89, 0xac89, 0xac89, 0xac89, - 0xac89, 0xac89, 0xac89, 0xac89, 0xac89, 0xaca4, 0xaca4, 0xaca4, - 0xaca4, 0xac89, 0xaca4, 0xac89, 0xaca4, 0xac89, 0xac89, 0xac89, - 0xac89, 0x080c, 0x0d65, 0x080c, 0x884c, 0x0096, 0x6114, 0x2148, - 0x080c, 0xb82c, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, - 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x698f, 0x080c, 0xba1b, - 0x009e, 0x080c, 0x9bcc, 0x0005, 0x080c, 0x884c, 0x080c, 0xba41, - 0x090c, 0xa574, 0x080c, 0x9bcc, 0x0005, 0x0002, 0xacc7, 0xacc5, - 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, - 0xacc5, 0xacc9, 0xacc9, 0xacc9, 0xacc9, 0xacc5, 0xaccb, 0xacc5, - 0xacc9, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0x080c, 0x0d65, 0x080c, - 0x0d65, 0x080c, 0x0d65, 0x080c, 0x9bcc, 0x0804, 0x890e, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xacee, - 0xacee, 0xacee, 0xacee, 0xacee, 0xad27, 0xae16, 0xacee, 0xae22, - 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, - 0xacee, 0xacee, 0xae22, 0xacf0, 0xacee, 0xae20, 0x080c, 0x0d65, - 0x00b6, 0x0096, 0x6114, 0x2148, 0x6010, 0x2058, 0xb800, 0xd0bc, - 0x1508, 0xa87b, 0x0000, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87c, - 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7, 0x080c, - 0x67a5, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, - 0xb8c0, 0x9005, 0x0110, 0x080c, 0x6394, 0x080c, 0x9bcc, 0x009e, - 0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0, 0xa838, 0xa934, 0x9105, - 0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c, 0xbb71, 0x0c80, 0x00b6, - 0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, - 0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590, 0x6010, 0x2058, 0xb800, - 0xd0bc, 0x1904, 0xae05, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, - 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7, - 0x080c, 0x67a5, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, - 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, 0x6394, 0x601c, 0xd0fc, - 0x1148, 0x7044, 0xd0e4, 0x1904, 0xade9, 0x080c, 0x9bcc, 0x009e, - 0x00be, 0x0005, 0x2009, 0x0211, 0x210c, 0x080c, 0x0d65, 0x968c, - 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xaded, - 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, 0xad33, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, - 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, - 0x2011, 0x0025, 0x080c, 0xb3ff, 0x003e, 0xd6cc, 0x0904, 0xad48, - 0x7154, 0xa98a, 0x81ff, 0x0904, 0xad48, 0x9192, 0x0021, 0x1278, - 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb3ff, 0x2011, - 0x0205, 0x2013, 0x0000, 0x080c, 0xbeeb, 0x0804, 0xad48, 0xa868, - 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, - 0x080c, 0xb39e, 0x00ae, 0x080c, 0xbeeb, 0x080c, 0xb3ef, 0x0804, - 0xad4a, 0x080c, 0xbb34, 0x0804, 0xad5f, 0xa87c, 0xd0ac, 0x0904, - 0xad70, 0xa880, 0xd0bc, 0x1904, 0xad70, 0x7348, 0xa838, 0x9306, - 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xad70, 0xd6d4, 0x0190, - 0xab38, 0x9305, 0x0904, 0xad70, 0x0068, 0xa87c, 0xd0ac, 0x0904, - 0xad3b, 0xa838, 0xa934, 0x9105, 0x0904, 0xad3b, 0xa880, 0xd0bc, - 0x1904, 0xad3b, 0x080c, 0xbb71, 0x0804, 0xad5f, 0x00f6, 0x2079, - 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x00fe, 0x0021, 0x0005, - 0x0011, 0x0005, 0x0005, 0x0096, 0x6003, 0x0002, 0x6007, 0x0043, - 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, 0x009e, 0x0005, 0x2130, - 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213, - 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac46, 0xab4a, 0xae36, - 0xad3a, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x604b, 0x0000, 0x080c, - 0x1ad2, 0x1118, 0x6144, 0x080c, 0x84d5, 0x009e, 0x0005, 0x9182, - 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xae6e, - 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, - 0xae6e, 0xae70, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae81, 0xae6e, - 0xae6e, 0xae6e, 0xae6e, 0xaea5, 0xae6e, 0xae6e, 0x080c, 0x0d65, - 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x884c, 0x2019, 0x0001, - 0x080c, 0x926b, 0x6003, 0x0002, 0x080c, 0xbf63, 0x080c, 0x88a9, - 0x0005, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x884c, 0x2019, - 0x0001, 0x080c, 0x926b, 0x080c, 0x88a9, 0x080c, 0x3003, 0x080c, - 0xbf5b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0150, 0xa867, - 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c, - 0xba1b, 0x009e, 0x080c, 0x9bcc, 0x0005, 0x080c, 0x0d65, 0xa87b, - 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, - 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a48, 0x2104, 0x8000, - 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0057, - 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xaedd, 0xaedd, - 0xaedd, 0xaedd, 0xaedd, 0xaedf, 0xaedd, 0xaedd, 0xaf9c, 0xaedd, - 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, - 0xaedd, 0xb0e0, 0xaedd, 0xb0ea, 0xaedd, 0x080c, 0x0d65, 0x601c, - 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, 0x0120, 0xc084, 0x601e, - 0x0804, 0xaccf, 0x6114, 0x0096, 0x2148, 0xa87c, 0xc0e5, 0xa87e, - 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, - 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0xb676, - 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, - 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, - 0xaf95, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, - 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xaf95, 0x9686, 0x0100, - 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, - 0x1022, 0x090c, 0x0d65, 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, 0xb3ff, 0x003e, 0xd6cc, 0x01e8, - 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, - 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb3ff, 0x2011, 0x0205, - 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, - 0xa98a, 0x0c68, 0x2950, 0x080c, 0xb39e, 0x080c, 0x18f2, 0x009e, - 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1959, 0x2004, 0x604a, - 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, - 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, 0xbf6c, 0x0904, 0xb0db, - 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x1500, 0xd1cc, 0x0904, 0xb09a, 0xa978, 0xa868, 0xd0fc, 0x0904, - 0xb05b, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, - 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb029, 0x9086, - 0x0028, 0x1904, 0xb015, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, - 0xb031, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, - 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, - 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, - 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, - 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x601c, 0xc0fc, 0x601e, - 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, - 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, - 0x009e, 0x080c, 0xbb71, 0x0804, 0xb0db, 0xd1dc, 0x0158, 0xa87b, - 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xb174, 0xc1dc, - 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, - 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, - 0xaea7, 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, 0xbeeb, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fd4, - 0x001e, 0x0804, 0xb0c7, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184, - 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b, - 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015, - 0xb07b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xb174, 0xc1dc, 0xb176, - 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, - 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7, - 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c, - 0x0fd4, 0x009e, 0x080c, 0xbeeb, 0xa974, 0x0016, 0x080c, 0xb3ef, - 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, - 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0, - 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xa974, - 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050, - 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, - 0x190c, 0xaea7, 0xa974, 0x0016, 0x080c, 0x67a5, 0x001e, 0x6010, - 0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8c0, - 0x9005, 0x0120, 0x0016, 0x080c, 0x6394, 0x001e, 0x00be, 0xd1e4, - 0x1120, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x080c, 0xbb34, 0x0cd8, - 0x6114, 0x0096, 0x2148, 0xa97c, 0x080c, 0xbf6c, 0x190c, 0x1900, - 0x009e, 0x0005, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, - 0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000, 0xa867, 0x0103, 0x00b6, - 0x6010, 0x2058, 0xa834, 0xa938, 0x9115, 0x11a0, 0x080c, 0x67a5, - 0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, - 0x6394, 0x080c, 0x9bcc, 0x00be, 0x009e, 0x0005, 0xa87c, 0xc0dc, - 0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120, 0xa834, 0x080c, 0xaea7, - 0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c, 0xbb71, 0x0c60, 0x080c, - 0x884c, 0x0010, 0x080c, 0x88a9, 0x601c, 0xd084, 0x0110, 0x080c, - 0x1914, 0x080c, 0xb82c, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, - 0xba41, 0x1118, 0x080c, 0xa574, 0x00a0, 0xa867, 0x0103, 0x2009, - 0x180c, 0x210c, 0xd18c, 0x1198, 0xd184, 0x1170, 0x6108, 0xa97a, - 0x918e, 0x0029, 0x1110, 0x080c, 0xd4f8, 0xa877, 0x0000, 0x080c, - 0x698f, 0x009e, 0x0804, 0x9c06, 0xa87b, 0x0004, 0x0cb0, 0xa87b, - 0x0004, 0x0c98, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb173, - 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, - 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb197, 0xb171, - 0xb171, 0x080c, 0x0d65, 0x080c, 0x538e, 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, 0x698f, 0x009e, 0x0804, 0x9bcc, 0x080c, - 0x538e, 0x0dd8, 0x6014, 0x900e, 0x9016, 0x0c10, 0x9182, 0x0085, - 0x0002, 0xb1b0, 0xb1ae, 0xb1ae, 0xb1bc, 0xb1ae, 0xb1ae, 0xb1ae, - 0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0x080c, 0x0d65, - 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0x8020, - 0x080c, 0x84a9, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, - 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb81a, 0x01a0, - 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, - 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb42a, 0x00ce, 0x0128, 0x6803, - 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, - 0x2009, 0x8020, 0x080c, 0x84a9, 0x9280, 0x0004, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, - 0x2260, 0x080c, 0xbb71, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, - 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, - 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65, 0x9082, 0x0085, 0x00e2, - 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d65, 0x080c, - 0x884c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0140, 0xa867, - 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x698f, 0x009e, - 0x080c, 0x9c06, 0x0804, 0x890e, 0xb231, 0xb233, 0xb233, 0xb231, - 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, - 0xb231, 0x080c, 0x0d65, 0x080c, 0x9c06, 0x0005, 0x9186, 0x0013, - 0x1130, 0x6004, 0x9082, 0x0085, 0x2008, 0x0804, 0xb282, 0x9186, - 0x0027, 0x1558, 0x080c, 0x884c, 0x080c, 0x3003, 0x080c, 0xbf5b, - 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0150, 0xa867, 0x0103, - 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x698f, 0x080c, 0xba1b, - 0x009e, 0x080c, 0x9bcc, 0x0005, 0x9186, 0x0089, 0x0118, 0x9186, - 0x008a, 0x1140, 0x080c, 0x9a9c, 0x0128, 0x9086, 0x000c, 0x0904, - 0xb2ba, 0x0000, 0x080c, 0x9c87, 0x0c70, 0x9186, 0x0014, 0x1d60, - 0x080c, 0x884c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0d00, - 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, - 0xa882, 0x0890, 0x0002, 0xb292, 0xb290, 0xb290, 0xb290, 0xb290, - 0xb290, 0xb2a6, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290, - 0x080c, 0x0d65, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957, 0x0010, 0x2001, - 0x1958, 0x2004, 0x601a, 0x6003, 0x000c, 0x0005, 0x6034, 0x908c, - 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, - 0x2001, 0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, - 0x000e, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, - 0x0012, 0x0804, 0x9c87, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d2, - 0xb31f, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, - 0x080c, 0x0d65, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb333, 0x080c, - 0xb82c, 0x1118, 0x080c, 0xba1b, 0x0068, 0x6014, 0x2048, 0x080c, - 0xbf72, 0x1110, 0x080c, 0xba1b, 0xa867, 0x0103, 0x080c, 0xbf26, - 0x080c, 0x698f, 0x00d6, 0x2c68, 0x080c, 0x9b76, 0x01d0, 0x6003, - 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, - 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, - 0xbcc0, 0x695c, 0x615e, 0x6023, 0x0001, 0x2009, 0x8020, 0x080c, - 0x84a9, 0x2d60, 0x00de, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, - 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, - 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xbebe, 0x11f0, - 0x080c, 0x9b76, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, - 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, - 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x695c, 0x615e, - 0x080c, 0xbcc0, 0x2009, 0x8020, 0x080c, 0x84a9, 0x2d60, 0x00de, - 0x0804, 0x9bcc, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01c8, - 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, - 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, - 0x0005, 0x080c, 0xbb30, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c, - 0xba1b, 0x009e, 0x0804, 0x9bcc, 0x0016, 0x0096, 0x6014, 0x2048, - 0x080c, 0xb82c, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, - 0x0000, 0x080c, 0x698f, 0x009e, 0x001e, 0x9186, 0x0013, 0x0158, - 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9c87, - 0x0020, 0x080c, 0x884c, 0x080c, 0x9c06, 0x0005, 0x0056, 0x0066, - 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, - 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, - 0x2011, 0x0029, 0x080c, 0xb3ff, 0x96b2, 0x0020, 0xb004, 0x904d, - 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, 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, - 0x698f, 0x2a48, 0x0cb8, 0x080c, 0x698f, 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, 0xb47c, 0xb47c, 0xb477, 0xb4a0, - 0xb454, 0xb477, 0xb456, 0xb477, 0xb454, 0xb454, 0xb477, 0xb477, - 0xb477, 0xb454, 0xb454, 0xb454, 0x080c, 0x0d65, 0x6010, 0x9080, - 0x0000, 0x2004, 0xd0bc, 0x190c, 0xb4a0, 0x0036, 0x6014, 0x0096, - 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, 0x2019, 0x000c, 0x0038, - 0xd094, 0x0118, 0x2019, 0x000d, 0x0010, 0x2019, 0x0010, 0x080c, - 0xcdd9, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006, - 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11e8, 0x6014, - 0x2048, 0x080c, 0xb82c, 0x01d0, 0x6043, 0xffff, 0xa864, 0x9086, - 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, - 0x2001, 0x0005, 0x080c, 0x6bac, 0x080c, 0xbb30, 0x080c, 0x6983, - 0x080c, 0x9c06, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, - 0x080c, 0x98ad, 0x080c, 0xbf80, 0x6000, 0x908a, 0x0016, 0x1a0c, - 0x0d65, 0x002b, 0x0106, 0x080c, 0x98c9, 0x010e, 0x0005, 0xb4bf, - 0xb4ed, 0xb4c1, 0xb514, 0xb4e8, 0xb4bf, 0xb477, 0xb47c, 0xb47c, - 0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0x080c, - 0x0d65, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, - 0x6014, 0x2048, 0x080c, 0xb82c, 0x0158, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbb30, - 0x009e, 0x080c, 0xbf00, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, - 0x0002, 0x2009, 0x8020, 0x080c, 0x848b, 0x9085, 0x0001, 0x0005, - 0x0066, 0x080c, 0x1914, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19b8, - 0x7030, 0x9c06, 0x1120, 0x080c, 0x91eb, 0x00ee, 0x0850, 0x6020, - 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, - 0x0001, 0x2c40, 0x080c, 0x9367, 0x009e, 0x008e, 0x0040, 0x0066, - 0x080c, 0x90e7, 0x190c, 0x0d65, 0x080c, 0x90f5, 0x006e, 0x00ee, - 0x1904, 0xb4c1, 0x0804, 0xb477, 0x0036, 0x00e6, 0x2071, 0x19b8, - 0x704c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x926b, 0x00ee, 0x003e, - 0x0804, 0xb4c1, 0x080c, 0x949d, 0x00ee, 0x003e, 0x1904, 0xb4c1, - 0x0804, 0xb477, 0x00c6, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, - 0x006e, 0x00ce, 0x0005, 0xb54a, 0xb60c, 0xb773, 0xb552, 0x9c06, - 0xb54a, 0xcdcb, 0xbf68, 0xb60c, 0xb543, 0xb7f2, 0xb543, 0xb543, - 0xb543, 0xb543, 0xb543, 0x080c, 0x0d65, 0x080c, 0xba41, 0x1110, - 0x080c, 0xa574, 0x0005, 0x080c, 0x884c, 0x0804, 0x9bcc, 0x601b, - 0x0001, 0x0005, 0x080c, 0xb82c, 0x0130, 0x6014, 0x0096, 0x2048, - 0x2c00, 0xa896, 0x009e, 0x080c, 0x98ad, 0x080c, 0xbf80, 0x6000, - 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x0804, 0x98c9, 0xb577, - 0xb579, 0xb5a3, 0xb5b7, 0xb5e2, 0xb577, 0xb54a, 0xb54a, 0xb54a, - 0xb5be, 0xb5be, 0xb577, 0xb577, 0xb577, 0xb577, 0xb5c8, 0x080c, - 0x0d65, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882, - 0x009e, 0x2071, 0x19b8, 0x7030, 0x9c06, 0x01d0, 0x0066, 0x080c, - 0x90e7, 0x190c, 0x0d65, 0x080c, 0x90f5, 0x006e, 0x080c, 0xbf00, - 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1958, - 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x848b, 0x00ee, 0x0005, - 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, - 0xa882, 0x009e, 0x080c, 0xbf00, 0x6007, 0x0085, 0x6003, 0x000b, - 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x848b, 0x0005, 0x080c, - 0x98ad, 0x080c, 0x9a1e, 0x080c, 0x98c9, 0x0c28, 0x0096, 0x601b, - 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, - 0x080c, 0x538e, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, - 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, - 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x698f, 0x009e, - 0x0804, 0x9bcc, 0x6014, 0x0096, 0x904d, 0x0508, 0x080c, 0xbf6c, - 0x01f0, 0x080c, 0x98c9, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, - 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, - 0x611a, 0x2001, 0x0037, 0x2c08, 0x080c, 0x159e, 0x6000, 0x9086, - 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9c6a, 0x0005, 0x009e, - 0x080c, 0x1914, 0x0804, 0xb5a3, 0x6000, 0x908a, 0x0016, 0x1a0c, - 0x0d65, 0x000b, 0x0005, 0xb623, 0xb54f, 0xb625, 0xb623, 0xb625, - 0xb625, 0xb54b, 0xb623, 0xb545, 0xb545, 0xb623, 0xb623, 0xb623, - 0xb623, 0xb623, 0xb623, 0x080c, 0x0d65, 0x6010, 0x00b6, 0x2058, - 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d65, - 0x00b6, 0x0013, 0x00be, 0x0005, 0xb640, 0xb70d, 0xb642, 0xb682, - 0xb642, 0xb682, 0xb642, 0xb650, 0xb640, 0xb682, 0xb640, 0xb671, - 0x080c, 0x0d65, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, - 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb709, - 0x6004, 0x080c, 0xba41, 0x0904, 0xb726, 0x908e, 0x0004, 0x1110, - 0x080c, 0x3034, 0x908e, 0x0021, 0x0904, 0xb72a, 0x908e, 0x0022, - 0x0904, 0xb76e, 0x908e, 0x003d, 0x0904, 0xb72a, 0x908e, 0x0039, - 0x0904, 0xb72e, 0x908e, 0x0035, 0x0904, 0xb72e, 0x908e, 0x001e, - 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x3003, 0x080c, 0xa574, - 0x0804, 0x9c06, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, - 0xb6fa, 0x9186, 0x0002, 0x1904, 0xb6cf, 0x2001, 0x1836, 0x2004, - 0xd08c, 0x11c8, 0x080c, 0x70ac, 0x11b0, 0x080c, 0xbf46, 0x0138, - 0x080c, 0x70cf, 0x1120, 0x080c, 0x6fb7, 0x0804, 0xb757, 0x2001, - 0x194e, 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, - 0x6fdd, 0x0804, 0xb757, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, - 0xd0ac, 0x1904, 0xb757, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xb757, - 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, - 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x080c, - 0x9b76, 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, 0x5c68, 0x00ee, 0x080c, 0xa574, - 0x0030, 0x080c, 0xa574, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x3034, 0x012e, 0x00ee, 0x080c, - 0x9c06, 0x0005, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003, 0x0001, - 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00de, 0x00ce, - 0x0c80, 0x080c, 0x3034, 0x0804, 0xb67e, 0x00c6, 0x00d6, 0x6104, - 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, - 0x9005, 0x0904, 0xb6cf, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, - 0x84b0, 0x080c, 0x890e, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa574, - 0x0804, 0xb680, 0x080c, 0xa5b0, 0x0804, 0xb680, 0x00d6, 0x2c68, - 0x6104, 0x080c, 0xbebe, 0x00de, 0x0118, 0x080c, 0x9bcc, 0x00f0, - 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, - 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, - 0x1958, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, - 0x6026, 0x2160, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x00de, - 0x00ce, 0x080c, 0xa574, 0x080c, 0x3003, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x080c, 0x3034, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, - 0x0398, 0x604b, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa007, - 0x1904, 0xb726, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, - 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xb78e, 0xb78e, - 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb54a, - 0xb78e, 0xb54f, 0xb790, 0xb54f, 0xb79d, 0xb78e, 0x080c, 0x0d65, - 0x6004, 0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, - 0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x080c, 0xbf3a, 0x0118, - 0x080c, 0xbf4d, 0x0010, 0x080c, 0xbf5b, 0x080c, 0xba1b, 0x080c, - 0xb82c, 0x0570, 0x080c, 0x3003, 0x080c, 0xb82c, 0x0168, 0x6014, - 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, - 0xc0ed, 0xa882, 0x080c, 0x698f, 0x2c68, 0x080c, 0x9b76, 0x0150, - 0x6810, 0x6012, 0x080c, 0xbcc0, 0x00c6, 0x2d60, 0x080c, 0x9c06, - 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, - 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00c8, - 0x080c, 0xbf3a, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, - 0x3003, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, - 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3003, 0x0868, 0x080c, - 0x9c06, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0002, - 0xb808, 0xb808, 0xb80a, 0xb80a, 0xb80a, 0xb808, 0xb808, 0x9c06, - 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, - 0x080c, 0x0d65, 0x080c, 0x98ad, 0x080c, 0x9a1e, 0x080c, 0x98c9, - 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x698f, 0x009e, - 0x0804, 0x9bcc, 0x9284, 0x0003, 0x1158, 0x9282, 0x1ddc, 0x0240, - 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, - 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, - 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, - 0x10cd, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7350, - 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xbf46, - 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148, - 0x080c, 0x3003, 0x080c, 0xbf5b, 0x00c6, 0x080c, 0x9c06, 0x00ce, - 0x0060, 0x080c, 0xbc32, 0x0148, 0x080c, 0xba41, 0x1110, 0x080c, - 0xa574, 0x00c6, 0x080c, 0x9bcc, 0x00ce, 0x9ce0, 0x001c, 0x7064, - 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, - 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, - 0x0128, 0x2061, 0x1b02, 0x6112, 0x080c, 0x3003, 0x9006, 0x0010, - 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x080c, 0x9b76, 0x01b0, 0x665e, 0x2b00, 0x6012, - 0x080c, 0x538e, 0x0118, 0x080c, 0xb95d, 0x0168, 0x080c, 0xbcc0, - 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0x9c6a, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, - 0x8000, 0xbaa0, 0x080c, 0x9c3d, 0x0580, 0x605f, 0x0000, 0x2b00, - 0x6012, 0x080c, 0xbcc0, 0x6023, 0x0003, 0x0016, 0x080c, 0x98ad, - 0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502, 0x2c08, 0x080c, - 0xcfa6, 0x007e, 0x080c, 0x98c9, 0x001e, 0xd184, 0x0128, 0x080c, - 0x9bcc, 0x9085, 0x0001, 0x0070, 0x080c, 0x538e, 0x0128, 0xd18c, - 0x1170, 0x080c, 0xb95d, 0x0148, 0x2009, 0x004c, 0x080c, 0x9c6a, - 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, - 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, - 0x00c6, 0x0046, 0x0016, 0x080c, 0x9b76, 0x2c78, 0x0590, 0x7e5e, - 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xb96f, - 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, - 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0x9bcc, 0x00d0, 0x2001, - 0x1950, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9bcc, 0x0088, - 0x2f60, 0x080c, 0x538e, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, - 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0x9c6a, 0x9085, - 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, - 0x0046, 0x080c, 0x9b76, 0x2c78, 0x0508, 0x7e5e, 0x2b00, 0x7812, - 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, - 0x194f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9bcc, 0x0060, - 0x2f60, 0x080c, 0x538e, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, - 0x2009, 0x0052, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x004e, 0x00ce, - 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4871, - 0x00ce, 0x1120, 0x080c, 0x9bcc, 0x9006, 0x0005, 0xa867, 0x0000, - 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, - 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x98ad, 0x080c, 0x6448, - 0x0158, 0x2001, 0xb976, 0x0006, 0x900e, 0x2400, 0x080c, 0x6bac, - 0x080c, 0x698f, 0x000e, 0x0807, 0x2418, 0x080c, 0x8812, 0xbaa0, - 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x862d, - 0x008e, 0x080c, 0x8502, 0x2f08, 0x2648, 0x080c, 0xcfa6, 0xb93c, - 0x81ff, 0x090c, 0x8704, 0x080c, 0x98c9, 0x012e, 0x007e, 0x009e, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0190, - 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, - 0x6016, 0x2009, 0x001f, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, + 0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c, 0x9be7, 0x001e, 0x080c, + 0x311a, 0x00de, 0x0804, 0xa8e6, 0x00de, 0x080c, 0x53a1, 0x1170, + 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, + 0x2021, 0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00d6, 0x6010, + 0x2058, 0x080c, 0x630b, 0x080c, 0xa6a6, 0x00de, 0x080c, 0xab28, + 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, + 0x080c, 0x61c1, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, + 0x4000, 0x080c, 0xbe40, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, + 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200, + 0x009e, 0x080c, 0x303b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, + 0x9be7, 0x0020, 0x080c, 0xa58f, 0x080c, 0xa830, 0x001e, 0x002e, + 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, + 0x1160, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, + 0x0001, 0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2030, + 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, + 0x1120, 0x2001, 0x0007, 0x080c, 0x61c1, 0x0804, 0x9be7, 0x0804, + 0xa830, 0x0002, 0xa670, 0xa929, 0xa670, 0xa968, 0xa670, 0xaa13, + 0xa91e, 0xa670, 0xa670, 0xaa26, 0xa670, 0xaa36, 0x6604, 0x9686, + 0x0003, 0x0904, 0xa845, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9be7, + 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xaa46, 0x11a0, 0x9006, + 0x080c, 0x61ad, 0x080c, 0x3006, 0x080c, 0xbf76, 0x2001, 0x0002, + 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, + 0x080c, 0x8936, 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, 0x3006, + 0x080c, 0xbf76, 0x080c, 0xa830, 0x00ce, 0x00de, 0x00be, 0x0005, + 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xaa54, 0x00d6, 0x2069, + 0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, + 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, + 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, + 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, + 0x080c, 0x8936, 0x0804, 0xa9e3, 0x080c, 0xb847, 0x01b0, 0x6014, + 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, + 0x2001, 0x0002, 0x080c, 0xbe9a, 0x00b0, 0x6014, 0x2048, 0xa864, + 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, + 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, + 0x1110, 0x9006, 0x0c38, 0x080c, 0xa58f, 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, 0x61c1, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, + 0x0010, 0x080c, 0xa830, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, + 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xb847, 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, 0x5c6f, 0x00ee, 0x0010, + 0x080c, 0x3006, 0x0870, 0x080c, 0xaa54, 0x1160, 0x2001, 0x0004, + 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x84d8, + 0x0804, 0x8936, 0x080c, 0xa58f, 0x0804, 0xa830, 0x0469, 0x1160, + 0x2001, 0x0008, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0005, + 0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x00e9, 0x1160, + 0x2001, 0x000a, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0001, + 0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2009, 0x026e, + 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, + 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, + 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x627f, 0x001e, 0x00ce, + 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, + 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a, + 0x080c, 0xaafa, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, + 0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, + 0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, + 0x2009, 0x0001, 0x080c, 0x2fc5, 0x00e6, 0x2071, 0x1800, 0x080c, + 0x2ddb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, + 0x080c, 0x311a, 0x8108, 0x1f04, 0xaa98, 0x015e, 0x00ce, 0x080c, + 0xaa57, 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, 0x181e, + 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, + 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, + 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, + 0x246d, 0x080c, 0x70b7, 0x0170, 0x2071, 0x0260, 0x2069, 0x1953, + 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, + 0x080c, 0xbc6d, 0x0040, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, + 0x303b, 0x080c, 0x9be7, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, + 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, + 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, + 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, + 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, + 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, + 0xabdf, 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, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, + 0x1ddc, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xabb7, + 0x080c, 0xd2a4, 0x0904, 0xabb0, 0x6720, 0x9786, 0x0007, 0x0904, + 0xabb0, 0x2500, 0x9c06, 0x0904, 0xabb0, 0x2400, 0x9c06, 0x0904, + 0xabb0, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, + 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, + 0xffff, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1914, 0x9786, + 0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x00ce, 0x080c, 0xa58f, + 0x080c, 0x9c21, 0x00e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01a8, + 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, + 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0x9c21, 0x00ce, + 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1210, 0x0804, 0xab5b, 0x012e, + 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, + 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c30, 0x9786, + 0x000a, 0x0998, 0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, + 0x8318, 0x1f04, 0xabcb, 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, 0x0d65, 0x080c, 0xba4b, + 0x0120, 0x080c, 0xba5c, 0x0158, 0x0028, 0x080c, 0x303b, 0x080c, + 0xba5c, 0x0128, 0x080c, 0x8874, 0x080c, 0x9be7, 0x0005, 0x080c, + 0xa58f, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, + 0x000a, 0x0005, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41, + 0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac43, 0xac43, 0xac43, + 0xac43, 0xac41, 0xac41, 0xac41, 0xac43, 0xac41, 0xac41, 0xac41, + 0xac41, 0x080c, 0x0d65, 0x600b, 0xffff, 0x6003, 0x000f, 0x6106, + 0x0126, 0x2091, 0x8000, 0x080c, 0xbf79, 0x2009, 0x8000, 0x080c, + 0x84d1, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, + 0x0040, 0x0804, 0xacc8, 0x9186, 0x0027, 0x1520, 0x080c, 0x8874, + 0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c, + 0xb847, 0x0198, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0068, + 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, + 0xa97e, 0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, + 0x0804, 0x8936, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, + 0x0018, 0x080c, 0x0d65, 0x0005, 0x0002, 0xaca6, 0xaca4, 0xaca4, + 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, + 0xacbf, 0xacbf, 0xacbf, 0xacbf, 0xaca4, 0xacbf, 0xaca4, 0xacbf, + 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0x080c, 0x0d65, 0x080c, 0x8874, + 0x0096, 0x6114, 0x2148, 0x080c, 0xb847, 0x0168, 0xa867, 0x0103, + 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, + 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x080c, + 0x8874, 0x080c, 0xba5c, 0x090c, 0xa58f, 0x080c, 0x9be7, 0x0005, + 0x0002, 0xace2, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0, + 0xace0, 0xace0, 0xace0, 0xace0, 0xace4, 0xace4, 0xace4, 0xace4, + 0xace0, 0xace6, 0xace0, 0xace4, 0xace0, 0xace0, 0xace0, 0xace0, + 0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x9be7, + 0x0804, 0x8936, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, + 0x000a, 0x0005, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xad42, + 0xae31, 0xad09, 0xae3d, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09, + 0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xae3d, 0xad0b, 0xad09, + 0xae3b, 0x080c, 0x0d65, 0x00b6, 0x0096, 0x6114, 0x2148, 0x6010, + 0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867, 0x0103, + 0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, + 0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c, 0x82ff, + 0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, 0x639b, + 0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0, + 0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c, + 0xbb8c, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc, + 0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590, + 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xae20, 0xa87b, 0x0000, + 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c, + 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, + 0x639b, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904, 0xae04, + 0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211, 0x210c, + 0x080c, 0x0d65, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, + 0xd0bc, 0x1904, 0xae08, 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, 0xad4e, 0x735c, 0xab86, + 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, + 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xb41a, 0x003e, + 0xd6cc, 0x0904, 0xad63, 0x7154, 0xa98a, 0x81ff, 0x0904, 0xad63, + 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, + 0x080c, 0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xbf06, + 0x0804, 0xad63, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, + 0x0c50, 0x00a6, 0x2950, 0x080c, 0xb3b9, 0x00ae, 0x080c, 0xbf06, + 0x080c, 0xb40a, 0x0804, 0xad65, 0x080c, 0xbb4f, 0x0804, 0xad7a, + 0xa87c, 0xd0ac, 0x0904, 0xad8b, 0xa880, 0xd0bc, 0x1904, 0xad8b, + 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, + 0xad8b, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xad8b, 0x0068, + 0xa87c, 0xd0ac, 0x0904, 0xad56, 0xa838, 0xa934, 0x9105, 0x0904, + 0xad56, 0xa880, 0xd0bc, 0x1904, 0xad56, 0x080c, 0xbb8c, 0x0804, + 0xad7a, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, + 0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096, 0x6003, + 0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, + 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, + 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, + 0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c, 0x98f1, + 0x604b, 0x0000, 0x080c, 0x1ad2, 0x1118, 0x6144, 0x080c, 0x84fd, + 0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, + 0x000a, 0x0005, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89, + 0xae89, 0xae89, 0xae89, 0xae89, 0xae8b, 0xae89, 0xae89, 0xae89, + 0xae89, 0xae9c, 0xae89, 0xae89, 0xae89, 0xae89, 0xaec0, 0xae89, + 0xae89, 0x080c, 0x0d65, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, + 0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x6003, 0x0002, 0x080c, + 0xbf7e, 0x080c, 0x88d1, 0x0005, 0x6004, 0x9086, 0x0040, 0x1110, + 0x080c, 0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x080c, 0x88d1, + 0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c, + 0xb847, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, + 0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, + 0x080c, 0x0d65, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, + 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, + 0x1a48, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, + 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, + 0x0005, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaefa, 0xaef8, + 0xaef8, 0xafb7, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, + 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xb0fb, 0xaef8, 0xb105, 0xaef8, + 0x080c, 0x0d65, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, + 0x0120, 0xc084, 0x601e, 0x0804, 0xacea, 0x6114, 0x0096, 0x2148, + 0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, + 0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, + 0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, + 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, + 0x00be, 0x86ff, 0x0904, 0xafb0, 0x9694, 0xff00, 0x9284, 0x0c00, + 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, + 0xafb0, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, + 0xb676, 0x0c38, 0x080c, 0x1022, 0x090c, 0x0d65, 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, 0xb41a, + 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, + 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, + 0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, + 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xb3b9, + 0x080c, 0x18f2, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, + 0x1959, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, + 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, + 0xbf87, 0x0904, 0xb0f6, 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xb0b5, 0xa978, + 0xa868, 0xd0fc, 0x0904, 0xb076, 0x0016, 0xa87c, 0x0006, 0xa880, + 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, + 0x0904, 0xb044, 0x9086, 0x0028, 0x1904, 0xb030, 0xa87b, 0x001c, + 0xb07b, 0x001c, 0x0804, 0xb04c, 0x6024, 0xd0f4, 0x11d0, 0xa838, + 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, + 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, + 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, + 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, + 0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, + 0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, + 0x2048, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbb8c, 0x0804, 0xb0f6, + 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29, + 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, + 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xaec2, 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, 0xbf06, 0x001e, 0xa874, 0x0006, + 0x2148, 0x080c, 0x0fd4, 0x001e, 0x0804, 0xb0e2, 0x0016, 0x00a6, + 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, + 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, + 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29, 0x0118, + 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, + 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xaec2, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, + 0xb07e, 0x00ae, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbf06, 0xa974, + 0x0016, 0x080c, 0xb40a, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, + 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, + 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, + 0xbe29, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, + 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, + 0xa834, 0xa938, 0x9115, 0x190c, 0xaec2, 0xa974, 0x0016, 0x080c, + 0x67ac, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110, + 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0120, 0x0016, 0x080c, 0x639b, + 0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0x9be7, 0x009e, 0x0005, + 0x080c, 0xbb4f, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0x080c, + 0xbf87, 0x190c, 0x1900, 0x009e, 0x0005, 0x0096, 0x6114, 0x2148, + 0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000, + 0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938, 0x9115, + 0x11a0, 0x080c, 0x67ac, 0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8c0, + 0x9005, 0x0110, 0x080c, 0x639b, 0x080c, 0x9be7, 0x00be, 0x009e, + 0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120, + 0xa834, 0x080c, 0xaec2, 0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c, + 0xbb8c, 0x0c60, 0x080c, 0x8874, 0x0010, 0x080c, 0x88d1, 0x601c, + 0xd084, 0x0110, 0x080c, 0x1914, 0x080c, 0xb847, 0x01f0, 0x0096, + 0x6114, 0x2148, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x00a0, + 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198, 0xd184, + 0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, 0xd51a, + 0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x0804, 0x9c21, 0xa87b, + 0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057, 0x1220, + 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb18c, 0xb18c, 0xb18c, + 0xb18c, 0xb18c, 0xb18e, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, + 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, + 0xb18c, 0xb1b2, 0xb18c, 0xb18c, 0x080c, 0x0d65, 0x080c, 0x5395, + 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, 0x6996, 0x009e, + 0x0804, 0x9be7, 0x080c, 0x5395, 0x0dd8, 0x6014, 0x900e, 0x9016, + 0x0c10, 0x9182, 0x0085, 0x0002, 0xb1cb, 0xb1c9, 0xb1c9, 0xb1d7, + 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, + 0xb1c9, 0x080c, 0x0d65, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, + 0x8000, 0x2009, 0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026, + 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, + 0x080c, 0xb835, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, + 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb445, + 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, + 0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x9280, + 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, + 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xbb8c, 0x00ce, 0x00ee, + 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, + 0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65, + 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, + 0x190c, 0x0d65, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048, 0x080c, + 0xb847, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, + 0x080c, 0x6996, 0x009e, 0x080c, 0x9c21, 0x0804, 0x8936, 0xb24c, + 0xb24e, 0xb24e, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c, + 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0x080c, 0x0d65, 0x080c, 0x9c21, + 0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085, 0x2008, + 0x0804, 0xb29d, 0x9186, 0x0027, 0x1558, 0x080c, 0x8874, 0x080c, + 0x3006, 0x080c, 0xbf76, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847, + 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, + 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x9186, + 0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0x9ab7, 0x0128, + 0x9086, 0x000c, 0x0904, 0xb2d5, 0x0000, 0x080c, 0x9ca2, 0x0c70, + 0x9186, 0x0014, 0x1d60, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048, + 0x080c, 0xb847, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, + 0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xb2ad, 0xb2ab, + 0xb2ab, 0xb2ab, 0xb2ab, 0xb2ab, 0xb2c1, 0xb2ab, 0xb2ab, 0xb2ab, + 0xb2ab, 0xb2ab, 0xb2ab, 0x080c, 0x0d65, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, + 0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c, + 0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, + 0x9186, 0x0035, 0x1118, 0x2001, 0x1957, 0x0010, 0x2001, 0x1958, + 0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092, 0x1220, + 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0x9ca2, 0xb2eb, 0xb2eb, + 0xb2eb, 0xb2eb, 0xb2ed, 0xb33a, 0xb2eb, 0xb2eb, 0xb2eb, 0xb2eb, + 0xb2eb, 0xb2eb, 0xb2eb, 0x080c, 0x0d65, 0x0096, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, + 0x0804, 0xb34e, 0x080c, 0xb847, 0x1118, 0x080c, 0xba36, 0x0068, + 0x6014, 0x2048, 0x080c, 0xbf8d, 0x1110, 0x080c, 0xba36, 0xa867, + 0x0103, 0x080c, 0xbf41, 0x080c, 0x6996, 0x00d6, 0x2c68, 0x080c, + 0x9b91, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, + 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, + 0x6910, 0x6112, 0x080c, 0xbcdb, 0x695c, 0x615e, 0x6023, 0x0001, + 0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x00de, 0x080c, 0x9be7, + 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, + 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, + 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, + 0x080c, 0xbed9, 0x11f0, 0x080c, 0x9b91, 0x01d8, 0x6106, 0x6003, + 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, + 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, + 0x613e, 0x695c, 0x615e, 0x080c, 0xbcdb, 0x2009, 0x8020, 0x080c, + 0x84d1, 0x2d60, 0x00de, 0x0804, 0x9be7, 0x0096, 0x6014, 0x2048, + 0x080c, 0xb847, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, + 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, + 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xbb4b, 0xa877, 0x0000, + 0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x0804, 0x9be7, 0x0016, + 0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0140, 0xa867, 0x0103, + 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x001e, + 0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, + 0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874, 0x080c, 0x9c21, + 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, + 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, + 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb41a, 0x96b2, + 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, + 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, 0x6996, 0x2a48, 0x0cb8, 0x080c, 0x6996, + 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, 0xb497, + 0xb497, 0xb492, 0xb4bb, 0xb46f, 0xb492, 0xb471, 0xb492, 0xb46f, + 0xb46f, 0xb492, 0xb492, 0xb492, 0xb46f, 0xb46f, 0xb46f, 0x080c, + 0x0d65, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c, 0xb4bb, + 0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, + 0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d, 0x0010, + 0x2019, 0x0010, 0x080c, 0xcdf9, 0x6023, 0x0006, 0x6003, 0x0007, + 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, + 0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01d0, 0x6043, + 0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, + 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6bb3, 0x080c, + 0xbb4b, 0x080c, 0x698a, 0x080c, 0x9c21, 0x9085, 0x0001, 0x009e, + 0x0005, 0x9006, 0x0ce0, 0x080c, 0x98c8, 0x080c, 0xbf9b, 0x6000, + 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x002b, 0x0106, 0x080c, 0x98e4, + 0x010e, 0x0005, 0xb4da, 0xb508, 0xb4dc, 0xb52f, 0xb503, 0xb4da, + 0xb492, 0xb497, 0xb497, 0xb492, 0xb492, 0xb492, 0xb492, 0xb492, + 0xb492, 0xb492, 0x080c, 0x0d65, 0x86ff, 0x1510, 0x6020, 0x9086, + 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0158, + 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, + 0x009e, 0x080c, 0xbb4b, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085, + 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84b3, + 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1914, 0x006e, 0x08a0, + 0x00e6, 0x2071, 0x19b8, 0x7030, 0x9c06, 0x1120, 0x080c, 0x9206, + 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, + 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9382, 0x009e, + 0x008e, 0x0040, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c, + 0x9110, 0x006e, 0x00ee, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x0036, + 0x00e6, 0x2071, 0x19b8, 0x704c, 0x9c06, 0x1138, 0x901e, 0x080c, + 0x9286, 0x00ee, 0x003e, 0x0804, 0xb4dc, 0x080c, 0x94b8, 0x00ee, + 0x003e, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x00c6, 0x0066, 0x6020, + 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xb627, + 0xb78e, 0xb56d, 0x9c21, 0xb565, 0xcdeb, 0xbf83, 0xb627, 0xb55e, + 0xb80d, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0x080c, 0x0d65, + 0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f, 0x0005, 0x080c, 0x8874, + 0x0804, 0x9be7, 0x601b, 0x0001, 0x0005, 0x080c, 0xb847, 0x0130, + 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c, 0x98c8, + 0x080c, 0xbf9b, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0013, + 0x0804, 0x98e4, 0xb592, 0xb594, 0xb5be, 0xb5d2, 0xb5fd, 0xb592, + 0xb565, 0xb565, 0xb565, 0xb5d9, 0xb5d9, 0xb592, 0xb592, 0xb592, + 0xb592, 0xb5e3, 0x080c, 0x0d65, 0x00e6, 0x6014, 0x0096, 0x2048, + 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7030, 0x9c06, + 0x01d0, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c, 0x9110, + 0x006e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, + 0x0002, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, + 0x84b3, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, + 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xbf1b, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, + 0x84b3, 0x0005, 0x080c, 0x98c8, 0x080c, 0x9a39, 0x080c, 0x98e4, + 0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, + 0xa882, 0x009e, 0x0005, 0x080c, 0x5395, 0x01a8, 0x6014, 0x0096, + 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, + 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, + 0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x6014, 0x0096, 0x904d, + 0x0508, 0x080c, 0xbf87, 0x01f0, 0x080c, 0x98e4, 0x2001, 0x180f, + 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, + 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08, 0x080c, + 0x159e, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, + 0x9c85, 0x0005, 0x009e, 0x080c, 0x1914, 0x0804, 0xb5be, 0x6000, + 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0xb63e, 0xb56a, + 0xb640, 0xb63e, 0xb640, 0xb640, 0xb566, 0xb63e, 0xb560, 0xb560, + 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0x080c, 0x0d65, + 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, + 0x000c, 0x1a0c, 0x0d65, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb65b, + 0xb728, 0xb65d, 0xb69d, 0xb65d, 0xb69d, 0xb65d, 0xb66b, 0xb65b, + 0xb69d, 0xb65b, 0xb68c, 0x080c, 0x0d65, 0x6004, 0x908e, 0x0016, + 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, + 0x0052, 0x0904, 0xb724, 0x6004, 0x080c, 0xba5c, 0x0904, 0xb741, + 0x908e, 0x0004, 0x1110, 0x080c, 0x303b, 0x908e, 0x0021, 0x0904, + 0xb745, 0x908e, 0x0022, 0x0904, 0xb789, 0x908e, 0x003d, 0x0904, + 0xb745, 0x908e, 0x0039, 0x0904, 0xb749, 0x908e, 0x0035, 0x0904, + 0xb749, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010, + 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, + 0x3006, 0x080c, 0xa58f, 0x0804, 0x9c21, 0x00c6, 0x00d6, 0x6104, + 0x9186, 0x0016, 0x0904, 0xb715, 0x9186, 0x0002, 0x1904, 0xb6ea, + 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x70b7, 0x11b0, + 0x080c, 0xbf61, 0x0138, 0x080c, 0x70da, 0x1120, 0x080c, 0x6fc2, + 0x0804, 0xb772, 0x2001, 0x194e, 0x2003, 0x0001, 0x2001, 0x1800, + 0x2003, 0x0001, 0x080c, 0x6fe8, 0x0804, 0xb772, 0x6010, 0x2058, + 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb772, 0xb8a0, 0x9084, + 0xff80, 0x1904, 0xb772, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, + 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, + 0x604b, 0x0000, 0x080c, 0x9b91, 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, 0x5c6f, + 0x00ee, 0x080c, 0xa58f, 0x0030, 0x080c, 0xa58f, 0x080c, 0x3006, + 0x080c, 0xbf76, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b, + 0x012e, 0x00ee, 0x080c, 0x9c21, 0x0005, 0x2001, 0x0002, 0x080c, + 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, + 0x8936, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x303b, 0x0804, 0xb699, + 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, + 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xb6ea, 0x8001, 0xb842, + 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x00de, 0x00ce, + 0x0898, 0x080c, 0xa58f, 0x0804, 0xb69b, 0x080c, 0xa5cb, 0x0804, + 0xb69b, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xbed9, 0x00de, 0x0118, + 0x080c, 0x9be7, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, + 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, + 0x603c, 0x600a, 0x2001, 0x1958, 0x2004, 0x601a, 0x602c, 0x2c08, + 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020, 0x080c, + 0x84d1, 0x0005, 0x00de, 0x00ce, 0x080c, 0xa58f, 0x080c, 0x3006, + 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b, 0x6017, 0x0000, + 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e, 0x00ee, + 0x0005, 0x080c, 0xa022, 0x1904, 0xb741, 0x0005, 0x6000, 0x908a, + 0x0016, 0x1a0c, 0x0d65, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, + 0x0005, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, + 0xb7a9, 0xb7a9, 0xb565, 0xb7a9, 0xb56a, 0xb7ab, 0xb56a, 0xb7b8, + 0xb7a9, 0x080c, 0x0d65, 0x6004, 0x9086, 0x008b, 0x0148, 0x6007, + 0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0005, + 0x080c, 0xbf55, 0x0118, 0x080c, 0xbf68, 0x0010, 0x080c, 0xbf76, + 0x080c, 0xba36, 0x080c, 0xb847, 0x0570, 0x080c, 0x3006, 0x080c, + 0xb847, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, + 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6996, 0x2c68, + 0x080c, 0x9b91, 0x0150, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x00c6, + 0x2d60, 0x080c, 0x9c21, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, + 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8, + 0x080c, 0x8936, 0x00c8, 0x080c, 0xbf55, 0x0138, 0x6034, 0x9086, + 0x4000, 0x1118, 0x080c, 0x3006, 0x08d0, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, + 0x3006, 0x0868, 0x080c, 0x9c21, 0x0005, 0x6000, 0x908a, 0x0016, + 0x1a0c, 0x0d65, 0x0002, 0xb823, 0xb823, 0xb825, 0xb825, 0xb825, + 0xb823, 0xb823, 0x9c21, 0xb823, 0xb823, 0xb823, 0xb823, 0xb823, + 0xb823, 0xb823, 0xb823, 0x080c, 0x0d65, 0x080c, 0x98c8, 0x080c, + 0x9a39, 0x080c, 0x98e4, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, + 0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x9284, 0x0003, 0x1158, + 0x9282, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, + 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, + 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, + 0xf000, 0x0110, 0x080c, 0x10cd, 0x000e, 0x009e, 0x0005, 0x00e6, + 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc, + 0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, + 0x11f8, 0x080c, 0xbf61, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, + 0x9086, 0x0004, 0x1148, 0x080c, 0x3006, 0x080c, 0xbf76, 0x00c6, + 0x080c, 0x9c21, 0x00ce, 0x0060, 0x080c, 0xbc4d, 0x0148, 0x080c, + 0xba5c, 0x1110, 0x080c, 0xa58f, 0x00c6, 0x080c, 0x9be7, 0x00ce, + 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, + 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, + 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b02, 0x6112, 0x080c, + 0x3006, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, + 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91, 0x01b0, + 0x665e, 0x2b00, 0x6012, 0x080c, 0x5395, 0x0118, 0x080c, 0xb978, + 0x0168, 0x080c, 0xbcdb, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, + 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, + 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9c58, 0x0580, + 0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003, + 0x0016, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c, + 0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x001e, + 0xd184, 0x0128, 0x080c, 0x9be7, 0x9085, 0x0001, 0x0070, 0x080c, + 0x5395, 0x0128, 0xd18c, 0x1170, 0x080c, 0xb978, 0x0148, 0x2009, + 0x004c, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, + 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, + 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9b91, + 0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, + 0x0005, 0x080c, 0xb98a, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e, + 0x0148, 0x2001, 0x1951, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, + 0x9be7, 0x00d0, 0x2001, 0x1950, 0x200c, 0xd1fc, 0x0120, 0x2f60, + 0x080c, 0x9be7, 0x0088, 0x2f60, 0x080c, 0x5395, 0x0138, 0xd18c, + 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016, + 0x080c, 0x9c85, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, + 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9b91, 0x2c78, 0x0508, + 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004, + 0x0489, 0x009e, 0x2001, 0x194f, 0x200c, 0xd1fc, 0x0120, 0x2f60, + 0x080c, 0x9be7, 0x0060, 0x2f60, 0x080c, 0x5395, 0x0120, 0xd18c, + 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9c85, 0x9085, + 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, + 0x00c6, 0x080c, 0x4878, 0x00ce, 0x1120, 0x080c, 0x9be7, 0x9006, + 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, + 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, + 0x98c8, 0x080c, 0x644f, 0x0158, 0x2001, 0xb991, 0x0006, 0x900e, + 0x2400, 0x080c, 0x6bb3, 0x080c, 0x6996, 0x000e, 0x0807, 0x2418, + 0x080c, 0x883a, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, + 0x2608, 0x080c, 0x8655, 0x008e, 0x080c, 0x852a, 0x2f08, 0x2648, + 0x080c, 0xcfc8, 0xb93c, 0x81ff, 0x090c, 0x872c, 0x080c, 0x98e4, + 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, + 0x080c, 0x9b91, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb, + 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0x9c85, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x01b8, 0x660a, 0x2b08, + 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, + 0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0021, 0x080c, 0x9c85, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, + 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0x9b91, + 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, + 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9c85, 0x9085, 0x0001, + 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, + 0x2091, 0x8000, 0x080c, 0x9c58, 0x0188, 0x2b08, 0x6112, 0x080c, + 0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, + 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, + 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, + 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, + 0xb8c0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, + 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, + 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, + 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086, + 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xb847, 0x0168, 0xa864, + 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, + 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, + 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x0198, + 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016, + 0x080c, 0x3006, 0x2009, 0x0028, 0x080c, 0x9c85, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, + 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, + 0xa818, 0x00be, 0x080c, 0xaa57, 0x6003, 0x0001, 0x6007, 0x0029, + 0x080c, 0x84d8, 0x080c, 0x8936, 0x0078, 0x6014, 0x0096, 0x2048, + 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe9a, + 0x080c, 0xa58f, 0x080c, 0x9be7, 0x0005, 0x0096, 0x6014, 0x904d, + 0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, + 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6996, 0x012e, 0x009e, 0x080c, 0x9be7, 0x0c30, 0x0096, 0x9186, + 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x61c1, 0x00e8, 0x9186, + 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, + 0x6010, 0x00b6, 0x2058, 0x080c, 0x630b, 0x00be, 0x080c, 0xab28, + 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, + 0x2001, 0x0006, 0x080c, 0x61c1, 0x6014, 0x2048, 0xa868, 0xd0fc, + 0x0170, 0x080c, 0x9ff6, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, + 0x0528, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x009e, 0x0005, 0x6014, + 0x6310, 0x2358, 0x904d, 0x090c, 0x0d65, 0xa87b, 0x0000, 0xa883, + 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x655f, 0x1108, 0xc185, + 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6996, 0x012e, 0x080c, 0x9be7, 0x08f8, 0x6014, 0x904d, + 0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, + 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6996, 0x012e, 0x080c, 0x9be7, 0x0840, 0xa878, 0x9086, 0x0005, + 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b, + 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, + 0x8023, 0x080c, 0x84d1, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084, 0x000f, + 0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xbb7e, 0xbb7e, 0xbb81, + 0xd2c2, 0xd2dd, 0xd2e0, 0xb565, 0xb565, 0xb565, 0xb565, 0xb565, + 0xb565, 0xb565, 0xb565, 0xb565, 0x080c, 0x0d65, 0xa001, 0xa001, + 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, + 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, + 0x00f6, 0x2c78, 0x080c, 0x9b91, 0x0508, 0x7810, 0x6012, 0x080c, + 0xbcdb, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, + 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, + 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e, 0x2009, + 0x8020, 0x080c, 0x84d1, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, + 0x2001, 0x1959, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096, 0x6814, + 0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4, + 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, + 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, + 0x0fd4, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, + 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, + 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, + 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, + 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, + 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x695c, + 0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x2009, + 0x8020, 0x080c, 0x84d1, 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, 0x1953, 0x200c, 0x8000, 0x2014, 0x2001, + 0x0032, 0x080c, 0x8419, 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011, + 0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, 0x2071, + 0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8419, 0x2001, + 0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1959, + 0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9, 0x2001, + 0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x080c, 0x6648, + 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, + 0x00e6, 0x2001, 0x1957, 0x2003, 0x0028, 0x2001, 0x1958, 0x2003, + 0x0014, 0x2071, 0x193d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, + 0x1959, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9, + 0x2001, 0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x00ee, + 0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110, 0x080c, + 0x1054, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, + 0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, + 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9c85, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, + 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, 0x0018, + 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, + 0x89f5, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54, + 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, + 0x080c, 0x305b, 0x080c, 0x9ff6, 0x0020, 0x080c, 0xa58f, 0x080c, + 0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206, + 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91, + 0x0188, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900, + 0x6016, 0x2009, 0x004d, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0x9c3d, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcc0, - 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x164f, - 0x00fe, 0x2009, 0x0021, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, - 0x0016, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0198, 0x660a, 0x2b08, - 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, - 0x0016, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, - 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, - 0x9c3d, 0x0188, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, - 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0x9c6a, 0x9085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, - 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, - 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, 0xb8c0, 0x9005, 0x0128, - 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, 0x00be, 0x002e, 0x0005, - 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, - 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, - 0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014, - 0x904d, 0x080c, 0xb82c, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158, - 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006, - 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x080c, 0x9c3d, 0x0198, 0x2b08, 0x6112, 0x080c, - 0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x3003, 0x2009, - 0x0028, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1823, 0x2204, - 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa7fd, 0x00be, 0x080c, - 0xaa3c, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x84b0, 0x080c, - 0x890e, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, - 0x0148, 0x2001, 0x0001, 0x080c, 0xbe7f, 0x080c, 0xa574, 0x080c, - 0x9bcc, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d65, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x009e, - 0x080c, 0x9bcc, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, - 0x0004, 0x080c, 0x61ba, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, - 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, - 0x080c, 0x6304, 0x00be, 0x080c, 0xab0d, 0x1198, 0x6010, 0x00b6, - 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, - 0x61ba, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0x9fdb, - 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xa574, - 0x080c, 0x9bcc, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, - 0x090c, 0x0d65, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, - 0x900e, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, - 0x080c, 0x9bcc, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0d65, 0xa87b, - 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867, - 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x080c, - 0x9bcc, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, - 0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b, 0x0000, 0x6017, 0x0000, - 0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x84a9, - 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, - 0x0130, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, - 0x0005, 0xb54a, 0xbb63, 0xbb63, 0xbb66, 0xd2a0, 0xd2bb, 0xd2be, - 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, - 0xb54a, 0x080c, 0x0d65, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, - 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, - 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, - 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, - 0x9b76, 0x0508, 0x7810, 0x6012, 0x080c, 0xbcc0, 0x7820, 0x9086, - 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, - 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, - 0x6003, 0x0001, 0x795c, 0x615e, 0x2009, 0x8020, 0x080c, 0x84a9, - 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959, 0x2004, - 0x604a, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0x681c, 0xd0fc, - 0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4, 0x0180, 0xc0e4, 0xa87e, - 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130, - 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x6830, 0x6036, - 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170, - 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803, - 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048, - 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c, - 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, - 0x6808, 0x603e, 0x6910, 0x6112, 0x695c, 0x615e, 0x6023, 0x0001, - 0x6007, 0x0039, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, - 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, - 0x1953, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x83f1, - 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, - 0x1955, 0x200c, 0x8000, 0x2014, 0x2071, 0x193d, 0x711a, 0x721e, - 0x2001, 0x0064, 0x080c, 0x83f1, 0x2001, 0x1958, 0x82ff, 0x1110, - 0x2011, 0x0014, 0x2202, 0x2001, 0x1959, 0x9288, 0x000a, 0x2102, - 0x2001, 0x0017, 0x080c, 0x989e, 0x2001, 0x1a59, 0x2102, 0x2001, - 0x0032, 0x080c, 0x159e, 0x080c, 0x6641, 0x00ee, 0x003e, 0x002e, - 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957, - 0x2003, 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d, - 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e, - 0x2102, 0x2001, 0x0017, 0x080c, 0x989e, 0x2001, 0x1a59, 0x2102, - 0x2001, 0x0032, 0x080c, 0x159e, 0x00ee, 0x001e, 0x000e, 0x0005, - 0x0096, 0x6060, 0x904d, 0x0110, 0x080c, 0x1054, 0x009e, 0x0005, - 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0180, - 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, - 0x0033, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1500, 0x708c, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048, - 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x89cd, 0x01d8, 0x7078, - 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54, 0x9206, 0x1140, 0x6210, - 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3054, 0x080c, - 0x9fdb, 0x0020, 0x080c, 0xa574, 0x080c, 0x9bcc, 0x00fe, 0x00ee, - 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0188, 0x2b08, 0x6112, - 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d, - 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x9b76, - 0x0180, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, - 0x6016, 0x001e, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046, - 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, - 0x0015, 0x1568, 0x718c, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106, - 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x6014, - 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f, - 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, - 0x0016, 0x200c, 0x080c, 0xc529, 0x001e, 0xa804, 0x9005, 0x0110, - 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c, - 0xa574, 0x080c, 0x9bcc, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e, - 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x708c, 0x9086, 0x0004, - 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x89cd, 0x01a8, 0x7078, - 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78, 0x9206, 0x1110, 0x080c, - 0x3003, 0x080c, 0x9fdb, 0x0020, 0x080c, 0xa574, 0x080c, 0x9bcc, - 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa78, 0x9206, 0x0d78, - 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, - 0x1550, 0x708c, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78, - 0x080c, 0x89cd, 0x05f0, 0x7078, 0xaacc, 0x9206, 0x1180, 0x707c, - 0xaad0, 0x9206, 0x1160, 0x080c, 0x3003, 0x0016, 0xa998, 0xaab0, - 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x0010, 0x080c, - 0x5127, 0x080c, 0xb82c, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000, - 0xa897, 0x4000, 0x0080, 0x080c, 0xb82c, 0x01b8, 0x6014, 0x2048, - 0x080c, 0x5127, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, - 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, - 0x080c, 0x698f, 0x012e, 0x080c, 0x9bcc, 0x00fe, 0x00ee, 0x009e, - 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930, 0x0888, 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, - 0x080c, 0xb82c, 0x0904, 0xbe7b, 0x0096, 0x6314, 0x2348, 0xa87a, - 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009, - 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6558, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004, - 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8b4, 0x20e0, - 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f9f, 0x20a9, 0x0004, - 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f9f, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007, - 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2, - 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6983, - 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, 0x2424, 0x2118, 0x831f, 0x939c, 0xff00, - 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c, - 0x48d1, 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, - 0xb81a, 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, 0xaea7, 0x0005, - 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0, - 0x080c, 0xb82c, 0x01c8, 0x080c, 0xba1b, 0x6037, 0x4000, 0x6014, - 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xba41, 0x1118, - 0x080c, 0xa574, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff, - 0x1129, 0x080c, 0x698f, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4, - 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118, - 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xbb30, 0xa877, - 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, - 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, - 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, - 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4a6e, - 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1957, - 0x2004, 0x601a, 0x0005, 0x2001, 0x1959, 0x2004, 0x604a, 0x0005, - 0x080c, 0x9bcc, 0x0804, 0x890e, 0x611c, 0xd1fc, 0xa97c, 0x1108, - 0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c, 0x1108, 0xd0e4, 0x0005, - 0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c, 0x1108, 0xd0e4, 0x0005, - 0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128, 0x908c, 0x000f, 0x9186, - 0x0005, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x0005, - 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x001b, - 0x006e, 0x00be, 0x0005, 0xbfab, 0xc684, 0xc7d3, 0xbfab, 0xbfab, - 0xbfab, 0xbfab, 0xbfab, 0xbfe2, 0xc851, 0xbfab, 0xbfab, 0xbfab, - 0xbfab, 0xbfab, 0xbfab, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, - 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0xbfc6, 0xcd68, - 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xcd17, 0xcdba, - 0xbfc6, 0xd3db, 0xd40f, 0xd3db, 0xd40f, 0xbfc6, 0x080c, 0x0d65, - 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x000a, 0x0005, - 0xbfe0, 0xca2d, 0xcaf6, 0xcb18, 0xcb93, 0xbfe0, 0xcc8d, 0xcc1b, - 0xc85b, 0xccef, 0xcd04, 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe0, - 0x080c, 0x0d65, 0x91b2, 0x0053, 0x1a0c, 0x0d65, 0x2100, 0x91b2, - 0x0040, 0x1a04, 0xc427, 0x0002, 0xc02c, 0xc218, 0xc02c, 0xc02c, - 0xc02c, 0xc221, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, - 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, - 0xc02c, 0xc02c, 0xc02c, 0xc02e, 0xc095, 0xc0a4, 0xc108, 0xc133, - 0xc1ab, 0xc203, 0xc02c, 0xc02c, 0xc224, 0xc02c, 0xc02c, 0xc239, - 0xc246, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc2c9, 0xc02c, - 0xc02c, 0xc2dd, 0xc02c, 0xc02c, 0xc298, 0xc02c, 0xc02c, 0xc02c, - 0xc2f5, 0xc02c, 0xc02c, 0xc02c, 0xc372, 0xc02c, 0xc02c, 0xc02c, - 0xc02c, 0xc02c, 0xc02c, 0xc3ef, 0x080c, 0x0d65, 0x080c, 0x661e, - 0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, - 0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, - 0x0000, 0x0804, 0xc211, 0x080c, 0x6607, 0x00e6, 0x00c6, 0x0036, - 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, - 0x080c, 0x98ad, 0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502, - 0x2c08, 0x080c, 0xcfa6, 0x007e, 0x001e, 0x080c, 0x98c9, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6278, - 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026, - 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd587, - 0x002e, 0x001e, 0x1178, 0x080c, 0xced5, 0x1904, 0xc100, 0x080c, - 0xce71, 0x1120, 0x6007, 0x0008, 0x0804, 0xc211, 0x6007, 0x0009, - 0x0804, 0xc211, 0x080c, 0xd0dc, 0x0128, 0x080c, 0xced5, 0x0d78, - 0x0804, 0xc100, 0x6017, 0x1900, 0x0c88, 0x080c, 0x3149, 0x1904, - 0xc424, 0x6106, 0x080c, 0xce24, 0x6007, 0x0006, 0x0804, 0xc211, - 0x6007, 0x0007, 0x0804, 0xc211, 0x080c, 0xd44b, 0x1904, 0xc424, - 0x080c, 0x3149, 0x1904, 0xc424, 0x00d6, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, - 0x61a6, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686, - 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140, - 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480, - 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034, - 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, - 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xcf3c, - 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, - 0x900e, 0x080c, 0x3054, 0x002e, 0x080c, 0x6304, 0x6007, 0x000a, - 0x00de, 0x0804, 0xc211, 0x6007, 0x000b, 0x00de, 0x0804, 0xc211, - 0x080c, 0x3003, 0x080c, 0xbf5b, 0x6007, 0x0001, 0x0804, 0xc211, - 0x080c, 0xd44b, 0x1904, 0xc424, 0x080c, 0x3149, 0x1904, 0xc424, - 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014, - 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04, - 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, - 0x080c, 0x3054, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c, - 0xd567, 0x0804, 0xc211, 0x080c, 0x661e, 0x1140, 0x2001, 0x1836, - 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc03b, - 0x080c, 0x6607, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, - 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x61e6, - 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, - 0x9686, 0x0006, 0x1904, 0xc100, 0x080c, 0xcf49, 0x1120, 0x6007, - 0x000e, 0x0804, 0xc211, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, - 0x080c, 0x3003, 0x080c, 0xbf5b, 0x004e, 0x0016, 0x9006, 0x2009, - 0x1854, 0x210c, 0x0048, 0x2009, 0x0029, 0x080c, 0xd251, 0x6010, - 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, - 0x0804, 0xc211, 0x2001, 0x0001, 0x080c, 0x61a6, 0x0156, 0x0016, - 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0270, - 0x080c, 0xabb0, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0168, - 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc100, 0x9682, - 0x0007, 0x0a04, 0xc15c, 0x0804, 0xc100, 0x6017, 0x1900, 0x6007, - 0x0009, 0x0804, 0xc211, 0x080c, 0x661e, 0x1140, 0x2001, 0x1836, - 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc03b, - 0x080c, 0x6607, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, - 0x0006, 0x0688, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, - 0x9686, 0x0006, 0x1904, 0xc100, 0x080c, 0xcf77, 0x1130, 0x080c, - 0xce71, 0x1118, 0x6007, 0x0010, 0x04e0, 0x0046, 0x6410, 0x2458, - 0xbca0, 0x0046, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x004e, 0x0016, - 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029, 0x080c, - 0xd251, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, - 0x6007, 0x0001, 0x00f0, 0x080c, 0xd0dc, 0x0140, 0x96b4, 0xff00, - 0x8637, 0x9686, 0x0006, 0x0980, 0x0804, 0xc100, 0x6017, 0x1900, - 0x6007, 0x0009, 0x0070, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, - 0xd44b, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, 0xc100, 0x6007, - 0x0012, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0005, - 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, - 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xd44b, 0x1904, 0xc424, - 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, 0xc100, - 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, - 0x0005, 0x080c, 0x3149, 0x1904, 0xc424, 0x6007, 0x0023, 0x6003, - 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0005, 0x080c, 0xd44b, - 0x1904, 0xc424, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, - 0x1904, 0xc100, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, - 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xb81a, 0x01b0, 0x2260, - 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, - 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd223, - 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, 0x9bcc, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, - 0x080c, 0x84b0, 0x080c, 0x890e, 0x00ee, 0x002e, 0x001e, 0x0005, - 0x2001, 0x0001, 0x080c, 0x61a6, 0x0156, 0x0016, 0x0026, 0x0036, - 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xabb0, - 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, - 0xc211, 0x080c, 0xa815, 0x080c, 0x70ac, 0x1190, 0x0006, 0x0026, - 0x0036, 0x080c, 0x70c6, 0x1138, 0x080c, 0x73ac, 0x080c, 0x5cd5, - 0x080c, 0x6fdd, 0x0010, 0x080c, 0x7080, 0x003e, 0x002e, 0x000e, - 0x0005, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, - 0xc100, 0x6106, 0x080c, 0xc5e0, 0x1120, 0x6007, 0x002b, 0x0804, - 0xc211, 0x6007, 0x002c, 0x0804, 0xc211, 0x080c, 0xd44b, 0x1904, - 0xc424, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, - 0xc100, 0x6106, 0x080c, 0xc5e5, 0x1120, 0x6007, 0x002e, 0x0804, - 0xc211, 0x6007, 0x002f, 0x0804, 0xc211, 0x080c, 0x3149, 0x1904, - 0xc424, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, - 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, - 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xc218, 0x080c, - 0x538a, 0xd0e4, 0x0904, 0xc36f, 0x2071, 0x026c, 0x7010, 0x603a, - 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x665c, 0x0140, 0x6010, - 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, - 0x6658, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206, 0x1590, 0x6878, - 0x9106, 0x1578, 0x7210, 0x080c, 0xb81a, 0x0590, 0x080c, 0xc4af, - 0x0578, 0x080c, 0xd2cd, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, - 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00ce, 0x00de, 0x00ee, - 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xb81a, 0x01c0, - 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, - 0x2c08, 0x9085, 0x0001, 0x080c, 0xd223, 0x2c10, 0x2160, 0x0140, - 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, - 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, - 0x0012, 0x0868, 0x080c, 0x3149, 0x1904, 0xc424, 0x6010, 0x2058, - 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xc218, - 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x538a, 0xd0e4, 0x0904, 0xc3e7, - 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, - 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, - 0x080c, 0xd223, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xb81a, 0x05d0, - 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, - 0x2260, 0x080c, 0xb42a, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, - 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, - 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, - 0xc4af, 0x0904, 0xc368, 0x0056, 0x7510, 0x7614, 0x080c, 0xd2e6, - 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, - 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, - 0x84a9, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, - 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0c10, 0x6007, - 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xc33f, 0x00e6, - 0x0026, 0x080c, 0x661e, 0x0550, 0x080c, 0x6607, 0x080c, 0xd4bd, - 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, - 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, - 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, - 0x080c, 0x665c, 0x0120, 0x2011, 0x19da, 0x2013, 0x07d0, 0xd0ac, - 0x1128, 0x080c, 0x2ddb, 0x0010, 0x080c, 0xd4ef, 0x002e, 0x00ee, - 0x080c, 0x9bcc, 0x0804, 0xc217, 0x080c, 0x9bcc, 0x0005, 0x2600, - 0x0002, 0xc43b, 0xc43b, 0xc43b, 0xc43b, 0xc43b, 0xc43d, 0xc43b, - 0xc43b, 0xc43b, 0xc43b, 0xc45a, 0xc43b, 0xc43b, 0xc43b, 0xc46c, - 0xc479, 0xc4aa, 0xc43b, 0x080c, 0x0d65, 0x080c, 0xd44b, 0x1d20, - 0x080c, 0x3149, 0x1d08, 0x080c, 0xc5c4, 0x1148, 0x7038, 0x6016, - 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x84b0, 0x0005, 0x080c, - 0x3003, 0x080c, 0xbf5b, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, - 0x84b0, 0x0005, 0x080c, 0xd44b, 0x1938, 0x080c, 0x3149, 0x1920, - 0x080c, 0xc5c4, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, - 0x0001, 0x080c, 0x84b0, 0x0005, 0x080c, 0xc4cc, 0x0904, 0xc424, - 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, - 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, - 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x198e, - 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x198f, 0x2004, 0x9106, - 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, - 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xabc4, 0x009e, - 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, - 0x890e, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, - 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, - 0xb8c4, 0xd084, 0x0150, 0x7128, 0x6050, 0x9106, 0x1120, 0x712c, - 0x604c, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, - 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, - 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x708c, - 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, - 0x0000, 0x080c, 0x103b, 0x05a0, 0x2900, 0x6016, 0x708c, 0x8004, - 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, - 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, - 0x0016, 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x103b, 0x01c0, - 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, - 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, - 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, - 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fd4, - 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, - 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, - 0x11a8, 0x080c, 0x202b, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, - 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, - 0x8108, 0x080c, 0x202b, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x202b, - 0x2061, 0x1971, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, - 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, - 0x202b, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x1971, 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, 0x2043, 0x20a1, 0x024c, - 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, - 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x2043, - 0x20a1, 0x0240, 0x0c98, 0x080c, 0x2043, 0x2061, 0x1974, 0x6004, - 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, - 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x2043, - 0x20a1, 0x0240, 0x0c98, 0x2061, 0x1974, 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, 0x080c, 0xc65a, 0x00de, 0x0005, 0x00d6, 0x080c, 0xc667, - 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, - 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xd567, - 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, - 0x6824, 0x080c, 0x2424, 0x1148, 0x2001, 0x0001, 0x080c, 0xd567, - 0x2110, 0x900e, 0x080c, 0x3054, 0x0018, 0x9085, 0x0001, 0x0008, - 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0x9c3d, 0x0598, - 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, - 0x080c, 0x2424, 0x1568, 0x080c, 0x6209, 0x1550, 0xbe12, 0xbd16, - 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xd44b, 0x11c8, - 0x080c, 0x3149, 0x11b0, 0x080c, 0xc5c4, 0x0500, 0x2001, 0x0007, - 0x080c, 0x61ba, 0x2001, 0x0007, 0x080c, 0x61e6, 0x6017, 0x0000, - 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, - 0x0010, 0x080c, 0x9bcc, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, - 0x080c, 0x9bcc, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9bcc, - 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, - 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, - 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, - 0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, - 0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x6162, 0x908e, 0x0014, - 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, - 0x0d65, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, - 0xc7a7, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, - 0x0d65, 0x2001, 0x0007, 0x080c, 0x61e6, 0x080c, 0x884c, 0x080c, - 0x9c06, 0x080c, 0x890e, 0x0005, 0xc6e4, 0xc6e6, 0xc6e4, 0xc6e4, - 0xc6e4, 0xc6e6, 0xc6f3, 0xc7a4, 0xc743, 0xc7a4, 0xc755, 0xc7a4, - 0xc6f3, 0xc7a4, 0xc79c, 0xc7a4, 0xc79c, 0xc7a4, 0xc7a4, 0xc6e4, - 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, - 0xc6e4, 0xc6e4, 0xc6e6, 0xc6e4, 0xc7a4, 0xc6e4, 0xc6e4, 0xc7a4, - 0xc6e4, 0xc7a1, 0xc7a4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc7a4, - 0xc7a4, 0xc6e4, 0xc7a4, 0xc7a4, 0xc6e4, 0xc6ee, 0xc6e4, 0xc6e4, - 0xc6e4, 0xc6e4, 0xc7a0, 0xc7a4, 0xc6e4, 0xc6e4, 0xc7a4, 0xc7a4, - 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0x080c, 0x0d65, 0x080c, 0xbf5e, - 0x6003, 0x0002, 0x080c, 0x890e, 0x0804, 0xc7a6, 0x9006, 0x080c, - 0x61a6, 0x0804, 0xc7a4, 0x080c, 0x6658, 0x1904, 0xc7a4, 0x9006, - 0x080c, 0x61a6, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, - 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0428, - 0x6010, 0x2058, 0xb884, 0x9005, 0x1178, 0x080c, 0xbf46, 0x1904, - 0xc7a4, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4a6e, - 0x004e, 0x003e, 0x0804, 0xc7a4, 0x080c, 0x317a, 0x1904, 0xc7a4, - 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, - 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, - 0x61ba, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, - 0x84b0, 0x080c, 0x890e, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, - 0x813f, 0x0804, 0xc7a6, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, - 0x8637, 0x9686, 0x0006, 0x0904, 0xc7a4, 0x9686, 0x0004, 0x0904, - 0xc7a4, 0x2001, 0x0004, 0x0804, 0xc7a2, 0x2001, 0x1800, 0x2004, - 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, - 0x2021, 0x0006, 0x080c, 0x4a6e, 0x004e, 0x003e, 0x2001, 0x0006, - 0x080c, 0xc7c0, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, - 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, - 0x61e6, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, - 0x080c, 0x61ba, 0x080c, 0x6658, 0x11f8, 0x2001, 0x1836, 0x2004, - 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, - 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804, - 0xc72d, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020, - 0x0018, 0x0010, 0x080c, 0x61e6, 0x080c, 0x9bcc, 0x0005, 0x2600, - 0x0002, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd, 0xc7bb, - 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd, - 0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0d65, 0x080c, 0x9bcc, 0x0005, - 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, - 0x080c, 0x61ba, 0x9006, 0x080c, 0x61a6, 0x080c, 0x3034, 0x00de, - 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, - 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d65, 0x91b6, 0x0015, 0x1110, - 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d65, 0x006b, 0x0005, - 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xc83b, 0xc800, - 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, - 0xa655, 0xa655, 0xc83b, 0xc842, 0xa655, 0xa655, 0xa655, 0xa655, - 0x00f6, 0x080c, 0x6658, 0x11d8, 0x080c, 0xbf46, 0x11c0, 0x6010, - 0x905d, 0x01a8, 0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x61a6, - 0x2001, 0x0002, 0x080c, 0x61ba, 0x6023, 0x0001, 0x6003, 0x0001, - 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00d0, 0x2011, - 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1190, 0x080c, - 0x6269, 0x0118, 0x080c, 0x9bcc, 0x0060, 0xb810, 0x0006, 0xb814, - 0x0006, 0x080c, 0x5cef, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, - 0x9bcc, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, - 0x9bcc, 0x0005, 0x080c, 0xaa39, 0x1148, 0x6003, 0x0001, 0x6007, - 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0010, 0x080c, 0x9bcc, - 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0x884c, - 0x080c, 0x9c06, 0x0005, 0x9182, 0x0040, 0x0002, 0xc871, 0xc871, - 0xc871, 0xc871, 0xc873, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, - 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, - 0xc871, 0x080c, 0x0d65, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6, + 0x0016, 0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbcdb, + 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9c85, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, + 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, + 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048, + 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971, + 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, + 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, + 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc545, 0x001e, + 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, + 0x0103, 0x0010, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee, + 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, + 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, + 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, + 0x89f5, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78, + 0x9206, 0x1110, 0x080c, 0x3006, 0x080c, 0x9ff6, 0x0020, 0x080c, + 0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, + 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, + 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530, + 0x6014, 0x2048, 0x2c78, 0x080c, 0x89f5, 0x05f0, 0x7078, 0xaacc, + 0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, 0x3006, + 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345, + 0x001e, 0x0010, 0x080c, 0x512e, 0x080c, 0xb847, 0x0508, 0xa87b, + 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xb847, + 0x01b8, 0x6014, 0x2048, 0x080c, 0x512e, 0x1d70, 0xa87b, 0x0030, + 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, + 0x8000, 0xa867, 0x0139, 0x080c, 0x6996, 0x012e, 0x080c, 0x9be7, + 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930, + 0x0888, 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, 0x080c, 0xb847, 0x0904, 0xbe96, 0x0096, + 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, + 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, + 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, + 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, + 0x0f9f, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8, + 0x9080, 0x000a, 0x2098, 0x080c, 0x0f9f, 0x00ce, 0x0090, 0xaa96, + 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, + 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, + 0xa89e, 0x080c, 0x698a, 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, 0x2424, 0x2118, + 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, + 0x2011, 0x8018, 0x080c, 0x48d8, 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, 0xb835, 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, 0xaec2, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, + 0x901e, 0x0499, 0x01e0, 0x080c, 0xb847, 0x01c8, 0x080c, 0xba36, + 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, + 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0040, 0xa867, 0x0103, + 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6996, 0x009e, 0x003e, + 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, + 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, + 0x080c, 0xbb4b, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, + 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, + 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, + 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, + 0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, + 0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, 0x1959, + 0x2004, 0x604a, 0x0005, 0x080c, 0x9be7, 0x0804, 0x8936, 0x611c, + 0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c, + 0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c, + 0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128, + 0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003, 0x0010, + 0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, + 0x1a0c, 0x0d65, 0x001b, 0x006e, 0x00be, 0x0005, 0xbfc6, 0xc6a0, + 0xc7ef, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbffd, 0xc871, + 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0x080c, 0x0d65, + 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, + 0x0005, 0xbfe1, 0xcd88, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1, + 0xbfe1, 0xcd37, 0xcdda, 0xbfe1, 0xd3fd, 0xd431, 0xd3fd, 0xd431, + 0xbfe1, 0x080c, 0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, + 0x6000, 0x000a, 0x0005, 0xbffb, 0xca4d, 0xcb16, 0xcb38, 0xcbb3, + 0xbffb, 0xccad, 0xcc3b, 0xc87b, 0xcd0f, 0xcd24, 0xbffb, 0xbffb, + 0xbffb, 0xbffb, 0xbffb, 0x080c, 0x0d65, 0x91b2, 0x0053, 0x1a0c, + 0x0d65, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc443, 0x0002, 0xc047, + 0xc234, 0xc047, 0xc047, 0xc047, 0xc23d, 0xc047, 0xc047, 0xc047, + 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, + 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc049, 0xc0b0, + 0xc0bf, 0xc123, 0xc14e, 0xc1c6, 0xc21f, 0xc047, 0xc047, 0xc240, + 0xc047, 0xc047, 0xc255, 0xc262, 0xc047, 0xc047, 0xc047, 0xc047, + 0xc047, 0xc2e5, 0xc047, 0xc047, 0xc2f9, 0xc047, 0xc047, 0xc2b4, + 0xc047, 0xc047, 0xc047, 0xc311, 0xc047, 0xc047, 0xc047, 0xc38e, + 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc40b, 0x080c, + 0x0d65, 0x080c, 0x6625, 0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, + 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, 0x0009, + 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc22d, 0x080c, 0x660e, + 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, + 0x0026, 0x2019, 0x0029, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076, + 0x903e, 0x080c, 0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e, + 0x080c, 0x98e4, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, + 0x2658, 0x080c, 0x627f, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, + 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, + 0x2c08, 0x080c, 0xd5a9, 0x002e, 0x001e, 0x1178, 0x080c, 0xcef7, + 0x1904, 0xc11b, 0x080c, 0xce93, 0x1120, 0x6007, 0x0008, 0x0804, + 0xc22d, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0xd0fe, 0x0128, + 0x080c, 0xcef7, 0x0d78, 0x0804, 0xc11b, 0x6017, 0x1900, 0x0c88, + 0x080c, 0x3150, 0x1904, 0xc440, 0x6106, 0x080c, 0xce44, 0x6007, + 0x0006, 0x0804, 0xc22d, 0x6007, 0x0007, 0x0804, 0xc22d, 0x080c, + 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440, 0x00d6, + 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, + 0x2001, 0x0001, 0x080c, 0x61ad, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, + 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, + 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, + 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, + 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, + 0x00ee, 0x080c, 0xcf5e, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, + 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x080c, + 0x630b, 0x6007, 0x000a, 0x00de, 0x0804, 0xc22d, 0x6007, 0x000b, + 0x00de, 0x0804, 0xc22d, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007, + 0x0001, 0x0804, 0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, + 0x3150, 0x1904, 0xc440, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, + 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, + 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, + 0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x6007, 0x000c, + 0x2001, 0x0001, 0x080c, 0xd589, 0x0804, 0xc22d, 0x080c, 0x6625, + 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, + 0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04, + 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001, + 0x0006, 0x080c, 0x61ed, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, + 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b, 0x080c, + 0xcf6b, 0x1120, 0x6007, 0x000e, 0x0804, 0xc22d, 0x0046, 0x6410, + 0x2458, 0xbca0, 0x0046, 0x080c, 0x3006, 0x080c, 0xbf76, 0x004e, + 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029, + 0x080c, 0xd273, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, + 0x004e, 0x6007, 0x0001, 0x0804, 0xc22d, 0x2001, 0x0001, 0x080c, + 0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, + 0x1805, 0x2011, 0x0270, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e, + 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, + 0x0a04, 0xc11b, 0x9682, 0x0007, 0x0a04, 0xc177, 0x0804, 0xc11b, + 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0x6625, + 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, + 0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04, + 0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4, 0xff00, + 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b, + 0x080c, 0xcf99, 0x1130, 0x080c, 0xce93, 0x1118, 0x6007, 0x0010, + 0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3006, + 0x080c, 0xbf76, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, + 0x0048, 0x2009, 0x0029, 0x080c, 0xd273, 0x6010, 0x2058, 0xb800, + 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, + 0xd0fe, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0980, + 0x0804, 0xc11b, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, + 0x3150, 0x1904, 0xc440, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, + 0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, + 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, + 0x080c, 0x84d8, 0x080c, 0x8936, 0x0cb0, 0x6007, 0x0005, 0x0c68, + 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440, + 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0020, 0x6003, 0x0001, + 0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x080c, 0x3150, 0x1904, + 0xc440, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, + 0x8936, 0x0005, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, + 0x1904, 0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x0016, 0x0026, + 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, + 0x080c, 0xb835, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, + 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, + 0x2c08, 0x9006, 0x080c, 0xd245, 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, 0x9be7, 0x2160, + 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, + 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x61ad, + 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, + 0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e, 0x015e, + 0x0120, 0x6007, 0x0031, 0x0804, 0xc22d, 0x080c, 0xa830, 0x080c, + 0x70b7, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x70d1, 0x1138, + 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x0010, 0x080c, + 0x708b, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x3150, 0x1904, + 0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc5fc, + 0x1120, 0x6007, 0x002b, 0x0804, 0xc22d, 0x6007, 0x002c, 0x0804, + 0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, + 0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc601, + 0x1120, 0x6007, 0x002e, 0x0804, 0xc22d, 0x6007, 0x002f, 0x0804, + 0xc22d, 0x080c, 0x3150, 0x1904, 0xc440, 0x00e6, 0x00d6, 0x00c6, + 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, + 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, + 0x00ee, 0x0804, 0xc234, 0x080c, 0x5391, 0xd0e4, 0x0904, 0xc38b, + 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, + 0x080c, 0x6663, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, + 0xb814, 0x9206, 0x0510, 0x080c, 0x665f, 0x15b8, 0x2069, 0x1800, + 0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, + 0xb835, 0x0590, 0x080c, 0xc4cb, 0x0578, 0x080c, 0xd2ef, 0x0560, + 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, + 0x84d1, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, + 0x0150, 0x080c, 0xb835, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, + 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, + 0xd245, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, + 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, + 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3150, + 0x1904, 0xc440, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, + 0x9086, 0x0006, 0x1904, 0xc234, 0x00e6, 0x00d6, 0x00c6, 0x080c, + 0x5391, 0xd0e4, 0x0904, 0xc403, 0x2069, 0x1800, 0x2071, 0x026c, + 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, + 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd245, 0x2c10, 0x00ce, + 0x05e8, 0x080c, 0xb835, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, + 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb445, 0x002e, + 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, + 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, + 0x2004, 0x9005, 0x0170, 0x080c, 0xc4cb, 0x0904, 0xc384, 0x0056, + 0x7510, 0x7614, 0x080c, 0xd308, 0x005e, 0x00ce, 0x00de, 0x00ee, + 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, + 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0c78, 0x6007, 0x003b, + 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x2009, 0x8020, + 0x080c, 0x84d1, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, + 0x0000, 0x0804, 0xc35b, 0x00e6, 0x0026, 0x080c, 0x6625, 0x0550, + 0x080c, 0x660e, 0x080c, 0xd4df, 0x1518, 0x2071, 0x1800, 0x70d8, + 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, 0x9284, + 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, 0x707e, + 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6663, 0x0120, 0x2011, + 0x19da, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2ddb, 0x0010, + 0x080c, 0xd511, 0x002e, 0x00ee, 0x080c, 0x9be7, 0x0804, 0xc233, + 0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc457, 0xc457, 0xc457, + 0xc457, 0xc457, 0xc459, 0xc457, 0xc457, 0xc457, 0xc457, 0xc476, + 0xc457, 0xc457, 0xc457, 0xc488, 0xc495, 0xc4c6, 0xc457, 0x080c, + 0x0d65, 0x080c, 0xd46d, 0x1d20, 0x080c, 0x3150, 0x1d08, 0x080c, + 0xc5e0, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, + 0x080c, 0x84d8, 0x0005, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007, + 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005, 0x080c, 0xd46d, + 0x1938, 0x080c, 0x3150, 0x1920, 0x080c, 0xc5e0, 0x1d60, 0x703c, + 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005, + 0x080c, 0xc4e8, 0x0904, 0xc440, 0x6007, 0x004e, 0x6003, 0x0001, + 0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x004f, 0x6017, + 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, + 0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, 0x7144, + 0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, + 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, + 0x000a, 0x080c, 0xabdf, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, + 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0050, + 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, + 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8c4, 0xd084, 0x0150, 0x7128, + 0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006, + 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, + 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, + 0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, 0x20e1, + 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x103b, 0x05a0, + 0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, + 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, 0x001e, + 0x2940, 0x080c, 0x103b, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, + 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, 0x001e, + 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, + 0x6014, 0x2048, 0x080c, 0x0fd4, 0x9006, 0x012e, 0x01de, 0x01ce, + 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, + 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x202b, 0x2099, + 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, + 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099, + 0x0260, 0x0ca8, 0x080c, 0x202b, 0x2061, 0x1971, 0x6004, 0x2098, + 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, + 0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099, 0x0260, 0x0ca8, + 0x2061, 0x1971, 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, 0x2043, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, + 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, + 0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x080c, + 0x2043, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, + 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, + 0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x2061, + 0x1974, 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, 0x080c, 0xc676, 0x00de, + 0x0005, 0x00d6, 0x080c, 0xc683, 0x1520, 0x680c, 0x908c, 0xff00, + 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, + 0x0130, 0x9006, 0x080c, 0xd589, 0x2009, 0x0001, 0x0078, 0xd1ec, + 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2424, 0x1148, + 0x2001, 0x0001, 0x080c, 0xd589, 0x2110, 0x900e, 0x080c, 0x305b, + 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, + 0x00c6, 0x080c, 0x9c58, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1568, 0x080c, + 0x6210, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, + 0x6012, 0x080c, 0xd46d, 0x11c8, 0x080c, 0x3150, 0x11b0, 0x080c, + 0xc5e0, 0x0500, 0x2001, 0x0007, 0x080c, 0x61c1, 0x2001, 0x0007, + 0x080c, 0x61ed, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, + 0x6003, 0x0001, 0x080c, 0x84d8, 0x0010, 0x080c, 0x9be7, 0x9085, + 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9be7, 0x00ce, 0x002e, + 0x001e, 0x0ca8, 0x080c, 0x9be7, 0x9006, 0x0c98, 0x2069, 0x026d, + 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, + 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, + 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018, + 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, + 0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, + 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d65, 0x91b6, 0x0013, 0x1130, + 0x2008, 0x91b2, 0x0040, 0x1a04, 0xc7c3, 0x0092, 0x91b6, 0x0027, + 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d65, 0x2001, 0x0007, 0x080c, + 0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005, + 0xc700, 0xc702, 0xc700, 0xc700, 0xc700, 0xc702, 0xc70f, 0xc7c0, + 0xc75f, 0xc7c0, 0xc771, 0xc7c0, 0xc70f, 0xc7c0, 0xc7b8, 0xc7c0, + 0xc7b8, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700, + 0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc702, 0xc700, + 0xc7c0, 0xc700, 0xc700, 0xc7c0, 0xc700, 0xc7bd, 0xc7c0, 0xc700, + 0xc700, 0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc7c0, 0xc7c0, + 0xc700, 0xc70a, 0xc700, 0xc700, 0xc700, 0xc700, 0xc7bc, 0xc7c0, + 0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700, + 0x080c, 0x0d65, 0x080c, 0xbf79, 0x6003, 0x0002, 0x080c, 0x8936, + 0x0804, 0xc7c2, 0x9006, 0x080c, 0x61ad, 0x0804, 0xc7c0, 0x080c, + 0x665f, 0x1904, 0xc7c0, 0x9006, 0x080c, 0x61ad, 0x6010, 0x2058, + 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4, + 0x8000, 0x78a6, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005, + 0x1178, 0x080c, 0xbf61, 0x1904, 0xc7c0, 0x0036, 0x0046, 0xbba0, + 0x2021, 0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0804, 0xc7c0, + 0x080c, 0x3181, 0x1904, 0xc7c0, 0x2001, 0x1800, 0x2004, 0x9086, + 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, + 0x00fe, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001, 0x6003, + 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936, 0x6110, + 0x2158, 0x2009, 0x0001, 0x080c, 0x8167, 0x0804, 0xc7c2, 0x6610, + 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, + 0xc7c0, 0x9686, 0x0004, 0x0904, 0xc7c0, 0x2001, 0x0004, 0x0804, + 0xc7be, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, + 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a75, + 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc7dc, 0x6610, 0x2658, + 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, + 0x0168, 0x2001, 0x0006, 0x080c, 0x61ed, 0x9284, 0x00ff, 0x908e, + 0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x665f, + 0x11f8, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, + 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, + 0x8000, 0x78a6, 0x00fe, 0x0804, 0xc749, 0x2001, 0x0004, 0x0030, + 0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010, 0x080c, 0x61ed, + 0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc7d7, 0xc7d7, 0xc7d7, + 0xc7d7, 0xc7d7, 0xc7d9, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9, + 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9, 0xc7d9, 0xc7d9, 0xc7d9, 0x080c, + 0x0d65, 0x080c, 0x9be7, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, + 0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x61c1, 0x9006, 0x080c, + 0x61ad, 0x080c, 0x303b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, + 0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, + 0x0d65, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, + 0x190c, 0x0d65, 0x006b, 0x0005, 0xa670, 0xa670, 0xa670, 0xa670, + 0xa670, 0xa670, 0xc85b, 0xc81c, 0xa670, 0xa670, 0xa670, 0xa670, + 0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xc85b, 0xc862, + 0xa670, 0xa670, 0xa670, 0xa670, 0x00f6, 0x080c, 0x665f, 0x11d8, + 0x080c, 0xbf61, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb884, 0x9005, + 0x0190, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, + 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, + 0x080c, 0x8936, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, + 0x080c, 0x2424, 0x11b0, 0x080c, 0x6270, 0x0118, 0x080c, 0x9be7, + 0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884, 0x0006, 0x080c, + 0x5cf6, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, + 0x9be7, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, + 0x9be7, 0x0005, 0x080c, 0xaa54, 0x1148, 0x6003, 0x0001, 0x6007, + 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0010, 0x080c, 0x9be7, + 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0x8874, + 0x080c, 0x9c21, 0x0005, 0x9182, 0x0040, 0x0002, 0xc891, 0xc891, + 0xc891, 0xc891, 0xc893, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, + 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, + 0xc891, 0x080c, 0x0d65, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11b0, 0x6007, - 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc8da, - 0x080c, 0xd55b, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, - 0x2011, 0x0200, 0x080c, 0x83c3, 0x0020, 0x9026, 0x080c, 0xd490, + 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc8fa, + 0x080c, 0xd57d, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, + 0x2011, 0x0200, 0x080c, 0x83eb, 0x0020, 0x9026, 0x080c, 0xd4b2, 0x0c30, 0x080c, 0x1022, 0x090c, 0x0d65, 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, 0x698f, - 0x001e, 0x080c, 0xd55b, 0x1904, 0xc93a, 0x9486, 0x2000, 0x1130, - 0x2019, 0x0017, 0x080c, 0xd1c9, 0x0804, 0xc93a, 0x9486, 0x0200, - 0x1120, 0x080c, 0xd159, 0x0804, 0xc93a, 0x9486, 0x0400, 0x0120, - 0x9486, 0x1000, 0x1904, 0xc93a, 0x2019, 0x0002, 0x080c, 0xd178, - 0x0804, 0xc93a, 0x2069, 0x1a3f, 0x6a00, 0xd284, 0x0904, 0xc9a4, - 0x9284, 0x0300, 0x1904, 0xc99d, 0x6804, 0x9005, 0x0904, 0xc985, - 0x2d78, 0x6003, 0x0007, 0x080c, 0x103b, 0x0904, 0xc946, 0x7800, + 0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6996, + 0x001e, 0x080c, 0xd57d, 0x1904, 0xc95a, 0x9486, 0x2000, 0x1130, + 0x2019, 0x0017, 0x080c, 0xd1eb, 0x0804, 0xc95a, 0x9486, 0x0200, + 0x1120, 0x080c, 0xd17b, 0x0804, 0xc95a, 0x9486, 0x0400, 0x0120, + 0x9486, 0x1000, 0x1904, 0xc95a, 0x2019, 0x0002, 0x080c, 0xd19a, + 0x0804, 0xc95a, 0x2069, 0x1a3f, 0x6a00, 0xd284, 0x0904, 0xc9c4, + 0x9284, 0x0300, 0x1904, 0xc9bd, 0x6804, 0x9005, 0x0904, 0xc9a5, + 0x2d78, 0x6003, 0x0007, 0x080c, 0x103b, 0x0904, 0xc966, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, - 0x180f, 0x2004, 0xd084, 0x1904, 0xc9a8, 0x9006, 0xa802, 0xa867, + 0x180f, 0x2004, 0xd084, 0x1904, 0xc9c8, 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, 0xc942, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001, + 0x0003, 0x9080, 0xc962, 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, 0x6992, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, + 0x080c, 0x6999, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, - 0x2004, 0xd084, 0x0120, 0x080c, 0x1022, 0x1904, 0xc8ef, 0x6017, + 0x2004, 0xd084, 0x0120, 0x080c, 0x1022, 0x1904, 0xc90f, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, - 0x84a9, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, + 0x84d1, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, - 0x2009, 0xa025, 0x080c, 0x84a9, 0x0828, 0x6868, 0x602e, 0x686c, + 0x2009, 0xa025, 0x080c, 0x84d1, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, - 0xa022, 0x080c, 0x84a9, 0x0804, 0xc93a, 0x2001, 0x180e, 0x2004, - 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1, 0x6017, 0xf300, + 0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x2001, 0x180e, 0x2004, + 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, - 0xa022, 0x080c, 0x84a9, 0x0804, 0xc93a, 0x6017, 0xf500, 0x0c98, - 0x6017, 0xf600, 0x0804, 0xc95a, 0x6017, 0xf200, 0x0804, 0xc95a, + 0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x6017, 0xf500, 0x0c98, + 0x6017, 0xf600, 0x0804, 0xc97a, 0x6017, 0xf200, 0x0804, 0xc97a, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, - 0x7044, 0x9084, 0x0003, 0x9080, 0xc942, 0x2005, 0xa87e, 0x2928, + 0x7044, 0x9084, 0x0003, 0x9080, 0xc962, 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, 0x0d65, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0029, 0x20a0, 0x2011, 0xca24, 0x2041, 0x0001, 0x223d, + 0x9080, 0x0029, 0x20a0, 0x2011, 0xca44, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x103b, 0x0170, 0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, - 0x080c, 0x1054, 0x0cc8, 0x080c, 0x1054, 0x0804, 0xc946, 0x2548, + 0x080c, 0x1054, 0x0cc8, 0x080c, 0x1054, 0x0804, 0xc966, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, - 0x080c, 0xd1fc, 0x0804, 0xc93a, 0x8010, 0x0004, 0x801a, 0x0006, + 0x080c, 0xd21e, 0x0804, 0xc95a, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d65, 0x9082, 0x0040, 0x0a0c, - 0x0d65, 0x2008, 0x0804, 0xcaaf, 0x9186, 0x0051, 0x0108, 0x0040, - 0x080c, 0x9a9c, 0x01e8, 0x9086, 0x0002, 0x0904, 0xcaf6, 0x00c0, + 0x0d65, 0x2008, 0x0804, 0xcacf, 0x9186, 0x0051, 0x0108, 0x0040, + 0x080c, 0x9ab7, 0x01e8, 0x9086, 0x0002, 0x0904, 0xcb16, 0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, - 0x0150, 0x190c, 0x0d65, 0x080c, 0x9a9c, 0x0150, 0x9086, 0x0004, - 0x0904, 0xcb93, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, - 0x080c, 0x9c87, 0x0005, 0xca76, 0xca78, 0xca78, 0xca9f, 0xca76, - 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, - 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0x080c, 0x0d65, - 0x080c, 0x884c, 0x080c, 0x890e, 0x0036, 0x0096, 0x6014, 0x904d, - 0x01d8, 0x080c, 0xb82c, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, + 0x0150, 0x190c, 0x0d65, 0x080c, 0x9ab7, 0x0150, 0x9086, 0x0004, + 0x0904, 0xcbb3, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, + 0x080c, 0x9ca2, 0x0005, 0xca96, 0xca98, 0xca98, 0xcabf, 0xca96, + 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, + 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0x080c, 0x0d65, + 0x080c, 0x8874, 0x080c, 0x8936, 0x0036, 0x0096, 0x6014, 0x904d, + 0x01d8, 0x080c, 0xb847, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, - 0xd1fc, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, + 0xd21e, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, - 0x080c, 0x884c, 0x080c, 0x890e, 0x080c, 0xb82c, 0x0120, 0x6014, - 0x2048, 0x080c, 0x1054, 0x080c, 0x9c06, 0x009e, 0x0005, 0x0002, - 0xcac3, 0xcad8, 0xcac5, 0xcaed, 0xcac3, 0xcac3, 0xcac3, 0xcac3, - 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, - 0xcac3, 0xcac3, 0xcac3, 0x080c, 0x0d65, 0x0096, 0x6014, 0x2048, + 0x080c, 0x8874, 0x080c, 0x8936, 0x080c, 0xb847, 0x0120, 0x6014, + 0x2048, 0x080c, 0x1054, 0x080c, 0x9c21, 0x009e, 0x0005, 0x0002, + 0xcae3, 0xcaf8, 0xcae5, 0xcb0d, 0xcae3, 0xcae3, 0xcae3, 0xcae3, + 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, + 0xcae3, 0xcae3, 0xcae3, 0x080c, 0x0d65, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, - 0x9c6a, 0x0010, 0x6003, 0x0004, 0x080c, 0x890e, 0x009e, 0x0005, - 0x080c, 0xb82c, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e, - 0xd1ec, 0x1138, 0x080c, 0x8398, 0x080c, 0x9bcc, 0x080c, 0x890e, - 0x0005, 0x080c, 0xd454, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007, - 0x0041, 0x2009, 0xa022, 0x080c, 0x84a9, 0x0005, 0x9182, 0x0040, - 0x0002, 0xcb0c, 0xcb0e, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, - 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, - 0xcb0c, 0xcb0c, 0xcb0f, 0xcb0c, 0x080c, 0x0d65, 0x0005, 0x00d6, - 0x080c, 0x8398, 0x00de, 0x080c, 0xd4ac, 0x080c, 0x9bcc, 0x0005, - 0x9182, 0x0040, 0x0002, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e, - 0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb30, 0xcb5b, 0xcb2e, 0xcb2e, - 0xcb2e, 0xcb2e, 0xcb5b, 0xcb2e, 0xcb2e, 0xcb2e, 0x080c, 0x0d65, + 0x9c85, 0x0010, 0x6003, 0x0004, 0x080c, 0x8936, 0x009e, 0x0005, + 0x080c, 0xb847, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e, + 0xd1ec, 0x1138, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x080c, 0x8936, + 0x0005, 0x080c, 0xd476, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007, + 0x0041, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0005, 0x9182, 0x0040, + 0x0002, 0xcb2c, 0xcb2e, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, + 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, + 0xcb2c, 0xcb2c, 0xcb2f, 0xcb2c, 0x080c, 0x0d65, 0x0005, 0x00d6, + 0x080c, 0x83c0, 0x00de, 0x080c, 0xd4ce, 0x080c, 0x9be7, 0x0005, + 0x9182, 0x0040, 0x0002, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, + 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb50, 0xcb7b, 0xcb4e, 0xcb4e, + 0xcb4e, 0xcb4e, 0xcb7b, 0xcb4e, 0xcb4e, 0xcb4e, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x908c, 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, 0x2009, 0x0041, - 0x009e, 0x0804, 0xcc1b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, - 0x8398, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130, - 0x080c, 0x8398, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x080c, 0xd454, + 0x009e, 0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, + 0x83c0, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130, + 0x080c, 0x83c0, 0x080c, 0x9be7, 0x009e, 0x0005, 0x080c, 0xd476, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, - 0x0036, 0x080c, 0x88a9, 0x080c, 0x890e, 0x6014, 0x0096, 0x2048, + 0x0036, 0x080c, 0x88d1, 0x080c, 0x8936, 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, 0xd1fc, 0x6018, 0x9005, 0x1128, 0x2001, + 0x2019, 0x0004, 0x080c, 0xd21e, 0x6018, 0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, - 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xcbaa, 0xcbaa, - 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbac, 0xcbaa, - 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, - 0xcbaa, 0xcbf7, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa834, + 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xcbca, 0xcbca, + 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbcc, 0xcbca, + 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, + 0xcbca, 0xcc17, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, - 0x0804, 0xcc1b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8398, + 0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x83c0, 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, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, - 0x839a, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, - 0xd0f4, 0x0128, 0x080c, 0x1595, 0x1904, 0xcbac, 0x0005, 0x6014, + 0x83c2, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, + 0xd0f4, 0x0128, 0x080c, 0x1595, 0x1904, 0xcbcc, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, - 0x1595, 0x1904, 0xcbac, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, + 0x1595, 0x1904, 0xcbcc, 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, 0x0d65, 0x6024, 0xd0dc, - 0x090c, 0x0d65, 0x0005, 0xcc3e, 0xcc4a, 0xcc56, 0xcc62, 0xcc3e, - 0xcc3e, 0xcc3e, 0xcc3e, 0xcc45, 0xcc40, 0xcc40, 0xcc3e, 0xcc3e, - 0xcc3e, 0xcc3e, 0xcc40, 0xcc3e, 0xcc40, 0xcc3e, 0x080c, 0x0d65, + 0x090c, 0x0d65, 0x0005, 0xcc5e, 0xcc6a, 0xcc76, 0xcc82, 0xcc5e, + 0xcc5e, 0xcc5e, 0xcc5e, 0xcc65, 0xcc60, 0xcc60, 0xcc5e, 0xcc5e, + 0xcc5e, 0xcc5e, 0xcc60, 0xcc5e, 0xcc60, 0xcc5e, 0x080c, 0x0d65, 0x6024, 0xd0dc, 0x090c, 0x0d65, 0x0005, 0x6014, 0x9005, 0x190c, 0x0d65, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, - 0x2009, 0xa022, 0x080c, 0x848b, 0x012e, 0x0005, 0x6003, 0x0004, - 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, 0x84a9, + 0x2009, 0xa022, 0x080c, 0x84b3, 0x012e, 0x0005, 0x6003, 0x0004, + 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, 0x84d1, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, 0x1aa5, 0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, 0xd0cc, 0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, 0x918d, 0xb035, - 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x84f0, 0x012e, + 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x8518, 0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, - 0x0005, 0xcca9, 0xccab, 0xccc0, 0xccda, 0xcca9, 0xcca9, 0xcca9, - 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, - 0xcca9, 0x080c, 0x0d65, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0510, + 0x0005, 0xccc9, 0xcccb, 0xcce0, 0xccfa, 0xccc9, 0xccc9, 0xccc9, + 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, + 0xccc9, 0x080c, 0x0d65, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001, 0x6106, - 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x84a9, 0x0470, + 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001, 0x080c, - 0x84a9, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, - 0xd1fc, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, + 0x84d1, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, + 0xd21e, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x080c, - 0x1aa5, 0x6144, 0x918d, 0xa035, 0x080c, 0x84f0, 0x0005, 0x080c, - 0x884c, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd4f8, - 0x0036, 0x2019, 0x0029, 0x080c, 0xd1fc, 0x003e, 0x009e, 0x080c, - 0x9c06, 0x080c, 0x890e, 0x0005, 0x080c, 0x88a9, 0x6114, 0x81ff, - 0x0158, 0x0096, 0x2148, 0x080c, 0xd4f8, 0x0036, 0x2019, 0x0029, - 0x080c, 0xd1fc, 0x003e, 0x009e, 0x080c, 0x9c06, 0x0005, 0x9182, - 0x0085, 0x0002, 0xcd29, 0xcd27, 0xcd27, 0xcd35, 0xcd27, 0xcd27, - 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0x080c, + 0x1aa5, 0x6144, 0x918d, 0xa035, 0x080c, 0x8518, 0x0005, 0x080c, + 0x8874, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd51a, + 0x0036, 0x2019, 0x0029, 0x080c, 0xd21e, 0x003e, 0x009e, 0x080c, + 0x9c21, 0x080c, 0x8936, 0x0005, 0x080c, 0x88d1, 0x6114, 0x81ff, + 0x0158, 0x0096, 0x2148, 0x080c, 0xd51a, 0x0036, 0x2019, 0x0029, + 0x080c, 0xd21e, 0x003e, 0x009e, 0x080c, 0x9c21, 0x0005, 0x9182, + 0x0085, 0x0002, 0xcd49, 0xcd47, 0xcd47, 0xcd55, 0xcd47, 0xcd47, + 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0x080c, 0x0d65, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, - 0x8020, 0x080c, 0x84a9, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, - 0xd44b, 0x0118, 0x080c, 0x9bcc, 0x0440, 0x2071, 0x0260, 0x7224, + 0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, + 0xd46d, 0x0118, 0x080c, 0x9be7, 0x0440, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, - 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0x9ef8, - 0x7220, 0x080c, 0xd092, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, + 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0x9f13, + 0x7220, 0x080c, 0xd0b4, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, - 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00ee, 0x002e, 0x0005, + 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65, 0x9082, 0x0085, 0x00a2, 0x9186, - 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9c87, 0x0050, - 0x2001, 0x0007, 0x080c, 0x61e6, 0x080c, 0x884c, 0x080c, 0x9c06, - 0x080c, 0x890e, 0x0005, 0xcd98, 0xcd9a, 0xcd9a, 0xcd98, 0xcd98, - 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, - 0x080c, 0x0d65, 0x080c, 0x9c06, 0x080c, 0x890e, 0x0005, 0x9182, + 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ca2, 0x0050, + 0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21, + 0x080c, 0x8936, 0x0005, 0xcdb8, 0xcdba, 0xcdba, 0xcdb8, 0xcdb8, + 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, + 0x080c, 0x0d65, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d65, 0x9182, 0x0092, 0x1a0c, 0x0d65, 0x9182, - 0x0085, 0x0002, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb9, 0xcdb7, 0xcdb7, - 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0x080c, + 0x0085, 0x0002, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd9, 0xcdd7, 0xcdd7, + 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0x080c, 0x0d65, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, - 0x9186, 0x0027, 0x0118, 0x080c, 0x9c87, 0x0020, 0x080c, 0x884c, - 0x080c, 0x9c06, 0x0005, 0x0036, 0x080c, 0xd4ac, 0x604b, 0x0000, + 0x9186, 0x0027, 0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874, + 0x080c, 0x9c21, 0x0005, 0x0036, 0x080c, 0xd4ce, 0x604b, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, 0x0382, 0x2004, - 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, 0x98ad, - 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x9367, 0x009e, 0x008e, - 0x1550, 0x0076, 0x2c38, 0x080c, 0x9412, 0x007e, 0x1520, 0x6000, + 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, 0x98c8, + 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, + 0x1550, 0x0076, 0x2c38, 0x080c, 0x942d, 0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096, - 0x601c, 0xd084, 0x0140, 0x080c, 0xd4ac, 0x080c, 0xbf5e, 0x080c, - 0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0110, - 0x080c, 0xd1fc, 0x009e, 0x6017, 0x0000, 0x080c, 0xd4ac, 0x6023, - 0x0007, 0x080c, 0xbf5e, 0x000e, 0x9086, 0x0003, 0x0110, 0x080c, - 0x98c9, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, - 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x2424, 0x15d8, - 0x0016, 0x00c6, 0x080c, 0x6269, 0x15a0, 0x001e, 0x00c6, 0x2160, - 0x080c, 0xbf5b, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, 0x98ad, - 0x2019, 0x0029, 0x080c, 0x94d9, 0x080c, 0x8613, 0x0076, 0x903e, - 0x080c, 0x8502, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xcfa6, - 0x007e, 0x080c, 0x98c9, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, + 0x601c, 0xd084, 0x0140, 0x080c, 0xd4ce, 0x080c, 0xbf79, 0x080c, + 0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb847, 0x0110, + 0x080c, 0xd21e, 0x009e, 0x6017, 0x0000, 0x080c, 0xd4ce, 0x6023, + 0x0007, 0x080c, 0xbf79, 0x000e, 0x9086, 0x0003, 0x0110, 0x080c, + 0x98e4, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, + 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x2424, 0x15e8, + 0x0016, 0x00c6, 0x080c, 0x6270, 0x15b0, 0x001e, 0x00c6, 0x2160, + 0x080c, 0xbf76, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, 0x98c8, + 0x2019, 0x0029, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e, + 0x080c, 0x852a, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xcfc8, + 0x007e, 0x080c, 0x98e4, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, - 0x30d5, 0x002e, 0x001e, 0x080c, 0x5cef, 0xbe12, 0xbd16, 0x9006, - 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, - 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104, - 0x9086, 0x0074, 0x1904, 0xceca, 0x2069, 0x0260, 0x6944, 0x9182, - 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xcec7, 0x2001, - 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb884, 0x9005, - 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, - 0x080c, 0xd560, 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, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, - 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6278, - 0x0804, 0xcf35, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, - 0x2019, 0x000a, 0x080c, 0xabc4, 0x009e, 0x15c0, 0x2011, 0x027a, - 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4, - 0x009e, 0x1560, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, - 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd251, 0xb800, - 0xc0e5, 0xb802, 0x080c, 0x98ad, 0x2019, 0x0029, 0x080c, 0x8613, - 0x0076, 0x2039, 0x0000, 0x080c, 0x8502, 0x2c08, 0x080c, 0xcfa6, - 0x007e, 0x080c, 0x98c9, 0x2001, 0x0007, 0x080c, 0x61e6, 0x2001, - 0x0007, 0x080c, 0x61ba, 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, 0x2424, 0x11d0, 0x080c, 0x6269, - 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, - 0x000a, 0x080c, 0xabc4, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, - 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4, 0x009e, - 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, - 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204, - 0x8211, 0x220c, 0x080c, 0x2424, 0x11d0, 0x080c, 0x6269, 0x11b8, - 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, - 0x080c, 0xabc4, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, - 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4, 0x009e, 0x015e, - 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, - 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, - 0x8000, 0x080c, 0x990b, 0x0106, 0x190c, 0x98ad, 0x2740, 0x2029, - 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, - 0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1b02, - 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd047, 0x0018, 0x9606, - 0x0904, 0xd047, 0x2100, 0x9c06, 0x0904, 0xd03e, 0x080c, 0xd292, - 0x1904, 0xd03e, 0x080c, 0xd57d, 0x0904, 0xd03e, 0x080c, 0xd282, - 0x0904, 0xd03e, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x317a, - 0x0904, 0xd066, 0x6004, 0x9086, 0x0000, 0x1904, 0xd066, 0x9786, - 0x0004, 0x0904, 0xd066, 0x9786, 0x0007, 0x0904, 0xd03e, 0x2500, - 0x9c06, 0x0904, 0xd03e, 0x2400, 0x9c06, 0x0904, 0xd03e, 0x88ff, - 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff, 0x6000, - 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1914, 0x001e, 0x9786, - 0x000a, 0x0148, 0x080c, 0xba41, 0x1130, 0x080c, 0xa574, 0x009e, - 0x080c, 0x9c06, 0x0418, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01d8, - 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, - 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877, - 0x0000, 0x080c, 0xd4f8, 0x0016, 0x080c, 0xbb2a, 0x080c, 0x6983, - 0x001e, 0x080c, 0xba1b, 0x009e, 0x080c, 0x9c06, 0x9ce0, 0x001c, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, 0xcfbf, 0x010e, - 0x190c, 0x98c9, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, - 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, - 0x0005, 0x0128, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x08e0, 0x009e, - 0x08e8, 0x9786, 0x000a, 0x0908, 0x0804, 0xd023, 0x81ff, 0x09b0, - 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, - 0x2004, 0x9086, 0x002d, 0x1950, 0x6000, 0x9086, 0x0002, 0x1930, - 0x080c, 0xba30, 0x0130, 0x080c, 0xba41, 0x1900, 0x080c, 0xa574, - 0x0038, 0x080c, 0x3034, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574, - 0x080c, 0x9c06, 0x0804, 0xd03e, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, - 0x080c, 0xd223, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, - 0x00ee, 0x00ce, 0x0005, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, - 0xd0b1, 0xd0b3, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0x9c06, 0x9c06, - 0xd0b1, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, - 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd251, - 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xcdd9, 0x003e, 0x9085, - 0x0001, 0x0005, 0x0096, 0x080c, 0xb82c, 0x0140, 0x6014, 0x904d, - 0x080c, 0xb437, 0x687b, 0x0005, 0x080c, 0x698f, 0x009e, 0x080c, - 0x9c06, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x61a6, - 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, - 0x2011, 0x0276, 0x080c, 0xabb0, 0x003e, 0x002e, 0x001e, 0x015e, - 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, - 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079, - 0x0001, 0x8fff, 0x0904, 0xd14c, 0x2071, 0x1800, 0x7650, 0x7070, - 0x8001, 0x9602, 0x1a04, 0xd14c, 0x88ff, 0x0120, 0x2800, 0x9c06, - 0x1590, 0x2078, 0x080c, 0xd282, 0x0570, 0x2400, 0x9c06, 0x0558, - 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, - 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106, - 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd4ac, 0x080c, - 0xbf5e, 0x080c, 0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, - 0xb82c, 0x0120, 0x0046, 0x080c, 0xd1fc, 0x004e, 0x009e, 0x080c, - 0x9c06, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, - 0x9c02, 0x1210, 0x0804, 0xd101, 0x9006, 0x012e, 0x00be, 0x006e, - 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, - 0x0ca0, 0x080c, 0x98ad, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, - 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, - 0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c, 0x9412, - 0x080c, 0xd0f2, 0x005e, 0x007e, 0x00be, 0x080c, 0x98c9, 0x0005, - 0x080c, 0x98ad, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, - 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, - 0x6269, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, - 0x0096, 0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c, - 0x9412, 0x080c, 0xd0f2, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, - 0xd185, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, - 0x98c9, 0x0005, 0x080c, 0x98ad, 0x00b6, 0x0076, 0x0056, 0x6210, - 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, - 0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c, 0x9412, - 0x2c20, 0x080c, 0xd0f2, 0x005e, 0x007e, 0x00be, 0x080c, 0x98c9, - 0x0005, 0x080c, 0x98ad, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, - 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, - 0x6269, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, - 0x080c, 0xd490, 0x004e, 0x0096, 0x904e, 0x080c, 0x9367, 0x009e, - 0x008e, 0x903e, 0x080c, 0x9412, 0x080c, 0xd0f2, 0x003e, 0x001e, - 0x8108, 0x1f04, 0xd1d5, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, - 0x00be, 0x080c, 0x98c9, 0x0005, 0x0016, 0x00f6, 0x080c, 0xb82a, - 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, - 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x698f, 0x2f48, - 0x0cb0, 0xab82, 0x080c, 0x698f, 0x00fe, 0x001e, 0x0005, 0xa800, - 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x698f, 0x2f48, 0x0cb8, - 0x080c, 0x698f, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc, - 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, - 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, - 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, - 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, - 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, - 0x0005, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c, 0x0d65, - 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xb81a, - 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, 0x2004, 0x002e, - 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, - 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, 0x9006, 0xa802, - 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 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, 0x1958, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c, - 0x84a9, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, - 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbb71, 0x0030, 0x080c, 0xd4ac, - 0x080c, 0x8398, 0x080c, 0x9bcc, 0x0005, 0x9280, 0x0008, 0x2004, - 0x9084, 0x000f, 0x0002, 0xd2e1, 0xd2e1, 0xd2e1, 0xd2e3, 0xd2e1, - 0xd2e3, 0xd2e3, 0xd2e1, 0xd2e3, 0xd2e1, 0xd2e1, 0xd2e1, 0xd2e1, - 0xd2e1, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, - 0x2004, 0x9084, 0x000f, 0x0002, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, - 0xd2fa, 0xd2fa, 0xd307, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, - 0xd2fa, 0xd2fa, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, - 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x0096, - 0x00c6, 0x2260, 0x080c, 0xd4ac, 0x604b, 0x0000, 0x6024, 0xc0f4, - 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, - 0x0007, 0x1904, 0xd360, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, - 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, - 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00c6, 0x2d60, 0x6100, - 0x9186, 0x0002, 0x1904, 0xd3d7, 0x6014, 0x9005, 0x1138, 0x6000, - 0x9086, 0x0007, 0x190c, 0x0d65, 0x0804, 0xd3d7, 0x2048, 0x080c, - 0xb82c, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, - 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, - 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, - 0x080c, 0xcc1b, 0x0804, 0xd3d7, 0x2009, 0x0041, 0x0804, 0xd3d1, - 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, - 0x00de, 0x009e, 0x0804, 0xd2fa, 0xd0b4, 0x0128, 0xd0fc, 0x090c, - 0x0d65, 0x0804, 0xd31b, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, - 0x8020, 0x080c, 0x84a9, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, - 0x0120, 0x9186, 0x0004, 0x1904, 0xd3d7, 0x6814, 0x2048, 0xa97c, - 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, - 0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, - 0x080c, 0x1022, 0x090c, 0x0d65, 0xa867, 0x010d, 0x9006, 0xa802, - 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, - 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, - 0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006, - 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x698f, - 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xcdd9, 0x2d00, 0x600a, - 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x634a, 0x003e, - 0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, 0xcc1b, 0x00ce, - 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, - 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x884c, - 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xd1fc, - 0x009e, 0x003e, 0x080c, 0x890e, 0x0005, 0x9186, 0x0014, 0x0d70, - 0x080c, 0x9c87, 0x0005, 0xd40a, 0xd408, 0xd408, 0xd408, 0xd408, - 0xd408, 0xd40a, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, - 0x080c, 0x0d65, 0x6003, 0x000c, 0x080c, 0x890e, 0x0005, 0x9182, - 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9c87, - 0x0005, 0xd426, 0xd426, 0xd426, 0xd426, 0xd428, 0xd448, 0xd426, - 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0x080c, 0x0d65, - 0x00d6, 0x2c68, 0x080c, 0x9b76, 0x01b0, 0x6003, 0x0001, 0x6007, - 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, - 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x2009, - 0x8020, 0x080c, 0x84a9, 0x2d60, 0x080c, 0x9bcc, 0x00de, 0x0005, - 0x080c, 0x9bcc, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, - 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873, 0x210c, 0xd1ec, - 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, - 0x2001, 0x1959, 0x2004, 0x604a, 0x2009, 0x1873, 0x210c, 0xd1f4, - 0x1520, 0x00a0, 0x2009, 0x1873, 0x210c, 0xd1f4, 0x0128, 0x6024, - 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1959, 0x200c, 0x2001, - 0x1957, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6, - 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, - 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, - 0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8ac, 0x2060, 0x8cff, 0x0180, - 0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, - 0x8398, 0x080c, 0x9bcc, 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, 0x182b, 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, 0xabc4, 0x009e, 0x1168, 0x2011, 0x0274, - 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, - 0xabc4, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, - 0x2071, 0x1800, 0x080c, 0x5c68, 0x080c, 0x2ddb, 0x00ee, 0x0005, - 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, - 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, - 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, - 0x0126, 0x2091, 0x8000, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, - 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, - 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, - 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xd282, - 0x01b8, 0x080c, 0xd292, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, - 0x0016, 0x080c, 0x1914, 0x001e, 0x080c, 0xba30, 0x1110, 0x080c, - 0x3034, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574, 0x080c, 0x9c06, - 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, - 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, - 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, - 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, - 0x0036, 0x0046, 0x080c, 0xbf46, 0x0168, 0x2019, 0xffff, 0x9005, - 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, - 0x080c, 0x4a6e, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, - 0x1128, 0x080c, 0x94d9, 0x080c, 0x9c06, 0x9006, 0x0005, 0x00e6, - 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7450, - 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, - 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, - 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c60, - 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, - 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, - 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, - 0x7c76 + 0x30dc, 0x002e, 0xbc84, 0x001e, 0x080c, 0x5cf6, 0xbe12, 0xbd16, + 0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, + 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, + 0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xceec, 0x2069, 0x0260, + 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, + 0xcee9, 0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, + 0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, + 0x0001, 0x0648, 0x080c, 0xd582, 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, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, + 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, + 0x080c, 0x627f, 0x0804, 0xcf57, 0x2011, 0x0276, 0x20a9, 0x0004, + 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x15c0, + 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, + 0x080c, 0xabdf, 0x009e, 0x1560, 0x0046, 0x0016, 0xbaa0, 0x2220, + 0x9006, 0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, + 0xd273, 0xb800, 0xc0e5, 0xb802, 0x080c, 0x98c8, 0x2019, 0x0029, + 0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x2c08, + 0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x2001, 0x0007, 0x080c, + 0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 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, 0x2424, 0x11d0, + 0x080c, 0x6270, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, + 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011, + 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, + 0xabdf, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, + 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11d0, 0x080c, + 0x6270, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011, 0x027a, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabdf, + 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, + 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, + 0x0126, 0x2091, 0x8000, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, + 0x2740, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, + 0x1ddc, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, + 0x9186, 0x1b02, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd069, + 0x0018, 0x9606, 0x0904, 0xd069, 0x2100, 0x9c06, 0x0904, 0xd060, + 0x080c, 0xd2b4, 0x1904, 0xd060, 0x080c, 0xd59f, 0x0904, 0xd060, + 0x080c, 0xd2a4, 0x0904, 0xd060, 0x6720, 0x9786, 0x0001, 0x1148, + 0x080c, 0x3181, 0x0904, 0xd088, 0x6004, 0x9086, 0x0000, 0x1904, + 0xd088, 0x9786, 0x0004, 0x0904, 0xd088, 0x9786, 0x0007, 0x0904, + 0xd060, 0x2500, 0x9c06, 0x0904, 0xd060, 0x2400, 0x9c06, 0x0904, + 0xd060, 0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, + 0xffff, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1914, + 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x080c, + 0xa58f, 0x009e, 0x080c, 0x9c21, 0x0418, 0x6014, 0x2048, 0x080c, + 0xb847, 0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, + 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, + 0xab7a, 0xa877, 0x0000, 0x080c, 0xd51a, 0x0016, 0x080c, 0xbb45, + 0x080c, 0x698a, 0x001e, 0x080c, 0xba36, 0x009e, 0x080c, 0x9c21, + 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, + 0xcfe1, 0x010e, 0x190c, 0x98e4, 0x012e, 0x002e, 0x004e, 0x005e, + 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, + 0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd51a, 0x080c, 0xd21e, + 0x08e0, 0x009e, 0x08e8, 0x9786, 0x000a, 0x0908, 0x0804, 0xd045, + 0x81ff, 0x09b0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, + 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1950, 0x6000, 0x9086, + 0x0002, 0x1930, 0x080c, 0xba4b, 0x0130, 0x080c, 0xba5c, 0x1900, + 0x080c, 0xa58f, 0x0038, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110, + 0x080c, 0xa58f, 0x080c, 0x9c21, 0x0804, 0xd060, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, + 0x2170, 0x9006, 0x080c, 0xd245, 0x001e, 0x0120, 0x6020, 0x9084, + 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xd0d3, 0xd0d3, 0xd0d3, + 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d5, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d3, + 0x9c21, 0x9c21, 0xd0d3, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, + 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, + 0x080c, 0xd273, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xcdf9, + 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xb847, 0x0140, + 0x6014, 0x904d, 0x080c, 0xb452, 0x687b, 0x0005, 0x080c, 0x6996, + 0x009e, 0x080c, 0x9c21, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, + 0x080c, 0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, + 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e, + 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, + 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, + 0x1ddc, 0x2079, 0x0001, 0x8fff, 0x0904, 0xd16e, 0x2071, 0x1800, + 0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xd16e, 0x88ff, 0x0120, + 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xd2a4, 0x0570, 0x2400, + 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, + 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, + 0x605c, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, + 0xd4ce, 0x080c, 0xbf79, 0x080c, 0x1914, 0x6023, 0x0007, 0x6014, + 0x2048, 0x080c, 0xb847, 0x0120, 0x0046, 0x080c, 0xd21e, 0x004e, + 0x009e, 0x080c, 0x9c21, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, + 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, 0xd123, 0x9006, 0x012e, + 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, + 0x98c5, 0x0001, 0x0ca0, 0x080c, 0x98c8, 0x00b6, 0x0076, 0x0056, + 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, + 0x2258, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e, + 0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be, 0x080c, + 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056, 0x0076, + 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, + 0x0036, 0x080c, 0x6270, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, + 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, + 0x903e, 0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x003e, 0x001e, + 0x8108, 0x1f04, 0xd1a7, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, + 0x00be, 0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0076, + 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, + 0x0048, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e, + 0x080c, 0x942d, 0x2c20, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be, + 0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056, + 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, + 0x0036, 0x080c, 0x6270, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, + 0x2021, 0x0001, 0x080c, 0xd4b2, 0x004e, 0x0096, 0x904e, 0x080c, + 0x9382, 0x009e, 0x008e, 0x903e, 0x080c, 0x942d, 0x080c, 0xd114, + 0x003e, 0x001e, 0x8108, 0x1f04, 0xd1f7, 0x015e, 0x00ce, 0x007e, + 0x005e, 0x004e, 0x00be, 0x080c, 0x98e4, 0x0005, 0x0016, 0x00f6, + 0x080c, 0xb845, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, + 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, + 0x6996, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6996, 0x00fe, 0x001e, + 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6996, + 0x2f48, 0x0cb8, 0x080c, 0x6996, 0x0c88, 0x00e6, 0x0046, 0x0036, + 0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, + 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, + 0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, + 0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, + 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, + 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, + 0x090c, 0x0d65, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, + 0x080c, 0xb835, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, + 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, + 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, + 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6996, 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, 0x1958, 0x2004, 0x601a, 0x2009, + 0x8020, 0x080c, 0x84d1, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, + 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbb8c, 0x0030, + 0x080c, 0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x0005, 0x9280, + 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd303, 0xd303, 0xd303, + 0xd305, 0xd303, 0xd305, 0xd305, 0xd303, 0xd305, 0xd303, 0xd303, + 0xd303, 0xd303, 0xd303, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, + 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd31c, 0xd31c, + 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd329, 0xd31c, 0xd31c, 0xd31c, + 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0x6007, 0x003b, 0x602f, 0x0009, + 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, + 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xd4ce, 0x604b, 0x0000, + 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, + 0x2268, 0x9186, 0x0007, 0x1904, 0xd382, 0x6814, 0x9005, 0x0138, + 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, + 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6, + 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xd3f9, 0x6014, 0x9005, + 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0d65, 0x0804, 0xd3f9, + 0x2048, 0x080c, 0xb847, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, + 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, + 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, + 0x2009, 0x0043, 0x080c, 0xcc3b, 0x0804, 0xd3f9, 0x2009, 0x0041, + 0x0804, 0xd3f3, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, + 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xd31c, 0xd0b4, 0x0128, + 0xd0fc, 0x090c, 0x0d65, 0x0804, 0xd33d, 0x6007, 0x003a, 0x6003, + 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6, 0x2d60, 0x6100, + 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd3f9, 0x6814, + 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, + 0xa982, 0x00f6, 0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0042, + 0x04d0, 0x0036, 0x080c, 0x1022, 0x090c, 0x0d65, 0xa867, 0x010d, + 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, + 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, + 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, + 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, + 0x080c, 0x6996, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xcdf9, + 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, + 0x634a, 0x003e, 0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, + 0xcc3b, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, + 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, + 0x080c, 0x8874, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, + 0x080c, 0xd21e, 0x009e, 0x003e, 0x080c, 0x8936, 0x0005, 0x9186, + 0x0014, 0x0d70, 0x080c, 0x9ca2, 0x0005, 0xd42c, 0xd42a, 0xd42a, + 0xd42a, 0xd42a, 0xd42a, 0xd42c, 0xd42a, 0xd42a, 0xd42a, 0xd42a, + 0xd42a, 0xd42a, 0x080c, 0x0d65, 0x6003, 0x000c, 0x080c, 0x8936, + 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, + 0x080c, 0x9ca2, 0x0005, 0xd448, 0xd448, 0xd448, 0xd448, 0xd44a, + 0xd46a, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, + 0x080c, 0x0d65, 0x00d6, 0x2c68, 0x080c, 0x9b91, 0x01b0, 0x6003, + 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, + 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, + 0x0004, 0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x080c, 0x9be7, + 0x00de, 0x0005, 0x080c, 0x9be7, 0x0005, 0x00e6, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873, + 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, + 0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x604a, 0x2009, 0x1873, + 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1873, 0x210c, 0xd1f4, + 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1959, + 0x200c, 0x2001, 0x1957, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, + 0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104, 0x9005, + 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, + 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8ac, 0x2060, + 0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, + 0x2072, 0x080c, 0x83c0, 0x080c, 0x9be7, 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, 0x182b, 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, 0xabdf, 0x009e, 0x1168, + 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, + 0x0006, 0x080c, 0xabdf, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, + 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f, 0x080c, 0x2ddb, + 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, + 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, + 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19c4, 0x252c, + 0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7650, + 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, + 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, + 0x080c, 0xd2a4, 0x01b8, 0x080c, 0xd2b4, 0x11a0, 0x6000, 0x9086, + 0x0004, 0x1120, 0x0016, 0x080c, 0x1914, 0x001e, 0x080c, 0xba4b, + 0x1110, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f, + 0x080c, 0x9c21, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, + 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, + 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, + 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, + 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbf61, 0x0168, 0x2019, + 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, + 0x2021, 0x0004, 0x080c, 0x4a75, 0x004e, 0x003e, 0x000e, 0x6004, + 0x9086, 0x0001, 0x1128, 0x080c, 0x94f4, 0x080c, 0x9c21, 0x9006, + 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, + 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, + 0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, + 0x9206, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, + 0x1220, 0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, + 0x00ce, 0x00ee, 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, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, + 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, + 0x4000, 0x8000, 0xfddb }; #ifdef UNIQUE_FW_NAME -unsigned short fw2322flx_length01 = 0xce19; +unsigned short fw2322flx_length01 = 0xce3b; #else -unsigned short risc_code_length01 = 0xce19; +unsigned short risc_code_length01 = 0xce3b; #endif /* diff -Nru a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c --- a/drivers/scsi/qla2xxx/qla_dbg.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/qla_dbg.c Tue May 18 23:38:09 2004 @@ -53,7 +53,7 @@ qla_printk(KERN_WARNING, ha, "Firmware has been previously dumped (%p) -- ignoring " "request...\n", ha->fw_dump); - return; + goto qla2300_fw_dump_failed; } /* Allocate (large) dump buffer. */ @@ -64,7 +64,7 @@ qla_printk(KERN_WARNING, ha, "Unable to allocated memory for firmware dump (%d/%Zd).\n", ha->fw_dump_order, sizeof(struct qla2300_fw_dump)); - return; + goto qla2300_fw_dump_failed; } fw = ha->fw_dump; @@ -360,7 +360,7 @@ if (rval != QLA_SUCCESS) { qla_printk(KERN_WARNING, ha, - "Failed to dump firmware (%d)!!!\n", rval); + "Failed to dump firmware (%x)!!!\n", rval); free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order); ha->fw_dump = NULL; @@ -370,6 +370,7 @@ ha->host_no, ha->fw_dump); } +qla2300_fw_dump_failed: if (!hardware_locked) spin_unlock_irqrestore(&ha->hardware_lock, flags); } @@ -569,7 +570,7 @@ { int rval; uint32_t cnt, timer; - uint32_t risc_address; + uint16_t risc_address; uint16_t mb0, mb2; device_reg_t *reg; @@ -589,7 +590,7 @@ qla_printk(KERN_WARNING, ha, "Firmware has been previously dumped (%p) -- ignoring " "request...\n", ha->fw_dump); - return; + goto qla2100_fw_dump_failed; } /* Allocate (large) dump buffer. */ @@ -600,7 +601,7 @@ qla_printk(KERN_WARNING, ha, "Unable to allocated memory for firmware dump (%d/%Zd).\n", ha->fw_dump_order, sizeof(struct qla2100_fw_dump)); - return; + goto qla2100_fw_dump_failed; } fw = ha->fw_dump; @@ -616,7 +617,6 @@ else rval = QLA_FUNCTION_TIMEOUT; } - if (rval == QLA_SUCCESS) { dmp_reg = (uint16_t *)(reg + 0); for (cnt = 0; cnt < sizeof(fw->pbiu_reg) / 2; cnt++) @@ -694,18 +694,8 @@ for (cnt = 0; cnt < sizeof(fw->fpm_b1_reg) / 2; cnt++) fw->fpm_b1_reg[cnt] = RD_REG_WORD(dmp_reg++); - /* Disable ISP interrupts. */ - WRT_REG_WORD(®->ictrl, 0); - - /* Reset RISC module. */ - WRT_REG_WORD(®->hccr, HCCR_RESET_RISC); - - /* Release RISC module. */ - WRT_REG_WORD(®->hccr, HCCR_RELEASE_RISC); - - /* Insure mailbox registers are free. */ - WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT); - WRT_REG_WORD(®->hccr, HCCR_CLR_HOST_INT); + /* Reset the ISP. */ + WRT_REG_WORD(®->ctrl_status, CSR_ISP_SOFT_RESET); } for (cnt = 30000; RD_MAILBOX_REG(ha, reg, 0) != 0 && @@ -729,7 +719,6 @@ else rval = QLA_FUNCTION_TIMEOUT; } - if (rval == QLA_SUCCESS) { /* Set memory configuration and timing. */ if (IS_QLA2100(ha)) @@ -750,7 +739,7 @@ } for (cnt = 0; cnt < sizeof(fw->risc_ram) / 2 && rval == QLA_SUCCESS; cnt++, risc_address++) { - WRT_MAILBOX_REG(ha, reg, 1, (uint16_t)risc_address); + WRT_MAILBOX_REG(ha, reg, 1, risc_address); WRT_REG_WORD(®->hccr, HCCR_SET_HOST_INT); for (timer = 6000000; timer != 0; timer--) { @@ -783,7 +772,7 @@ if (rval != QLA_SUCCESS) { qla_printk(KERN_WARNING, ha, - "Failed to dump firmware (%d)!!!\n", rval); + "Failed to dump firmware (%x)!!!\n", rval); free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order); ha->fw_dump = NULL; @@ -793,6 +782,7 @@ ha->host_no, ha->fw_dump); } +qla2100_fw_dump_failed: if (!hardware_locked) spin_unlock_irqrestore(&ha->hardware_lock, flags); } diff -Nru a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h --- a/drivers/scsi/qla2xxx/qla_def.h Tue May 18 23:38:07 2004 +++ b/drivers/scsi/qla2xxx/qla_def.h Tue May 18 23:38:07 2004 @@ -154,6 +154,9 @@ #define RD_REG_BYTE(addr) readb(addr) #define RD_REG_WORD(addr) readw(addr) #define RD_REG_DWORD(addr) readl(addr) +#define RD_REG_BYTE_RELAXED(addr) readb_relaxed(addr) +#define RD_REG_WORD_RELAXED(addr) readw_relaxed(addr) +#define RD_REG_DWORD_RELAXED(addr) readl_relaxed(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) @@ -209,20 +212,11 @@ #define MAX_OUTSTANDING_COMMANDS 1024 /* ISP request and response entry counts (37-65535) */ -#define REQUEST_ENTRY_CNT 2048 /* Number of request entries. */ +#define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ +#define REQUEST_ENTRY_CNT_2200 2048 /* Number of request entries. */ #define RESPONSE_ENTRY_CNT_2100 64 /* Number of response entries.*/ #define RESPONSE_ENTRY_CNT_2300 512 /* Number of response entries.*/ -/* Calculations for SG segments */ -#define SEGS_PER_REQUEST_32 3 -#define SEGS_PER_CONT_32 7 -#define SG_SEGMENTS_32 (SEGS_PER_REQUEST_32 + \ - (SEGS_PER_CONT_32 * (REQUEST_ENTRY_CNT - 2))) -#define SEGS_PER_REQUEST_64 2 -#define SEGS_PER_CONT_64 5 -#define SG_SEGMENTS_64 (SEGS_PER_REQUEST_64 + \ - (SEGS_PER_CONT_64 * (REQUEST_ENTRY_CNT - 2))) - /* * SCSI Request Block */ @@ -294,7 +288,8 @@ #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_IOCTL BIT_10 /* IOCTL command. */ +#define SRB_TAPE BIT_11 /* FCP2 (Tape) command. */ /* * SRB state definitions @@ -1931,10 +1926,6 @@ #define RFT_ID_SNS_CMD_SIZE 60 #define RFT_ID_SNS_DATA_SIZE 16 -#define RFF_ID_SNS_SCMD_LEN 8 -#define RFF_ID_SNS_CMD_SIZE 32 -#define RFF_ID_SNS_DATA_SIZE 16 - #define RNN_ID_SNS_SCMD_LEN 10 #define RNN_ID_SNS_CMD_SIZE 36 #define RNN_ID_SNS_DATA_SIZE 16 @@ -1970,7 +1961,6 @@ } cmd; uint8_t rft_data[RFT_ID_SNS_DATA_SIZE]; - uint8_t rff_data[RFF_ID_SNS_DATA_SIZE]; uint8_t rnn_data[RNN_ID_SNS_DATA_SIZE]; uint8_t gan_data[GA_NXT_SNS_DATA_SIZE]; uint8_t gid_data[GID_PT_SNS_DATA_SIZE]; @@ -2123,6 +2113,7 @@ request_t *request_ring_ptr; /* Current address. */ uint16_t req_ring_index; /* Current index. */ uint16_t req_q_cnt; /* Number of available entries. */ + uint16_t request_q_length; dma_addr_t response_dma; /* Physical address. */ response_t *response_ring; /* Base virtual address */ @@ -2340,8 +2331,6 @@ uint8_t node_name[WWN_SIZE]; uint8_t nvram_version; - uint8_t optrom_major; - uint8_t optrom_minor; uint32_t isp_abort_cnt; /* Adapter I/O statistics for failover */ diff -Nru a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h --- a/drivers/scsi/qla2xxx/qla_gbl.h Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/qla_gbl.h Tue May 18 23:38:09 2004 @@ -198,7 +198,7 @@ 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, link_stat_t *, uint16_t *); +qla2x00_get_link_status(scsi_qla_host_t *, uint16_t, link_stat_t *, uint16_t *); extern int qla2x00_lip_reset(scsi_qla_host_t *); @@ -255,14 +255,6 @@ extern void qla2x00_unlock_nvram_access(scsi_qla_host_t *); extern uint16_t qla2x00_get_nvram_word(scsi_qla_host_t *, uint32_t); extern void qla2x00_write_nvram_word(scsi_qla_host_t *, uint32_t, uint16_t); -extern void qla2x00_flash_enable(scsi_qla_host_t *); -extern void qla2x00_flash_disable(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_dbg.c source file. */ diff -Nru a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c --- a/drivers/scsi/qla2xxx/qla_gs.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/qla2xxx/qla_gs.c Tue May 18 23:38:06 2004 @@ -34,7 +34,6 @@ static int qla2x00_sns_gpn_id(scsi_qla_host_t *, sw_info_t *); static int qla2x00_sns_gnn_id(scsi_qla_host_t *, sw_info_t *); static int qla2x00_sns_rft_id(scsi_qla_host_t *); -static int qla2x00_sns_rff_id(scsi_qla_host_t *); static int qla2x00_sns_rnn_id(scsi_qla_host_t *); /** @@ -113,7 +112,7 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_ga_nxt(ha, fcport)); } @@ -201,7 +200,7 @@ struct ct_sns_gid_pt_data *gid_data; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_gid_pt(ha, list)); } @@ -278,7 +277,7 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_gpn_id(ha, list)); } @@ -343,7 +342,7 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_gnn_id(ha, list)); } @@ -422,7 +421,7 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_rft_id(ha)); } @@ -479,8 +478,10 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { - return (qla2x00_sns_rff_id(ha)); + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { + DEBUG2(printk("scsi(%ld): RFF_ID call unsupported on " + "ISP2100/ISP2200.\n", ha->host_no)); + return (QLA_SUCCESS); } /* Issue RFF_ID */ @@ -536,7 +537,7 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { return (qla2x00_sns_rnn_id(ha)); } @@ -595,9 +596,9 @@ struct ct_sns_req *ct_req; struct ct_sns_rsp *ct_rsp; - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { DEBUG2(printk("scsi(%ld): RSNN_ID call unsupported on " - "ISP2200.\n", ha->host_no)); + "ISP2100/ISP2200.\n", ha->host_no)); return (QLA_SUCCESS); } @@ -997,55 +998,6 @@ rval = QLA_FUNCTION_FAILED; } else { DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n", - ha->host_no)); - } - - return (rval); -} - -/** - * qla2x00_sns_rff_id() - SNS Register FC-4 Features (RFF_ID) supported by the - * HBA. - * @ha: HA context - * - * This command uses the old Exectute SNS Command mailbox routine. - * - * Returns 0 on success. - */ -static int -qla2x00_sns_rff_id(scsi_qla_host_t *ha) -{ - int rval; - - struct sns_cmd_pkt *sns_cmd; - - /* Issue RFF_ID. */ - /* Prepare SNS command request. */ - sns_cmd = qla2x00_prep_sns_cmd(ha, RFF_ID_CMD, RFF_ID_SNS_SCMD_LEN, - RFF_ID_SNS_DATA_SIZE); - - /* Prepare SNS command arguments -- port_id, FC-4 feature, FC-4 type */ - sns_cmd->p.cmd.param[0] = ha->d_id.b.al_pa; - sns_cmd->p.cmd.param[1] = ha->d_id.b.area; - sns_cmd->p.cmd.param[2] = ha->d_id.b.domain; - - sns_cmd->p.cmd.param[6] = 0x08; /* SCSI - FCP */ - - /* Execute SNS command. */ - rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, RFF_ID_SNS_CMD_SIZE / 2, - sizeof(struct sns_cmd_pkt)); - if (rval != QLA_SUCCESS) { - /*EMPTY*/ - DEBUG2_3(printk("scsi(%ld): RFF_ID Send SNS failed (%d).\n", - ha->host_no, rval)); - } else if (sns_cmd->p.rff_data[8] != 0x80 || - sns_cmd->p.rff_data[9] != 0x02) { - DEBUG2_3(printk("scsi(%ld): RFF_ID failed, rejected request, " - "rff_rsp:\n", ha->host_no)); - DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rff_data, 16)); - rval = QLA_FUNCTION_FAILED; - } else { - DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n", ha->host_no)); } diff -Nru a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c --- a/drivers/scsi/qla2xxx/qla_init.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/qla_init.c Tue May 18 23:38:09 2004 @@ -102,9 +102,9 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha) { int rval; - uint8_t isp_init = 0; uint8_t restart_risc = 0; uint8_t retry; + uint32_t wait_time; /* Clear adapter flags. */ ha->flags.online = FALSE; @@ -133,14 +133,9 @@ /* Initialize target map database. */ qla2x00_init_tgt_map(ha); - /* Get Flash Version */ - qla2x00_get_flash_version(ha); - qla_printk(KERN_INFO, ha, "Configure NVRAM parameters...\n"); qla2x00_nvram_config(ha); - ha->retry_count = ql2xretrycount; - qla_printk(KERN_INFO, ha, "Verifying loaded RISC code...\n"); #if 0 @@ -161,7 +156,6 @@ */ do { restart_risc = 0; - isp_init = 0; /* If firmware needs to be loaded */ if (qla2x00_isp_firmware(ha) != QLA_SUCCESS) { @@ -180,21 +174,22 @@ * value OR a minimum of 4 seconds OR If no * cable, only 5 seconds. */ - if (!qla2x00_fw_ready(ha)) { + rval = qla2x00_fw_ready(ha); + if (rval == QLA_SUCCESS) { clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags); /* - * Go setup flash database devices with proper - * Loop ID's. + * Wait at most MAX_TARGET RSCNs for a stable + * link. */ + wait_time = 256; do { clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags); rval = qla2x00_configure_loop(ha); - if (test_bit(ISP_ABORT_NEEDED, + if (test_and_clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) { - restart_risc = 1; break; } @@ -209,20 +204,22 @@ LOOP_DOWN && retry--) { goto check_fw_ready_again; } + wait_time--; } while (!atomic_read(&ha->loop_down_timer) && retry && - (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))); + wait_time && + (test_bit(LOOP_RESYNC_NEEDED, + &ha->dpc_flags))); + + if (wait_time == 0) + rval = QLA_FUNCTION_FAILED; + if (ha->mem_err) + restart_risc = 1; } - - if (ha->mem_err) { - restart_risc = 1; - } - isp_init = 1; - } } while (restart_risc && retry--); - if (isp_init) { + if (rval == QLA_SUCCESS) { /* Retrieve firmware information */ qla2x00_get_fw_version(ha, &ha->fw_major_version, &ha->fw_minor_version, &ha->fw_subminor_version, @@ -234,9 +231,7 @@ ha->marker_needed = 0; ha->flags.online = TRUE; - } - - if (rval) { + } else { DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__)); } @@ -290,7 +285,7 @@ /* PCI Specification Revision 2.3 changes */ if (IS_QLA2322(ha) || IS_QLA6322(ha)) /* Command Register - Reset Interrupt Disable. */ - w &= ~BIT_10; + w &= ~PCI_COMMAND_INTX_DISABLE; /* * If this is a 2300 card and not 2312, reset the @@ -603,10 +598,11 @@ ha->product_id[3] = mb[4]; /* Adjust fw RISC transfer size */ - if (REQUEST_ENTRY_CNT > 1024) + if (ha->request_q_length > 1024) ha->fw_transfer_size = REQUEST_ENTRY_SIZE * 1024; else - ha->fw_transfer_size = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT; + ha->fw_transfer_size = REQUEST_ENTRY_SIZE * + ha->request_q_length; if (IS_QLA2200(ha) && RD_MAILBOX_REG(ha, reg, 7) == QLA2200A_RISC_ROM_VER) { @@ -774,6 +770,54 @@ } /** + * qla2x00_update_fw_options() - Read and process firmware options. + * @ha: HA context + * + * Returns 0 on success. + */ +static void +qla2x00_update_fw_options(scsi_qla_host_t *ha) +{ + /* Setup seriallink options */ + uint16_t swing, emphasis; + + memset(ha->fw_options, 0, sizeof(ha->fw_options)); + qla2x00_get_fw_options(ha, ha->fw_options); + + if (IS_QLA2100(ha) || IS_QLA2200(ha)) + return; + + /* Serial Link options. */ + 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))); + + ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; + if (ha->fw_seriallink_options[1] & BIT_2) + ha->fw_options[1] |= FO1_SET_EMPHASIS_SWING; + + /* 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; + ha->fw_options[10] = (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); + ha->fw_options[11] = (emphasis << 14) | (swing << 8) | 0x3; + + /* FCP2 options. */ + /* Return command IOCBs without waiting for an ABTS to complete. */ + ha->fw_options[3] |= BIT_13; + + /* Update Serial Link options. */ + qla2x00_set_fw_options(ha, ha->fw_options); +} + +/** * qla2x00_init_rings() - Initializes firmware. * @ha: HA context * @@ -805,7 +849,7 @@ /* Initialize firmware. */ ha->request_ring_ptr = ha->request_ring; ha->req_ring_index = 0; - ha->req_q_cnt = REQUEST_ENTRY_CNT; + ha->req_q_cnt = ha->request_q_length; ha->response_ring_ptr = ha->response_ring; ha->rsp_ring_index = 0; @@ -826,35 +870,8 @@ DEBUG2_3(printk("scsi(%ld): Init firmware **** FAILED ****.\n", ha->host_no)); } else { - /* Setup seriallink options */ - uint16_t swing, emphasis; - - 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))); - - memset(ha->fw_options, 0, sizeof(ha->fw_options)); - qla2x00_get_fw_options(ha, ha->fw_options); - - ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; - if (ha->fw_seriallink_options[1] & BIT_2) - ha->fw_options[1] |= FO1_SET_EMPHASIS_SWING; - - /* 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; - ha->fw_options[10] = (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); - ha->fw_options[11] = (emphasis << 14) | (swing << 8) | 0x3; - - qla2x00_set_fw_options(ha, ha->fw_options); + /* Update any ISP specific firmware options. */ + qla2x00_update_fw_options(ha); DEBUG3(printk("scsi(%ld): Init firmware -- success.\n", ha->host_no)); @@ -946,7 +963,7 @@ break; /* Delay for a while */ - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ / 2); DEBUG3(printk("scsi(%ld): fw_state=%x curr time=%lx.\n", @@ -1005,10 +1022,6 @@ ha->loop_id = loop_id; - /* Make sure 2100 only has loop, in case of any firmware bug. */ - if (IS_QLA2100(ha)) - topo = 0; - /* initialize */ ha->min_external_loopid = SNS_FIRST_LOOP_ID; ha->operating_mode = LOOP; @@ -1381,7 +1394,7 @@ */ 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->request_q_length = cpu_to_le16(ha->request_q_length); icb->response_q_length = cpu_to_le16(ha->response_q_length); icb->request_q_address[0] = cpu_to_le32(LSD(ha->request_dma)); icb->request_q_address[1] = cpu_to_le32(MSD(ha->request_dma)); @@ -1496,24 +1509,24 @@ qla2x00_configure_loop(scsi_qla_host_t *ha) { int rval; - uint8_t rval1 = 0; unsigned long flags, save_flags; rval = QLA_SUCCESS; /* Get Initiator ID */ - if (qla2x00_configure_hba(ha)) { - DEBUG(printk("scsi(%ld): Unable to configure HBA.\n", - ha->host_no)); - return (QLA_FUNCTION_FAILED); + if (test_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags)) { + rval = qla2x00_configure_hba(ha); + if (rval != QLA_SUCCESS) { + DEBUG(printk("scsi(%ld): Unable to configure HBA.\n", + ha->host_no)); + return (rval); + } } 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. @@ -1544,50 +1557,32 @@ set_bit(LOCAL_LOOP_UPDATE, &flags); } - do { - if (test_bit(LOCAL_LOOP_UPDATE, &flags)) { - rval = rval | qla2x00_configure_local_loop(ha); - } - - if (test_bit(RSCN_UPDATE, &flags)) { - rval1 = qla2x00_configure_fabric(ha); - if ((rval1 & BIT_0) && ha->sns_retry_cnt < 8) { - ha->sns_retry_cnt++; - set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags); - } + if (test_bit(LOCAL_LOOP_UPDATE, &flags)) { + if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) { + rval = QLA_FUNCTION_FAILED; + } else { + rval = qla2x00_configure_local_loop(ha); } + } - /* Isolate error status. */ - if (rval & BIT_0) { - rval = 1; + if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) { + if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) { + rval = QLA_FUNCTION_FAILED; } else { - rval = QLA_SUCCESS; + rval = qla2x00_configure_fabric(ha); } + } - } while (rval != QLA_SUCCESS); - - if (!atomic_read(&ha->loop_down_timer) && - !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) { - - qla2x00_config_os(ha); - - /* If we found all devices then go ready */ - if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) { + if (rval == QLA_SUCCESS) { + if (atomic_read(&ha->loop_down_timer) || + test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) { + rval = QLA_FUNCTION_FAILED; + } else { + qla2x00_config_os(ha); atomic_set(&ha->loop_state, LOOP_READY); 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) { @@ -1619,7 +1614,6 @@ * * Returns: * 0 = success. - * BIT_0 = error. */ static int qla2x00_configure_local_loop(scsi_qla_host_t *ha) @@ -1644,19 +1638,9 @@ uint16_t loop_id; uint8_t domain, area, al_pa; - rval = QLA_SUCCESS; found_devs = 0; new_fcport = NULL; - /* - * 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 (rval); - } - entries = MAX_FIBRE_DEVICES; id_list = pci_alloc_consistent(ha->pdev, MAX_ID_LIST_SIZE, &id_list_dma); @@ -1668,7 +1652,7 @@ "Memory Allocation failed - port_list"); ha->mem_err++; - return (BIT_0); + return (QLA_MEMORY_ALLOC_FAILED); } memset(id_list, 0, MAX_ID_LIST_SIZE); @@ -1677,8 +1661,7 @@ /* Get list of logged in devices. */ rval = qla2x00_get_id_list(ha, id_list, id_list_dma, &entries); - if (rval) { - rval = BIT_0; + if (rval != QLA_SUCCESS) { goto cleanup_allocation; } @@ -1690,7 +1673,7 @@ /* Allocate temporary fcport for any new fcports discovered. */ new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL); if (new_fcport == NULL) { - rval = BIT_0; + rval = QLA_MEMORY_ALLOC_FAILED; goto cleanup_allocation; } new_fcport->flags &= ~FCF_FABRIC_DEVICE; @@ -1783,7 +1766,7 @@ fcport = new_fcport; new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL); if (new_fcport == NULL) { - rval = BIT_0; + rval = QLA_MEMORY_ALLOC_FAILED; goto cleanup_allocation; } new_fcport->flags &= ~FCF_FABRIC_DEVICE; @@ -1800,7 +1783,7 @@ if (new_fcport) kfree(new_fcport); - if (rval & BIT_0) { + if (rval != QLA_SUCCESS) { DEBUG2(printk("scsi(%ld): Configure local loop error exit: " "rval=%x\n", ha->host_no, rval)); } @@ -2339,7 +2322,7 @@ /* Mark devices that need re-synchronization. */ rval2 = qla2x00_device_resync(ha); if (rval2 == QLA_RSCNS_HANDLED) { - /* No, point doing the scan, just continue. */ + /* No point doing the scan, just continue. */ return (QLA_SUCCESS); } do { @@ -2489,7 +2472,6 @@ * * Returns: * 0 = success. - * BIT_0 = error. * * Context: * Kernel context. @@ -3082,6 +3064,7 @@ qla2x00_loop_resync(scsi_qla_host_t *ha) { int rval; + uint32_t wait_time; rval = QLA_SUCCESS; @@ -3090,6 +3073,8 @@ clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags); if (ha->flags.online) { if (!(rval = qla2x00_fw_ready(ha))) { + /* Wait at most MAX_TARGET RSCNs for a stable link. */ + wait_time = 256; do { /* v2.19.05b6 */ atomic_set(&ha->loop_state, LOOP_UPDATE); @@ -3104,12 +3089,13 @@ clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags); qla2x00_configure_loop(ha); - + wait_time--; } while (!atomic_read(&ha->loop_down_timer) && !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) && + wait_time && (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))); } - qla2x00_restart_queues(ha,TRUE); + qla2x00_restart_queues(ha, TRUE); } if (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) { @@ -3150,6 +3136,10 @@ 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_TAPE)) + continue; + /* * When time expire return request back to OS as BUSY */ @@ -3292,6 +3282,7 @@ static uint16_t qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport) { + int found; uint16_t tgt; os_tgt_t *tq; @@ -3300,18 +3291,32 @@ if ((tq = TGT_Q(ha, tgt)) == NULL) continue; - if (ha->binding_type == BIND_BY_PORT_ID && - fcport->d_id.b24 == tq->d_id.b24) { - memcpy(tq->node_name, fcport->node_name, WWN_SIZE); - memcpy(tq->port_name, fcport->port_name, WWN_SIZE); + found = 0; + switch (ha->binding_type) { + case BIND_BY_PORT_ID: + if (fcport->d_id.b24 == tq->d_id.b24) { + memcpy(tq->node_name, fcport->node_name, + WWN_SIZE); + memcpy(tq->port_name, fcport->port_name, + WWN_SIZE); + found++; + } break; - } - - if (memcmp(fcport->port_name, tq->port_name, WWN_SIZE) == 0) { - /* In case of persistent binding, update the WWNN */ - memcpy(tq->node_name, fcport->node_name, WWN_SIZE); + case BIND_BY_PORT_NAME: + if (memcmp(fcport->port_name, tq->port_name, + WWN_SIZE) == 0) { + /* + * In case of persistent binding, update the + * WWNN. + */ + memcpy(tq->node_name, fcport->node_name, + WWN_SIZE); + found++; + } break; } + if (found) + break; } /* TODO: honor the ConfigRequired flag */ @@ -4226,6 +4231,7 @@ uint8_t status = 0; device_reg_t *reg; unsigned long flags = 0; + uint32_t wait_time; /* If firmware needs to be loaded */ if (qla2x00_isp_firmware(ha)) { @@ -4269,11 +4275,15 @@ __func__, status);) ha->flags.online = TRUE; + /* Wait at most MAX_TARGET RSCNs for a stable link. */ + wait_time = 256; do { clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags); qla2x00_configure_loop(ha); + wait_time--; } while (!atomic_read(&ha->loop_down_timer) && !(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) && + wait_time && (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))); } diff -Nru a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c --- a/drivers/scsi/qla2xxx/qla_iocb.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/qla2xxx/qla_iocb.c Tue May 18 23:38:08 2004 @@ -124,7 +124,7 @@ /* Adjust ring index. */ ha->req_ring_index++; - if (ha->req_ring_index == REQUEST_ENTRY_CNT) { + if (ha->req_ring_index == ha->request_q_length) { ha->req_ring_index = 0; ha->request_ring_ptr = ha->request_ring; } else { @@ -153,7 +153,7 @@ /* Adjust ring index. */ ha->req_ring_index++; - if (ha->req_ring_index == REQUEST_ENTRY_CNT) { + if (ha->req_ring_index == ha->request_q_length) { ha->req_ring_index = 0; ha->request_ring_ptr = ha->request_ring; } else { @@ -390,11 +390,11 @@ if (ha->req_q_cnt < (sp->req_cnt + 2)) { /* Calculate number of free request entries */ - cnt = RD_REG_WORD(ISP_REQ_Q_OUT(ha, reg)); + cnt = RD_REG_WORD_RELAXED(ISP_REQ_Q_OUT(ha, 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_q_cnt = ha->request_q_length - (ha->req_ring_index - cnt); } @@ -484,7 +484,7 @@ /* Adjust ring index. */ ha->req_ring_index++; - if (ha->req_ring_index == REQUEST_ENTRY_CNT) { + if (ha->req_ring_index == ha->request_q_length) { ha->req_ring_index = 0; ha->request_ring_ptr = ha->request_ring; } else @@ -499,7 +499,7 @@ /* Set chip new ring index. */ WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index); - RD_REG_WORD(ISP_REQ_Q_IN(ha, reg)); /* PCI Posting. */ + RD_REG_WORD_RELAXED(ISP_REQ_Q_IN(ha, reg)); /* PCI Posting. */ spin_unlock_irqrestore(&ha->hardware_lock, flags); return (QLA_SUCCESS); @@ -588,7 +588,7 @@ 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_q_cnt = ha->request_q_length - (ha->req_ring_index - cnt); } /* If room for request in request ring. */ @@ -658,7 +658,7 @@ 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_q_cnt = ha->request_q_length - (ha->req_ring_index - cnt); } } @@ -740,7 +740,7 @@ /* Adjust ring index. */ ha->req_ring_index++; - if (ha->req_ring_index == REQUEST_ENTRY_CNT) { + if (ha->req_ring_index == ha->request_q_length) { ha->req_ring_index = 0; ha->request_ring_ptr = ha->request_ring; } else @@ -748,5 +748,5 @@ /* Set chip new ring index. */ WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index); - RD_REG_WORD(ISP_REQ_Q_IN(ha, reg)); /* PCI Posting. */ + RD_REG_WORD_RELAXED(ISP_REQ_Q_IN(ha, reg)); /* PCI Posting. */ } diff -Nru a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c --- a/drivers/scsi/qla2xxx/qla_isr.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/qla_isr.c Tue May 18 23:38:09 2004 @@ -165,7 +165,7 @@ break; } WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT); - RD_REG_WORD(®->hccr); + RD_REG_WORD_RELAXED(®->hccr); } } @@ -907,7 +907,7 @@ * If loop is in transient state Report DID_BUS_BUSY */ if ((comp_status != CS_COMPLETE || scsi_status != 0)) { - if (!(sp->flags & SRB_IOCTL) && + if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) && (atomic_read(&ha->loop_down_timer) || atomic_read(&ha->loop_state) != LOOP_READY)) { @@ -986,7 +986,7 @@ if (sp->request_sense_length != 0) ha->status_srb = sp; - if (!(sp->flags & SRB_IOCTL) && + if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) && qla2x00_check_sense(cp, lq) == QLA_SUCCESS) { /* Throw away status_cont if any */ ha->status_srb = NULL; @@ -1053,7 +1053,7 @@ if (sp->request_sense_length != 0) ha->status_srb = sp; - if (!(sp->flags & SRB_IOCTL) && + if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) && (qla2x00_check_sense(cp, lq) == QLA_SUCCESS)) { ha->status_srb = NULL; add_to_scsi_retry_queue(ha, sp); @@ -1137,7 +1137,7 @@ ha->host_no, t, l, cp->serial_number, comp_status, atomic_read(&fcport->state))); - if ((sp->flags & SRB_IOCTL) || + if ((sp->flags & (SRB_IOCTL | SRB_TAPE)) || atomic_read(&fcport->state) == FCS_DEVICE_DEAD) { cp->result = DID_NO_CONNECT << 16; if (atomic_read(&ha->loop_state) == LOOP_DOWN) @@ -1162,7 +1162,7 @@ "scsi(%ld): RESET status detected 0x%x-0x%x.\n", ha->host_no, comp_status, scsi_status)); - if (sp->flags & SRB_IOCTL) { + if (sp->flags & (SRB_IOCTL | SRB_TAPE)) { cp->result = DID_RESET << 16; } else { qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT); diff -Nru a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c --- a/drivers/scsi/qla2xxx/qla_mbx.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/qla2xxx/qla_mbx.c Tue May 18 23:38:07 2004 @@ -279,6 +279,9 @@ DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): " "timeout schedule isp_abort_needed.\n", ha->host_no);) + qla_printk(KERN_WARNING, ha, + "Mailbox command timeout occured. Scheduling ISP " + "abort.\n"); set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); if (ha->dpc_wait && !ha->dpc_active) up(ha->dpc_wait); @@ -290,6 +293,9 @@ "calling abort_isp\n", ha->host_no);) DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): " "timeout calling abort_isp\n", ha->host_no);) + qla_printk(KERN_WARNING, ha, + "Mailbox command timeout occured. Issuing ISP " + "abort.\n"); set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags); clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); @@ -981,7 +987,6 @@ if (atomic_read(&ha->loop_state) == LOOP_DOWN || atomic_read(&fcport->state) == FCS_DEVICE_LOST) { - /* v2.19.8 Ignore abort request if port is down */ return 1; } @@ -1062,6 +1067,9 @@ qla2x00_marker(ha, loop_id, lun, MK_SYNC_ID_LUN); if (rval != QLA_SUCCESS) { + qla_printk(KERN_WARNING, ha, + "Failed Abort Device Mailbox command. Scheduling ISP " + "abort.\n"); set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); if (ha->dpc_wait && !ha->dpc_active) up(ha->dpc_wait); @@ -1598,7 +1606,7 @@ * BIT_1 = mailbox error. */ uint8_t -qla2x00_get_link_status(scsi_qla_host_t *ha, uint8_t loop_id, +qla2x00_get_link_status(scsi_qla_host_t *ha, uint16_t loop_id, link_stat_t *ret_buf, uint16_t *status) { int rval; diff -Nru a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c --- a/drivers/scsi/qla2xxx/qla_os.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qla2xxx/qla_os.c Tue May 18 23:38:09 2004 @@ -168,7 +168,6 @@ .slave_configure = qla2xxx_slave_configure, .this_id = -1, - .can_queue = REQUEST_ENTRY_CNT+128, .cmd_per_lun = 3, .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SG_ALL, @@ -776,10 +775,13 @@ /* Only modify the allowed count if the target is a *non* tape device */ if ((fcport->flags & FCF_TAPE_PRESENT) == 0) { + sp->flags &= ~SRB_TAPE; if (cmd->allowed < ql2xretrycount) { cmd->allowed = ql2xretrycount; } - } + } else + sp->flags |= SRB_TAPE; + DEBUG5(printk("scsi(%ld:%2d:%2d): (queuecmd) queue sp = %p, " "flags=0x%x fo retry=%d, pid=%ld\n", @@ -808,7 +810,7 @@ atomic_read(&ha2->loop_state) == LOOP_DEAD) { /* * Add the command to the done-queue for later failover - * processing + * processing. */ cmd->result = DID_NO_CONNECT << 16; if (atomic_read(&ha2->loop_state) == LOOP_DOWN) @@ -822,7 +824,8 @@ spin_lock_irq(ha->host->host_lock); return (0); } - if (tq && test_bit(TQF_SUSPENDED, &tq->flags)) { + if (tq && test_bit(TQF_SUSPENDED, &tq->flags) && + (sp->flags & SRB_TAPE) == 0) { /* If target suspended put incoming I/O in retry_q. */ qla2x00_extend_timeout(sp->cmd, 10); add_to_scsi_retry_queue(ha, sp); @@ -834,7 +837,7 @@ device_reg_t *reg; reg = ha->iobase; - if (RD_REG_WORD(ISP_RSP_Q_IN(ha, reg)) != ha->rsp_ring_index) { + if (ha->response_ring_ptr->signature != RESPONSE_PROCESSED) { spin_lock_irqsave(&ha->hardware_lock, flags); qla2x00_process_response_queue(ha); spin_unlock_irqrestore(&ha->hardware_lock, flags); @@ -914,7 +917,7 @@ spin_unlock_irq(ha->host->host_lock); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(2*HZ); spin_lock_irq(ha->host->host_lock); @@ -962,7 +965,7 @@ test_bit(ISP_ABORT_RETRY, &ha->dpc_flags)) && time_before(jiffies, wait_online)) { - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ); } if (ha->flags.online == TRUE) @@ -1005,7 +1008,7 @@ atomic_read(&ha->loop_state) == LOOP_DOWN) || test_bit(CFG_ACTIVE, &ha->cfg_flags) || atomic_read(&ha->loop_state) != LOOP_READY) { - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ); if (time_after_eq(jiffies, loop_timeout)) { return_status = QLA_FUNCTION_FAILED; @@ -1783,10 +1786,9 @@ queue_depth = 32; if (sdev->tagged_supported) { -#if defined(MODULE) - if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 256)) + if (ql2xmaxqdepth != 0 && ql2xmaxqdepth <= 0xffffU) queue_depth = ql2xmaxqdepth; -#endif + ql2xmaxqdepth = queue_depth; scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); @@ -1983,19 +1985,24 @@ if (IS_QLA2100(ha)) { ha->max_targets = MAX_TARGETS_2100; ha->mbx_count = MAILBOX_REGISTER_COUNT_2100; + ha->request_q_length = REQUEST_ENTRY_CNT_2100; ha->response_q_length = RESPONSE_ENTRY_CNT_2100; ha->last_loop_id = SNS_LAST_LOOP_ID_2100; + host->sg_tablesize = 32; } else if (IS_QLA2200(ha)) { ha->max_targets = MAX_TARGETS_2200; ha->mbx_count = MAILBOX_REGISTER_COUNT; + ha->request_q_length = REQUEST_ENTRY_CNT_2200; ha->response_q_length = RESPONSE_ENTRY_CNT_2100; ha->last_loop_id = SNS_LAST_LOOP_ID_2100; } else /*if (IS_QLA2300(ha))*/ { ha->max_targets = MAX_TARGETS_2200; ha->mbx_count = MAILBOX_REGISTER_COUNT; + ha->request_q_length = REQUEST_ENTRY_CNT_2200; ha->response_q_length = RESPONSE_ENTRY_CNT_2300; ha->last_loop_id = SNS_LAST_LOOP_ID_2300; } + host->can_queue = ha->request_q_length + 128; /* load the F/W, read paramaters, and init the H/W */ ha->instance = num_hosts; @@ -2020,6 +2027,7 @@ spin_lock_init(&ha->mbx_reg_lock); spin_lock_init(&ha->list_lock); + ha->dpc_pid = -1; init_completion(&ha->dpc_inited); init_completion(&ha->dpc_exited); @@ -2125,8 +2133,8 @@ qla2x00_check_fabric_devices(ha); - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(5); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ/100); } pci_set_drvdata(pdev, ha); @@ -2313,18 +2321,17 @@ char **start, off_t offset, int length, int inout) { struct info_str info; - int i; int retval = -EINVAL; os_lun_t *up; - fc_port_t *fcport; + os_tgt_t *tq; unsigned int t, l; uint32_t tmp_sn; - unsigned long *flags; + uint32_t *flags; uint8_t *loop_state; int found; scsi_qla_host_t *ha; char fw_info[30]; - + DEBUG3(printk(KERN_INFO "Entering proc_info buff_in=%p, offset=0x%lx, length=0x%x\n", buffer, offset, length);) @@ -2390,8 +2397,8 @@ (unsigned long long)ha->response_dma); copy_info(&info, - "Request Queue count = %ld, Response Queue count = %ld\n", - (long)REQUEST_ENTRY_CNT, (long)ha->response_q_length); + "Request Queue count = %d, Response Queue count = %d\n", + ha->request_q_length, ha->response_q_length); copy_info(&info, "Total number of active commands = %ld\n", @@ -2428,7 +2435,7 @@ ha->done_q_cnt, ha->scsi_retry_q_cnt); - flags = (unsigned long *) &ha->flags; + flags = (uint32_t *) &ha->flags; if (atomic_read(&ha->loop_state) == LOOP_DOWN) { loop_state = "DOWN"; @@ -2502,24 +2509,19 @@ ha->init_cb->port_name[7]); /* Print out device port names */ - i = 0; - list_for_each_entry(fcport, &ha->fcports, list) { - if (fcport->port_type != FCT_TARGET) + for (t = 0; t < MAX_FIBRE_DEVICES; t++) { + if ((tq = TGT_Q(ha, t)) == NULL) continue; copy_info(&info, "scsi-qla%d-target-%d=" - "%02x%02x%02x%02x%02x%02x%02x%02x:%02x%02x%02x;\n", - (int)ha->instance, i, - 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->d_id.b.domain, fcport->d_id.b.area, - fcport->d_id.b.al_pa); - i++; + "%02x%02x%02x%02x%02x%02x%02x%02x;\n", + (int)ha->instance, t, + 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]); } - copy_info(&info, "\nSCSI LUN Information:\n"); copy_info(&info, "(Id:Lun) * - indicates lun is not registered with the OS.\n"); @@ -2861,14 +2863,14 @@ * little delay and a retry. */ ha->request_ring = pci_alloc_consistent(ha->pdev, - ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))), + ((ha->request_q_length + 1) * (sizeof(request_t))), &ha->request_dma); if (ha->request_ring == NULL) { qla_printk(KERN_WARNING, ha, "Memory Allocation failed - request_ring\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2882,7 +2884,7 @@ "Memory Allocation failed - response_ring\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2896,7 +2898,7 @@ "Memory Allocation failed - init_cb\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2909,7 +2911,7 @@ "Memory Allocation failed - ioctl_mem\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2921,14 +2923,14 @@ "qla2x00_allocate_sp_pool()\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; } /* Allocate memory for SNS commands */ - if (IS_QLA2200(ha)) { + if (IS_QLA2100(ha) || IS_QLA2200(ha)) { /* Get consistent memory allocated for SNS commands */ ha->sns_cmd = pci_alloc_consistent(ha->pdev, sizeof(struct sns_cmd_pkt), &ha->sns_cmd_dma); @@ -2938,13 +2940,13 @@ "Memory Allocation failed - sns_cmd\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; } memset(ha->sns_cmd, 0, sizeof(struct sns_cmd_pkt)); - } else if (!IS_QLA2100(ha)) { + } else { /* Get consistent memory allocated for MS IOCB */ ha->ms_iocb = pci_alloc_consistent(ha->pdev, sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma); @@ -2954,7 +2956,7 @@ "Memory Allocation failed - ms_iocb\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2973,7 +2975,7 @@ "Memory Allocation failed - ct_sns\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -2990,7 +2992,7 @@ "Memory Allocation failed - iodesc_pd\n"); qla2x00_mem_free(ha); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/10); continue; @@ -3077,7 +3079,7 @@ if (ha->request_ring) { pci_free_consistent(ha->pdev, - ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))), + ((ha->request_q_length + 1) * (sizeof(request_t))), ha->request_ring, ha->request_dma); } @@ -3852,6 +3854,8 @@ DEBUG(printk("scsi(%ld): Loop down - " "aborting ISP.\n", ha->host_no)); + qla_printk(KERN_WARNING, ha, + "Loop down - aborting ISP.\n"); set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); } @@ -3936,8 +3940,8 @@ int processed; scsi_qla_host_t *vis_ha, *dest_ha; struct scsi_cmnd *cmd; - ulong flags; - fc_port_t *fcport; + unsigned long flags, cpu_flags; + fc_port_t *fcport; cmd = sp->cmd; vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata; @@ -4032,6 +4036,64 @@ return; } + 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, cmd->serial_number, sp)); + } else if (sp->state == SRB_SUSPENDED_STATE) { + DEBUG(printk("scsi(%ld): Found SP %p in suspended state " + "- pid %ld:\n", + dest_ha->host_no, 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[ + (unsigned long)sp->cmd->host_scribble]) { + + DEBUG(printk("cmd_timeout: Found in ISP \n")); + + if (sp->flags & SRB_TAPE) { + /* + * We cannot allow the midlayer error handler + * to wakeup and begin the abort process. + * Extend the timer so that the firmware can + * properly return the IOCB. + */ + DEBUG(printk("cmd_timeout: Extending timeout " + "of FCP2 tape command!\n")); + qla2x00_extend_timeout(sp->cmd, + EXTEND_CMD_TIMEOUT); + } + 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); + } 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);) + + qla_printk(KERN_INFO, vis_ha, + "cmd_timeout: LOST command state = 0x%x\n", sp->state); + } + spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags); + DEBUG3(printk("cmd_timeout: Leaving\n");) } @@ -4180,9 +4242,6 @@ spin_lock_irqsave(&ha->hardware_lock,flags); qla2x00_process_response_queue(ha); spin_unlock_irqrestore(&ha->hardware_lock, flags); - - if (!list_empty(&ha->done_queue)) - qla2x00_done(ha); } /* @@ -4261,7 +4320,7 @@ * continues until the LOOP DOWN time expires or the condition * goes away. */ - if (!(sp->flags & SRB_IOCTL) && + if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) && (atomic_read(&fcport->state) != FCS_ONLINE || test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) || atomic_read(&dest_ha->loop_state) != LOOP_READY)) { @@ -4286,7 +4345,7 @@ * If this request's lun is suspended then put the request on * the scsi_retry queue. */ - if (!(sp->flags & SRB_IOCTL) && + if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) && sp->lun_queue->q_state == LUN_STATE_WAIT) { DEBUG3(printk("scsi(%ld): lun wait state - pid=%ld, " "opcode=%d, allowed=%d, retries=%d\n", diff -Nru a/drivers/scsi/qla2xxx/qla_rscn.c b/drivers/scsi/qla2xxx/qla_rscn.c --- a/drivers/scsi/qla2xxx/qla_rscn.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/qla2xxx/qla_rscn.c Tue May 18 23:38:06 2004 @@ -283,6 +283,8 @@ qla2x00_free_iodesc(iodesc); + qla_printk(KERN_WARNING, iodesc->ha, + "IO descriptor timeout. Scheduling ISP abort.\n"); set_bit(ISP_ABORT_NEEDED, &iodesc->ha->dpc_flags); } @@ -385,7 +387,7 @@ 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_q_cnt = ha->request_q_length - (ha->req_ring_index - cnt); } if (ha->req_q_cnt >= 3) { diff -Nru a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c --- a/drivers/scsi/qla2xxx/qla_sup.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/qla2xxx/qla_sup.c Tue May 18 23:38:05 2004 @@ -24,20 +24,6 @@ static void qla2x00_nv_deselect(scsi_qla_host_t *); static void qla2x00_nv_write(scsi_qla_host_t *, uint16_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 @@ -279,435 +265,3 @@ RD_REG_WORD(®->nvram); /* PCI Posting. */ } -/* - * Flash support routines - */ - -/** - * qla2x00_flash_enable() - Setup flash for reading and writing. - * @ha: HA context - */ -void -qla2x00_flash_enable(scsi_qla_host_t *ha) -{ - uint16_t data; - device_reg_t *reg = ha->iobase; - - data = RD_REG_WORD(®->ctrl_status); - data |= CSR_FLASH_ENABLE; - WRT_REG_WORD(®->ctrl_status, data); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ -} - -/** - * qla2x00_flash_disable() - Disable flash and allow RISC to run. - * @ha: HA context - */ -void -qla2x00_flash_disable(scsi_qla_host_t *ha) -{ - uint16_t data; - device_reg_t *reg = ha->iobase; - - data = RD_REG_WORD(®->ctrl_status); - data &= ~(CSR_FLASH_ENABLE); - WRT_REG_WORD(®->ctrl_status, data); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ -} - -/** - * 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(®->ctrl_status); - if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) { - bank_select |= CSR_FLASH_64K_BANK; - WRT_REG_WORD(®->ctrl_status, bank_select); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - } else if (((addr & BIT_16) == 0) && - (bank_select & CSR_FLASH_64K_BANK)) { - bank_select &= ~(CSR_FLASH_64K_BANK); - WRT_REG_WORD(®->ctrl_status, bank_select); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - } - - /* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */ - if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && ha->pio_address) { - uint16_t data2; - - reg = (device_reg_t *)ha->pio_address; - outw((uint16_t)addr, (unsigned long)(®->flash_address)); - do { - data = inw((unsigned long)(®->flash_data)); - barrier(); - cpu_relax(); - data2 = inw((unsigned long)(®->flash_data)); - } while (data != data2); - } else { - WRT_REG_WORD(®->flash_address, (uint16_t)addr); - data = qla2x00_debounce_register(®->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(®->ctrl_status); - if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) { - bank_select |= CSR_FLASH_64K_BANK; - WRT_REG_WORD(®->ctrl_status, bank_select); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - } else if (((addr & BIT_16) == 0) && - (bank_select & CSR_FLASH_64K_BANK)) { - bank_select &= ~(CSR_FLASH_64K_BANK); - WRT_REG_WORD(®->ctrl_status, bank_select); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - } - - /* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */ - if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && ha->pio_address) { - reg = (device_reg_t *)ha->pio_address; - outw((uint16_t)addr, (unsigned long)(®->flash_address)); - outw((uint16_t)data, (unsigned long)(®->flash_data)); - } else { - WRT_REG_WORD(®->flash_address, (uint16_t)addr); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - WRT_REG_WORD(®->flash_data, (uint16_t)data); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - } -} - -/** - * 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 QLA_SUCCESS on successful retrieval of flash version. - */ -uint16_t -qla2x00_get_flash_version(scsi_qla_host_t *ha) -{ - uint16_t ret = QLA_SUCCESS; - uint32_t loop_cnt = 1; /* this is for error exit only */ - uint32_t pcir_adr; - - /* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */ - if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && !ha->pio_address) - ret = QLA_FUNCTION_FAILED; - - 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 = QLA_FUNCTION_FAILED; - 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 = QLA_FUNCTION_FAILED; - break; - } - - } while (--loop_cnt); - qla2x00_flash_disable(ha); - - 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(®->nvram, 0); - RD_REG_WORD(®->nvram); /* PCI Posting. */ - for (addr = 0, data = image; addr < FLASH_IMAGE_SIZE; addr++, data++) { - if (addr == midpoint) - WRT_REG_WORD(®->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(®->ctrl_status, CSR_ISP_SOFT_RESET); - RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ - - 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(®->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); -} diff -Nru a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h --- a/drivers/scsi/qla2xxx/qla_version.h Tue May 18 23:38:07 2004 +++ b/drivers/scsi/qla2xxx/qla_version.h Tue May 18 23:38:07 2004 @@ -19,9 +19,9 @@ /* * Driver version */ -#define QLA2XXX_VERSION "8.00.00b11-k" +#define QLA2XXX_VERSION "8.00.00b12-k" #define QLA_DRIVER_MAJOR_VER 8 #define QLA_DRIVER_MINOR_VER 0 #define QLA_DRIVER_PATCH_VER 0 -#define QLA_DRIVER_BETA_VER 11 +#define QLA_DRIVER_BETA_VER 12 diff -Nru a/drivers/scsi/qlogicfas.c b/drivers/scsi/qlogicfas.c --- a/drivers/scsi/qlogicfas.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/qlogicfas.c Tue May 18 23:38:09 2004 @@ -1,43 +1,19 @@ -/*----------------------------------------------------------------*/ /* - Qlogic linux driver - work in progress. No Warranty express or implied. - Use at your own risk. Support Tort Reform so you won't have to read all - these silly disclaimers. - - Copyright 1994, Tom Zerucha. - tz@execpc.com - - Additional Code, and much appreciated help by - Michael A. Griffith - grif@cs.ucr.edu - - Thanks to Eric Youngdale and Dave Hinds for loadable module and PCMCIA - help respectively, and for suffering through my foolishness during the - debugging process. - - Reference Qlogic FAS408 Technical Manual, 53408-510-00A, May 10, 1994 - (you can reference it, but it is incomplete and inaccurate in places) - - Version 0.46 1/30/97 - kernel 1.2.0+ - - Functions as standalone, loadable, and PCMCIA driver, the latter from - Dave Hinds' PCMCIA package. - - Cleaned up 26/10/2002 by Alan Cox as part of the 2.5 - SCSI driver cleanup and audit. This driver still needs work on the - following - - Non terminating hardware waits - - Some layering violations with its pcmcia stub - - Redistributable under terms of the GNU General Public License - - For the avoidance of doubt the "preferred form" of this code is one which - is in an open non patent encumbered format. Where cryptographic key signing - forms part of the process of creating an executable the information - including keys needed to generate an equivalently functional executable - are deemed to be part of the source code. - -*/ + * Qlogic FAS408 ISA card driver + * + * Copyright 1994, Tom Zerucha. + * tz@execpc.com + * + * Redistributable under terms of the GNU General Public License + * + * For the avoidance of doubt the "preferred form" of this code is one which + * is in an open non patent encumbered format. Where cryptographic key signing + * forms part of the process of creating an executable the information + * including keys needed to generate an equivalently functional executable + * are deemed to be part of the source code. + * + * Check qlogicfas408.c for more credits and info. + */ #include #include /* to get disk capacity */ @@ -57,429 +33,28 @@ #include "scsi.h" #include "hosts.h" -#include "qlogicfas.h" - -/*----------------------------------------------------------------*/ -int qlcfg5 = (XTALFREQ << 5); /* 15625/512 */ -int qlcfg6 = SYNCXFRPD; -int qlcfg7 = SYNCOFFST; -int qlcfg8 = (SLOWCABLE << 7) | (QL_ENABLE_PARITY << 4); -int qlcfg9 = ((XTALFREQ + 4) / 5); -int qlcfgc = (FASTCLK << 3) | (FASTSCSI << 4); - -static char qlogicfas_name[] = "qlogicfas"; - -int qlogicfas_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)); - -/*----------------------------------------------------------------*/ - -/*----------------------------------------------------------------*/ -/* local functions */ -/*----------------------------------------------------------------*/ - -/* error recovery - reset everything */ - -static void ql_zap(qlogicfas_priv_t priv) -{ - int x; - int qbase = priv->qbase; - - x = inb(qbase + 0xd); - REG0; - outb(3, qbase + 3); /* reset SCSI */ - outb(2, qbase + 3); /* reset chip */ - if (x & 0x80) - REG1; -} - -/* - * Do a pseudo-dma tranfer - */ - -static int ql_pdma(qlogicfas_priv_t priv, int phase, char *request, int reqlen) -{ - int j; - int qbase = priv->qbase; - j = 0; - if (phase & 1) { /* in */ -#if QL_TURBO_PDMA - rtrc(4) - /* empty fifo in large chunks */ - if (reqlen >= 128 && (inb(qbase + 8) & 2)) { /* full */ - insl(qbase + 4, request, 32); - reqlen -= 128; - request += 128; - } - while (reqlen >= 84 && !(j & 0xc0)) /* 2/3 */ - if ((j = inb(qbase + 8)) & 4) - { - insl(qbase + 4, request, 21); - reqlen -= 84; - request += 84; - } - if (reqlen >= 44 && (inb(qbase + 8) & 8)) { /* 1/3 */ - insl(qbase + 4, request, 11); - reqlen -= 44; - request += 44; - } -#endif - /* until both empty and int (or until reclen is 0) */ - rtrc(7) - j = 0; - while (reqlen && !((j & 0x10) && (j & 0xc0))) - { - /* while bytes to receive and not empty */ - j &= 0xc0; - while (reqlen && !((j = inb(qbase + 8)) & 0x10)) - { - *request++ = inb(qbase + 4); - reqlen--; - } - if (j & 0x10) - j = inb(qbase + 8); - - } - } else { /* out */ -#if QL_TURBO_PDMA - rtrc(4) - if (reqlen >= 128 && inb(qbase + 8) & 0x10) { /* empty */ - outsl(qbase + 4, request, 32); - reqlen -= 128; - request += 128; - } - while (reqlen >= 84 && !(j & 0xc0)) /* 1/3 */ - if (!((j = inb(qbase + 8)) & 8)) { - outsl(qbase + 4, request, 21); - reqlen -= 84; - request += 84; - } - if (reqlen >= 40 && !(inb(qbase + 8) & 4)) { /* 2/3 */ - outsl(qbase + 4, request, 10); - reqlen -= 40; - request += 40; - } -#endif - /* until full and int (or until reclen is 0) */ - rtrc(7) - j = 0; - while (reqlen && !((j & 2) && (j & 0xc0))) { - /* while bytes to send and not full */ - while (reqlen && !((j = inb(qbase + 8)) & 2)) - { - outb(*request++, qbase + 4); - reqlen--; - } - if (j & 2) - j = inb(qbase + 8); - } - } - /* maybe return reqlen */ - return inb(qbase + 8) & 0xc0; -} - -/* - * Wait for interrupt flag (polled - not real hardware interrupt) - */ - -static int ql_wai(qlogicfas_priv_t priv) -{ - int k; - int qbase = priv->qbase; - unsigned long i; - - k = 0; - i = jiffies + WATCHDOG; - while (time_before(jiffies, i) && !priv->qabort && - !((k = inb(qbase + 4)) & 0xe0)) { - barrier(); - cpu_relax(); - } - if (time_after_eq(jiffies, i)) - return (DID_TIME_OUT); - if (priv->qabort) - return (priv->qabort == 1 ? DID_ABORT : DID_RESET); - if (k & 0x60) - ql_zap(priv); - if (k & 0x20) - return (DID_PARITY); - if (k & 0x40) - return (DID_ERROR); - return 0; -} - -/* - * Initiate scsi command - queueing handler - * caller must hold host lock - */ - -static void ql_icmd(Scsi_Cmnd * cmd) -{ - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]); - int qbase = priv->qbase; - unsigned int i; - - priv->qabort = 0; - - REG0; - /* clearing of interrupts and the fifo is needed */ - - inb(qbase + 5); /* clear interrupts */ - if (inb(qbase + 5)) /* if still interrupting */ - outb(2, qbase + 3); /* reset chip */ - else if (inb(qbase + 7) & 0x1f) - outb(1, qbase + 3); /* clear fifo */ - while (inb(qbase + 5)); /* clear ints */ - REG1; - outb(1, qbase + 8); /* set for PIO pseudo DMA */ - outb(0, qbase + 0xb); /* disable ints */ - inb(qbase + 8); /* clear int bits */ - REG0; - outb(0x40, qbase + 0xb); /* enable features */ - - /* configurables */ - outb(qlcfgc, qbase + 0xc); - /* config: no reset interrupt, (initiator) bus id */ - outb(0x40 | qlcfg8 | priv->qinitid, qbase + 8); - outb(qlcfg7, qbase + 7); - outb(qlcfg6, qbase + 6); - /**/ outb(qlcfg5, qbase + 5); /* select timer */ - outb(qlcfg9 & 7, qbase + 9); /* prescaler */ -/* outb(0x99, qbase + 5); */ - outb(cmd->device->id, qbase + 4); - - for (i = 0; i < cmd->cmd_len; i++) - outb(cmd->cmnd[i], qbase + 2); - - priv->qlcmd = cmd; - outb(0x41, qbase + 3); /* select and send command */ -} - -/* - * Process scsi command - usually after interrupt - */ - -static unsigned int ql_pcmd(Scsi_Cmnd * cmd) -{ - unsigned int i, j; - unsigned long k; - unsigned int result; /* ultimate return result */ - unsigned int status; /* scsi returned status */ - unsigned int message; /* scsi returned message */ - unsigned int phase; /* recorded scsi phase */ - unsigned int reqlen; /* total length of transfer */ - struct scatterlist *sglist; /* scatter-gather list pointer */ - unsigned int sgcount; /* sg counter */ - char *buf; - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]); - int qbase = priv->qbase; - - rtrc(1) - j = inb(qbase + 6); - i = inb(qbase + 5); - if (i == 0x20) { - return (DID_NO_CONNECT << 16); - } - i |= inb(qbase + 5); /* the 0x10 bit can be set after the 0x08 */ - if (i != 0x18) { - printk(KERN_ERR "Ql:Bad Interrupt status:%02x\n", i); - ql_zap(priv); - return (DID_BAD_INTR << 16); - } - j &= 7; /* j = inb( qbase + 7 ) >> 5; */ - - /* correct status is supposed to be step 4 */ - /* it sometimes returns step 3 but with 0 bytes left to send */ - /* We can try stuffing the FIFO with the max each time, but we will get a - sequence of 3 if any bytes are left (but we do flush the FIFO anyway */ - - if (j != 3 && j != 4) { - printk(KERN_ERR "Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n", - j, i, inb(qbase + 7) & 0x1f); - ql_zap(priv); - return (DID_ERROR << 16); - } - result = DID_OK; - if (inb(qbase + 7) & 0x1f) /* if some bytes in fifo */ - outb(1, qbase + 3); /* clear fifo */ - /* note that request_bufflen is the total xfer size when sg is used */ - reqlen = cmd->request_bufflen; - /* note that it won't work if transfers > 16M are requested */ - if (reqlen && !((phase = inb(qbase + 4)) & 6)) { /* data phase */ - rtrc(2) - outb(reqlen, qbase); /* low-mid xfer cnt */ - outb(reqlen >> 8, qbase + 1); /* low-mid xfer cnt */ - outb(reqlen >> 16, qbase + 0xe); /* high xfer cnt */ - outb(0x90, qbase + 3); /* command do xfer */ - /* PIO pseudo DMA to buffer or sglist */ - REG1; - if (!cmd->use_sg) - ql_pdma(priv, phase, cmd->request_buffer, - cmd->request_bufflen); - else { - sgcount = cmd->use_sg; - sglist = cmd->request_buffer; - while (sgcount--) { - if (priv->qabort) { - REG0; - return ((priv->qabort == 1 ? - DID_ABORT : DID_RESET) << 16); - } - buf = page_address(sglist->page) + sglist->offset; - if (ql_pdma(priv, phase, buf, sglist->length)) - break; - sglist++; - } - } - REG0; - rtrc(2) - /* - * Wait for irq (split into second state of irq handler - * if this can take time) - */ - if ((k = ql_wai(priv))) - return (k << 16); - k = inb(qbase + 5); /* should be 0x10, bus service */ - } - - /* - * Enter Status (and Message In) Phase - */ - - k = jiffies + WATCHDOG; - - while (time_before(jiffies, k) && !priv->qabort && - !(inb(qbase + 4) & 6)) - cpu_relax(); /* wait for status phase */ - - if (time_after_eq(jiffies, k)) { - ql_zap(priv); - return (DID_TIME_OUT << 16); - } - - /* FIXME: timeout ?? */ - while (inb(qbase + 5)) - cpu_relax(); /* clear pending ints */ - - if (priv->qabort) - return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16); - - outb(0x11, qbase + 3); /* get status and message */ - if ((k = ql_wai(priv))) - return (k << 16); - i = inb(qbase + 5); /* get chip irq stat */ - j = inb(qbase + 7) & 0x1f; /* and bytes rec'd */ - status = inb(qbase + 2); - message = inb(qbase + 2); - - /* - * Should get function complete int if Status and message, else - * bus serv if only status - */ - if (!((i == 8 && j == 2) || (i == 0x10 && j == 1))) { - printk(KERN_ERR "Ql:Error during status phase, int=%02X, %d bytes recd\n", i, j); - result = DID_ERROR; - } - outb(0x12, qbase + 3); /* done, disconnect */ - rtrc(1) - if ((k = ql_wai(priv))) - return (k << 16); - - /* - * Should get bus service interrupt and disconnect interrupt - */ - - i = inb(qbase + 5); /* should be bus service */ - while (!priv->qabort && ((i & 0x20) != 0x20)) { - barrier(); - cpu_relax(); - i |= inb(qbase + 5); - } - rtrc(0) - - if (priv->qabort) - return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16); - - return (result << 16) | (message << 8) | (status & STATUS_MASK); -} +#include "qlogicfas408.h" -/* - * Interrupt handler +/* Set the following to 2 to use normal interrupt (active high/totempole- + * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open + * drain */ +#define INT_TYPE 2 -static void ql_ihandl(int irq, void *dev_id, struct pt_regs *regs) -{ - Scsi_Cmnd *icmd; - struct Scsi_Host *host = (struct Scsi_Host *)dev_id; - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(host->hostdata[0]); - int qbase = priv->qbase; - REG0; - - if (!(inb(qbase + 4) & 0x80)) /* false alarm? */ - return; - - if (priv->qlcmd == NULL) { /* no command to process? */ - int i; - i = 16; - while (i-- && inb(qbase + 5)); /* maybe also ql_zap() */ - return; - } - icmd = priv->qlcmd; - icmd->result = ql_pcmd(icmd); - priv->qlcmd = NULL; - /* - * If result is CHECK CONDITION done calls qcommand to request - * sense - */ - (icmd->scsi_done) (icmd); -} - -irqreturn_t do_ql_ihandl(int irq, void *dev_id, struct pt_regs *regs) -{ - unsigned long flags; - struct Scsi_Host *host = dev_id; - - spin_lock_irqsave(host->host_lock, flags); - ql_ihandl(irq, dev_id, regs); - spin_unlock_irqrestore(host->host_lock, flags); - return IRQ_HANDLED; -} - -/* - * Queued command - */ - -int qlogicfas_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) -{ - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]); - if (cmd->device->id == priv->qinitid) { - cmd->result = DID_BAD_TARGET << 16; - done(cmd); - return 0; - } - - cmd->scsi_done = done; - /* wait for the last command's interrupt to finish */ - while (priv->qlcmd != NULL) { - barrier(); - cpu_relax(); - } - ql_icmd(cmd); - return 0; -} +static char qlogicfas_name[] = "qlogicfas"; -#ifndef PCMCIA /* * Look for qlogic card and init if found */ -struct Scsi_Host *__qlogicfas_detect(Scsi_Host_Template *host, int qbase, +static struct Scsi_Host *__qlogicfas_detect(Scsi_Host_Template *host, + int qbase, int qlirq) { - int i, j; /* these are only used by IRQ detect */ int qltyp; /* type of chip */ int qinitid; struct Scsi_Host *hreg; /* registered host structure */ - qlogicfas_priv_t priv; + struct qlogicfas408_priv *priv; /* Qlogic Cards only exist at 0x230 or 0x330 (the chip itself * decodes the address - I check 230 first since MIDI cards are @@ -490,70 +65,36 @@ * the second card, but I haven't tested this. */ - if (!qbase) { - for (qbase = 0x230; qbase < 0x430; qbase += 0x100) { - if (!request_region(qbase, 0x10, qlogicfas_name)) - continue; - REG1; - if (((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7) - && ((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7)) - break; - release_region(qbase, 0x10); - } - if (qbase == 0x430) - return NULL; - } else - printk(KERN_INFO "Ql: Using preset base address of %03x\n", qbase); + if (!qbase || qlirq == -1) + goto err; + + if (!request_region(qbase, 0x10, qlogicfas_name)) { + printk(KERN_INFO "%s: address %#x is busy\n", qlogicfas_name, + qbase); + goto err; + } + + if (!qlogicfas408_detect(qbase, INT_TYPE)) { + printk(KERN_WARNING "%s: probe failed for %#x\n", + qlogicfas_name, + qbase); + goto err_release_mem; + } - qltyp = inb(qbase + 0xe) & 0xf8; + printk(KERN_INFO "%s: Using preset base address of %03x," + " IRQ %d\n", qlogicfas_name, qbase, qlirq); + + qltyp = qlogicfas408_get_chip_type(qbase, INT_TYPE); qinitid = host->this_id; if (qinitid < 0) qinitid = 7; /* if no ID, use 7 */ - outb(1, qbase + 8); /* set for PIO pseudo DMA */ - REG0; - outb(0x40 | qlcfg8 | qinitid, qbase + 8); /* (ini) bus id, disable scsi rst */ - outb(qlcfg5, qbase + 5); /* select timer */ - outb(qlcfg9, qbase + 9); /* prescaler */ - -#if QL_RESET_AT_START - outb(3, qbase + 3); - REG1; - /* FIXME: timeout */ - while (inb(qbase + 0xf) & 4) - cpu_relax(); - REG0; -#endif - - /* - * IRQ probe - toggle pin and check request pending - */ - if (qlirq == -1) { - i = 0xffff; - j = 3; - outb(0x90, qbase + 3); /* illegal command - cause interrupt */ - REG1; - outb(10, 0x20); /* access pending interrupt map */ - outb(10, 0xa0); - while (j--) { - outb(0xb0 | QL_INT_ACTIVE_HIGH, qbase + 0xd); /* int pin off */ - i &= ~(inb(0x20) | (inb(0xa0) << 8)); /* find IRQ off */ - outb(0xb4 | QL_INT_ACTIVE_HIGH, qbase + 0xd); /* int pin on */ - i &= inb(0x20) | (inb(0xa0) << 8); /* find IRQ on */ - } - REG0; - while (inb(qbase + 5)); /* purge int */ - j = -1; - while (i) /* find on bit */ - i >>= 1, j++; /* should check for exactly 1 on */ - qlirq = j; - } else - printk(KERN_INFO "Ql: Using preset IRQ %d\n", qlirq); + qlogicfas408_setup(qbase, qinitid, INT_TYPE); - hreg = scsi_host_alloc(host, sizeof(struct qlogicfas_priv)); + hreg = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv)); if (!hreg) goto err_release_mem; - priv = (qlogicfas_priv_t)&(hreg->hostdata[0]); + priv = get_priv_by_host(hreg); hreg->io_port = qbase; hreg->n_io_port = 16; hreg->dma_channel = -1; @@ -563,13 +104,14 @@ priv->qlirq = qlirq; priv->qinitid = qinitid; priv->shost = hreg; + priv->int_type = INT_TYPE; sprintf(priv->qinfo, "Qlogicfas Driver version 0.46, chip %02X at %03X, IRQ %d, TPdma:%d", qltyp, qbase, qlirq, QL_TURBO_PDMA); host->name = qlogicfas_name; - if (request_irq(qlirq, do_ql_ihandl, 0, qlogicfas_name, hreg)) + if (request_irq(qlirq, qlogicfas408_ihandl, 0, qlogicfas_name, hreg)) goto free_scsi_host; if (scsi_add_host(hreg, NULL)) @@ -587,11 +129,12 @@ err_release_mem: release_region(qbase, 0x10); +err: return NULL; } #define MAX_QLOGICFAS 8 -static qlogicfas_priv_t cards; +static struct qlogicfas408_priv *cards; static int iobase[MAX_QLOGICFAS]; static int irq[MAX_QLOGICFAS] = { [0 ... MAX_QLOGICFAS-1] = -1 }; MODULE_PARM(iobase, "1-" __MODULE_STRING(MAX_QLOGICFAS) "i"); @@ -599,23 +142,21 @@ MODULE_PARM_DESC(iobase, "I/O address"); MODULE_PARM_DESC(irq, "IRQ"); -int __devinit qlogicfas_detect(Scsi_Host_Template *sht) +static int __devinit qlogicfas_detect(Scsi_Host_Template *sht) { - struct Scsi_Host *shost; - qlogicfas_priv_t priv; - int i, - num = 0; + struct Scsi_Host *shost; + struct qlogicfas408_priv *priv; + int num; - for (i = 0; i < MAX_QLOGICFAS; i++) { + for (num = 0; num < MAX_QLOGICFAS; num++) { shost = __qlogicfas_detect(sht, iobase[num], irq[num]); if (shost == NULL) { /* no more devices */ break; } - priv = (qlogicfas_priv_t)&(shost->hostdata[0]); + priv = get_priv_by_host(shost); priv->next = cards; cards = priv; - num++; } return num; @@ -623,13 +164,10 @@ static int qlogicfas_release(struct Scsi_Host *shost) { - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(shost->hostdata[0]); - int qbase = priv->qbase; + struct qlogicfas408_priv *priv = get_priv_by_host(shost); if (shost->irq) { - REG1; - outb(0, qbase + 0xb); /* disable ints */ - + qlogicfas408_disable_ints(priv); free_irq(shost->irq, shost); } if (shost->dma_channel != 0xff) @@ -641,100 +179,21 @@ return 0; } -#endif /* ifndef PCMCIA */ - -/* - * Return bios parameters - */ - -int qlogicfas_biosparam(struct scsi_device * disk, - struct block_device *dev, - sector_t capacity, int ip[]) -{ -/* This should mimic the DOS Qlogic driver's behavior exactly */ - ip[0] = 0x40; - ip[1] = 0x20; - ip[2] = (unsigned long) capacity / (ip[0] * ip[1]); - if (ip[2] > 1024) { - ip[0] = 0xff; - ip[1] = 0x3f; - ip[2] = (unsigned long) capacity / (ip[0] * ip[1]); -#if 0 - if (ip[2] > 1023) - ip[2] = 1023; -#endif - } - return 0; -} - -/* - * Abort a command in progress - */ - -static int qlogicfas_abort(Scsi_Cmnd * cmd) -{ - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]); - priv->qabort = 1; - ql_zap(priv); - return SUCCESS; -} - -/* - * Reset SCSI bus - * FIXME: This function is invoked with cmd = NULL directly by - * the PCMCIA qlogic_stub code. This wants fixing - */ - -int qlogicfas_bus_reset(Scsi_Cmnd * cmd) -{ - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]); - priv->qabort = 2; - ql_zap(priv); - return SUCCESS; -} - -/* - * Reset SCSI host controller - */ - -static int qlogicfas_host_reset(Scsi_Cmnd * cmd) -{ - return FAILED; -} - -/* - * Reset SCSI device - */ - -static int qlogicfas_device_reset(Scsi_Cmnd * cmd) -{ - return FAILED; -} - -/* - * Return info string - */ - -static const char *qlogicfas_info(struct Scsi_Host *host) -{ - qlogicfas_priv_t priv = (qlogicfas_priv_t)&(host->hostdata[0]); - return priv->qinfo; -} /* * The driver template is also needed for PCMCIA */ -Scsi_Host_Template qlogicfas_driver_template = { +static Scsi_Host_Template qlogicfas_driver_template = { .module = THIS_MODULE, .name = qlogicfas_name, .proc_name = qlogicfas_name, - .info = qlogicfas_info, - .queuecommand = qlogicfas_queuecommand, - .eh_abort_handler = qlogicfas_abort, - .eh_bus_reset_handler = qlogicfas_bus_reset, - .eh_device_reset_handler= qlogicfas_device_reset, - .eh_host_reset_handler = qlogicfas_host_reset, - .bios_param = qlogicfas_biosparam, + .info = qlogicfas408_info, + .queuecommand = qlogicfas408_queuecommand, + .eh_abort_handler = qlogicfas408_abort, + .eh_bus_reset_handler = qlogicfas408_bus_reset, + .eh_device_reset_handler= qlogicfas408_device_reset, + .eh_host_reset_handler = qlogicfas408_host_reset, + .bios_param = qlogicfas408_biosparam, .can_queue = 1, .this_id = -1, .sg_tablesize = SG_ALL, @@ -742,11 +201,13 @@ .use_clustering = DISABLE_CLUSTERING, }; -#ifndef PCMCIA static __init int qlogicfas_init(void) { if (!qlogicfas_detect(&qlogicfas_driver_template)) { /* no cards found */ + printk(KERN_INFO "%s: no cards were found, please specify " + "I/O address and IRQ using iobase= and irq= " + "options", qlogicfas_name); return -ENODEV; } @@ -755,16 +216,15 @@ static __exit void qlogicfas_exit(void) { - qlogicfas_priv_t priv; + struct qlogicfas408_priv *priv; for (priv = cards; priv != NULL; priv = priv->next) qlogicfas_release(priv->shost); } MODULE_AUTHOR("Tom Zerucha, Michael Griffith"); -MODULE_DESCRIPTION("Driver for the Qlogic FAS SCSI controllers"); +MODULE_DESCRIPTION("Driver for the Qlogic FAS408 based ISA card"); MODULE_LICENSE("GPL"); module_init(qlogicfas_init); module_exit(qlogicfas_exit); -#endif /* ifndef PCMCIA */ diff -Nru a/drivers/scsi/qlogicfas.h b/drivers/scsi/qlogicfas.h --- a/drivers/scsi/qlogicfas.h Tue May 18 23:38:06 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,124 +0,0 @@ -/* to be used by qlogicfas and qlogic_cs */ -#ifndef __QLOGICFAS_H -#define __QLOGICFAS_H - -/*----------------------------------------------------------------*/ -/* Configuration */ - -/* Set the following to 2 to use normal interrupt (active high/totempole- - tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open - drain */ - -#define QL_INT_ACTIVE_HIGH 2 - -/* Set the following to max out the speed of the PIO PseudoDMA transfers, - again, 0 tends to be slower, but more stable. */ - -#define QL_TURBO_PDMA 1 - -/* This should be 1 to enable parity detection */ - -#define QL_ENABLE_PARITY 1 - -/* This will reset all devices when the driver is initialized (during bootup). - The other linux drivers don't do this, but the DOS drivers do, and after - using DOS or some kind of crash or lockup this will bring things back - without requiring a cold boot. It does take some time to recover from a - reset, so it is slower, and I have seen timeouts so that devices weren't - recognized when this was set. */ - -#define QL_RESET_AT_START 0 - -/* crystal frequency in megahertz (for offset 5 and 9) - Please set this for your card. Most Qlogic cards are 40 Mhz. The - Control Concepts ISA (not VLB) is 24 Mhz */ - -#define XTALFREQ 40 - -/**********/ -/* DANGER! modify these at your own risk */ -/* SLOWCABLE can usually be reset to zero if you have a clean setup and - proper termination. The rest are for synchronous transfers and other - advanced features if your device can transfer faster than 5Mb/sec. - If you are really curious, email me for a quick howto until I have - something official */ -/**********/ - -/*****/ -/* config register 1 (offset 8) options */ -/* This needs to be set to 1 if your cabling is long or noisy */ -#define SLOWCABLE 1 - -/*****/ -/* offset 0xc */ -/* This will set fast (10Mhz) synchronous timing when set to 1 - For this to have an effect, FASTCLK must also be 1 */ -#define FASTSCSI 0 - -/* This when set to 1 will set a faster sync transfer rate */ -#define FASTCLK 0 /*(XTALFREQ>25?1:0)*/ - -/*****/ -/* offset 6 */ -/* This is the sync transfer divisor, XTALFREQ/X will be the maximum - achievable data rate (assuming the rest of the system is capable - and set properly) */ -#define SYNCXFRPD 5 /*(XTALFREQ/5)*/ - -/*****/ -/* offset 7 */ -/* This is the count of how many synchronous transfers can take place - i.e. how many reqs can occur before an ack is given. - The maximum value for this is 15, the upper bits can modify - REQ/ACK assertion and deassertion during synchronous transfers - If this is 0, the bus will only transfer asynchronously */ -#define SYNCOFFST 0 -/* for the curious, bits 7&6 control the deassertion delay in 1/2 cycles - of the 40Mhz clock. If FASTCLK is 1, specifying 01 (1/2) will - cause the deassertion to be early by 1/2 clock. Bits 5&4 control - the assertion delay, also in 1/2 clocks (FASTCLK is ignored here). */ - -/*----------------------------------------------------------------*/ -#ifdef PCMCIA -#undef QL_INT_ACTIVE_HIGH -#define QL_INT_ACTIVE_HIGH 0 -#endif - -struct qlogicfas_priv; -typedef struct qlogicfas_priv *qlogicfas_priv_t; -struct qlogicfas_priv { - int qbase; /* Port */ - int qinitid; /* initiator ID */ - int qabort; /* Flag to cause an abort */ - int qlirq; /* IRQ being used */ - char qinfo[80]; /* description */ - Scsi_Cmnd *qlcmd; /* current command being processed */ - struct Scsi_Host *shost; /* pointer back to host */ - qlogicfas_priv_t next; /* next private struct */ -}; - -extern int qlcfg5; -extern int qlcfg6; -extern int qlcfg7; -extern int qlcfg8; -extern int qlcfg9; -extern int qlcfgc; - -/* The qlogic card uses two register maps - These macros select which one */ -#define REG0 ( outb( inb( qbase + 0xd ) & 0x7f , qbase + 0xd ), outb( 4 , qbase + 0xd )) -#define REG1 ( outb( inb( qbase + 0xd ) | 0x80 , qbase + 0xd ), outb( 0xb4 | QL_INT_ACTIVE_HIGH , qbase + 0xd )) - -/* following is watchdog timeout in microseconds */ -#define WATCHDOG 5000000 - -/*----------------------------------------------------------------*/ -/* the following will set the monitor border color (useful to find - where something crashed or gets stuck at and as a simple profiler) */ - -#if 0 -#define rtrc(i) {inb(0x3da);outb(0x31,0x3c0);outb((i),0x3c0);} -#else -#define rtrc(i) {} -#endif -#endif /* __QLOGICFAS_H */ - diff -Nru a/drivers/scsi/qlogicfas408.c b/drivers/scsi/qlogicfas408.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/qlogicfas408.c Tue May 18 23:38:09 2004 @@ -0,0 +1,637 @@ +/*----------------------------------------------------------------*/ +/* + Qlogic linux driver - work in progress. No Warranty express or implied. + Use at your own risk. Support Tort Reform so you won't have to read all + these silly disclaimers. + + Copyright 1994, Tom Zerucha. + tz@execpc.com + + Additional Code, and much appreciated help by + Michael A. Griffith + grif@cs.ucr.edu + + Thanks to Eric Youngdale and Dave Hinds for loadable module and PCMCIA + help respectively, and for suffering through my foolishness during the + debugging process. + + Reference Qlogic FAS408 Technical Manual, 53408-510-00A, May 10, 1994 + (you can reference it, but it is incomplete and inaccurate in places) + + Version 0.46 1/30/97 - kernel 1.2.0+ + + Functions as standalone, loadable, and PCMCIA driver, the latter from + Dave Hinds' PCMCIA package. + + Cleaned up 26/10/2002 by Alan Cox as part of the 2.5 + SCSI driver cleanup and audit. This driver still needs work on the + following + - Non terminating hardware waits + - Some layering violations with its pcmcia stub + + Redistributable under terms of the GNU General Public License + + For the avoidance of doubt the "preferred form" of this code is one which + is in an open non patent encumbered format. Where cryptographic key signing + forms part of the process of creating an executable the information + including keys needed to generate an equivalently functional executable + are deemed to be part of the source code. + +*/ + +#include +#include /* to get disk capacity */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "scsi.h" +#include "hosts.h" +#include "qlogicfas408.h" + +/*----------------------------------------------------------------*/ +static int qlcfg5 = (XTALFREQ << 5); /* 15625/512 */ +static int qlcfg6 = SYNCXFRPD; +static int qlcfg7 = SYNCOFFST; +static int qlcfg8 = (SLOWCABLE << 7) | (QL_ENABLE_PARITY << 4); +static int qlcfg9 = ((XTALFREQ + 4) / 5); +static int qlcfgc = (FASTCLK << 3) | (FASTSCSI << 4); + +/*----------------------------------------------------------------*/ + +/*----------------------------------------------------------------*/ +/* local functions */ +/*----------------------------------------------------------------*/ + +/* error recovery - reset everything */ + +static void ql_zap(struct qlogicfas408_priv *priv) +{ + int x; + int qbase = priv->qbase; + int int_type = priv->int_type; + + x = inb(qbase + 0xd); + REG0; + outb(3, qbase + 3); /* reset SCSI */ + outb(2, qbase + 3); /* reset chip */ + if (x & 0x80) + REG1; +} + +/* + * Do a pseudo-dma tranfer + */ + +static int ql_pdma(struct qlogicfas408_priv *priv, int phase, char *request, int reqlen) +{ + int j; + int qbase = priv->qbase; + j = 0; + if (phase & 1) { /* in */ +#if QL_TURBO_PDMA + rtrc(4) + /* empty fifo in large chunks */ + if (reqlen >= 128 && (inb(qbase + 8) & 2)) { /* full */ + insl(qbase + 4, request, 32); + reqlen -= 128; + request += 128; + } + while (reqlen >= 84 && !(j & 0xc0)) /* 2/3 */ + if ((j = inb(qbase + 8)) & 4) + { + insl(qbase + 4, request, 21); + reqlen -= 84; + request += 84; + } + if (reqlen >= 44 && (inb(qbase + 8) & 8)) { /* 1/3 */ + insl(qbase + 4, request, 11); + reqlen -= 44; + request += 44; + } +#endif + /* until both empty and int (or until reclen is 0) */ + rtrc(7) + j = 0; + while (reqlen && !((j & 0x10) && (j & 0xc0))) + { + /* while bytes to receive and not empty */ + j &= 0xc0; + while (reqlen && !((j = inb(qbase + 8)) & 0x10)) + { + *request++ = inb(qbase + 4); + reqlen--; + } + if (j & 0x10) + j = inb(qbase + 8); + + } + } else { /* out */ +#if QL_TURBO_PDMA + rtrc(4) + if (reqlen >= 128 && inb(qbase + 8) & 0x10) { /* empty */ + outsl(qbase + 4, request, 32); + reqlen -= 128; + request += 128; + } + while (reqlen >= 84 && !(j & 0xc0)) /* 1/3 */ + if (!((j = inb(qbase + 8)) & 8)) { + outsl(qbase + 4, request, 21); + reqlen -= 84; + request += 84; + } + if (reqlen >= 40 && !(inb(qbase + 8) & 4)) { /* 2/3 */ + outsl(qbase + 4, request, 10); + reqlen -= 40; + request += 40; + } +#endif + /* until full and int (or until reclen is 0) */ + rtrc(7) + j = 0; + while (reqlen && !((j & 2) && (j & 0xc0))) { + /* while bytes to send and not full */ + while (reqlen && !((j = inb(qbase + 8)) & 2)) + { + outb(*request++, qbase + 4); + reqlen--; + } + if (j & 2) + j = inb(qbase + 8); + } + } + /* maybe return reqlen */ + return inb(qbase + 8) & 0xc0; +} + +/* + * Wait for interrupt flag (polled - not real hardware interrupt) + */ + +static int ql_wai(struct qlogicfas408_priv *priv) +{ + int k; + int qbase = priv->qbase; + unsigned long i; + + k = 0; + i = jiffies + WATCHDOG; + while (time_before(jiffies, i) && !priv->qabort && + !((k = inb(qbase + 4)) & 0xe0)) { + barrier(); + cpu_relax(); + } + if (time_after_eq(jiffies, i)) + return (DID_TIME_OUT); + if (priv->qabort) + return (priv->qabort == 1 ? DID_ABORT : DID_RESET); + if (k & 0x60) + ql_zap(priv); + if (k & 0x20) + return (DID_PARITY); + if (k & 0x40) + return (DID_ERROR); + return 0; +} + +/* + * Initiate scsi command - queueing handler + * caller must hold host lock + */ + +static void ql_icmd(Scsi_Cmnd * cmd) +{ + struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); + int qbase = priv->qbase; + int int_type = priv->int_type; + unsigned int i; + + priv->qabort = 0; + + REG0; + /* clearing of interrupts and the fifo is needed */ + + inb(qbase + 5); /* clear interrupts */ + if (inb(qbase + 5)) /* if still interrupting */ + outb(2, qbase + 3); /* reset chip */ + else if (inb(qbase + 7) & 0x1f) + outb(1, qbase + 3); /* clear fifo */ + while (inb(qbase + 5)); /* clear ints */ + REG1; + outb(1, qbase + 8); /* set for PIO pseudo DMA */ + outb(0, qbase + 0xb); /* disable ints */ + inb(qbase + 8); /* clear int bits */ + REG0; + outb(0x40, qbase + 0xb); /* enable features */ + + /* configurables */ + outb(qlcfgc, qbase + 0xc); + /* config: no reset interrupt, (initiator) bus id */ + outb(0x40 | qlcfg8 | priv->qinitid, qbase + 8); + outb(qlcfg7, qbase + 7); + outb(qlcfg6, qbase + 6); + /**/ outb(qlcfg5, qbase + 5); /* select timer */ + outb(qlcfg9 & 7, qbase + 9); /* prescaler */ +/* outb(0x99, qbase + 5); */ + outb(cmd->device->id, qbase + 4); + + for (i = 0; i < cmd->cmd_len; i++) + outb(cmd->cmnd[i], qbase + 2); + + priv->qlcmd = cmd; + outb(0x41, qbase + 3); /* select and send command */ +} + +/* + * Process scsi command - usually after interrupt + */ + +static unsigned int ql_pcmd(Scsi_Cmnd * cmd) +{ + unsigned int i, j; + unsigned long k; + unsigned int result; /* ultimate return result */ + unsigned int status; /* scsi returned status */ + unsigned int message; /* scsi returned message */ + unsigned int phase; /* recorded scsi phase */ + unsigned int reqlen; /* total length of transfer */ + struct scatterlist *sglist; /* scatter-gather list pointer */ + unsigned int sgcount; /* sg counter */ + char *buf; + struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); + int qbase = priv->qbase; + int int_type = priv->int_type; + + rtrc(1) + j = inb(qbase + 6); + i = inb(qbase + 5); + if (i == 0x20) { + return (DID_NO_CONNECT << 16); + } + i |= inb(qbase + 5); /* the 0x10 bit can be set after the 0x08 */ + if (i != 0x18) { + printk(KERN_ERR "Ql:Bad Interrupt status:%02x\n", i); + ql_zap(priv); + return (DID_BAD_INTR << 16); + } + j &= 7; /* j = inb( qbase + 7 ) >> 5; */ + + /* correct status is supposed to be step 4 */ + /* it sometimes returns step 3 but with 0 bytes left to send */ + /* We can try stuffing the FIFO with the max each time, but we will get a + sequence of 3 if any bytes are left (but we do flush the FIFO anyway */ + + if (j != 3 && j != 4) { + printk(KERN_ERR "Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n", + j, i, inb(qbase + 7) & 0x1f); + ql_zap(priv); + return (DID_ERROR << 16); + } + result = DID_OK; + if (inb(qbase + 7) & 0x1f) /* if some bytes in fifo */ + outb(1, qbase + 3); /* clear fifo */ + /* note that request_bufflen is the total xfer size when sg is used */ + reqlen = cmd->request_bufflen; + /* note that it won't work if transfers > 16M are requested */ + if (reqlen && !((phase = inb(qbase + 4)) & 6)) { /* data phase */ + rtrc(2) + outb(reqlen, qbase); /* low-mid xfer cnt */ + outb(reqlen >> 8, qbase + 1); /* low-mid xfer cnt */ + outb(reqlen >> 16, qbase + 0xe); /* high xfer cnt */ + outb(0x90, qbase + 3); /* command do xfer */ + /* PIO pseudo DMA to buffer or sglist */ + REG1; + if (!cmd->use_sg) + ql_pdma(priv, phase, cmd->request_buffer, + cmd->request_bufflen); + else { + sgcount = cmd->use_sg; + sglist = cmd->request_buffer; + while (sgcount--) { + if (priv->qabort) { + REG0; + return ((priv->qabort == 1 ? + DID_ABORT : DID_RESET) << 16); + } + buf = page_address(sglist->page) + sglist->offset; + if (ql_pdma(priv, phase, buf, sglist->length)) + break; + sglist++; + } + } + REG0; + rtrc(2) + /* + * Wait for irq (split into second state of irq handler + * if this can take time) + */ + if ((k = ql_wai(priv))) + return (k << 16); + k = inb(qbase + 5); /* should be 0x10, bus service */ + } + + /* + * Enter Status (and Message In) Phase + */ + + k = jiffies + WATCHDOG; + + while (time_before(jiffies, k) && !priv->qabort && + !(inb(qbase + 4) & 6)) + cpu_relax(); /* wait for status phase */ + + if (time_after_eq(jiffies, k)) { + ql_zap(priv); + return (DID_TIME_OUT << 16); + } + + /* FIXME: timeout ?? */ + while (inb(qbase + 5)) + cpu_relax(); /* clear pending ints */ + + if (priv->qabort) + return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16); + + outb(0x11, qbase + 3); /* get status and message */ + if ((k = ql_wai(priv))) + return (k << 16); + i = inb(qbase + 5); /* get chip irq stat */ + j = inb(qbase + 7) & 0x1f; /* and bytes rec'd */ + status = inb(qbase + 2); + message = inb(qbase + 2); + + /* + * Should get function complete int if Status and message, else + * bus serv if only status + */ + if (!((i == 8 && j == 2) || (i == 0x10 && j == 1))) { + printk(KERN_ERR "Ql:Error during status phase, int=%02X, %d bytes recd\n", i, j); + result = DID_ERROR; + } + outb(0x12, qbase + 3); /* done, disconnect */ + rtrc(1) + if ((k = ql_wai(priv))) + return (k << 16); + + /* + * Should get bus service interrupt and disconnect interrupt + */ + + i = inb(qbase + 5); /* should be bus service */ + while (!priv->qabort && ((i & 0x20) != 0x20)) { + barrier(); + cpu_relax(); + i |= inb(qbase + 5); + } + rtrc(0) + + if (priv->qabort) + return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16); + + return (result << 16) | (message << 8) | (status & STATUS_MASK); +} + +/* + * Interrupt handler + */ + +static void ql_ihandl(int irq, void *dev_id, struct pt_regs *regs) +{ + Scsi_Cmnd *icmd; + struct Scsi_Host *host = (struct Scsi_Host *)dev_id; + struct qlogicfas408_priv *priv = get_priv_by_host(host); + int qbase = priv->qbase; + REG0; + + if (!(inb(qbase + 4) & 0x80)) /* false alarm? */ + return; + + if (priv->qlcmd == NULL) { /* no command to process? */ + int i; + i = 16; + while (i-- && inb(qbase + 5)); /* maybe also ql_zap() */ + return; + } + icmd = priv->qlcmd; + icmd->result = ql_pcmd(icmd); + priv->qlcmd = NULL; + /* + * If result is CHECK CONDITION done calls qcommand to request + * sense + */ + (icmd->scsi_done) (icmd); +} + +irqreturn_t qlogicfas408_ihandl(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned long flags; + struct Scsi_Host *host = dev_id; + + spin_lock_irqsave(host->host_lock, flags); + ql_ihandl(irq, dev_id, regs); + spin_unlock_irqrestore(host->host_lock, flags); + return IRQ_HANDLED; +} + +/* + * Queued command + */ + +int qlogicfas408_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) +{ + struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); + if (cmd->device->id == priv->qinitid) { + cmd->result = DID_BAD_TARGET << 16; + done(cmd); + return 0; + } + + cmd->scsi_done = done; + /* wait for the last command's interrupt to finish */ + while (priv->qlcmd != NULL) { + barrier(); + cpu_relax(); + } + ql_icmd(cmd); + return 0; +} + +/* + * Return bios parameters + */ + +int qlogicfas408_biosparam(struct scsi_device * disk, + struct block_device *dev, + sector_t capacity, int ip[]) +{ +/* This should mimic the DOS Qlogic driver's behavior exactly */ + ip[0] = 0x40; + ip[1] = 0x20; + ip[2] = (unsigned long) capacity / (ip[0] * ip[1]); + if (ip[2] > 1024) { + ip[0] = 0xff; + ip[1] = 0x3f; + ip[2] = (unsigned long) capacity / (ip[0] * ip[1]); +#if 0 + if (ip[2] > 1023) + ip[2] = 1023; +#endif + } + return 0; +} + +/* + * Abort a command in progress + */ + +int qlogicfas408_abort(Scsi_Cmnd * cmd) +{ + struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); + priv->qabort = 1; + ql_zap(priv); + return SUCCESS; +} + +/* + * Reset SCSI bus + * FIXME: This function is invoked with cmd = NULL directly by + * the PCMCIA qlogic_stub code. This wants fixing + */ + +int qlogicfas408_bus_reset(Scsi_Cmnd * cmd) +{ + struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); + priv->qabort = 2; + ql_zap(priv); + return SUCCESS; +} + +/* + * Reset SCSI host controller + */ + +int qlogicfas408_host_reset(Scsi_Cmnd * cmd) +{ + return FAILED; +} + +/* + * Reset SCSI device + */ + +int qlogicfas408_device_reset(Scsi_Cmnd * cmd) +{ + return FAILED; +} + +/* + * Return info string + */ + +char *qlogicfas408_info(struct Scsi_Host *host) +{ + struct qlogicfas408_priv *priv = get_priv_by_host(host); + return priv->qinfo; +} + +/* + * Get type of chip + */ + +int qlogicfas408_get_chip_type(int qbase, int int_type) +{ + REG1; + return inb(qbase + 0xe) & 0xf8; +} + +/* + * Perform initialization tasks + */ + +void qlogicfas408_setup(int qbase, int id, int int_type) +{ + outb(1, qbase + 8); /* set for PIO pseudo DMA */ + REG0; + outb(0x40 | qlcfg8 | id, qbase + 8); /* (ini) bus id, disable scsi rst */ + outb(qlcfg5, qbase + 5); /* select timer */ + outb(qlcfg9, qbase + 9); /* prescaler */ + +#if QL_RESET_AT_START + outb(3, qbase + 3); + + REG1; + /* FIXME: timeout */ + while (inb(qbase + 0xf) & 4) + cpu_relax(); + + REG0; +#endif +} + +/* + * Checks if this is a QLogic FAS 408 + */ + +int qlogicfas408_detect(int qbase, int int_type) +{ + REG1; + return (((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7) && + ((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7)); +} + +/* + * Disable interrupts + */ + +void qlogicfas408_disable_ints(struct qlogicfas408_priv *priv) +{ + int qbase = priv->qbase; + int int_type = priv->int_type; + + REG1; + outb(0, qbase + 0xb); /* disable ints */ +} + +/* + * Init and exit functions + */ + +static int __init qlogicfas408_init(void) +{ + return 0; +} + +static void __exit qlogicfas408_exit(void) +{ + +} + +MODULE_AUTHOR("Tom Zerucha, Michael Griffith"); +MODULE_DESCRIPTION("Driver for the Qlogic FAS SCSI controllers"); +MODULE_LICENSE("GPL"); +module_init(qlogicfas408_init); +module_exit(qlogicfas408_exit); + +EXPORT_SYMBOL(qlogicfas408_info); +EXPORT_SYMBOL(qlogicfas408_queuecommand); +EXPORT_SYMBOL(qlogicfas408_abort); +EXPORT_SYMBOL(qlogicfas408_bus_reset); +EXPORT_SYMBOL(qlogicfas408_device_reset); +EXPORT_SYMBOL(qlogicfas408_host_reset); +EXPORT_SYMBOL(qlogicfas408_biosparam); +EXPORT_SYMBOL(qlogicfas408_ihandl); +EXPORT_SYMBOL(qlogicfas408_get_chip_type); +EXPORT_SYMBOL(qlogicfas408_setup); +EXPORT_SYMBOL(qlogicfas408_detect); +EXPORT_SYMBOL(qlogicfas408_disable_ints); + diff -Nru a/drivers/scsi/qlogicfas408.h b/drivers/scsi/qlogicfas408.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/qlogicfas408.h Tue May 18 23:38:06 2004 @@ -0,0 +1,120 @@ +/* to be used by qlogicfas and qlogic_cs */ +#ifndef __QLOGICFAS408_H +#define __QLOGICFAS408_H + +/*----------------------------------------------------------------*/ +/* Configuration */ + +/* Set the following to max out the speed of the PIO PseudoDMA transfers, + again, 0 tends to be slower, but more stable. */ + +#define QL_TURBO_PDMA 1 + +/* This should be 1 to enable parity detection */ + +#define QL_ENABLE_PARITY 1 + +/* This will reset all devices when the driver is initialized (during bootup). + The other linux drivers don't do this, but the DOS drivers do, and after + using DOS or some kind of crash or lockup this will bring things back + without requiring a cold boot. It does take some time to recover from a + reset, so it is slower, and I have seen timeouts so that devices weren't + recognized when this was set. */ + +#define QL_RESET_AT_START 0 + +/* crystal frequency in megahertz (for offset 5 and 9) + Please set this for your card. Most Qlogic cards are 40 Mhz. The + Control Concepts ISA (not VLB) is 24 Mhz */ + +#define XTALFREQ 40 + +/**********/ +/* DANGER! modify these at your own risk */ +/* SLOWCABLE can usually be reset to zero if you have a clean setup and + proper termination. The rest are for synchronous transfers and other + advanced features if your device can transfer faster than 5Mb/sec. + If you are really curious, email me for a quick howto until I have + something official */ +/**********/ + +/*****/ +/* config register 1 (offset 8) options */ +/* This needs to be set to 1 if your cabling is long or noisy */ +#define SLOWCABLE 1 + +/*****/ +/* offset 0xc */ +/* This will set fast (10Mhz) synchronous timing when set to 1 + For this to have an effect, FASTCLK must also be 1 */ +#define FASTSCSI 0 + +/* This when set to 1 will set a faster sync transfer rate */ +#define FASTCLK 0 /*(XTALFREQ>25?1:0)*/ + +/*****/ +/* offset 6 */ +/* This is the sync transfer divisor, XTALFREQ/X will be the maximum + achievable data rate (assuming the rest of the system is capable + and set properly) */ +#define SYNCXFRPD 5 /*(XTALFREQ/5)*/ + +/*****/ +/* offset 7 */ +/* This is the count of how many synchronous transfers can take place + i.e. how many reqs can occur before an ack is given. + The maximum value for this is 15, the upper bits can modify + REQ/ACK assertion and deassertion during synchronous transfers + If this is 0, the bus will only transfer asynchronously */ +#define SYNCOFFST 0 +/* for the curious, bits 7&6 control the deassertion delay in 1/2 cycles + of the 40Mhz clock. If FASTCLK is 1, specifying 01 (1/2) will + cause the deassertion to be early by 1/2 clock. Bits 5&4 control + the assertion delay, also in 1/2 clocks (FASTCLK is ignored here). */ + +/*----------------------------------------------------------------*/ + +struct qlogicfas408_priv { + int qbase; /* Port */ + int qinitid; /* initiator ID */ + int qabort; /* Flag to cause an abort */ + int qlirq; /* IRQ being used */ + int int_type; /* type of irq, 2 for ISA board, 0 for PCMCIA */ + char qinfo[80]; /* description */ + Scsi_Cmnd *qlcmd; /* current command being processed */ + struct Scsi_Host *shost; /* pointer back to host */ + struct qlogicfas408_priv *next; /* next private struct */ +}; + +/* The qlogic card uses two register maps - These macros select which one */ +#define REG0 ( outb( inb( qbase + 0xd ) & 0x7f , qbase + 0xd ), outb( 4 , qbase + 0xd )) +#define REG1 ( outb( inb( qbase + 0xd ) | 0x80 , qbase + 0xd ), outb( 0xb4 | int_type, qbase + 0xd )) + +/* following is watchdog timeout in microseconds */ +#define WATCHDOG 5000000 + +/*----------------------------------------------------------------*/ +/* the following will set the monitor border color (useful to find + where something crashed or gets stuck at and as a simple profiler) */ + +#define rtrc(i) {} + +#define get_priv_by_cmd(x) (struct qlogicfas408_priv *)&((x)->device->host->hostdata[0]) +#define get_priv_by_host(x) (struct qlogicfas408_priv *)&((x)->hostdata[0]) + +irqreturn_t qlogicfas408_ihandl(int irq, void *dev_id, struct pt_regs *regs); +int qlogicfas408_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)); +int qlogicfas408_biosparam(struct scsi_device * disk, + struct block_device *dev, + sector_t capacity, int ip[]); +int qlogicfas408_abort(Scsi_Cmnd * cmd); +int qlogicfas408_bus_reset(Scsi_Cmnd * cmd); +int qlogicfas408_host_reset(Scsi_Cmnd * cmd); +int qlogicfas408_device_reset(Scsi_Cmnd * cmd); +char *qlogicfas408_info(struct Scsi_Host *host); +int qlogicfas408_get_chip_type(int qbase, int int_type); +void qlogicfas408_setup(int qbase, int id, int int_type); +int qlogicfas408_detect(int qbase, int int_type); +void qlogicfas408_disable_ints(struct qlogicfas408_priv *priv); +#endif /* __QLOGICFAS408_H */ + diff -Nru a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c --- a/drivers/scsi/sata_promise.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/sata_promise.c Tue May 18 23:38:08 2004 @@ -1,6 +1,10 @@ /* * sata_promise.c - Promise SATA * + * Maintained by: Jeff Garzik + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. + * * Copyright 2003-2004 Red Hat, Inc. * * The contents of this file are subject to the Open @@ -33,16 +37,14 @@ #include "hosts.h" #include #include +#include "sata_promise.h" #define DRV_NAME "sata_promise" -#define DRV_VERSION "0.92" +#define DRV_VERSION "1.00" enum { - PDC_PRD_TBL = 0x44, /* Direct command DMA table addr */ - PDC_PKT_SUBMIT = 0x40, /* Command packet pointer addr */ - PDC_HDMA_PKT_SUBMIT = 0x100, /* Host DMA packet pointer addr */ PDC_INT_SEQMASK = 0x40, /* Mask of asserted SEQ INTs */ PDC_TBG_MODE = 0x41, /* TBG mode */ PDC_FLASH_CTL = 0x44, /* Flash control register */ @@ -51,141 +53,39 @@ PDC_CTLSTAT = 0x60, /* IDE control and status (per port) */ PDC_SATA_PLUG_CSR = 0x6C, /* SATA Plug control/status reg */ PDC_SLEW_CTL = 0x470, /* slew rate control reg */ - PDC_HDMA_CTLSTAT = 0x12C, /* Host DMA control / status */ - - PDC_20621_SEQCTL = 0x400, - PDC_20621_SEQMASK = 0x480, - PDC_20621_GENERAL_CTL = 0x484, - PDC_20621_PAGE_SIZE = (32 * 1024), - - /* chosen, not constant, values; we design our own DIMM mem map */ - PDC_20621_DIMM_WINDOW = 0x0C, /* page# for 32K DIMM window */ - PDC_20621_DIMM_BASE = 0x00200000, - PDC_20621_DIMM_DATA = (64 * 1024), - PDC_DIMM_DATA_STEP = (256 * 1024), - PDC_DIMM_WINDOW_STEP = (8 * 1024), - PDC_DIMM_HOST_PRD = (6 * 1024), - PDC_DIMM_HOST_PKT = (128 * 0), - PDC_DIMM_HPKT_PRD = (128 * 1), - PDC_DIMM_ATA_PKT = (128 * 2), - PDC_DIMM_APKT_PRD = (128 * 3), - PDC_DIMM_HEADER_SZ = PDC_DIMM_APKT_PRD + 128, - PDC_PAGE_WINDOW = 0x40, - PDC_PAGE_DATA = PDC_PAGE_WINDOW + - (PDC_20621_DIMM_DATA / PDC_20621_PAGE_SIZE), - PDC_PAGE_SET = PDC_DIMM_DATA_STEP / PDC_20621_PAGE_SIZE, - PDC_CHIP0_OFS = 0xC0000, /* offset of chip #0 */ - - PDC_20621_ERR_MASK = (1<<19) | (1<<20) | (1<<21) | (1<<22) | - (1<<23), PDC_ERR_MASK = (1<<19) | (1<<20) | (1<<21) | (1<<22) | (1<<8) | (1<<9) | (1<<10), board_2037x = 0, /* FastTrak S150 TX2plus */ board_20319 = 1, /* FastTrak S150 TX4 */ - board_20621 = 2, /* FastTrak S150 SX4 */ PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ - PDC_FLAG_20621 = (1 << 30), /* we have a 20621 */ PDC_RESET = (1 << 11), /* HDMA reset */ - - PDC_MAX_HDMA = 32, - PDC_HDMA_Q_MASK = (PDC_MAX_HDMA - 1), - - PDC_DIMM0_SPD_DEV_ADDRESS = 0x50, - PDC_DIMM1_SPD_DEV_ADDRESS = 0x51, - PDC_MAX_DIMM_MODULE = 0x02, - PDC_I2C_CONTROL_OFFSET = 0x48, - PDC_I2C_ADDR_DATA_OFFSET = 0x4C, - PDC_DIMM0_CONTROL_OFFSET = 0x80, - PDC_DIMM1_CONTROL_OFFSET = 0x84, - PDC_SDRAM_CONTROL_OFFSET = 0x88, - PDC_I2C_WRITE = 0x00000000, - PDC_I2C_READ = 0x00000040, - PDC_I2C_START = 0x00000080, - PDC_I2C_MASK_INT = 0x00000020, - PDC_I2C_COMPLETE = 0x00010000, - PDC_I2C_NO_ACK = 0x00100000, - PDC_DIMM_SPD_SUBADDRESS_START = 0x00, - PDC_DIMM_SPD_SUBADDRESS_END = 0x7F, - PDC_DIMM_SPD_ROW_NUM = 3, - PDC_DIMM_SPD_COLUMN_NUM = 4, - PDC_DIMM_SPD_MODULE_ROW = 5, - PDC_DIMM_SPD_TYPE = 11, - PDC_DIMM_SPD_FRESH_RATE = 12, - PDC_DIMM_SPD_BANK_NUM = 17, - PDC_DIMM_SPD_CAS_LATENCY = 18, - PDC_DIMM_SPD_ATTRIBUTE = 21, - PDC_DIMM_SPD_ROW_PRE_CHARGE = 27, - PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28, - PDC_DIMM_SPD_RAS_CAS_DELAY = 29, - PDC_DIMM_SPD_ACTIVE_PRECHARGE = 30, - PDC_DIMM_SPD_SYSTEM_FREQ = 126, - PDC_CTL_STATUS = 0x08, - PDC_DIMM_WINDOW_CTLR = 0x0C, - PDC_TIME_CONTROL = 0x3C, - PDC_TIME_PERIOD = 0x40, - PDC_TIME_COUNTER = 0x44, - PDC_GENERAL_CTLR = 0x484, - PCI_PLL_INIT = 0x8A531824, - PCI_X_TCOUNT = 0xEE1E5CFF }; struct pdc_port_priv { - u8 dimm_buf[(ATA_PRD_SZ * ATA_MAX_PRD) + 512]; u8 *pkt; dma_addr_t pkt_dma; }; -struct pdc_host_priv { - void *dimm_mmio; - - unsigned int doing_hdma; - unsigned int hdma_prod; - unsigned int hdma_cons; - struct { - struct ata_queued_cmd *qc; - unsigned int seq; - unsigned long pkt_ofs; - } hdma[32]; -}; - - static u32 pdc_sata_scr_read (struct ata_port *ap, unsigned int sc_reg); static void pdc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); +static void pdc_dma_setup(struct ata_queued_cmd *qc); static void pdc_dma_start(struct ata_queued_cmd *qc); -static void pdc20621_dma_start(struct ata_queued_cmd *qc); static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *regs); -static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs); static void pdc_eng_timeout(struct ata_port *ap); -static void pdc_20621_phy_reset (struct ata_port *ap); static int pdc_port_start(struct ata_port *ap); static void pdc_port_stop(struct ata_port *ap); static void pdc_phy_reset(struct ata_port *ap); static void pdc_fill_sg(struct ata_queued_cmd *qc); -static void pdc20621_fill_sg(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); -static void pdc20621_host_stop(struct ata_host_set *host_set); static inline void pdc_dma_complete (struct ata_port *ap, struct ata_queued_cmd *qc, int have_err); -static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe); -static int pdc20621_detect_dimm(struct ata_probe_ent *pe); -static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, - u32 device, u32 subaddr, u32 *pdata); -static int pdc20621_prog_dimm0(struct ata_probe_ent *pe); -static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe); -#ifdef ATA_VERBOSE_DEBUG -static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, - void *psource, u32 offset, u32 size); -#endif -static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, - void *psource, u32 offset, u32 size); - static Scsi_Host_Template pdc_sata_sht = { .module = THIS_MODULE, @@ -212,6 +112,7 @@ .check_status = ata_check_status_mmio, .exec_command = pdc_exec_command_mmio, .phy_reset = pdc_phy_reset, + .bmdma_setup = pdc_dma_setup, .bmdma_start = pdc_dma_start, .fill_sg = pdc_fill_sg, .eng_timeout = pdc_eng_timeout, @@ -222,22 +123,6 @@ .port_stop = pdc_port_stop, }; -static struct ata_port_operations pdc_20621_ops = { - .port_disable = ata_port_disable, - .tf_load = pdc_tf_load_mmio, - .tf_read = ata_tf_read_mmio, - .check_status = ata_check_status_mmio, - .exec_command = pdc_exec_command_mmio, - .phy_reset = pdc_20621_phy_reset, - .bmdma_start = pdc20621_dma_start, - .fill_sg = pdc20621_fill_sg, - .eng_timeout = pdc_eng_timeout, - .irq_handler = pdc20621_interrupt, - .port_start = pdc_port_start, - .port_stop = pdc_port_stop, - .host_stop = pdc20621_host_stop, -}; - static struct ata_port_info pdc_port_info[] = { /* board_2037x */ { @@ -258,18 +143,6 @@ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ .port_ops = &pdc_sata_ops, }, - - /* board_20621 */ - { - .sht = &pdc_sata_sht, - .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | - ATA_FLAG_SRST | ATA_FLAG_MMIO | - PDC_FLAG_20621, - .pio_mask = 0x03, /* pio3-4 */ - .udma_mask = 0x7f, /* udma0-6 ; FIXME */ - .port_ops = &pdc_20621_ops, - }, - }; static struct pci_device_id pdc_sata_pci_tbl[] = { @@ -285,8 +158,6 @@ board_20319 }, { PCI_VENDOR_ID_PROMISE, 0x3319, PCI_ANY_ID, PCI_ANY_ID, 0, 0, board_20319 }, - { PCI_VENDOR_ID_PROMISE, 0x6622, PCI_ANY_ID, PCI_ANY_ID, 0, 0, - board_20621 }, { } /* terminate list */ }; @@ -299,15 +170,6 @@ }; -static void pdc20621_host_stop(struct ata_host_set *host_set) -{ - struct pdc_host_priv *hpriv = host_set->private_data; - void *dimm_mmio = hpriv->dimm_mmio; - - iounmap(dimm_mmio); - kfree(hpriv); -} - static int pdc_port_start(struct ata_port *ap) { struct pci_dev *pdev = ap->host_set->pdev; @@ -355,14 +217,6 @@ } -static void pdc_20621_phy_reset (struct ata_port *ap) -{ - VPRINTK("ENTER\n"); - ap->cbl = ATA_CBL_SATA; - ata_port_probe(ap); - ata_bus_reset(ap); -} - static void pdc_reset_port(struct ata_port *ap) { void *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT; @@ -407,587 +261,6 @@ writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); } -enum pdc_packet_bits { - PDC_PKT_READ = (1 << 2), - PDC_PKT_NODATA = (1 << 3), - - PDC_PKT_SIZEMASK = (1 << 7) | (1 << 6) | (1 << 5), - PDC_PKT_CLEAR_BSY = (1 << 4), - PDC_PKT_WAIT_DRDY = (1 << 3) | (1 << 4), - PDC_LAST_REG = (1 << 3), - - PDC_REG_DEVCTL = (1 << 3) | (1 << 2) | (1 << 1), -}; - -static inline unsigned int pdc_pkt_header(struct ata_taskfile *tf, - dma_addr_t sg_table, - unsigned int devno, u8 *buf) -{ - u8 dev_reg; - u32 *buf32 = (u32 *) buf; - - /* set control bits (byte 0), zero delay seq id (byte 3), - * and seq id (byte 2) - */ - switch (tf->protocol) { - case ATA_PROT_DMA: - if (!(tf->flags & ATA_TFLAG_WRITE)) - buf32[0] = cpu_to_le32(PDC_PKT_READ); - else - buf32[0] = 0; - break; - - case ATA_PROT_NODATA: - buf32[0] = cpu_to_le32(PDC_PKT_NODATA); - break; - - default: - BUG(); - break; - } - - buf32[1] = cpu_to_le32(sg_table); /* S/G table addr */ - buf32[2] = 0; /* no next-packet */ - - if (devno == 0) - dev_reg = ATA_DEVICE_OBS; - else - dev_reg = ATA_DEVICE_OBS | ATA_DEV1; - - /* select device */ - buf[12] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE; - buf[13] = dev_reg; - - /* device control register */ - buf[14] = (1 << 5) | PDC_REG_DEVCTL; - buf[15] = tf->ctl; - - return 16; /* offset of next byte */ -} - -static inline unsigned int pdc_pkt_footer(struct ata_taskfile *tf, u8 *buf, - unsigned int i) -{ - if (tf->flags & ATA_TFLAG_DEVICE) { - buf[i++] = (1 << 5) | ATA_REG_DEVICE; - buf[i++] = tf->device; - } - - /* and finally the command itself; also includes end-of-pkt marker */ - buf[i++] = (1 << 5) | PDC_LAST_REG | ATA_REG_CMD; - buf[i++] = tf->command; - - return i; -} - -static inline unsigned int pdc_prep_lba28(struct ata_taskfile *tf, u8 *buf, unsigned int i) -{ - /* the "(1 << 5)" should be read "(count << 5)" */ - - /* ATA command block registers */ - buf[i++] = (1 << 5) | ATA_REG_FEATURE; - buf[i++] = tf->feature; - - buf[i++] = (1 << 5) | ATA_REG_NSECT; - buf[i++] = tf->nsect; - - buf[i++] = (1 << 5) | ATA_REG_LBAL; - buf[i++] = tf->lbal; - - buf[i++] = (1 << 5) | ATA_REG_LBAM; - buf[i++] = tf->lbam; - - buf[i++] = (1 << 5) | ATA_REG_LBAH; - buf[i++] = tf->lbah; - - return i; -} - -static inline unsigned int pdc_prep_lba48(struct ata_taskfile *tf, u8 *buf, unsigned int i) -{ - /* the "(2 << 5)" should be read "(count << 5)" */ - - /* ATA command block registers */ - buf[i++] = (2 << 5) | ATA_REG_FEATURE; - buf[i++] = tf->hob_feature; - buf[i++] = tf->feature; - - buf[i++] = (2 << 5) | ATA_REG_NSECT; - buf[i++] = tf->hob_nsect; - buf[i++] = tf->nsect; - - buf[i++] = (2 << 5) | ATA_REG_LBAL; - buf[i++] = tf->hob_lbal; - buf[i++] = tf->lbal; - - buf[i++] = (2 << 5) | ATA_REG_LBAM; - buf[i++] = tf->hob_lbam; - buf[i++] = tf->lbam; - - buf[i++] = (2 << 5) | ATA_REG_LBAH; - buf[i++] = tf->hob_lbah; - buf[i++] = tf->lbah; - - return i; -} - -static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf, - unsigned int portno, - unsigned int total_len) -{ - u32 addr; - unsigned int dw = PDC_DIMM_APKT_PRD >> 2; - u32 *buf32 = (u32 *) buf; - - /* output ATA packet S/G table */ - addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA + - (PDC_DIMM_DATA_STEP * portno); - VPRINTK("ATA sg addr 0x%x, %d\n", addr, addr); - buf32[dw] = cpu_to_le32(addr); - buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT); - - VPRINTK("ATA PSG @ %x == (0x%x, 0x%x)\n", - PDC_20621_DIMM_BASE + - (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_APKT_PRD, - buf32[dw], buf32[dw + 1]); -} - -static inline void pdc20621_host_sg(struct ata_taskfile *tf, u8 *buf, - unsigned int portno, - unsigned int total_len) -{ - u32 addr; - unsigned int dw = PDC_DIMM_HPKT_PRD >> 2; - u32 *buf32 = (u32 *) buf; - - /* output Host DMA packet S/G table */ - addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA + - (PDC_DIMM_DATA_STEP * portno); - - buf32[dw] = cpu_to_le32(addr); - buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT); - - VPRINTK("HOST PSG @ %x == (0x%x, 0x%x)\n", - PDC_20621_DIMM_BASE + - (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_HPKT_PRD, - buf32[dw], buf32[dw + 1]); -} - -static inline unsigned int pdc20621_ata_pkt(struct ata_taskfile *tf, - unsigned int devno, u8 *buf, - unsigned int portno) -{ - unsigned int i, dw; - u32 *buf32 = (u32 *) buf; - u8 dev_reg; - - unsigned int dimm_sg = PDC_20621_DIMM_BASE + - (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_APKT_PRD; - VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg); - - i = PDC_DIMM_ATA_PKT; - - /* - * Set up ATA packet - */ - if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE))) - buf[i++] = PDC_PKT_READ; - else if (tf->protocol == ATA_PROT_NODATA) - buf[i++] = PDC_PKT_NODATA; - else - buf[i++] = 0; - buf[i++] = 0; /* reserved */ - buf[i++] = portno + 1; /* seq. id */ - buf[i++] = 0xff; /* delay seq. id */ - - /* dimm dma S/G, and next-pkt */ - dw = i >> 2; - buf32[dw] = cpu_to_le32(dimm_sg); - buf32[dw + 1] = 0; - i += 8; - - if (devno == 0) - dev_reg = ATA_DEVICE_OBS; - else - dev_reg = ATA_DEVICE_OBS | ATA_DEV1; - - /* select device */ - buf[i++] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE; - buf[i++] = dev_reg; - - /* device control register */ - buf[i++] = (1 << 5) | PDC_REG_DEVCTL; - buf[i++] = tf->ctl; - - return i; -} - -static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf, - unsigned int portno) -{ - unsigned int dw; - u32 tmp, *buf32 = (u32 *) buf; - - unsigned int host_sg = PDC_20621_DIMM_BASE + - (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_HOST_PRD; - unsigned int dimm_sg = PDC_20621_DIMM_BASE + - (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_HPKT_PRD; - VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg); - VPRINTK("host_sg == 0x%x, %d\n", host_sg, host_sg); - - dw = PDC_DIMM_HOST_PKT >> 2; - - /* - * Set up Host DMA packet - */ - if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE))) - tmp = PDC_PKT_READ; - else - tmp = 0; - tmp |= ((portno + 1 + 4) << 16); /* seq. id */ - tmp |= (0xff << 24); /* delay seq. id */ - buf32[dw + 0] = cpu_to_le32(tmp); - buf32[dw + 1] = cpu_to_le32(host_sg); - buf32[dw + 2] = cpu_to_le32(dimm_sg); - buf32[dw + 3] = 0; - - VPRINTK("HOST PKT @ %x == (0x%x 0x%x 0x%x 0x%x)\n", - PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * portno) + - PDC_DIMM_HOST_PKT, - buf32[dw + 0], - buf32[dw + 1], - buf32[dw + 2], - buf32[dw + 3]); -} - -static void pdc20621_fill_sg(struct ata_queued_cmd *qc) -{ - struct scatterlist *sg = qc->sg; - struct ata_port *ap = qc->ap; - struct pdc_port_priv *pp = ap->private_data; - void *mmio = ap->host_set->mmio_base; - struct pdc_host_priv *hpriv = ap->host_set->private_data; - void *dimm_mmio = hpriv->dimm_mmio; - unsigned int portno = ap->port_no; - unsigned int i, last, idx, total_len = 0, sgt_len; - u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ]; - - VPRINTK("ata%u: ENTER\n", ap->id); - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - /* - * Build S/G table - */ - last = qc->n_elem; - idx = 0; - for (i = 0; i < last; i++) { - buf[idx++] = cpu_to_le32(sg_dma_address(&sg[i])); - buf[idx++] = cpu_to_le32(sg_dma_len(&sg[i])); - total_len += sg[i].length; - } - buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT); - sgt_len = idx * 4; - - /* - * Build ATA, host DMA packets - */ - pdc20621_host_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len); - pdc20621_host_pkt(&qc->tf, &pp->dimm_buf[0], portno); - - pdc20621_ata_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len); - i = pdc20621_ata_pkt(&qc->tf, qc->dev->devno, &pp->dimm_buf[0], portno); - - if (qc->tf.flags & ATA_TFLAG_LBA48) - i = pdc_prep_lba48(&qc->tf, &pp->dimm_buf[0], i); - else - i = pdc_prep_lba28(&qc->tf, &pp->dimm_buf[0], i); - - pdc_pkt_footer(&qc->tf, &pp->dimm_buf[0], i); - - /* copy three S/G tables and two packets to DIMM MMIO window */ - memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP), - &pp->dimm_buf, PDC_DIMM_HEADER_SZ); - memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP) + - PDC_DIMM_HOST_PRD, - &pp->dimm_buf[PDC_DIMM_HEADER_SZ], sgt_len); - - /* force host FIFO dump */ - writel(0x00000001, mmio + PDC_20621_GENERAL_CTL); - - readl(dimm_mmio); /* MMIO PCI posting flush */ - - VPRINTK("ata pkt buf ofs %u, prd size %u, mmio copied\n", i, sgt_len); -} - -static void __pdc20621_push_hdma(struct ata_queued_cmd *qc, - unsigned int seq, - u32 pkt_ofs) -{ - struct ata_port *ap = qc->ap; - struct ata_host_set *host_set = ap->host_set; - void *mmio = host_set->mmio_base; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); - readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ - - writel(pkt_ofs, mmio + PDC_HDMA_PKT_SUBMIT); - readl(mmio + PDC_HDMA_PKT_SUBMIT); /* flush */ -} - -static void pdc20621_push_hdma(struct ata_queued_cmd *qc, - unsigned int seq, - u32 pkt_ofs) -{ - struct ata_port *ap = qc->ap; - struct pdc_host_priv *pp = ap->host_set->private_data; - unsigned int idx = pp->hdma_prod & PDC_HDMA_Q_MASK; - - if (!pp->doing_hdma) { - __pdc20621_push_hdma(qc, seq, pkt_ofs); - pp->doing_hdma = 1; - return; - } - - pp->hdma[idx].qc = qc; - pp->hdma[idx].seq = seq; - pp->hdma[idx].pkt_ofs = pkt_ofs; - pp->hdma_prod++; -} - -static void pdc20621_pop_hdma(struct ata_queued_cmd *qc) -{ - struct ata_port *ap = qc->ap; - struct pdc_host_priv *pp = ap->host_set->private_data; - unsigned int idx = pp->hdma_cons & PDC_HDMA_Q_MASK; - - /* if nothing on queue, we're done */ - if (pp->hdma_prod == pp->hdma_cons) { - pp->doing_hdma = 0; - return; - } - - __pdc20621_push_hdma(pp->hdma[idx].qc, pp->hdma[idx].seq, - pp->hdma[idx].pkt_ofs); - pp->hdma_cons++; -} - -#ifdef ATA_VERBOSE_DEBUG -static void pdc20621_dump_hdma(struct ata_queued_cmd *qc) -{ - struct ata_port *ap = qc->ap; - unsigned int port_no = ap->port_no; - struct pdc_host_priv *hpriv = ap->host_set->private_data; - void *dimm_mmio = hpriv->dimm_mmio; - - dimm_mmio += (port_no * PDC_DIMM_WINDOW_STEP); - dimm_mmio += PDC_DIMM_HOST_PKT; - - printk(KERN_ERR "HDMA[0] == 0x%08X\n", readl(dimm_mmio)); - printk(KERN_ERR "HDMA[1] == 0x%08X\n", readl(dimm_mmio + 4)); - printk(KERN_ERR "HDMA[2] == 0x%08X\n", readl(dimm_mmio + 8)); - printk(KERN_ERR "HDMA[3] == 0x%08X\n", readl(dimm_mmio + 12)); -} -#else -static inline void pdc20621_dump_hdma(struct ata_queued_cmd *qc) { } -#endif /* ATA_VERBOSE_DEBUG */ - -static void pdc20621_dma_start(struct ata_queued_cmd *qc) -{ - struct ata_port *ap = qc->ap; - struct ata_host_set *host_set = ap->host_set; - unsigned int port_no = ap->port_no; - void *mmio = host_set->mmio_base; - unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); - u8 seq = (u8) (port_no + 1); - unsigned int doing_hdma = 0, port_ofs; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - VPRINTK("ata%u: ENTER\n", ap->id); - - port_ofs = PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no); - - /* if writing, we (1) DMA to DIMM, then (2) do ATA command */ - if (rw) { - doing_hdma = 1; - seq += 4; - } - - wmb(); /* flush PRD, pkt writes */ - - if (doing_hdma) { - pdc20621_dump_hdma(qc); - pdc20621_push_hdma(qc, seq, port_ofs + PDC_DIMM_HOST_PKT); - VPRINTK("queued ofs 0x%x (%u), seq %u\n", - port_ofs + PDC_DIMM_HOST_PKT, - port_ofs + PDC_DIMM_HOST_PKT, - seq); - } else { - writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); - readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ - - writel(port_ofs + PDC_DIMM_ATA_PKT, - (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); - readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); - VPRINTK("submitted ofs 0x%x (%u), seq %u\n", - port_ofs + PDC_DIMM_ATA_PKT, - port_ofs + PDC_DIMM_ATA_PKT, - seq); - } -} - -static inline unsigned int pdc20621_host_intr( struct ata_port *ap, - struct ata_queued_cmd *qc, - unsigned int doing_hdma, - void *mmio) -{ - unsigned int port_no = ap->port_no; - unsigned int port_ofs = - PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no); - u8 status; - unsigned int handled = 0; - - VPRINTK("ENTER\n"); - - if ((qc->tf.protocol == ATA_PROT_DMA) && /* read */ - (!(qc->tf.flags & ATA_TFLAG_WRITE))) { - - /* step two - DMA from DIMM to host */ - if (doing_hdma) { - VPRINTK("ata%u: read hdma, 0x%x 0x%x\n", ap->id, - readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); - pdc_dma_complete(ap, qc, 0); - pdc20621_pop_hdma(qc); - } - - /* step one - exec ATA command */ - else { - u8 seq = (u8) (port_no + 1 + 4); - VPRINTK("ata%u: read ata, 0x%x 0x%x\n", ap->id, - readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); - - /* submit hdma pkt */ - pdc20621_dump_hdma(qc); - pdc20621_push_hdma(qc, seq, - port_ofs + PDC_DIMM_HOST_PKT); - } - handled = 1; - - } else if (qc->tf.protocol == ATA_PROT_DMA) { /* write */ - - /* step one - DMA from host to DIMM */ - if (doing_hdma) { - u8 seq = (u8) (port_no + 1); - VPRINTK("ata%u: write hdma, 0x%x 0x%x\n", ap->id, - readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); - - /* submit ata pkt */ - writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); - readl(mmio + PDC_20621_SEQCTL + (seq * 4)); - writel(port_ofs + PDC_DIMM_ATA_PKT, - (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); - readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); - } - - /* step two - execute ATA command */ - else { - VPRINTK("ata%u: write ata, 0x%x 0x%x\n", ap->id, - readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); - pdc_dma_complete(ap, qc, 0); - pdc20621_pop_hdma(qc); - } - handled = 1; - - /* command completion, but no data xfer */ - } else if (qc->tf.protocol == ATA_PROT_NODATA) { - - status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); - DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status); - ata_qc_complete(qc, status, 0); - handled = 1; - - } else { - ap->stats.idle_irq++; - } - - return handled; -} - -static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs) -{ - struct ata_host_set *host_set = dev_instance; - struct ata_port *ap; - u32 mask = 0; - unsigned int i, tmp, port_no; - unsigned int handled = 0; - void *mmio_base; - - VPRINTK("ENTER\n"); - - if (!host_set || !host_set->mmio_base) { - VPRINTK("QUICK EXIT\n"); - return IRQ_NONE; - } - - mmio_base = host_set->mmio_base; - - /* reading should also clear interrupts */ - mmio_base += PDC_CHIP0_OFS; - mask = readl(mmio_base + PDC_20621_SEQMASK); - VPRINTK("mask == 0x%x\n", mask); - - if (mask == 0xffffffff) { - VPRINTK("QUICK EXIT 2\n"); - return IRQ_NONE; - } - mask &= 0xffff; /* only 16 tags possible */ - if (!mask) { - VPRINTK("QUICK EXIT 3\n"); - return IRQ_NONE; - } - - spin_lock(&host_set->lock); - - for (i = 1; i < 9; i++) { - port_no = i - 1; - if (port_no > 3) - port_no -= 4; - if (port_no >= host_set->n_ports) - ap = NULL; - else - ap = host_set->ports[port_no]; - tmp = mask & (1 << i); - VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp); - if (tmp && ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) { - struct ata_queued_cmd *qc; - - qc = ata_qc_from_tag(ap, ap->active_tag); - if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0)) - handled += pdc20621_host_intr(ap, qc, (i > 4), - mmio_base); - } - } - - spin_unlock(&host_set->lock); - - VPRINTK("mask == 0x%x\n", mask); - - VPRINTK("EXIT\n"); - - return IRQ_RETVAL(handled); -} - static void pdc_fill_sg(struct ata_queued_cmd *qc) { struct pdc_port_priv *pp = qc->ap->private_data; @@ -1014,8 +287,7 @@ u8 err_bit = have_err ? ATA_ERR : 0; /* get drive status; clear intr; complete txn */ - ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag), - ata_wait_idle(ap) | err_bit, 0); + ata_qc_complete(qc, ata_wait_idle(ap) | err_bit); } static void pdc_eng_timeout(struct ata_port *ap) @@ -1043,8 +315,7 @@ switch (qc->tf.protocol) { case ATA_PROT_DMA: printk(KERN_ERR "ata%u: DMA timeout\n", ap->id); - ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag), - ata_wait_idle(ap) | ATA_ERR, 0); + ata_qc_complete(qc, ata_wait_idle(ap) | ATA_ERR); break; case ATA_PROT_NODATA: @@ -1053,7 +324,7 @@ printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n", ap->id, qc->tf.command, drv_stat); - ata_qc_complete(qc, drv_stat, 1); + ata_qc_complete(qc, drv_stat); break; default: @@ -1062,7 +333,7 @@ printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n", ap->id, qc->tf.command, drv_stat); - ata_qc_complete(qc, drv_stat, 1); + ata_qc_complete(qc, drv_stat); break; } @@ -1095,7 +366,7 @@ DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status); if (have_err) status |= ATA_ERR; - ata_qc_complete(qc, status, 0); + ata_qc_complete(qc, status); handled = 1; break; @@ -1148,7 +419,7 @@ struct ata_queued_cmd *qc; qc = ata_qc_from_tag(ap, ap->active_tag); - if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0)) + if (qc && (!(qc->tf.ctl & ATA_NIEN))) handled += pdc_host_intr(ap, qc); } } @@ -1160,6 +431,12 @@ return IRQ_RETVAL(handled); } +static void pdc_dma_setup(struct ata_queued_cmd *qc) +{ + /* nothing for now. later, we will call standard + * code in libata-core for ATAPI here */ +} + static void pdc_dma_start(struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; @@ -1210,456 +487,11 @@ } -#ifdef ATA_VERBOSE_DEBUG -static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource, - u32 offset, u32 size) -{ - u32 window_size; - u16 idx; - u8 page_mask; - long dist; - void *mmio = pe->mmio_base; - struct pdc_host_priv *hpriv = pe->private_data; - void *dimm_mmio = hpriv->dimm_mmio; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - page_mask = 0x00; - window_size = 0x2000 * 4; /* 32K byte uchar size */ - idx = (u16) (offset / window_size); - - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - - offset -= (idx * window_size); - idx++; - dist = ((long) (window_size - (offset + size))) >= 0 ? size : - (long) (window_size - offset); - memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4), - dist); - - psource += dist; - size -= dist; - for (; (long) size >= (long) window_size ;) { - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - memcpy_fromio((char *) psource, (char *) (dimm_mmio), - window_size / 4); - psource += window_size; - size -= window_size; - idx ++; - } - - if (size) { - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - memcpy_fromio((char *) psource, (char *) (dimm_mmio), - size / 4); - } -} -#endif - - -static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, - u32 offset, u32 size) -{ - u32 window_size; - u16 idx; - u8 page_mask; - long dist; - void *mmio = pe->mmio_base; - struct pdc_host_priv *hpriv = pe->private_data; - void *dimm_mmio = hpriv->dimm_mmio; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - page_mask = 0x00; - window_size = 0x2000 * 4; /* 32K byte uchar size */ - idx = (u16) (offset / window_size); - - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - offset -= (idx * window_size); - idx++; - dist = ((long) (window_size - (offset + size))) >= 0 ? size : - (long) (window_size - offset); - memcpy_toio((char *) (dimm_mmio + offset / 4), (char *) psource, dist); - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - - psource += dist; - size -= dist; - for (; (long) size >= (long) window_size ;) { - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - memcpy_toio((char *) (dimm_mmio), (char *) psource, - window_size / 4); - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - psource += window_size; - size -= window_size; - idx ++; - } - - if (size) { - writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); - readl(mmio + PDC_DIMM_WINDOW_CTLR); - memcpy_toio((char *) (dimm_mmio), (char *) psource, size / 4); - writel(0x01, mmio + PDC_GENERAL_CTLR); - readl(mmio + PDC_GENERAL_CTLR); - } -} - - -static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device, - u32 subaddr, u32 *pdata) -{ - void *mmio = pe->mmio_base; - u32 i2creg = 0; - u32 status; - u32 count =0; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - i2creg |= device << 24; - i2creg |= subaddr << 16; - - /* Set the device and subaddress */ - writel(i2creg, mmio + PDC_I2C_ADDR_DATA_OFFSET); - readl(mmio + PDC_I2C_ADDR_DATA_OFFSET); - - /* Write Control to perform read operation, mask int */ - writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT, - mmio + PDC_I2C_CONTROL_OFFSET); - - for (count = 0; count <= 1000; count ++) { - status = readl(mmio + PDC_I2C_CONTROL_OFFSET); - if (status & PDC_I2C_COMPLETE) { - status = readl(mmio + PDC_I2C_ADDR_DATA_OFFSET); - break; - } else if (count == 1000) - return 0; - } - - *pdata = (status >> 8) & 0x000000ff; - return 1; -} - - -static int pdc20621_detect_dimm(struct ata_probe_ent *pe) -{ - u32 data=0 ; - if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, - PDC_DIMM_SPD_SYSTEM_FREQ, &data)) { - if (data == 100) - return 100; - } else - return 0; - - if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 9, &data)) { - if(data <= 0x75) - return 133; - } else - return 0; - - return 0; -} - - -static int pdc20621_prog_dimm0(struct ata_probe_ent *pe) -{ - u32 spd0[50]; - u32 data = 0; - int size, i; - u8 bdimmsize; - void *mmio = pe->mmio_base; - static const struct { - unsigned int reg; - unsigned int ofs; - } pdc_i2c_read_data [] = { - { PDC_DIMM_SPD_TYPE, 11 }, - { PDC_DIMM_SPD_FRESH_RATE, 12 }, - { PDC_DIMM_SPD_COLUMN_NUM, 4 }, - { PDC_DIMM_SPD_ATTRIBUTE, 21 }, - { PDC_DIMM_SPD_ROW_NUM, 3 }, - { PDC_DIMM_SPD_BANK_NUM, 17 }, - { PDC_DIMM_SPD_MODULE_ROW, 5 }, - { PDC_DIMM_SPD_ROW_PRE_CHARGE, 27 }, - { PDC_DIMM_SPD_ROW_ACTIVE_DELAY, 28 }, - { PDC_DIMM_SPD_RAS_CAS_DELAY, 29 }, - { PDC_DIMM_SPD_ACTIVE_PRECHARGE, 30 }, - { PDC_DIMM_SPD_CAS_LATENCY, 18 }, - }; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - for(i=0; i spd0[28]) - ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10; - data |= ((spd0[30] - spd0[29] + 9) / 10 - 2) << 12; - - if (spd0[18] & 0x08) - data |= ((0x03) << 14); - else if (spd0[18] & 0x04) - data |= ((0x02) << 14); - else if (spd0[18] & 0x01) - data |= ((0x01) << 14); - else - data |= (0 << 14); - - /* - Calculate the size of bDIMMSize (power of 2) and - merge the DIMM size by program start/end address. - */ - - bdimmsize = spd0[4] + (spd0[5] / 2) + spd0[3] + (spd0[17] / 2) + 3; - size = (1 << bdimmsize) >> 20; /* size = xxx(MB) */ - data |= (((size / 16) - 1) << 16); - data |= (0 << 23); - data |= 8; - writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET); - readl(mmio + PDC_DIMM0_CONTROL_OFFSET); - return size; -} - - -static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe) -{ - u32 data, spd0; - int error, i; - void *mmio = pe->mmio_base; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - /* - Set To Default : DIMM Module Global Control Register (0x022259F1) - DIMM Arbitration Disable (bit 20) - DIMM Data/Control Output Driving Selection (bit12 - bit15) - Refresh Enable (bit 17) - */ - - data = 0x022259F1; - writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); - readl(mmio + PDC_SDRAM_CONTROL_OFFSET); - - /* Turn on for ECC */ - pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, - PDC_DIMM_SPD_TYPE, &spd0); - if (spd0 == 0x02) { - data |= (0x01 << 16); - writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); - readl(mmio + PDC_SDRAM_CONTROL_OFFSET); - printk(KERN_ERR "Local DIMM ECC Enabled\n"); - } - - /* DIMM Initialization Select/Enable (bit 18/19) */ - data &= (~(1<<18)); - data |= (1<<19); - writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); - - error = 1; - for (i = 1; i <= 10; i++) { /* polling ~5 secs */ - data = readl(mmio + PDC_SDRAM_CONTROL_OFFSET); - if (!(data & (1<<19))) { - error = 0; - break; - } - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout((i * 100) * HZ / 1000); - } - return error; -} - - -static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe) -{ - int speed, size, length; - u32 addr,spd0,pci_status; - u32 tmp=0; - u32 time_period=0; - u32 tcount=0; - u32 ticks=0; - u32 clock=0; - u32 fparam=0; - void *mmio = pe->mmio_base; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - /* Initialize PLL based upon PCI Bus Frequency */ - - /* Initialize Time Period Register */ - writel(0xffffffff, mmio + PDC_TIME_PERIOD); - time_period = readl(mmio + PDC_TIME_PERIOD); - VPRINTK("Time Period Register (0x40): 0x%x\n", time_period); - - /* Enable timer */ - writel(0x00001a0, mmio + PDC_TIME_CONTROL); - readl(mmio + PDC_TIME_CONTROL); - - /* Wait 3 seconds */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(3 * HZ); - - /* - When timer is enabled, counter is decreased every internal - clock cycle. - */ - - tcount = readl(mmio + PDC_TIME_COUNTER); - VPRINTK("Time Counter Register (0x44): 0x%x\n", tcount); - - /* - If SX4 is on PCI-X bus, after 3 seconds, the timer counter - register should be >= (0xffffffff - 3x10^8). - */ - if(tcount >= PCI_X_TCOUNT) { - ticks = (time_period - tcount); - VPRINTK("Num counters 0x%x (%d)\n", ticks, ticks); - - clock = (ticks / 300000); - VPRINTK("10 * Internal clk = 0x%x (%d)\n", clock, clock); - - clock = (clock * 33); - VPRINTK("10 * Internal clk * 33 = 0x%x (%d)\n", clock, clock); - - /* PLL F Param (bit 22:16) */ - fparam = (1400000 / clock) - 2; - VPRINTK("PLL F Param: 0x%x (%d)\n", fparam, fparam); - - /* OD param = 0x2 (bit 31:30), R param = 0x5 (bit 29:25) */ - pci_status = (0x8a001824 | (fparam << 16)); - } else - pci_status = PCI_PLL_INIT; - - /* Initialize PLL. */ - VPRINTK("pci_status: 0x%x\n", pci_status); - writel(pci_status, mmio + PDC_CTL_STATUS); - readl(mmio + PDC_CTL_STATUS); - - /* - Read SPD of DIMM by I2C interface, - and program the DIMM Module Controller. - */ - if (!(speed = pdc20621_detect_dimm(pe))) { - printk(KERN_ERR "Detect Local DIMM Fail\n"); - return 1; /* DIMM error */ - } - VPRINTK("Local DIMM Speed = %d\n", speed); - - /* Programming DIMM0 Module Control Register (index_CID0:80h) */ - size = pdc20621_prog_dimm0(pe); - VPRINTK("Local DIMM Size = %dMB\n",size); - - /* Programming DIMM Module Global Control Register (index_CID0:88h) */ - if (pdc20621_prog_dimm_global(pe)) { - printk(KERN_ERR "Programming DIMM Module Global Control Register Fail\n"); - return 1; - } - -#ifdef ATA_VERBOSE_DEBUG - { - u8 test_parttern1[40] = {0x55,0xAA,'P','r','o','m','i','s','e',' ', - 'N','o','t',' ','Y','e','t',' ','D','e','f','i','n','e','d',' ', - '1','.','1','0', - '9','8','0','3','1','6','1','2',0,0}; - u8 test_parttern2[40] = {0}; - - pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x10040, 40); - pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x40, 40); - - pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x10040, 40); - pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40); - printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], - test_parttern2[1], &(test_parttern2[2])); - pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040, - 40); - printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], - test_parttern2[1], &(test_parttern2[2])); - - pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x40, 40); - pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40); - printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], - test_parttern2[1], &(test_parttern2[2])); - } -#endif - - /* ECC initiliazation. */ - - pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, - PDC_DIMM_SPD_TYPE, &spd0); - if (spd0 == 0x02) { - VPRINTK("Start ECC initialization\n"); - addr = 0; - length = size * 1024 * 1024; - while (addr < length) { - pdc20621_put_to_dimm(pe, (void *) &tmp, addr, - sizeof(u32)); - addr += sizeof(u32); - } - VPRINTK("Finish ECC initialization\n"); - } - return 0; -} - - -static void pdc_20621_init(struct ata_probe_ent *pe) -{ - u32 tmp; - void *mmio = pe->mmio_base; - - /* hard-code chip #0 */ - mmio += PDC_CHIP0_OFS; - - /* - * Select page 0x40 for our 32k DIMM window - */ - tmp = readl(mmio + PDC_20621_DIMM_WINDOW) & 0xffff0000; - tmp |= PDC_PAGE_WINDOW; /* page 40h; arbitrarily selected */ - writel(tmp, mmio + PDC_20621_DIMM_WINDOW); - - /* - * Reset Host DMA - */ - tmp = readl(mmio + PDC_HDMA_CTLSTAT); - tmp |= PDC_RESET; - writel(tmp, mmio + PDC_HDMA_CTLSTAT); - readl(mmio + PDC_HDMA_CTLSTAT); /* flush */ - - udelay(10); - - tmp = readl(mmio + PDC_HDMA_CTLSTAT); - tmp &= ~PDC_RESET; - writel(tmp, mmio + PDC_HDMA_CTLSTAT); - readl(mmio + PDC_HDMA_CTLSTAT); /* flush */ -} - static void pdc_host_init(unsigned int chip_id, struct ata_probe_ent *pe) { void *mmio = pe->mmio_base; u32 tmp; - if (chip_id == board_20621) - BUG(); - /* * Except for the hotplug stuff, this is voodoo from the * Promise driver. Label this entire section @@ -1687,7 +519,7 @@ readl(mmio + PDC_TBG_MODE); /* flush */ set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(msecs_to_jiffies(10)); + schedule_timeout(msecs_to_jiffies(10) + 1); /* adjust slew rate control register. */ tmp = readl(mmio + PDC_SLEW_CTL); @@ -1701,10 +533,8 @@ static int printed_version; struct ata_probe_ent *probe_ent = NULL; unsigned long base; - void *mmio_base, *dimm_mmio = NULL; - struct pdc_host_priv *hpriv = NULL; + void *mmio_base; unsigned int board_idx = (unsigned int) ent->driver_data; - unsigned int have_20621 = (board_idx == board_20621); int rc; if (!printed_version++) @@ -1747,25 +577,6 @@ } base = (unsigned long) mmio_base; - if (have_20621) { - hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); - if (!hpriv) { - rc = -ENOMEM; - goto err_out_iounmap; - } - memset(hpriv, 0, sizeof(*hpriv)); - - dimm_mmio = ioremap(pci_resource_start(pdev, 4), - pci_resource_len(pdev, 4)); - if (!dimm_mmio) { - kfree(hpriv); - rc = -ENOMEM; - goto err_out_iounmap; - } - - hpriv->dimm_mmio = dimm_mmio; - } - probe_ent->sht = pdc_port_info[board_idx].sht; probe_ent->host_flags = pdc_port_info[board_idx].host_flags; probe_ent->pio_mask = pdc_port_info[board_idx].pio_mask; @@ -1776,32 +587,22 @@ probe_ent->irq_flags = SA_SHIRQ; probe_ent->mmio_base = mmio_base; - if (have_20621) { - probe_ent->private_data = hpriv; - base += PDC_CHIP0_OFS; - } - pdc_sata_setup_port(&probe_ent->port[0], base + 0x200); pdc_sata_setup_port(&probe_ent->port[1], base + 0x280); - if (!have_20621) { - probe_ent->port[0].scr_addr = base + 0x400; - probe_ent->port[1].scr_addr = base + 0x500; - } + probe_ent->port[0].scr_addr = base + 0x400; + probe_ent->port[1].scr_addr = base + 0x500; /* notice 4-port boards */ switch (board_idx) { case board_20319: - case board_20621: probe_ent->n_ports = 4; pdc_sata_setup_port(&probe_ent->port[2], base + 0x300); pdc_sata_setup_port(&probe_ent->port[3], base + 0x380); - if (!have_20621) { - probe_ent->port[2].scr_addr = base + 0x600; - probe_ent->port[3].scr_addr = base + 0x700; - } + probe_ent->port[2].scr_addr = base + 0x600; + probe_ent->port[3].scr_addr = base + 0x700; break; case board_2037x: probe_ent->n_ports = 2; @@ -1814,15 +615,7 @@ pci_set_master(pdev); /* initialize adapter */ - if (have_20621) { - /* initialize local dimm */ - if (pdc20621_dimm_init(probe_ent)) { - rc = -ENOMEM; - goto err_out_iounmap_dimm; - } - pdc_20621_init(probe_ent); - } else - pdc_host_init(board_idx, probe_ent); + pdc_host_init(board_idx, probe_ent); /* FIXME: check ata_device_add return value */ ata_device_add(probe_ent); @@ -1830,11 +623,6 @@ return 0; -err_out_iounmap_dimm: /* only get to this label if 20621 */ - kfree(hpriv); - iounmap(dimm_mmio); -err_out_iounmap: - iounmap(mmio_base); err_out_free_ent: kfree(probe_ent); err_out_regions: @@ -1858,7 +646,7 @@ MODULE_AUTHOR("Jeff Garzik"); -MODULE_DESCRIPTION("Promise SATA low-level driver"); +MODULE_DESCRIPTION("Promise SATA TX2/TX4 low-level driver"); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, pdc_sata_pci_tbl); diff -Nru a/drivers/scsi/sata_promise.h b/drivers/scsi/sata_promise.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/sata_promise.h Tue May 18 23:38:09 2004 @@ -0,0 +1,154 @@ +/* + * sata_promise.h - Promise SATA common definitions and inline funcs + * + * Copyright 2003-2004 Red Hat, Inc. + * + * The contents of this file are subject to the Open + * Software License version 1.1 that can be found at + * http://www.opensource.org/licenses/osl-1.1.txt and is included herein + * by reference. + * + * Alternatively, the contents of this file may be used under the terms + * of the GNU General Public License version 2 (the "GPL") as distributed + * in the kernel source COPYING file, in which case the provisions of + * the GPL are applicable instead of the above. If you wish to allow + * the use of your version of this file only under the terms of the + * GPL and not to allow others to use your version of this file under + * the OSL, indicate your decision by deleting the provisions above and + * replace them with the notice and other provisions required by the GPL. + * If you do not delete the provisions above, a recipient may use your + * version of this file under either the OSL or the GPL. + * + */ + +#ifndef __SATA_PROMISE_H__ +#define __SATA_PROMISE_H__ + +#include + +enum pdc_packet_bits { + PDC_PKT_READ = (1 << 2), + PDC_PKT_NODATA = (1 << 3), + + PDC_PKT_SIZEMASK = (1 << 7) | (1 << 6) | (1 << 5), + PDC_PKT_CLEAR_BSY = (1 << 4), + PDC_PKT_WAIT_DRDY = (1 << 3) | (1 << 4), + PDC_LAST_REG = (1 << 3), + + PDC_REG_DEVCTL = (1 << 3) | (1 << 2) | (1 << 1), +}; + +static inline unsigned int pdc_pkt_header(struct ata_taskfile *tf, + dma_addr_t sg_table, + unsigned int devno, u8 *buf) +{ + u8 dev_reg; + u32 *buf32 = (u32 *) buf; + + /* set control bits (byte 0), zero delay seq id (byte 3), + * and seq id (byte 2) + */ + switch (tf->protocol) { + case ATA_PROT_DMA: + if (!(tf->flags & ATA_TFLAG_WRITE)) + buf32[0] = cpu_to_le32(PDC_PKT_READ); + else + buf32[0] = 0; + break; + + case ATA_PROT_NODATA: + buf32[0] = cpu_to_le32(PDC_PKT_NODATA); + break; + + default: + BUG(); + break; + } + + buf32[1] = cpu_to_le32(sg_table); /* S/G table addr */ + buf32[2] = 0; /* no next-packet */ + + if (devno == 0) + dev_reg = ATA_DEVICE_OBS; + else + dev_reg = ATA_DEVICE_OBS | ATA_DEV1; + + /* select device */ + buf[12] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE; + buf[13] = dev_reg; + + /* device control register */ + buf[14] = (1 << 5) | PDC_REG_DEVCTL; + buf[15] = tf->ctl; + + return 16; /* offset of next byte */ +} + +static inline unsigned int pdc_pkt_footer(struct ata_taskfile *tf, u8 *buf, + unsigned int i) +{ + if (tf->flags & ATA_TFLAG_DEVICE) { + buf[i++] = (1 << 5) | ATA_REG_DEVICE; + buf[i++] = tf->device; + } + + /* and finally the command itself; also includes end-of-pkt marker */ + buf[i++] = (1 << 5) | PDC_LAST_REG | ATA_REG_CMD; + buf[i++] = tf->command; + + return i; +} + +static inline unsigned int pdc_prep_lba28(struct ata_taskfile *tf, u8 *buf, unsigned int i) +{ + /* the "(1 << 5)" should be read "(count << 5)" */ + + /* ATA command block registers */ + buf[i++] = (1 << 5) | ATA_REG_FEATURE; + buf[i++] = tf->feature; + + buf[i++] = (1 << 5) | ATA_REG_NSECT; + buf[i++] = tf->nsect; + + buf[i++] = (1 << 5) | ATA_REG_LBAL; + buf[i++] = tf->lbal; + + buf[i++] = (1 << 5) | ATA_REG_LBAM; + buf[i++] = tf->lbam; + + buf[i++] = (1 << 5) | ATA_REG_LBAH; + buf[i++] = tf->lbah; + + return i; +} + +static inline unsigned int pdc_prep_lba48(struct ata_taskfile *tf, u8 *buf, unsigned int i) +{ + /* the "(2 << 5)" should be read "(count << 5)" */ + + /* ATA command block registers */ + buf[i++] = (2 << 5) | ATA_REG_FEATURE; + buf[i++] = tf->hob_feature; + buf[i++] = tf->feature; + + buf[i++] = (2 << 5) | ATA_REG_NSECT; + buf[i++] = tf->hob_nsect; + buf[i++] = tf->nsect; + + buf[i++] = (2 << 5) | ATA_REG_LBAL; + buf[i++] = tf->hob_lbal; + buf[i++] = tf->lbal; + + buf[i++] = (2 << 5) | ATA_REG_LBAM; + buf[i++] = tf->hob_lbam; + buf[i++] = tf->lbam; + + buf[i++] = (2 << 5) | ATA_REG_LBAH; + buf[i++] = tf->hob_lbah; + buf[i++] = tf->lbah; + + return i; +} + + +#endif /* __SATA_PROMISE_H__ */ diff -Nru a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c --- a/drivers/scsi/sata_sil.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/sata_sil.c Tue May 18 23:38:05 2004 @@ -1,5 +1,9 @@ /* - * ata_sil.c - Silicon Image SATA + * sata_sil.c - Silicon Image SATA + * + * Maintained by: Jeff Garzik + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. * * Copyright 2003 Red Hat, Inc. * Copyright 2003 Benjamin Herrenschmidt @@ -125,6 +129,7 @@ .exec_command = ata_exec_command_mmio, .phy_reset = sata_phy_reset, .post_set_mode = sil_post_set_mode, + .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, @@ -271,8 +276,14 @@ static void sil_dev_config(struct ata_port *ap, struct ata_device *dev) { unsigned int n, quirks = 0; - const char *s = &dev->product[0]; - unsigned int len = strnlen(s, sizeof(dev->product)); + unsigned char model_num[40]; + const char *s; + unsigned int len; + + ata_dev_id_string(dev, model_num, ATA_ID_PROD_OFS, + sizeof(model_num)); + s = &model_num[0]; + len = strnlen(s, sizeof(model_num)); /* ATAPI specifies that empty space is blank-filled; remove blanks */ while ((len > 0) && (s[len - 1] == ' ')) diff -Nru a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c --- a/drivers/scsi/sata_sis.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/sata_sis.c Tue May 18 23:38:07 2004 @@ -1,6 +1,10 @@ /* * sata_sis.c - Silicon Integrated Systems SATA * + * Maintained by: Uwe Koziolek + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. + * * Copyright 2004 Uwe Koziolek * * The contents of this file are subject to the Open @@ -56,7 +60,8 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); static struct pci_device_id sis_pci_tbl[] = { - { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 }, + { PCI_VENDOR_ID_SI, 0x180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 }, + { PCI_VENDOR_ID_SI, 0x181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 }, { } /* terminate list */ }; @@ -93,6 +98,7 @@ .check_status = ata_check_status_pio, .exec_command = ata_exec_command_pio, .phy_reset = sata_phy_reset, + .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, diff -Nru a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c --- a/drivers/scsi/sata_svw.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/sata_svw.c Tue May 18 23:38:08 2004 @@ -1,5 +1,10 @@ /* - * ata_k2.c - Broadcom (Apple K2) SATA + * sata_svw.c - ServerWorks / Apple K2 SATA + * + * Maintained by: Benjamin Herrenschmidt and + * Jeff Garzik + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. * * Copyright 2003 Benjamin Herrenschmidt * @@ -226,6 +231,7 @@ .check_status = k2_stat_check_status, .exec_command = ata_exec_command_mmio, .phy_reset = sata_phy_reset, + .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, diff -Nru a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/scsi/sata_sx4.c Tue May 18 23:38:09 2004 @@ -0,0 +1,1446 @@ +/* + * sata_sx4.c - Promise SATA + * + * Maintained by: Jeff Garzik + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. + * + * Copyright 2003-2004 Red Hat, Inc. + * + * The contents of this file are subject to the Open + * Software License version 1.1 that can be found at + * http://www.opensource.org/licenses/osl-1.1.txt and is included herein + * by reference. + * + * Alternatively, the contents of this file may be used under the terms + * of the GNU General Public License version 2 (the "GPL") as distributed + * in the kernel source COPYING file, in which case the provisions of + * the GPL are applicable instead of the above. If you wish to allow + * the use of your version of this file only under the terms of the + * GPL and not to allow others to use your version of this file under + * the OSL, indicate your decision by deleting the provisions above and + * replace them with the notice and other provisions required by the GPL. + * If you do not delete the provisions above, a recipient may use your + * version of this file under either the OSL or the GPL. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "scsi.h" +#include "hosts.h" +#include +#include +#include "sata_promise.h" + +#define DRV_NAME "sata_sx4" +#define DRV_VERSION "0.50" + + +enum { + PDC_PRD_TBL = 0x44, /* Direct command DMA table addr */ + + PDC_PKT_SUBMIT = 0x40, /* Command packet pointer addr */ + PDC_HDMA_PKT_SUBMIT = 0x100, /* Host DMA packet pointer addr */ + PDC_INT_SEQMASK = 0x40, /* Mask of asserted SEQ INTs */ + PDC_HDMA_CTLSTAT = 0x12C, /* Host DMA control / status */ + + PDC_20621_SEQCTL = 0x400, + PDC_20621_SEQMASK = 0x480, + PDC_20621_GENERAL_CTL = 0x484, + PDC_20621_PAGE_SIZE = (32 * 1024), + + /* chosen, not constant, values; we design our own DIMM mem map */ + PDC_20621_DIMM_WINDOW = 0x0C, /* page# for 32K DIMM window */ + PDC_20621_DIMM_BASE = 0x00200000, + PDC_20621_DIMM_DATA = (64 * 1024), + PDC_DIMM_DATA_STEP = (256 * 1024), + PDC_DIMM_WINDOW_STEP = (8 * 1024), + PDC_DIMM_HOST_PRD = (6 * 1024), + PDC_DIMM_HOST_PKT = (128 * 0), + PDC_DIMM_HPKT_PRD = (128 * 1), + PDC_DIMM_ATA_PKT = (128 * 2), + PDC_DIMM_APKT_PRD = (128 * 3), + PDC_DIMM_HEADER_SZ = PDC_DIMM_APKT_PRD + 128, + PDC_PAGE_WINDOW = 0x40, + PDC_PAGE_DATA = PDC_PAGE_WINDOW + + (PDC_20621_DIMM_DATA / PDC_20621_PAGE_SIZE), + PDC_PAGE_SET = PDC_DIMM_DATA_STEP / PDC_20621_PAGE_SIZE, + + PDC_CHIP0_OFS = 0xC0000, /* offset of chip #0 */ + + PDC_20621_ERR_MASK = (1<<19) | (1<<20) | (1<<21) | (1<<22) | + (1<<23), + + board_20621 = 0, /* FastTrak S150 SX4 */ + + PDC_RESET = (1 << 11), /* HDMA reset */ + + PDC_MAX_HDMA = 32, + PDC_HDMA_Q_MASK = (PDC_MAX_HDMA - 1), + + PDC_DIMM0_SPD_DEV_ADDRESS = 0x50, + PDC_DIMM1_SPD_DEV_ADDRESS = 0x51, + PDC_MAX_DIMM_MODULE = 0x02, + PDC_I2C_CONTROL_OFFSET = 0x48, + PDC_I2C_ADDR_DATA_OFFSET = 0x4C, + PDC_DIMM0_CONTROL_OFFSET = 0x80, + PDC_DIMM1_CONTROL_OFFSET = 0x84, + PDC_SDRAM_CONTROL_OFFSET = 0x88, + PDC_I2C_WRITE = 0x00000000, + PDC_I2C_READ = 0x00000040, + PDC_I2C_START = 0x00000080, + PDC_I2C_MASK_INT = 0x00000020, + PDC_I2C_COMPLETE = 0x00010000, + PDC_I2C_NO_ACK = 0x00100000, + PDC_DIMM_SPD_SUBADDRESS_START = 0x00, + PDC_DIMM_SPD_SUBADDRESS_END = 0x7F, + PDC_DIMM_SPD_ROW_NUM = 3, + PDC_DIMM_SPD_COLUMN_NUM = 4, + PDC_DIMM_SPD_MODULE_ROW = 5, + PDC_DIMM_SPD_TYPE = 11, + PDC_DIMM_SPD_FRESH_RATE = 12, + PDC_DIMM_SPD_BANK_NUM = 17, + PDC_DIMM_SPD_CAS_LATENCY = 18, + PDC_DIMM_SPD_ATTRIBUTE = 21, + PDC_DIMM_SPD_ROW_PRE_CHARGE = 27, + PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28, + PDC_DIMM_SPD_RAS_CAS_DELAY = 29, + PDC_DIMM_SPD_ACTIVE_PRECHARGE = 30, + PDC_DIMM_SPD_SYSTEM_FREQ = 126, + PDC_CTL_STATUS = 0x08, + PDC_DIMM_WINDOW_CTLR = 0x0C, + PDC_TIME_CONTROL = 0x3C, + PDC_TIME_PERIOD = 0x40, + PDC_TIME_COUNTER = 0x44, + PDC_GENERAL_CTLR = 0x484, + PCI_PLL_INIT = 0x8A531824, + PCI_X_TCOUNT = 0xEE1E5CFF +}; + + +struct pdc_port_priv { + u8 dimm_buf[(ATA_PRD_SZ * ATA_MAX_PRD) + 512]; + u8 *pkt; + dma_addr_t pkt_dma; +}; + +struct pdc_host_priv { + void *dimm_mmio; + + unsigned int doing_hdma; + unsigned int hdma_prod; + unsigned int hdma_cons; + struct { + struct ata_queued_cmd *qc; + unsigned int seq; + unsigned long pkt_ofs; + } hdma[32]; +}; + + +static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent); +static void pdc20621_dma_setup(struct ata_queued_cmd *qc); +static void pdc20621_dma_start(struct ata_queued_cmd *qc); +static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs); +static void pdc_eng_timeout(struct ata_port *ap); +static void pdc_20621_phy_reset (struct ata_port *ap); +static int pdc_port_start(struct ata_port *ap); +static void pdc_port_stop(struct ata_port *ap); +static void pdc20621_fill_sg(struct ata_queued_cmd *qc); +static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf); +static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); +static void pdc20621_host_stop(struct ata_host_set *host_set); +static inline void pdc_dma_complete (struct ata_port *ap, + struct ata_queued_cmd *qc, int have_err); +static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe); +static int pdc20621_detect_dimm(struct ata_probe_ent *pe); +static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, + u32 device, u32 subaddr, u32 *pdata); +static int pdc20621_prog_dimm0(struct ata_probe_ent *pe); +static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe); +#ifdef ATA_VERBOSE_DEBUG +static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, + void *psource, u32 offset, u32 size); +#endif +static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, + void *psource, u32 offset, u32 size); + + +static Scsi_Host_Template pdc_sata_sht = { + .module = THIS_MODULE, + .name = DRV_NAME, + .queuecommand = ata_scsi_queuecmd, + .eh_strategy_handler = ata_scsi_error, + .can_queue = ATA_DEF_QUEUE, + .this_id = ATA_SHT_THIS_ID, + .sg_tablesize = LIBATA_MAX_PRD, + .max_sectors = ATA_MAX_SECTORS, + .cmd_per_lun = ATA_SHT_CMD_PER_LUN, + .emulated = ATA_SHT_EMULATED, + .use_clustering = ATA_SHT_USE_CLUSTERING, + .proc_name = DRV_NAME, + .dma_boundary = ATA_DMA_BOUNDARY, + .slave_configure = ata_scsi_slave_config, + .bios_param = ata_std_bios_param, +}; + +static struct ata_port_operations pdc_20621_ops = { + .port_disable = ata_port_disable, + .tf_load = pdc_tf_load_mmio, + .tf_read = ata_tf_read_mmio, + .check_status = ata_check_status_mmio, + .exec_command = pdc_exec_command_mmio, + .phy_reset = pdc_20621_phy_reset, + .bmdma_setup = pdc20621_dma_setup, + .bmdma_start = pdc20621_dma_start, + .fill_sg = pdc20621_fill_sg, + .eng_timeout = pdc_eng_timeout, + .irq_handler = pdc20621_interrupt, + .port_start = pdc_port_start, + .port_stop = pdc_port_stop, + .host_stop = pdc20621_host_stop, +}; + +static struct ata_port_info pdc_port_info[] = { + /* board_20621 */ + { + .sht = &pdc_sata_sht, + .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | + ATA_FLAG_SRST | ATA_FLAG_MMIO, + .pio_mask = 0x03, /* pio3-4 */ + .udma_mask = 0x7f, /* udma0-6 ; FIXME */ + .port_ops = &pdc_20621_ops, + }, + +}; + +static struct pci_device_id pdc_sata_pci_tbl[] = { + { PCI_VENDOR_ID_PROMISE, 0x6622, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_20621 }, + { } /* terminate list */ +}; + + +static struct pci_driver pdc_sata_pci_driver = { + .name = DRV_NAME, + .id_table = pdc_sata_pci_tbl, + .probe = pdc_sata_init_one, + .remove = ata_pci_remove_one, +}; + + +static void pdc20621_host_stop(struct ata_host_set *host_set) +{ + struct pdc_host_priv *hpriv = host_set->private_data; + void *dimm_mmio = hpriv->dimm_mmio; + + iounmap(dimm_mmio); + kfree(hpriv); +} + +static int pdc_port_start(struct ata_port *ap) +{ + struct pci_dev *pdev = ap->host_set->pdev; + struct pdc_port_priv *pp; + int rc; + + rc = ata_port_start(ap); + if (rc) + return rc; + + pp = kmalloc(sizeof(*pp), GFP_KERNEL); + if (!pp) { + rc = -ENOMEM; + goto err_out; + } + memset(pp, 0, sizeof(*pp)); + + pp->pkt = pci_alloc_consistent(pdev, 128, &pp->pkt_dma); + if (!pp->pkt) { + rc = -ENOMEM; + goto err_out_kfree; + } + + ap->private_data = pp; + + return 0; + +err_out_kfree: + kfree(pp); +err_out: + ata_port_stop(ap); + return rc; +} + + +static void pdc_port_stop(struct ata_port *ap) +{ + struct pci_dev *pdev = ap->host_set->pdev; + struct pdc_port_priv *pp = ap->private_data; + + ap->private_data = NULL; + pci_free_consistent(pdev, 128, pp->pkt, pp->pkt_dma); + kfree(pp); + ata_port_stop(ap); +} + + +static void pdc_20621_phy_reset (struct ata_port *ap) +{ + VPRINTK("ENTER\n"); + ap->cbl = ATA_CBL_SATA; + ata_port_probe(ap); + ata_bus_reset(ap); +} + +static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf, + unsigned int portno, + unsigned int total_len) +{ + u32 addr; + unsigned int dw = PDC_DIMM_APKT_PRD >> 2; + u32 *buf32 = (u32 *) buf; + + /* output ATA packet S/G table */ + addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA + + (PDC_DIMM_DATA_STEP * portno); + VPRINTK("ATA sg addr 0x%x, %d\n", addr, addr); + buf32[dw] = cpu_to_le32(addr); + buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT); + + VPRINTK("ATA PSG @ %x == (0x%x, 0x%x)\n", + PDC_20621_DIMM_BASE + + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_APKT_PRD, + buf32[dw], buf32[dw + 1]); +} + +static inline void pdc20621_host_sg(struct ata_taskfile *tf, u8 *buf, + unsigned int portno, + unsigned int total_len) +{ + u32 addr; + unsigned int dw = PDC_DIMM_HPKT_PRD >> 2; + u32 *buf32 = (u32 *) buf; + + /* output Host DMA packet S/G table */ + addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA + + (PDC_DIMM_DATA_STEP * portno); + + buf32[dw] = cpu_to_le32(addr); + buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT); + + VPRINTK("HOST PSG @ %x == (0x%x, 0x%x)\n", + PDC_20621_DIMM_BASE + + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_HPKT_PRD, + buf32[dw], buf32[dw + 1]); +} + +static inline unsigned int pdc20621_ata_pkt(struct ata_taskfile *tf, + unsigned int devno, u8 *buf, + unsigned int portno) +{ + unsigned int i, dw; + u32 *buf32 = (u32 *) buf; + u8 dev_reg; + + unsigned int dimm_sg = PDC_20621_DIMM_BASE + + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_APKT_PRD; + VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg); + + i = PDC_DIMM_ATA_PKT; + + /* + * Set up ATA packet + */ + if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE))) + buf[i++] = PDC_PKT_READ; + else if (tf->protocol == ATA_PROT_NODATA) + buf[i++] = PDC_PKT_NODATA; + else + buf[i++] = 0; + buf[i++] = 0; /* reserved */ + buf[i++] = portno + 1; /* seq. id */ + buf[i++] = 0xff; /* delay seq. id */ + + /* dimm dma S/G, and next-pkt */ + dw = i >> 2; + buf32[dw] = cpu_to_le32(dimm_sg); + buf32[dw + 1] = 0; + i += 8; + + if (devno == 0) + dev_reg = ATA_DEVICE_OBS; + else + dev_reg = ATA_DEVICE_OBS | ATA_DEV1; + + /* select device */ + buf[i++] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE; + buf[i++] = dev_reg; + + /* device control register */ + buf[i++] = (1 << 5) | PDC_REG_DEVCTL; + buf[i++] = tf->ctl; + + return i; +} + +static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf, + unsigned int portno) +{ + unsigned int dw; + u32 tmp, *buf32 = (u32 *) buf; + + unsigned int host_sg = PDC_20621_DIMM_BASE + + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_HOST_PRD; + unsigned int dimm_sg = PDC_20621_DIMM_BASE + + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_HPKT_PRD; + VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg); + VPRINTK("host_sg == 0x%x, %d\n", host_sg, host_sg); + + dw = PDC_DIMM_HOST_PKT >> 2; + + /* + * Set up Host DMA packet + */ + if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE))) + tmp = PDC_PKT_READ; + else + tmp = 0; + tmp |= ((portno + 1 + 4) << 16); /* seq. id */ + tmp |= (0xff << 24); /* delay seq. id */ + buf32[dw + 0] = cpu_to_le32(tmp); + buf32[dw + 1] = cpu_to_le32(host_sg); + buf32[dw + 2] = cpu_to_le32(dimm_sg); + buf32[dw + 3] = 0; + + VPRINTK("HOST PKT @ %x == (0x%x 0x%x 0x%x 0x%x)\n", + PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * portno) + + PDC_DIMM_HOST_PKT, + buf32[dw + 0], + buf32[dw + 1], + buf32[dw + 2], + buf32[dw + 3]); +} + +static void pdc20621_fill_sg(struct ata_queued_cmd *qc) +{ + struct scatterlist *sg = qc->sg; + struct ata_port *ap = qc->ap; + struct pdc_port_priv *pp = ap->private_data; + void *mmio = ap->host_set->mmio_base; + struct pdc_host_priv *hpriv = ap->host_set->private_data; + void *dimm_mmio = hpriv->dimm_mmio; + unsigned int portno = ap->port_no; + unsigned int i, last, idx, total_len = 0, sgt_len; + u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ]; + + VPRINTK("ata%u: ENTER\n", ap->id); + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + /* + * Build S/G table + */ + last = qc->n_elem; + idx = 0; + for (i = 0; i < last; i++) { + buf[idx++] = cpu_to_le32(sg_dma_address(&sg[i])); + buf[idx++] = cpu_to_le32(sg_dma_len(&sg[i])); + total_len += sg[i].length; + } + buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT); + sgt_len = idx * 4; + + /* + * Build ATA, host DMA packets + */ + pdc20621_host_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len); + pdc20621_host_pkt(&qc->tf, &pp->dimm_buf[0], portno); + + pdc20621_ata_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len); + i = pdc20621_ata_pkt(&qc->tf, qc->dev->devno, &pp->dimm_buf[0], portno); + + if (qc->tf.flags & ATA_TFLAG_LBA48) + i = pdc_prep_lba48(&qc->tf, &pp->dimm_buf[0], i); + else + i = pdc_prep_lba28(&qc->tf, &pp->dimm_buf[0], i); + + pdc_pkt_footer(&qc->tf, &pp->dimm_buf[0], i); + + /* copy three S/G tables and two packets to DIMM MMIO window */ + memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP), + &pp->dimm_buf, PDC_DIMM_HEADER_SZ); + memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP) + + PDC_DIMM_HOST_PRD, + &pp->dimm_buf[PDC_DIMM_HEADER_SZ], sgt_len); + + /* force host FIFO dump */ + writel(0x00000001, mmio + PDC_20621_GENERAL_CTL); + + readl(dimm_mmio); /* MMIO PCI posting flush */ + + VPRINTK("ata pkt buf ofs %u, prd size %u, mmio copied\n", i, sgt_len); +} + +static void __pdc20621_push_hdma(struct ata_queued_cmd *qc, + unsigned int seq, + u32 pkt_ofs) +{ + struct ata_port *ap = qc->ap; + struct ata_host_set *host_set = ap->host_set; + void *mmio = host_set->mmio_base; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); + readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ + + writel(pkt_ofs, mmio + PDC_HDMA_PKT_SUBMIT); + readl(mmio + PDC_HDMA_PKT_SUBMIT); /* flush */ +} + +static void pdc20621_push_hdma(struct ata_queued_cmd *qc, + unsigned int seq, + u32 pkt_ofs) +{ + struct ata_port *ap = qc->ap; + struct pdc_host_priv *pp = ap->host_set->private_data; + unsigned int idx = pp->hdma_prod & PDC_HDMA_Q_MASK; + + if (!pp->doing_hdma) { + __pdc20621_push_hdma(qc, seq, pkt_ofs); + pp->doing_hdma = 1; + return; + } + + pp->hdma[idx].qc = qc; + pp->hdma[idx].seq = seq; + pp->hdma[idx].pkt_ofs = pkt_ofs; + pp->hdma_prod++; +} + +static void pdc20621_pop_hdma(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + struct pdc_host_priv *pp = ap->host_set->private_data; + unsigned int idx = pp->hdma_cons & PDC_HDMA_Q_MASK; + + /* if nothing on queue, we're done */ + if (pp->hdma_prod == pp->hdma_cons) { + pp->doing_hdma = 0; + return; + } + + __pdc20621_push_hdma(pp->hdma[idx].qc, pp->hdma[idx].seq, + pp->hdma[idx].pkt_ofs); + pp->hdma_cons++; +} + +#ifdef ATA_VERBOSE_DEBUG +static void pdc20621_dump_hdma(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + unsigned int port_no = ap->port_no; + struct pdc_host_priv *hpriv = ap->host_set->private_data; + void *dimm_mmio = hpriv->dimm_mmio; + + dimm_mmio += (port_no * PDC_DIMM_WINDOW_STEP); + dimm_mmio += PDC_DIMM_HOST_PKT; + + printk(KERN_ERR "HDMA[0] == 0x%08X\n", readl(dimm_mmio)); + printk(KERN_ERR "HDMA[1] == 0x%08X\n", readl(dimm_mmio + 4)); + printk(KERN_ERR "HDMA[2] == 0x%08X\n", readl(dimm_mmio + 8)); + printk(KERN_ERR "HDMA[3] == 0x%08X\n", readl(dimm_mmio + 12)); +} +#else +static inline void pdc20621_dump_hdma(struct ata_queued_cmd *qc) { } +#endif /* ATA_VERBOSE_DEBUG */ + +static void pdc20621_dma_setup(struct ata_queued_cmd *qc) +{ + /* nothing for now. later, we will call standard + * code in libata-core for ATAPI here */ +} + +static void pdc20621_dma_start(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + struct ata_host_set *host_set = ap->host_set; + unsigned int port_no = ap->port_no; + void *mmio = host_set->mmio_base; + unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); + u8 seq = (u8) (port_no + 1); + unsigned int doing_hdma = 0, port_ofs; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + VPRINTK("ata%u: ENTER\n", ap->id); + + port_ofs = PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no); + + /* if writing, we (1) DMA to DIMM, then (2) do ATA command */ + if (rw) { + doing_hdma = 1; + seq += 4; + } + + wmb(); /* flush PRD, pkt writes */ + + if (doing_hdma) { + pdc20621_dump_hdma(qc); + pdc20621_push_hdma(qc, seq, port_ofs + PDC_DIMM_HOST_PKT); + VPRINTK("queued ofs 0x%x (%u), seq %u\n", + port_ofs + PDC_DIMM_HOST_PKT, + port_ofs + PDC_DIMM_HOST_PKT, + seq); + } else { + writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); + readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ + + writel(port_ofs + PDC_DIMM_ATA_PKT, + (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); + readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); + VPRINTK("submitted ofs 0x%x (%u), seq %u\n", + port_ofs + PDC_DIMM_ATA_PKT, + port_ofs + PDC_DIMM_ATA_PKT, + seq); + } +} + +static inline unsigned int pdc20621_host_intr( struct ata_port *ap, + struct ata_queued_cmd *qc, + unsigned int doing_hdma, + void *mmio) +{ + unsigned int port_no = ap->port_no; + unsigned int port_ofs = + PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no); + u8 status; + unsigned int handled = 0; + + VPRINTK("ENTER\n"); + + if ((qc->tf.protocol == ATA_PROT_DMA) && /* read */ + (!(qc->tf.flags & ATA_TFLAG_WRITE))) { + + /* step two - DMA from DIMM to host */ + if (doing_hdma) { + VPRINTK("ata%u: read hdma, 0x%x 0x%x\n", ap->id, + readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); + pdc_dma_complete(ap, qc, 0); + pdc20621_pop_hdma(qc); + } + + /* step one - exec ATA command */ + else { + u8 seq = (u8) (port_no + 1 + 4); + VPRINTK("ata%u: read ata, 0x%x 0x%x\n", ap->id, + readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); + + /* submit hdma pkt */ + pdc20621_dump_hdma(qc); + pdc20621_push_hdma(qc, seq, + port_ofs + PDC_DIMM_HOST_PKT); + } + handled = 1; + + } else if (qc->tf.protocol == ATA_PROT_DMA) { /* write */ + + /* step one - DMA from host to DIMM */ + if (doing_hdma) { + u8 seq = (u8) (port_no + 1); + VPRINTK("ata%u: write hdma, 0x%x 0x%x\n", ap->id, + readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); + + /* submit ata pkt */ + writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); + readl(mmio + PDC_20621_SEQCTL + (seq * 4)); + writel(port_ofs + PDC_DIMM_ATA_PKT, + (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); + readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); + } + + /* step two - execute ATA command */ + else { + VPRINTK("ata%u: write ata, 0x%x 0x%x\n", ap->id, + readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT)); + pdc_dma_complete(ap, qc, 0); + pdc20621_pop_hdma(qc); + } + handled = 1; + + /* command completion, but no data xfer */ + } else if (qc->tf.protocol == ATA_PROT_NODATA) { + + status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); + DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status); + ata_qc_complete(qc, status); + handled = 1; + + } else { + ap->stats.idle_irq++; + } + + return handled; +} + +static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs) +{ + struct ata_host_set *host_set = dev_instance; + struct ata_port *ap; + u32 mask = 0; + unsigned int i, tmp, port_no; + unsigned int handled = 0; + void *mmio_base; + + VPRINTK("ENTER\n"); + + if (!host_set || !host_set->mmio_base) { + VPRINTK("QUICK EXIT\n"); + return IRQ_NONE; + } + + mmio_base = host_set->mmio_base; + + /* reading should also clear interrupts */ + mmio_base += PDC_CHIP0_OFS; + mask = readl(mmio_base + PDC_20621_SEQMASK); + VPRINTK("mask == 0x%x\n", mask); + + if (mask == 0xffffffff) { + VPRINTK("QUICK EXIT 2\n"); + return IRQ_NONE; + } + mask &= 0xffff; /* only 16 tags possible */ + if (!mask) { + VPRINTK("QUICK EXIT 3\n"); + return IRQ_NONE; + } + + spin_lock(&host_set->lock); + + for (i = 1; i < 9; i++) { + port_no = i - 1; + if (port_no > 3) + port_no -= 4; + if (port_no >= host_set->n_ports) + ap = NULL; + else + ap = host_set->ports[port_no]; + tmp = mask & (1 << i); + VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp); + if (tmp && ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) { + struct ata_queued_cmd *qc; + + qc = ata_qc_from_tag(ap, ap->active_tag); + if (qc && (!(qc->tf.ctl & ATA_NIEN))) + handled += pdc20621_host_intr(ap, qc, (i > 4), + mmio_base); + } + } + + spin_unlock(&host_set->lock); + + VPRINTK("mask == 0x%x\n", mask); + + VPRINTK("EXIT\n"); + + return IRQ_RETVAL(handled); +} + +static inline void pdc_dma_complete (struct ata_port *ap, + struct ata_queued_cmd *qc, + int have_err) +{ + u8 err_bit = have_err ? ATA_ERR : 0; + + /* get drive status; clear intr; complete txn */ + ata_qc_complete(qc, ata_wait_idle(ap) | err_bit); +} + +static void pdc_eng_timeout(struct ata_port *ap) +{ + u8 drv_stat; + struct ata_queued_cmd *qc; + + DPRINTK("ENTER\n"); + + qc = ata_qc_from_tag(ap, ap->active_tag); + if (!qc) { + printk(KERN_ERR "ata%u: BUG: timeout without command\n", + ap->id); + goto out; + } + + /* hack alert! We cannot use the supplied completion + * function from inside the ->eh_strategy_handler() thread. + * libata is the only user of ->eh_strategy_handler() in + * any kernel, so the default scsi_done() assumes it is + * not being called from the SCSI EH. + */ + qc->scsidone = scsi_finish_command; + + switch (qc->tf.protocol) { + case ATA_PROT_DMA: + printk(KERN_ERR "ata%u: DMA timeout\n", ap->id); + ata_qc_complete(qc, ata_wait_idle(ap) | ATA_ERR); + break; + + case ATA_PROT_NODATA: + drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); + + printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n", + ap->id, qc->tf.command, drv_stat); + + ata_qc_complete(qc, drv_stat); + break; + + default: + drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); + + printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n", + ap->id, qc->tf.command, drv_stat); + + ata_qc_complete(qc, drv_stat); + break; + } + +out: + DPRINTK("EXIT\n"); +} + +static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf) +{ + if (tf->protocol == ATA_PROT_PIO) + ata_tf_load_mmio(ap, tf); +} + + +static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf) +{ + if (tf->protocol == ATA_PROT_PIO) + ata_exec_command_mmio(ap, tf); +} + + +static void pdc_sata_setup_port(struct ata_ioports *port, unsigned long base) +{ + port->cmd_addr = base; + port->data_addr = base; + port->feature_addr = + port->error_addr = base + 0x4; + port->nsect_addr = base + 0x8; + port->lbal_addr = base + 0xc; + port->lbam_addr = base + 0x10; + port->lbah_addr = base + 0x14; + port->device_addr = base + 0x18; + port->command_addr = + port->status_addr = base + 0x1c; + port->altstatus_addr = + port->ctl_addr = base + 0x38; +} + + +#ifdef ATA_VERBOSE_DEBUG +static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource, + u32 offset, u32 size) +{ + u32 window_size; + u16 idx; + u8 page_mask; + long dist; + void *mmio = pe->mmio_base; + struct pdc_host_priv *hpriv = pe->private_data; + void *dimm_mmio = hpriv->dimm_mmio; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + page_mask = 0x00; + window_size = 0x2000 * 4; /* 32K byte uchar size */ + idx = (u16) (offset / window_size); + + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + + offset -= (idx * window_size); + idx++; + dist = ((long) (window_size - (offset + size))) >= 0 ? size : + (long) (window_size - offset); + memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4), + dist); + + psource += dist; + size -= dist; + for (; (long) size >= (long) window_size ;) { + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + memcpy_fromio((char *) psource, (char *) (dimm_mmio), + window_size / 4); + psource += window_size; + size -= window_size; + idx ++; + } + + if (size) { + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + memcpy_fromio((char *) psource, (char *) (dimm_mmio), + size / 4); + } +} +#endif + + +static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, + u32 offset, u32 size) +{ + u32 window_size; + u16 idx; + u8 page_mask; + long dist; + void *mmio = pe->mmio_base; + struct pdc_host_priv *hpriv = pe->private_data; + void *dimm_mmio = hpriv->dimm_mmio; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + page_mask = 0x00; + window_size = 0x2000 * 4; /* 32K byte uchar size */ + idx = (u16) (offset / window_size); + + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + offset -= (idx * window_size); + idx++; + dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size : + (long) (window_size - offset); + memcpy_toio((char *) (dimm_mmio + offset / 4), (char *) psource, dist); + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + + psource += dist; + size -= dist; + for (; (long) size >= (long) window_size ;) { + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + memcpy_toio((char *) (dimm_mmio), (char *) psource, + window_size / 4); + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + psource += window_size; + size -= window_size; + idx ++; + } + + if (size) { + writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); + readl(mmio + PDC_DIMM_WINDOW_CTLR); + memcpy_toio((char *) (dimm_mmio), (char *) psource, size / 4); + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); + } +} + + +static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device, + u32 subaddr, u32 *pdata) +{ + void *mmio = pe->mmio_base; + u32 i2creg = 0; + u32 status; + u32 count =0; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + i2creg |= device << 24; + i2creg |= subaddr << 16; + + /* Set the device and subaddress */ + writel(i2creg, mmio + PDC_I2C_ADDR_DATA_OFFSET); + readl(mmio + PDC_I2C_ADDR_DATA_OFFSET); + + /* Write Control to perform read operation, mask int */ + writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT, + mmio + PDC_I2C_CONTROL_OFFSET); + + for (count = 0; count <= 1000; count ++) { + status = readl(mmio + PDC_I2C_CONTROL_OFFSET); + if (status & PDC_I2C_COMPLETE) { + status = readl(mmio + PDC_I2C_ADDR_DATA_OFFSET); + break; + } else if (count == 1000) + return 0; + } + + *pdata = (status >> 8) & 0x000000ff; + return 1; +} + + +static int pdc20621_detect_dimm(struct ata_probe_ent *pe) +{ + u32 data=0 ; + if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, + PDC_DIMM_SPD_SYSTEM_FREQ, &data)) { + if (data == 100) + return 100; + } else + return 0; + + if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 9, &data)) { + if(data <= 0x75) + return 133; + } else + return 0; + + return 0; +} + + +static int pdc20621_prog_dimm0(struct ata_probe_ent *pe) +{ + u32 spd0[50]; + u32 data = 0; + int size, i; + u8 bdimmsize; + void *mmio = pe->mmio_base; + static const struct { + unsigned int reg; + unsigned int ofs; + } pdc_i2c_read_data [] = { + { PDC_DIMM_SPD_TYPE, 11 }, + { PDC_DIMM_SPD_FRESH_RATE, 12 }, + { PDC_DIMM_SPD_COLUMN_NUM, 4 }, + { PDC_DIMM_SPD_ATTRIBUTE, 21 }, + { PDC_DIMM_SPD_ROW_NUM, 3 }, + { PDC_DIMM_SPD_BANK_NUM, 17 }, + { PDC_DIMM_SPD_MODULE_ROW, 5 }, + { PDC_DIMM_SPD_ROW_PRE_CHARGE, 27 }, + { PDC_DIMM_SPD_ROW_ACTIVE_DELAY, 28 }, + { PDC_DIMM_SPD_RAS_CAS_DELAY, 29 }, + { PDC_DIMM_SPD_ACTIVE_PRECHARGE, 30 }, + { PDC_DIMM_SPD_CAS_LATENCY, 18 }, + }; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + for(i=0; i spd0[28]) + ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10; + data |= ((spd0[30] - spd0[29] + 9) / 10 - 2) << 12; + + if (spd0[18] & 0x08) + data |= ((0x03) << 14); + else if (spd0[18] & 0x04) + data |= ((0x02) << 14); + else if (spd0[18] & 0x01) + data |= ((0x01) << 14); + else + data |= (0 << 14); + + /* + Calculate the size of bDIMMSize (power of 2) and + merge the DIMM size by program start/end address. + */ + + bdimmsize = spd0[4] + (spd0[5] / 2) + spd0[3] + (spd0[17] / 2) + 3; + size = (1 << bdimmsize) >> 20; /* size = xxx(MB) */ + data |= (((size / 16) - 1) << 16); + data |= (0 << 23); + data |= 8; + writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET); + readl(mmio + PDC_DIMM0_CONTROL_OFFSET); + return size; +} + + +static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe) +{ + u32 data, spd0; + int error, i; + void *mmio = pe->mmio_base; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + /* + Set To Default : DIMM Module Global Control Register (0x022259F1) + DIMM Arbitration Disable (bit 20) + DIMM Data/Control Output Driving Selection (bit12 - bit15) + Refresh Enable (bit 17) + */ + + data = 0x022259F1; + writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); + readl(mmio + PDC_SDRAM_CONTROL_OFFSET); + + /* Turn on for ECC */ + pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, + PDC_DIMM_SPD_TYPE, &spd0); + if (spd0 == 0x02) { + data |= (0x01 << 16); + writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); + readl(mmio + PDC_SDRAM_CONTROL_OFFSET); + printk(KERN_ERR "Local DIMM ECC Enabled\n"); + } + + /* DIMM Initialization Select/Enable (bit 18/19) */ + data &= (~(1<<18)); + data |= (1<<19); + writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET); + + error = 1; + for (i = 1; i <= 10; i++) { /* polling ~5 secs */ + data = readl(mmio + PDC_SDRAM_CONTROL_OFFSET); + if (!(data & (1<<19))) { + error = 0; + break; + } + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout((i * 100) * HZ / 1000 + 1); + } + return error; +} + + +static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe) +{ + int speed, size, length; + u32 addr,spd0,pci_status; + u32 tmp=0; + u32 time_period=0; + u32 tcount=0; + u32 ticks=0; + u32 clock=0; + u32 fparam=0; + void *mmio = pe->mmio_base; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + /* Initialize PLL based upon PCI Bus Frequency */ + + /* Initialize Time Period Register */ + writel(0xffffffff, mmio + PDC_TIME_PERIOD); + time_period = readl(mmio + PDC_TIME_PERIOD); + VPRINTK("Time Period Register (0x40): 0x%x\n", time_period); + + /* Enable timer */ + writel(0x00001a0, mmio + PDC_TIME_CONTROL); + readl(mmio + PDC_TIME_CONTROL); + + /* Wait 3 seconds */ + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(3 * HZ); + + /* + When timer is enabled, counter is decreased every internal + clock cycle. + */ + + tcount = readl(mmio + PDC_TIME_COUNTER); + VPRINTK("Time Counter Register (0x44): 0x%x\n", tcount); + + /* + If SX4 is on PCI-X bus, after 3 seconds, the timer counter + register should be >= (0xffffffff - 3x10^8). + */ + if(tcount >= PCI_X_TCOUNT) { + ticks = (time_period - tcount); + VPRINTK("Num counters 0x%x (%d)\n", ticks, ticks); + + clock = (ticks / 300000); + VPRINTK("10 * Internal clk = 0x%x (%d)\n", clock, clock); + + clock = (clock * 33); + VPRINTK("10 * Internal clk * 33 = 0x%x (%d)\n", clock, clock); + + /* PLL F Param (bit 22:16) */ + fparam = (1400000 / clock) - 2; + VPRINTK("PLL F Param: 0x%x (%d)\n", fparam, fparam); + + /* OD param = 0x2 (bit 31:30), R param = 0x5 (bit 29:25) */ + pci_status = (0x8a001824 | (fparam << 16)); + } else + pci_status = PCI_PLL_INIT; + + /* Initialize PLL. */ + VPRINTK("pci_status: 0x%x\n", pci_status); + writel(pci_status, mmio + PDC_CTL_STATUS); + readl(mmio + PDC_CTL_STATUS); + + /* + Read SPD of DIMM by I2C interface, + and program the DIMM Module Controller. + */ + if (!(speed = pdc20621_detect_dimm(pe))) { + printk(KERN_ERR "Detect Local DIMM Fail\n"); + return 1; /* DIMM error */ + } + VPRINTK("Local DIMM Speed = %d\n", speed); + + /* Programming DIMM0 Module Control Register (index_CID0:80h) */ + size = pdc20621_prog_dimm0(pe); + VPRINTK("Local DIMM Size = %dMB\n",size); + + /* Programming DIMM Module Global Control Register (index_CID0:88h) */ + if (pdc20621_prog_dimm_global(pe)) { + printk(KERN_ERR "Programming DIMM Module Global Control Register Fail\n"); + return 1; + } + +#ifdef ATA_VERBOSE_DEBUG + { + u8 test_parttern1[40] = {0x55,0xAA,'P','r','o','m','i','s','e',' ', + 'N','o','t',' ','Y','e','t',' ','D','e','f','i','n','e','d',' ', + '1','.','1','0', + '9','8','0','3','1','6','1','2',0,0}; + u8 test_parttern2[40] = {0}; + + pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x10040, 40); + pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x40, 40); + + pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x10040, 40); + pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40); + printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], + test_parttern2[1], &(test_parttern2[2])); + pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040, + 40); + printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], + test_parttern2[1], &(test_parttern2[2])); + + pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x40, 40); + pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40); + printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], + test_parttern2[1], &(test_parttern2[2])); + } +#endif + + /* ECC initiliazation. */ + + pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, + PDC_DIMM_SPD_TYPE, &spd0); + if (spd0 == 0x02) { + VPRINTK("Start ECC initialization\n"); + addr = 0; + length = size * 1024 * 1024; + while (addr < length) { + pdc20621_put_to_dimm(pe, (void *) &tmp, addr, + sizeof(u32)); + addr += sizeof(u32); + } + VPRINTK("Finish ECC initialization\n"); + } + return 0; +} + + +static void pdc_20621_init(struct ata_probe_ent *pe) +{ + u32 tmp; + void *mmio = pe->mmio_base; + + /* hard-code chip #0 */ + mmio += PDC_CHIP0_OFS; + + /* + * Select page 0x40 for our 32k DIMM window + */ + tmp = readl(mmio + PDC_20621_DIMM_WINDOW) & 0xffff0000; + tmp |= PDC_PAGE_WINDOW; /* page 40h; arbitrarily selected */ + writel(tmp, mmio + PDC_20621_DIMM_WINDOW); + + /* + * Reset Host DMA + */ + tmp = readl(mmio + PDC_HDMA_CTLSTAT); + tmp |= PDC_RESET; + writel(tmp, mmio + PDC_HDMA_CTLSTAT); + readl(mmio + PDC_HDMA_CTLSTAT); /* flush */ + + udelay(10); + + tmp = readl(mmio + PDC_HDMA_CTLSTAT); + tmp &= ~PDC_RESET; + writel(tmp, mmio + PDC_HDMA_CTLSTAT); + readl(mmio + PDC_HDMA_CTLSTAT); /* flush */ +} + +static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) +{ + static int printed_version; + struct ata_probe_ent *probe_ent = NULL; + unsigned long base; + void *mmio_base, *dimm_mmio = NULL; + struct pdc_host_priv *hpriv = NULL; + unsigned int board_idx = (unsigned int) ent->driver_data; + int rc; + + if (!printed_version++) + printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); + + /* + * If this driver happens to only be useful on Apple's K2, then + * we should check that here as it has a normal Serverworks ID + */ + rc = pci_enable_device(pdev); + if (rc) + return rc; + + rc = pci_request_regions(pdev, DRV_NAME); + if (rc) + goto err_out; + + rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); + if (rc) + goto err_out_regions; + rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); + if (rc) + goto err_out_regions; + + probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL); + if (probe_ent == NULL) { + rc = -ENOMEM; + goto err_out_regions; + } + + memset(probe_ent, 0, sizeof(*probe_ent)); + probe_ent->pdev = pdev; + INIT_LIST_HEAD(&probe_ent->node); + + mmio_base = ioremap(pci_resource_start(pdev, 3), + pci_resource_len(pdev, 3)); + if (mmio_base == NULL) { + rc = -ENOMEM; + goto err_out_free_ent; + } + base = (unsigned long) mmio_base; + + hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL); + if (!hpriv) { + rc = -ENOMEM; + goto err_out_iounmap; + } + memset(hpriv, 0, sizeof(*hpriv)); + + dimm_mmio = ioremap(pci_resource_start(pdev, 4), + pci_resource_len(pdev, 4)); + if (!dimm_mmio) { + kfree(hpriv); + rc = -ENOMEM; + goto err_out_iounmap; + } + + hpriv->dimm_mmio = dimm_mmio; + + probe_ent->sht = pdc_port_info[board_idx].sht; + probe_ent->host_flags = pdc_port_info[board_idx].host_flags; + probe_ent->pio_mask = pdc_port_info[board_idx].pio_mask; + probe_ent->udma_mask = pdc_port_info[board_idx].udma_mask; + probe_ent->port_ops = pdc_port_info[board_idx].port_ops; + + probe_ent->irq = pdev->irq; + probe_ent->irq_flags = SA_SHIRQ; + probe_ent->mmio_base = mmio_base; + + probe_ent->private_data = hpriv; + base += PDC_CHIP0_OFS; + + pdc_sata_setup_port(&probe_ent->port[0], base + 0x200); + pdc_sata_setup_port(&probe_ent->port[1], base + 0x280); + + /* notice 4-port boards */ + switch (board_idx) { + case board_20621: + probe_ent->n_ports = 4; + + pdc_sata_setup_port(&probe_ent->port[2], base + 0x300); + pdc_sata_setup_port(&probe_ent->port[3], base + 0x380); + break; + default: + BUG(); + break; + } + + pci_set_master(pdev); + + /* initialize adapter */ + /* initialize local dimm */ + if (pdc20621_dimm_init(probe_ent)) { + rc = -ENOMEM; + goto err_out_iounmap_dimm; + } + pdc_20621_init(probe_ent); + + /* FIXME: check ata_device_add return value */ + ata_device_add(probe_ent); + kfree(probe_ent); + + return 0; + +err_out_iounmap_dimm: /* only get to this label if 20621 */ + kfree(hpriv); + iounmap(dimm_mmio); +err_out_iounmap: + iounmap(mmio_base); +err_out_free_ent: + kfree(probe_ent); +err_out_regions: + pci_release_regions(pdev); +err_out: + pci_disable_device(pdev); + return rc; +} + + +static int __init pdc_sata_init(void) +{ + return pci_module_init(&pdc_sata_pci_driver); +} + + +static void __exit pdc_sata_exit(void) +{ + pci_unregister_driver(&pdc_sata_pci_driver); +} + + +MODULE_AUTHOR("Jeff Garzik"); +MODULE_DESCRIPTION("Promise SATA low-level driver"); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(pci, pdc_sata_pci_tbl); + +module_init(pdc_sata_init); +module_exit(pdc_sata_exit); diff -Nru a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c --- a/drivers/scsi/sata_via.c Tue May 18 23:38:05 2004 +++ b/drivers/scsi/sata_via.c Tue May 18 23:38:05 2004 @@ -1,6 +1,10 @@ /* sata_via.c - VIA Serial ATA controllers + Maintained by: Jeff Garzik + Please ALWAYS copy linux-ide@vger.kernel.org + on emails. + Copyright 2003-2004 Red Hat, Inc. All rights reserved. Copyright 2003-2004 Jeff Garzik @@ -102,6 +106,7 @@ .phy_reset = sata_phy_reset, + .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, diff -Nru a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c --- a/drivers/scsi/sata_vsc.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/sata_vsc.c Tue May 18 23:38:07 2004 @@ -1,6 +1,10 @@ /* * sata_vsc.c - Vitesse VSC7174 4 port DPA SATA * + * Maintained by: Jeremy Higdon @ SGI + * Please ALWAYS copy linux-ide@vger.kernel.org + * on emails. + * * Copyright 2004 SGI * * Bits from Jeff Garzik, Copyright RedHat, Inc. @@ -171,7 +175,7 @@ struct ata_queued_cmd *qc; qc = ata_qc_from_tag(ap, ap->active_tag); - if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0)) + if (qc && (!(qc->tf.ctl & ATA_NIEN))) handled += ata_host_intr(ap, qc); } } @@ -209,6 +213,7 @@ .exec_command = ata_exec_command_mmio, .check_status = ata_check_status_mmio, .phy_reset = sata_phy_reset, + .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, .fill_sg = ata_fill_sg, .eng_timeout = ata_eng_timeout, diff -Nru a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c --- a/drivers/scsi/scsi.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/scsi.c Tue May 18 23:38:07 2004 @@ -977,8 +977,6 @@ */ int scsi_device_get(struct scsi_device *sdev) { - if(!sdev) - return -ENXIO; if (sdev->sdev_state == SDEV_DEL || sdev->sdev_state == SDEV_CANCEL) return -ENXIO; if (!get_device(&sdev->sdev_gendev)) diff -Nru a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c --- a/drivers/scsi/scsi_scan.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/scsi_scan.c Tue May 18 23:38:08 2004 @@ -330,6 +330,7 @@ struct scsi_device *sdev = sreq->sr_device; /* a bit ugly */ unsigned char scsi_cmd[MAX_COMMAND_SIZE]; int possible_inq_resp_len; + int count = 0; *bflags = 0; repeat_inquiry: @@ -350,19 +351,24 @@ SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: 1st INQUIRY %s with" " code 0x%x\n", sreq->sr_result ? "failed" : "successful", sreq->sr_result)); + ++count; if (sreq->sr_result) { if ((driver_byte(sreq->sr_result) & DRIVER_SENSE) != 0 && (sreq->sr_sense_buffer[2] & 0xf) == UNIT_ATTENTION && - sreq->sr_sense_buffer[12] == 0x28 && + (sreq->sr_sense_buffer[12] == 0x28 || + sreq->sr_sense_buffer[12] == 0x29) && sreq->sr_sense_buffer[13] == 0) { - /* not-ready to ready transition - good */ + /* not-ready to ready transition or power-on - good */ /* dpg: bogus? INQUIRY never returns UNIT_ATTENTION */ - } else - /* - * assume no peripheral if any other sort of error - */ - return; + /* Supposedly, but many buggy devices do so anyway */ + if (count < 3) + goto repeat_inquiry; + } + /* + * assume no peripheral if any other sort of error + */ + return; } /* @@ -543,17 +549,12 @@ * 011 the same. Stay compatible with previous code, and create a * Scsi_Device for a PQ of 1 * - * XXX Save the PQ field let the upper layers figure out if they - * want to attach or not to this device, do not set online FALSE; - * otherwise, offline devices still get an sd allocated, and they - * use up an sd slot. - */ - if (((inq_result[0] >> 5) & 7) == 1) { - SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: peripheral" - " qualifier of 1, device offlined\n")); - scsi_device_set_state(sdev, SDEV_OFFLINE); - } + * Don't set the device offline here; rather let the upper + * level drivers eval the PQ to decide whether they should + * attach. So remove ((inq_result[0] >> 5) & 7) == 1 check. + */ + sdev->inq_periph_qual = (inq_result[0] >> 5) & 7; sdev->removable = (0x80 & inq_result[1]) >> 7; sdev->lockable = sdev->removable; sdev->soft_reset = (inq_result[7] & 1) && ((inq_result[3] & 7) == 2); diff -Nru a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c --- a/drivers/scsi/scsi_sysfs.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/scsi_sysfs.c Tue May 18 23:38:06 2004 @@ -181,7 +181,8 @@ /* all probing is done in the individual ->probe routines */ static int scsi_bus_match(struct device *dev, struct device_driver *gendrv) { - return 1; + struct scsi_device *sdp = to_scsi_device(dev); + return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0; } struct bus_type scsi_bus_type = { @@ -302,6 +303,26 @@ sdev_rd_attr (rev, "%.4s\n"); static ssize_t +sdev_show_timeout (struct device *dev, char *buf) +{ + struct scsi_device *sdev; + sdev = to_scsi_device(dev); + return snprintf (buf, 20, "%d\n", sdev->timeout / HZ); +} + +static ssize_t +sdev_store_timeout (struct device *dev, const char *buf, size_t count) +{ + struct scsi_device *sdev; + int timeout; + sdev = to_scsi_device(dev); + sscanf (buf, "%d\n", &timeout); + sdev->timeout = timeout * HZ; + return count; +} +static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout) + +static ssize_t store_rescan_field (struct device *dev, const char *buf, size_t count) { scsi_rescan_device(dev); @@ -367,6 +388,7 @@ &dev_attr_rescan, &dev_attr_delete, &dev_attr_state, + &dev_attr_timeout, NULL }; diff -Nru a/drivers/scsi/sd.c b/drivers/scsi/sd.c --- a/drivers/scsi/sd.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/sd.c Tue May 18 23:38:08 2004 @@ -179,7 +179,16 @@ goto out; sdkp = scsi_disk(disk); if (!kref_get(&sdkp->kref)) - sdkp = NULL; + goto out_sdkp; + if (scsi_device_get(sdkp->device)) + goto out_put; + up(&sd_ref_sem); + return sdkp; + + out_put: + kref_put(&sdkp->kref); + out_sdkp: + sdkp = NULL; out: up(&sd_ref_sem); return sdkp; @@ -188,6 +197,7 @@ static void scsi_disk_put(struct scsi_disk *sdkp) { down(&sd_ref_sem); + scsi_device_put(sdkp->device); kref_put(&sdkp->kref); up(&sd_ref_sem); } @@ -207,9 +217,7 @@ sector_t block; struct scsi_device *sdp = SCpnt->device; - timeout = SD_TIMEOUT; - if (SCpnt->device->type != TYPE_DISK) - timeout = SD_MOD_TIMEOUT; + timeout = sdp->timeout; /* * these are already setup, just copy cdb basically @@ -1342,16 +1350,13 @@ if ((sdp->type != TYPE_DISK) && (sdp->type != TYPE_MOD)) goto out; - if ((error = scsi_device_get(sdp)) != 0) - goto out; - SCSI_LOG_HLQUEUE(3, printk("sd_attach: scsi device: <%d,%d,%d,%d>\n", sdp->host->host_no, sdp->channel, sdp->id, sdp->lun)); error = -ENOMEM; sdkp = kmalloc(sizeof(*sdkp), GFP_KERNEL); if (!sdkp) - goto out_put_sdev; + goto out; memset (sdkp, 0, sizeof(*sdkp)); kref_init(&sdkp->kref, scsi_disk_release); @@ -1382,6 +1387,13 @@ sdkp->index = index; sdkp->openers = 0; + if (!sdp->timeout) { + if (sdp->type == TYPE_DISK) + sdp->timeout = SD_TIMEOUT; + else + sdp->timeout = SD_MOD_TIMEOUT; + } + devno = make_sd_dev(index, 0); gd->major = MAJOR(devno); gd->first_minor = MINOR(devno); @@ -1427,8 +1439,6 @@ put_disk(gd); out_free: kfree(sdkp); -out_put_sdev: - scsi_device_put(sdp); out: return error; } @@ -1450,7 +1460,9 @@ del_gendisk(sdkp->disk); sd_shutdown(dev); - scsi_disk_put(sdkp); + down(&sd_ref_sem); + kref_put(&sdkp->kref); + up(&sd_ref_sem); return 0; } @@ -1467,7 +1479,6 @@ static void scsi_disk_release(struct kref *kref) { struct scsi_disk *sdkp = to_scsi_disk(kref); - struct scsi_device *sdev = sdkp->device; struct gendisk *disk = sdkp->disk; spin_lock(&sd_index_lock); @@ -1479,8 +1490,6 @@ put_disk(disk); kfree(sdkp); - - scsi_device_put(sdev); } /* diff -Nru a/drivers/scsi/sg.c b/drivers/scsi/sg.c --- a/drivers/scsi/sg.c Tue May 18 23:38:07 2004 +++ b/drivers/scsi/sg.c Tue May 18 23:38:07 2004 @@ -1099,10 +1099,10 @@ page_ptr = sg_scatg2virt(sclp) + m; page = virt_to_page(page_ptr); if (startFinish) - atomic_inc(&page->count); + get_page(page); else { if (page_count(page) > 0) - atomic_dec(&page->count); + __put_page(page); } } } @@ -1111,10 +1111,10 @@ page_ptr = (unsigned char *) rsv_schp->buffer + m; page = virt_to_page(page_ptr); if (startFinish) - atomic_inc(&page->count); + get_page(page); else { if (page_count(page) > 0) - atomic_dec(&page->count); + __put_page(page); } } } diff -Nru a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c --- a/drivers/scsi/sgiwd93.c Tue May 18 23:38:09 2004 +++ b/drivers/scsi/sgiwd93.c Tue May 18 23:38:09 2004 @@ -1,32 +1,32 @@ /* - * sgiwd93.c: SGI WD93 scsi driver. + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. * * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) - * 1999 Andrew R. Baker (andrewb@uab.edu) - * - Support for 2nd SCSI controller on Indigo2 - * 2001 Florian Lohoff (flo@rfc822.org) - * - Delete HPC scatter gather (Read corruption on - * multiple disks) - * - Cleanup wback cache handling + * Copyright (C) 1999 Andrew R. Baker (andrewb@uab.edu) + * Copyright (C) 2001 Florian Lohoff (flo@rfc822.org) + * Copyright (C) 2003 Ralf Baechle (ralf@linux-mips.org) * * (In all truth, Jed Schimmel wrote all this code.) - * */ #include +#include #include #include #include #include #include +#include #include #include #include #include #include -#include -#include -#include +#include +#include +#include #include #include @@ -37,95 +37,130 @@ #include +#if 0 +#define DPRINTK(args...) printk(args) +#else +#define DPRINTK(args...) +#endif + +#define HDATA(ptr) ((struct ip22_hostdata *)((ptr)->hostdata)) + +struct ip22_hostdata { + struct WD33C93_hostdata wh; + struct hpc_data { + dma_addr_t dma; + void * cpu; + } hd; +}; + struct hpc_chunk { struct hpc_dma_desc desc; u32 _padding; /* align to quadword boundary */ }; -struct Scsi_Host *sgiwd93_host = NULL; -struct Scsi_Host *sgiwd93_host1 = NULL; +struct Scsi_Host *sgiwd93_host; +struct Scsi_Host *sgiwd93_host1; /* Wuff wuff, wuff, wd33c93.c, wuff wuff, object oriented, bow wow. */ +static inline void write_wd33c93_count(const wd33c93_regs regs, + unsigned long value) +{ + *regs.SASR = WD_TRANSFER_COUNT_MSB; + mb(); + *regs.SCMD = ((value >> 16) & 0xff); + *regs.SCMD = ((value >> 8) & 0xff); + *regs.SCMD = ((value >> 0) & 0xff); + mb(); +} -/* XXX woof! */ -static void sgiwd93_intr(int irq, void *dev_id, struct pt_regs *regs) +static inline unsigned long read_wd33c93_count(const wd33c93_regs regs) { - unsigned long flags; - struct Scsi_Host *dev = dev_id; - - spin_lock_irqsave(dev->host_lock, flags); - wd33c93_intr((struct Scsi_Host *) dev_id); - spin_unlock_irqrestore(dev->host_lock, flags); + unsigned long value; + + *regs.SASR = WD_TRANSFER_COUNT_MSB; + mb(); + value = ((*regs.SCMD & 0xff) << 16); + value |= ((*regs.SCMD & 0xff) << 8); + value |= ((*regs.SCMD & 0xff) << 0); + mb(); + return value; } -#undef DEBUG_DMA +static irqreturn_t sgiwd93_intr(int irq, void *dev_id, struct pt_regs *regs) +{ + struct Scsi_Host * host = (struct Scsi_Host *) dev_id; + unsigned long flags; + + spin_lock_irqsave(host->host_lock, flags); + wd33c93_intr(host); + spin_unlock_irqrestore(host->host_lock, flags); + + return IRQ_HANDLED; +} static inline -void fill_hpc_entries (struct hpc_chunk **hcp, char *addr, unsigned long len) +void fill_hpc_entries(struct hpc_chunk *hcp, Scsi_Cmnd *cmd, int datainp) { - unsigned long physaddr; + unsigned long len = cmd->SCp.this_residual; + void *addr = cmd->SCp.ptr; + dma_addr_t physaddr; unsigned long count; - - physaddr = PHYSADDR(addr); + + physaddr = dma_map_single(NULL, addr, len, cmd->sc_data_direction); + cmd->SCp.dma_handle = physaddr; + while (len) { /* * even cntinfo could be up to 16383, without * magic only 8192 works correctly */ count = len > 8192 ? 8192 : len; - (*hcp)->desc.pbuf = physaddr; - (*hcp)->desc.cntinfo = count; - (*hcp)++; + hcp->desc.pbuf = physaddr; + hcp->desc.cntinfo = count; + hcp++; len -= count; physaddr += count; } + + /* + * To make sure, if we trip an HPC bug, that we transfer every single + * byte, we tag on an extra zero length dma descriptor at the end of + * the chain. + */ + hcp->desc.pbuf = 0; + hcp->desc.cntinfo = HPCDMA_EOX; } static int dma_setup(Scsi_Cmnd *cmd, int datainp) { - struct WD33C93_hostdata *hdata = (struct WD33C93_hostdata *)cmd->host->hostdata; - struct hpc3_scsiregs *hregs = (struct hpc3_scsiregs *) cmd->host->base; - struct hpc_chunk *hcp = (struct hpc_chunk *) hdata->dma_bounce_buffer; - -#ifdef DEBUG_DMA - printk("dma_setup: datainp<%d> hcp<%p> ", - datainp, hcp); -#endif + struct ip22_hostdata *hdata = HDATA(cmd->device->host); + struct hpc3_scsiregs *hregs = + (struct hpc3_scsiregs *) cmd->device->host->base; + struct hpc_chunk *hcp = (struct hpc_chunk *) hdata->hd.cpu; + + DPRINTK("dma_setup: datainp<%d> hcp<%p> ", datainp, hcp); - hdata->dma_dir = datainp; + hdata->wh.dma_dir = datainp; /* - * wd33c93 shouldn't pass us bogus dma_setups, but - * it does:-( The other wd33c93 drivers deal with - * it the same way (which isn't that obvious). - * IMHO a better fix would be, not to do these - * dma setups in the first place + * wd33c93 shouldn't pass us bogus dma_setups, but it does:-( The + * other wd33c93 drivers deal with it the same way (which isn't that + * obvious). IMHO a better fix would be, not to do these dma setups + * in the first place. */ - if (cmd->SCp.ptr == NULL) + if (cmd->SCp.ptr == NULL || cmd->SCp.this_residual == 0) return 1; - fill_hpc_entries (&hcp, cmd->SCp.ptr,cmd->SCp.this_residual); + fill_hpc_entries(hcp, cmd, datainp); - /* To make sure, if we trip an HPC bug, that we transfer - * every single byte, we tag on an extra zero length dma - * descriptor at the end of the chain. - */ - hcp->desc.pbuf = 0; - hcp->desc.cntinfo = (HPCDMA_EOX); - -#ifdef DEBUG_DMA - printk(" HPCGO\n"); -#endif + DPRINTK(" HPCGO\n"); /* Start up the HPC. */ - hregs->ndptr = PHYSADDR(hdata->dma_bounce_buffer); - if(datainp) { - dma_cache_inv((unsigned long) cmd->SCp.ptr, cmd->SCp.this_residual); - hregs->ctrl = (HPC3_SCTRL_ACTIVE); - } else { - dma_cache_wback_inv((unsigned long) cmd->SCp.ptr, cmd->SCp.this_residual); - hregs->ctrl = (HPC3_SCTRL_ACTIVE | HPC3_SCTRL_DIR); - } + hregs->ndptr = hdata->hd.dma; + if (datainp) + hregs->ctrl = HPC3_SCTRL_ACTIVE; + else + hregs->ctrl = HPC3_SCTRL_ACTIVE | HPC3_SCTRL_DIR; return 0; } @@ -133,29 +168,27 @@ static void dma_stop(struct Scsi_Host *instance, Scsi_Cmnd *SCpnt, int status) { - struct WD33C93_hostdata *hdata = (struct WD33C93_hostdata *)instance->hostdata; + struct ip22_hostdata *hdata = HDATA(instance); struct hpc3_scsiregs *hregs; if (!SCpnt) return; - hregs = (struct hpc3_scsiregs *) SCpnt->host->base; + hregs = (struct hpc3_scsiregs *) SCpnt->device->host->base; -#ifdef DEBUG_DMA - printk("dma_stop: status<%d> ", status); -#endif + DPRINTK("dma_stop: status<%d> ", status); /* First stop the HPC and flush it's FIFO. */ - if(hdata->dma_dir) { + if (hdata->wh.dma_dir) { hregs->ctrl |= HPC3_SCTRL_FLUSH; - while(hregs->ctrl & HPC3_SCTRL_ACTIVE) + while (hregs->ctrl & HPC3_SCTRL_ACTIVE) barrier(); } hregs->ctrl = 0; + dma_unmap_single(NULL, SCpnt->SCp.dma_handle, SCpnt->SCp.this_residual, + SCpnt->sc_data_direction); -#ifdef DEBUG_DMA - printk("\n"); -#endif + DPRINTK("\n"); } void sgiwd93_reset(unsigned long base) @@ -163,142 +196,142 @@ struct hpc3_scsiregs *hregs = (struct hpc3_scsiregs *) base; hregs->ctrl = HPC3_SCTRL_CRESET; - udelay (50); + udelay(50); hregs->ctrl = 0; } -static inline void init_hpc_chain(uchar *buf) +static inline void init_hpc_chain(struct hpc_data *hd) { - struct hpc_chunk *hcp = (struct hpc_chunk *) buf; + struct hpc_chunk *hcp = (struct hpc_chunk *) hd->cpu; + struct hpc_chunk *dma = (struct hpc_chunk *) hd->dma; unsigned long start, end; - start = (unsigned long) buf; + start = (unsigned long) hcp; end = start + PAGE_SIZE; - while(start < end) { - hcp->desc.pnext = PHYSADDR((hcp + 1)); + while (start < end) { + hcp->desc.pnext = (u32) (dma + 1); hcp->desc.cntinfo = HPCDMA_EOX; - hcp++; + hcp++; dma++; start += sizeof(struct hpc_chunk); }; hcp--; - hcp->desc.pnext = PHYSADDR(buf); - - /* Force flush to memory */ - dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE); + hcp->desc.pnext = hd->dma; } -int __init sgiwd93_detect(Scsi_Host_Template *SGIblows) +static struct Scsi_Host * __init sgiwd93_setup_scsi( + Scsi_Host_Template *SGIblows, int unit, int irq, + struct hpc3_scsiregs *hregs, unsigned char *wdregs) { - static unsigned char called = 0; - struct hpc3_scsiregs *hregs = &hpc3c0->scsi_chan0; - struct hpc3_scsiregs *hregs1 = &hpc3c0->scsi_chan1; - struct WD33C93_hostdata *hdata; - struct WD33C93_hostdata *hdata1; + struct ip22_hostdata *hdata; + struct Scsi_Host *host; wd33c93_regs regs; - uchar *buf; - - if(called) - return 0; /* Should bitch on the console about this... */ - - SGIblows->proc_name = "SGIWD93"; - sgiwd93_host = scsi_register(SGIblows, sizeof(struct WD33C93_hostdata)); - if(sgiwd93_host == NULL) - return 0; - sgiwd93_host->base = (unsigned long) hregs; - sgiwd93_host->irq = SGI_WD93_0_IRQ; - - buf = (uchar *) get_zeroed_page(GFP_KERNEL); - if (!buf) { - printk(KERN_WARNING "sgiwd93: Could not allocate memory for host0 buffer.\n"); - scsi_unregister(sgiwd93_host); - return 0; + host = scsi_register(SGIblows, sizeof(struct ip22_hostdata)); + if (!host) + return NULL; + + host->base = (unsigned long) hregs; + host->irq = irq; + + hdata = HDATA(host); + hdata->hd.cpu = dma_alloc_coherent(NULL, PAGE_SIZE, &hdata->hd.dma, + GFP_KERNEL); + if (!hdata->hd.cpu) { + printk(KERN_WARNING "sgiwd93: Could not allocate memory for " + "host %d buffer.\n", unit); + goto out_unregister; } - init_hpc_chain(buf); - - /* HPC_SCSI_REG0 | 0x03 | KSEG1 */ - regs.SASR = (unsigned char*) KSEG1ADDR (0x1fbc0003); - regs.SCMD = (unsigned char*) KSEG1ADDR (0x1fbc0007); - wd33c93_init(sgiwd93_host, regs, dma_setup, dma_stop, WD33C93_FS_16_20); - - hdata = (struct WD33C93_hostdata *)sgiwd93_host->hostdata; - hdata->no_sync = 0; - hdata->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf)); - - if (request_irq(SGI_WD93_0_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host)) { - printk(KERN_WARNING "sgiwd93: Could not register IRQ %d (for host 0).\n", SGI_WD93_0_IRQ); - wd33c93_release(); - free_page((unsigned long)buf); - scsi_unregister(sgiwd93_host); - return 0; + init_hpc_chain(&hdata->hd); + + regs.SASR = wdregs + 3; + regs.SCMD = wdregs + 7; + + wd33c93_init(host, regs, dma_setup, dma_stop, WD33C93_FS_16_20); + + hdata->wh.no_sync = 0; + + if (request_irq(irq, sgiwd93_intr, 0, "SGI WD93", (void *) host)) { + printk(KERN_WARNING "sgiwd93: Could not register irq %d " + "for host %d.\n", irq, unit); + goto out_free; } - /* set up second controller on the Indigo2 */ - if(!sgi_guiness) { - sgiwd93_host1 = scsi_register(SGIblows, sizeof(struct WD33C93_hostdata)); - if(sgiwd93_host1 != NULL) - { - sgiwd93_host1->base = (unsigned long) hregs1; - sgiwd93_host1->irq = SGI_WD93_1_IRQ; - - buf = (uchar *) get_zeroed_page(GFP_KERNEL); - if (!buf) { - printk(KERN_WARNING "sgiwd93: Could not allocate memory for host1 buffer.\n"); - scsi_unregister(sgiwd93_host1); - called = 1; - return 1; /* We registered host0 so return success*/ - } - init_hpc_chain(buf); - - /* HPC_SCSI_REG1 | 0x03 | KSEG1 */ - regs.SASR = (unsigned char*) KSEG1ADDR(0x1fbc8003); - regs.SCMD = (unsigned char*) KSEG1ADDR(0x1fbc8007); - wd33c93_init(sgiwd93_host1, regs, dma_setup, dma_stop, - WD33C93_FS_16_20); - - hdata1 = (struct WD33C93_hostdata *)sgiwd93_host1->hostdata; - hdata1->no_sync = 0; - hdata1->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf)); - - if (request_irq(SGI_WD93_1_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host1)) { - printk(KERN_WARNING "sgiwd93: Could not allocate irq %d (for host1).\n", SGI_WD93_1_IRQ); - wd33c93_release(); - free_page((unsigned long)buf); - scsi_unregister(sgiwd93_host1); - /* Fall through since host0 registered OK */ - } - } + return host; + +out_free: + dma_free_coherent(NULL, PAGE_SIZE, hdata->hd.cpu, hdata->hd.dma); + wd33c93_release(); + +out_unregister: + scsi_unregister(host); + + return NULL; +} + +int __init sgiwd93_detect(Scsi_Host_Template *SGIblows) +{ + int found = 0; + + SGIblows->proc_name = "SGIWD93"; + sgiwd93_host = sgiwd93_setup_scsi(SGIblows, 0, SGI_WD93_0_IRQ, + &hpc3c0->scsi_chan0, + (unsigned char *)hpc3c0->scsi0_ext); + if (sgiwd93_host) + found++; + + /* Set up second controller on the Indigo2 */ + if (ip22_is_fullhouse()) { + sgiwd93_host1 = sgiwd93_setup_scsi(SGIblows, 1, SGI_WD93_1_IRQ, + &hpc3c0->scsi_chan1, + (unsigned char *)hpc3c0->scsi1_ext); + if (sgiwd93_host1) + found++; } - - called = 1; - return 1; /* Found one. */ + return found; } int sgiwd93_release(struct Scsi_Host *instance) { - free_irq(SGI_WD93_0_IRQ, sgiwd93_intr); - free_page(KSEG0ADDR(hdata->dma_bounce_buffer)); + struct ip22_hostdata *hdata = HDATA(instance); + int irq = 0; + + if (sgiwd93_host && sgiwd93_host == instance) + irq = SGI_WD93_0_IRQ; + else if (sgiwd93_host1 && sgiwd93_host1 == instance) + irq = SGI_WD93_1_IRQ; + + free_irq(irq, sgiwd93_intr); + dma_free_coherent(NULL, PAGE_SIZE, hdata->hd.cpu, hdata->hd.dma); wd33c93_release(); - if(!sgi_guiness) { - free_irq(SGI_WD93_1_IRQ, sgiwd93_intr); - free_page(KSEG0ADDR(hdata1->dma_bounce_buffer)); - wd33c93_release(); - } + return 1; } +static int sgiwd93_bus_reset(Scsi_Cmnd *cmd) +{ + /* FIXME perform bus-specific reset */ + wd33c93_host_reset(cmd); + return SUCCESS; +} + +/* + * Kludge alert - the SCSI code calls the abort and reset method with int + * arguments not with pointers. So this is going to blow up beautyfully + * on 64-bit systems with memory outside the compat address spaces. + */ static Scsi_Host_Template driver_template = { - .proc_name = "SGIWD93", - .name = "SGI WD93", - .detect = sgiwd93_detect, - .release = sgiwd93_release, - .queuecommand = wd33c93_queuecommand, - .abort = wd33c93_abort, - .reset = wd33c93_reset, - .can_queue = CAN_QUEUE, - .this_id = 7, - .sg_tablesize = SG_ALL, - .cmd_per_lun = CMD_PER_LUN, - .use_clustering = DISABLE_CLUSTERING, + .proc_name = "SGIWD93", + .name = "SGI WD93", + .detect = sgiwd93_detect, + .release = sgiwd93_release, + .queuecommand = wd33c93_queuecommand, + .eh_abort_handler = wd33c93_abort, + .eh_bus_reset_handler = sgiwd93_bus_reset, + .eh_host_reset_handler = wd33c93_host_reset, + .can_queue = CAN_QUEUE, + .this_id = 7, + .sg_tablesize = SG_ALL, + .cmd_per_lun = CMD_PER_LUN, + .use_clustering = DISABLE_CLUSTERING, }; #include "scsi_module.c" diff -Nru a/drivers/scsi/sgiwd93.h b/drivers/scsi/sgiwd93.h --- a/drivers/scsi/sgiwd93.h Tue May 18 23:38:06 2004 +++ b/drivers/scsi/sgiwd93.h Tue May 18 23:38:06 2004 @@ -19,6 +19,6 @@ const char *wd33c93_info(void); int wd33c93_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int wd33c93_abort(Scsi_Cmnd *); -int wd33c93_reset(Scsi_Cmnd *, unsigned int); +int wd33c93_host_reset(Scsi_Cmnd * SCpnt); #endif /* !(_SGIWD93_H) */ diff -Nru a/drivers/scsi/sr.c b/drivers/scsi/sr.c --- a/drivers/scsi/sr.c Tue May 18 23:38:06 2004 +++ b/drivers/scsi/sr.c Tue May 18 23:38:06 2004 @@ -138,7 +138,15 @@ goto out; cd = scsi_cd(disk); if (!kref_get(&cd->kref)) - cd = NULL; + goto out_null; + if (scsi_device_get(cd->device)) + goto out_put; + goto out; + + out_put: + kref_put(&cd->kref); + out_null: + cd = NULL; out: up(&sr_ref_sem); return cd; @@ -147,6 +155,7 @@ static inline void scsi_cd_put(struct scsi_cd *cd) { down(&sr_ref_sem); + scsi_device_put(cd->device); kref_put(&cd->kref); up(&sr_ref_sem); } @@ -558,13 +567,10 @@ if (sdev->type != TYPE_ROM && sdev->type != TYPE_WORM) goto fail; - if ((error = scsi_device_get(sdev)) != 0) - goto fail; - error = -ENOMEM; cd = kmalloc(sizeof(*cd), GFP_KERNEL); if (!cd) - goto fail_put_sdev; + goto fail; memset(cd, 0, sizeof(*cd)); kref_init(&cd->kref, sr_kref_release); @@ -637,8 +643,6 @@ put_disk(disk); fail_free: kfree(cd); -fail_put_sdev: - scsi_device_put(sdev); fail: return error; } @@ -926,7 +930,6 @@ static void sr_kref_release(struct kref *kref) { struct scsi_cd *cd = container_of(kref, struct scsi_cd, kref); - struct scsi_device *sdev = cd->device; struct gendisk *disk = cd->disk; spin_lock(&sr_index_lock); @@ -940,8 +943,6 @@ put_disk(disk); kfree(cd); - - scsi_device_put(sdev); } static int sr_remove(struct device *dev) @@ -950,7 +951,9 @@ del_gendisk(cd->disk); - scsi_cd_put(cd); + down(&sr_ref_sem); + kref_put(&cd->kref); + up(&sr_ref_sem); return 0; } diff -Nru a/drivers/scsi/st.c b/drivers/scsi/st.c --- a/drivers/scsi/st.c Tue May 18 23:38:08 2004 +++ b/drivers/scsi/st.c Tue May 18 23:38:08 2004 @@ -17,7 +17,7 @@ Last modified: 18-JAN-1998 Richard Gooch Devfs support */ -static char *verstr = "20040318"; +static char *verstr = "20040403"; #include @@ -1031,7 +1031,8 @@ /* See that we have at least a one page buffer available */ if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) { - printk(KERN_WARNING "%s: Can't allocate tape buffer.\n", name); + printk(KERN_WARNING "%s: Can't allocate one page tape buffer.\n", + name); retval = (-EOVERFLOW); goto err_out; } @@ -1318,6 +1319,8 @@ bufsize = count; if (bufsize > STbp->buffer_size && !enlarge_buffer(STbp, bufsize, STp->restr_dma)) { + printk(KERN_WARNING "%s: Can't allocate %d byte tape buffer.\n", + tape_name(STp), bufsize); retval = (-EOVERFLOW); goto out; } @@ -1960,26 +1963,29 @@ +DEB( /* Set the driver options */ static void st_log_options(Scsi_Tape * STp, ST_mode * STm, char *name) { - printk(KERN_INFO - "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n", - name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes, - STm->do_read_ahead); - printk(KERN_INFO - "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n", - name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock); - printk(KERN_INFO - "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n", - name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions, - STp->scsi2_logical); - printk(KERN_INFO - "%s: sysv: %d nowait: %d\n", name, STm->sysv, STp->immediate); - DEB(printk(KERN_INFO - "%s: debugging: %d\n", - name, debugging);) + if (debugging) { + printk(KERN_INFO + "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n", + name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes, + STm->do_read_ahead); + printk(KERN_INFO + "%s: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n", + name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock); + printk(KERN_INFO + "%s: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n", + name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions, + STp->scsi2_logical); + printk(KERN_INFO + "%s: sysv: %d nowait: %d\n", name, STm->sysv, STp->immediate); + printk(KERN_INFO "%s: debugging: %d\n", + name, debugging); + } } + ) static int st_set_options(Scsi_Tape *STp, long options) @@ -2017,8 +2023,8 @@ STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0; STp->immediate = (options & MT_ST_NOWAIT) != 0; STm->sysv = (options & MT_ST_SYSV) != 0; - DEB( debugging = (options & MT_ST_DEBUGGING) != 0; ) - st_log_options(STp, STm, name); + DEB( debugging = (options & MT_ST_DEBUGGING) != 0; + st_log_options(STp, STm, name); ) } else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) { value = (code == MT_ST_SETBOOLEANS); if ((options & MT_ST_BUFFER_WRITES) != 0) @@ -2050,19 +2056,19 @@ STm->sysv = value; DEB( if ((options & MT_ST_DEBUGGING) != 0) - debugging = value; ) - st_log_options(STp, STm, name); + debugging = value; + st_log_options(STp, STm, name); ) } else if (code == MT_ST_WRITE_THRESHOLD) { /* Retained for compatibility */ } else if (code == MT_ST_DEF_BLKSIZE) { value = (options & ~MT_ST_OPTIONS); if (value == ~MT_ST_OPTIONS) { STm->default_blksize = (-1); - printk(KERN_INFO "%s: Default block size disabled.\n", name); + DEBC( printk(KERN_INFO "%s: Default block size disabled.\n", name)); } else { STm->default_blksize = value; - printk(KERN_INFO "%s: Default block size set to %d bytes.\n", - name, STm->default_blksize); + DEBC( printk(KERN_INFO "%s: Default block size set to %d bytes.\n", + name, STm->default_blksize)); if (STp->ready == ST_READY) { STp->blksize_changed = FALSE; set_mode_densblk(STp, STm); @@ -2072,12 +2078,12 @@ value = (options & ~MT_ST_OPTIONS); if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) { STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ; - printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name, - (value & ~MT_ST_SET_LONG_TIMEOUT)); + DEBC( printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name, + (value & ~MT_ST_SET_LONG_TIMEOUT))); } else { STp->timeout = value * HZ; - printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n", - name, value); + DEBC( printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n", + name, value) ); } } else if (code == MT_ST_SET_CLN) { value = (options & ~MT_ST_OPTIONS) & 0xff; @@ -2096,12 +2102,12 @@ if (code == MT_ST_DEF_DENSITY) { if (value == MT_ST_CLEAR_DEFAULT) { STm->default_density = (-1); - printk(KERN_INFO "%s: Density default disabled.\n", - name); + DEBC( printk(KERN_INFO "%s: Density default disabled.\n", + name)); } else { STm->default_density = value & 0xff; - printk(KERN_INFO "%s: Density default set to %x\n", - name, STm->default_density); + DEBC( printk(KERN_INFO "%s: Density default set to %x\n", + name, STm->default_density)); if (STp->ready == ST_READY) { STp->density_changed = FALSE; set_mode_densblk(STp, STm); @@ -2110,31 +2116,31 @@ } else if (code == MT_ST_DEF_DRVBUFFER) { if (value == MT_ST_CLEAR_DEFAULT) { STp->default_drvbuffer = 0xff; - printk(KERN_INFO - "%s: Drive buffer default disabled.\n", name); + DEBC( printk(KERN_INFO + "%s: Drive buffer default disabled.\n", name)); } else { STp->default_drvbuffer = value & 7; - printk(KERN_INFO + DEBC( printk(KERN_INFO "%s: Drive buffer default set to %x\n", - name, STp->default_drvbuffer); + name, STp->default_drvbuffer)); if (STp->ready == ST_READY) st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer); } } else if (code == MT_ST_DEF_COMPRESSION) { if (value == MT_ST_CLEAR_DEFAULT) { STm->default_compression = ST_DONT_TOUCH; - printk(KERN_INFO - "%s: Compression default disabled.\n", name); + DEBC( printk(KERN_INFO + "%s: Compression default disabled.\n", name)); } else { if ((value & 0xff00) != 0) { STp->c_algo = (value & 0xff00) >> 8; - printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n", - name, STp->c_algo); + DEBC( printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n", + name, STp->c_algo)); } if ((value & 0xff) != 0xff) { STm->default_compression = (value & 1 ? ST_YES : ST_NO); - printk(KERN_INFO "%s: Compression default set to %x\n", - name, (value & 1)); + DEBC( printk(KERN_INFO "%s: Compression default set to %x\n", + name, (value & 1))); if (STp->ready == ST_READY) { STp->compression_changed = FALSE; st_compression(STp, (STm->default_compression == ST_YES)); @@ -3465,7 +3471,7 @@ if (nbr <= 0) return FALSE; - priority = GFP_KERNEL; + priority = GFP_KERNEL | __GFP_NOWARN; if (need_dma) priority |= GFP_DMA; for (b_size = PAGE_SIZE, order=0; @@ -3482,8 +3488,6 @@ order--; continue; } - printk(KERN_NOTICE "st: failed to enlarge buffer to %d bytes.\n", - new_size); DEB(STbuffer->buffer_size = got); normalize_buffer(STbuffer); return FALSE; @@ -3495,9 +3499,6 @@ segs++; } STbuffer->b_data = page_address(STbuffer->frp[0].page); - DEBC(printk(ST_DEB_MSG - "st: Succeeded to enlarge buffer at %p to %d bytes (segs %d->%d, %d).\n", - STbuffer, got, STbuffer->orig_frp_segs, STbuffer->frp_segs, b_size)); return TRUE; } @@ -3513,11 +3514,6 @@ __free_pages(STbuffer->frp[i].page, order); STbuffer->buffer_size -= STbuffer->frp[i].length; } - DEB( - if (debugging && STbuffer->orig_frp_segs < STbuffer->frp_segs) - printk(ST_DEB_MSG "st: Buffer at %p normalized to %d bytes (segs %d->%d).\n", - STbuffer, STbuffer->buffer_size, STbuffer->frp_segs, STbuffer->orig_frp_segs); - ) /* end DEB */ STbuffer->frp_segs = STbuffer->orig_frp_segs; STbuffer->frp_sg_current = 0; } @@ -3547,11 +3543,9 @@ ubp += cnt; offset = 0; } - if (do_count) { /* Should never happen */ - printk(KERN_WARNING "st: append_to_buffer overflow (left %d).\n", - do_count); + if (do_count) /* Should never happen */ return (-EIO); - } + return 0; } @@ -3581,11 +3575,9 @@ ubp += cnt; offset = 0; } - if (do_count) { /* Should never happen */ - printk(KERN_WARNING "st: from_buffer overflow (left %d).\n", - do_count); + if (do_count) /* Should never happen */ return (-EIO); - } + return 0; } @@ -3605,10 +3597,6 @@ if (src_offset < st_bp->frp[src_seg].length) break; offset -= st_bp->frp[src_seg].length; - } - if (src_seg == st_bp->frp_segs) { /* Should never happen */ - printk(KERN_WARNING "st: move_buffer offset overflow.\n"); - return; } st_bp->buffer_bytes = st_bp->read_pointer = total; diff -Nru a/drivers/scsi/sym53c8xx_comm.h b/drivers/scsi/sym53c8xx_comm.h --- a/drivers/scsi/sym53c8xx_comm.h Tue May 18 23:38:07 2004 +++ b/drivers/scsi/sym53c8xx_comm.h Tue May 18 23:38:07 2004 @@ -59,11 +59,8 @@ ** sym53c8xx and ncr53c8xx drivers should share. ** The sharing will be achieved in a further version ** of the driver bundle. For now, only the ncr53c8xx -** driver includes this file. +** driver includes this file. */ - -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#define MAX(a,b) (((a) > (b)) ? (a) : (b)) /*========================================================== ** diff -Nru a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c --- a/drivers/serial/68360serial.c Tue May 18 23:38:09 2004 +++ b/drivers/serial/68360serial.c Tue May 18 23:38:09 2004 @@ -1650,7 +1650,6 @@ if (tty_hung_up_p(filp)) { DBG_CNT("before DEC-hung"); - MOD_DEC_USE_COUNT; local_irq_restore(flags); return; } @@ -1677,7 +1676,6 @@ } if (state->count) { DBG_CNT("before DEC-2"); - MOD_DEC_USE_COUNT; local_irq_restore(flags); return; } @@ -1732,7 +1730,6 @@ } info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); wake_up_interruptible(&info->close_wait); - MOD_DEC_USE_COUNT; local_irq_restore(flags); } @@ -1993,14 +1990,12 @@ if (retval) return retval; - MOD_INC_USE_COUNT; retval = block_til_ready(tty, filp, info); if (retval) { #ifdef SERIAL_DEBUG_OPEN printk("rs_open returning after block_til_ready with %d\n", retval); #endif - MOD_DEC_USE_COUNT; return retval; } @@ -2476,6 +2471,7 @@ static int baud_idx; static struct tty_operations rs_360_ops = { + .owner = THIS_MODULE, .open = rs_360_open, .close = rs_360_close, .write = rs_360_write, diff -Nru a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c --- a/drivers/serial/8250_pci.c Tue May 18 23:38:08 2004 +++ b/drivers/serial/8250_pci.c Tue May 18 23:38:08 2004 @@ -28,7 +28,6 @@ #include #include -#include #include #include "8250.h" @@ -704,7 +703,7 @@ .subdevice = PCI_SUBDEVICE_ID_OCTPRO232, .init = sbs_init, .setup = sbs_setup, - .exit = sbs_exit + .exit = __devexit_p(sbs_exit), }, /* * SBS Technologies, Inc., PMC-OCTALPRO 422 @@ -716,7 +715,7 @@ .subdevice = PCI_SUBDEVICE_ID_OCTPRO422, .init = sbs_init, .setup = sbs_setup, - .exit = sbs_exit + .exit = __devexit_p(sbs_exit), }, /* * SBS Technologies, Inc., P-Octal 232 @@ -728,7 +727,7 @@ .subdevice = PCI_SUBDEVICE_ID_POCTAL232, .init = sbs_init, .setup = sbs_setup, - .exit = sbs_exit + .exit = __devexit_p(sbs_exit), }, /* * SBS Technologies, Inc., P-Octal 422 @@ -740,7 +739,7 @@ .subdevice = PCI_SUBDEVICE_ID_POCTAL422, .init = sbs_init, .setup = sbs_setup, - .exit = sbs_exit + .exit = __devexit_p(sbs_exit), }, /* @@ -1585,7 +1584,7 @@ struct pci_board *board, tmp; struct pci_serial_quirk *quirk; struct serial_struct serial_req; - int base_baud, rc, nr_ports, i; + int rc, nr_ports, i; if (ent->driver_data >= ARRAY_SIZE(pci_boards)) { printk(KERN_ERR "pci_init_one: invalid driver_data: %ld\n", @@ -1663,16 +1662,11 @@ priv->quirk = quirk; pci_set_drvdata(dev, priv); - base_baud = board->base_baud; - if (!base_baud) { - moan_device("Board entry does not specify baud rate.", dev); - base_baud = BASE_BAUD; - } for (i = 0; i < nr_ports; i++) { memset(&serial_req, 0, sizeof(serial_req)); serial_req.flags = UPF_SKIP_TEST | UPF_AUTOPROBE | UPF_RESOURCES | UPF_SHARE_IRQ; - serial_req.baud_base = base_baud; + serial_req.baud_base = board->base_baud; serial_req.irq = get_pci_irq(dev, board, i); if (quirk->setup(dev, board, &serial_req, i)) break; diff -Nru a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c --- a/drivers/serial/sh-sci.c Tue May 18 23:38:09 2004 +++ b/drivers/serial/sh-sci.c Tue May 18 23:38:09 2004 @@ -904,14 +904,14 @@ { struct sci_port *s = &sci_ports[port->line]; - sci_request_irq(s); - sci_start_tx(port, 1); - sci_start_rx(port, 1); - #if defined(__H8300S__) h8300_sci_enable(port, sci_enable); #endif + sci_request_irq(s); + sci_start_tx(port, 1); + sci_start_rx(port, 1); + return 0; } @@ -1328,6 +1328,7 @@ int bits = 8; int parity = 'n'; int flow = 'n'; + int ret; if (co->index >= SCI_NPORTS) co->index = 0; @@ -1345,10 +1346,19 @@ #else port->uartclk = CONFIG_CPU_CLOCK; #endif +#if defined(__H8300S__) + h8300_sci_enable(port, sci_enable); +#endif if (options) uart_parse_options(options, &baud, &parity, &bits, &flow); - return uart_set_options(port, co, baud, parity, bits, flow); + ret = uart_set_options(port, co, baud, parity, bits, flow); +#if defined(__H8300H__) || defined(__H8300S__) + /* disable rx interrupt */ + if (ret == 0) + sci_stop_rx(port); +#endif + return ret; } static struct console serial_console = { diff -Nru a/drivers/telephony/ixj.h b/drivers/telephony/ixj.h --- a/drivers/telephony/ixj.h Tue May 18 23:38:09 2004 +++ b/drivers/telephony/ixj.h Tue May 18 23:38:09 2004 @@ -1198,22 +1198,13 @@ int aec_level; int cid_play_aec_level; int readers, writers; -#if LINUX_VERSION_CODE < 0x020400 - struct wait_queue *poll_q; - struct wait_queue *read_q; -#else wait_queue_head_t poll_q; wait_queue_head_t read_q; -#endif char *read_buffer, *read_buffer_end; char *read_convert_buffer; size_t read_buffer_size; unsigned int read_buffer_ready; -#if LINUX_VERSION_CODE < 0x020400 - struct wait_queue *write_q; -#else wait_queue_head_t write_q; -#endif char *write_buffer, *write_buffer_end; char *write_convert_buffer; size_t write_buffer_size; diff -Nru a/drivers/usb/Makefile b/drivers/usb/Makefile --- a/drivers/usb/Makefile Tue May 18 23:38:09 2004 +++ b/drivers/usb/Makefile Tue May 18 23:38:09 2004 @@ -66,3 +66,4 @@ obj-$(CONFIG_USB_TEST) += misc/ obj-$(CONFIG_USB_TIGL) += misc/ obj-$(CONFIG_USB_USS720) += misc/ +obj-$(CONFIG_USB_PHIDGETSERVO) += misc/ diff -Nru a/drivers/usb/class/bluetty.c b/drivers/usb/class/bluetty.c --- a/drivers/usb/class/bluetty.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/class/bluetty.c Tue May 18 23:38:08 2004 @@ -1234,7 +1234,7 @@ .chars_in_buffer = bluetooth_chars_in_buffer, }; -int usb_bluetooth_init(void) +static int usb_bluetooth_init(void) { int i; int result; @@ -1283,7 +1283,7 @@ } -void usb_bluetooth_exit(void) +static void usb_bluetooth_exit(void) { usb_deregister(&usb_bluetooth_driver); tty_unregister_driver(bluetooth_tty_driver); diff -Nru a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c --- a/drivers/usb/class/cdc-acm.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/class/cdc-acm.c Tue May 18 23:38:08 2004 @@ -567,6 +567,8 @@ * USB probe and disconnect routines. */ +#define CHECK_XFERTYPE(descr, xfer_type) (((descr)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == xfer_type) + static int acm_probe (struct usb_interface *intf, const struct usb_device_id *id) { @@ -583,143 +585,150 @@ dev = interface_to_usbdev (intf); - cfacm = dev->actconfig; - - /* We know we're probe()d with the control interface. */ - ifcom = intf->cur_altsetting; - - /* ACM doesn't guarantee the data interface is - * adjacent to the control interface, or that if one - * is there it's not for call management ... so find - * it - */ - for (j = 0; j < cfacm->desc.bNumInterfaces; j++) { - ifdata = cfacm->interface[j]->cur_altsetting; - data = cfacm->interface[j]; - - if (ifdata->desc.bInterfaceClass == 10 && - ifdata->desc.bNumEndpoints == 2) { - epctrl = &ifcom->endpoint[0].desc; - epread = &ifdata->endpoint[0].desc; - epwrite = &ifdata->endpoint[1].desc; - - if ((epctrl->bEndpointAddress & 0x80) != 0x80 || - (epctrl->bmAttributes & 3) != 3 || - (epread->bmAttributes & 3) != 2 || - (epwrite->bmAttributes & 3) != 2 || - ((epread->bEndpointAddress & 0x80) ^ (epwrite->bEndpointAddress & 0x80)) != 0x80) - goto next_interface; - - if ((epread->bEndpointAddress & 0x80) != 0x80) { - epread = &ifdata->endpoint[1].desc; - epwrite = &ifdata->endpoint[0].desc; - } - dbg("found data interface at %d\n", j); - break; - } else { -next_interface: - ifdata = NULL; - data = NULL; - } - } - - /* there's been a problem */ - if (!ifdata) { - dbg("interface not found (%p)\n", ifdata); - return -ENODEV; - - } - - for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++); - if (acm_table[minor]) { - err("no more free acm devices"); - return -ENODEV; - } + cfacm = dev->actconfig; - if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) { - err("out of memory"); - return -ENOMEM; - } - memset(acm, 0, sizeof(struct acm)); - - ctrlsize = epctrl->wMaxPacketSize; - readsize = epread->wMaxPacketSize; - acm->writesize = epwrite->wMaxPacketSize; - acm->control = intf; - acm->data = data; - acm->minor = minor; - acm->dev = dev; - - acm->bh.func = acm_rx_tasklet; - acm->bh.data = (unsigned long) acm; - INIT_WORK(&acm->work, acm_softint, acm); - - if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) { - err("out of memory"); - kfree(acm); - return -ENOMEM; - } + /* We know we're probe()d with the control interface. */ + ifcom = intf->cur_altsetting; - acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL); - if (!acm->ctrlurb) { - err("out of memory"); - kfree(acm); - kfree(buf); - return -ENOMEM; - } - acm->readurb = usb_alloc_urb(0, GFP_KERNEL); - if (!acm->readurb) { - err("out of memory"); - usb_free_urb(acm->ctrlurb); - kfree(acm); - kfree(buf); - return -ENOMEM; - } - acm->writeurb = usb_alloc_urb(0, GFP_KERNEL); - if (!acm->writeurb) { - err("out of memory"); - usb_free_urb(acm->readurb); - usb_free_urb(acm->ctrlurb); - kfree(acm); - kfree(buf); - return -ENOMEM; - } - - usb_fill_int_urb(acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress), - buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval); + /* ACM doesn't guarantee the data interface is + * adjacent to the control interface, or that if one + * is there it's not for call management ... so find + * it + */ + for (j = 0; j < cfacm->desc.bNumInterfaces; j++) { + ifdata = cfacm->interface[j]->cur_altsetting; + data = cfacm->interface[j]; + + if (ifdata->desc.bInterfaceClass == USB_CLASS_CDC_DATA + && ifdata->desc.bNumEndpoints == 2) { + + epctrl = &ifcom->endpoint[0].desc; + epread = &ifdata->endpoint[0].desc; + epwrite = &ifdata->endpoint[1].desc; + + if ((epctrl->bEndpointAddress & USB_DIR_IN) != USB_DIR_IN + || !CHECK_XFERTYPE(epctrl, USB_ENDPOINT_XFER_INT) + || !CHECK_XFERTYPE(epread, USB_ENDPOINT_XFER_BULK) + || !CHECK_XFERTYPE(epwrite, USB_ENDPOINT_XFER_BULK) + || ((epread->bEndpointAddress & USB_DIR_IN) + ^ (epwrite->bEndpointAddress & USB_DIR_IN)) != USB_DIR_IN) { + /* not suitable */ + goto next_interface; + } + + if ((epread->bEndpointAddress & USB_DIR_IN) != USB_DIR_IN) { + /* descriptors are swapped */ + epread = &ifdata->endpoint[1].desc; + epwrite = &ifdata->endpoint[0].desc; + } + dev_dbg(&intf->dev, "found data interface at %d\n", j); + break; + } else { +next_interface: + ifdata = NULL; + data = NULL; + } + } + + /* there's been a problem */ + if (!ifdata) { + dev_dbg(&intf->dev, "data interface not found\n"); + return -ENODEV; + + } + + for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++); + if (acm_table[minor]) { + err("no more free acm devices"); + return -ENODEV; + } + + if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) { + dev_dbg(&intf->dev, "out of memory (acm kmalloc)\n"); + return -ENOMEM; + } + + memset(acm, 0, sizeof(struct acm)); - usb_fill_bulk_urb(acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress), - buf += ctrlsize, readsize, acm_read_bulk, acm); - acm->readurb->transfer_flags |= URB_NO_FSBR; - - usb_fill_bulk_urb(acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress), - buf += readsize, acm->writesize, acm_write_bulk, acm); - acm->writeurb->transfer_flags |= URB_NO_FSBR; - - dev_info(&intf->dev, "ttyACM%d: USB ACM device", minor); - - acm_set_control(acm, acm->ctrlout); - - acm->line.speed = cpu_to_le32(9600); - acm->line.databits = 8; - acm_set_line(acm, &acm->line); - - if ( (j = usb_driver_claim_interface(&acm_driver, data, acm)) != 0) { - err("claim failed"); - usb_free_urb(acm->ctrlurb); - usb_free_urb(acm->readurb); - usb_free_urb(acm->writeurb); - kfree(acm); - kfree(buf); - return j; - } - - tty_register_device(acm_tty_driver, minor, &intf->dev); - - acm_table[minor] = acm; - usb_set_intfdata (intf, acm); - return 0; + ctrlsize = epctrl->wMaxPacketSize; + readsize = epread->wMaxPacketSize; + acm->writesize = epwrite->wMaxPacketSize; + acm->control = intf; + acm->data = data; + acm->minor = minor; + acm->dev = dev; + + acm->bh.func = acm_rx_tasklet; + acm->bh.data = (unsigned long) acm; + INIT_WORK(&acm->work, acm_softint, acm); + + if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) { + dev_dbg(&intf->dev, "out of memory (buf kmalloc)\n"); + kfree(acm); + return -ENOMEM; + } + + acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL); + if (!acm->ctrlurb) { + dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n"); + kfree(acm); + kfree(buf); + return -ENOMEM; + } + acm->readurb = usb_alloc_urb(0, GFP_KERNEL); + if (!acm->readurb) { + dev_dbg(&intf->dev, "out of memory (readurb kmalloc)\n"); + usb_free_urb(acm->ctrlurb); + kfree(acm); + kfree(buf); + return -ENOMEM; + } + acm->writeurb = usb_alloc_urb(0, GFP_KERNEL); + if (!acm->writeurb) { + dev_dbg(&intf->dev, "out of memory (writeurb kmalloc)\n"); + usb_free_urb(acm->readurb); + usb_free_urb(acm->ctrlurb); + kfree(acm); + kfree(buf); + return -ENOMEM; + } + + usb_fill_int_urb(acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress), + buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval); + + usb_fill_bulk_urb(acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress), + buf += ctrlsize, readsize, acm_read_bulk, acm); + acm->readurb->transfer_flags |= URB_NO_FSBR; + + usb_fill_bulk_urb(acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress), + buf += readsize, acm->writesize, acm_write_bulk, acm); + acm->writeurb->transfer_flags |= URB_NO_FSBR; + + if ( (j = usb_driver_claim_interface(&acm_driver, data, acm)) != 0) { + err("claim failed"); + usb_free_urb(acm->ctrlurb); + usb_free_urb(acm->readurb); + usb_free_urb(acm->writeurb); + kfree(acm); + kfree(buf); + return j; + } + + tty_register_device(acm_tty_driver, minor, &intf->dev); + + dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor); + + acm_set_control(acm, acm->ctrlout); + + acm->line.speed = cpu_to_le32(9600); + acm->line.databits = 8; + acm_set_line(acm, &acm->line); + + acm_table[minor] = acm; + usb_set_intfdata (intf, acm); + return 0; } +#undef CHECK_XFERTYPE static void acm_disconnect(struct usb_interface *intf) { diff -Nru a/drivers/usb/core/config.c b/drivers/usb/core/config.c --- a/drivers/usb/core/config.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/core/config.c Tue May 18 23:38:05 2004 @@ -18,6 +18,11 @@ #define USB_MAXCONFIG 8 /* Arbitrary limit */ +static inline const char *plural(int n) +{ + return (n == 1 ? "" : "s"); +} + static int find_next_descriptor(unsigned char *buffer, int size, int dt1, int dt2, int *num_skipped) { @@ -26,7 +31,7 @@ unsigned char *buffer0 = buffer; /* Find the next descriptor of type dt1 or dt2 */ - while (size >= sizeof(struct usb_descriptor_header)) { + while (size > 0) { h = (struct usb_descriptor_header *) buffer; if (h->bDescriptorType == dt1 || h->bDescriptorType == dt2) break; @@ -43,46 +48,46 @@ } static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum, - int asnum, struct usb_host_endpoint *endpoint, + int asnum, struct usb_host_interface *ifp, int num_ep, unsigned char *buffer, int size) { unsigned char *buffer0 = buffer; - struct usb_descriptor_header *header; + struct usb_endpoint_descriptor *d; + struct usb_host_endpoint *endpoint; int n, i; - header = (struct usb_descriptor_header *)buffer; - if (header->bDescriptorType != USB_DT_ENDPOINT) { - dev_err(ddev, "config %d interface %d altsetting %d has an " - "unexpected descriptor of type 0x%X, " - "expecting endpoint type 0x%X\n", - cfgno, inum, asnum, - header->bDescriptorType, USB_DT_ENDPOINT); - return -EINVAL; - } + d = (struct usb_endpoint_descriptor *) buffer; + buffer += d->bLength; + size -= d->bLength; - if (header->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE) - memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_AUDIO_SIZE); - else if (header->bLength >= USB_DT_ENDPOINT_SIZE) - memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_SIZE); + if (d->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE) + n = USB_DT_ENDPOINT_AUDIO_SIZE; + else if (d->bLength >= USB_DT_ENDPOINT_SIZE) + n = USB_DT_ENDPOINT_SIZE; else { - dev_err(ddev, "config %d interface %d altsetting %d has an " - "invalid endpoint descriptor of length %d\n", - cfgno, inum, asnum, header->bLength); - return -EINVAL; + dev_warn(ddev, "config %d interface %d altsetting %d has an " + "invalid endpoint descriptor of length %d, skipping\n", + cfgno, inum, asnum, d->bLength); + goto skip_to_next_endpoint_or_interface_descriptor; } - i = endpoint->desc.bEndpointAddress & ~USB_ENDPOINT_DIR_MASK; + i = d->bEndpointAddress & ~USB_ENDPOINT_DIR_MASK; if (i >= 16 || i == 0) { - dev_err(ddev, "config %d interface %d altsetting %d has an " - "invalid endpoint with address 0x%X\n", - cfgno, inum, asnum, endpoint->desc.bEndpointAddress); - return -EINVAL; + dev_warn(ddev, "config %d interface %d altsetting %d has an " + "invalid endpoint with address 0x%X, skipping\n", + cfgno, inum, asnum, d->bEndpointAddress); + goto skip_to_next_endpoint_or_interface_descriptor; } - le16_to_cpus(&endpoint->desc.wMaxPacketSize); + /* Only store as many endpoints as we have room for */ + if (ifp->desc.bNumEndpoints >= num_ep) + goto skip_to_next_endpoint_or_interface_descriptor; + + endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints]; + ++ifp->desc.bNumEndpoints; - buffer += header->bLength; - size -= header->bLength; + memcpy(&endpoint->desc, d, n); + le16_to_cpus(&endpoint->desc.wMaxPacketSize); /* Skip over any Class Specific or Vendor Specific descriptors; * find the next endpoint or interface descriptor */ @@ -91,67 +96,72 @@ USB_DT_INTERFACE, &n); endpoint->extralen = i; if (n > 0) - dev_dbg(ddev, "skipped %d class/vendor specific endpoint " - "descriptors\n", n); + dev_dbg(ddev, "skipped %d descriptor%s after %s\n", + n, plural(n), "endpoint"); + return buffer - buffer0 + i; + +skip_to_next_endpoint_or_interface_descriptor: + i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT, + USB_DT_INTERFACE, NULL); return buffer - buffer0 + i; } -static void usb_free_intf(struct usb_interface *intf) +static void usb_release_interface_cache(struct kref *ref) { + struct usb_interface_cache *intfc = ref_to_usb_interface_cache(ref); int j; - if (intf->altsetting) { - for (j = 0; j < intf->num_altsetting; j++) { - struct usb_host_interface *alt = &intf->altsetting[j]; - - kfree(alt->endpoint); - } - kfree(intf->altsetting); - } - kfree(intf); + for (j = 0; j < intfc->num_altsetting; j++) + kfree(intfc->altsetting[j].endpoint); + kfree(intfc); } static int usb_parse_interface(struct device *ddev, int cfgno, - struct usb_host_config *config, unsigned char *buffer, int size) + struct usb_host_config *config, unsigned char *buffer, int size, + u8 inums[], u8 nalts[]) { unsigned char *buffer0 = buffer; struct usb_interface_descriptor *d; int inum, asnum; - struct usb_interface *interface; + struct usb_interface_cache *intfc; struct usb_host_interface *alt; int i, n; int len, retval; + int num_ep, num_ep_orig; d = (struct usb_interface_descriptor *) buffer; buffer += d->bLength; size -= d->bLength; - if (d->bDescriptorType != USB_DT_INTERFACE) { - dev_err(ddev, "config %d has an unexpected descriptor of type " - "0x%X, expecting interface type 0x%X\n", - cfgno, d->bDescriptorType, USB_DT_INTERFACE); - return -EINVAL; - } + if (d->bLength < USB_DT_INTERFACE_SIZE) + goto skip_to_next_interface_descriptor; + /* Which interface entry is this? */ + intfc = NULL; inum = d->bInterfaceNumber; - if (inum >= config->desc.bNumInterfaces) + for (i = 0; i < config->desc.bNumInterfaces; ++i) { + if (inums[i] == inum) { + intfc = config->intf_cache[i]; + break; + } + } + if (!intfc || intfc->num_altsetting >= nalts[i]) goto skip_to_next_interface_descriptor; - interface = config->interface[inum]; + /* Check for duplicate altsetting entries */ asnum = d->bAlternateSetting; - if (asnum >= interface->num_altsetting) { - dev_err(ddev, "config %d interface %d has an invalid " - "alternate setting number: %d but max is %d\n", - cfgno, inum, asnum, interface->num_altsetting - 1); - return -EINVAL; + for ((i = 0, alt = &intfc->altsetting[0]); + i < intfc->num_altsetting; + (++i, ++alt)) { + if (alt->desc.bAlternateSetting == asnum) { + dev_warn(ddev, "Duplicate descriptor for config %d " + "interface %d altsetting %d, skipping\n", + cfgno, inum, asnum); + goto skip_to_next_interface_descriptor; + } } - alt = &interface->altsetting[asnum]; - if (alt->desc.bLength) { - dev_err(ddev, "Duplicate descriptor for config %d " - "interface %d altsetting %d\n", cfgno, inum, asnum); - return -EINVAL; - } + ++intfc->num_altsetting; memcpy(&alt->desc, d, USB_DT_INTERFACE_SIZE); /* Skip over any Class Specific or Vendor Specific descriptors; @@ -161,41 +171,48 @@ USB_DT_INTERFACE, &n); alt->extralen = i; if (n > 0) - dev_dbg(ddev, "skipped %d class/vendor specific " - "interface descriptors\n", n); + dev_dbg(ddev, "skipped %d descriptor%s after %s\n", + n, plural(n), "interface"); buffer += i; size -= i; - if (alt->desc.bNumEndpoints > USB_MAXENDPOINTS) { - dev_err(ddev, "too many endpoints for config %d interface %d " - "altsetting %d: %d, maximum allowed: %d\n", - cfgno, inum, asnum, alt->desc.bNumEndpoints, - USB_MAXENDPOINTS); - return -EINVAL; + /* Allocate space for the right(?) number of endpoints */ + num_ep = num_ep_orig = alt->desc.bNumEndpoints; + alt->desc.bNumEndpoints = 0; // Use as a counter + if (num_ep > USB_MAXENDPOINTS) { + dev_warn(ddev, "too many endpoints for config %d interface %d " + "altsetting %d: %d, using maximum allowed: %d\n", + cfgno, inum, asnum, num_ep, USB_MAXENDPOINTS); + num_ep = USB_MAXENDPOINTS; } - len = alt->desc.bNumEndpoints * sizeof(struct usb_host_endpoint); + len = sizeof(struct usb_host_endpoint) * num_ep; alt->endpoint = kmalloc(len, GFP_KERNEL); if (!alt->endpoint) return -ENOMEM; memset(alt->endpoint, 0, len); - for (i = 0; i < alt->desc.bNumEndpoints; i++) { - if (size < USB_DT_ENDPOINT_SIZE) { - dev_err(ddev, "too few endpoint descriptors for " - "config %d interface %d altsetting %d\n", - cfgno, inum, asnum); - return -EINVAL; - } - - retval = usb_parse_endpoint(ddev, cfgno, inum, asnum, - alt->endpoint + i, buffer, size); + /* Parse all the endpoint descriptors */ + n = 0; + while (size > 0) { + if (((struct usb_descriptor_header *) buffer)->bDescriptorType + == USB_DT_INTERFACE) + break; + retval = usb_parse_endpoint(ddev, cfgno, inum, asnum, alt, + num_ep, buffer, size); if (retval < 0) return retval; + ++n; buffer += retval; size -= retval; } + + if (n != num_ep_orig) + dev_warn(ddev, "config %d interface %d altsetting %d has %d " + "endpoint descriptor%s, different from the interface " + "descriptor's value: %d\n", + cfgno, inum, asnum, n, plural(n), num_ep_orig); return buffer - buffer0; skip_to_next_interface_descriptor: @@ -207,14 +224,16 @@ int usb_parse_configuration(struct device *ddev, int cfgidx, struct usb_host_config *config, unsigned char *buffer, int size) { + unsigned char *buffer0 = buffer; int cfgno; int nintf, nintf_orig; int i, j, n; - struct usb_interface *interface; + struct usb_interface_cache *intfc; unsigned char *buffer2; int size2; struct usb_descriptor_header *header; int len, retval; + u8 inums[USB_MAXINTERFACES], nalts[USB_MAXINTERFACES]; memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE); if (config->desc.bDescriptorType != USB_DT_CONFIG || @@ -224,7 +243,6 @@ config->desc.bDescriptorType, config->desc.bLength); return -EINVAL; } - config->desc.wTotalLength = size; cfgno = config->desc.bConfigurationValue; buffer += config->desc.bLength; @@ -235,84 +253,110 @@ dev_warn(ddev, "config %d has too many interfaces: %d, " "using maximum allowed: %d\n", cfgno, nintf, USB_MAXINTERFACES); - config->desc.bNumInterfaces = nintf = USB_MAXINTERFACES; - } - - for (i = 0; i < nintf; ++i) { - interface = config->interface[i] = - kmalloc(sizeof(struct usb_interface), GFP_KERNEL); - if (!interface) - return -ENOMEM; - memset(interface, 0, sizeof(struct usb_interface)); + nintf = USB_MAXINTERFACES; } /* Go through the descriptors, checking their length and counting the * number of altsettings for each interface */ + n = 0; for ((buffer2 = buffer, size2 = size); - size2 >= sizeof(struct usb_descriptor_header); + size2 > 0; (buffer2 += header->bLength, size2 -= header->bLength)) { + if (size2 < sizeof(struct usb_descriptor_header)) { + dev_warn(ddev, "config %d descriptor has %d excess " + "byte%s, ignoring\n", + cfgno, size2, plural(size2)); + break; + } + header = (struct usb_descriptor_header *) buffer2; if ((header->bLength > size2) || (header->bLength < 2)) { - dev_err(ddev, "config %d has an invalid descriptor " - "of length %d\n", cfgno, header->bLength); - return -EINVAL; + dev_warn(ddev, "config %d has an invalid descriptor " + "of length %d, skipping remainder of the config\n", + cfgno, header->bLength); + break; } if (header->bDescriptorType == USB_DT_INTERFACE) { struct usb_interface_descriptor *d; + int inum; d = (struct usb_interface_descriptor *) header; if (d->bLength < USB_DT_INTERFACE_SIZE) { - dev_err(ddev, "config %d has an invalid " - "interface descriptor of length %d\n", - cfgno, d->bLength); - return -EINVAL; + dev_warn(ddev, "config %d has an invalid " + "interface descriptor of length %d, " + "skipping\n", cfgno, d->bLength); + continue; } - i = d->bInterfaceNumber; - if (i >= nintf_orig) { - dev_err(ddev, "config %d has an invalid " + inum = d->bInterfaceNumber; + if (inum >= nintf_orig) + dev_warn(ddev, "config %d has an invalid " "interface number: %d but max is %d\n", - cfgno, i, nintf_orig - 1); - return -EINVAL; + cfgno, inum, nintf_orig - 1); + + /* Have we already encountered this interface? + * Count its altsettings */ + for (i = 0; i < n; ++i) { + if (inums[i] == inum) + break; + } + if (i < n) { + if (nalts[i] < 255) + ++nalts[i]; + } else if (n < USB_MAXINTERFACES) { + inums[n] = inum; + nalts[n] = 1; + ++n; } - if (i < nintf) - ++config->interface[i]->num_altsetting; } else if (header->bDescriptorType == USB_DT_DEVICE || - header->bDescriptorType == USB_DT_CONFIG) { - dev_err(ddev, "config %d contains an unexpected " - "descriptor of type 0x%X\n", + header->bDescriptorType == USB_DT_CONFIG) + dev_warn(ddev, "config %d contains an unexpected " + "descriptor of type 0x%X, skipping\n", cfgno, header->bDescriptorType); - return -EINVAL; - } } /* for ((buffer2 = buffer, size2 = size); ...) */ + size = buffer2 - buffer; + config->desc.wTotalLength = buffer2 - buffer0; + + if (n != nintf) + dev_warn(ddev, "config %d has %d interface%s, different from " + "the descriptor's value: %d\n", + cfgno, n, plural(n), nintf_orig); + else if (n == 0) + dev_warn(ddev, "config %d has no interfaces?\n", cfgno); + config->desc.bNumInterfaces = nintf = n; - /* Allocate the altsetting arrays */ + /* Check for missing interface numbers */ for (i = 0; i < nintf; ++i) { - interface = config->interface[i]; - if (interface->num_altsetting > USB_MAXALTSETTING) { - dev_err(ddev, "too many alternate settings for " - "config %d interface %d: %d, " - "maximum allowed: %d\n", - cfgno, i, interface->num_altsetting, - USB_MAXALTSETTING); - return -EINVAL; + for (j = 0; j < nintf; ++j) { + if (inums[j] == i) + break; } - if (interface->num_altsetting == 0) { - dev_err(ddev, "config %d has no interface number " + if (j >= nintf) + dev_warn(ddev, "config %d has no interface number " "%d\n", cfgno, i); - return -EINVAL; + } + + /* Allocate the usb_interface_caches and altsetting arrays */ + for (i = 0; i < nintf; ++i) { + j = nalts[i]; + if (j > USB_MAXALTSETTING) { + dev_warn(ddev, "too many alternate settings for " + "config %d interface %d: %d, " + "using maximum allowed: %d\n", + cfgno, inums[i], j, USB_MAXALTSETTING); + nalts[i] = j = USB_MAXALTSETTING; } - len = sizeof(*interface->altsetting) * - interface->num_altsetting; - interface->altsetting = kmalloc(len, GFP_KERNEL); - if (!interface->altsetting) + len = sizeof(*intfc) + sizeof(struct usb_host_interface) * j; + config->intf_cache[i] = intfc = kmalloc(len, GFP_KERNEL); + if (!intfc) return -ENOMEM; - memset(interface->altsetting, 0, len); + memset(intfc, 0, len); + kref_init(&intfc->ref, usb_release_interface_cache); } /* Skip over any Class Specific or Vendor Specific descriptors; @@ -322,15 +366,15 @@ USB_DT_INTERFACE, &n); config->extralen = i; if (n > 0) - dev_dbg(ddev, "skipped %d class/vendor specific " - "configuration descriptors\n", n); + dev_dbg(ddev, "skipped %d descriptor%s after %s\n", + n, plural(n), "configuration"); buffer += i; size -= i; /* Parse all the interface/altsetting descriptors */ - while (size >= sizeof(struct usb_descriptor_header)) { + while (size > 0) { retval = usb_parse_interface(ddev, cfgno, config, - buffer, size); + buffer, size, inums, nalts); if (retval < 0) return retval; @@ -340,17 +384,20 @@ /* Check for missing altsettings */ for (i = 0; i < nintf; ++i) { - interface = config->interface[i]; - for (j = 0; j < interface->num_altsetting; ++j) { - if (!interface->altsetting[j].desc.bLength) { - dev_err(ddev, "config %d interface %d has no " - "altsetting %d\n", cfgno, i, j); - return -EINVAL; + intfc = config->intf_cache[i]; + for (j = 0; j < intfc->num_altsetting; ++j) { + for (n = 0; n < intfc->num_altsetting; ++n) { + if (intfc->altsetting[n].desc. + bAlternateSetting == j) + break; } + if (n >= intfc->num_altsetting) + dev_warn(ddev, "config %d interface %d has no " + "altsetting %d\n", cfgno, inums[i], j); } } - return size; + return 0; } // hub-only!! ... and only exported for reset/reinit path. @@ -374,10 +421,8 @@ struct usb_host_config *cf = &dev->config[c]; for (i = 0; i < cf->desc.bNumInterfaces; i++) { - struct usb_interface *ifp = cf->interface[i]; - - if (ifp) - usb_free_intf(ifp); + if (cf->intf_cache[i]) + kref_put(&cf->intf_cache[i]->ref); } } kfree(dev->config); @@ -458,21 +503,16 @@ goto err; } if (result < length) { - dev_err(ddev, "config index %d descriptor too short " + dev_warn(ddev, "config index %d descriptor too short " "(expected %i, got %i)\n", cfgno, length, result); - result = -EINVAL; - kfree(bigbuffer); - goto err; + length = result; } dev->rawdescriptors[cfgno] = bigbuffer; result = usb_parse_configuration(&dev->dev, cfgno, &dev->config[cfgno], bigbuffer, length); - if (result > 0) - dev_dbg(ddev, "config index %d descriptor has %d " - "excess byte(s)\n", cfgno, result); - else if (result < 0) { + if (result < 0) { ++cfgno; goto err; } diff -Nru a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c --- a/drivers/usb/core/devices.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/core/devices.c Tue May 18 23:38:09 2004 @@ -232,13 +232,21 @@ return start; } -static char *usb_dump_interface_descriptor(char *start, char *end, const struct usb_interface *iface, int setno) +static char *usb_dump_interface_descriptor(char *start, char *end, + const struct usb_interface_cache *intfc, + const struct usb_interface *iface, + int setno) { - struct usb_interface_descriptor *desc = &iface->altsetting[setno].desc; + const struct usb_interface_descriptor *desc = &intfc->altsetting[setno].desc; + char *driver_name = ""; if (start > end) return start; down_read(&usb_bus_type.subsys.rwsem); + if (iface) + driver_name = (iface->dev.driver + ? iface->dev.driver->name + : "(none)"); start += sprintf(start, format_iface, desc->bInterfaceNumber, desc->bAlternateSetting, @@ -247,9 +255,7 @@ class_decode(desc->bInterfaceClass), desc->bInterfaceSubClass, desc->bInterfaceProtocol, - iface->dev.driver - ? iface->dev.driver->name - : "(none)"); + driver_name); up_read(&usb_bus_type.subsys.rwsem); return start; } @@ -258,13 +264,14 @@ int speed, char *start, char *end, + const struct usb_interface_cache *intfc, const struct usb_interface *iface, int setno ) { - struct usb_host_interface *desc = &iface->altsetting[setno]; + const struct usb_host_interface *desc = &intfc->altsetting[setno]; int i; - start = usb_dump_interface_descriptor(start, end, iface, setno); + start = usb_dump_interface_descriptor(start, end, intfc, iface, setno); for (i = 0; i < desc->desc.bNumEndpoints; i++) { if (start > end) return start; @@ -303,6 +310,7 @@ ) { int i, j; + struct usb_interface_cache *intfc; struct usb_interface *interface; if (start > end) @@ -311,14 +319,13 @@ return start + sprintf(start, "(null Cfg. desc.)\n"); start = usb_dump_config_descriptor(start, end, &config->desc, active); for (i = 0; i < config->desc.bNumInterfaces; i++) { + intfc = config->intf_cache[i]; interface = config->interface[i]; - if (!interface) - break; - for (j = 0; j < interface->num_altsetting; j++) { + for (j = 0; j < intfc->num_altsetting; j++) { if (start > end) return start; start = usb_dump_interface(speed, - start, end, interface, j); + start, end, intfc, interface, j); } } return start; @@ -395,7 +402,7 @@ return start; start = usb_dump_device_strings (start, end, dev); - + for (i = 0; i < dev->descriptor.bNumConfigurations; i++) { if (start > end) return start; @@ -445,6 +452,7 @@ * nbytes - the maximum number of bytes to write * skip_bytes - the number of bytes to skip before writing anything * file_offset - the offset into the devices file on completion + * The caller must own the usbdev->serialize semaphore. */ static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes, loff_t *skip_bytes, loff_t *file_offset, struct usb_device *usbdev, struct usb_bus *bus, int level, int index, int count) @@ -545,9 +553,13 @@ /* Now look at all of this device's children. */ for (chix = 0; chix < usbdev->maxchild; chix++) { - if (usbdev->children[chix]) { - ret = usb_device_dump(buffer, nbytes, skip_bytes, file_offset, usbdev->children[chix], + struct usb_device *childdev = usbdev->children[chix]; + + if (childdev) { + down(&childdev->serialize); + ret = usb_device_dump(buffer, nbytes, skip_bytes, file_offset, childdev, bus, level + 1, chix, ++cnt); + up(&childdev->serialize); if (ret == -EFAULT) return total_written; total_written += ret; @@ -575,8 +587,11 @@ for (buslist = usb_bus_list.next; buslist != &usb_bus_list; buslist = buslist->next) { /* print devices for this bus */ bus = list_entry(buslist, struct usb_bus, bus_list); + /* recurse through all children of the root hub */ + down(&bus->root_hub->serialize); ret = usb_device_dump(&buf, &nbytes, &skip_bytes, ppos, bus->root_hub, bus, 0, 0, 0); + up(&bus->root_hub->serialize); if (ret < 0) { up(&usb_bus_list_lock); return ret; diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c --- a/drivers/usb/core/devio.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/core/devio.c Tue May 18 23:38:07 2004 @@ -45,6 +45,7 @@ #include #include #include +#include #include "hcd.h" /* for usbcore internals */ #include "usb.h" @@ -54,12 +55,28 @@ struct dev_state *ps; struct task_struct *task; unsigned int signr; - unsigned int intf; + unsigned int ifnum; void __user *userbuffer; void __user *userurb; struct urb *urb; }; +static int usbfs_snoop = 0; +module_param (usbfs_snoop, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC (usbfs_snoop, "true to log all usbfs traffic"); + +#define snoop(dev, format, arg...) \ + do { \ + if (usbfs_snoop) \ + dev_info( dev , format , ## arg); \ + } while (0) + + +static inline int connected (struct usb_device *dev) +{ + return dev->state != USB_STATE_NOTATTACHED; +} + static loff_t usbdev_lseek(struct file *file, loff_t offset, int orig) { loff_t ret; @@ -87,14 +104,15 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) { struct dev_state *ps = (struct dev_state *)file->private_data; + struct usb_device *dev = ps->dev; ssize_t ret = 0; unsigned len; loff_t pos; int i; pos = *ppos; - down_read(&ps->devsem); - if (!ps->dev) { + down(&dev->serialize); + if (!connected(dev)) { ret = -ENODEV; goto err; } else if (pos < 0) { @@ -106,7 +124,7 @@ len = sizeof(struct usb_device_descriptor) - pos; if (len > nbytes) len = nbytes; - if (copy_to_user(buf, ((char *)&ps->dev->descriptor) + pos, len)) { + if (copy_to_user(buf, ((char *)&dev->descriptor) + pos, len)) { ret = -EFAULT; goto err; } @@ -118,9 +136,9 @@ } pos = sizeof(struct usb_device_descriptor); - for (i = 0; nbytes && i < ps->dev->descriptor.bNumConfigurations; i++) { + for (i = 0; nbytes && i < dev->descriptor.bNumConfigurations; i++) { struct usb_config_descriptor *config = - (struct usb_config_descriptor *)ps->dev->rawdescriptors[i]; + (struct usb_config_descriptor *)dev->rawdescriptors[i]; unsigned int length = le16_to_cpu(config->wTotalLength); if (*ppos < pos + length) { @@ -128,7 +146,7 @@ /* The descriptor may claim to be longer than it * really is. Here is the actual allocated length. */ unsigned alloclen = - ps->dev->config[i].desc.wTotalLength; + dev->config[i].desc.wTotalLength; len = length - (*ppos - pos); if (len > nbytes) @@ -138,7 +156,7 @@ if (alloclen > (*ppos - pos)) { alloclen -= (*ppos - pos); if (copy_to_user(buf, - ps->dev->rawdescriptors[i] + (*ppos - pos), + dev->rawdescriptors[i] + (*ppos - pos), min(len, alloclen))) { ret = -EFAULT; goto err; @@ -155,35 +173,10 @@ } err: - up_read(&ps->devsem); + up(&dev->serialize); return ret; } -extern inline unsigned int ld2(unsigned int x) -{ - unsigned int r = 0; - - if (x >= 0x10000) { - x >>= 16; - r += 16; - } - if (x >= 0x100) { - x >>= 8; - r += 8; - } - if (x >= 0x10) { - x >>= 4; - r += 4; - } - if (x >= 4) { - x >>= 2; - r += 2; - } - if (x >= 2) - r++; - return r; -} - /* * async list handling */ @@ -213,7 +206,7 @@ kfree(as); } -extern __inline__ void async_newpending(struct async *as) +static inline void async_newpending(struct async *as) { struct dev_state *ps = as->ps; unsigned long flags; @@ -223,7 +216,7 @@ spin_unlock_irqrestore(&ps->lock, flags); } -extern __inline__ void async_removepending(struct async *as) +static inline void async_removepending(struct async *as) { struct dev_state *ps = as->ps; unsigned long flags; @@ -233,7 +226,7 @@ spin_unlock_irqrestore(&ps->lock, flags); } -extern __inline__ struct async *async_getcompleted(struct dev_state *ps) +static inline struct async *async_getcompleted(struct dev_state *ps) { unsigned long flags; struct async *as = NULL; @@ -247,7 +240,7 @@ return as; } -extern __inline__ struct async *async_getpending(struct dev_state *ps, void __user *userurb) +static inline struct async *async_getpending(struct dev_state *ps, void __user *userurb) { unsigned long flags; struct async *as; @@ -301,7 +294,7 @@ free_async(as); } -static void destroy_async_on_interface (struct dev_state *ps, unsigned int intf) +static void destroy_async_on_interface (struct dev_state *ps, unsigned int ifnum) { struct list_head *p, *q, hitlist; unsigned long flags; @@ -309,13 +302,13 @@ INIT_LIST_HEAD(&hitlist); spin_lock_irqsave(&ps->lock, flags); list_for_each_safe(p, q, &ps->async_pending) - if (intf == list_entry(p, struct async, asynclist)->intf) + if (ifnum == list_entry(p, struct async, asynclist)->ifnum) list_move_tail(p, &hitlist); spin_unlock_irqrestore(&ps->lock, flags); destroy_async(ps, &hitlist); } -extern __inline__ void destroy_all_async(struct dev_state *ps) +static inline void destroy_all_async(struct dev_state *ps) { destroy_async(ps, &ps->async_pending); } @@ -335,6 +328,7 @@ static void driver_disconnect(struct usb_interface *intf) { struct dev_state *ps = usb_get_intfdata (intf); + unsigned int ifnum = intf->altsetting->desc.bInterfaceNumber; if (!ps) return; @@ -343,13 +337,15 @@ * all pending I/O requests; 2.6 does that. */ - /* prevent new I/O requests */ - ps->dev = 0; - clear_bit(intf->cur_altsetting->desc.bInterfaceNumber, &ps->ifclaimed); + if (likely(ifnum < 8*sizeof(ps->ifclaimed))) + clear_bit(ifnum, &ps->ifclaimed); + else + warn("interface number %u out of range", ifnum); + usb_set_intfdata (intf, NULL); /* force async requests to complete */ - destroy_all_async (ps); + destroy_async_on_interface(ps, ifnum); } struct usb_driver usbdevfs_driver = { @@ -359,71 +355,70 @@ .disconnect = driver_disconnect, }; -static int claimintf(struct dev_state *ps, unsigned int intf) +static int claimintf(struct dev_state *ps, unsigned int ifnum) { struct usb_device *dev = ps->dev; - struct usb_interface *iface; + struct usb_interface *intf; int err; - if (intf >= 8*sizeof(ps->ifclaimed) || !dev - || intf >= dev->actconfig->desc.bNumInterfaces) + if (ifnum >= 8*sizeof(ps->ifclaimed)) return -EINVAL; /* already claimed */ - if (test_bit(intf, &ps->ifclaimed)) + if (test_bit(ifnum, &ps->ifclaimed)) return 0; - iface = dev->actconfig->interface[intf]; - err = -EBUSY; /* lock against other changes to driver bindings */ down_write(&usb_bus_type.subsys.rwsem); - if (!usb_interface_claimed(iface)) { - usb_driver_claim_interface(&usbdevfs_driver, iface, ps); - set_bit(intf, &ps->ifclaimed); - err = 0; - } + intf = usb_ifnum_to_if(dev, ifnum); + if (!intf) + err = -ENOENT; + else + err = usb_driver_claim_interface(&usbdevfs_driver, intf, ps); up_write(&usb_bus_type.subsys.rwsem); + if (err == 0) + set_bit(ifnum, &ps->ifclaimed); return err; } -static int releaseintf(struct dev_state *ps, unsigned int intf) +static int releaseintf(struct dev_state *ps, unsigned int ifnum) { struct usb_device *dev; - struct usb_interface *iface; + struct usb_interface *intf; int err; - if (intf >= 8*sizeof(ps->ifclaimed)) - return -EINVAL; err = -EINVAL; + if (ifnum >= 8*sizeof(ps->ifclaimed)) + return err; dev = ps->dev; - down(&dev->serialize); /* lock against other changes to driver bindings */ down_write(&usb_bus_type.subsys.rwsem); - if (test_and_clear_bit(intf, &ps->ifclaimed)) { - iface = dev->actconfig->interface[intf]; - usb_driver_release_interface(&usbdevfs_driver, iface); + intf = usb_ifnum_to_if(dev, ifnum); + if (!intf) + err = -ENOENT; + else if (test_and_clear_bit(ifnum, &ps->ifclaimed)) { + usb_driver_release_interface(&usbdevfs_driver, intf); err = 0; } up_write(&usb_bus_type.subsys.rwsem); - up(&dev->serialize); return err; } -static int checkintf(struct dev_state *ps, unsigned int intf) +static int checkintf(struct dev_state *ps, unsigned int ifnum) { - if (intf >= 8*sizeof(ps->ifclaimed)) + if (ifnum >= 8*sizeof(ps->ifclaimed)) return -EINVAL; - if (test_bit(intf, &ps->ifclaimed)) + if (test_bit(ifnum, &ps->ifclaimed)) return 0; /* if not yet claimed, claim it for the driver */ - printk(KERN_WARNING "usbfs: process %d (%s) did not claim interface %u before use\n", - current->pid, current->comm, intf); - return claimintf(ps, intf); + dev_warn(&ps->dev->dev, "usbfs: process %d (%s) did not claim interface %u before use\n", + current->pid, current->comm, ifnum); + return claimintf(ps, ifnum); } static int findintfep(struct usb_device *dev, unsigned int ep) { unsigned int i, j, e; - struct usb_interface *iface; + struct usb_interface *intf; struct usb_host_interface *alts; struct usb_endpoint_descriptor *endpt; @@ -432,58 +427,38 @@ if (!dev->actconfig) return -ESRCH; for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { - iface = dev->actconfig->interface[i]; - for (j = 0; j < iface->num_altsetting; j++) { - alts = &iface->altsetting[j]; + intf = dev->actconfig->interface[i]; + for (j = 0; j < intf->num_altsetting; j++) { + alts = &intf->altsetting[j]; for (e = 0; e < alts->desc.bNumEndpoints; e++) { endpt = &alts->endpoint[e].desc; if (endpt->bEndpointAddress == ep) - return i; + return alts->desc.bInterfaceNumber; } } } return -ENOENT; } -static int findintfif(struct usb_device *dev, unsigned int ifn) -{ - unsigned int i; - - if (ifn & ~0xff) - return -EINVAL; - if (!dev->actconfig) - return -ESRCH; - for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { - if (dev->actconfig->interface[i]-> - altsetting[0].desc.bInterfaceNumber == ifn) - return i; - } - return -ENOENT; -} - static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype, unsigned int index) { - int ret; + int ret = 0; if (USB_TYPE_VENDOR == (USB_TYPE_MASK & requesttype)) return 0; + index &= 0xff; switch (requesttype & USB_RECIP_MASK) { case USB_RECIP_ENDPOINT: - if ((ret = findintfep(ps->dev, index & 0xff)) < 0) - return ret; - if ((ret = checkintf(ps, ret))) - return ret; + if ((ret = findintfep(ps->dev, index)) >= 0) + ret = checkintf(ps, ret); break; case USB_RECIP_INTERFACE: - if ((ret = findintfif(ps->dev, index & 0xff)) < 0) - return ret; - if ((ret = checkintf(ps, ret))) - return ret; + ret = checkintf(ps, index); break; } - return 0; + return ret; } /* @@ -496,8 +471,7 @@ int ret; /* - * no locking necessary here, as both sys_open (actually filp_open) - * and the hub thread have the kernel lock + * no locking necessary here, as chrdev_open has the kernel lock * (still acquire the kernel lock for safety) */ ret = -ENOMEM; @@ -506,7 +480,7 @@ lock_kernel(); ret = -ENOENT; - dev = inode->u.generic_ip; + dev = usb_get_dev(inode->u.generic_ip); if (!dev) { kfree(ps); goto out; @@ -518,7 +492,6 @@ INIT_LIST_HEAD(&ps->async_pending); INIT_LIST_HEAD(&ps->async_completed); init_waitqueue_head(&ps->wait); - init_rwsem(&ps->devsem); ps->discsignr = 0; ps->disctask = current; ps->disccontext = NULL; @@ -535,18 +508,21 @@ static int usbdev_release(struct inode *inode, struct file *file) { struct dev_state *ps = (struct dev_state *)file->private_data; - unsigned int i; + struct usb_device *dev = ps->dev; + unsigned int ifnum; - lock_kernel(); + down(&dev->serialize); list_del_init(&ps->list); - if (ps->dev) { - for (i = 0; ps->ifclaimed && i < 8*sizeof(ps->ifclaimed); i++) - if (test_bit(i, &ps->ifclaimed)) - releaseintf(ps, i); + if (connected(dev)) { + for (ifnum = 0; ps->ifclaimed && ifnum < 8*sizeof(ps->ifclaimed); ifnum++) + if (test_bit(ifnum, &ps->ifclaimed)) + releaseintf(ps, ifnum); + destroy_all_async(ps); } - unlock_kernel(); - destroy_all_async(ps); + up(&dev->serialize); + usb_put_dev(dev); + ps->dev = NULL; kfree(ps); return 0; } @@ -557,7 +533,7 @@ struct usbdevfs_ctrltransfer ctrl; unsigned int tmo; unsigned char *tbuf; - int i, ret; + int i, j, ret; if (copy_from_user(&ctrl, arg, sizeof(ctrl))) return -EFAULT; @@ -573,9 +549,18 @@ free_page((unsigned long)tbuf); return -EINVAL; } + snoop(&dev->dev, "control read: bRequest=%02x bRrequestType=%02x wValue=%04x wIndex=%04x\n", + ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex); + i = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex, tbuf, ctrl.wLength, tmo); if ((i > 0) && ctrl.wLength) { + if (usbfs_snoop) { + dev_info(&dev->dev, "control read: data "); + for (j = 0; j < ctrl.wLength; ++j) + printk ("%02x ", (unsigned char)((char *)ctrl.data)[j]); + printk("\n"); + } if (copy_to_user(ctrl.data, tbuf, ctrl.wLength)) { free_page((unsigned long)tbuf); return -EFAULT; @@ -588,15 +573,23 @@ return -EFAULT; } } + snoop(&dev->dev, "control write: bRequest=%02x bRrequestType=%02x wValue=%04x wIndex=%04x\n", + ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex); + if (usbfs_snoop) { + dev_info(&dev->dev, "control write: data: "); + for (j = 0; j < ctrl.wLength; ++j) + printk ("%02x ", (unsigned char)((char *)ctrl.data)[j]); + printk("\n"); + } i = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex, tbuf, ctrl.wLength, tmo); } free_page((unsigned long)tbuf); if (i<0) { - printk(KERN_DEBUG "usbfs: USBDEVFS_CONTROL failed " - "cmd %s dev %d rqt %u rq %u len %u ret %d\n", - current->comm, - dev->devnum, ctrl.bRequestType, ctrl.bRequest, ctrl.wLength, i); + dev_printk(KERN_DEBUG, &dev->dev, "usbfs: USBDEVFS_CONTROL " + "failed cmd %s rqt %u rq %u len %u ret %d\n", + current->comm, ctrl.bRequestType, ctrl.bRequest, + ctrl.wLength, i); } return i; } @@ -649,8 +642,8 @@ } kfree(tbuf); if (i < 0) { - printk(KERN_WARNING "usbfs: USBDEVFS_BULK failed dev %d ep 0x%x len %u ret %d\n", - dev->devnum, bulk.ep, bulk.len, i); + dev_warn(&dev->dev, "usbfs: USBDEVFS_BULK failed " + "ep 0x%x len %u ret %d\n", bulk.ep, bulk.len, i); return i; } return len2; @@ -695,20 +688,22 @@ static int proc_getdriver(struct dev_state *ps, void __user *arg) { struct usbdevfs_getdriver gd; - struct usb_interface *interface; + struct usb_interface *intf; int ret; if (copy_from_user(&gd, arg, sizeof(gd))) return -EFAULT; - if ((ret = findintfif(ps->dev, gd.interface)) < 0) - return ret; - interface = ps->dev->actconfig->interface[ret]; - if (!interface->dev.driver) - return -ENODATA; - strncpy(gd.driver, interface->dev.driver->name, sizeof(gd.driver)); - if (copy_to_user(arg, &gd, sizeof(gd))) - return -EFAULT; - return 0; + down_read(&usb_bus_type.subsys.rwsem); + intf = usb_ifnum_to_if(ps->dev, gd.interface); + if (!intf || !intf->dev.driver) + ret = -ENODATA; + else { + strncpy(gd.driver, intf->dev.driver->name, + sizeof(gd.driver)); + ret = (copy_to_user(arg, &gd, sizeof(gd)) ? -EFAULT : 0); + } + up_read(&usb_bus_type.subsys.rwsem); + return ret; } static int proc_connectinfo(struct dev_state *ps, void __user *arg) @@ -724,9 +719,6 @@ static int proc_resetdevice(struct dev_state *ps) { - /* FIXME when usb_reset_device() is fixed we'll need to grab - * ps->dev->serialize before calling it. - */ return usb_reset_device(ps->dev); } @@ -734,21 +726,14 @@ static int proc_setintf(struct dev_state *ps, void __user *arg) { struct usbdevfs_setinterface setintf; - struct usb_interface *interface; int ret; if (copy_from_user(&setintf, arg, sizeof(setintf))) return -EFAULT; - if ((ret = findintfif(ps->dev, setintf.interface)) < 0) + if ((ret = checkintf(ps, setintf.interface))) return ret; - interface = ps->dev->actconfig->interface[ret]; - if (interface->dev.driver) { - if ((ret = checkintf(ps, ret))) - return ret; - } - if (usb_set_interface(ps->dev, setintf.interface, setintf.altsetting)) - return -EINVAL; - return 0; + return usb_set_interface(ps->dev, setintf.interface, + setintf.altsetting); } static int proc_setconfig(struct dev_state *ps, void __user *arg) @@ -760,7 +745,6 @@ if (get_user(u, (unsigned int __user *)arg)) return -EFAULT; - down(&ps->dev->serialize); actconfig = ps->dev->actconfig; /* Don't touch the device if any interfaces are claimed. @@ -796,7 +780,6 @@ else status = usb_set_configuration(ps->dev, u); } - up(&ps->dev->serialize); return status; } @@ -809,7 +792,7 @@ struct async *as; struct usb_ctrlrequest *dr = NULL; unsigned int u, totlen, isofrmlen; - int ret, interval = 0, intf = -1; + int ret, interval = 0, ifnum = -1; if (copy_from_user(&uurb, arg, sizeof(uurb))) return -EFAULT; @@ -821,9 +804,9 @@ if (uurb.signr != 0 && (uurb.signr < SIGRTMIN || uurb.signr > SIGRTMAX)) return -EINVAL; if (!(uurb.type == USBDEVFS_URB_TYPE_CONTROL && (uurb.endpoint & ~USB_ENDPOINT_DIR_MASK) == 0)) { - if ((intf = findintfep(ps->dev, uurb.endpoint)) < 0) - return intf; - if ((ret = checkintf(ps, intf))) + if ((ifnum = findintfep(ps->dev, uurb.endpoint)) < 0) + return ifnum; + if ((ret = checkintf(ps, ifnum))) return ret; } switch(uurb.type) { @@ -873,6 +856,9 @@ /* arbitrary limit */ if (uurb.number_of_packets < 1 || uurb.number_of_packets > 128) return -EINVAL; + if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint))) + return -ENOENT; + interval = 1 << min (15, ep_desc->bInterval - 1); isofrmlen = sizeof(struct usbdevfs_iso_packet_desc) * uurb.number_of_packets; if (!(isopkt = kmalloc(isofrmlen, GFP_KERNEL))) return -ENOMEM; @@ -898,7 +884,10 @@ uurb.number_of_packets = 0; if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint))) return -ENOENT; - interval = ep_desc->bInterval; + if (ps->dev->speed == USB_SPEED_HIGH) + interval = 1 << min (15, ep_desc->bInterval - 1); + else + interval = ep_desc->bInterval; if (uurb.buffer_length > 16384) return -EINVAL; if (!access_ok((uurb.endpoint & USB_DIR_IN) ? VERIFY_WRITE : VERIFY_READ, uurb.buffer, uurb.buffer_length)) @@ -947,7 +936,7 @@ else as->userbuffer = NULL; as->signr = uurb.signr; - as->intf = intf; + as->ifnum = ifnum; as->task = current; if (!(uurb.endpoint & USB_DIR_IN)) { if (copy_from_user(as->urb->transfer_buffer, uurb.buffer, as->urb->transfer_buffer_length)) { @@ -957,7 +946,7 @@ } async_newpending(as); if ((ret = usb_submit_urb(as->urb, GFP_KERNEL))) { - printk(KERN_DEBUG "usbfs: usb_submit_urb returned %d\n", ret); + dev_printk(KERN_DEBUG, &ps->dev->dev, "usbfs: usb_submit_urb returned %d\n", ret); async_removepending(as); free_async(as); return ret; @@ -1012,18 +1001,19 @@ DECLARE_WAITQUEUE(wait, current); struct async *as = NULL; void __user *addr; + struct usb_device *dev = ps->dev; int ret; add_wait_queue(&ps->wait, &wait); - while (ps->dev) { + while (connected(dev)) { __set_current_state(TASK_INTERRUPTIBLE); if ((as = async_getcompleted(ps))) break; if (signal_pending(current)) break; - up_read(&ps->devsem); + up(&dev->serialize); schedule(); - down_read(&ps->devsem); + down(&dev->serialize); } remove_wait_queue(&ps->wait, &wait); set_current_state(TASK_RUNNING); @@ -1075,28 +1065,23 @@ static int proc_claiminterface(struct dev_state *ps, void __user *arg) { - unsigned int intf; - int ret; + unsigned int ifnum; - if (get_user(intf, (unsigned int __user *)arg)) + if (get_user(ifnum, (unsigned int __user *)arg)) return -EFAULT; - if ((ret = findintfif(ps->dev, intf)) < 0) - return ret; - return claimintf(ps, ret); + return claimintf(ps, ifnum); } static int proc_releaseinterface(struct dev_state *ps, void __user *arg) { - unsigned int intf; + unsigned int ifnum; int ret; - if (get_user(intf, (unsigned int __user *)arg)) + if (get_user(ifnum, (unsigned int __user *)arg)) return -EFAULT; - if ((ret = findintfif(ps->dev, intf)) < 0) - return ret; - if ((ret = releaseintf(ps, intf)) < 0) + if ((ret = releaseintf(ps, ifnum)) < 0) return ret; - destroy_async_on_interface (ps, intf); + destroy_async_on_interface (ps, ifnum); return 0; } @@ -1106,7 +1091,7 @@ int size; void *buf = 0; int retval = 0; - struct usb_interface *ifp = 0; + struct usb_interface *intf = 0; struct usb_driver *driver = 0; /* get input parameters and alloc buffer */ @@ -1125,26 +1110,25 @@ } } - if (!ps->dev) { + if (!connected(ps->dev)) { if (buf) kfree(buf); return -ENODEV; } - down(&ps->dev->serialize); if (ps->dev->state != USB_STATE_CONFIGURED) retval = -ENODEV; - else if (!(ifp = usb_ifnum_to_if (ps->dev, ctrl.ifno))) + else if (!(intf = usb_ifnum_to_if (ps->dev, ctrl.ifno))) retval = -EINVAL; else switch (ctrl.ioctl_code) { /* disconnect kernel driver from interface */ case USBDEVFS_DISCONNECT: down_write(&usb_bus_type.subsys.rwsem); - if (ifp->dev.driver) { - driver = to_usb_driver(ifp->dev.driver); - dev_dbg (&ifp->dev, "disconnect by usbfs\n"); - usb_driver_release_interface(driver, ifp); + if (intf->dev.driver) { + driver = to_usb_driver(intf->dev.driver); + dev_dbg (&intf->dev, "disconnect by usbfs\n"); + usb_driver_release_interface(driver, intf); } else retval = -ENODATA; up_write(&usb_bus_type.subsys.rwsem); @@ -1152,24 +1136,23 @@ /* let kernel drivers try to (re)bind to the interface */ case USBDEVFS_CONNECT: - bus_rescan_devices(ifp->dev.bus); + bus_rescan_devices(intf->dev.bus); break; /* talk directly to the interface's driver */ default: down_read(&usb_bus_type.subsys.rwsem); - if (ifp->dev.driver) - driver = to_usb_driver(ifp->dev.driver); + if (intf->dev.driver) + driver = to_usb_driver(intf->dev.driver); if (driver == 0 || driver->ioctl == 0) { retval = -ENOTTY; } else { - retval = driver->ioctl (ifp, ctrl.ioctl_code, buf); + retval = driver->ioctl (intf, ctrl.ioctl_code, buf); if (retval == -ENOIOCTLCMD) retval = -ENOTTY; } up_read(&usb_bus_type.subsys.rwsem); } - up(&ps->dev->serialize); /* cleanup and return */ if (retval >= 0 @@ -1190,95 +1173,114 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { struct dev_state *ps = (struct dev_state *)file->private_data; + struct usb_device *dev = ps->dev; int ret = -ENOTTY; if (!(file->f_mode & FMODE_WRITE)) return -EPERM; - down_read(&ps->devsem); - if (!ps->dev) { - up_read(&ps->devsem); + down(&dev->serialize); + if (!connected(dev)) { + up(&dev->serialize); return -ENODEV; } + switch (cmd) { case USBDEVFS_CONTROL: + snoop(&dev->dev, "%s: CONTROL\n", __FUNCTION__); ret = proc_control(ps, (void __user *)arg); if (ret >= 0) inode->i_mtime = CURRENT_TIME; break; case USBDEVFS_BULK: + snoop(&dev->dev, "%s: BULK\n", __FUNCTION__); ret = proc_bulk(ps, (void __user *)arg); if (ret >= 0) inode->i_mtime = CURRENT_TIME; break; case USBDEVFS_RESETEP: + snoop(&dev->dev, "%s: RESETEP\n", __FUNCTION__); ret = proc_resetep(ps, (void __user *)arg); if (ret >= 0) inode->i_mtime = CURRENT_TIME; break; case USBDEVFS_RESET: + snoop(&dev->dev, "%s: RESET\n", __FUNCTION__); ret = proc_resetdevice(ps); break; case USBDEVFS_CLEAR_HALT: + snoop(&dev->dev, "%s: CLEAR_HALT\n", __FUNCTION__); ret = proc_clearhalt(ps, (void __user *)arg); if (ret >= 0) inode->i_mtime = CURRENT_TIME; break; case USBDEVFS_GETDRIVER: + snoop(&dev->dev, "%s: GETDRIVER\n", __FUNCTION__); ret = proc_getdriver(ps, (void __user *)arg); break; case USBDEVFS_CONNECTINFO: + snoop(&dev->dev, "%s: CONNECTINFO\n", __FUNCTION__); ret = proc_connectinfo(ps, (void __user *)arg); break; case USBDEVFS_SETINTERFACE: + snoop(&dev->dev, "%s: SETINTERFACE\n", __FUNCTION__); ret = proc_setintf(ps, (void __user *)arg); break; case USBDEVFS_SETCONFIGURATION: + snoop(&dev->dev, "%s: SETCONFIGURATION\n", __FUNCTION__); ret = proc_setconfig(ps, (void __user *)arg); break; case USBDEVFS_SUBMITURB: + snoop(&dev->dev, "%s: SUBMITURB\n", __FUNCTION__); ret = proc_submiturb(ps, (void __user *)arg); if (ret >= 0) inode->i_mtime = CURRENT_TIME; break; case USBDEVFS_DISCARDURB: + snoop(&dev->dev, "%s: DISCARDURB\n", __FUNCTION__); ret = proc_unlinkurb(ps, (void __user *)arg); break; case USBDEVFS_REAPURB: + snoop(&dev->dev, "%s: REAPURB\n", __FUNCTION__); ret = proc_reapurb(ps, (void __user *)arg); break; case USBDEVFS_REAPURBNDELAY: + snoop(&dev->dev, "%s: REAPURBDELAY\n", __FUNCTION__); ret = proc_reapurbnonblock(ps, (void __user *)arg); break; case USBDEVFS_DISCSIGNAL: + snoop(&dev->dev, "%s: DISCSIGNAL\n", __FUNCTION__); ret = proc_disconnectsignal(ps, (void __user *)arg); break; case USBDEVFS_CLAIMINTERFACE: + snoop(&dev->dev, "%s: CLAIMINTERFACE\n", __FUNCTION__); ret = proc_claiminterface(ps, (void __user *)arg); break; case USBDEVFS_RELEASEINTERFACE: + snoop(&dev->dev, "%s: RELEASEINTERFACE\n", __FUNCTION__); ret = proc_releaseinterface(ps, (void __user *)arg); break; case USBDEVFS_IOCTL: + snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__); ret = proc_ioctl(ps, (void __user *) arg); break; } - up_read(&ps->devsem); + up(&dev->serialize); if (ret >= 0) inode->i_atime = CURRENT_TIME; return ret; @@ -1293,7 +1295,7 @@ poll_wait(file, &ps->wait, wait); if (file->f_mode & FMODE_WRITE && !list_empty(&ps->async_completed)) mask |= POLLOUT | POLLWRNORM; - if (!ps->dev) + if (!connected(ps->dev)) mask |= POLLERR | POLLHUP; return mask; } diff -Nru a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c --- a/drivers/usb/core/hcd-pci.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/core/hcd-pci.c Tue May 18 23:38:07 2004 @@ -279,41 +279,54 @@ { struct usb_hcd *hcd; int retval = 0; + int has_pci_pm; hcd = pci_get_drvdata(dev); - dev_dbg (hcd->self.controller, "suspend D%d --> D%d\n", - dev->current_state, state); - if (pci_find_capability(dev, PCI_CAP_ID_PM)) { - dev_dbg(hcd->self.controller, "No PM capability\n"); - return 0; - } + /* even when the PCI layer rejects some of the PCI calls + * below, HCs can try global suspend and reduce DMA traffic. + * PM-sensitive HCDs may already have done this. + */ + has_pci_pm = pci_find_capability(dev, PCI_CAP_ID_PM); + if (has_pci_pm) + dev_dbg(hcd->self.controller, "suspend D%d --> D%d\n", + dev->current_state, state); switch (hcd->state) { case USB_STATE_HALT: dev_dbg (hcd->self.controller, "halted; hcd not suspended\n"); break; - case USB_STATE_SUSPENDED: + case HCD_STATE_SUSPENDED: dev_dbg (hcd->self.controller, "hcd already suspended\n"); break; default: - /* remote wakeup needs hub->suspend() cooperation */ - // pci_enable_wake (dev, 3, 1); - - pci_save_state (dev, hcd->pci_state); - - /* driver may want to disable DMA etc */ - hcd->state = USB_STATE_QUIESCING; retval = hcd->driver->suspend (hcd, state); if (retval) dev_dbg (hcd->self.controller, "suspend fail, retval %d\n", retval); - else - hcd->state = USB_STATE_SUSPENDED; + else { + hcd->state = HCD_STATE_SUSPENDED; + pci_save_state (dev, hcd->pci_state); +#ifdef CONFIG_USB_SUSPEND + pci_enable_wake (dev, state, hcd->remote_wakeup); + pci_enable_wake (dev, 4, hcd->remote_wakeup); +#endif + /* no DMA or IRQs except in D0 */ + pci_disable_device (dev); + free_irq (hcd->irq, hcd); + + if (has_pci_pm) + retval = pci_set_power_state (dev, state); + dev->dev.power.power_state = state; + if (retval < 0) { + dev_dbg (&dev->dev, + "PCI suspend fail, %d\n", + retval); + (void) usb_hcd_pci_resume (dev); + } + } } - - pci_set_power_state (dev, state); return retval; } EXPORT_SYMBOL (usb_hcd_pci_suspend); @@ -328,23 +341,37 @@ { struct usb_hcd *hcd; int retval; + int has_pci_pm; hcd = pci_get_drvdata(dev); - dev_dbg (hcd->self.controller, "resume from state D%d\n", - dev->current_state); + has_pci_pm = pci_find_capability(dev, PCI_CAP_ID_PM); + if (has_pci_pm) + dev_dbg(hcd->self.controller, "resume from state D%d\n", + dev->current_state); - if (hcd->state != USB_STATE_SUSPENDED) { + if (hcd->state != HCD_STATE_SUSPENDED) { dev_dbg (hcd->self.controller, "can't resume, not suspended!\n"); return -EL3HLT; } hcd->state = USB_STATE_RESUMING; - pci_set_power_state (dev, 0); + if (has_pci_pm) + pci_set_power_state (dev, 0); + dev->dev.power.power_state = 0; + retval = request_irq (dev->irq, usb_hcd_irq, SA_SHIRQ, + hcd->description, hcd); + if (retval < 0) { + dev_err (hcd->self.controller, + "can't restore IRQ after resume!\n"); + return retval; + } + pci_set_master (dev); pci_restore_state (dev, hcd->pci_state); - - /* remote wakeup needs hub->suspend() cooperation */ - // pci_enable_wake (dev, 3, 0); +#ifdef CONFIG_USB_SUSPEND + pci_enable_wake (dev, dev->current_state, 0); + pci_enable_wake (dev, 4, 0); +#endif retval = hcd->driver->resume (hcd); if (!HCD_IS_RUNNING (hcd->state)) { diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c --- a/drivers/usb/core/hcd.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/core/hcd.c Tue May 18 23:38:07 2004 @@ -171,10 +171,10 @@ 0x01, /* __u8 bNumInterfaces; (1) */ 0x01, /* __u8 bConfigurationValue; */ 0x00, /* __u8 iConfiguration; */ - 0x40, /* __u8 bmAttributes; - Bit 7: Bus-powered, + 0xc0, /* __u8 bmAttributes; + Bit 7: must be set, 6: Self-powered, - 5 Remote-wakwup, + 5: Remote wakeup, 4..0: resvd */ 0x00, /* __u8 MaxPower; */ @@ -218,10 +218,10 @@ 0x01, /* __u8 bNumInterfaces; (1) */ 0x01, /* __u8 bConfigurationValue; */ 0x00, /* __u8 iConfiguration; */ - 0x40, /* __u8 bmAttributes; - Bit 7: Bus-powered, + 0xc0, /* __u8 bmAttributes; + Bit 7: must be set, 6: Self-powered, - 5 Remote-wakwup, + 5: Remote wakeup, 4..0: resvd */ 0x00, /* __u8 MaxPower; */ @@ -324,13 +324,15 @@ /* Root hub control transfers execute synchronously */ static int rh_call_control (struct usb_hcd *hcd, struct urb *urb) { - struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *) urb->setup_packet; + struct usb_ctrlrequest *cmd; u16 typeReq, wValue, wIndex, wLength; const u8 *bufp = 0; u8 *ubuf = urb->transfer_buffer; int len = 0; + int patch_wakeup = 0; unsigned long flags; + cmd = (struct usb_ctrlrequest *) urb->setup_packet; typeReq = (cmd->bRequestType << 8) | cmd->bRequest; wValue = le16_to_cpu (cmd->wValue); wIndex = le16_to_cpu (cmd->wIndex); @@ -347,13 +349,21 @@ /* DEVICE REQUESTS */ case DeviceRequest | USB_REQ_GET_STATUS: - // DEVICE_REMOTE_WAKEUP - ubuf [0] = 1; // selfpowered + ubuf [0] = (hcd->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP) + | (1 << USB_DEVICE_SELF_POWERED); ubuf [1] = 0; - /* FALLTHROUGH */ + break; case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (wValue == USB_DEVICE_REMOTE_WAKEUP) + hcd->remote_wakeup = 0; + else + goto error; + break; case DeviceOutRequest | USB_REQ_SET_FEATURE: - dev_dbg (hcd->self.controller, "no device features yet yet\n"); + if (hcd->can_wakeup && wValue == USB_DEVICE_REMOTE_WAKEUP) + hcd->remote_wakeup = 1; + else + goto error; break; case DeviceRequest | USB_REQ_GET_CONFIGURATION: ubuf [0] = 1; @@ -379,6 +389,8 @@ bufp = fs_rh_config_descriptor; len = sizeof fs_rh_config_descriptor; } + if (hcd->can_wakeup) + patch_wakeup = 1; break; case USB_DT_STRING << 8: urb->actual_length = rh_string ( @@ -444,6 +456,11 @@ urb->actual_length = len; // always USB_DIR_IN, toward host memcpy (ubuf, bufp, len); + + /* report whether RH hardware supports remote wakeup */ + if (patch_wakeup) + ((struct usb_config_descriptor *)ubuf)->bmAttributes + |= USB_CONFIG_ATT_WAKEUP; } /* any errors get returned through the urb completion */ @@ -762,10 +779,22 @@ set_bit (devnum, usb_dev->bus->devmap.devicemap); usb_dev->state = USB_STATE_ADDRESS; + usb_dev->epmaxpacketin[0] = usb_dev->epmaxpacketout[0] = 64; + retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE); + if (retval != sizeof usb_dev->descriptor) { + dev_dbg (parent_dev, "can't read %s device descriptor %d\n", + usb_dev->dev.bus_id, retval); + return (retval < 0) ? retval : -EMSGSIZE; + } + + (void) usb_get_dev (usb_dev); + down (&usb_dev->serialize); retval = usb_new_device (usb_dev); if (retval) dev_err (parent_dev, "can't register root hub for %s, %d\n", usb_dev->dev.bus_id, retval); + up (&usb_dev->serialize); + usb_put_dev (usb_dev); return retval; } EXPORT_SYMBOL (usb_register_root_hub); diff -Nru a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h --- a/drivers/usb/core/hcd.h Tue May 18 23:38:06 2004 +++ b/drivers/usb/core/hcd.h Tue May 18 23:38:06 2004 @@ -74,6 +74,8 @@ */ struct hc_driver *driver; /* hw-specific hooks */ unsigned saw_irq : 1; + unsigned can_wakeup:1; /* hw supports wakeup? */ + unsigned remote_wakeup:1;/* sw should use wakeup? */ int irq; /* irq allocated */ void *regs; /* device memory/io */ @@ -94,7 +96,7 @@ # define USB_STATE_RUNNING (__ACTIVE) # define USB_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) # define USB_STATE_RESUMING (__SUSPEND|__TRANSIENT) -# define USB_STATE_SUSPENDED (__SUSPEND) +# define HCD_STATE_SUSPENDED (__SUSPEND) #define HCD_IS_RUNNING(state) ((state) & __ACTIVE) #define HCD_IS_SUSPENDED(state) ((state) & __SUSPEND) @@ -344,9 +346,16 @@ extern int usb_register_root_hub (struct usb_device *usb_dev, struct device *parent_dev); -/* for portability to 2.4, hcds should call this */ static inline int hcd_register_root (struct usb_hcd *hcd) { + /* hcd->driver->start() reported can_wakeup, probably with + * assistance from board's boot firmware. + * NOTE: normal devices won't enable wakeup by default. + */ + if (hcd->can_wakeup) + dev_dbg (hcd->self.controller, "supports USB remote wakeup\n"); + hcd->remote_wakeup = hcd->can_wakeup; + return usb_register_root_hub ( hcd_to_bus (hcd)->root_hub, hcd->self.controller); } diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/core/hub.c Tue May 18 23:38:07 2004 @@ -38,7 +38,6 @@ /* Wakes up khubd */ static spinlock_t hub_event_lock = SPIN_LOCK_UNLOCKED; -static DECLARE_MUTEX(usb_address0_sem); static LIST_HEAD(hub_event_list); /* List of hubs needing servicing */ static LIST_HEAD(hub_list); /* List of all hubs (for cleanup) */ @@ -373,15 +372,16 @@ struct usb_device *dev; int i; - /* Enable power to the ports */ - dev_dbg(hubdev(interface_to_usbdev(hub->intf)), - "enabling power on all ports\n"); - dev = interface_to_usbdev(hub->intf); - for (i = 0; i < hub->descriptor->bNbrPorts; i++) - set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); + /* if hub supports power switching, enable power on each port */ + if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_LPSM) < 2) { + dev_dbg(&hub->intf->dev, "enabling power on all ports\n"); + dev = interface_to_usbdev(hub->intf); + for (i = 0; i < hub->descriptor->bNbrPorts; i++) + set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); + } /* Wait for power to be enabled */ - wait_ms(hub->descriptor->bPwrOn2PwrGood * 2); + msleep(hub->descriptor->bPwrOn2PwrGood * 2); } static int hub_hub_status(struct usb_hub *hub, @@ -545,8 +545,25 @@ dev_dbg(hub_dev, "power on to power good time: %dms\n", hub->descriptor->bPwrOn2PwrGood * 2); - dev_dbg(hub_dev, "hub controller current requirement: %dmA\n", - hub->descriptor->bHubContrCurrent); + + /* power budgeting mostly matters with bus-powered hubs, + * and battery-powered root hubs (may provide just 8 mA). + */ + ret = usb_get_status(dev, USB_RECIP_DEVICE, 0, &hubstatus); + if (ret < 0) { + message = "can't get hubdev status"; + goto fail; + } + cpu_to_le16s(&hubstatus); + if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) { + dev_dbg(hub_dev, "hub controller current requirement: %dmA\n", + hub->descriptor->bHubContrCurrent); + hub->power_budget = (501 - hub->descriptor->bHubContrCurrent) + / 2; + dev_dbg(hub_dev, "%dmA bus power budget for children\n", + hub->power_budget * 2); + } + ret = hub_hub_status(hub, &hubstatus, &hubchange); if (ret < 0) { @@ -554,12 +571,11 @@ goto fail; } - /* FIXME implement per-port power budgeting; - * enable it for bus-powered hubs. - */ - dev_dbg(hub_dev, "local power source is %s\n", - (hubstatus & HUB_STATUS_LOCAL_POWER) - ? "lost (inactive)" : "good"); + /* local power status reports aren't always correct */ + if (dev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER) + dev_dbg(hub_dev, "local power source is %s\n", + (hubstatus & HUB_STATUS_LOCAL_POWER) + ? "lost (inactive)" : "good"); if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_OCPM) == 0) dev_dbg(hub_dev, "%sover-current condition exists\n", @@ -611,6 +627,8 @@ return ret; } +static unsigned highspeed_hubs; + static void hub_disconnect(struct usb_interface *intf) { struct usb_hub *hub = usb_get_intfdata (intf); @@ -620,6 +638,9 @@ if (!hub) return; + if (interface_to_usbdev(intf)->speed == USB_SPEED_HIGH) + highspeed_hubs--; + usb_set_intfdata (intf, NULL); spin_lock_irqsave(&hub_event_lock, flags); hub->urb_complete = &urb_complete; @@ -731,6 +752,9 @@ usb_set_intfdata (intf, hub); + if (dev->speed == USB_SPEED_HIGH) + highspeed_hubs++; + if (hub_configure(hub, endpoint) >= 0) return 0; @@ -841,8 +865,11 @@ return ret; } -#define HUB_RESET_TRIES 5 -#define HUB_PROBE_TRIES 2 +#define PORT_RESET_TRIES 5 +#define SET_ADDRESS_TRIES 2 +#define GET_DESCRIPTOR_TRIES 2 +#define SET_CONFIG_TRIES 2 + #define HUB_ROOT_RESET_TIME 50 /* times are in msec */ #define HUB_SHORT_RESET_TIME 10 #define HUB_LONG_RESET_TIME 200 @@ -860,7 +887,7 @@ delay_time < HUB_RESET_TIMEOUT; delay_time += delay) { /* wait to give the device a chance to reset */ - wait_ms(delay); + msleep(delay); /* read and decode port status */ ret = hub_port_status(hub, port, &portstatus, &portchange); @@ -907,7 +934,7 @@ int i, status; /* Reset the port */ - for (i = 0; i < HUB_RESET_TRIES; i++) { + for (i = 0; i < PORT_RESET_TRIES; i++) { set_port_feature(hub, port + 1, USB_PORT_FEAT_RESET); /* return on disconnect or reset */ @@ -934,7 +961,7 @@ return -1; } -int hub_port_disable(struct usb_device *hub, int port) +static int hub_port_disable(struct usb_device *hub, int port) { int ret; @@ -975,7 +1002,7 @@ connection = 0; stable_count = 0; for (delay_time = 0; delay_time < HUB_DEBOUNCE_TIMEOUT; delay_time += HUB_DEBOUNCE_STEP) { - wait_ms(HUB_DEBOUNCE_STEP); + msleep(HUB_DEBOUNCE_STEP); ret = hub_port_status(hub, port, &portstatus, &portchange); if (ret < 0) @@ -1003,40 +1030,22 @@ return ((portstatus&USB_PORT_STAT_CONNECTION)) ? 0 : 1; } -static void hub_port_connect_change(struct usb_hub *hubstate, int port, - u16 portstatus, u16 portchange) +/* reset device, (re)assign address, get device descriptor. + * device connection is stable, no more debouncing needed. + * returns device in USB_STATE_ADDRESS, except on error. + * on error return, device is no longer usable (ref dropped). + * + * caller owns dev->serialize for the device, guarding against + * config changes and disconnect processing. + */ +static int +hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) { - struct usb_device *hub = interface_to_usbdev(hubstate->intf); - struct usb_device *dev; - unsigned int delay = HUB_SHORT_RESET_TIME; - int i; + static DECLARE_MUTEX(usb_address0_sem); - dev_dbg (&hubstate->intf->dev, - "port %d, status %x, change %x, %s\n", - port + 1, portstatus, portchange, portspeed (portstatus)); - - /* Clear the connection change status */ - clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_CONNECTION); - - /* Disconnect any existing devices under this port */ - if (hub->children[port]) - usb_disconnect(&hub->children[port]); - - /* Return now if nothing is connected */ - if (!(portstatus & USB_PORT_STAT_CONNECTION)) { - if (portstatus & USB_PORT_STAT_ENABLE) - hub_port_disable(hub, port); - - return; - } - - if (hub_port_debounce(hub, port)) { - dev_err (&hubstate->intf->dev, - "connect-debounce failed, port %d disabled\n", - port+1); - hub_port_disable(hub, port); - return; - } + int i, j, retval = -ENODEV; + unsigned delay = HUB_SHORT_RESET_TIME; + enum usb_device_speed oldspeed = dev->speed; /* root hub ports have a slightly longer reset period * (from USB 2.0 spec, section 7.1.7.5) @@ -1046,31 +1055,53 @@ /* Some low speed devices have problems with the quick delay, so */ /* be a bit pessimistic with those devices. RHbug #23670 */ - if (portstatus & USB_PORT_STAT_LOW_SPEED) + if (oldspeed == USB_SPEED_LOW) delay = HUB_LONG_RESET_TIME; down(&usb_address0_sem); - for (i = 0; i < HUB_PROBE_TRIES; i++) { - - /* Allocate a new device struct */ - dev = usb_alloc_dev(hub, hub->bus, port); - if (!dev) { - dev_err (&hubstate->intf->dev, - "couldn't allocate usb_device\n"); - break; - } - - dev->state = USB_STATE_POWERED; - - /* Reset the device, and detect its speed */ - if (hub_port_reset(hub, port, dev, delay)) { - usb_put_dev(dev); - break; - } - - /* Find a new address for it */ + /* Reset the device; full speed may morph to high speed */ + switch (hub_port_reset(hub, port, dev, delay)) { + case 0: /* success, speed is known */ + break; + case 1: /* disconnect, give to companion */ + retval = -EBUSY; + /* FALL THROUGH */ + default: /* error */ + goto fail; + } + if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != dev->speed) { + dev_dbg(&dev->dev, "device reset changed speed!\n"); + goto fail; + } + + /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ... + * it's fixed size except for full speed devices. + */ + switch (dev->speed) { + case USB_SPEED_HIGH: /* fixed at 64 */ + i = 64; + break; + case USB_SPEED_FULL: /* 8, 16, 32, or 64 */ + /* to determine the ep0 maxpacket size, read the first 8 + * bytes from the device descriptor to get bMaxPacketSize0; + * then correct our initial (small) guess. + */ + // FALLTHROUGH + case USB_SPEED_LOW: /* fixed at 8 */ + i = 8; + break; + default: + goto fail; + } + dev->epmaxpacketin [0] = i; + dev->epmaxpacketout[0] = i; + + /* set the address */ + if (dev->devnum <= 0) { usb_choose_address(dev); + if (dev->devnum <= 0) + goto fail; /* Set up TT records, if needed */ if (hub->tt) { @@ -1078,12 +1109,21 @@ dev->ttport = hub->ttport; } else if (dev->speed != USB_SPEED_HIGH && hub->speed == USB_SPEED_HIGH) { + struct usb_hub *hubstate; + + hubstate = usb_get_intfdata (hub->actconfig + ->interface[0]); dev->tt = &hubstate->tt; dev->ttport = port + 1; } - dev_info (&dev->dev, - "new %s speed USB device using address %d\n", + /* force the right log message (below) at low speed */ + oldspeed = USB_SPEED_UNKNOWN; + } + + dev_info (&dev->dev, + "%s %s speed USB device using address %d\n", + (oldspeed == USB_SPEED_UNKNOWN) ? "new" : "reset", ({ char *speed; switch (dev->speed) { case USB_SPEED_LOW: speed = "low"; break; case USB_SPEED_FULL: speed = "full"; break; @@ -1091,23 +1131,265 @@ default: speed = "?"; break; }; speed;}), dev->devnum); + + /* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way? + * Because device hardware and firmware is sometimes buggy in + * this area, and this is how Linux has done it for ages. + * Change it cautiously. + * + * NOTE: Windows gets the descriptor first, seemingly to help + * work around device bugs like "can't use addresses with bit 3 + * set in certain configurations". Yes, really. + */ + for (i = 0; i < GET_DESCRIPTOR_TRIES; ++i) { + for (j = 0; j < SET_ADDRESS_TRIES; ++j) { + retval = usb_set_address(dev); + if (retval >= 0) + break; + msleep(200); + } + if (retval < 0) { + dev_err(&dev->dev, + "device not accepting address %d, error %d\n", + dev->devnum, retval); + fail: + hub_port_disable(hub, port); + clear_bit(dev->devnum, dev->bus->devmap.devicemap); + dev->devnum = -1; + usb_put_dev(dev); + up(&usb_address0_sem); + return retval; + } + + /* cope with hardware quirkiness: + * - let SET_ADDRESS settle, some device hardware wants it + * - read ep0 maxpacket even for high and low speed, + */ + msleep(10); + retval = usb_get_device_descriptor(dev, 8); + if (retval >= 8) + break; + msleep(100); + } + if (retval != 8) { + dev_err(&dev->dev, "device descriptor read/%s, error %d\n", + "8", retval); + if (retval >= 0) + retval = -EMSGSIZE; + goto fail; + } + if (dev->speed == USB_SPEED_FULL + && (dev->epmaxpacketin [0] + != dev->descriptor.bMaxPacketSize0)) { + usb_disable_endpoint(dev, 0); + usb_endpoint_running(dev, 0, 1); + usb_endpoint_running(dev, 0, 0); + dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0; + dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; + } + + retval = usb_get_device_descriptor(dev, USB_DT_DEVICE_SIZE); + if (retval < (signed)sizeof(dev->descriptor)) { + dev_err(&dev->dev, "device descriptor read/%s, error %d\n", + "all", retval); + if (retval >= 0) + retval = -ENOMSG; + goto fail; + } - /* Run it through the hoops (find a driver, etc) */ - if (usb_new_device(dev) == 0) { - hub->children[port] = dev; - goto done; + /* now dev is visible to other tasks */ + hub->children[port] = dev; + + up(&usb_address0_sem); + return 0; +} + +static void +check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port) +{ + struct usb_qualifier_descriptor *qual; + int status; + + qual = kmalloc (sizeof *qual, SLAB_KERNEL); + if (qual == 0) + return; + + status = usb_get_descriptor (dev, USB_DT_DEVICE_QUALIFIER, 0, + qual, sizeof *qual); + if (status == sizeof *qual) { + dev_info(&dev->dev, "not running at top speed; " + "connect to a high speed hub\n"); + /* hub LEDs are probably harder to miss than syslog */ + if (hub->has_indicators) { + hub->indicator[port] = INDICATOR_GREEN_BLINK; + schedule_work (&hub->leds); } + } + kfree (qual); +} - /* Free the configuration if there was an error */ - usb_put_dev(dev); +static unsigned +hub_power_remaining (struct usb_hub *hubstate, struct usb_device *hub) +{ + int remaining; + unsigned i; - /* Switch to a long reset time */ - delay = HUB_LONG_RESET_TIME; + remaining = hubstate->power_budget; + if (!remaining) /* self-powered */ + return 0; + + for (i = 0; i < hub->maxchild; i++) { + struct usb_device *dev = hub->children[i]; + int delta; + + if (!dev) + continue; + + if (dev->actconfig) + delta = dev->actconfig->desc.bMaxPower; + else + delta = 50; + // dev_dbg(&dev->dev, "budgeted %dmA\n", 2 * delta); + remaining -= delta; + } + if (remaining < 0) { + dev_warn(&hubstate->intf->dev, + "%dmA over power budget!\n", + -2 * remaining); + remaining = 0; } + return remaining; +} + +static void hub_port_connect_change(struct usb_hub *hubstate, int port, + u16 portstatus, u16 portchange) +{ + struct usb_device *hub = interface_to_usbdev(hubstate->intf); + int status, i; + + dev_dbg (&hubstate->intf->dev, + "port %d, status %04x, change %04x, %s\n", + port + 1, portstatus, portchange, portspeed (portstatus)); + + /* Clear the connection change status */ + clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_CONNECTION); - hub_port_disable(hub, port); + if (hubstate->has_indicators) { + set_port_led(hub, hubstate, port + 1, HUB_LED_AUTO); + hubstate->indicator[port] = INDICATOR_AUTO; + } + + /* Disconnect any existing devices under this port */ + if (hub->children[port]) + usb_disconnect(&hub->children[port]); + + /* Return now if nothing is connected */ + if (!(portstatus & USB_PORT_STAT_CONNECTION)) { + + /* maybe switch power back on (e.g. root hub was reset) */ + if ((hubstate->descriptor->wHubCharacteristics + & HUB_CHAR_LPSM) < 2 + && !(portstatus & (1 << USB_PORT_FEAT_POWER))) + set_port_feature(hub, port + 1, USB_PORT_FEAT_POWER); + + if (portstatus & USB_PORT_STAT_ENABLE) + goto done; + return; + } + + if (hub_port_debounce(hub, port)) { + dev_err (&hubstate->intf->dev, + "connect-debounce failed, port %d disabled\n", + port+1); + goto done; + } + + for (i = 0; i < SET_CONFIG_TRIES; i++) { + struct usb_device *dev; + + /* reallocate for each attempt, since references + * to the previous one can escape in various ways + */ + dev = usb_alloc_dev(hub, hub->bus, port); + if (!dev) { + dev_err (&hubstate->intf->dev, + "couldn't allocate port %d usb_device\n", port+1); + goto done; + } + dev->state = USB_STATE_POWERED; + + /* hub can tell if it's lowspeed already: D- pullup (not D+) */ + if (portstatus & USB_PORT_STAT_LOW_SPEED) + dev->speed = USB_SPEED_LOW; + else + dev->speed = USB_SPEED_UNKNOWN; + + /* reset, set address, get descriptor, add to hub's children */ + down (&dev->serialize); + status = hub_port_init(hub, dev, port); + if (status == -EBUSY) + break; + if (status < 0) + continue; + + /* consecutive bus-powered hubs aren't reliable; they can + * violate the voltage drop budget. if the new child has + * a "powered" LED, users should notice we didn't enable it + * (without reading syslog), even without per-port LEDs + * on the parent. + */ + if (dev->descriptor.bDeviceClass == USB_CLASS_HUB + && hubstate->power_budget) { + u16 devstat; + + status = usb_get_status(dev, USB_RECIP_DEVICE, 0, + &devstat); + if (status < 0) { + dev_dbg(&dev->dev, "get status %d ?\n", status); + continue; + } + cpu_to_le16s(&devstat); + if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) { + dev_err(&dev->dev, + "can't connect bus-powered hub " + "to this port\n"); + if (hubstate->has_indicators) { + hubstate->indicator[port] = + INDICATOR_AMBER_BLINK; + schedule_work (&hubstate->leds); + } + hub->children[port] = NULL; + usb_put_dev(dev); + hub_port_disable(hub, port); + return; + } + } + + /* check for devices running slower than they could */ + if (dev->descriptor.bcdUSB >= 0x0200 + && dev->speed == USB_SPEED_FULL + && highspeed_hubs != 0) + check_highspeed (hubstate, dev, port); + + /* Run it through the hoops (find a driver, etc) */ + status = usb_new_device(dev); + if (status != 0) { + hub->children[port] = NULL; + continue; + } + up (&dev->serialize); + + status = hub_power_remaining(hubstate, hub); + if (status) + dev_dbg(&hubstate->intf->dev, + "%dmA power budget left\n", + 2 * status); + + return; + } + done: - up(&usb_address0_sem); + hub_port_disable(hub, port); } static void hub_events(void) @@ -1173,7 +1455,7 @@ hub_port_connect_change(hub, i, portstatus, portchange); } else if (portchange & USB_PORT_STAT_C_ENABLE) { dev_dbg (hubdev (dev), - "port %d enable change, status %x\n", + "port %d enable change, status %08x\n", i + 1, portstatus); clear_port_feature(dev, i + 1, USB_PORT_FEAT_C_ENABLE); @@ -1233,7 +1515,7 @@ } if (hubchange & HUB_CHANGE_OVERCURRENT) { dev_dbg (&hub->intf->dev, "overcurrent change\n"); - wait_ms(500); /* Cool down */ + msleep(500); /* Cool down */ clear_hub_feature(dev, C_HUB_OVER_CURRENT); hub_power_on(hub); } @@ -1331,25 +1613,68 @@ usb_deregister(&hub_driver); } /* usb_hub_cleanup() */ + +static int config_descriptors_changed(struct usb_device *dev) +{ + unsigned index; + unsigned len = 0; + struct usb_config_descriptor *buf; + + for (index = 0; index < dev->descriptor.bNumConfigurations; index++) { + if (len < dev->config[index].desc.wTotalLength) + len = dev->config[index].desc.wTotalLength; + } + buf = kmalloc (len, SLAB_KERNEL); + if (buf == 0) { + dev_err(&dev->dev, "no mem to re-read configs after reset\n"); + /* assume the worst */ + return 1; + } + for (index = 0; index < dev->descriptor.bNumConfigurations; index++) { + int length; + int old_length = dev->config[index].desc.wTotalLength; + + length = usb_get_descriptor(dev, USB_DT_CONFIG, index, buf, + old_length); + if (length < old_length) { + dev_dbg(&dev->dev, "config index %d, error %d\n", + index, length); + break; + } + if (memcmp (buf, dev->rawdescriptors[index], old_length) + != 0) { + dev_dbg(&dev->dev, "config index %d changed (#%d)\n", + index, buf->bConfigurationValue); +/* FIXME enable this when we can re-enumerate after reset; + * until then DFU-ish drivers need this and other workarounds + */ +// break; + } + } + kfree(buf); + return index != dev->descriptor.bNumConfigurations; +} + /* - * WARNING - If a driver calls usb_reset_device, you should simulate a - * disconnect() and probe() for other interfaces you doesn't claim. This - * is left up to the driver writer right now. This insures other drivers - * have a chance to re-setup their interface. + * WARNING - don't reset any device unless drivers for all of its + * interfaces are expecting that reset! Maybe some driver->reset() + * method should eventually help ensure sufficient cooperation. * - * Take a look at proc_resetdevice in devio.c for some sample code to - * do this. - * Use this only from within your probe function, otherwise use - * usb_reset_device() below, which ensure proper locking + * This is the same as usb_reset_device() except that the caller + * already holds dev->serialize. For example, it's safe to use + * this from a driver probe() routine after downloading new firmware. */ -int usb_physical_reset_device(struct usb_device *dev) +int __usb_reset_device(struct usb_device *dev) { struct usb_device *parent = dev->parent; - struct usb_device_descriptor *descriptor; + struct usb_device_descriptor descriptor = dev->descriptor; int i, ret, port = -1; - if (!parent) { - err("attempting to reset root hub!"); + if (dev->maxchild) { + /* this requires hub- or hcd-specific logic; + * see hub_reset() and OHCI hc_restart() + */ + dev_dbg(&dev->dev, "%s for hub!\n", __FUNCTION__); return -EINVAL; } @@ -1362,114 +1687,69 @@ if (port < 0) return -ENOENT; - descriptor = kmalloc(sizeof *descriptor, GFP_NOIO); - if (!descriptor) { - return -ENOMEM; - } - - down(&usb_address0_sem); - - /* Send a reset to the device */ - if (hub_port_reset(parent, port, dev, HUB_SHORT_RESET_TIME)) { - hub_port_disable(parent, port); - up(&usb_address0_sem); - kfree(descriptor); - return(-ENODEV); - } - - /* Reprogram the Address */ - ret = usb_set_address(dev); - if (ret < 0) { - err("USB device not accepting new address (error=%d)", ret); - hub_port_disable(parent, port); - up(&usb_address0_sem); - kfree(descriptor); - return ret; - } - - /* Let the SET_ADDRESS settle */ - wait_ms(10); - - up(&usb_address0_sem); - - /* - * Now we fetch the configuration descriptors for the device and - * see if anything has changed. If it has, we dump the current - * parsed descriptors and reparse from scratch. Then we leave - * the device alone for the caller to finish setting up. - * - * If nothing changed, we reprogram the configuration and then - * the alternate settings. - */ - - ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, descriptor, - sizeof(*descriptor)); - if (ret < 0) { - kfree(descriptor); - return ret; - } - - le16_to_cpus(&descriptor->bcdUSB); - le16_to_cpus(&descriptor->idVendor); - le16_to_cpus(&descriptor->idProduct); - le16_to_cpus(&descriptor->bcdDevice); - - if (memcmp(&dev->descriptor, descriptor, sizeof(*descriptor))) { - kfree(descriptor); - usb_destroy_configuration(dev); - - /* FIXME Linux doesn't yet handle these "device morphed" - * paths. DFU variants need this to work ... and they - * include the "config descriptors changed" case this - * doesn't yet detect! - */ - dev->state = USB_STATE_NOTATTACHED; - dev_err(&dev->dev, "device morphed (DFU?), nyet supported\n"); - - return -ENODEV; - } - - kfree(descriptor); + ret = hub_port_init(parent, dev, port); + if (ret < 0) + goto re_enumerate; + + /* Device might have changed firmware (DFU or similar) */ + if (memcmp(&dev->descriptor, &descriptor, sizeof descriptor) + || config_descriptors_changed (dev)) { + dev_info(&dev->dev, "device firmware changed\n"); + dev->descriptor = descriptor; /* for disconnect() calls */ + goto re_enumerate; + } + + if (!dev->actconfig) + return 0; ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_CONFIGURATION, 0, dev->actconfig->desc.bConfigurationValue, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); if (ret < 0) { - err("failed to set dev %s active configuration (error=%d)", - dev->devpath, ret); - return ret; - } + dev_err(&dev->dev, + "can't restore configuration #%d (error=%d)\n", + dev->actconfig->desc.bConfigurationValue, ret); + goto re_enumerate; + } dev->state = USB_STATE_CONFIGURED; for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { struct usb_interface *intf = dev->actconfig->interface[i]; struct usb_interface_descriptor *desc; + /* set_interface resets host side toggle and halt status even + * for altsetting zero. the interface may have no driver. + */ desc = &intf->cur_altsetting->desc; ret = usb_set_interface(dev, desc->bInterfaceNumber, desc->bAlternateSetting); if (ret < 0) { - err("failed to set active alternate setting " - "for dev %s interface %d (error=%d)", - dev->devpath, desc->bInterfaceNumber, ret); - return ret; + dev_err(&dev->dev, "failed to restore interface %d " + "altsetting %d (error=%d)\n", + desc->bInterfaceNumber, + desc->bAlternateSetting, + ret); + goto re_enumerate; } } return 0; + +re_enumerate: + /* FIXME make some task re-enumerate; don't just mark unusable */ + dev->state = USB_STATE_NOTATTACHED; + return -ENODEV; } +EXPORT_SYMBOL(__usb_reset_device); int usb_reset_device(struct usb_device *udev) { - struct device *gdev = &udev->dev; int r; - down_read(&gdev->bus->subsys.rwsem); - r = usb_physical_reset_device(udev); - up_read(&gdev->bus->subsys.rwsem); + down(&udev->serialize); + r = __usb_reset_device(udev); + up(&udev->serialize); return r; } - - diff -Nru a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h --- a/drivers/usb/core/hub.h Tue May 18 23:38:05 2004 +++ b/drivers/usb/core/hub.h Tue May 18 23:38:05 2004 @@ -209,6 +209,8 @@ struct semaphore khubd_sem; struct usb_tt tt; /* Transaction Translator */ + u8 power_budget; /* in 2mA units; or zero */ + unsigned has_indicators:1; enum hub_led_mode indicator[USB_MAXCHILDREN]; struct work_struct leds; diff -Nru a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c --- a/drivers/usb/core/inode.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/core/inode.c Tue May 18 23:38:05 2004 @@ -717,9 +717,6 @@ while (!list_empty(&dev->filelist)) { ds = list_entry(dev->filelist.next, struct dev_state, list); list_del_init(&ds->list); - down_write(&ds->devsem); - ds->dev = NULL; - up_write(&ds->devsem); if (ds->discsignr) { sinfo.si_signo = SIGPIPE; sinfo.si_errno = EPIPE; diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c --- a/drivers/usb/core/message.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/core/message.c Tue May 18 23:38:06 2004 @@ -796,10 +796,6 @@ } } -static void release_interface(struct device *dev) -{ -} - /* * usb_disable_device - Disable all the endpoints for a USB device * @dev: the device whose endpoints are being disabled @@ -834,7 +830,15 @@ interface = dev->actconfig->interface[i]; dev_dbg (&dev->dev, "unregistering interface %s\n", interface->dev.bus_id); - device_unregister (&interface->dev); + device_del (&interface->dev); + } + + /* Now that the interfaces are unbound, nobody should + * try to access them. + */ + for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { + put_device (&dev->actconfig->interface[i]->dev); + dev->actconfig->interface[i] = NULL; } dev->actconfig = 0; if (dev->state == USB_STATE_CONFIGURED) @@ -1071,6 +1075,16 @@ return 0; } +static void release_interface(struct device *dev) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct usb_interface_cache *intfc = + altsetting_to_usb_interface_cache(intf->altsetting); + + kref_put(&intfc->ref); + kfree(intf); +} + /* * usb_set_configuration - Makes a particular device setting be current * @dev: the device whose configuration is being updated @@ -1109,19 +1123,19 @@ { int i, ret; struct usb_host_config *cp = NULL; - + struct usb_interface **new_interfaces = NULL; + int n, nintf; + /* dev->serialize guards all config changes */ - for (i=0; idescriptor.bNumConfigurations; i++) { + for (i = 0; i < dev->descriptor.bNumConfigurations; i++) { if (dev->config[i].desc.bConfigurationValue == configuration) { cp = &dev->config[i]; break; } } - if ((!cp && configuration != 0)) { - ret = -EINVAL; - goto out; - } + if ((!cp && configuration != 0)) + return -EINVAL; /* The USB spec says configuration 0 means unconfigured. * But if a device includes a configuration numbered 0, @@ -1130,6 +1144,34 @@ if (cp && configuration == 0) dev_warn(&dev->dev, "config 0 descriptor??\n"); + /* Allocate memory for new interfaces before doing anything else, + * so that if we run out then nothing will have changed. */ + n = nintf = 0; + if (cp) { + nintf = cp->desc.bNumInterfaces; + new_interfaces = kmalloc(nintf * sizeof(*new_interfaces), + GFP_KERNEL); + if (!new_interfaces) { + dev_err(&dev->dev, "Out of memory"); + return -ENOMEM; + } + + for (; n < nintf; ++n) { + new_interfaces[n] = kmalloc( + sizeof(struct usb_interface), + GFP_KERNEL); + if (!new_interfaces[n]) { + dev_err(&dev->dev, "Out of memory"); + ret = -ENOMEM; +free_interfaces: + while (--n >= 0) + kfree(new_interfaces[n]); + kfree(new_interfaces); + return ret; + } + } + } + /* if it's already configured, clear out old state first. * getting rid of old interfaces means unbinding their drivers. */ @@ -1139,7 +1181,7 @@ if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_CONFIGURATION, 0, configuration, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT)) < 0) - goto out; + goto free_interfaces; dev->actconfig = cp; if (!cp) @@ -1147,14 +1189,21 @@ else { dev->state = USB_STATE_CONFIGURED; - /* re-initialize hc/hcd/usbcore interface/endpoint state. - * this triggers binding of drivers to interfaces; and - * maybe probe() calls will choose different altsettings. + /* Initialize the new interface structures and the + * hc/hcd/usbcore interface/endpoint state. */ - for (i = 0; i < cp->desc.bNumInterfaces; ++i) { - struct usb_interface *intf = cp->interface[i]; + for (i = 0; i < nintf; ++i) { + struct usb_interface_cache *intfc; + struct usb_interface *intf; struct usb_host_interface *alt; + cp->interface[i] = intf = new_interfaces[i]; + memset(intf, 0, sizeof(*intf)); + intfc = cp->intf_cache[i]; + intf->altsetting = intfc->altsetting; + intf->num_altsetting = intfc->num_altsetting; + kref_get(&intfc->ref); + alt = usb_altnum_to_altsetting(intf, 0); /* No altsetting 0? We'll assume the first altsetting. @@ -1178,12 +1227,15 @@ configuration, alt->desc.bInterfaceNumber); } + kfree(new_interfaces); - /* Now that all interfaces are setup, probe() calls - * may claim() any interface that's not yet bound. - * Many class drivers need that: CDC, audio, video, etc. + /* Now that all the interfaces are set up, register them + * to trigger binding of drivers to interfaces. probe() + * routines may install different altsettings and may + * claim() any interfaces not yet bound. Many class drivers + * need that: CDC, audio, video, etc. */ - for (i = 0; i < cp->desc.bNumInterfaces; ++i) { + for (i = 0; i < nintf; ++i) { struct usb_interface *intf = cp->interface[i]; struct usb_interface_descriptor *desc; @@ -1204,7 +1256,6 @@ } } -out: return ret; } diff -Nru a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c --- a/drivers/usb/core/urb.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/core/urb.c Tue May 18 23:38:08 2004 @@ -13,6 +13,14 @@ #include #include "hcd.h" +#define to_urb(d) container_of(d, struct urb, kref) + +static void urb_destroy(struct kref *kref) +{ + struct urb *urb = to_urb(kref); + kfree(urb); +} + /** * usb_init_urb - initializes a urb so that it can be used by a USB driver * @urb: pointer to the urb to initialize @@ -31,7 +39,7 @@ { if (urb) { memset(urb, 0, sizeof(*urb)); - urb->count = (atomic_t)ATOMIC_INIT(1); + kref_init(&urb->kref, urb_destroy); spin_lock_init(&urb->lock); } } @@ -80,8 +88,7 @@ void usb_free_urb(struct urb *urb) { if (urb) - if (atomic_dec_and_test(&urb->count)) - kfree(urb); + kref_put(&urb->kref); } /** @@ -96,11 +103,9 @@ */ struct urb * usb_get_urb(struct urb *urb) { - if (urb) { - atomic_inc(&urb->count); - return urb; - } else - return NULL; + if (urb) + kref_get(&urb->kref); + return urb; } @@ -232,6 +237,8 @@ (dev->state < USB_STATE_DEFAULT) || (!dev->bus) || (dev->devnum <= 0)) return -ENODEV; + if (dev->state == USB_STATE_SUSPENDED) + return -EHOSTUNREACH; if (!(op = dev->bus->op) || !op->submit_urb) return -ENODEV; diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/core/usb.c Tue May 18 23:38:07 2004 @@ -198,6 +198,9 @@ * This routine helps device drivers avoid such mistakes. * However, you should make sure that you do the right thing with any * alternate settings available for this interfaces. + * + * Don't call this function unless you are bound to one of the interfaces + * on this device or you own the dev->serialize semaphore! */ struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum) { @@ -228,6 +231,9 @@ * it would be incorrect to assume that the first altsetting entry in * the array corresponds to altsetting zero. This routine helps device * drivers avoid such mistakes. + * + * Don't call this function unless you are bound to the intf interface + * or you own the device's ->serialize semaphore! */ struct usb_host_interface *usb_altnum_to_altsetting(struct usb_interface *intf, unsigned int altnum) @@ -1064,92 +1070,29 @@ } /* - * By the time we get here, we chose a new device address - * and is in the default state. We need to identify the thing and - * get the ball rolling.. + * usb_new_device - perform initial device setup (usbcore-internal) + * @dev: newly addressed device (in ADDRESS state) * - * Returns 0 for success, != 0 for error. + * This is called with devices which have been enumerated, but not yet + * configured. The device descriptor is available, but not descriptors + * for any device configuration. The caller owns dev->serialize, and + * the device is not visible through sysfs or other filesystem code. + * + * Returns 0 for success (device is configured and listed, with its + * interfaces, in sysfs); else a negative errno value. On error, one + * reference count to the device has been dropped. * * This call is synchronous, and may not be used in an interrupt context. * * Only the hub driver should ever call this; root hub registration * uses it only indirectly. */ -#define NEW_DEVICE_RETRYS 2 -#define SET_ADDRESS_RETRYS 2 int usb_new_device(struct usb_device *dev) { - int err = -EINVAL; + int err; int i; - int j; int config; - /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ... - * it's fixed size except for full speed devices. - */ - switch (dev->speed) { - case USB_SPEED_HIGH: /* fixed at 64 */ - i = 64; - break; - case USB_SPEED_FULL: /* 8, 16, 32, or 64 */ - /* to determine the ep0 maxpacket size, read the first 8 - * bytes from the device descriptor to get bMaxPacketSize0; - * then correct our initial (small) guess. - */ - // FALLTHROUGH - case USB_SPEED_LOW: /* fixed at 8 */ - i = 8; - break; - default: - goto fail; - } - dev->epmaxpacketin [0] = i; - dev->epmaxpacketout[0] = i; - - for (i = 0; i < NEW_DEVICE_RETRYS; ++i) { - - for (j = 0; j < SET_ADDRESS_RETRYS; ++j) { - err = usb_set_address(dev); - if (err >= 0) - break; - wait_ms(200); - } - if (err < 0) { - dev_err(&dev->dev, - "device not accepting address %d, error %d\n", - dev->devnum, err); - goto fail; - } - - wait_ms(10); /* Let the SET_ADDRESS settle */ - - /* high and low speed devices don't need this... */ - err = usb_get_device_descriptor(dev, 8); - if (err >= 8) - break; - wait_ms(100); - } - - if (err < 8) { - dev_err(&dev->dev, "device descriptor read/8, error %d\n", err); - goto fail; - } - if (dev->speed == USB_SPEED_FULL) { - usb_disable_endpoint(dev, 0); - usb_endpoint_running(dev, 0, 1); - usb_endpoint_running(dev, 0, 0); - dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0; - dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; - } - - /* USB device state == addressed ... still not usable */ - - err = usb_get_device_descriptor(dev, sizeof(dev->descriptor)); - if (err != (signed)sizeof(dev->descriptor)) { - dev_err(&dev->dev, "device descriptor read/all, error %d\n", err); - goto fail; - } - err = usb_get_configuration(dev); if (err < 0) { dev_err(&dev->dev, "can't read configurations, error %d\n", @@ -1170,13 +1113,10 @@ usb_show_string(dev, "SerialNumber", dev->descriptor.iSerialNumber); #endif - down(&dev->serialize); - /* put device-specific files into sysfs */ err = device_add (&dev->dev); if (err) { dev_err(&dev->dev, "can't device_add, error %d\n", err); - up(&dev->serialize); goto fail; } usb_create_driverfs_dev_files (dev); @@ -1193,7 +1133,7 @@ /* heuristic: Linux is more likely to have class * drivers, so avoid vendor-specific interfaces. */ - desc = &dev->config[i].interface[0] + desc = &dev->config[i].intf_cache[0] ->altsetting->desc; if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC) continue; @@ -1211,7 +1151,6 @@ dev->descriptor.bNumConfigurations); } err = usb_set_configuration(dev, config); - up(&dev->serialize); if (err) { dev_err(&dev->dev, "can't set config #%d, error %d\n", config, err); @@ -1226,9 +1165,10 @@ return 0; fail: - dev->state = USB_STATE_DEFAULT; + dev->state = USB_STATE_NOTATTACHED; clear_bit(dev->devnum, dev->bus->devmap.devicemap); dev->devnum = -1; + usb_put_dev(dev); return err; } @@ -1577,20 +1517,40 @@ */ static int __init usb_init(void) { + int retval; if (nousb) { pr_info ("%s: USB support disabled\n", usbcore_name); return 0; } - bus_register(&usb_bus_type); + retval = bus_register(&usb_bus_type); + if (retval) + goto out; usb_host_init(); - usb_major_init(); - usbfs_init(); - usb_hub_init(); - - driver_register(&usb_generic_driver); - - return 0; + retval = usb_major_init(); + if (retval) + goto major_init_failed; + retval = usbfs_init(); + if (retval) + goto fs_init_failed; + retval = usb_hub_init(); + if (retval) + goto hub_init_failed; + + retval = driver_register(&usb_generic_driver); + if (!retval) + goto out; + + usb_hub_cleanup(); +hub_init_failed: + usbfs_cleanup(); +fs_init_failed: + usb_major_cleanup(); +major_init_failed: + usb_host_cleanup(); + bus_unregister(&usb_bus_type); +out: + return retval; } /* diff -Nru a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c --- a/drivers/usb/gadget/dummy_hcd.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/gadget/dummy_hcd.c Tue May 18 23:38:05 2004 @@ -144,6 +144,7 @@ struct usb_gadget_driver *driver; struct dummy_request fifo_req; u8 fifo_buf [FIFO_SIZE]; + u16 devstatus; struct hcd_dev *hdev; @@ -156,6 +157,8 @@ u32 port_status; int started; struct completion released; + unsigned resuming:1; + unsigned long re_timeout; }; static struct dummy *the_controller; @@ -556,8 +559,37 @@ return tv.tv_usec / 1000; } +static int dummy_wakeup (struct usb_gadget *_gadget) +{ + struct dummy *dum; + + dum = container_of (_gadget, struct dummy, gadget); + if ((dum->devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) == 0 + || !(dum->port_status & (1 << USB_PORT_FEAT_SUSPEND))) + return -EINVAL; + + /* hub notices our request, issues downstream resume, etc */ + dum->resuming = 1; + dum->port_status |= (1 << USB_PORT_FEAT_C_SUSPEND); + return 0; +} + +static int dummy_set_selfpowered (struct usb_gadget *_gadget, int value) +{ + struct dummy *dum; + + dum = container_of (_gadget, struct dummy, gadget); + if (value) + dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED); + else + dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); + return 0; +} + static const struct usb_gadget_ops dummy_ops = { .get_frame = dummy_g_get_frame, + .wakeup = dummy_wakeup, + .set_selfpowered = dummy_set_selfpowered, }; /*-------------------------------------------------------------------------*/ @@ -653,6 +685,9 @@ dum->gadget.ops = &dummy_ops; dum->gadget.is_dualspeed = 1; + dum->devstatus = 0; + dum->resuming = 0; + INIT_LIST_HEAD (&dum->gadget.ep_list); for (i = 0; i < DUMMY_ENDPOINTS; i++) { struct dummy_ep *ep = &dum->ep [i]; @@ -1130,8 +1165,19 @@ break; case USB_REQ_SET_FEATURE: if (setup.bRequestType == Dev_Request) { - // remote wakeup, and (hs) test mode - value = -EOPNOTSUPP; + value = 0; + switch (setup.wValue) { + case USB_DEVICE_REMOTE_WAKEUP: + break; + default: + value = -EOPNOTSUPP; + } + if (value == 0) { + dum->devstatus |= + (1 << setup.wValue); + maybe_set_status (urb, 0); + } + } else if (setup.bRequestType == Ep_Request) { // endpoint halt ep2 = find_endpoint (dum, @@ -1147,9 +1193,17 @@ break; case USB_REQ_CLEAR_FEATURE: if (setup.bRequestType == Dev_Request) { - // remote wakeup - value = 0; - maybe_set_status (urb, 0); + switch (setup.wValue) { + case USB_DEVICE_REMOTE_WAKEUP: + dum->devstatus &= ~(1 << + USB_DEVICE_REMOTE_WAKEUP); + value = 0; + maybe_set_status (urb, 0); + break; + default: + value = -EOPNOTSUPP; + break; + } } else if (setup.bRequestType == Ep_Request) { // endpoint halt ep2 = find_endpoint (dum, @@ -1185,6 +1239,10 @@ break; } buf [0] = ep2->halted; + } else if (setup.bRequestType == + Dev_InRequest) { + buf [0] = (u8) + dum->devstatus; } else buf [0] = 0; } @@ -1338,8 +1396,21 @@ case ClearHubFeature: break; case ClearPortFeature: - // FIXME won't some of these need special handling? - dum->port_status &= ~(1 << wValue); + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + /* 20msec resume signaling */ + dum->resuming = 1; + dum->re_timeout = jiffies + ((HZ * 20)/1000); + break; + case USB_PORT_FEAT_POWER: + dum->port_status = 0; + dum->address = 0; + dum->hdev = 0; + dum->resuming = 0; + break; + default: + dum->port_status &= ~(1 << wValue); + } break; case GetHubDescriptor: hub_descriptor ((struct usb_hub_descriptor *) buf); @@ -1350,33 +1421,28 @@ case GetPortStatus: if (wIndex != 1) retval = -EPIPE; - ((u16 *) buf)[0] = cpu_to_le16 (dum->port_status); - ((u16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16); - break; - case SetHubFeature: - retval = -EPIPE; - break; - case SetPortFeature: - if (wValue == USB_PORT_FEAT_RESET) { - /* if it's already running, disconnect first */ - if (dum->port_status & USB_PORT_STAT_ENABLE) { - dum->port_status &= ~(USB_PORT_STAT_ENABLE - | USB_PORT_STAT_LOW_SPEED - | USB_PORT_STAT_HIGH_SPEED); - if (dum->driver) { - dev_dbg (hardware, "disconnect\n"); - stop_activity (dum, dum->driver); - } - /* FIXME test that code path! */ - } else - dum->port_status |= - (1 << USB_PORT_FEAT_C_ENABLE); - - dum->port_status |= USB_PORT_STAT_ENABLE | - (1 << USB_PORT_FEAT_C_RESET); + /* whoever resets or resumes must GetPortStatus to + * complete it!! + */ + if (dum->resuming && time_after (jiffies, dum->re_timeout)) { + dum->port_status |= (1 << USB_PORT_FEAT_C_SUSPEND); + dum->port_status &= ~(1 << USB_PORT_FEAT_SUSPEND); + dum->resuming = 0; + dum->re_timeout = 0; + if (dum->driver->resume) { + spin_unlock (&dum->lock); + dum->driver->resume (&dum->gadget); + spin_lock (&dum->lock); + } + } + if ((dum->port_status & (1 << USB_PORT_FEAT_RESET)) != 0 + && time_after (jiffies, dum->re_timeout)) { + dum->port_status |= (1 << USB_PORT_FEAT_C_RESET); + dum->port_status &= ~(1 << USB_PORT_FEAT_RESET); + dum->re_timeout = 0; if (dum->driver) { - + dum->port_status |= USB_PORT_STAT_ENABLE; /* give it the best speed we agree on */ dum->gadget.speed = dum->driver->speed; dum->gadget.ep0->maxpacket = 64; @@ -1395,8 +1461,42 @@ break; } } - } else + } + ((u16 *) buf)[0] = cpu_to_le16 (dum->port_status); + ((u16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16); + break; + case SetHubFeature: + retval = -EPIPE; + break; + case SetPortFeature: + switch (wValue) { + case USB_PORT_FEAT_SUSPEND: + dum->port_status |= (1 << USB_PORT_FEAT_SUSPEND); + if (dum->driver->suspend) { + spin_unlock (&dum->lock); + dum->driver->suspend (&dum->gadget); + spin_lock (&dum->lock); + } + break; + case USB_PORT_FEAT_RESET: + /* if it's already running, disconnect first */ + if (dum->port_status & USB_PORT_STAT_ENABLE) { + dum->port_status &= ~(USB_PORT_STAT_ENABLE + | USB_PORT_STAT_LOW_SPEED + | USB_PORT_STAT_HIGH_SPEED); + if (dum->driver) { + dev_dbg (hardware, "disconnect\n"); + stop_activity (dum, dum->driver); + } + + /* FIXME test that code path! */ + } + /* 50msec reset signaling */ + dum->re_timeout = jiffies + ((HZ * 50)/1000); + /* FALLTHROUGH */ + default: dum->port_status |= (1 << wValue); + } break; default: diff -Nru a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c --- a/drivers/usb/gadget/ether.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/gadget/ether.c Tue May 18 23:38:09 2004 @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -117,6 +118,7 @@ unsigned zlp:1; unsigned cdc:1; unsigned rndis:1; + u16 cdc_filter; unsigned long todo; #define WORK_RX_MEMORY 0 int rndis_config; @@ -192,6 +194,16 @@ module_param(iProduct, charp, S_IRUGO); MODULE_PARM_DESC(iProduct, "USB Product string"); +/* initial value, changed by "ifconfig usb0 hw ether xx:xx:xx:xx:xx:xx" */ +static char *__initdata dev_addr; +module_param(dev_addr, charp, S_IRUGO); +MODULE_PARM_DESC(iProduct, "Device Ethernet Address"); + +/* this address is invisible to ifconfig */ +static char *__initdata host_addr; +module_param(host_addr, charp, S_IRUGO); +MODULE_PARM_DESC(host_addr, "Host Ethernet Address"); + /*-------------------------------------------------------------------------*/ @@ -1139,6 +1151,9 @@ } eth_reset_config (dev); + /* default: pass all packets, no multicast filtering */ + dev->cdc_filter = 0x000f; + switch (number) { case DEV_CONFIG_VALUE: dev->rndis = 0; @@ -1311,9 +1326,20 @@ * section 3.6.2.1 table 4 has ACM requests; RNDIS requires the * encapsulated command mechanism. */ -#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 /* optional */ -#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 /* optional */ -#define CDC_SET_ETHERNET_PACKET_FILTER 0x43 /* required */ +#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 /* optional */ +#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 /* optional */ +#define CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40 /* optional */ +#define CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41 /* optional */ +#define CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 /* optional */ +#define CDC_SET_ETHERNET_PACKET_FILTER 0x43 /* required */ +#define CDC_GET_ETHERNET_STATISTIC 0x44 /* optional */ + +/* table 62; bits in cdc_filter */ +#define CDC_PACKET_TYPE_PROMISCUOUS (1 << 0) +#define CDC_PACKET_TYPE_ALL_MULTICAST (1 << 1) /* no filter */ +#define CDC_PACKET_TYPE_DIRECTED (1 << 2) +#define CDC_PACKET_TYPE_BROADCAST (1 << 3) +#define CDC_PACKET_TYPE_MULTICAST (1 << 4) /* filtered */ #ifdef CONFIG_USB_ETH_RNDIS @@ -1513,8 +1539,9 @@ DEBUG (dev, "NOP packet filter %04x\n", ctrl->wValue); /* NOTE: table 62 has 5 filter bits to reduce traffic, * and we "must" support multicast and promiscuous. - * this NOP implements a bad filter... + * this NOP implements a bad filter (always promisc) */ + dev->cdc_filter = ctrl->wValue; value = 0; break; #endif /* DEV_CONFIG_CDC */ @@ -1942,6 +1969,11 @@ struct usb_request *req = 0; unsigned long flags; + /* FIXME check dev->cdc_filter to decide whether to send this, + * instead of acting as if CDC_PACKET_TYPE_PROMISCUOUS were + * always set. RNDIS has the same kind of outgoing filter. + */ + spin_lock_irqsave (&dev->lock, flags); req = container_of (dev->tx_reqs.next, struct usb_request, list); list_del (&req->list); @@ -2178,6 +2210,36 @@ set_gadget_data (gadget, 0); } +static u8 __init nibble (unsigned char c) +{ + if (likely (isdigit (c))) + return c - '0'; + c = toupper (c); + if (likely (isxdigit (c))) + return 10 + c - 'A'; + return 0; +} + +static void __init get_ether_addr (const char *str, u8 *dev_addr) +{ + if (str) { + unsigned i; + + for (i = 0; i < 6; i++) { + unsigned char num; + + if((*str == '.') || (*str == ':')) + str++; + num = nibble(*str++) << 4; + num |= (nibble(*str++)); + dev_addr [i] = num; + } + if (is_valid_ether_addr (dev_addr)) + return; + } + random_ether_addr(dev_addr); +} + static int __init eth_bind (struct usb_gadget *gadget) { @@ -2372,21 +2434,13 @@ dev->cdc = cdc; dev->zlp = zlp; - /* FIXME make these addresses configurable with module params. - * also the manufacturer and product strings. - */ - - /* one random address for the gadget device ... both of these could - * reasonably come from an id prom or a module parameter. - */ - random_ether_addr(net->dev_addr); - - /* ... another address for the host, on the other end of the - * link, gets exported through CDC (see CDC spec table 41) - * and RNDIS. + /* Module params for these addresses should come from ID proms. + * The host side address is used with CDC and RNDIS, and commonly + * end ups in a persistent config database. */ + get_ether_addr(dev_addr, net->dev_addr); if (cdc || rndis) { - random_ether_addr(dev->host_mac); + get_ether_addr(host_addr, dev->host_mac); #ifdef DEV_CONFIG_CDC snprintf (ethaddr, sizeof ethaddr, "%02X%02X%02X%02X%02X%02X", dev->host_mac [0], dev->host_mac [1], diff -Nru a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c --- a/drivers/usb/gadget/file_storage.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/gadget/file_storage.c Tue May 18 23:38:09 2004 @@ -2054,7 +2054,7 @@ buf[0] = 0x80 | 0x70; // Valid, current error buf[2] = SK(sd); put_be32(&buf[3], sdinfo); // Sense information - buf[7] = 18 - 7; // Additional sense length + buf[7] = 18 - 8; // Additional sense length buf[12] = ASC(sd); buf[13] = ASCQ(sd); return 18; diff -Nru a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h --- a/drivers/usb/gadget/gadget_chips.h Tue May 18 23:38:05 2004 +++ b/drivers/usb/gadget/gadget_chips.h Tue May 18 23:38:05 2004 @@ -20,7 +20,7 @@ #define gadget_is_dummy(g) 0 #endif -#ifdef CONFIG_USB_GADGET_PXA +#ifdef CONFIG_USB_GADGET_PXA2XX #define gadget_is_pxa(g) !strcmp("pxa2xx_udc", (g)->name) #else #define gadget_is_pxa(g) 0 diff -Nru a/drivers/usb/gadget/rndis.c b/drivers/usb/gadget/rndis.c --- a/drivers/usb/gadget/rndis.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/gadget/rndis.c Tue May 18 23:38:05 2004 @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -51,7 +52,7 @@ #define DEBUG if (rndis_debug) printk static int rndis_debug = 0; -MODULE_PARM (rndis_debug, "i"); +module_param (rndis_debug, bool, 0); MODULE_PARM_DESC (rndis_debug, "enable debugging"); #else @@ -78,44 +79,6 @@ static rndis_resp_t *rndis_add_response (int configNr, u32 length); -/* helper functions */ -static u32 devFlags2currentFilter (struct net_device *dev) -{ - u32 filter = 0; - - if (!dev) return 0; - - if (dev->flags & IFF_MULTICAST) - filter |= NDIS_PACKET_TYPE_MULTICAST; - if (dev->flags & IFF_BROADCAST) - filter |= NDIS_PACKET_TYPE_BROADCAST; - if (dev->flags & IFF_ALLMULTI) - filter |= NDIS_PACKET_TYPE_ALL_MULTICAST; - if (dev->flags & IFF_PROMISC) - filter |= NDIS_PACKET_TYPE_PROMISCUOUS; - - return filter; -} - -static void currentFilter2devFlags (u32 currentFilter, struct net_device *dev) -{ - /* FIXME the filter is supposed to control what gets - * forwarded from gadget to host; but dev->flags controls - * reporting from host to gadget ... - */ -#if 0 - if (!dev) return; - if (currentFilter & NDIS_PACKET_TYPE_MULTICAST) - dev->flags |= IFF_MULTICAST; - if (currentFilter & NDIS_PACKET_TYPE_BROADCAST) - dev->flags |= IFF_BROADCAST; - if (currentFilter & NDIS_PACKET_TYPE_ALL_MULTICAST) - dev->flags |= IFF_ALLMULTI; - if (currentFilter & NDIS_PACKET_TYPE_PROMISCUOUS) - dev->flags |= IFF_PROMISC; -#endif -} - /* FIXME OMITTED OIDs, that RNDIS-on-USB "must" support, include * - power management (OID_PNP_CAPABILITIES, ...) * - network wakeup (OID_PNP_ENABLE_WAKE_UP, ...) @@ -252,13 +215,12 @@ rndis_per_dev_params [configNr].vendorDescr, length); retval = 0; break; - + /* mandatory */ case OID_GEN_CURRENT_PACKET_FILTER: DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __FUNCTION__); length = 4; - *((u32 *) resp + 6) = devFlags2currentFilter ( - rndis_per_dev_params [configNr].dev); + *((u32 *) resp + 6) = rndis_per_dev_params[configNr].filter; retval = 0; break; @@ -767,16 +729,24 @@ switch (OID) { case OID_GEN_CURRENT_PACKET_FILTER: - DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __FUNCTION__); params = &rndis_per_dev_params [configNr]; - currentFilter2devFlags(cp[28], params->dev); retval = 0; + /* FIXME use this NDIS_PACKET_TYPE_* bitflags to + * filter packets in hard_start_xmit() + * NDIS_PACKET_TYPE_x == CDC_PACKET_TYPE_x for x in: + * PROMISCUOUS, DIRECTED, + * MULTICAST, ALL_MULTICAST, BROADCAST + */ + params->filter = *(u32 *)buf; + DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER %08x\n", + __FUNCTION__, params->filter); + /* this call has a significant side effect: it's * what makes the packet flow start and stop, like * activating the CDC Ethernet altsetting. */ - if (cp[28]) { + if (params->filter) { params->state = RNDIS_DATA_INITIALIZED; netif_carrier_on(params->dev); if (netif_running(params->dev)) diff -Nru a/drivers/usb/gadget/rndis.h b/drivers/usb/gadget/rndis.h --- a/drivers/usb/gadget/rndis.h Tue May 18 23:38:06 2004 +++ b/drivers/usb/gadget/rndis.h Tue May 18 23:38:06 2004 @@ -277,6 +277,7 @@ u8 confignr; int used; enum rndis_state state; + u32 filter; u32 medium; u32 speed; u32 media_state; diff -Nru a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c --- a/drivers/usb/gadget/serial.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/gadget/serial.c Tue May 18 23:38:08 2004 @@ -157,8 +157,12 @@ /* debug macro */ #if G_SERIAL_DEBUG - static int debug = G_SERIAL_DEBUG; +#else +static int debug = 0; +#endif + +#if G_SERIAL_DEBUG #define gs_debug(format, arg...) \ do { if (debug) printk(KERN_DEBUG format, ## arg); } while(0) diff -Nru a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c --- a/drivers/usb/gadget/zero.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/gadget/zero.c Tue May 18 23:38:06 2004 @@ -130,6 +130,9 @@ */ u8 config; struct usb_ep *in_ep, *out_ep; + + /* autoresume timer */ + struct timer_list resume; }; #define xprintk(d,level,fmt,args...) \ @@ -167,6 +170,12 @@ module_param (qlen, uint, S_IRUGO|S_IWUSR); module_param (pattern, uint, S_IRUGO|S_IWUSR); +/* + * if it's nonzero, autoresume says how many seconds to wait + * before trying to wake up the host after suspend. + */ +static unsigned autoresume = 0; +module_param (autoresume, uint, 0); /* * Normally the "loopback" configuration is second (index 1) so @@ -224,7 +233,7 @@ .bNumConfigurations = 2, }; -static const struct usb_config_descriptor +static struct usb_config_descriptor source_sink_config = { .bLength = sizeof source_sink_config, .bDescriptorType = USB_DT_CONFIG, @@ -237,7 +246,7 @@ .bMaxPower = 1, /* self-powered */ }; -static const struct usb_config_descriptor +static struct usb_config_descriptor loopback_config = { .bLength = sizeof loopback_config, .bDescriptorType = USB_DT_CONFIG, @@ -1060,6 +1069,19 @@ */ } +static void +zero_autoresume (unsigned long _dev) +{ + struct zero_dev *dev = (struct zero_dev *) _dev; + int status; + + /* normally the host would be woken up for something + * more significant than just a timer firing... + */ + status = usb_gadget_wakeup (dev->gadget); + DBG (dev, "wakeup --> %d\n", status); +} + /*-------------------------------------------------------------------------*/ static void @@ -1072,6 +1094,7 @@ /* we've already been disconnected ... no i/o is active */ if (dev->req) free_ep_req (gadget->ep0, dev->req); + del_timer_sync (&dev->resume); kfree (dev); set_gadget_data (gadget, 0); } @@ -1176,6 +1199,14 @@ usb_gadget_set_selfpowered (gadget); + init_timer (&dev->resume); + dev->resume.function = zero_autoresume; + dev->resume.data = (unsigned long) dev; + if (autoresume) { + source_sink_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP; + loopback_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP; + } + gadget->ep0->driver_data = dev; INFO (dev, "%s, version: " DRIVER_VERSION "\n", longname); @@ -1195,6 +1226,33 @@ /*-------------------------------------------------------------------------*/ +static void +zero_suspend (struct usb_gadget *gadget) +{ + struct zero_dev *dev = get_gadget_data (gadget); + + if (gadget->speed == USB_SPEED_UNKNOWN) + return; + + if (autoresume) { + mod_timer (&dev->resume, jiffies + (HZ * autoresume)); + DBG (dev, "suspend, wakeup in %d seconds\n", autoresume); + } else + DBG (dev, "suspend\n"); +} + +static void +zero_resume (struct usb_gadget *gadget) +{ + struct zero_dev *dev = get_gadget_data (gadget); + + DBG (dev, "resume\n"); + del_timer (&dev->resume); +} + + +/*-------------------------------------------------------------------------*/ + static struct usb_gadget_driver zero_driver = { #ifdef CONFIG_USB_GADGET_DUALSPEED .speed = USB_SPEED_HIGH, @@ -1207,6 +1265,9 @@ .setup = zero_setup, .disconnect = zero_disconnect, + + .suspend = zero_suspend, + .resume = zero_resume, .driver = { .name = (char *) shortname, diff -Nru a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c --- a/drivers/usb/host/ehci-dbg.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ehci-dbg.c Tue May 18 23:38:08 2004 @@ -170,6 +170,20 @@ itd->index[6], itd->index[7]); } +static void __attribute__((__unused__)) +dbg_sitd (const char *label, struct ehci_hcd *ehci, struct ehci_sitd *sitd) +{ + ehci_dbg (ehci, "%s [%d] sitd %p, next %08x, urb %p\n", + label, sitd->frame, sitd, le32_to_cpu(sitd->hw_next), sitd->urb); + ehci_dbg (ehci, + " addr %08x sched %04x result %08x buf %08x %08x\n", + le32_to_cpu(sitd->hw_fullspeed_ep), + le32_to_cpu(sitd->hw_uframe), + le32_to_cpu(sitd->hw_results), + le32_to_cpu(sitd->hw_buf [0]), + le32_to_cpu(sitd->hw_buf [1])); +} + static int __attribute__((__unused__)) dbg_status_buf (char *buf, unsigned len, char *label, u32 status) { @@ -625,11 +639,20 @@ spin_lock_irqsave (&ehci->lock, flags); + if (bus->controller->power.power_state) { + size = scnprintf (next, size, + "bus %s, device %s (driver " DRIVER_VERSION ")\n" + "SUSPENDED (no register access)\n", + hcd->self.controller->bus->name, + hcd->self.controller->bus_id); + goto done; + } + /* Capability Registers */ i = HC_VERSION(readl (&ehci->caps->hc_capbase)); temp = scnprintf (next, size, - "bus %s device %s\n" - "EHCI %x.%02x, hcd state %d (driver " DRIVER_VERSION ")\n", + "bus %s, device %s (driver " DRIVER_VERSION ")\n" + "EHCI %x.%02x, hcd state %d\n", hcd->self.controller->bus->name, hcd->self.controller->bus_id, i >> 8, i & 0x0ff, ehci->hcd.state); @@ -672,7 +695,7 @@ next += temp; for (i = 0; i < HCS_N_PORTS (ehci->hcs_params); i++) { - temp = dbg_port_buf (scratch, sizeof scratch, label, i, + temp = dbg_port_buf (scratch, sizeof scratch, label, i + 1, readl (&ehci->regs->port_status [i])); temp = scnprintf (next, size, fmt, temp, scratch); size -= temp; @@ -701,6 +724,7 @@ next += temp; #endif +done: spin_unlock_irqrestore (&ehci->lock, flags); return PAGE_SIZE - size; diff -Nru a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c --- a/drivers/usb/host/ehci-hcd.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ehci-hcd.c Tue May 18 23:38:08 2004 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 by David Brownell + * Copyright (c) 2000-2004 by David Brownell * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -69,6 +69,7 @@ * * HISTORY: * + * 2004-05-10 Root hub and PCI suspend/resume support; remote wakeup. (db) * 2004-02-24 Replace pci_* with generic dma_* API calls (dsaxena@plexity.net) * 2003-12-29 Rewritten high speed iso transfer support (by Michal Sojka, * , updates by DB). @@ -96,7 +97,7 @@ * 2001-June Works with usb-storage and NEC EHCI on 2.4 */ -#define DRIVER_VERSION "2003-Dec-29" +#define DRIVER_VERSION "2004-May-10" #define DRIVER_AUTHOR "David Brownell" #define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver" @@ -128,7 +129,7 @@ module_param (log2_irq_thresh, int, S_IRUGO); MODULE_PARM_DESC (log2_irq_thresh, "log2 IRQ latency, 1-64 microframes"); -#define INTR_MASK (STS_IAA | STS_FATAL | STS_ERR | STS_INT) +#define INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT) /*-------------------------------------------------------------------------*/ @@ -201,6 +202,7 @@ dbg_cmd (ehci, "reset", command); writel (command, &ehci->regs->command); ehci->hcd.state = USB_STATE_HALT; + ehci->next_statechange = jiffies; return handshake (&ehci->regs->command, CMD_RESET, 0, 250 * 1000); } @@ -241,6 +243,8 @@ /*-------------------------------------------------------------------------*/ +static void ehci_work(struct ehci_hcd *ehci, struct pt_regs *regs); + #include "ehci-hub.c" #include "ehci-mem.c" #include "ehci-q.c" @@ -248,8 +252,6 @@ /*-------------------------------------------------------------------------*/ -static void ehci_work(struct ehci_hcd *ehci, struct pt_regs *regs); - static void ehci_watchdog (unsigned long param) { struct ehci_hcd *ehci = (struct ehci_hcd *) param; @@ -295,7 +297,7 @@ /* and wait a while for it to happen */ do { - wait_ms (10); + msleep(10); msec -= 10; pci_read_config_dword (to_pci_dev(ehci->hcd.self.controller), where, &cap); } while ((cap & (1 << 16)) && msec); @@ -428,12 +430,17 @@ #ifdef CONFIG_PCI if (hcd->self.controller->bus == &pci_bus_type) { struct pci_dev *pdev; + u16 port_wake; pdev = to_pci_dev(hcd->self.controller); /* Serial Bus Release Number is at PCI 0x60 offset */ pci_read_config_byte(pdev, 0x60, &sbrn); + /* port wake capability, reported by boot firmware */ + pci_read_config_word(pdev, 0x62, &port_wake); + hcd->can_wakeup = (port_wake & 1) != 0; + /* help hc dma work well with cachelines */ pci_set_mwi (pdev); @@ -615,41 +622,26 @@ /* suspend/resume, section 4.3 */ +/* These routines rely on PCI to handle powerdown and wakeup, and + * transceivers that don't need any software attention to set up + * the right sort of wakeup. + */ + static int ehci_suspend (struct usb_hcd *hcd, u32 state) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); - int ports; - int i; - - ehci_dbg (ehci, "suspend to %d\n", state); - ports = HCS_N_PORTS (ehci->hcs_params); + while (time_before (jiffies, ehci->next_statechange)) + msleep (100); - // FIXME: This assumes what's probably a D3 level suspend... - - // FIXME: usb wakeup events on this bus should resume the machine. - // pci config register PORTWAKECAP controls which ports can do it; - // bios may have initted the register... - - /* suspend each port, then stop the hc */ - for (i = 0; i < ports; i++) { - int temp = readl (&ehci->regs->port_status [i]); - - if ((temp & PORT_PE) == 0 - || (temp & PORT_OWNER) != 0) - continue; - ehci_dbg (ehci, "suspend port %d", i); - temp |= PORT_SUSPEND; - writel (temp, &ehci->regs->port_status [i]); - } - - if (hcd->state == USB_STATE_RUNNING) - ehci_ready (ehci); - writel (readl (&ehci->regs->command) & ~CMD_RUN, &ehci->regs->command); - -// save pci FLADJ value +#ifdef CONFIG_USB_SUSPEND + (void) usb_suspend_device (hcd->self.root_hub); +#else + /* FIXME lock root hub */ + (void) ehci_hub_suspend (hcd); +#endif - /* who tells PCI to reduce power consumption? */ + // save (PCI) FLADJ in case of Vaux power loss return 0; } @@ -657,40 +649,22 @@ static int ehci_resume (struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci (hcd); - int ports; - int i; + int retval; - ehci_dbg (ehci, "resume\n"); + // maybe restore (PCI) FLADJ - ports = HCS_N_PORTS (ehci->hcs_params); + while (time_before (jiffies, ehci->next_statechange)) + msleep (100); - // FIXME: if controller didn't retain state, - // return and let generic code clean it up - // test configured_flag ? - - /* resume HC and each port */ -// restore pci FLADJ value - // khubd and drivers will set HC running, if needed; - hcd->state = USB_STATE_RUNNING; - // FIXME Philips/Intel/... etc don't really have a "READY" - // state ... turn on CMD_RUN too - for (i = 0; i < ports; i++) { - int temp = readl (&ehci->regs->port_status [i]); - - if ((temp & PORT_PE) == 0 - || (temp & PORT_SUSPEND) != 0) - continue; - ehci_dbg (ehci, "resume port %d", i); - temp |= PORT_RESUME; - writel (temp, &ehci->regs->port_status [i]); - readl (&ehci->regs->command); /* unblock posted writes */ - - wait_ms (20); - temp &= ~PORT_RESUME; - writel (temp, &ehci->regs->port_status [i]); - } - readl (&ehci->regs->command); /* unblock posted writes */ - return 0; +#ifdef CONFIG_USB_SUSPEND + retval = usb_resume_device (hcd->self.root_hub); +#else + /* FIXME lock root hub */ + retval = ehci_hub_resume (hcd); +#endif + if (retval == 0) + hcd->self.controller->power.power_state = 0; + return retval; } #endif @@ -752,7 +726,7 @@ bh = 0; #ifdef EHCI_VERBOSE_DEBUG - /* unrequested/ignored: Port Change Detect, Frame List Rollover */ + /* unrequested/ignored: Frame List Rollover */ dbg_status (ehci, "irq", status); #endif @@ -774,6 +748,34 @@ bh = 1; } + /* remote wakeup [4.3.1] */ + if ((status & STS_PCD) && ehci->hcd.remote_wakeup) { + unsigned i = HCS_N_PORTS (ehci->hcs_params); + + /* resume root hub? */ + status = readl (&ehci->regs->command); + if (!(status & CMD_RUN)) + writel (status | CMD_RUN, &ehci->regs->command); + + while (i--) { + status = readl (&ehci->regs->port_status [i]); + if (status & PORT_OWNER) + continue; + if (!(status & PORT_RESUME) + || ehci->reset_done [i] != 0) + continue; + + /* start 20 msec resume signaling from this port, + * and make khubd collect PORT_STAT_C_SUSPEND to + * stop that signaling. + */ + ehci->reset_done [i] = jiffies + msecs_to_jiffies (20); + mod_timer (&ehci->hcd.rh_timer, + ehci->reset_done [i] + 1); + ehci_dbg (ehci, "port %d remote wakeup\n", i + 1); + } + } + /* PCI errors [4.15.2.4] */ if (unlikely ((status & STS_FATAL) != 0)) { ehci_err (ehci, "fatal error\n"); @@ -814,7 +816,6 @@ struct ehci_hcd *ehci = hcd_to_ehci (hcd); struct list_head qtd_list; - urb->transfer_flags &= ~EHCI_STATE_UNLINK; INIT_LIST_HEAD (&qtd_list); switch (usb_pipetype (urb->pipe)) { @@ -914,7 +915,6 @@ // wait till next completion, do it then. // completion irqs can wait up to 1024 msec, - urb->transfer_flags |= EHCI_STATE_UNLINK; break; } spin_unlock_irqrestore (&ehci->lock, flags); @@ -965,7 +965,7 @@ goto rescan; case QH_STATE_IDLE: /* fully unlinked */ if (list_empty (&qh->qtd_list)) { - qh_put (ehci, qh); + qh_put (qh); break; } /* else FALL THROUGH */ diff -Nru a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c --- a/drivers/usb/host/ehci-hub.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/ehci-hub.c Tue May 18 23:38:09 2004 @@ -28,6 +28,131 @@ /*-------------------------------------------------------------------------*/ +#ifdef CONFIG_PM + +static int ehci_hub_suspend (struct usb_hcd *hcd) +{ + struct ehci_hcd *ehci = hcd_to_ehci (hcd); + struct usb_device *root = hcd_to_bus (&ehci->hcd)->root_hub; + int port; + int status = 0; + + if (root->dev.power.power_state != 0) + return 0; + if (time_before (jiffies, ehci->next_statechange)) + return -EAGAIN; + + port = HCS_N_PORTS (ehci->hcs_params); + spin_lock_irq (&ehci->lock); + + /* suspend any active/unsuspended ports, maybe allow wakeup */ + while (port--) { + u32 t1 = readl (&ehci->regs->port_status [port]); + u32 t2 = t1; + + if ((t1 & PORT_PE) && !(t1 & PORT_OWNER)) + t2 |= PORT_SUSPEND; + if (ehci->hcd.remote_wakeup) + t2 |= PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E; + else + t2 &= ~(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E); + + if (t1 != t2) { + ehci_vdbg (ehci, "port %d, %08x -> %08x\n", + port + 1, t1, t2); + writel (t2, &ehci->regs->port_status [port]); + } + } + + /* stop schedules, then turn off HC and clean any completed work */ + if (hcd->state == USB_STATE_RUNNING) + ehci_ready (ehci); + ehci->command = readl (&ehci->regs->command); + writel (ehci->command & ~CMD_RUN, &ehci->regs->command); + if (ehci->reclaim) + ehci->reclaim_ready = 1; + ehci_work (ehci, 0); + (void) handshake (&ehci->regs->status, STS_HALT, STS_HALT, 2000); + + root->dev.power.power_state = 3; + ehci->next_statechange = jiffies + msecs_to_jiffies(10); + spin_unlock_irq (&ehci->lock); + return status; +} + + +/* caller owns root->serialize, and should reset/reinit on error */ +static int ehci_hub_resume (struct usb_hcd *hcd) +{ + struct ehci_hcd *ehci = hcd_to_ehci (hcd); + struct usb_device *root = hcd_to_bus (&ehci->hcd)->root_hub; + u32 temp; + int i; + + if (!root->dev.power.power_state) + return 0; + if (time_before (jiffies, ehci->next_statechange)) + return -EAGAIN; + + /* re-init operational registers in case we lost power */ + if (readl (&ehci->regs->intr_enable) == 0) { + writel (INTR_MASK, &ehci->regs->intr_enable); + writel (0, &ehci->regs->segment); + writel (ehci->periodic_dma, &ehci->regs->frame_list); + writel ((u32)ehci->async->qh_dma, &ehci->regs->async_next); + /* FIXME will this work even (pci) vAUX was lost? */ + } + + /* restore CMD_RUN, framelist size, and irq threshold */ + writel (ehci->command, &ehci->regs->command); + + /* take ports out of suspend */ + i = HCS_N_PORTS (ehci->hcs_params); + while (i--) { + temp = readl (&ehci->regs->port_status [i]); + temp &= ~(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E); + if (temp & PORT_SUSPEND) { + ehci->reset_done [i] = jiffies + msecs_to_jiffies (20); + temp |= PORT_RESUME; + } + writel (temp, &ehci->regs->port_status [i]); + } + i = HCS_N_PORTS (ehci->hcs_params); + msleep (20); + while (i--) { + temp = readl (&ehci->regs->port_status [i]); + if ((temp & PORT_SUSPEND) == 0) + continue; + temp &= ~PORT_RESUME; + writel (temp, &ehci->regs->port_status [i]); + ehci_vdbg (ehci, "resumed port %d\n", i + 1); + } + (void) readl (&ehci->regs->command); + + /* maybe re-activate the schedule(s) */ + temp = 0; + if (ehci->async->qh_next.qh) + temp |= CMD_ASE; + if (ehci->periodic_sched) + temp |= CMD_PSE; + if (temp) + writel (ehci->command | temp, &ehci->regs->command); + + root->dev.power.power_state = 0; + ehci->next_statechange = jiffies + msecs_to_jiffies(5); + ehci->hcd.state = USB_STATE_RUNNING; + return 0; +} + +#else + +#define ehci_hub_suspend 0 +#define ehci_hub_resume 0 + +#endif /* CONFIG_PM */ + +/*-------------------------------------------------------------------------*/ + static int check_reset_complete ( struct ehci_hcd *ehci, int index, @@ -99,7 +224,11 @@ } if (!(temp & PORT_CONNECT)) ehci->reset_done [i] = 0; - if ((temp & (PORT_CSC | PORT_PEC | PORT_OCC)) != 0) { + if ((temp & (PORT_CSC | PORT_PEC | PORT_OCC)) != 0 + // PORT_STAT_C_SUSPEND? + || ((temp & PORT_RESUME) != 0 + && time_after (jiffies, + ehci->reset_done [i]))) { if (i < 7) buf [0] |= 1 << (i + 1); else @@ -143,6 +272,8 @@ /*-------------------------------------------------------------------------*/ +#define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E) + static int ehci_hub_control ( struct usb_hcd *hcd, u16 typeReq, @@ -194,8 +325,20 @@ &ehci->regs->port_status [wIndex]); break; case USB_PORT_FEAT_SUSPEND: + if (temp & PORT_RESET) + goto error; + if (temp & PORT_SUSPEND) { + if ((temp & PORT_PE) == 0) + goto error; + /* resume signaling for 20 msec */ + writel ((temp & ~PORT_WAKE_BITS) | PORT_RESUME, + &ehci->regs->port_status [wIndex]); + ehci->reset_done [wIndex] = jiffies + + msecs_to_jiffies (20); + } + break; case USB_PORT_FEAT_C_SUSPEND: - /* ? */ + /* we auto-clear this feature */ break; case USB_PORT_FEAT_POWER: if (HCS_PPC (ehci->hcs_params)) @@ -239,15 +382,37 @@ status |= 1 << USB_PORT_FEAT_C_CONNECTION; if (temp & PORT_PEC) status |= 1 << USB_PORT_FEAT_C_ENABLE; - // USB_PORT_FEAT_C_SUSPEND if (temp & PORT_OCC) status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT; + /* whoever resumes must GetPortStatus to complete it!! */ + if ((temp & PORT_RESUME) + && time_after (jiffies, + ehci->reset_done [wIndex])) { + status |= 1 << USB_PORT_FEAT_C_SUSPEND; + ehci->reset_done [wIndex] = 0; + + /* stop resume signaling */ + temp = readl (&ehci->regs->port_status [wIndex]); + writel (temp & ~PORT_RESUME, + &ehci->regs->port_status [wIndex]); + retval = handshake ( + &ehci->regs->port_status [wIndex], + PORT_RESUME, 0, 2000 /* 2msec */); + if (retval != 0) { + ehci_err (ehci, "port %d resume error %d\n", + wIndex + 1, retval); + goto error; + } + temp &= ~(PORT_SUSPEND|PORT_RESUME|(3<<10)); + } + /* whoever resets must GetPortStatus to complete it!! */ if ((temp & PORT_RESET) && time_after (jiffies, ehci->reset_done [wIndex])) { status |= 1 << USB_PORT_FEAT_C_RESET; + ehci->reset_done [wIndex] = 0; /* force reset to complete */ writel (temp & ~PORT_RESET, @@ -275,7 +440,7 @@ } if (temp & PORT_PE) status |= 1 << USB_PORT_FEAT_ENABLE; - if (temp & PORT_SUSPEND) + if (temp & (PORT_SUSPEND|PORT_RESUME)) status |= 1 << USB_PORT_FEAT_SUSPEND; if (temp & PORT_OC) status |= 1 << USB_PORT_FEAT_OVER_CURRENT; @@ -312,6 +477,11 @@ switch (wValue) { case USB_PORT_FEAT_SUSPEND: + if ((temp & PORT_PE) == 0 + || (temp & PORT_RESET) != 0) + goto error; + if (ehci->hcd.remote_wakeup) + temp |= PORT_WAKE_BITS; writel (temp | PORT_SUSPEND, &ehci->regs->port_status [wIndex]); break; @@ -321,6 +491,8 @@ &ehci->regs->port_status [wIndex]); break; case USB_PORT_FEAT_RESET: + if (temp & PORT_RESUME) + goto error; /* line status bits may report this as low speed, * which can be fine if this root hub has a * transaction translator built in. @@ -342,7 +514,7 @@ * usb 2.0 spec says 50 ms resets on root */ ehci->reset_done [wIndex] = jiffies - + ((50 /* msec */ * HZ) / 1000); + + msecs_to_jiffies (50); } writel (temp, &ehci->regs->port_status [wIndex]); break; diff -Nru a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c --- a/drivers/usb/host/ehci-mem.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/ehci-mem.c Tue May 18 23:38:09 2004 @@ -87,6 +87,22 @@ } +static void qh_destroy (struct kref *kref) +{ + struct ehci_qh *qh = container_of(kref, struct ehci_qh, kref); + struct ehci_hcd *ehci = qh->ehci; + + /* clean qtds first, and know this is not linked */ + if (!list_empty (&qh->qtd_list) || qh->qh_next.ptr) { + ehci_dbg (ehci, "unused qh not empty!\n"); + BUG (); + } + if (qh->dummy) + ehci_qtd_free (ehci, qh->dummy); + usb_put_dev (qh->dev); + dma_pool_free (ehci->qh_pool, qh, qh->qh_dma); +} + static struct ehci_qh *ehci_qh_alloc (struct ehci_hcd *ehci, int flags) { struct ehci_qh *qh; @@ -98,7 +114,8 @@ return qh; memset (qh, 0, sizeof *qh); - atomic_set (&qh->refcount, 1); + kref_init(&qh->kref, qh_destroy); + qh->ehci = ehci; qh->qh_dma = dma; // INIT_LIST_HEAD (&qh->qh_list); INIT_LIST_HEAD (&qh->qtd_list); @@ -114,25 +131,15 @@ } /* to share a qh (cpu threads, or hc) */ -static inline struct ehci_qh *qh_get (/* ehci, */ struct ehci_qh *qh) +static inline struct ehci_qh *qh_get (struct ehci_qh *qh) { - atomic_inc (&qh->refcount); + kref_get(&qh->kref); return qh; } -static void qh_put (struct ehci_hcd *ehci, struct ehci_qh *qh) +static inline void qh_put (struct ehci_qh *qh) { - if (!atomic_dec_and_test (&qh->refcount)) - return; - /* clean qtds first, and know this is not linked */ - if (!list_empty (&qh->qtd_list) || qh->qh_next.ptr) { - ehci_dbg (ehci, "unused qh not empty!\n"); - BUG (); - } - if (qh->dummy) - ehci_qtd_free (ehci, qh->dummy); - usb_put_dev (qh->dev); - dma_pool_free (ehci->qh_pool, qh, qh->qh_dma); + kref_put(&qh->kref); } /*-------------------------------------------------------------------------*/ @@ -145,7 +152,7 @@ static void ehci_mem_cleanup (struct ehci_hcd *ehci) { if (ehci->async) - qh_put (ehci, ehci->async); + qh_put (ehci->async); ehci->async = 0; /* DMA consistent memory and pools */ diff -Nru a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c --- a/drivers/usb/host/ehci-q.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ehci-q.c Tue May 18 23:38:08 2004 @@ -193,7 +193,7 @@ /* ... update hc-wide periodic stats (for usbfs) */ hcd_to_bus (&ehci->hcd)->bandwidth_int_reqs--; } - qh_put (ehci, qh); + qh_put (qh); } spin_lock (&urb->lock); @@ -708,7 +708,7 @@ default: dbg ("bogus dev %p speed %d", urb->dev, urb->dev->speed); done: - qh_put (ehci, qh); + qh_put (qh); return 0; } @@ -951,7 +951,7 @@ // qh->hw_next = cpu_to_le32 (qh->qh_dma); qh->qh_state = QH_STATE_IDLE; qh->qh_next.qh = 0; - qh_put (ehci, qh); // refcount from reclaim + qh_put (qh); // refcount from reclaim /* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */ next = qh->reclaim; @@ -965,7 +965,7 @@ && HCD_IS_RUNNING (ehci->hcd.state)) qh_link_async (ehci, qh); else { - qh_put (ehci, qh); // refcount from async list + qh_put (qh); // refcount from async list /* it's not free to turn the async schedule on/off; leave it * active but idle for a while once it empties. @@ -1067,7 +1067,7 @@ qh = qh_get (qh); qh->stamp = ehci->stamp; temp = qh_completions (ehci, qh, regs); - qh_put (ehci, qh); + qh_put (qh); if (temp != 0) { goto rescan; } diff -Nru a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c --- a/drivers/usb/host/ehci-sched.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/host/ehci-sched.c Tue May 18 23:38:06 2004 @@ -312,7 +312,7 @@ do { periodic_unlink (ehci, frame, qh); - qh_put (ehci, qh); + qh_put (qh); frame += qh->period; } while (frame < ehci->periodic_size); @@ -355,7 +355,7 @@ dbg ("descheduled qh %p, period = %d frame = %d count = %d, urbs = %d", qh, qh->period, frame, - atomic_read (&qh->refcount), ehci->periodic_sched); + atomic_read (&qh->kref.refcount), ehci->periodic_sched); } static int check_period ( @@ -1846,7 +1846,7 @@ modified = qh_completions (ehci, temp.qh, regs); if (unlikely (list_empty (&temp.qh->qtd_list))) intr_deschedule (ehci, temp.qh, 0); - qh_put (ehci, temp.qh); + qh_put (temp.qh); break; case Q_TYPE_FSTN: /* for "save place" FSTNs, look at QH entries diff -Nru a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h --- a/drivers/usb/host/ehci.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ehci.h Tue May 18 23:38:08 2004 @@ -84,6 +84,8 @@ struct notifier_block reboot_notifier; unsigned long actions; unsigned stamp; + unsigned long next_statechange; + u32 command; unsigned is_arc_rh_tt:1; /* ARC roothub with TT */ @@ -99,8 +101,6 @@ /* unwrap an HCD pointer to get an EHCI_HCD pointer */ #define hcd_to_ehci(hcd_ptr) container_of(hcd_ptr, struct ehci_hcd, hcd) -/* NOTE: urb->transfer_flags expected to not use this bit !!! */ -#define EHCI_STATE_UNLINK 0x8000 /* urb being unlinked */ enum ehci_timer_action { TIMER_IO_WATCHDOG, @@ -221,7 +221,7 @@ u32 segment; /* address bits 63:32 if needed */ /* PERIODICLISTBASE: offset 0x14 */ u32 frame_list; /* points to periodic list */ - /* ASYNCICLISTADDR: offset 0x18 */ + /* ASYNCLISTADDR: offset 0x18 */ u32 async_next; /* address of next async queue head */ u32 reserved [9]; @@ -237,7 +237,10 @@ #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ #define PORT_WKCONN_E (1<<20) /* wake on connect (enable) */ /* 19:16 for port testing */ -/* 15:14 for using port indicator leds (if HCS_INDICATOR allows) */ +#define PORT_LED_OFF (0<<14) +#define PORT_LED_AMBER (1<<14) +#define PORT_LED_GREEN (2<<14) +#define PORT_LED_MASK (3<<14) #define PORT_OWNER (1<<13) /* true: companion hc owns this port */ #define PORT_POWER (1<<12) /* true: has power (see PPC) */ #define PORT_USB11(x) (((x)&(3<<10))==(1<<10)) /* USB 1.1 device */ @@ -366,7 +369,8 @@ struct ehci_qtd *dummy; struct ehci_qh *reclaim; /* next to reclaim */ - atomic_t refcount; + struct ehci_hcd *ehci; + struct kref kref; unsigned stamp; u8 qh_state; diff -Nru a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c --- a/drivers/usb/host/ohci-dbg.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/ohci-dbg.c Tue May 18 23:38:09 2004 @@ -617,7 +617,17 @@ /* dump driver info, then registers in spec order */ ohci_dbg_sw (ohci, &next, &size, - "%s version " DRIVER_VERSION "\n", hcd_name); + "bus %s, device %s\n" + "%s version " DRIVER_VERSION "\n", + hcd->self.controller->bus->name, + hcd->self.controller->bus_id, + hcd_name); + + if (bus->controller->power.power_state) { + size -= scnprintf (next, size, + "SUSPENDED (no register access)\n"); + goto done; + } ohci_dump_status(ohci, &next, &size); @@ -657,8 +667,8 @@ /* roothub */ ohci_dump_roothub (ohci, 1, &next, &size); +done: spin_unlock_irqrestore (&ohci->lock, flags); - return PAGE_SIZE - size; } static CLASS_DEVICE_ATTR (registers, S_IRUGO, show_registers, NULL); diff -Nru a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c --- a/drivers/usb/host/ohci-hcd.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/host/ohci-hcd.c Tue May 18 23:38:05 2004 @@ -117,8 +117,8 @@ /* For initializing controller (mask in an HCFS mode too) */ #define OHCI_CONTROL_INIT OHCI_CTRL_CBSR - -#define OHCI_UNLINK_TIMEOUT (HZ / 10) +#define OHCI_INTR_INIT \ + (OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_RD | OHCI_INTR_WDH) /*-------------------------------------------------------------------------*/ @@ -126,11 +126,6 @@ #include "ohci.h" -static inline void disable (struct ohci_hcd *ohci) -{ - ohci->hcd.state = USB_STATE_HALT; -} - #include "ohci-hub.c" #include "ohci-dbg.c" #include "ohci-mem.c" @@ -206,8 +201,7 @@ if (!urb_priv) return -ENOMEM; memset (urb_priv, 0, sizeof (urb_priv_t) + size * sizeof (struct td *)); - - /* fill the private part of the URB */ + INIT_LIST_HEAD (&urb_priv->pending); urb_priv->length = size; urb_priv->ed = ed; @@ -397,6 +391,16 @@ { u32 temp; + /* boot firmware should have set this up (5.1.1.3.1) */ + if (!ohci->fminterval) { + temp = readl (&ohci->regs->fminterval); + if (temp & 0x3fff0000) + ohci->fminterval = temp; + else + ohci->fminterval = DEFAULT_FMINTERVAL; + /* also: power/overcurrent flags in roothub.a */ + } + /* SMM owns the HC? not for long! * On PA-RISC, PDC can leave IR set incorrectly; ignore it there. */ @@ -413,7 +417,7 @@ writel (OHCI_INTR_OC, &ohci->regs->intrenable); writel (OHCI_OCR, &ohci->regs->cmdstatus); while (readl (&ohci->regs->control) & OHCI_CTRL_IR) { - wait_ms (10); + msleep (10); if (--temp == 0) { ohci_err (ohci, "USB HC TakeOver failed!\n"); return -1; @@ -430,9 +434,12 @@ /* Reset USB (needed by some controllers); RemoteWakeupConnected * saved if boot firmware (BIOS/SMM/...) told us it's connected + * (for OHCI integrated on mainboard, it normally is) */ ohci->hc_control = readl (&ohci->regs->control); ohci->hc_control &= OHCI_CTRL_RWC; /* hcfs 0 = RESET */ + if (ohci->hc_control) + ohci->hcd.can_wakeup = 1; writel (ohci->hc_control, &ohci->regs->control); if (power_switching) { unsigned ports = roothub_a (ohci) & RH_A_NDP; @@ -444,7 +451,7 @@ } // flush those pci writes (void) readl (&ohci->regs->control); - wait_ms (50); + msleep (50); /* HC Reset requires max 10 us delay */ writel (OHCI_HCR, &ohci->regs->cmdstatus); @@ -473,9 +480,6 @@ /*-------------------------------------------------------------------------*/ -#define FI 0x2edf /* 12000 bits per frame (-1) */ -#define LSTHRESH 0x628 /* lowspeed bit threshold */ - /* Start an OHCI controller, set the BUS operational * enable interrupts * connect the virtual root hub @@ -486,7 +490,6 @@ struct usb_device *udev; struct usb_bus *bus; - spin_lock_init (&ohci->lock); disable (ohci); /* Tell the controller where the control and bulk lists are @@ -497,12 +500,7 @@ /* a reset clears this */ writel ((u32) ohci->hcca_dma, &ohci->regs->hcca); - /* force default fmInterval (we won't adjust it); init thresholds - * for last FS and LS packets, reserve 90% for periodic. - */ - writel ((((6 * (FI - 210)) / 7) << 16) | FI, &ohci->regs->fminterval); - writel (((9 * FI) / 10) & 0x3fff, &ohci->regs->periodicstart); - writel (LSTHRESH, &ohci->regs->lsthresh); + periodic_reinit (ohci); /* some OHCI implementations are finicky about how they init. * bogus values here mean not even enumeration could work. @@ -519,8 +517,11 @@ writel (ohci->hc_control, &ohci->regs->control); ohci->hcd.state = USB_STATE_RUNNING; + /* wake on ConnectStatusChange, matching external hubs */ + writel (RH_HS_DRWE, &ohci->regs->roothub.status); + /* Choose the interrupts we care about now, others later on demand */ - mask = OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_WDH; + mask = OHCI_INTR_INIT; writel (mask, &ohci->regs->intrstatus); writel (mask, &ohci->regs->intrenable); @@ -551,9 +552,14 @@ // POTPGT delay is bits 24-31, in 2 ms units. mdelay ((roothub_a (ohci) >> 23) & 0x1fe); + bus = hcd_to_bus (&ohci->hcd); + + if (bus->root_hub) { + ohci->hcd.state = USB_STATE_RUNNING; + return 0; + } /* connect the virtual root hub */ - bus = hcd_to_bus (&ohci->hcd); bus->root_hub = udev = usb_alloc_dev (NULL, bus, 0); ohci->hcd.state = USB_STATE_RUNNING; if (!udev) { @@ -610,11 +616,18 @@ ohci_dump (ohci, 1); hc_reset (ohci); } - + + if (ints & OHCI_INTR_RD) { + ohci_vdbg (ohci, "resume detect\n"); + schedule_work(&ohci->rh_resume); + } + if (ints & OHCI_INTR_WDH) { if (HCD_IS_RUNNING(hcd->state)) writel (OHCI_INTR_WDH, ®s->intrdisable); - dl_done_list (ohci, dl_reverse_done_list (ohci), ptregs); + spin_lock (&ohci->lock); + dl_done_list (ohci, ptregs); + spin_unlock (&ohci->lock); if (HCD_IS_RUNNING(hcd->state)) writel (OHCI_INTR_WDH, ®s->intrenable); } @@ -654,6 +667,7 @@ ohci->hcd.state); ohci_dump (ohci, 1); + flush_scheduled_work(); if (HCD_IS_RUNNING(ohci->hcd.state)) hc_reset (ohci); @@ -670,22 +684,68 @@ /*-------------------------------------------------------------------------*/ -// FIXME: this restart logic should be generic, -// and handle full hcd state cleanup - -/* controller died; cleanup debris, then restart */ /* must not be called from interrupt context */ #ifdef CONFIG_PM + +static void mark_children_gone (struct usb_device *dev) +{ + unsigned i; + + for (i = 0; i < dev->maxchild; i++) { + if (dev->children [i] == 0) + continue; + dev->children [i]->state = USB_STATE_NOTATTACHED; + mark_children_gone (dev->children [i]); + } +} + static int hc_restart (struct ohci_hcd *ohci) { int temp; int i; + struct urb_priv *priv; + /* mark any devices gone, so they do nothing till khubd disconnects. + * recycle any "live" eds/tds (and urbs) right away. + * later, khubd disconnect processing will recycle the other state, + * (either as disconnect/reconnect, or maybe someday as a reset). + */ + spin_lock_irq(&ohci->lock); disable (ohci); - if (hcd_to_bus (&ohci->hcd)->root_hub) - usb_disconnect (&hcd_to_bus (&ohci->hcd)->root_hub); - + mark_children_gone (ohci->hcd.self.root_hub); + if (!list_empty (&ohci->pending)) + ohci_dbg(ohci, "abort schedule...\n"); + list_for_each_entry (priv, &ohci->pending, pending) { + struct urb *urb = priv->td[0]->urb; + struct ed *ed = priv->ed; + + switch (ed->state) { + case ED_OPER: + ed->state = ED_UNLINK; + ed->hwINFO |= ED_DEQUEUE; + ed_deschedule (ohci, ed); + + ed->ed_next = ohci->ed_rm_list; + ed->ed_prev = 0; + ohci->ed_rm_list = ed; + /* FALLTHROUGH */ + case ED_UNLINK: + break; + default: + ohci_dbg(ohci, "bogus ed %p state %d\n", + ed, ed->state); + } + + spin_lock (&urb->lock); + urb->status = -ESHUTDOWN; + spin_unlock (&urb->lock); + } + finish_unlinks (ohci, 0, 0); + spin_unlock_irq(&ohci->lock); + + /* paranoia, in case that didn't work: */ + /* empty the interrupt branches */ for (i = 0; i < NUM_INTS; i++) ohci->load [i] = 0; for (i = 0; i < NUM_INTS; i++) ohci->hcca->int_table [i] = 0; @@ -700,8 +760,20 @@ if ((temp = hc_reset (ohci)) < 0 || (temp = hc_start (ohci)) < 0) { ohci_err (ohci, "can't restart, %d\n", temp); return temp; - } else + } else { + /* here we "know" root ports should always stay powered, + * and that if we try to turn them back on the root hub + * will respond to CSC processing. + */ + i = roothub_a (ohci) & RH_A_NDP; + while (i--) + writel (RH_PS_PSS, + &ohci->regs->roothub.portstatus [temp]); + ohci->hcd.self.root_hub->dev.power.power_state = 0; + ohci->hcd.state = USB_STATE_RUNNING; ohci_dbg (ohci, "restart complete\n"); + ohci_dump (ohci, 1); + } return 0; } #endif diff -Nru a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c --- a/drivers/usb/host/ohci-hub.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/host/ohci-hub.c Tue May 18 23:38:05 2004 @@ -60,6 +60,261 @@ (temp & RH_PS_CCS) ? " CCS" : "" \ ); +/*-------------------------------------------------------------------------*/ + +#if defined(CONFIG_USB_SUSPEND) || defined(CONFIG_PM) + +#define OHCI_SCHED_ENABLES \ + (OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_PLE|OHCI_CTRL_IE) + +static void dl_done_list (struct ohci_hcd *, struct pt_regs *); +static void finish_unlinks (struct ohci_hcd *, u16 , struct pt_regs *); + +static int ohci_hub_suspend (struct usb_hcd *hcd) +{ + struct ohci_hcd *ohci = hcd_to_ohci (hcd); + struct usb_device *root = hcd_to_bus (&ohci->hcd)->root_hub; + int status = 0; + + if (root->dev.power.power_state != 0) + return 0; + if (time_before (jiffies, ohci->next_statechange)) + return -EAGAIN; + + spin_lock_irq (&ohci->lock); + + ohci->hc_control = readl (&ohci->regs->control); + switch (ohci->hc_control & OHCI_CTRL_HCFS) { + case OHCI_USB_RESUME: + ohci_dbg (ohci, "resume/suspend?\n"); + ohci->hc_control &= ~OHCI_CTRL_HCFS; + ohci->hc_control |= OHCI_USB_RESET; + writel (ohci->hc_control, &ohci->regs->control); + (void) readl (&ohci->regs->control); + /* FALL THROUGH */ + case OHCI_USB_RESET: + status = -EBUSY; + ohci_dbg (ohci, "needs reinit!\n"); + goto done; + case OHCI_USB_SUSPEND: + ohci_dbg (ohci, "already suspended?\n"); + goto succeed; + } + ohci_dbg (ohci, "suspend root hub\n"); + + /* First stop any processing */ + ohci->hcd.state = USB_STATE_QUIESCING; + if (ohci->hc_control & OHCI_SCHED_ENABLES) { + int limit; + + ohci->hc_control &= ~OHCI_SCHED_ENABLES; + writel (ohci->hc_control, &ohci->regs->control); + ohci->hc_control = readl (&ohci->regs->control); + writel (OHCI_INTR_SF, &ohci->regs->intrstatus); + + /* sched disables take effect on the next frame, + * then the last WDH could take 6+ msec + */ + ohci_dbg (ohci, "stopping schedules ...\n"); + limit = 2000; + while (limit > 0) { + udelay (250); + limit =- 250; + if (readl (&ohci->regs->intrstatus) & OHCI_INTR_SF) + break; + } + dl_done_list (ohci, 0); + mdelay (7); + } + dl_done_list (ohci, 0); + finish_unlinks (ohci, OHCI_FRAME_NO(ohci->hcca), 0); + writel (readl (&ohci->regs->intrstatus), &ohci->regs->intrstatus); + + /* maybe resume can wake root hub */ + if (ohci->hcd.remote_wakeup) + ohci->hc_control |= OHCI_CTRL_RWE; + else + ohci->hc_control &= ~OHCI_CTRL_RWE; + + /* Suspend hub */ + ohci->hc_control &= ~OHCI_CTRL_HCFS; + ohci->hc_control |= OHCI_USB_SUSPEND; + writel (ohci->hc_control, &ohci->regs->control); + (void) readl (&ohci->regs->control); + + /* no resumes until devices finish suspending */ + ohci->next_statechange = jiffies + msecs_to_jiffies (5); + +succeed: + /* it's not USB_STATE_SUSPENDED unless access to this + * hub from the non-usb side (PCI, SOC, etc) stopped + */ + root->dev.power.power_state = 3; +done: + spin_unlock_irq (&ohci->lock); + return status; +} + +static inline struct ed *find_head (struct ed *ed) +{ + /* for bulk and control lists */ + while (ed->ed_prev) + ed = ed->ed_prev; + return ed; +} + +static int hc_restart (struct ohci_hcd *ohci); + +/* caller owns root->serialize */ +static int ohci_hub_resume (struct usb_hcd *hcd) +{ + struct ohci_hcd *ohci = hcd_to_ohci (hcd); + struct usb_device *root = hcd_to_bus (&ohci->hcd)->root_hub; + u32 temp, enables; + int status = -EINPROGRESS; + + if (!root->dev.power.power_state) + return 0; + if (time_before (jiffies, ohci->next_statechange)) + return -EAGAIN; + + spin_lock_irq (&ohci->lock); + ohci->hc_control = readl (&ohci->regs->control); + switch (ohci->hc_control & OHCI_CTRL_HCFS) { + case OHCI_USB_SUSPEND: + ohci->hc_control &= ~(OHCI_CTRL_HCFS|OHCI_SCHED_ENABLES); + ohci->hc_control |= OHCI_USB_RESUME; + writel (ohci->hc_control, &ohci->regs->control); + (void) readl (&ohci->regs->control); + ohci_dbg (ohci, "resume root hub\n"); + break; + case OHCI_USB_RESUME: + /* HCFS changes sometime after INTR_RD */ + ohci_info (ohci, "remote wakeup\n"); + break; + case OHCI_USB_OPER: + ohci_dbg (ohci, "odd resume\n"); + root->dev.power.power_state = 0; + status = 0; + break; + default: /* RESET, we lost power */ + ohci_dbg (ohci, "root hub hardware reset\n"); + status = -EBUSY; + } + spin_unlock_irq (&ohci->lock); + if (status == -EBUSY) + return hc_restart (ohci); + if (status != -EINPROGRESS) + return status; + + temp = roothub_a (ohci) & RH_A_NDP; + enables = 0; + while (temp--) { + u32 stat = readl (&ohci->regs->roothub.portstatus [temp]); + + /* force global, not selective, resume */ + if (!(stat & RH_PS_PSS)) + continue; + writel (RH_PS_POCI, &ohci->regs->roothub.portstatus [temp]); + } + + /* Some controllers (lucent) need extra-long delays */ + ohci->hcd.state = USB_STATE_RESUMING; + mdelay (20 /* usb 11.5.1.10 */ + 15); + + temp = readl (&ohci->regs->control); + temp &= OHCI_CTRL_HCFS; + if (temp != OHCI_USB_RESUME) { + ohci_err (ohci, "controller won't resume\n"); + return -EBUSY; + } + + /* disable old schedule state, reinit from scratch */ + writel (0, &ohci->regs->ed_controlhead); + writel (0, &ohci->regs->ed_controlcurrent); + writel (0, &ohci->regs->ed_bulkhead); + writel (0, &ohci->regs->ed_bulkcurrent); + writel (0, &ohci->regs->ed_periodcurrent); + writel ((u32) ohci->hcca_dma, &ohci->regs->hcca); + + periodic_reinit (ohci); + + /* interrupts might have been disabled */ + writel (OHCI_INTR_INIT, &ohci->regs->intrenable); + if (ohci->ed_rm_list) + writel (OHCI_INTR_SF, &ohci->regs->intrenable); + writel (readl (&ohci->regs->intrstatus), &ohci->regs->intrstatus); + + /* Then re-enable operations */ + writel (OHCI_USB_OPER, &ohci->regs->control); + (void) readl (&ohci->regs->control); + msleep (3); + + temp = OHCI_CONTROL_INIT | OHCI_USB_OPER; + if (ohci->hcd.can_wakeup) + temp |= OHCI_CTRL_RWC; + ohci->hc_control = temp; + writel (temp, &ohci->regs->control); + (void) readl (&ohci->regs->control); + + /* TRSMRCY */ + msleep (10); + root->dev.power.power_state = 0; + + /* keep it alive for ~5x suspend + resume costs */ + ohci->next_statechange = jiffies + msecs_to_jiffies (250); + + /* maybe turn schedules back on */ + enables = 0; + temp = 0; + if (!ohci->ed_rm_list) { + if (ohci->ed_controltail) { + writel (find_head (ohci->ed_controltail)->dma, + &ohci->regs->ed_controlhead); + enables |= OHCI_CTRL_CLE; + temp |= OHCI_CLF; + } + if (ohci->ed_bulktail) { + writel (find_head (ohci->ed_bulktail)->dma, + &ohci->regs->ed_bulkhead); + enables |= OHCI_CTRL_BLE; + temp |= OHCI_BLF; + } + } + if (hcd_to_bus (&ohci->hcd)->bandwidth_isoc_reqs + || hcd_to_bus (&ohci->hcd)->bandwidth_int_reqs) + enables |= OHCI_CTRL_PLE|OHCI_CTRL_IE; + if (enables) { + ohci_dbg (ohci, "restarting schedules ... %08x\n", enables); + ohci->hc_control |= enables; + writel (ohci->hc_control, &ohci->regs->control); + if (temp) + writel (status, &ohci->regs->cmdstatus); + (void) readl (&ohci->regs->control); + } + + ohci->hcd.state = USB_STATE_RUNNING; + return 0; +} + +static void ohci_rh_resume (void *_hcd) +{ + struct usb_hcd *hcd = _hcd; + + down (&hcd->self.root_hub->serialize); + (void) ohci_hub_resume (hcd); + up (&hcd->self.root_hub->serialize); +} + +#else + +static void ohci_rh_resume (void *_hcd) +{ + struct ohci_hcd *ohci = hcd_to_ohci (_hcd); + ohci_dbg(ohci, "rh_resume ??\n"); +} + +#endif /* CONFIG_USB_SUSPEND || CONFIG_PM */ /*-------------------------------------------------------------------------*/ @@ -70,6 +325,7 @@ { struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ports, i, changed = 0, length = 1; + int can_suspend = 1; ports = roothub_a (ohci) & RH_A_NDP; if (ports > MAX_ROOT_PORTS) { @@ -95,16 +351,45 @@ for (i = 0; i < ports; i++) { u32 status = roothub_portstatus (ohci, i); - status &= RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC - | RH_PS_OCIC | RH_PS_PRSC; - if (status) { + if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC + | RH_PS_OCIC | RH_PS_PRSC)) { changed = 1; if (i < 7) buf [0] |= 1 << (i + 1); else buf [1] |= 1 << (i - 7); + continue; } + + /* can suspend if no ports are enabled; or if all all + * enabled ports are suspended AND remote wakeup is on. + */ + if (!(status & RH_PS_CCS)) + continue; + if ((status & RH_PS_PSS) && ohci->hcd.remote_wakeup) + continue; + can_suspend = 0; } + +#ifdef CONFIG_PM + /* save power by suspending idle root hubs; + * INTR_RD wakes us when there's work + */ + if (can_suspend + && !changed + && !ohci->ed_rm_list + && ((OHCI_CTRL_HCFS | OHCI_SCHED_ENABLES) + & ohci->hc_control) + == OHCI_USB_OPER + && down_trylock (&hcd->self.root_hub->serialize) == 0 + ) { + ohci_vdbg (ohci, "autosuspend\n"); + (void) ohci_hub_suspend (&ohci->hcd); + ohci->hcd.state = USB_STATE_RUNNING; + up (&hcd->self.root_hub->serialize); + } +#endif + return changed ? length : 0; } @@ -188,6 +473,9 @@ break; case USB_PORT_FEAT_SUSPEND: temp = RH_PS_POCI; + if ((ohci->hc_control & OHCI_CTRL_HCFS) + != OHCI_USB_OPER) + schedule_work (&ohci->rh_resume); break; case USB_PORT_FEAT_C_SUSPEND: temp = RH_PS_PSSC; diff -Nru a/drivers/usb/host/ohci-mem.c b/drivers/usb/host/ohci-mem.c --- a/drivers/usb/host/ohci-mem.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ohci-mem.c Tue May 18 23:38:08 2004 @@ -31,6 +31,9 @@ if (ohci != 0) { memset (ohci, 0, sizeof (struct ohci_hcd)); ohci->hcd.product_desc = "OHCI Host Controller"; + spin_lock_init (&ohci->lock); + INIT_LIST_HEAD (&ohci->pending); + INIT_WORK (&ohci->rh_resume, ohci_rh_resume, &ohci->hcd); return &ohci->hcd; } return 0; diff -Nru a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c --- a/drivers/usb/host/ohci-pci.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/ohci-pci.c Tue May 18 23:38:08 2004 @@ -36,6 +36,7 @@ struct ohci_hcd *ohci = hcd_to_ohci (hcd); ohci->regs = hcd->regs; + ohci->next_statechange = jiffies; return hc_reset (ohci); } @@ -118,74 +119,26 @@ static int ohci_pci_suspend (struct usb_hcd *hcd, u32 state) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); - u16 cmd; - u32 tmp; - if ((ohci->hc_control & OHCI_CTRL_HCFS) != OHCI_USB_OPER) { - ohci_dbg (ohci, "can't suspend (state is %s)\n", - hcfs2string (ohci->hc_control & OHCI_CTRL_HCFS)); - return -EIO; - } + /* suspend root hub, hoping it keeps power during suspend */ + while (time_before (jiffies, ohci->next_statechange)) + msleep (100); + +#ifdef CONFIG_USB_SUSPEND + (void) usb_suspend_device (hcd->self.root_hub); +#else + down (&hcd->self.root_hub->serialize); + (void) ohci_hub_suspend (hcd); + up (&hcd->self.root_hub->serialize); +#endif - /* act as if usb suspend can always be used */ - ohci_dbg (ohci, "suspend to %d\n", state); + /* let things settle down a bit */ + msleep (100); - /* First stop processing */ - spin_lock_irq (&ohci->lock); - ohci->hc_control &= - ~(OHCI_CTRL_PLE|OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_IE); - writel (ohci->hc_control, &ohci->regs->control); - writel (OHCI_INTR_SF, &ohci->regs->intrstatus); - (void) readl (&ohci->regs->intrstatus); - spin_unlock_irq (&ohci->lock); - - /* Wait a frame or two */ - mdelay (1); - if (!readl (&ohci->regs->intrstatus) & OHCI_INTR_SF) - mdelay (1); - #ifdef CONFIG_PMAC_PBOOK if (_machine == _MACH_Pmac) disable_irq ((to_pci_dev(hcd->self.controller))->irq); - /* else, 2.4 assumes shared irqs -- don't disable */ -#endif - - /* Enable remote wakeup */ - writel (readl (&ohci->regs->intrenable) | OHCI_INTR_RD, - &ohci->regs->intrenable); - - /* Suspend chip and let things settle down a bit */ - spin_lock_irq (&ohci->lock); - ohci->hc_control = OHCI_USB_SUSPEND; - writel (ohci->hc_control, &ohci->regs->control); - (void) readl (&ohci->regs->control); - spin_unlock_irq (&ohci->lock); - - set_current_state (TASK_UNINTERRUPTIBLE); - schedule_timeout (HZ/2); - - tmp = readl (&ohci->regs->control) | OHCI_CTRL_HCFS; - switch (tmp) { - case OHCI_USB_RESET: - case OHCI_USB_RESUME: - case OHCI_USB_OPER: - ohci_err (ohci, "can't suspend; hcfs %d\n", tmp); - break; - case OHCI_USB_SUSPEND: - ohci_dbg (ohci, "suspended\n"); - break; - } - /* In some rare situations, Apple's OHCI have happily trashed - * memory during sleep. We disable its bus master bit during - * suspend - */ - pci_read_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, - &cmd); - cmd &= ~PCI_COMMAND_MASTER; - pci_write_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, - cmd); -#ifdef CONFIG_PMAC_PBOOK { struct device_node *of_node; @@ -202,7 +155,6 @@ static int ohci_pci_resume (struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); - int temp; int retval = 0; #ifdef CONFIG_PMAC_PBOOK @@ -215,90 +167,25 @@ pmac_call_feature (PMAC_FTR_USB_ENABLE, of_node, 0, 1); } #endif - /* did we suspend, or were we powered off? */ - ohci->hc_control = readl (&ohci->regs->control); - temp = ohci->hc_control & OHCI_CTRL_HCFS; - -#ifdef DEBUG - /* the registers may look crazy here */ - ohci_dump_status (ohci, 0, 0); -#endif - /* Re-enable bus mastering */ - pci_set_master (to_pci_dev(ohci->hcd.self.controller)); - - switch (temp) { - - case OHCI_USB_RESET: // lost power -restart: - ohci_info (ohci, "USB restart\n"); - retval = hc_restart (ohci); - break; - - case OHCI_USB_SUSPEND: // host wakeup - case OHCI_USB_RESUME: // remote wakeup - ohci_info (ohci, "USB continue from %s wakeup\n", - (temp == OHCI_USB_SUSPEND) - ? "host" : "remote"); - - /* we "should" only need RESUME if we're SUSPENDed ... */ - ohci->hc_control = OHCI_USB_RESUME; - writel (ohci->hc_control, &ohci->regs->control); - (void) readl (&ohci->regs->control); - /* Some controllers (lucent) need extra-long delays */ - mdelay (35); /* no schedule here ! */ - - temp = readl (&ohci->regs->control); - temp = ohci->hc_control & OHCI_CTRL_HCFS; - if (temp != OHCI_USB_RESUME) { - ohci_err (ohci, "controller won't resume\n"); - /* maybe we can reset */ - goto restart; - } - - /* Then re-enable operations */ - writel (OHCI_USB_OPER, &ohci->regs->control); - (void) readl (&ohci->regs->control); - mdelay (3); - - spin_lock_irq (&ohci->lock); - ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER; - if (!ohci->ed_rm_list) { - if (ohci->ed_controltail) - ohci->hc_control |= OHCI_CTRL_CLE; - if (ohci->ed_bulktail) - ohci->hc_control |= OHCI_CTRL_BLE; - } - if (hcd_to_bus (&ohci->hcd)->bandwidth_isoc_reqs - || hcd_to_bus (&ohci->hcd)->bandwidth_int_reqs) - ohci->hc_control |= OHCI_CTRL_PLE|OHCI_CTRL_IE; - hcd->state = USB_STATE_RUNNING; - writel (ohci->hc_control, &ohci->regs->control); - - /* trigger a start-frame interrupt (why?) */ - writel (OHCI_INTR_SF, &ohci->regs->intrstatus); - writel (OHCI_INTR_SF, &ohci->regs->intrenable); - - writel (OHCI_INTR_WDH, &ohci->regs->intrdisable); - (void) readl (&ohci->regs->intrdisable); - spin_unlock_irq (&ohci->lock); + /* resume root hub */ + while (time_before (jiffies, ohci->next_statechange)) + msleep (100); +#ifdef CONFIG_USB_SUSPEND + /* get extra cleanup even if remote wakeup isn't in use */ + retval = usb_resume_device (hcd->self.root_hub); +#else + down (&hcd->self.root_hub->serialize); + retval = ohci_hub_resume (hcd); + up (&hcd->self.root_hub->serialize); +#endif + if (retval == 0) { + hcd->self.controller->power.power_state = 0; #ifdef CONFIG_PMAC_PBOOK if (_machine == _MACH_Pmac) enable_irq (to_pci_dev(hcd->self.controller)->irq); #endif - - /* Check for a pending done list */ - if (ohci->hcca->done_head) - dl_done_list (ohci, dl_reverse_done_list (ohci), NULL); - writel (OHCI_INTR_WDH, &ohci->regs->intrenable); - - /* assume there are TDs on the bulk and control lists */ - writel (OHCI_BLF | OHCI_CLF, &ohci->regs->cmdstatus); - break; - - default: - ohci_warn (ohci, "odd PCI resume\n"); } return retval; } diff -Nru a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c --- a/drivers/usb/host/ohci-q.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/ohci-q.c Tue May 18 23:38:09 2004 @@ -22,6 +22,7 @@ } } + list_del (&urb_priv->pending); kfree (urb_priv); } @@ -169,6 +170,9 @@ { int branch; + if (ohci->hcd.state == USB_STATE_QUIESCING) + return -EAGAIN; + ed->state = ED_OPER; ed->ed_prev = 0; ed->ed_next = 0; @@ -419,7 +423,7 @@ } /* NOTE: only ep0 currently needs this "re"init logic, during - * enumeration (after set_address, or if ep0 maxpacket >8). + * enumeration (after set_address). */ if (ed->state == ED_IDLE) { u32 info; @@ -593,6 +597,7 @@ } urb_priv->td_cnt = 0; + list_add (&urb_priv->pending, &ohci->pending); if (data_len) data = urb->transfer_dma; @@ -865,9 +870,6 @@ u32 td_dma; struct td *td_rev = NULL; struct td *td = NULL; - unsigned long flags; - - spin_lock_irqsave (&ohci->lock, flags); td_dma = le32_to_cpup (&ohci->hcca->done_head); ohci->hcca->done_head = 0; @@ -899,7 +901,6 @@ td_rev = td; td_dma = le32_to_cpup (&td->hwNextTD); } - spin_unlock_irqrestore (&ohci->lock, flags); return td_rev; } @@ -1013,7 +1014,9 @@ } /* maybe reenable control and bulk lists */ - if (HCD_IS_RUNNING(ohci->hcd.state) && !ohci->ed_rm_list) { + if (HCD_IS_RUNNING(ohci->hcd.state) + && ohci->hcd.state != USB_STATE_QUIESCING + && !ohci->ed_rm_list) { u32 command = 0, control = 0; if (ohci->ed_controltail) { @@ -1053,11 +1056,10 @@ * scanning the (re-reversed) donelist as this does. */ static void -dl_done_list (struct ohci_hcd *ohci, struct td *td, struct pt_regs *regs) +dl_done_list (struct ohci_hcd *ohci, struct pt_regs *regs) { - unsigned long flags; + struct td *td = dl_reverse_done_list (ohci); - spin_lock_irqsave (&ohci->lock, flags); while (td) { struct td *td_next = td->next_dl_td; struct urb *urb = td->urb; @@ -1098,5 +1100,4 @@ td = td_next; } - spin_unlock_irqrestore (&ohci->lock, flags); } diff -Nru a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h --- a/drivers/usb/host/ohci.h Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/ohci.h Tue May 18 23:38:09 2004 @@ -318,8 +318,9 @@ /* hcd-private per-urb state */ typedef struct urb_priv { struct ed *ed; - __u16 length; // # tds in this request - __u16 td_cnt; // tds already serviced + u16 length; // # tds in this request + u16 td_cnt; // tds already serviced + struct list_head pending; struct td *td [0]; // all TDs in this request } urb_priv_t; @@ -364,12 +365,17 @@ struct dma_pool *td_cache; struct dma_pool *ed_cache; struct td *td_hash [TD_HASH_SIZE]; + struct list_head pending; /* * driver state */ int load [NUM_INTS]; u32 hc_control; /* copy of hc control reg */ + unsigned long next_statechange; /* suspend/resume */ + u32 fminterval; /* saved register */ + + struct work_struct rh_resume; unsigned long flags; /* for HC bugs */ #define OHCI_QUIRK_AMD756 0x01 /* erratum #4 */ @@ -383,6 +389,24 @@ }; #define hcd_to_ohci(hcd_ptr) container_of(hcd_ptr, struct ohci_hcd, hcd) + +/*-------------------------------------------------------------------------*/ + +static inline void disable (struct ohci_hcd *ohci) +{ + ohci->hcd.state = USB_STATE_HALT; +} + +#define FI 0x2edf /* 12000 bits per frame (-1) */ +#define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI) +#define LSTHRESH 0x628 /* lowspeed bit threshold */ + +static inline void periodic_reinit (struct ohci_hcd *ohci) +{ + writel (ohci->fminterval, &ohci->regs->fminterval); + writel (((9 * FI) / 10) & 0x3fff, &ohci->regs->periodicstart); + writel (LSTHRESH, &ohci->regs->lsthresh); +} /*-------------------------------------------------------------------------*/ diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c --- a/drivers/usb/host/uhci-hcd.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/host/uhci-hcd.c Tue May 18 23:38:09 2004 @@ -157,8 +157,8 @@ return td; } -static inline void uhci_fill_td(struct uhci_td *td, __u32 status, - __u32 token, __u32 buffer) +static inline void uhci_fill_td(struct uhci_td *td, u32 status, + u32 token, u32 buffer) { td->status = cpu_to_le32(status); td->token = cpu_to_le32(token); @@ -184,11 +184,11 @@ list_add_tail(&td->fl_list, &ftd->fl_list); td->link = ltd->link; - mb(); + wmb(); ltd->link = cpu_to_le32(td->dma_handle); } else { td->link = uhci->fl->frame[framenum]; - mb(); + wmb(); uhci->fl->frame[framenum] = cpu_to_le32(td->dma_handle); uhci->fl->frame_cpu[framenum] = td; } @@ -218,7 +218,7 @@ ptd->link = td->link; } - mb(); + wmb(); td->link = UHCI_PTR_TERM; list_del_init(&td->fl_list); @@ -332,17 +332,7 @@ /* Grab the last QH */ lqh = list_entry(skelqh->list.prev, struct uhci_qh, list); - /* - * Patch this endpoint's URB's QHs to point to the next skelqh: - * skelqh --> ... lqh --> newqh --> next skelqh - * Do this first, so the HC always sees the right QH after this one. - */ - list_for_each (tmp, &urbp->queue_list) { - struct urb_priv *turbp = - list_entry(tmp, struct urb_priv, queue_list); - - turbp->qh->link = lqh->link; - } + /* Point to the next skelqh */ urbp->qh->link = lqh->link; wmb(); /* Ordering is important */ @@ -362,15 +352,15 @@ * * The HC could see (and use!) any of these as we write them. */ + lqh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH; if (lqh->urbp) { list_for_each (tmp, &lqh->urbp->queue_list) { struct urb_priv *turbp = list_entry(tmp, struct urb_priv, queue_list); - turbp->qh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH; + turbp->qh->link = lqh->link; } } - lqh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH; list_add_tail(&urbp->qh->list, &skelqh->list); } @@ -382,7 +372,7 @@ static void uhci_remove_qh(struct uhci_hcd *uhci, struct uhci_qh *qh) { struct uhci_qh *pqh; - __u32 newlink; + u32 newlink; if (!qh) return; @@ -423,7 +413,7 @@ turbp->qh->link = newlink; } } - mb(); + wmb(); /* Leave qh->link in case the HC is on the QH now, it will */ /* continue the rest of the schedule */ @@ -510,7 +500,7 @@ /* All qh's in the queue need to link to the next queue */ urbp->qh->link = eurbp->qh->link; - mb(); /* Make sure we flush everything */ + wmb(); /* Make sure we flush everything */ lltd->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH; @@ -1044,9 +1034,13 @@ usb_pipeout(urb->pipe)); } - /* Set the flag on the last packet */ - if (!(urb->transfer_flags & URB_NO_INTERRUPT)) - td->status |= cpu_to_le32(TD_CTRL_IOC); + /* Set the interrupt-on-completion flag on the last packet. + * A more-or-less typical 4 KB URB (= size of one memory page) + * will require about 3 ms to transfer; that's a little on the + * fast side but not enough to justify delaying an interrupt + * more than 2 or 3 URBs, so we will ignore the URB_NO_INTERRUPT + * flag setting. */ + td->status |= cpu_to_le32(TD_CTRL_IOC); qh = uhci_alloc_qh(uhci, urb->dev); if (!qh) @@ -1786,6 +1780,9 @@ spin_unlock(&uhci->schedule_lock); + /* Wake up anyone waiting for an URB to complete */ + wake_up_all(&uhci->waitqh); + return IRQ_HANDLED; } @@ -2086,6 +2083,8 @@ INIT_LIST_HEAD(&uhci->complete_list); + init_waitqueue_head(&uhci->waitqh); + uhci->fl = dma_alloc_coherent(uhci_dev(uhci), sizeof(*uhci->fl), &dma_handle, 0); if (!uhci->fl) { @@ -2296,6 +2295,9 @@ uhci_free_pending_qhs(uhci); uhci_free_pending_tds(uhci); spin_unlock_irq(&uhci->schedule_lock); + + /* Wake up anyone waiting for an URB to complete */ + wake_up_all(&uhci->waitqh); release_uhci(uhci); } @@ -2361,6 +2363,46 @@ kfree(hcd_to_uhci(hcd)); } +/* Are there any URBs for a particular device/endpoint on a given list? */ +static int urbs_for_ep_list(struct list_head *head, + struct hcd_dev *hdev, int ep) +{ + struct urb_priv *urbp; + + list_for_each_entry(urbp, head, urb_list) { + struct urb *urb = urbp->urb; + + if (hdev == urb->dev->hcpriv && ep == + (usb_pipeendpoint(urb->pipe) | + usb_pipein(urb->pipe))) + return 1; + } + return 0; +} + +/* Are there any URBs for a particular device/endpoint? */ +static int urbs_for_ep(struct uhci_hcd *uhci, struct hcd_dev *hdev, int ep) +{ + int rc; + + spin_lock_irq(&uhci->schedule_lock); + rc = (urbs_for_ep_list(&uhci->urb_list, hdev, ep) || + urbs_for_ep_list(&uhci->complete_list, hdev, ep) || + urbs_for_ep_list(&uhci->urb_remove_list, hdev, ep)); + spin_unlock_irq(&uhci->schedule_lock); + return rc; +} + +/* Wait until all the URBs for a particular device/endpoint are gone */ +static void uhci_hcd_endpoint_disable(struct usb_hcd *hcd, + struct hcd_dev *hdev, int endpoint) +{ + struct uhci_hcd *uhci = hcd_to_uhci(hcd); + + wait_event_interruptible(uhci->waitqh, + !urbs_for_ep(uhci, hdev, endpoint)); +} + static int uhci_hcd_get_frame_number(struct usb_hcd *hcd) { return uhci_get_current_frame_number(hcd_to_uhci(hcd)); @@ -2390,6 +2432,7 @@ .urb_enqueue = uhci_urb_enqueue, .urb_dequeue = uhci_urb_dequeue, + .endpoint_disable = uhci_hcd_endpoint_disable, .get_frame_number = uhci_hcd_get_frame_number, .hub_status_data = uhci_hub_status_data, diff -Nru a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h --- a/drivers/usb/host/uhci-hcd.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/host/uhci-hcd.h Tue May 18 23:38:08 2004 @@ -80,7 +80,7 @@ #define CAN_SCHEDULE_FRAMES 1000 /* how far future frames can be scheduled */ struct uhci_frame_list { - __u32 frame[UHCI_NUMFRAMES]; + u32 frame[UHCI_NUMFRAMES]; void *frame_cpu[UHCI_NUMFRAMES]; @@ -105,8 +105,8 @@ */ struct uhci_qh { /* Hardware fields */ - __u32 link; /* Next queue */ - __u32 element; /* Queue element pointer */ + u32 link; /* Next queue */ + u32 element; /* Queue element pointer */ /* Software fields */ dma_addr_t dma_handle; @@ -185,10 +185,10 @@ */ struct uhci_td { /* Hardware fields */ - __u32 link; - __u32 status; - __u32 token; - __u32 buffer; + u32 link; + u32 status; + u32 token; + u32 buffer; /* Software fields */ dma_addr_t dma_handle; @@ -370,6 +370,8 @@ int rh_numports; struct timer_list stall_timer; + + wait_queue_head_t waitqh; /* endpoint_disable waiters */ }; struct urb_priv { diff -Nru a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c --- a/drivers/usb/image/mdc800.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/image/mdc800.c Tue May 18 23:38:07 2004 @@ -33,7 +33,7 @@ * Fix: mdc800 used sleep_on and slept with io_lock held. * Converted sleep_on to waitqueues with schedule_timeout and made io_lock * a semaphore from a spinlock. - * by Oliver Neukum <520047054719-0001@t-online.de> + * by Oliver Neukum * (02/12/2001) * * Identify version on module load. @@ -41,7 +41,7 @@ * * version 0.7.5 * Fixed potential SMP races with Spinlocks. - * Thanks to Oliver Neukum who + * Thanks to Oliver Neukum who * noticed the race conditions. * (30/10/2000) * @@ -312,14 +312,17 @@ static int mdc800_usb_waitForIRQ (int mode, int msec) { DECLARE_WAITQUEUE(wait, current); + long timeout; mdc800->camera_request_ready=1+mode; add_wait_queue(&mdc800->irq_wait, &wait); set_current_state(TASK_INTERRUPTIBLE); - if (!mdc800->irq_woken) + timeout = msec*HZ/1000; + while (!mdc800->irq_woken && timeout) { - schedule_timeout (msec*HZ/1000); + set_current_state(TASK_UNINTERRUPTIBLE); + timeout = schedule_timeout (timeout); } remove_wait_queue(&mdc800->irq_wait, &wait); set_current_state(TASK_RUNNING); @@ -668,6 +671,7 @@ { size_t left=len, sts=len; /* single transfer size */ char* ptr=buf; + long timeout; DECLARE_WAITQUEUE(wait, current); down (&mdc800->io_lock); @@ -715,10 +719,11 @@ return len-left; } add_wait_queue(&mdc800->download_wait, &wait); - set_current_state(TASK_INTERRUPTIBLE); - if (!mdc800->downloaded) + timeout = TO_DOWNLOAD_GET_READY*HZ/1000; + while (!mdc800->downloaded && timeout) { - schedule_timeout (TO_DOWNLOAD_GET_READY*HZ/1000); + set_current_state(TASK_UNINTERRUPTIBLE); + timeout = schedule_timeout (timeout); } set_current_state(TASK_RUNNING); remove_wait_queue(&mdc800->download_wait, &wait); @@ -819,6 +824,7 @@ if (mdc800->in_count == 8) { int answersize; + long timeout; if (mdc800_usb_waitForIRQ (0,TO_GET_READY)) { @@ -839,10 +845,11 @@ return -EIO; } add_wait_queue(&mdc800->write_wait, &wait); - set_current_state(TASK_INTERRUPTIBLE); - if (!mdc800->written) + timeout = TO_WRITE_GET_READY*HZ/1000; + while (!mdc800->written && timeout) { - schedule_timeout (TO_WRITE_GET_READY*HZ/1000); + set_current_state(TASK_UNINTERRUPTIBLE); + timeout = schedule_timeout (timeout); } set_current_state(TASK_RUNNING); remove_wait_queue(&mdc800->write_wait, &wait); diff -Nru a/drivers/usb/input/Kconfig b/drivers/usb/input/Kconfig --- a/drivers/usb/input/Kconfig Tue May 18 23:38:08 2004 +++ b/drivers/usb/input/Kconfig Tue May 18 23:38:08 2004 @@ -191,6 +191,19 @@ To compile this driver as a module, choose M here: the module will be called mtouchusb. +config USB_EGALAX + tristate "eGalax TouchKit USB Touchscreen Driver" + depends on USB && INPUT + ---help--- + Say Y here if you want to use a eGalax TouchKit USB + Touchscreen controller. + + The driver has been tested on a Xenarc 700TSV monitor + with eGalax touchscreen. + + To compile this driver as a module, choose M here: the + module will be called touchkitusb. + config USB_XPAD tristate "X-Box gamepad support" depends on USB && INPUT diff -Nru a/drivers/usb/input/Makefile b/drivers/usb/input/Makefile --- a/drivers/usb/input/Makefile Tue May 18 23:38:08 2004 +++ b/drivers/usb/input/Makefile Tue May 18 23:38:08 2004 @@ -33,6 +33,7 @@ obj-$(CONFIG_USB_KBTAB) += kbtab.o obj-$(CONFIG_USB_MOUSE) += usbmouse.o obj-$(CONFIG_USB_MTOUCH) += mtouchusb.o +obj-$(CONFIG_USB_EGALAX) += touchkitusb.o obj-$(CONFIG_USB_POWERMATE) += powermate.o obj-$(CONFIG_USB_WACOM) += wacom.o obj-$(CONFIG_USB_XPAD) += xpad.o diff -Nru a/drivers/usb/input/aiptek.c b/drivers/usb/input/aiptek.c --- a/drivers/usb/input/aiptek.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/input/aiptek.c Tue May 18 23:38:08 2004 @@ -1,7 +1,9 @@ /* - * Native support for the Aiptek 8000U - * - * Copyright (c) 2001 Chris Atenasio + * Native support for the Aiptek HyperPen USB Tablets + * (4000U/5000U/6000U/8000U/12000U) + * + * Copyright (c) 2001 Chris Atenasio + * Copyright (c) 2002-2004 Bryan W. Headley * * based on wacom.c by * Vojtech Pavlik @@ -11,17 +13,48 @@ * James E. Blair * Daniel Egger * - * * Many thanks to Oliver Kuechemann for his support. * * ChangeLog: * v0.1 - Initial release - * v0.2 - Hack to get around fake event 28's. + * v0.2 - Hack to get around fake event 28's. (Bryan W. Headley) * v0.3 - Make URB dynamic (Bryan W. Headley, Jun-8-2002) - * (kernel 2.5.x variant, June-14-2002) - */ - -/* + * Released to Linux 2.4.19 and 2.5.x + * v0.4 - Rewrote substantial portions of the code to deal with + * corrected control sequences, timing, dynamic configuration, + * support of 6000U - 12000U, procfs, and macro key support + * (Jan-1-2003 - Feb-5-2003, Bryan W. Headley) + * v1.0 - Added support for diagnostic messages, count of messages + * received from URB - Mar-8-2003, Bryan W. Headley + * v1.1 - added support for tablet resolution, changed DV and proximity + * some corrections - Jun-22-2003, martin schneebacher + * - Added support for the sysfs interface, deprecating the + * procfs interface for 2.5.x kernel. Also added support for + * Wheel command. Bryan W. Headley July-15-2003. + * v1.2 - Reworked jitter timer as a kernel thread. + * Bryan W. Headley November-28-2003/Jan-10-2004. + * v1.3 - Repaired issue of kernel thread going nuts on single-processor + * machines, introduced programmableDelay as a command line + * parameter. Feb 7 2004, Bryan W. Headley. + * v1.4 - Re-wire jitter so it does not require a thread. Courtesy of + * Rene van Paassen. Added reporting of physical pointer device + * (e.g., stylus, mouse in reports 2, 3, 4, 5. We don't know + * for reports 1, 6.) + * what physical device reports for reports 1, 6.) Also enabled + * MOUSE and LENS tool button modes. Renamed "rubber" to "eraser". + * Feb 20, 2004, Bryan W. Headley. + * v1.5 - Added previousJitterable, so we don't do jitter delay when the + * user is holding a button down for periods of time. + * + * NOTE: + * This kernel driver is augmented by the "Aiptek" XFree86 input + * driver for your X server, as well as the Gaiptek GUI Front-end + * "Tablet Manager". + * These three products are highly interactive with one another, + * so therefore it's easier to document them all as one subsystem. + * Please visit the project's "home page", located at, + * http://aiptektablet.sourceforge.net. + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -37,373 +70,2229 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include #include #include #include #include #include #include +#include +#include #include -#include + /* * Version Information */ -#define DRIVER_VERSION "v0.3" -#define DRIVER_AUTHOR "Chris Atenasio " -#define DRIVER_DESC "USB Aiptek 6000U/8000U tablet driver (Linux 2.5.x)" - -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE("GPL"); +#define DRIVER_VERSION "v1.5 (May-15-2004)" +#define DRIVER_AUTHOR "Bryan W. Headley/Chris Atenasio" +#define DRIVER_DESC "Aiptek HyperPen USB Tablet Driver (Linux 2.6.x)" /* * Aiptek status packet: * + * (returned as Report 1 - relative coordinates from mouse and stylus) + * + * bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 + * byte0 0 0 0 0 0 0 0 1 + * byte1 0 0 0 0 0 BS2 BS Tip + * byte2 X7 X6 X5 X4 X3 X2 X1 X0 + * byte3 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 + * + * (returned as Report 2 - absolute coordinates from the stylus) + * * bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 * byte0 0 0 0 0 0 0 1 0 * byte1 X7 X6 X5 X4 X3 X2 X1 X0 * byte2 X15 X14 X13 X12 X11 X10 X9 X8 * byte3 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 * byte4 Y15 Y14 Y13 Y12 Y11 Y10 Y9 Y8 - * byte5 * * * BS2 BS1 Tip DV IR + * byte5 * * * BS2 BS1 Tip IR DV * byte6 P7 P6 P5 P4 P3 P2 P1 P0 * byte7 P15 P14 P13 P12 P11 P10 P9 P8 * + * (returned as Report 3 - absolute coordinates from the mouse) + * + * bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 + * byte0 0 0 0 0 0 0 1 0 + * byte1 X7 X6 X5 X4 X3 X2 X1 X0 + * byte2 X15 X14 X13 X12 X11 X10 X9 X8 + * byte3 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 + * byte4 Y15 Y14 Y13 Y12 Y11 Y10 Y9 Y8 + * byte5 * * * BS2 BS1 Tip IR DV + * byte6 P7 P6 P5 P4 P3 P2 P1 P0 + * byte7 P15 P14 P13 P12 P11 P10 P9 P8 + * + * (returned as Report 4 - macrokeys from the stylus) + * + * bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 + * byte0 0 0 0 0 0 1 0 0 + * byte1 0 0 0 BS2 BS Tip IR DV + * byte2 0 0 0 0 0 0 1 0 + * byte3 0 0 0 K4 K3 K2 K1 K0 + * byte4 P7 P6 P5 P4 P3 P2 P1 P0 + * byte5 P15 P14 P13 P12 P11 P10 P9 P8 + * + * (returned as Report 5 - macrokeys from the mouse) + * + * bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 + * byte0 0 0 0 0 0 1 0 0 + * byte1 0 0 0 BS2 BS Tip IR DV + * byte2 0 0 0 0 0 0 1 0 + * byte3 0 0 0 K4 K3 K2 K1 K0 + * byte4 P7 P6 P5 P4 P3 P2 P1 P0 + * byte5 P15 P14 P13 P12 P11 P10 P9 P8 + * * IR: In Range = Proximity on * DV = Data Valid + * BS = Barrel Switch (as in, macro keys) + * BS2 also referred to as Tablet Pick * - * * Command Summary: * + * Use report_type CONTROL (3) + * Use report_id 2 + * * Command/Data Description Return Bytes Return Value * 0x10/0x00 SwitchToMouse 0 * 0x10/0x01 SwitchToTablet 0 - * 0x18/0x04 Resolution500LPI 0 - * 0x17/0x00 FilterOn 0 + * 0x18/0x04 SetResolution 0 * 0x12/0xFF AutoGainOn 0 + * 0x17/0x00 FilterOn 0 * 0x01/0x00 GetXExtension 2 MaxX * 0x01/0x01 GetYExtension 2 MaxY * 0x02/0x00 GetModelCode 2 ModelCode = LOBYTE * 0x03/0x00 GetODMCode 2 ODMCode * 0x08/0x00 GetPressureLevels 2 =512 * 0x04/0x00 GetFirmwareVersion 2 Firmware Version - * + * 0x11/0x02 EnableMacroKeys 0 * * To initialize the tablet: * - * (1) Send command Resolution500LPI - * (2) Option Commands (GetXExtension, GetYExtension) - * (3) Send command SwitchToTablet + * (1) Send Resolution500LPI (Command) + * (2) Query for Model code (Option Report) + * (3) Query for ODM code (Option Report) + * (4) Query for firmware (Option Report) + * (5) Query for GetXExtension (Option Report) + * (6) Query for GetYExtension (Option Report) + * (7) Query for GetPressureLevels (Option Report) + * (8) SwitchToTablet for Absolute coordinates, or + * SwitchToMouse for Relative coordinates (Command) + * (9) EnableMacroKeys (Command) + * (10) FilterOn (Command) + * (11) AutoGainOn (Command) + * + * (Step 9 can be omitted, but you'll then have no function keys.) */ -#define USB_VENDOR_ID_AIPTEK 0x08ca +#define USB_VENDOR_ID_AIPTEK 0x08ca +#define USB_REQ_GET_REPORT 0x01 +#define USB_REQ_SET_REPORT 0x09 + + /* PointerMode codes + */ +#define AIPTEK_POINTER_ONLY_MOUSE_MODE 0 +#define AIPTEK_POINTER_ONLY_STYLUS_MODE 1 +#define AIPTEK_POINTER_EITHER_MODE 2 + +#define AIPTEK_POINTER_ALLOW_MOUSE_MODE(a) \ + (a == AIPTEK_POINTER_ONLY_MOUSE_MODE || \ + a == AIPTEK_POINTER_EITHER_MODE) +#define AIPTEK_POINTER_ALLOW_STYLUS_MODE(a) \ + (a == AIPTEK_POINTER_ONLY_STYLUS_MODE || \ + a == AIPTEK_POINTER_EITHER_MODE) + + /* CoordinateMode code + */ +#define AIPTEK_COORDINATE_RELATIVE_MODE 0 +#define AIPTEK_COORDINATE_ABSOLUTE_MODE 1 + + /* XTilt and YTilt values + */ +#define AIPTEK_TILT_MIN (-128) +#define AIPTEK_TILT_MAX 127 +#define AIPTEK_TILT_DISABLE (-10101) + + /* Wheel values + */ +#define AIPTEK_WHEEL_MIN 0 +#define AIPTEK_WHEEL_MAX 1024 +#define AIPTEK_WHEEL_DISABLE (-10101) + + /* ToolCode values, which BTW are 0x140 .. 0x14f + * We have things set up such that if TOOL_BUTTON_FIRED_BIT is + * not set, we'll send one instance of AIPTEK_TOOL_BUTTON_xxx. + * + * Whenever the user resets the value, TOOL_BUTTON_FIRED_BIT will + * get reset. + */ +#define TOOL_BUTTON(x) ((x) & 0x14f) +#define TOOL_BUTTON_FIRED(x) ((x) & 0x200) +#define TOOL_BUTTON_FIRED_BIT 0x200 + /* toolMode codes + */ +#define AIPTEK_TOOL_BUTTON_PEN_MODE BTN_TOOL_PEN +#define AIPTEK_TOOL_BUTTON_PEN_MODE BTN_TOOL_PEN +#define AIPTEK_TOOL_BUTTON_PENCIL_MODE BTN_TOOL_PENCIL +#define AIPTEK_TOOL_BUTTON_BRUSH_MODE BTN_TOOL_BRUSH +#define AIPTEK_TOOL_BUTTON_AIRBRUSH_MODE BTN_TOOL_AIRBRUSH +#define AIPTEK_TOOL_BUTTON_ERASER_MODE BTN_TOOL_RUBBER +#define AIPTEK_TOOL_BUTTON_MOUSE_MODE BTN_TOOL_MOUSE +#define AIPTEK_TOOL_BUTTON_LENS_MODE BTN_TOOL_LENS + + /* Diagnostic message codes + */ +#define AIPTEK_DIAGNOSTIC_NA 0 +#define AIPTEK_DIAGNOSTIC_SENDING_RELATIVE_IN_ABSOLUTE 1 +#define AIPTEK_DIAGNOSTIC_SENDING_ABSOLUTE_IN_RELATIVE 2 +#define AIPTEK_DIAGNOSTIC_TOOL_DISALLOWED 3 + + /* Time to wait (in ms) to help mask hand jittering + * when pressing the stylus buttons. + */ +#define AIPTEK_JITTER_DELAY_DEFAULT 50 + + /* Time to wait (in ms) in-between sending the tablet + * a command and beginning the process of reading the return + * sequence from the tablet. + */ +#define AIPTEK_PROGRAMMABLE_DELAY_25 25 +#define AIPTEK_PROGRAMMABLE_DELAY_50 50 +#define AIPTEK_PROGRAMMABLE_DELAY_100 100 +#define AIPTEK_PROGRAMMABLE_DELAY_200 200 +#define AIPTEK_PROGRAMMABLE_DELAY_300 300 +#define AIPTEK_PROGRAMMABLE_DELAY_400 400 +#define AIPTEK_PROGRAMMABLE_DELAY_DEFAULT AIPTEK_PROGRAMMABLE_DELAY_400 + + /* Mouse button programming + */ +#define AIPTEK_MOUSE_LEFT_BUTTON 0x01 +#define AIPTEK_MOUSE_RIGHT_BUTTON 0x02 +#define AIPTEK_MOUSE_MIDDLE_BUTTON 0x04 + + /* Stylus button programming + */ +#define AIPTEK_STYLUS_LOWER_BUTTON 0x08 +#define AIPTEK_STYLUS_UPPER_BUTTON 0x10 + + /* Length of incoming packet from the tablet + */ +#define AIPTEK_PACKET_LENGTH 8 + + /* We report in EV_MISC both the proximity and + * whether the report came from the stylus, tablet mouse + * or "unknown" -- Unknown when the tablet is in relative + * mode, because we only get report 1's. + */ +#define AIPTEK_REPORT_TOOL_UNKNOWN 0x10 +#define AIPTEK_REPORT_TOOL_STYLUS 0x20 +#define AIPTEK_REPORT_TOOL_MOUSE 0x40 + +static int programmableDelay = AIPTEK_PROGRAMMABLE_DELAY_DEFAULT; +static int jitterDelay = AIPTEK_JITTER_DELAY_DEFAULT; struct aiptek_features { - char *name; - int pktlen; - int x_max; - int y_max; - int pressure_min; - int pressure_max; - usb_complete_t irq; - unsigned long evbit; - unsigned long absbit; - unsigned long relbit; - unsigned long btnbit; - unsigned long digibit; + int odmCode; /* Tablet manufacturer code */ + int modelCode; /* Tablet model code (not unique) */ + int firmwareCode; /* prom/eeprom version */ + char usbPath[64 + 1]; /* device's physical usb path */ + char inputPath[64 + 1]; /* input device path */ + char manuName[64 + 1]; /* manufacturer name */ + char prodName[64 + 1]; /* product name */ +}; + +struct aiptek_settings { + int pointerMode; /* stylus-, mouse-only or either */ + int coordinateMode; /* absolute/relative coords */ + int toolMode; /* pen, pencil, brush, etc. tool */ + int xTilt; /* synthetic xTilt amount */ + int yTilt; /* synthetic yTilt amount */ + int wheel; /* synthetic wheel amount */ + int stylusButtonUpper; /* stylus upper btn delivers... */ + int stylusButtonLower; /* stylus lower btn delivers... */ + int mouseButtonLeft; /* mouse left btn delivers... */ + int mouseButtonMiddle; /* mouse middle btn delivers... */ + int mouseButtonRight; /* mouse right btn delivers... */ + int programmableDelay; /* delay for tablet programming */ + int jitterDelay; /* delay for hand jittering */ }; struct aiptek { - struct input_dev dev; - struct usb_device *usbdev; - struct urb *irq; - struct aiptek_features *features; - int tool; - int open; + struct input_dev inputdev; /* input device struct */ + struct usb_device *usbdev; /* usb device struct */ + struct urb *urb; /* urb for incoming reports */ + dma_addr_t data_dma; /* our dma stuffage */ + struct aiptek_features features; /* tablet's array of features */ + struct aiptek_settings curSetting; /* tablet's current programmable */ + struct aiptek_settings newSetting; /* ... and new param settings */ + unsigned int ifnum; /* interface number for IO */ + int openCount; /* module use counter */ + int diagnostic; /* tablet diagnostic codes */ + unsigned long eventCount; /* event count */ + int inDelay; /* jitter: in jitter delay? */ + unsigned long endDelay; /* jitter: time when delay ends */ + int previousJitterable; /* jitterable prev value */ + unsigned char *data; /* incoming packet data */ +}; - signed char *data; - dma_addr_t data_dma; +/* + * Permit easy lookup of keyboard events to send, versus + * the bitmap which comes from the tablet. This hides the + * issue that the F_keys are not sequentially numbered. + */ +static int macroKeyEvents[] = { + KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, + KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, + KEY_F12, KEY_F13, KEY_F14, KEY_F15, KEY_F16, KEY_F17, + KEY_F18, KEY_F19, KEY_F20, KEY_F21, KEY_F22, KEY_F23, + KEY_F24, KEY_STOP, KEY_AGAIN, KEY_PROPS, KEY_UNDO, + KEY_FRONT, KEY_COPY, KEY_OPEN, KEY_PASTE, 0 }; -static void -aiptek_irq(struct urb *urb, struct pt_regs *regs) +/*********************************************************************** + * Relative reports deliver values in 2's complement format to + * deal with negative offsets. + */ +static int aiptek_convert_from_2s_complement(unsigned char c) +{ + int ret; + unsigned char b = c; + int negate = 0; + + if ((b & 0x80) != 0) { + b = ~b; + b--; + negate = 1; + } + ret = b; + ret = (negate == 1) ? -ret : ret; + return ret; +} + +/*********************************************************************** + * aiptek_irq can receive one of six potential reports. + * The documentation for each is in the body of the function. + * + * The tablet reports on several attributes per invocation of + * aiptek_irq. Because the Linux Input Event system allows the + * transmission of ONE attribute per input_report_xxx() call, + * collation has to be done on the other end to reconstitute + * a complete tablet report. Further, the number of Input Event reports + * submitted varies, depending on what USB report type, and circumstance. + * To deal with this, EV_MSC is used to indicate an 'end-of-report' + * message. This has been an undocumented convention understood by the kernel + * tablet driver and clients such as gpm and XFree86's tablet drivers. + * + * Of the information received from the tablet, the one piece I + * cannot transmit is the proximity bit (without resorting to an EV_MSC + * convention above.) I therefore have taken over REL_MISC and ABS_MISC + * (for relative and absolute reports, respectively) for communicating + * Proximity. Why two events? I thought it interesting to know if the + * Proximity event occured while the tablet was in absolute or relative + * mode. + * + * Other tablets use the notion of a certain minimum stylus pressure + * to infer proximity. While that could have been done, that is yet + * another 'by convention' behavior, the documentation for which + * would be spread between two (or more) pieces of software. + * + * EV_MSC usage was terminated for this purpose in Linux 2.5.x, and + * replaced with the input_sync() method (which emits EV_SYN.) + */ + +static void aiptek_irq(struct urb *urb, struct pt_regs *regs) { struct aiptek *aiptek = urb->context; unsigned char *data = aiptek->data; - struct input_dev *dev = &aiptek->dev; - int x; - int y; - int pressure; - int proximity; - int retval; + struct input_dev *inputdev = &aiptek->inputdev; + int jitterable = 0; + int retval, macro, x, y, z, left, right, middle, p, dv, tip, bs, pck; switch (urb->status) { case 0: - /* success */ + /* Success */ break; + case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: - /* this urb is terminated, clean up */ - dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status); + /* This urb is terminated, clean up */ + dbg("%s - urb shutting down with status: %d", + __FUNCTION__, urb->status); return; + default: - dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status); + dbg("%s - nonzero urb status received: %d", + __FUNCTION__, urb->status); goto exit; } - if ((data[0] & 2) == 0) { - dbg("received unknown report #%d", data[0]); + /* See if we are in a delay loop -- throw out report if true. + */ + if (aiptek->inDelay == 1 && time_after(aiptek->endDelay, jiffies)) { + goto exit; } - input_regs(dev, regs); + aiptek->inDelay = 0; + aiptek->eventCount++; - proximity = data[5] & 0x01; - input_report_key(dev, BTN_TOOL_PEN, proximity); - - x = le16_to_cpu(get_unaligned((u16 *) &data[1])); - y = le16_to_cpu(get_unaligned((u16 *) &data[3])); - pressure = le16_to_cpu(*(u16 *) &data[6]); - pressure -= aiptek->features->pressure_min; - - if (pressure < 0) { - pressure = 0; + /* Report 1 delivers relative coordinates with either a stylus + * or the mouse. You do not know, however, which input + * tool generated the event. + */ + if (data[0] == 1) { + if (aiptek->curSetting.coordinateMode == + AIPTEK_COORDINATE_ABSOLUTE_MODE) { + aiptek->diagnostic = + AIPTEK_DIAGNOSTIC_SENDING_RELATIVE_IN_ABSOLUTE; + } else { + input_regs(inputdev, regs); + + x = aiptek_convert_from_2s_complement(data[2]); + y = aiptek_convert_from_2s_complement(data[3]); + + /* jitterable keeps track of whether any button has been pressed. + * We're also using it to remap the physical mouse button mask + * to pseudo-settings. (We don't specifically care about it's + * value after moving/transposing mouse button bitmasks, except + * that a non-zero value indicates that one or more + * mouse button was pressed.) + */ + jitterable = data[5] & 0x07; + + left = (data[5] & aiptek->curSetting.mouseButtonLeft) != 0 ? 1 : 0; + right = (data[5] & aiptek->curSetting.mouseButtonRight) != 0 ? 1 : 0; + middle = (data[5] & aiptek->curSetting.mouseButtonMiddle) != 0 ? 1 : 0; + + input_report_key(inputdev, BTN_LEFT, left); + input_report_key(inputdev, BTN_MIDDLE, middle); + input_report_key(inputdev, BTN_RIGHT, right); + input_report_rel(inputdev, REL_X, x); + input_report_rel(inputdev, REL_Y, y); + input_report_rel(inputdev, REL_MISC, 1 | AIPTEK_REPORT_TOOL_UNKNOWN); + + /* Wheel support is in the form of a single-event + * firing. + */ + if (aiptek->curSetting.wheel != AIPTEK_WHEEL_DISABLE) { + input_report_rel(inputdev, REL_WHEEL, + aiptek->curSetting.wheel); + aiptek->curSetting.wheel = AIPTEK_WHEEL_DISABLE; + } + input_sync(inputdev); + } } - - if (proximity) { - input_report_abs(dev, ABS_X, x); - input_report_abs(dev, ABS_Y, y); - input_report_abs(dev, ABS_PRESSURE, pressure); - input_report_key(dev, BTN_TOUCH, data[5] & 0x04); - input_report_key(dev, BTN_STYLUS, data[5] & 0x08); - input_report_key(dev, BTN_STYLUS2, data[5] & 0x10); + /* Report 2 is delivered only by the stylus, and delivers + * absolute coordinates. + */ + else if (data[0] == 2) { + if (aiptek->curSetting.coordinateMode == AIPTEK_COORDINATE_RELATIVE_MODE) { + aiptek->diagnostic = AIPTEK_DIAGNOSTIC_SENDING_ABSOLUTE_IN_RELATIVE; + } else if (!AIPTEK_POINTER_ALLOW_STYLUS_MODE + (aiptek->curSetting.pointerMode)) { + aiptek->diagnostic = AIPTEK_DIAGNOSTIC_TOOL_DISALLOWED; + } else { + input_regs(inputdev, regs); + + x = le16_to_cpu(get_unaligned((__u16 *) (data + 1))); + y = le16_to_cpu(get_unaligned((__u16 *) (data + 3))); + z = le16_to_cpu(get_unaligned((__u16 *) (data + 6))); + + p = (data[5] & 0x01) != 0 ? 1 : 0; + dv = (data[5] & 0x02) != 0 ? 1 : 0; + tip = (data[5] & 0x04) != 0 ? 1 : 0; + + /* Use jitterable to re-arrange button masks + */ + jitterable = data[5] & 0x18; + + bs = (data[5] & aiptek->curSetting.stylusButtonLower) != 0 ? 1 : 0; + pck = (data[5] & aiptek->curSetting.stylusButtonUpper) != 0 ? 1 : 0; + + /* dv indicates 'data valid' (e.g., the tablet is in sync + * and has delivered a "correct" report) We will ignore + * all 'bad' reports... + */ + if (dv != 0) { + /* If we've not already sent a tool_button_?? code, do + * so now. Then set FIRED_BIT so it won't be resent unless + * the user forces FIRED_BIT off. + */ + if (TOOL_BUTTON_FIRED + (aiptek->curSetting.toolMode) == 0) { + input_report_key(inputdev, + TOOL_BUTTON(aiptek->curSetting.toolMode), + 1); + aiptek->curSetting.toolMode |= TOOL_BUTTON_FIRED_BIT; + } + + if (p != 0) { + input_report_abs(inputdev, ABS_X, x); + input_report_abs(inputdev, ABS_Y, y); + input_report_abs(inputdev, ABS_PRESSURE, z); + + input_report_key(inputdev, BTN_TOUCH, tip); + input_report_key(inputdev, BTN_STYLUS, bs); + input_report_key(inputdev, BTN_STYLUS2, pck); + + if (aiptek->curSetting.xTilt != + AIPTEK_TILT_DISABLE) { + input_report_abs(inputdev, + ABS_TILT_X, + aiptek->curSetting.xTilt); + } + if (aiptek->curSetting.yTilt != AIPTEK_TILT_DISABLE) { + input_report_abs(inputdev, + ABS_TILT_Y, + aiptek->curSetting.yTilt); + } + + /* Wheel support is in the form of a single-event + * firing. + */ + if (aiptek->curSetting.wheel != + AIPTEK_WHEEL_DISABLE) { + input_report_abs(inputdev, + ABS_WHEEL, + aiptek->curSetting.wheel); + aiptek->curSetting.wheel = AIPTEK_WHEEL_DISABLE; + } + } + input_report_abs(inputdev, ABS_MISC, p | AIPTEK_REPORT_TOOL_STYLUS); + input_sync(inputdev); + } + } + } + /* Report 3's come from the mouse in absolute mode. + */ + else if (data[0] == 3) { + if (aiptek->curSetting.coordinateMode == AIPTEK_COORDINATE_RELATIVE_MODE) { + aiptek->diagnostic = AIPTEK_DIAGNOSTIC_SENDING_ABSOLUTE_IN_RELATIVE; + } else if (!AIPTEK_POINTER_ALLOW_MOUSE_MODE + (aiptek->curSetting.pointerMode)) { + aiptek->diagnostic = AIPTEK_DIAGNOSTIC_TOOL_DISALLOWED; + } else { + input_regs(inputdev, regs); + x = le16_to_cpu(get_unaligned((__u16 *) (data + 1))); + y = le16_to_cpu(get_unaligned((__u16 *) (data + 3))); + + jitterable = data[5] & 0x1c; + + p = (data[5] & 0x01) != 0 ? 1 : 0; + dv = (data[5] & 0x02) != 0 ? 1 : 0; + left = (data[5] & aiptek->curSetting.mouseButtonLeft) != 0 ? 1 : 0; + right = (data[5] & aiptek->curSetting.mouseButtonRight) != 0 ? 1 : 0; + middle = (data[5] & aiptek->curSetting.mouseButtonMiddle) != 0 ? 1 : 0; + + if (dv != 0) { + /* If we've not already sent a tool_button_?? code, do + * so now. Then set FIRED_BIT so it won't be resent unless + * the user forces FIRED_BIT off. + */ + if (TOOL_BUTTON_FIRED + (aiptek->curSetting.toolMode) == 0) { + input_report_key(inputdev, + TOOL_BUTTON(aiptek->curSetting.toolMode), + 1); + aiptek->curSetting.toolMode |= TOOL_BUTTON_FIRED_BIT; + } + + if (p != 0) { + input_report_abs(inputdev, ABS_X, x); + input_report_abs(inputdev, ABS_Y, y); + + input_report_key(inputdev, BTN_LEFT, left); + input_report_key(inputdev, BTN_MIDDLE, middle); + input_report_key(inputdev, BTN_RIGHT, right); + + /* Wheel support is in the form of a single-event + * firing. + */ + if (aiptek->curSetting.wheel != AIPTEK_WHEEL_DISABLE) { + input_report_abs(inputdev, + ABS_WHEEL, + aiptek->curSetting.wheel); + aiptek->curSetting.wheel = AIPTEK_WHEEL_DISABLE; + } + } + input_report_rel(inputdev, REL_MISC, p | AIPTEK_REPORT_TOOL_MOUSE); + input_sync(inputdev); + } + } + } + /* Report 4s come from the macro keys when pressed by stylus + */ + else if (data[0] == 4) { + jitterable = data[1] & 0x18; + + p = (data[1] & 0x01) != 0 ? 1 : 0; + dv = (data[1] & 0x02) != 0 ? 1 : 0; + tip = (data[1] & 0x04) != 0 ? 1 : 0; + bs = (data[1] & aiptek->curSetting.stylusButtonLower) != 0 ? 1 : 0; + pck = (data[1] & aiptek->curSetting.stylusButtonUpper) != 0 ? 1 : 0; + + macro = data[3]; + z = le16_to_cpu(get_unaligned((__u16 *) (data + 4))); + + if (dv != 0) { + input_regs(inputdev, regs); + + /* If we've not already sent a tool_button_?? code, do + * so now. Then set FIRED_BIT so it won't be resent unless + * the user forces FIRED_BIT off. + */ + if (TOOL_BUTTON_FIRED(aiptek->curSetting.toolMode) == 0) { + input_report_key(inputdev, + TOOL_BUTTON(aiptek->curSetting.toolMode), + 1); + aiptek->curSetting.toolMode |= TOOL_BUTTON_FIRED_BIT; + } + + if (p != 0) { + input_report_key(inputdev, BTN_TOUCH, tip); + input_report_key(inputdev, BTN_STYLUS, bs); + input_report_key(inputdev, BTN_STYLUS2, pck); + input_report_abs(inputdev, ABS_PRESSURE, z); + } + + /* For safety, we're sending key 'break' codes for the + * neighboring macro keys. + */ + if (macro > 0) { + input_report_key(inputdev, + macroKeyEvents[macro - 1], 0); + } + if (macro < 25) { + input_report_key(inputdev, + macroKeyEvents[macro + 1], 0); + } + input_report_key(inputdev, macroKeyEvents[macro], p); + input_report_abs(inputdev, ABS_MISC, + p | AIPTEK_REPORT_TOOL_STYLUS); + input_sync(inputdev); + } + } + /* Report 5s come from the macro keys when pressed by mouse + */ + else if (data[0] == 5) { + jitterable = data[1] & 0x1c; + + p = (data[1] & 0x01) != 0 ? 1 : 0; + dv = (data[1] & 0x02) != 0 ? 1 : 0; + left = (data[1]& aiptek->curSetting.mouseButtonLeft) != 0 ? 1 : 0; + right = (data[1] & aiptek->curSetting.mouseButtonRight) != 0 ? 1 : 0; + middle = (data[1] & aiptek->curSetting.mouseButtonMiddle) != 0 ? 1 : 0; + macro = data[3]; + + if (dv != 0) { + input_regs(inputdev, regs); + + /* If we've not already sent a tool_button_?? code, do + * so now. Then set FIRED_BIT so it won't be resent unless + * the user forces FIRED_BIT off. + */ + if (TOOL_BUTTON_FIRED(aiptek->curSetting.toolMode) == 0) { + input_report_key(inputdev, + TOOL_BUTTON(aiptek->curSetting.toolMode), + 1); + aiptek->curSetting.toolMode |= TOOL_BUTTON_FIRED_BIT; + } + + if (p != 0) { + input_report_key(inputdev, BTN_LEFT, left); + input_report_key(inputdev, BTN_MIDDLE, middle); + input_report_key(inputdev, BTN_RIGHT, right); + } + + /* For safety, we're sending key 'break' codes for the + * neighboring macro keys. + */ + if (macro > 0) { + input_report_key(inputdev, + macroKeyEvents[macro - 1], 0); + } + if (macro < 25) { + input_report_key(inputdev, + macroKeyEvents[macro + 1], 0); + } + + input_report_key(inputdev, macroKeyEvents[macro], 1); + input_report_rel(inputdev, ABS_MISC, + p | AIPTEK_REPORT_TOOL_MOUSE); + input_sync(inputdev); + } + } + /* We have no idea which tool can generate a report 6. Theoretically, + * neither need to, having been given reports 4 & 5 for such use. + * However, report 6 is the 'official-looking' report for macroKeys; + * reports 4 & 5 supposively are used to support unnamed, unknown + * hat switches (which just so happen to be the macroKeys.) + */ + else if (data[0] == 6) { + macro = le16_to_cpu(get_unaligned((__u16 *) (data + 1))); + input_regs(inputdev, regs); + + if (macro > 0) { + input_report_key(inputdev, macroKeyEvents[macro - 1], + 0); + } + if (macro < 25) { + input_report_key(inputdev, macroKeyEvents[macro + 1], + 0); + } + + /* If we've not already sent a tool_button_?? code, do + * so now. Then set FIRED_BIT so it won't be resent unless + * the user forces FIRED_BIT off. + */ + if (TOOL_BUTTON_FIRED(aiptek->curSetting.toolMode) == 0) { + input_report_key(inputdev, + TOOL_BUTTON(aiptek->curSetting. + toolMode), 1); + aiptek->curSetting.toolMode |= TOOL_BUTTON_FIRED_BIT; + } + + input_report_key(inputdev, macroKeyEvents[macro], 1); + input_report_abs(inputdev, ABS_MISC, + 1 | AIPTEK_REPORT_TOOL_UNKNOWN); + input_sync(inputdev); + } else { + dbg("Unknown report %d", data[0]); } - input_sync(dev); + /* Jitter may occur when the user presses a button on the stlyus + * or the mouse. What we do to prevent that is wait 'x' milliseconds + * following a 'jitterable' event, which should give the hand some time + * stabilize itself. + * + * We just introduced aiptek->previousJitterable to carry forth the + * notion that jitter occurs when the button state changes from on to off: + * a person drawing, holding a button down is not subject to jittering. + * With that in mind, changing from upper button depressed to lower button + * WILL transition through a jitter delay. + */ + + if (aiptek->previousJitterable != jitterable && + aiptek->curSetting.jitterDelay != 0 && aiptek->inDelay != 1) { + aiptek->endDelay = jiffies + + ((aiptek->curSetting.jitterDelay * HZ) / 1000); + aiptek->inDelay = 1; + } + aiptek->previousJitterable = jitterable; exit: - retval = usb_submit_urb (urb, GFP_ATOMIC); - if (retval) - err ("%s - usb_submit_urb failed with result %d", - __FUNCTION__, retval); + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval != 0) { + err("%s - usb_submit_urb failed with result %d", + __FUNCTION__, retval); + } } -struct aiptek_features aiptek_features[] = { - {"Aiptek 6000U/8000U", - 8, 3000, 2250, 26, 511, aiptek_irq, 0, 0, 0, 0}, - {NULL, 0} -}; - +/*********************************************************************** + * These are the USB id's known so far. We do not identify them to + * specific Aiptek model numbers, because there has been overlaps, + * use, and reuse of id's in existing models. Certain models have + * been known to use more than one ID, indicative perhaps of + * manufacturing revisions. In any event, we consider these + * IDs to not be model-specific nor unique. + */ struct usb_device_id aiptek_ids[] = { - {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x20), .driver_info = 0}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x01)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x10)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x20)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x21)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x22)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x23)}, + {USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x24)}, {} }; MODULE_DEVICE_TABLE(usb, aiptek_ids); -static int -aiptek_open(struct input_dev *dev) +/*********************************************************************** + * Open an instance of the tablet driver. + */ +static int aiptek_open(struct input_dev *inputdev) { - struct aiptek *aiptek = dev->private; + struct aiptek *aiptek = inputdev->private; - if (aiptek->open++) + if (aiptek->openCount++ > 0) { return 0; + } - aiptek->irq->dev = aiptek->usbdev; - if (usb_submit_urb(aiptek->irq, GFP_KERNEL)) { - aiptek->open--; + aiptek->urb->dev = aiptek->usbdev; + if (usb_submit_urb(aiptek->urb, GFP_KERNEL) != 0) { + aiptek->openCount--; return -EIO; } return 0; } -static void -aiptek_close(struct input_dev *dev) +/*********************************************************************** + * Close an instance of the tablet driver. + */ +static void aiptek_close(struct input_dev *inputdev) { - struct aiptek *aiptek = dev->private; + struct aiptek *aiptek = inputdev->private; - if (!--aiptek->open) - usb_unlink_urb(aiptek->irq); + if (--aiptek->openCount == 0) { + usb_unlink_urb(aiptek->urb); + } +} + +/*********************************************************************** + * aiptek_set_report and aiptek_get_report() are borrowed from Linux 2.4.x, + * where they were known as usb_set_report and usb_get_report. + */ +static int +aiptek_set_report(struct aiptek *aiptek, + unsigned char report_type, + unsigned char report_id, void *buffer, int size) +{ + return usb_control_msg(aiptek->usbdev, + usb_sndctrlpipe(aiptek->usbdev, 0), + USB_REQ_SET_REPORT, + USB_TYPE_CLASS | USB_RECIP_INTERFACE | + USB_DIR_OUT, (report_type << 8) + report_id, + aiptek->ifnum, buffer, size, 5 * HZ); } -#define USB_REQ_SET_REPORT 0x09 static int -usb_set_report(struct usb_device *dev, struct usb_host_interface *inter, unsigned char type, - unsigned char id, void *buf, int size) +aiptek_get_report(struct aiptek *aiptek, + unsigned char report_type, + unsigned char report_id, void *buffer, int size) { - return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), - USB_REQ_SET_REPORT, USB_TYPE_CLASS | USB_RECIP_INTERFACE, - (type << 8) + id, inter->desc.bInterfaceNumber, buf, size, HZ); + return usb_control_msg(aiptek->usbdev, + usb_rcvctrlpipe(aiptek->usbdev, 0), + USB_REQ_GET_REPORT, + USB_TYPE_CLASS | USB_RECIP_INTERFACE | + USB_DIR_IN, (report_type << 8) + report_id, + aiptek->ifnum, buffer, size, 5 * HZ); } +/*********************************************************************** + * Send a command to the tablet. + */ static int -aiptek_command(struct usb_device *dev, struct usb_host_interface *inter, - unsigned char command, unsigned char data) +aiptek_command(struct aiptek *aiptek, unsigned char command, unsigned char data) { + const int sizeof_buf = 3 * sizeof(u8); + int ret; u8 *buf; - int err; - - buf = kmalloc(3, GFP_KERNEL); + + buf = kmalloc(sizeof_buf, GFP_KERNEL); if (!buf) return -ENOMEM; - buf[0] = 4; + buf[0] = 2; buf[1] = command; buf[2] = data; - if ((err = usb_set_report(dev, inter, 3, 2, buf, 3)) != 3) { - dbg("aiptek_command: 0x%x 0x%x\n", command, data); + if ((ret = + aiptek_set_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) { + dbg("aiptek_program: failed, tried to send: 0x%02x 0x%02x", + command, data); } - kfree(buf); - return err < 0 ? err : 0; + return ret < 0 ? ret : 0; } -static int -aiptek_probe(struct usb_interface *intf, - const struct usb_device_id *id) +/*********************************************************************** + * Retrieve information from the tablet. Querying info is defined as first + * sending the {command,data} sequence as a command, followed by a wait + * (aka, "programmaticDelay") and then a "read" request. + */ +static int +aiptek_query(struct aiptek *aiptek, unsigned char command, unsigned char data) { - struct usb_device *dev = interface_to_usbdev (intf); - struct usb_host_interface *interface = intf->cur_altsetting; - struct usb_endpoint_descriptor *endpoint; - struct aiptek *aiptek; - int err = -ENOMEM; + const int sizeof_buf = 3 * sizeof(u8); + int ret; + u8 *buf; + + buf = kmalloc(sizeof_buf, GFP_KERNEL); + if (!buf) + return -ENOMEM; - if (!(aiptek = kmalloc(sizeof (struct aiptek), GFP_KERNEL))) - goto error_out_noalloc; + buf[0] = 2; + buf[1] = command; + buf[2] = data; - memset(aiptek, 0, sizeof (struct aiptek)); + if (aiptek_command(aiptek, command, data) != 0) { + kfree(buf); + return -EIO; + } + msleep(aiptek->curSetting.programmableDelay); - aiptek->data = usb_buffer_alloc(dev, 10, GFP_KERNEL, &aiptek->data_dma); - if (!aiptek->data) { - goto error_out_nobuf; + if ((ret = + aiptek_get_report(aiptek, 3, 2, buf, sizeof_buf)) != sizeof_buf) { + dbg("aiptek_query failed: returned 0x%02x 0x%02x 0x%02x", + buf[0], buf[1], buf[2]); + ret = -EIO; + } else { + ret = le16_to_cpu(get_unaligned((__u16 *) (buf + 1))); } + kfree(buf); + return ret; +} - aiptek->irq = usb_alloc_urb(0, GFP_KERNEL); - if (!aiptek->irq) { - goto error_out_nourb; +/*********************************************************************** + * Program the tablet into either absolute or relative mode. + * We also get information about the tablet's size. + */ +static int aiptek_program_tablet(struct aiptek *aiptek) +{ + int ret; + /* Execute Resolution500LPI */ + if ((ret = aiptek_command(aiptek, 0x18, 0x04)) < 0) + return ret; + + /* Query getModelCode */ + if ((ret = aiptek_query(aiptek, 0x02, 0x00)) < 0) + return ret; + aiptek->features.modelCode = ret & 0xff; + + /* Query getODMCode */ + if ((ret = aiptek_query(aiptek, 0x03, 0x00)) < 0) + return ret; + aiptek->features.odmCode = ret; + + /* Query getFirmwareCode */ + if ((ret = aiptek_query(aiptek, 0x04, 0x00)) < 0) + return ret; + aiptek->features.firmwareCode = ret; + + /* Query getXextension */ + if ((ret = aiptek_query(aiptek, 0x01, 0x00)) < 0) + return ret; + aiptek->inputdev.absmin[ABS_X] = 0; + aiptek->inputdev.absmax[ABS_X] = ret - 1; + + /* Query getYextension */ + if ((ret = aiptek_query(aiptek, 0x01, 0x01)) < 0) + return ret; + aiptek->inputdev.absmin[ABS_Y] = 0; + aiptek->inputdev.absmax[ABS_Y] = ret - 1; + + /* Query getPressureLevels */ + if ((ret = aiptek_query(aiptek, 0x08, 0x00)) < 0) + return ret; + aiptek->inputdev.absmin[ABS_PRESSURE] = 0; + aiptek->inputdev.absmax[ABS_PRESSURE] = ret - 1; + + /* Depending on whether we are in absolute or relative mode, we will + * do a switchToTablet(absolute) or switchToMouse(relative) command. + */ + if (aiptek->curSetting.coordinateMode == + AIPTEK_COORDINATE_ABSOLUTE_MODE) { + /* Execute switchToTablet */ + if ((ret = aiptek_command(aiptek, 0x10, 0x01)) < 0) { + return ret; + } + } else { + /* Execute switchToMouse */ + if ((ret = aiptek_command(aiptek, 0x10, 0x00)) < 0) { + return ret; + } } - /* Resolution500LPI */ - err = aiptek_command(dev, interface, 0x18, 0x04); - if (err) - goto error_out; + /* Enable the macro keys */ + if ((ret = aiptek_command(aiptek, 0x11, 0x02)) < 0) + return ret; +#if 0 + /* Execute FilterOn */ + if ((ret = aiptek_command(aiptek, 0x17, 0x00)) < 0) + return ret; +#endif + + /* Execute AutoGainOn */ + if ((ret = aiptek_command(aiptek, 0x12, 0xff)) < 0) + return ret; + + /* Reset the eventCount, so we track events from last (re)programming + */ + aiptek->diagnostic = AIPTEK_DIAGNOSTIC_NA; + aiptek->eventCount = 0; - /* SwitchToTablet */ - err = aiptek_command(dev, interface, 0x10, 0x01); - if (err) - goto error_out; + return 0; +} + +/*********************************************************************** + * Sysfs functions. Sysfs prefers that individually-tunable parameters + * exist in their separate pseudo-files. Summary data that is immutable + * may exist in a singular file so long as you don't define a writeable + * interface. + */ - aiptek->features = aiptek_features + id->driver_info; +/*********************************************************************** + * support the 'size' file -- display support + */ +static ssize_t show_tabletSize(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); - aiptek->dev.evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC) | - aiptek->features->evbit; + if (aiptek == NULL) + return 0; - aiptek->dev.absbit[0] |= BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE) | - BIT(ABS_MISC) | aiptek->features->absbit; + return snprintf(buf, PAGE_SIZE, "%dx%d\n", + aiptek->inputdev.absmax[ABS_X] + 1, + aiptek->inputdev.absmax[ABS_Y] + 1); +} - aiptek->dev.relbit[0] |= aiptek->features->relbit; +/* These structs define the sysfs files, param #1 is the name of the + * file, param 2 is the file permissions, param 3 & 4 are to the + * output generator and input parser routines. Absence of a routine is + * permitted -- it only means can't either 'cat' the file, or send data + * to it. + */ +static DEVICE_ATTR(size, S_IRUGO, show_tabletSize, NULL); - aiptek->dev.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | - BIT(BTN_MIDDLE) | aiptek->features->btnbit; +/*********************************************************************** + * support routines for the 'product_id' file + */ +static ssize_t show_tabletProductId(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); - aiptek->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_TOOL_PEN) | - BIT(BTN_TOOL_MOUSE) | BIT(BTN_TOUCH) | - BIT(BTN_STYLUS) | BIT(BTN_STYLUS2) | aiptek->features->digibit; + if (aiptek == NULL) + return 0; - aiptek->dev.mscbit[0] = BIT(MSC_SERIAL); + return snprintf(buf, PAGE_SIZE, "0x%04x\n", + aiptek->inputdev.id.product); +} - aiptek->dev.absmax[ABS_X] = aiptek->features->x_max; - aiptek->dev.absmax[ABS_Y] = aiptek->features->y_max; - aiptek->dev.absmax[ABS_PRESSURE] = aiptek->features->pressure_max - - aiptek->features->pressure_min; +static DEVICE_ATTR(product_id, S_IRUGO, show_tabletProductId, NULL); - aiptek->dev.absfuzz[ABS_X] = 0; - aiptek->dev.absfuzz[ABS_Y] = 0; +/*********************************************************************** + * support routines for the 'vendor_id' file + */ +static ssize_t show_tabletVendorId(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); - aiptek->dev.private = aiptek; - aiptek->dev.open = aiptek_open; - aiptek->dev.close = aiptek_close; + if (aiptek == NULL) + return 0; - aiptek->dev.name = aiptek->features->name; - aiptek->dev.id.bustype = BUS_USB; - aiptek->dev.id.vendor = dev->descriptor.idVendor; - aiptek->dev.id.product = dev->descriptor.idProduct; - aiptek->dev.id.version = dev->descriptor.bcdDevice; - aiptek->dev.dev = &intf->dev; - aiptek->usbdev = dev; + return snprintf(buf, PAGE_SIZE, "0x%04x\n", aiptek->inputdev.id.vendor); +} - endpoint = &intf->altsetting[0].endpoint[0].desc; +static DEVICE_ATTR(vendor_id, S_IRUGO, show_tabletVendorId, NULL); - if (aiptek->features->pktlen > 10) - BUG(); +/*********************************************************************** + * support routines for the 'vendor' file + */ +static ssize_t show_tabletManufacturer(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + int retval; - usb_fill_int_urb(aiptek->irq, dev, - usb_rcvintpipe(dev, endpoint->bEndpointAddress), - aiptek->data, aiptek->features->pktlen, - aiptek->features->irq, aiptek, endpoint->bInterval); - aiptek->irq->transfer_dma = aiptek->data_dma; - aiptek->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + if (aiptek == NULL) + return 0; - input_register_device(&aiptek->dev); + retval = snprintf(buf, PAGE_SIZE, "%s\n", aiptek->features.manuName); + return retval; +} - printk(KERN_INFO "input: %s on usb%d:%d\n", - aiptek->features->name, dev->bus->busnum, dev->devnum); +static DEVICE_ATTR(vendor, S_IRUGO, show_tabletManufacturer, NULL); - usb_set_intfdata(intf, aiptek); - return 0; +/*********************************************************************** + * support routines for the 'product' file + */ +static ssize_t show_tabletProduct(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + int retval; -error_out: - usb_free_urb(aiptek->irq); -error_out_nourb: - usb_buffer_free(dev, 10, aiptek->data, aiptek->data_dma); -error_out_nobuf: - kfree(aiptek); -error_out_noalloc: - return err; - + if (aiptek == NULL) + return 0; + + retval = snprintf(buf, PAGE_SIZE, "%s\n", aiptek->features.prodName); + return retval; } -static void -aiptek_disconnect(struct usb_interface *intf) +static DEVICE_ATTR(product, S_IRUGO, show_tabletProduct, NULL); + +/*********************************************************************** + * support routines for the 'pointer_mode' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletPointerMode(struct device *dev, char *buf) { - struct aiptek *aiptek = usb_get_intfdata (intf); + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; - usb_set_intfdata(intf, NULL); - if (aiptek) { - usb_unlink_urb(aiptek->irq); - input_unregister_device(&aiptek->dev); - usb_free_urb(aiptek->irq); - usb_buffer_free(interface_to_usbdev(intf), 10, aiptek->data, aiptek->data_dma); + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.pointerMode) { + case AIPTEK_POINTER_ONLY_STYLUS_MODE: + s = "stylus"; + break; + + case AIPTEK_POINTER_ONLY_MOUSE_MODE: + s = "mouse"; + break; + + case AIPTEK_POINTER_EITHER_MODE: + s = "either"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletPointerMode(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "stylus") == 0) { + aiptek->newSetting.pointerMode = + AIPTEK_POINTER_ONLY_STYLUS_MODE; + } else if (strcmp(buf, "mouse") == 0) { + aiptek->newSetting.pointerMode = AIPTEK_POINTER_ONLY_MOUSE_MODE; + } else if (strcmp(buf, "either") == 0) { + aiptek->newSetting.pointerMode = AIPTEK_POINTER_EITHER_MODE; + } + return count; +} + +static DEVICE_ATTR(pointer_mode, + S_IRUGO | S_IWUGO, + show_tabletPointerMode, store_tabletPointerMode); + +/*********************************************************************** + * support routines for the 'coordinate_mode' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletCoordinateMode(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.coordinateMode) { + case AIPTEK_COORDINATE_ABSOLUTE_MODE: + s = "absolute"; + break; + + case AIPTEK_COORDINATE_RELATIVE_MODE: + s = "relative"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletCoordinateMode(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "absolute") == 0) { + aiptek->newSetting.pointerMode = + AIPTEK_COORDINATE_ABSOLUTE_MODE; + } else if (strcmp(buf, "relative") == 0) { + aiptek->newSetting.pointerMode = + AIPTEK_COORDINATE_RELATIVE_MODE; + } + return count; +} + +static DEVICE_ATTR(coordinate_mode, + S_IRUGO | S_IWUGO, + show_tabletCoordinateMode, store_tabletCoordinateMode); + +/*********************************************************************** + * support routines for the 'tool_mode' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletToolMode(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (TOOL_BUTTON(aiptek->curSetting.toolMode)) { + case AIPTEK_TOOL_BUTTON_MOUSE_MODE: + s = "mouse"; + break; + + case AIPTEK_TOOL_BUTTON_ERASER_MODE: + s = "eraser"; + break; + + case AIPTEK_TOOL_BUTTON_PENCIL_MODE: + s = "pencil"; + break; + + case AIPTEK_TOOL_BUTTON_PEN_MODE: + s = "pen"; + break; + + case AIPTEK_TOOL_BUTTON_BRUSH_MODE: + s = "brush"; + break; + + case AIPTEK_TOOL_BUTTON_AIRBRUSH_MODE: + s = "airbrush"; + break; + + case AIPTEK_TOOL_BUTTON_LENS_MODE: + s = "lens"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletToolMode(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "mouse") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_MOUSE_MODE; + } else if (strcmp(buf, "eraser") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_ERASER_MODE; + } else if (strcmp(buf, "pencil") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_PENCIL_MODE; + } else if (strcmp(buf, "pen") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_PEN_MODE; + } else if (strcmp(buf, "brush") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_BRUSH_MODE; + } else if (strcmp(buf, "airbrush") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_AIRBRUSH_MODE; + } else if (strcmp(buf, "lens") == 0) { + aiptek->newSetting.toolMode = AIPTEK_TOOL_BUTTON_LENS_MODE; + } + + return count; +} + +static DEVICE_ATTR(tool_mode, + S_IRUGO | S_IWUGO, + show_tabletToolMode, store_tabletToolMode); + +/*********************************************************************** + * support routines for the 'xtilt' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletXtilt(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (aiptek->curSetting.xTilt == AIPTEK_TILT_DISABLE) { + return snprintf(buf, PAGE_SIZE, "disable\n"); + } else { + return snprintf(buf, PAGE_SIZE, "%d\n", + aiptek->curSetting.xTilt); + } +} + +static ssize_t +store_tabletXtilt(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + int x; + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "disable") == 0) { + aiptek->newSetting.xTilt = AIPTEK_TILT_DISABLE; + } else { + x = (int)simple_strtol(buf, 0, 10); + if (x >= AIPTEK_TILT_MIN && x <= AIPTEK_TILT_MAX) { + aiptek->newSetting.xTilt = x; + } + } + return count; +} + +static DEVICE_ATTR(xtilt, + S_IRUGO | S_IWUGO, show_tabletXtilt, store_tabletXtilt); + +/*********************************************************************** + * support routines for the 'ytilt' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletYtilt(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (aiptek->curSetting.yTilt == AIPTEK_TILT_DISABLE) { + return snprintf(buf, PAGE_SIZE, "disable\n"); + } else { + return snprintf(buf, PAGE_SIZE, "%d\n", + aiptek->curSetting.yTilt); + } +} + +static ssize_t +store_tabletYtilt(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + int y; + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "disable") == 0) { + aiptek->newSetting.yTilt = AIPTEK_TILT_DISABLE; + } else { + y = (int)simple_strtol(buf, 0, 10); + if (y >= AIPTEK_TILT_MIN && y <= AIPTEK_TILT_MAX) { + aiptek->newSetting.yTilt = y; + } + } + return count; +} + +static DEVICE_ATTR(ytilt, + S_IRUGO | S_IWUGO, show_tabletYtilt, store_tabletYtilt); + +/*********************************************************************** + * support routines for the 'jitter' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletJitterDelay(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "%d\n", aiptek->curSetting.jitterDelay); +} + +static ssize_t +store_tabletJitterDelay(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + aiptek->newSetting.jitterDelay = (int)simple_strtol(buf, 0, 10); + return count; +} + +static DEVICE_ATTR(jitter, + S_IRUGO | S_IWUGO, + show_tabletJitterDelay, store_tabletJitterDelay); + +/*********************************************************************** + * support routines for the 'delay' file. Note that this file + * both displays current setting and allows reprogramming. + */ +static ssize_t show_tabletProgrammableDelay(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "%d\n", + aiptek->curSetting.programmableDelay); +} + +static ssize_t +store_tabletProgrammableDelay(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + aiptek->newSetting.programmableDelay = (int)simple_strtol(buf, 0, 10); + return count; +} + +static DEVICE_ATTR(delay, + S_IRUGO | S_IWUGO, + show_tabletProgrammableDelay, store_tabletProgrammableDelay); + +/*********************************************************************** + * support routines for the 'input_path' file. Note that this file + * only displays current setting. + */ +static ssize_t show_tabletInputDevice(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "/dev/input/%s\n", + aiptek->features.inputPath); +} + +static DEVICE_ATTR(input_path, S_IRUGO, show_tabletInputDevice, NULL); + +/*********************************************************************** + * support routines for the 'event_count' file. Note that this file + * only displays current setting. + */ +static ssize_t show_tabletEventsReceived(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "%ld\n", aiptek->eventCount); +} + +static DEVICE_ATTR(event_count, S_IRUGO, show_tabletEventsReceived, NULL); + +/*********************************************************************** + * support routines for the 'diagnostic' file. Note that this file + * only displays current setting. + */ +static ssize_t show_tabletDiagnosticMessage(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *retMsg; + + if (aiptek == NULL) + return 0; + + switch (aiptek->diagnostic) { + case AIPTEK_DIAGNOSTIC_NA: + retMsg = "no errors\n"; + break; + + case AIPTEK_DIAGNOSTIC_SENDING_RELATIVE_IN_ABSOLUTE: + retMsg = "Error: receiving relative reports\n"; + break; + + case AIPTEK_DIAGNOSTIC_SENDING_ABSOLUTE_IN_RELATIVE: + retMsg = "Error: receiving absolute reports\n"; + break; + + case AIPTEK_DIAGNOSTIC_TOOL_DISALLOWED: + if (aiptek->curSetting.pointerMode == + AIPTEK_POINTER_ONLY_MOUSE_MODE) { + retMsg = "Error: receiving stylus reports\n"; + } else { + retMsg = "Error: receiving mouse reports\n"; + } + break; + + default: + return 0; + } + return snprintf(buf, PAGE_SIZE, retMsg); +} + +static DEVICE_ATTR(diagnostic, S_IRUGO, show_tabletDiagnosticMessage, NULL); + +/*********************************************************************** + * support routines for the 'stylus_upper' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletStylusUpper(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.stylusButtonUpper) { + case AIPTEK_STYLUS_UPPER_BUTTON: + s = "upper"; + break; + + case AIPTEK_STYLUS_LOWER_BUTTON: + s = "lower"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletStylusUpper(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "upper") == 0) { + aiptek->newSetting.stylusButtonUpper = + AIPTEK_STYLUS_UPPER_BUTTON; + } else if (strcmp(buf, "lower") == 0) { + aiptek->newSetting.stylusButtonUpper = + AIPTEK_STYLUS_LOWER_BUTTON; + } + return count; +} + +static DEVICE_ATTR(stylus_upper, + S_IRUGO | S_IWUGO, + show_tabletStylusUpper, store_tabletStylusUpper); + +/*********************************************************************** + * support routines for the 'stylus_lower' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletStylusLower(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.stylusButtonLower) { + case AIPTEK_STYLUS_UPPER_BUTTON: + s = "upper"; + break; + + case AIPTEK_STYLUS_LOWER_BUTTON: + s = "lower"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletStylusLower(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "upper") == 0) { + aiptek->newSetting.stylusButtonLower = + AIPTEK_STYLUS_UPPER_BUTTON; + } else if (strcmp(buf, "lower") == 0) { + aiptek->newSetting.stylusButtonLower = + AIPTEK_STYLUS_LOWER_BUTTON; + } + return count; +} + +static DEVICE_ATTR(stylus_lower, + S_IRUGO | S_IWUGO, + show_tabletStylusLower, store_tabletStylusLower); + +/*********************************************************************** + * support routines for the 'mouse_left' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletMouseLeft(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.mouseButtonLeft) { + case AIPTEK_MOUSE_LEFT_BUTTON: + s = "left"; + break; + + case AIPTEK_MOUSE_MIDDLE_BUTTON: + s = "middle"; + break; + + case AIPTEK_MOUSE_RIGHT_BUTTON: + s = "right"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletMouseLeft(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "left") == 0) { + aiptek->newSetting.mouseButtonLeft = AIPTEK_MOUSE_LEFT_BUTTON; + } else if (strcmp(buf, "middle") == 0) { + aiptek->newSetting.mouseButtonLeft = AIPTEK_MOUSE_MIDDLE_BUTTON; + } else if (strcmp(buf, "right") == 0) { + aiptek->newSetting.mouseButtonLeft = AIPTEK_MOUSE_RIGHT_BUTTON; + } + return count; +} + +static DEVICE_ATTR(mouse_left, + S_IRUGO | S_IWUGO, + show_tabletMouseLeft, store_tabletMouseLeft); + +/*********************************************************************** + * support routines for the 'mouse_middle' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletMouseMiddle(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.mouseButtonMiddle) { + case AIPTEK_MOUSE_LEFT_BUTTON: + s = "left"; + break; + + case AIPTEK_MOUSE_MIDDLE_BUTTON: + s = "middle"; + break; + + case AIPTEK_MOUSE_RIGHT_BUTTON: + s = "right"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletMouseMiddle(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "left") == 0) { + aiptek->newSetting.mouseButtonMiddle = AIPTEK_MOUSE_LEFT_BUTTON; + } else if (strcmp(buf, "middle") == 0) { + aiptek->newSetting.mouseButtonMiddle = + AIPTEK_MOUSE_MIDDLE_BUTTON; + } else if (strcmp(buf, "right") == 0) { + aiptek->newSetting.mouseButtonMiddle = + AIPTEK_MOUSE_RIGHT_BUTTON; + } + return count; +} + +static DEVICE_ATTR(mouse_middle, + S_IRUGO | S_IWUGO, + show_tabletMouseMiddle, store_tabletMouseMiddle); + +/*********************************************************************** + * support routines for the 'mouse_right' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletMouseRight(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + char *s; + + if (aiptek == NULL) + return 0; + + switch (aiptek->curSetting.mouseButtonRight) { + case AIPTEK_MOUSE_LEFT_BUTTON: + s = "left"; + break; + + case AIPTEK_MOUSE_MIDDLE_BUTTON: + s = "middle"; + break; + + case AIPTEK_MOUSE_RIGHT_BUTTON: + s = "right"; + break; + + default: + s = "unknown"; + break; + } + return snprintf(buf, PAGE_SIZE, "%s\n", s); +} + +static ssize_t +store_tabletMouseRight(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (strcmp(buf, "left") == 0) { + aiptek->newSetting.mouseButtonRight = AIPTEK_MOUSE_LEFT_BUTTON; + } else if (strcmp(buf, "middle") == 0) { + aiptek->newSetting.mouseButtonRight = + AIPTEK_MOUSE_MIDDLE_BUTTON; + } else if (strcmp(buf, "right") == 0) { + aiptek->newSetting.mouseButtonRight = AIPTEK_MOUSE_RIGHT_BUTTON; + } + return count; +} + +static DEVICE_ATTR(mouse_right, + S_IRUGO | S_IWUGO, + show_tabletMouseRight, store_tabletMouseRight); + +/*********************************************************************** + * support routines for the 'wheel' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletWheel(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + if (aiptek->curSetting.wheel == AIPTEK_WHEEL_DISABLE) { + return snprintf(buf, PAGE_SIZE, "disable\n"); + } else { + return snprintf(buf, PAGE_SIZE, "%d\n", + aiptek->curSetting.wheel); + } +} + +static ssize_t +store_tabletWheel(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + aiptek->newSetting.wheel = (int)simple_strtol(buf, 0, 10); + return count; +} + +static DEVICE_ATTR(wheel, + S_IRUGO | S_IWUGO, show_tabletWheel, store_tabletWheel); + +/*********************************************************************** + * support routines for the 'execute' file. Note that this file + * both displays current setting and allows for setting changing. + */ +static ssize_t show_tabletExecute(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + /* There is nothing useful to display, so a one-line manual + * is in order... + */ + return snprintf(buf, PAGE_SIZE, + "Write anything to this file to program your tablet.\n"); +} + +static ssize_t +store_tabletExecute(struct device *dev, const char *buf, size_t count) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + /* We do not care what you write to this file. Merely the action + * of writing to this file triggers a tablet reprogramming. + */ + memcpy(&aiptek->curSetting, &aiptek->newSetting, + sizeof(struct aiptek_settings)); + + if (aiptek_program_tablet(aiptek) < 0) + return -EIO; + + return count; +} + +static DEVICE_ATTR(execute, + S_IRUGO | S_IWUGO, show_tabletExecute, store_tabletExecute); + +/*********************************************************************** + * support routines for the 'odm_code' file. Note that this file + * only displays current setting. + */ +static ssize_t show_tabletODMCode(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "0x%04x\n", aiptek->features.odmCode); +} + +static DEVICE_ATTR(odm_code, S_IRUGO, show_tabletODMCode, NULL); + +/*********************************************************************** + * support routines for the 'model_code' file. Note that this file + * only displays current setting. + */ +static ssize_t show_tabletModelCode(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "0x%04x\n", aiptek->features.modelCode); +} + +static DEVICE_ATTR(model_code, S_IRUGO, show_tabletModelCode, NULL); + +/*********************************************************************** + * support routines for the 'firmware_code' file. Note that this file + * only displays current setting. + */ +static ssize_t show_firmwareCode(struct device *dev, char *buf) +{ + struct aiptek *aiptek = dev_get_drvdata(dev); + + if (aiptek == NULL) + return 0; + + return snprintf(buf, PAGE_SIZE, "%04x\n", + aiptek->features.firmwareCode); +} + +static DEVICE_ATTR(firmware_code, S_IRUGO, show_firmwareCode, NULL); + +/*********************************************************************** + * This routine removes all existing sysfs files managed by this device + * driver. + */ +static void aiptek_delete_files(struct device *dev) +{ + device_remove_file(dev, &dev_attr_size); + device_remove_file(dev, &dev_attr_product_id); + device_remove_file(dev, &dev_attr_vendor_id); + device_remove_file(dev, &dev_attr_vendor); + device_remove_file(dev, &dev_attr_product); + device_remove_file(dev, &dev_attr_pointer_mode); + device_remove_file(dev, &dev_attr_coordinate_mode); + device_remove_file(dev, &dev_attr_tool_mode); + device_remove_file(dev, &dev_attr_xtilt); + device_remove_file(dev, &dev_attr_ytilt); + device_remove_file(dev, &dev_attr_jitter); + device_remove_file(dev, &dev_attr_delay); + device_remove_file(dev, &dev_attr_input_path); + device_remove_file(dev, &dev_attr_event_count); + device_remove_file(dev, &dev_attr_diagnostic); + device_remove_file(dev, &dev_attr_odm_code); + device_remove_file(dev, &dev_attr_model_code); + device_remove_file(dev, &dev_attr_firmware_code); + device_remove_file(dev, &dev_attr_stylus_lower); + device_remove_file(dev, &dev_attr_stylus_upper); + device_remove_file(dev, &dev_attr_mouse_left); + device_remove_file(dev, &dev_attr_mouse_middle); + device_remove_file(dev, &dev_attr_mouse_right); + device_remove_file(dev, &dev_attr_wheel); + device_remove_file(dev, &dev_attr_execute); +} + +/*********************************************************************** + * This routine creates the sysfs files managed by this device + * driver. + */ +static int aiptek_add_files(struct device *dev) +{ + int ret; + + if ((ret = device_create_file(dev, &dev_attr_size)) || + (ret = device_create_file(dev, &dev_attr_product_id)) || + (ret = device_create_file(dev, &dev_attr_vendor_id)) || + (ret = device_create_file(dev, &dev_attr_vendor)) || + (ret = device_create_file(dev, &dev_attr_product)) || + (ret = device_create_file(dev, &dev_attr_pointer_mode)) || + (ret = device_create_file(dev, &dev_attr_coordinate_mode)) || + (ret = device_create_file(dev, &dev_attr_tool_mode)) || + (ret = device_create_file(dev, &dev_attr_xtilt)) || + (ret = device_create_file(dev, &dev_attr_ytilt)) || + (ret = device_create_file(dev, &dev_attr_jitter)) || + (ret = device_create_file(dev, &dev_attr_delay)) || + (ret = device_create_file(dev, &dev_attr_input_path)) || + (ret = device_create_file(dev, &dev_attr_event_count)) || + (ret = device_create_file(dev, &dev_attr_diagnostic)) || + (ret = device_create_file(dev, &dev_attr_odm_code)) || + (ret = device_create_file(dev, &dev_attr_model_code)) || + (ret = device_create_file(dev, &dev_attr_firmware_code)) || + (ret = device_create_file(dev, &dev_attr_stylus_lower)) || + (ret = device_create_file(dev, &dev_attr_stylus_upper)) || + (ret = device_create_file(dev, &dev_attr_mouse_left)) || + (ret = device_create_file(dev, &dev_attr_mouse_middle)) || + (ret = device_create_file(dev, &dev_attr_mouse_right)) || + (ret = device_create_file(dev, &dev_attr_wheel)) || + (ret = device_create_file(dev, &dev_attr_execute))) { + err("aiptek: killing own sysfs device files\n"); + aiptek_delete_files(dev); + } + return ret; +} + +/*********************************************************************** + * This routine is called when a tablet has been identified. It basically + * sets up the tablet and the driver's internal structures. + */ +static int +aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id) +{ + struct usb_device *usbdev = interface_to_usbdev(intf); + struct usb_endpoint_descriptor *endpoint; + struct aiptek *aiptek; + struct input_dev *inputdev; + struct input_handle *inputhandle; + struct list_head *node, *next; + char path[64 + 1]; + int i; + int speeds[] = { 0, + AIPTEK_PROGRAMMABLE_DELAY_50, + AIPTEK_PROGRAMMABLE_DELAY_400, + AIPTEK_PROGRAMMABLE_DELAY_25, + AIPTEK_PROGRAMMABLE_DELAY_100, + AIPTEK_PROGRAMMABLE_DELAY_200, + AIPTEK_PROGRAMMABLE_DELAY_300 + }; + + /* programmableDelay is where the command-line specified + * delay is kept. We make it the first element of speeds[], + * so therefore, your override speed is tried first, then the + * remainder. Note that the default value of 400ms will be tried + * if you do not specify any command line parameter. + */ + speeds[0] = programmableDelay; + + if ((aiptek = kmalloc(sizeof(struct aiptek), GFP_KERNEL)) == NULL) + return -ENOMEM; + memset(aiptek, 0, sizeof(struct aiptek)); + + aiptek->data = usb_buffer_alloc(usbdev, AIPTEK_PACKET_LENGTH, + SLAB_ATOMIC, &aiptek->data_dma); + if (aiptek->data == NULL) { kfree(aiptek); + return -ENOMEM; + } + + aiptek->urb = usb_alloc_urb(0, GFP_KERNEL); + if (aiptek->urb == NULL) { + usb_buffer_free(usbdev, AIPTEK_PACKET_LENGTH, aiptek->data, + aiptek->data_dma); + kfree(aiptek); + return -ENOMEM; + } + + /* Set up the curSettings struct. Said struct contains the current + * programmable parameters. The newSetting struct contains changes + * the user makes to the settings via the sysfs interface. Those + * changes are not "committed" to curSettings until the user + * writes to the sysfs/.../execute file. + */ + aiptek->curSetting.pointerMode = AIPTEK_POINTER_EITHER_MODE; + aiptek->curSetting.coordinateMode = AIPTEK_COORDINATE_ABSOLUTE_MODE; + aiptek->curSetting.toolMode = AIPTEK_TOOL_BUTTON_PEN_MODE; + aiptek->curSetting.xTilt = AIPTEK_TILT_DISABLE; + aiptek->curSetting.yTilt = AIPTEK_TILT_DISABLE; + aiptek->curSetting.mouseButtonLeft = AIPTEK_MOUSE_LEFT_BUTTON; + aiptek->curSetting.mouseButtonMiddle = AIPTEK_MOUSE_MIDDLE_BUTTON; + aiptek->curSetting.mouseButtonRight = AIPTEK_MOUSE_RIGHT_BUTTON; + aiptek->curSetting.stylusButtonUpper = AIPTEK_STYLUS_UPPER_BUTTON; + aiptek->curSetting.stylusButtonLower = AIPTEK_STYLUS_LOWER_BUTTON; + aiptek->curSetting.jitterDelay = jitterDelay; + aiptek->curSetting.programmableDelay = programmableDelay; + + /* Both structs should have equivalent settings + */ + memcpy(&aiptek->newSetting, &aiptek->curSetting, + sizeof(struct aiptek_settings)); + + /* Now program the capacities of the tablet, in terms of being + * an input device. + */ + aiptek->inputdev.evbit[0] |= BIT(EV_KEY) + | BIT(EV_ABS) + | BIT(EV_REL) + | BIT(EV_MSC); + + aiptek->inputdev.absbit[0] |= + (BIT(ABS_X) | + BIT(ABS_Y) | + BIT(ABS_PRESSURE) | + BIT(ABS_TILT_X) | + BIT(ABS_TILT_Y) | BIT(ABS_WHEEL) | BIT(ABS_MISC)); + + aiptek->inputdev.relbit[0] |= + (BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL) | BIT(REL_MISC)); + + aiptek->inputdev.keybit[LONG(BTN_LEFT)] |= + (BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE)); + + aiptek->inputdev.keybit[LONG(BTN_DIGI)] |= + (BIT(BTN_TOOL_PEN) | + BIT(BTN_TOOL_RUBBER) | + BIT(BTN_TOOL_PENCIL) | + BIT(BTN_TOOL_AIRBRUSH) | + BIT(BTN_TOOL_BRUSH) | + BIT(BTN_TOOL_MOUSE) | + BIT(BTN_TOOL_LENS) | + BIT(BTN_TOUCH) | BIT(BTN_STYLUS) | BIT(BTN_STYLUS2)); + + aiptek->inputdev.mscbit[0] = BIT(MSC_SERIAL); + + /* Programming the tablet macro keys needs to be done with a for loop + * as the keycodes are discontiguous. + */ + for (i = 0; i < sizeof(macroKeyEvents) / sizeof(macroKeyEvents[0]); ++i) + set_bit(macroKeyEvents[i], aiptek->inputdev.keybit); + + /* Set up client data, pointers to open and close routines + * for the input device. + */ + aiptek->inputdev.private = aiptek; + aiptek->inputdev.open = aiptek_open; + aiptek->inputdev.close = aiptek_close; + + /* Determine the usb devices' physical path. + * Asketh not why we always pretend we're using "../input0", + * but I suspect this will have to be refactored one + * day if a single USB device can be a keyboard & a mouse + * & a tablet, and the inputX number actually will tell + * us something... + */ + if (usb_make_path(usbdev, path, 64) > 0) + sprintf(aiptek->features.usbPath, "%s/input0", path); + + /* Program the input device coordinate capacities. We do not yet + * know what maximum X, Y, and Z values are, so we're putting fake + * values in. Later, we'll ask the tablet to put in the correct + * values. + */ + aiptek->inputdev.absmin[ABS_X] = 0; + aiptek->inputdev.absmax[ABS_X] = 2999; + aiptek->inputdev.absmin[ABS_Y] = 0; + aiptek->inputdev.absmax[ABS_Y] = 2249; + aiptek->inputdev.absmin[ABS_PRESSURE] = 0; + aiptek->inputdev.absmax[ABS_PRESSURE] = 511; + aiptek->inputdev.absmin[ABS_TILT_X] = AIPTEK_TILT_MIN; + aiptek->inputdev.absmax[ABS_TILT_X] = AIPTEK_TILT_MAX; + aiptek->inputdev.absmin[ABS_TILT_Y] = AIPTEK_TILT_MIN; + aiptek->inputdev.absmax[ABS_TILT_Y] = AIPTEK_TILT_MAX; + aiptek->inputdev.absmin[ABS_WHEEL] = AIPTEK_WHEEL_MIN; + aiptek->inputdev.absmax[ABS_WHEEL] = AIPTEK_WHEEL_MAX - 1; + aiptek->inputdev.absfuzz[ABS_X] = 0; + aiptek->inputdev.absfuzz[ABS_Y] = 0; + aiptek->inputdev.absfuzz[ABS_PRESSURE] = 0; + aiptek->inputdev.absfuzz[ABS_TILT_X] = 0; + aiptek->inputdev.absfuzz[ABS_TILT_Y] = 0; + aiptek->inputdev.absfuzz[ABS_WHEEL] = 0; + aiptek->inputdev.absflat[ABS_X] = 0; + aiptek->inputdev.absflat[ABS_Y] = 0; + aiptek->inputdev.absflat[ABS_PRESSURE] = 0; + aiptek->inputdev.absflat[ABS_TILT_X] = 0; + aiptek->inputdev.absflat[ABS_TILT_Y] = 0; + aiptek->inputdev.absflat[ABS_WHEEL] = 0; + aiptek->inputdev.name = "Aiptek"; + aiptek->inputdev.phys = aiptek->features.usbPath; + aiptek->inputdev.id.bustype = BUS_USB; + aiptek->inputdev.id.vendor = usbdev->descriptor.idVendor; + aiptek->inputdev.id.product = usbdev->descriptor.idProduct; + aiptek->inputdev.id.version = usbdev->descriptor.bcdDevice; + + aiptek->usbdev = usbdev; + aiptek->ifnum = intf->altsetting[0].desc.bInterfaceNumber; + aiptek->inDelay = 0; + aiptek->endDelay = 0; + aiptek->previousJitterable = 0; + + endpoint = &intf->altsetting[0].endpoint[0].desc; + + /* Go set up our URB, which is called when the tablet receives + * input. + */ + usb_fill_int_urb(aiptek->urb, + aiptek->usbdev, + usb_rcvintpipe(aiptek->usbdev, + endpoint->bEndpointAddress), + aiptek->data, 8, aiptek_irq, aiptek, + endpoint->bInterval); + + aiptek->urb->transfer_dma = aiptek->data_dma; + aiptek->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + + /* Register the tablet as an Input Device + */ + input_register_device(&aiptek->inputdev); + + /* Go and decode the USB representation of the tablet's manufacturer + * name and product name. They only change once every hotplug event, + * which is why we put it here instead of in the sysfs interface. + */ + usb_string(usbdev, + usbdev->descriptor.iManufacturer, + aiptek->features.manuName, + sizeof(aiptek->features.manuName)); + usb_string(usbdev, + usbdev->descriptor.iProduct, + aiptek->features.prodName, + sizeof(aiptek->features.prodName)); + + /* We now will look for the evdev device which is mapped to + * the tablet. The partial name is kept in the link list of + * input_handles associated with this input device. + * What identifies an evdev input_handler is that it begins + * with 'event', continues with a digit, and that in turn + * is mapped to /{devfs}/input/eventN. + */ + inputdev = &aiptek->inputdev; + list_for_each_safe(node, next, &inputdev->h_list) { + inputhandle = to_handle(node); + if (strncmp(inputhandle->name, "event", 5) == 0) { + strcpy(aiptek->features.inputPath, inputhandle->name); + break; + } + } + + info("input: Aiptek on %s (%s)\n", path, aiptek->features.inputPath); + + /* Program the tablet. This sets the tablet up in the mode + * specified in newSetting, and also queries the tablet's + * physical capacities. + * + * Sanity check: if a tablet doesn't like the slow programmatic + * delay, we often get sizes of 0x0. Let's use that as an indicator + * to try faster delays, up to 25 ms. If that logic fails, well, you'll + * have to explain to us how your tablet thinks it's 0x0, and yet that's + * not an error :-) + */ + + for (i = 0; i < sizeof(speeds) / sizeof(speeds[0]); ++i) { + aiptek->curSetting.programmableDelay = speeds[i]; + (void)aiptek_program_tablet(aiptek); + if (aiptek->inputdev.absmax[ABS_X] > 0) { + info("input: Aiptek using %d ms programming speed\n", + aiptek->curSetting.programmableDelay); + break; + } } + + /* Associate this driver's struct with the usb interface. + */ + usb_set_intfdata(intf, aiptek); + + /* Set up the sysfs files + */ + aiptek_add_files(&intf->dev); + + /* Make sure the evdev module is loaded. Assuming evdev IS a module :-) + */ + if (request_module("evdev") != 0) + info("aiptek: error loading 'evdev' module"); + + return 0; } +/* Forward declaration */ +static void aiptek_disconnect(struct usb_interface *intf); + static struct usb_driver aiptek_driver = { - .owner = THIS_MODULE, - .name = "aiptek", - .probe = aiptek_probe, - .disconnect = aiptek_disconnect, - .id_table = aiptek_ids, + .owner = THIS_MODULE, + .name = "aiptek", + .probe = aiptek_probe, + .disconnect = aiptek_disconnect, + .id_table = aiptek_ids, }; -static int __init -aiptek_init(void) +/*********************************************************************** + * Deal with tablet disconnecting from the system. + */ +static void aiptek_disconnect(struct usb_interface *intf) +{ + struct aiptek *aiptek = usb_get_intfdata(intf); + + /* Disassociate driver's struct with usb interface + */ + usb_set_intfdata(intf, NULL); + if (aiptek != NULL) { + /* Free & unhook everything from the system. + */ + usb_unlink_urb(aiptek->urb); + input_unregister_device(&aiptek->inputdev); + aiptek_delete_files(&intf->dev); + usb_free_urb(aiptek->urb); + usb_buffer_free(interface_to_usbdev(intf), + AIPTEK_PACKET_LENGTH, + aiptek->data, aiptek->data_dma); + kfree(aiptek); + aiptek = NULL; + } +} + +static int __init aiptek_init(void) { int result = usb_register(&aiptek_driver); if (result == 0) { - info(DRIVER_VERSION " " DRIVER_AUTHOR); + info(DRIVER_VERSION ": " DRIVER_AUTHOR); info(DRIVER_DESC); } return result; } -static void __exit -aiptek_exit(void) +static void __exit aiptek_exit(void) { usb_deregister(&aiptek_driver); } + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); + +MODULE_PARM(programmableDelay, "i"); +MODULE_PARM_DESC(programmableDelay, "delay used during tablet programming"); +MODULE_PARM(jitterDelay, "i"); +MODULE_PARM_DESC(jitterDelay, "stylus/mouse settlement delay"); module_init(aiptek_init); module_exit(aiptek_exit); diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c --- a/drivers/usb/input/hid-core.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/input/hid-core.c Tue May 18 23:38:07 2004 @@ -958,7 +958,7 @@ * Create a report. */ -void hid_output_report(struct hid_report *report, __u8 *data) +static void hid_output_report(struct hid_report *report, __u8 *data) { unsigned n; @@ -1038,7 +1038,8 @@ return -1; } -int hid_find_field_in_report(struct hid_report *report, __u32 wanted_usage, struct hid_field **field) +#if 0 +static int hid_find_field_in_report(struct hid_report *report, __u32 wanted_usage, struct hid_field **field) { int i, j; @@ -1051,6 +1052,7 @@ return -1; } +#endif static int hid_submit_out(struct hid_device *hid) { @@ -1357,7 +1359,13 @@ #define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001 #define USB_VENDOR_ID_AIPTEK 0x08ca -#define USB_DEVICE_ID_AIPTEK_6000 0x0020 +#define USB_DEVICE_ID_AIPTEK_01 0x0001 +#define USB_DEVICE_ID_AIPTEK_10 0x0010 +#define USB_DEVICE_ID_AIPTEK_20 0x0020 +#define USB_DEVICE_ID_AIPTEK_21 0x0021 +#define USB_DEVICE_ID_AIPTEK_22 0x0022 +#define USB_DEVICE_ID_AIPTEK_23 0x0023 +#define USB_DEVICE_ID_AIPTEK_24 0x0024 #define USB_VENDOR_ID_GRIFFIN 0x077d #define USB_DEVICE_ID_POWERMATE 0x0410 @@ -1412,13 +1420,27 @@ #define USB_VENDOR_ID_CHIC 0x05fe #define USB_DEVICE_ID_CHIC_GAMEPAD 0x0014 -struct hid_blacklist { +#define USB_VENDOR_ID_GLAB 0x06c2 +#define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038 +#define USB_DEVICE_ID_1_PHIDGETSERVO_30 0x0039 + +#define USB_VENDOR_ID_WISEGROUP 0x0925 +#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101 +#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104 + +static struct hid_blacklist { __u16 idVendor; __u16 idProduct; unsigned quirks; } hid_blacklist[] = { - { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_6000, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE }, @@ -1459,6 +1481,10 @@ { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, + { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, @@ -1767,7 +1793,7 @@ static struct usb_driver hid_driver = { .owner = THIS_MODULE, - .name = "hid", + .name = "usbhid", .probe = hid_probe, .disconnect = hid_disconnect, .id_table = hid_usb_ids, diff -Nru a/drivers/usb/input/kbtab.c b/drivers/usb/input/kbtab.c --- a/drivers/usb/input/kbtab.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/input/kbtab.c Tue May 18 23:38:05 2004 @@ -95,7 +95,7 @@ __FUNCTION__, retval); } -struct usb_device_id kbtab_ids[] = { +static struct usb_device_id kbtab_ids[] = { { USB_DEVICE(USB_VENDOR_ID_KBGEAR, 0x1001), .driver_info = 0 }, { } }; diff -Nru a/drivers/usb/input/mtouchusb.c b/drivers/usb/input/mtouchusb.c --- a/drivers/usb/input/mtouchusb.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/input/mtouchusb.c Tue May 18 23:38:07 2004 @@ -28,6 +28,12 @@ * Complete rewrite using Linux Input in 2.6.3 * Unfortunately no calibration support at this time * + * 1.4 04/25/2004 (TEJ) tejohnson@yahoo.com + * Changed reset from standard USB dev reset to vendor reset + * Changed data sent to host from compensated to raw coordinates + * Eliminated vendor/product module params + * Performed multiple successfull tests with an EXII-5010UC + * *****************************************************************************/ #include @@ -45,25 +51,28 @@ #include #include -#define MTOUCHUSB_MIN_XC 0xc8 -#define MTOUCHUSB_MAX_XC 0xff78 +#define MTOUCHUSB_MIN_XC 0x0 +#define MTOUCHUSB_MAX_XC 0x4000 #define MTOUCHUSB_XC_FUZZ 0x0 #define MTOUCHUSB_XC_FLAT 0x0 #define MTOUCHUSB_MIN_YC 0x0 -#define MTOUCHUSB_MAX_YC 0xff78 +#define MTOUCHUSB_MAX_YC 0x4000 #define MTOUCHUSB_YC_FUZZ 0x0 #define MTOUCHUSB_YC_FLAT 0x0 -#define MTOUCHUSB_ASYC_REPORT 1 -#define MTOUCHUSB_REPORT_SIZE_DATA 11 + +#define MTOUCHUSB_ASYNC_REPORT 1 +#define MTOUCHUSB_RESET 7 +#define MTOUCHUSB_REPORT_DATA_SIZE 11 #define MTOUCHUSB_REQ_CTRLLR_ID 10 -#define MTOUCHUSB_GET_XC(data) (data[4]<<8 | data[3]) -#define MTOUCHUSB_GET_YC(data) (data[6]<<8 | data[5]) +#define MTOUCHUSB_GET_XC(data) (data[8]<<8 | data[7]) +#define MTOUCHUSB_GET_YC(data) (data[10]<<8 | data[9]) #define MTOUCHUSB_GET_TOUCHED(data) ((data[2] & 0x40) ? 1:0) -#define DRIVER_VERSION "v0.1" +#define DRIVER_VERSION "v1.4" #define DRIVER_AUTHOR "Todd E. Johnson, tejohnson@yahoo.com" -#define DRIVER_DESC "Microtouch USB HID Touchscreen Driver" +#define DRIVER_DESC "3M USB Touchscreen Driver" +#define DRIVER_LICENSE "GPL" struct mtouch_usb { unsigned char *data; @@ -76,11 +85,9 @@ char phys[64]; }; -static __s32 vendor=-1, product=-1; - static struct usb_device_id mtouchusb_devices [] = { - { USB_DEVICE(0x0596, 0x0001) }, /* 3M (Formerly MicroTouch) 14-206 */ - { } /* Terminating entry */ + { USB_DEVICE(0x0596, 0x0001) }, + { } }; static void mtouchusb_irq(struct urb *urb, struct pt_regs *regs) @@ -135,8 +142,10 @@ mtouch->irq->dev = mtouch->udev; - if (usb_submit_urb (mtouch->irq, GFP_ATOMIC)) + if (usb_submit_urb (mtouch->irq, GFP_ATOMIC)) { + mtouch->open--; return -EIO; + } return 0; } @@ -153,7 +162,7 @@ { dbg("%s - called", __FUNCTION__); - mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_SIZE_DATA, + mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_DATA_SIZE, SLAB_ATOMIC, &mtouch->data_dma); if (!mtouch->data) @@ -167,7 +176,7 @@ dbg("%s - called", __FUNCTION__); if (mtouch->data) - usb_buffer_free(udev, MTOUCHUSB_REPORT_SIZE_DATA, + usb_buffer_free(udev, MTOUCHUSB_REPORT_DATA_SIZE, mtouch->data, mtouch->data_dma); } @@ -180,41 +189,8 @@ char path[64]; char *buf; int nRet; - int ix; - char valid_device = 0; dbg("%s - called", __FUNCTION__); - if (vendor != -1 && product != -1) { - info("%s - User specified USB Touch -- Vend:Prod - %x:%x", - __FUNCTION__, vendor, product); - } - - for (ix = 0; ix < sizeof (mtouchusb_devices) / - sizeof (struct usb_device_id); ix++) { - if ((udev->descriptor.idVendor == - mtouchusb_devices [ix].idVendor) && - (udev->descriptor.idProduct == - mtouchusb_devices [ix].idProduct)) { - valid_device = 1; - break; - } - } - - if (udev->descriptor.idVendor == vendor && - udev->descriptor.idProduct == product) { /* User specified */ - valid_device = 1; - } - - if (!valid_device) { - err("%s - No valid device!", __FUNCTION__); - return -EIO; - } - - if (udev->descriptor.bNumConfigurations != 1) { - err("%s - Only one device configuration is supported.", - __FUNCTION__); - return -EIO; - } dbg("%s - setting interface", __FUNCTION__); interface = intf->cur_altsetting; @@ -222,11 +198,6 @@ dbg("%s - setting endpoint", __FUNCTION__); endpoint = &interface->endpoint[0].desc; - if (interface->desc.bNumEndpoints != 1) { - err("%s - Only one endpoint is supported.", __FUNCTION__); - return -EIO; - } - if (!(mtouch = kmalloc (sizeof (struct mtouch_usb), GFP_KERNEL))) { err("%s - Out of memory.", __FUNCTION__); return -ENOMEM; @@ -266,8 +237,8 @@ mtouch->input.absmax[ABS_X] = MTOUCHUSB_MAX_XC; mtouch->input.absfuzz[ABS_X] = MTOUCHUSB_XC_FUZZ; mtouch->input.absflat[ABS_X] = MTOUCHUSB_XC_FLAT; - mtouch->input.absmin[ABS_Y] = MTOUCHUSB_MAX_YC; - mtouch->input.absmax[ABS_Y] = MTOUCHUSB_MIN_YC; + mtouch->input.absmin[ABS_Y] = MTOUCHUSB_MIN_YC; + mtouch->input.absmax[ABS_Y] = MTOUCHUSB_MAX_YC; mtouch->input.absfuzz[ABS_Y] = MTOUCHUSB_YC_FUZZ; mtouch->input.absflat[ABS_Y] = MTOUCHUSB_YC_FLAT; @@ -290,15 +261,15 @@ kfree(buf); nRet = usb_control_msg(mtouch->udev, - usb_rcvctrlpipe(udev, 0x80), - USB_REQ_GET_CONFIGURATION, - USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE, + usb_rcvctrlpipe(udev, 0), + MTOUCHUSB_RESET, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + 1, 0, - 0x81, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); - dbg("%s - usb_control_msg - USB_REQ_GET_CONFIGURATION - bytes|err: %d", + dbg("%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d", __FUNCTION__, nRet); dbg("%s - usb_alloc_urb: mtouch->irq", __FUNCTION__); @@ -315,7 +286,7 @@ mtouch->udev, usb_rcvintpipe(mtouch->udev, 0x81), mtouch->data, - MTOUCHUSB_REPORT_SIZE_DATA, + MTOUCHUSB_REPORT_DATA_SIZE, mtouchusb_irq, mtouch, endpoint->bInterval); @@ -324,15 +295,15 @@ input_register_device(&mtouch->input); nRet = usb_control_msg(mtouch->udev, - usb_rcvctrlpipe(udev, 0x80), - MTOUCHUSB_ASYC_REPORT, + usb_rcvctrlpipe(udev, 0), + MTOUCHUSB_ASYNC_REPORT, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, - MTOUCHUSB_ASYC_REPORT, - MTOUCHUSB_ASYC_REPORT, + 1, + 1, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); - dbg("%s - usb_control_msg - MTOUCHUSB_ASYC_REPORT - bytes|err: %d", + dbg("%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d", __FUNCTION__, nRet); printk(KERN_INFO "input: %s on %s\n", mtouch->name, path); @@ -383,9 +354,3 @@ MODULE_AUTHOR( DRIVER_AUTHOR ); MODULE_DESCRIPTION( DRIVER_DESC ); MODULE_LICENSE("GPL"); -MODULE_PARM(vendor, "i"); -MODULE_PARM_DESC(vendor, "User specified USB idVendor"); -MODULE_PARM(product, "i"); -MODULE_PARM_DESC(product, "User specified USB idProduct"); - - diff -Nru a/drivers/usb/input/touchkitusb.c b/drivers/usb/input/touchkitusb.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/usb/input/touchkitusb.c Tue May 18 23:38:09 2004 @@ -0,0 +1,310 @@ +/****************************************************************************** + * touchkitusb.c -- Driver for eGalax TouchKit USB Touchscreens + * + * Copyright (C) 2004 by Daniel Ritz + * Copyright (C) by Todd E. Johnson (mtouchusb.c) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Based upon mtouchusb.c + * + *****************************************************************************/ + +//#define DEBUG + +#include +#include +#include +#include +#include +#include + +#if !defined(DEBUG) && defined(CONFIG_USB_DEBUG) +#define DEBUG +#endif +#include + + +#define TOUCHKIT_MIN_XC 0x0 +#define TOUCHKIT_MAX_XC 0x07ff +#define TOUCHKIT_XC_FUZZ 0x0 +#define TOUCHKIT_XC_FLAT 0x0 +#define TOUCHKIT_MIN_YC 0x0 +#define TOUCHKIT_MAX_YC 0x07ff +#define TOUCHKIT_YC_FUZZ 0x0 +#define TOUCHKIT_YC_FLAT 0x0 +#define TOUCHKIT_REPORT_DATA_SIZE 8 + +#define TOUCHKIT_DOWN 0x01 +#define TOUCHKIT_POINT_TOUCH 0x81 +#define TOUCHKIT_POINT_NOTOUCH 0x80 + +#define TOUCHKIT_GET_TOUCHED(dat) ((((dat)[0]) & TOUCHKIT_DOWN) ? 1 : 0) +#define TOUCHKIT_GET_X(dat) (((dat)[3] << 7) | (dat)[4]) +#define TOUCHKIT_GET_Y(dat) (((dat)[1] << 7) | (dat)[2]) + +#define DRIVER_VERSION "v0.1" +#define DRIVER_AUTHOR "Daniel Ritz " +#define DRIVER_DESC "eGalax TouchKit USB HID Touchscreen Driver" + +struct touchkit_usb { + unsigned char *data; + dma_addr_t data_dma; + struct urb *irq; + struct usb_device *udev; + struct input_dev input; + int open; + char name[128]; + char phys[64]; +}; + +static struct usb_device_id touchkit_devices[] = { + {USB_DEVICE(0x3823, 0x0001)}, + {USB_DEVICE(0x0eef, 0x0001)}, + {} +}; + +static void touchkit_irq(struct urb *urb, struct pt_regs *regs) +{ + struct touchkit_usb *touchkit = urb->context; + int retval; + + switch (urb->status) { + case 0: + /* success */ + break; + case -ETIMEDOUT: + /* this urb is timing out */ + dbg("%s - urb timed out - was the device unplugged?", + __FUNCTION__); + return; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + /* this urb is terminated, clean up */ + dbg("%s - urb shutting down with status: %d", + __FUNCTION__, urb->status); + return; + default: + dbg("%s - nonzero urb status received: %d", + __FUNCTION__, urb->status); + goto exit; + } + + input_regs(&touchkit->input, regs); + input_report_key(&touchkit->input, BTN_TOUCH, + TOUCHKIT_GET_TOUCHED(touchkit->data)); + input_report_abs(&touchkit->input, ABS_X, + TOUCHKIT_GET_X(touchkit->data)); + input_report_abs(&touchkit->input, ABS_Y, + TOUCHKIT_GET_Y(touchkit->data)); + input_sync(&touchkit->input); + +exit: + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval) + err("%s - usb_submit_urb failed with result: %d", + __FUNCTION__, retval); +} + +static int touchkit_open(struct input_dev *input) +{ + struct touchkit_usb *touchkit = input->private; + + if (touchkit->open++) + return 0; + + touchkit->irq->dev = touchkit->udev; + + if (usb_submit_urb(touchkit->irq, GFP_ATOMIC)) { + touchkit->open--; + return -EIO; + } + + return 0; +} + +static void touchkit_close(struct input_dev *input) +{ + struct touchkit_usb *touchkit = input->private; + + if (!--touchkit->open) + usb_unlink_urb(touchkit->irq); +} + +static int touchkit_alloc_buffers(struct usb_device *udev, + struct touchkit_usb *touchkit) +{ + touchkit->data = usb_buffer_alloc(udev, TOUCHKIT_REPORT_DATA_SIZE, + SLAB_ATOMIC, &touchkit->data_dma); + + if (!touchkit->data) + return -1; + + return 0; +} + +static void touchkit_free_buffers(struct usb_device *udev, + struct touchkit_usb *touchkit) +{ + if (touchkit->data) + usb_buffer_free(udev, TOUCHKIT_REPORT_DATA_SIZE, + touchkit->data, touchkit->data_dma); +} + +static int touchkit_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + int ret; + struct touchkit_usb *touchkit; + struct usb_host_interface *interface; + struct usb_endpoint_descriptor *endpoint; + struct usb_device *udev = interface_to_usbdev(intf); + char path[64]; + char *buf; + + interface = intf->cur_altsetting; + endpoint = &interface->endpoint[0].desc; + + touchkit = kmalloc(sizeof(struct touchkit_usb), GFP_KERNEL); + if (!touchkit) + return -ENOMEM; + + memset(touchkit, 0, sizeof(struct touchkit_usb)); + touchkit->udev = udev; + + if (touchkit_alloc_buffers(udev, touchkit)) { + ret = -ENOMEM; + goto out_free; + } + + touchkit->input.private = touchkit; + touchkit->input.open = touchkit_open; + touchkit->input.close = touchkit_close; + + usb_make_path(udev, path, 64); + sprintf(touchkit->phys, "%s/input0", path); + + touchkit->input.name = touchkit->name; + touchkit->input.phys = touchkit->phys; + touchkit->input.id.bustype = BUS_USB; + touchkit->input.id.vendor = udev->descriptor.idVendor; + touchkit->input.id.product = udev->descriptor.idProduct; + touchkit->input.id.version = udev->descriptor.bcdDevice; + touchkit->input.dev = &intf->dev; + + touchkit->input.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); + touchkit->input.absbit[0] = BIT(ABS_X) | BIT(ABS_Y); + touchkit->input.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); + + /* Used to Scale Compensated Data */ + touchkit->input.absmin[ABS_X] = TOUCHKIT_MIN_XC; + touchkit->input.absmax[ABS_X] = TOUCHKIT_MAX_XC; + touchkit->input.absfuzz[ABS_X] = TOUCHKIT_XC_FUZZ; + touchkit->input.absflat[ABS_X] = TOUCHKIT_XC_FLAT; + touchkit->input.absmin[ABS_Y] = TOUCHKIT_MIN_YC; + touchkit->input.absmax[ABS_Y] = TOUCHKIT_MAX_YC; + touchkit->input.absfuzz[ABS_Y] = TOUCHKIT_YC_FUZZ; + touchkit->input.absflat[ABS_Y] = TOUCHKIT_YC_FLAT; + + buf = kmalloc(63, GFP_KERNEL); + if (!buf) { + ret = -ENOMEM; + goto out_free_buffers; + } + + if (udev->descriptor.iManufacturer && + usb_string(udev, udev->descriptor.iManufacturer, buf, 63) > 0) + strcat(touchkit->name, buf); + if (udev->descriptor.iProduct && + usb_string(udev, udev->descriptor.iProduct, buf, 63) > 0) + sprintf(touchkit->name, "%s %s", touchkit->name, buf); + + if (!strlen(touchkit->name)) + sprintf(touchkit->name, "USB Touchscreen %04x:%04x", + touchkit->input.id.vendor, touchkit->input.id.product); + + kfree(buf); + + touchkit->irq = usb_alloc_urb(0, GFP_KERNEL); + if (!touchkit->irq) { + dbg("%s - usb_alloc_urb failed: touchkit->irq", __FUNCTION__); + ret = -ENOMEM; + goto out_free_buffers; + } + + usb_fill_int_urb(touchkit->irq, touchkit->udev, + usb_rcvintpipe(touchkit->udev, 0x81), + touchkit->data, TOUCHKIT_REPORT_DATA_SIZE, + touchkit_irq, touchkit, endpoint->bInterval); + + input_register_device(&touchkit->input); + + printk(KERN_INFO "input: %s on %s\n", touchkit->name, path); + usb_set_intfdata(intf, touchkit); + + return 0; + +out_free_buffers: + touchkit_free_buffers(udev, touchkit); +out_free: + kfree(touchkit); + return ret; +} + +static void touchkit_disconnect(struct usb_interface *intf) +{ + struct touchkit_usb *touchkit = usb_get_intfdata(intf); + + dbg("%s - called", __FUNCTION__); + + if (!touchkit) + return; + + dbg("%s - touchkit is initialized, cleaning up", __FUNCTION__); + usb_set_intfdata(intf, NULL); + input_unregister_device(&touchkit->input); + usb_unlink_urb(touchkit->irq); + usb_free_urb(touchkit->irq); + touchkit_free_buffers(interface_to_usbdev(intf), touchkit); + kfree(touchkit); +} + +MODULE_DEVICE_TABLE(usb, touchkit_devices); + +static struct usb_driver touchkit_driver = { + .owner = THIS_MODULE, + .name = "touchkitusb", + .probe = touchkit_probe, + .disconnect = touchkit_disconnect, + .id_table = touchkit_devices, +}; + +static int __init touchkit_init(void) +{ + return usb_register(&touchkit_driver); +} + +static void __exit touchkit_cleanup(void) +{ + usb_deregister(&touchkit_driver); +} + +module_init(touchkit_init); +module_exit(touchkit_cleanup); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c --- a/drivers/usb/input/wacom.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/input/wacom.c Tue May 18 23:38:05 2004 @@ -527,7 +527,7 @@ __FUNCTION__, retval); } -struct wacom_features wacom_features[] = { +static struct wacom_features wacom_features[] = { { "Wacom Penpartner", 7, 5040, 3780, 255, 32, 0, wacom_penpartner_irq }, { "Wacom Graphire", 8, 10206, 7422, 511, 32, 1, wacom_graphire_irq }, { "Wacom Graphire2 4x5", 8, 10206, 7422, 511, 32, 1, wacom_graphire_irq }, @@ -556,7 +556,7 @@ { } }; -struct usb_device_id wacom_ids[] = { +static struct usb_device_id wacom_ids[] = { { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x00) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x10) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x11) }, diff -Nru a/drivers/usb/media/dsbr100.c b/drivers/usb/media/dsbr100.c --- a/drivers/usb/media/dsbr100.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/dsbr100.c Tue May 18 23:38:06 2004 @@ -33,6 +33,9 @@ History: + Version 0.40: + Markus: Updates for 2.6.x kernels, code layout changes, name sanitizing + Version 0.30: Markus: Updates for 2.5.x kernel and more ISO compliant source @@ -75,13 +78,17 @@ /* * Version Information */ -#define DRIVER_VERSION "v0.30" +#define DRIVER_VERSION "v0.40" #define DRIVER_AUTHOR "Markus Demleitner " #define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver" #define DSB100_VENDOR 0x04b4 #define DSB100_PRODUCT 0x1002 +/* Commands the device appears to understand */ +#define DSB100_TUNE 1 +#define DSB100_ONOFF 2 + #define TB_LEN 16 /* Frequency limits in MHz -- these are European values. For Japanese @@ -102,15 +109,19 @@ static int radio_nr = -1; MODULE_PARM(radio_nr, "i"); -typedef struct -{ - struct usb_device *dev; +/* Data for one (physical) device */ +typedef struct { + struct usb_device *usbdev; + struct video_device *videodev; unsigned char transfer_buffer[TB_LEN]; int curfreq; int stereo; -} usb_dsbr100; + int users; + int removed; +} dsbr100_device; +/* File system interface */ static struct file_operations usb_dsbr100_fops = { .owner = THIS_MODULE, .open = usb_dsbr100_open, @@ -118,65 +129,84 @@ .ioctl = usb_dsbr100_ioctl, .llseek = no_llseek, }; -static struct video_device usb_dsbr100_radio= + +/* V4L interface */ +static struct video_device dsbr100_videodev_template= { .owner = THIS_MODULE, .name = "D-Link DSB-R 100", .type = VID_TYPE_TUNER, .hardware = VID_HARDWARE_AZTECH, .fops = &usb_dsbr100_fops, + .release = video_device_release, }; -static int users = 0; - -static struct usb_device_id usb_dsbr100_table [] = { +static struct usb_device_id usb_dsbr100_device_table [] = { { USB_DEVICE(DSB100_VENDOR, DSB100_PRODUCT) }, { } /* Terminating entry */ }; -MODULE_DEVICE_TABLE (usb, usb_dsbr100_table); +MODULE_DEVICE_TABLE (usb, usb_dsbr100_device_table); +/* USB subsystem interface */ static struct usb_driver usb_dsbr100_driver = { .owner = THIS_MODULE, .name = "dsbr100", .probe = usb_dsbr100_probe, .disconnect = usb_dsbr100_disconnect, - .id_table = usb_dsbr100_table, + .id_table = usb_dsbr100_device_table, }; +/* Low-level device interface begins here */ -static int dsbr100_start(usb_dsbr100 *radio) +/* switch on radio */ +static int dsbr100_start(dsbr100_device *radio) { - if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x00, 0xC0, 0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 || - usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x02, 0xC0, 0x01, 0x00, radio->transfer_buffer, 8, 300)<0) + if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + USB_REQ_GET_STATUS, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 || + usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + DSB100_ONOFF, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x01, 0x00, radio->transfer_buffer, 8, 300)<0) return -1; return (radio->transfer_buffer)[0]; } -static int dsbr100_stop(usb_dsbr100 *radio) +/* switch off radio */ +static int dsbr100_stop(dsbr100_device *radio) { - if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x00, 0xC0, 0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 || - usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x02, 0xC0, 0x00, 0x00, radio->transfer_buffer, 8, 300)<0) + if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + USB_REQ_GET_STATUS, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 || + usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + DSB100_ONOFF, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x00, 0x00, radio->transfer_buffer, 8, 300)<0) return -1; return (radio->transfer_buffer)[0]; } - -static int dsbr100_setfreq(usb_dsbr100 *radio, int freq) +/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */ +static int dsbr100_setfreq(dsbr100_device *radio, int freq) { freq = (freq/16*80)/1000+856; - if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x01, 0xC0, (freq>>8)&0x00ff, freq&0xff, - radio->transfer_buffer, 8, 300)<0 || - usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x00, 0xC0, 0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 || - usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x00, 0xC0, 0x00, 0x24, radio->transfer_buffer, 8, 300)<0) { + if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + DSB100_TUNE, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + (freq>>8)&0x00ff, freq&0xff, + radio->transfer_buffer, 8, 300)<0 || + usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + USB_REQ_GET_STATUS, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 || + usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + USB_REQ_GET_STATUS, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x00, 0x24, radio->transfer_buffer, 8, 300)<0) { radio->stereo = -1; return -1; } @@ -184,61 +214,91 @@ return (radio->transfer_buffer)[0]; } -static void dsbr100_getstat(usb_dsbr100 *radio) -{ - if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0), - 0x00, 0xC0, 0x00 , 0x24, radio->transfer_buffer, 8, 300)<0) +/* return the device status. This is, in effect, just whether it +sees a stereo signal or not. Pity. */ +static void dsbr100_getstat(dsbr100_device *radio) +{ + if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), + USB_REQ_GET_STATUS, + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x00 , 0x24, radio->transfer_buffer, 8, 300)<0) radio->stereo = -1; else radio->stereo = ! (radio->transfer_buffer[0]&0x01); } +/* USB subsystem interface begins here */ + +/* check if the device is present and register with v4l and +usb if it is */ static int usb_dsbr100_probe(struct usb_interface *intf, const struct usb_device_id *id) { - usb_dsbr100 *radio; + dsbr100_device *radio; - if (!(radio = kmalloc(sizeof(usb_dsbr100),GFP_KERNEL))) + if (!(radio = kmalloc(sizeof(dsbr100_device), GFP_KERNEL))) return -ENOMEM; - usb_dsbr100_radio.priv = radio; - radio->dev = interface_to_usbdev (intf); + if (!(radio->videodev = video_device_alloc())) { + kfree(radio); + return -ENOMEM; + } + memcpy(radio->videodev, &dsbr100_videodev_template, + sizeof(dsbr100_videodev_template)); + radio->removed = 0; + radio->users = 0; + radio->usbdev = interface_to_usbdev(intf); radio->curfreq = FREQ_MIN*FREQ_MUL; - usb_set_intfdata (intf, radio); + video_set_drvdata(radio->videodev, radio); + if (video_register_device(radio->videodev, VFL_TYPE_RADIO, + radio_nr)) { + warn("Could not register video device"); + video_device_release(radio->videodev); + kfree(radio); + return -EIO; + } + usb_set_intfdata(intf, radio); return 0; } +/* handle unplugging of the device, release data structures +if nothing keeps us from doing it. If something is still +keeping us busy, the release callback of v4l will take care +of releasing it. stv680.c does not relase its private +data, so I don't do this here either. Checking out the +code I'd expect I better did that, but if there's a memory +leak here it's tiny (~50 bytes per disconnect) */ static void usb_dsbr100_disconnect(struct usb_interface *intf) { - usb_dsbr100 *radio = usb_get_intfdata (intf); + dsbr100_device *radio = usb_get_intfdata(intf); usb_set_intfdata (intf, NULL); - if (radio) { - lock_kernel(); - if (users) { - unlock_kernel(); - return; + video_unregister_device(radio->videodev); + radio->videodev = NULL; + if (radio->users) { + kfree(radio); + } else { + radio->removed = 1; } - kfree(radio); - usb_dsbr100_radio.priv = NULL; - unlock_kernel(); } } + +/* Video for Linux interface */ + static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg) { - struct video_device *dev = video_devdata(file); - usb_dsbr100 *radio=dev->priv; + dsbr100_device *radio=video_get_drvdata(video_devdata(file)); if (!radio) - return -EINVAL; + return -EIO; - switch(cmd) - { + switch(cmd) { case VIDIOCGCAP: { struct video_capability *v = arg; + memset(v, 0, sizeof(*v)); v->type = VID_TYPE_TUNER; v->channels = 1; @@ -248,6 +308,7 @@ } case VIDIOCGTUNER: { struct video_tuner *v = arg; + dsbr100_getstat(radio); if(v->tuner) /* Only 1 tuner */ return -EINVAL; @@ -263,21 +324,21 @@ } case VIDIOCSTUNER: { struct video_tuner *v = arg; + if(v->tuner!=0) return -EINVAL; /* Only 1 tuner so no setting needed ! */ return 0; } - case VIDIOCGFREQ: - { + case VIDIOCGFREQ: { int *freq = arg; + if (radio->curfreq==-1) return -EINVAL; *freq = radio->curfreq; return 0; } - case VIDIOCSFREQ: - { + case VIDIOCSFREQ: { int *freq = arg; radio->curfreq = *freq; @@ -287,6 +348,7 @@ } case VIDIOCGAUDIO: { struct video_audio *v = arg; + memset(v, 0, sizeof(*v)); v->flags |= VIDEO_AUDIO_MUTABLE; v->mode = VIDEO_SOUND_STEREO; @@ -297,9 +359,9 @@ } case VIDIOCSAUDIO: { struct video_audio *v = arg; + if (v->audio) return -EINVAL; - if (v->flags&VIDEO_AUDIO_MUTE) { if (dsbr100_stop(radio)==-1) warn("Radio did not respond properly"); @@ -322,64 +384,40 @@ static int usb_dsbr100_open(struct inode *inode, struct file *file) { - struct video_device *dev = video_devdata(file); - usb_dsbr100 *radio=dev->priv; + dsbr100_device *radio=video_get_drvdata(video_devdata(file)); - if (! radio) { - warn("Radio not initialised"); - return -EAGAIN; - } - if(users) - { - warn("Radio in use"); - return -EBUSY; - } - users++; - if (dsbr100_start(radio)<0) + radio->users = 1; + if (dsbr100_start(radio)<0) { warn("Radio did not start up properly"); + radio->users = 0; + return -EIO; + } dsbr100_setfreq(radio, radio->curfreq); return 0; } static int usb_dsbr100_close(struct inode *inode, struct file *file) { - struct video_device *dev = video_devdata(file); - usb_dsbr100 *radio=dev->priv; + dsbr100_device *radio=video_get_drvdata(video_devdata(file)); if (!radio) return -ENODEV; - users--; + radio->users = 0; + if (radio->removed) { + kfree(radio); + } return 0; } static int __init dsbr100_init(void) { - int retval; - usb_dsbr100_radio.priv = NULL; - retval = usb_register(&usb_dsbr100_driver); - if (retval) - goto failed_usb_register; - retval = video_register_device(&usb_dsbr100_radio, VFL_TYPE_RADIO, - radio_nr); - if (retval) { - warn("Couldn't register video device"); - goto failed_video_register; - } + int retval = usb_register(&usb_dsbr100_driver); info(DRIVER_VERSION ":" DRIVER_DESC); - return 0; -failed_video_register: - usb_deregister(&usb_dsbr100_driver); -failed_usb_register: return retval; } static void __exit dsbr100_exit(void) { - usb_dsbr100 *radio=usb_dsbr100_radio.priv; - - if (radio) - dsbr100_stop(radio); - video_unregister_device(&usb_dsbr100_radio); usb_deregister(&usb_dsbr100_driver); } diff -Nru a/drivers/usb/media/ibmcam.c b/drivers/usb/media/ibmcam.c --- a/drivers/usb/media/ibmcam.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/ibmcam.c Tue May 18 23:38:06 2004 @@ -3647,7 +3647,7 @@ { struct usb_device *dev = interface_to_usbdev(intf); struct uvd *uvd = NULL; - int i, nas, model=0, canvasX=0, canvasY=0; + int ix, i, nas, model=0, canvasX=0, canvasY=0; int actInterface=-1, inactInterface=-1, maxPS=0; __u8 ifnum = intf->altsetting->desc.bInterfaceNumber; unsigned char video_ep = 0; @@ -3718,7 +3718,7 @@ } while (0); /* Validate found interface: must have one ISO endpoint */ - nas = dev->actconfig->interface[ifnum]->num_altsetting; + nas = intf->num_altsetting; if (debug > 0) info("Number of alternate settings=%d.", nas); if (nas < 2) { @@ -3726,11 +3726,12 @@ return -ENODEV; } /* Validate all alternate settings */ - for (i=0; i < nas; i++) { + for (ix=0; ix < nas; ix++) { const struct usb_host_interface *interface; const struct usb_endpoint_descriptor *endpoint; - interface = &dev->actconfig->interface[ifnum]->altsetting[i]; + interface = &intf->altsetting[ix]; + i = interface->desc.bAlternateSetting; if (interface->desc.bNumEndpoints != 1) { err("Interface %d. has %u. endpoints!", ifnum, (unsigned)(interface->desc.bNumEndpoints)); diff -Nru a/drivers/usb/media/konicawc.c b/drivers/usb/media/konicawc.c --- a/drivers/usb/media/konicawc.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/media/konicawc.c Tue May 18 23:38:05 2004 @@ -381,9 +381,15 @@ int i, errFlag; struct konicawc *cam = (struct konicawc *)uvd->user_data; int pktsz; - struct usb_host_interface *interface; + struct usb_interface *intf; + struct usb_host_interface *interface = NULL; - interface = &dev->actconfig->interface[uvd->iface]->altsetting[spd_to_iface[cam->speed]]; + intf = usb_ifnum_to_if(dev, uvd->iface); + if (intf) + interface = usb_altnum_to_altsetting(intf, + spd_to_iface[cam->speed]); + if (!interface) + return -ENXIO; pktsz = interface->endpoint[1].desc.wMaxPacketSize; DEBUG(1, "pktsz = %d", pktsz); if (!CAMERA_IS_OPERATIONAL(uvd)) { @@ -721,7 +727,7 @@ { struct usb_device *dev = interface_to_usbdev(intf); struct uvd *uvd = NULL; - int i, nas; + int ix, i, nas; int actInterface=-1, inactInterface=-1, maxPS=0; unsigned char video_ep = 0; @@ -741,11 +747,12 @@ return -ENODEV; } /* Validate all alternate settings */ - for (i=0; i < nas; i++) { + for (ix=0; ix < nas; ix++) { const struct usb_host_interface *interface; const struct usb_endpoint_descriptor *endpoint; - interface = &intf->altsetting[i]; + interface = &intf->altsetting[ix]; + i = interface->desc.bAlternateSetting; if (interface->desc.bNumEndpoints != 2) { err("Interface %d. has %u. endpoints!", interface->desc.bInterfaceNumber, diff -Nru a/drivers/usb/media/ov511.c b/drivers/usb/media/ov511.c --- a/drivers/usb/media/ov511.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/ov511.c Tue May 18 23:38:06 2004 @@ -5603,8 +5603,16 @@ if (ov->bridge == BRG_OV518) { - struct usb_interface *ifp = ov->dev->config[0].interface[0]; - __u16 mxps = ifp->altsetting[7].endpoint[0].desc.wMaxPacketSize; + struct usb_interface *ifp; + struct usb_host_interface *alt; + __u16 mxps = 0; + + ifp = usb_ifnum_to_if(ov->dev, 0); + if (ifp) { + alt = usb_altnum_to_altsetting(ifp, 7); + if (alt) + mxps = alt->endpoint[0].desc.wMaxPacketSize; + } /* Some OV518s have packet numbering by default, some don't */ if (mxps == 897) @@ -5805,7 +5813,7 @@ if (dev->descriptor.bNumConfigurations != 1) return -ENODEV; - idesc = &intf->altsetting[0].desc; + idesc = &intf->cur_altsetting->desc; if (idesc->bInterfaceClass != 0xFF) return -ENODEV; diff -Nru a/drivers/usb/media/pwc-if.c b/drivers/usb/media/pwc-if.c --- a/drivers/usb/media/pwc-if.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/media/pwc-if.c Tue May 18 23:38:08 2004 @@ -789,7 +789,8 @@ struct urb *urb; int i, j, ret; - struct usb_host_interface *idesc; + struct usb_interface *intf; + struct usb_host_interface *idesc = NULL; if (pdev == NULL) return -EFAULT; @@ -801,7 +802,9 @@ /* Get the current alternate interface, adjust packet size */ if (!udev->actconfig) return -EFAULT; - idesc = &udev->actconfig->interface[0]->altsetting[pdev->valternate]; + intf = usb_ifnum_to_if(udev, 0); + if (intf) + idesc = usb_altnum_to_altsetting(intf, pdev->valternate); if (!idesc) return -EFAULT; diff -Nru a/drivers/usb/media/se401.c b/drivers/usb/media/se401.c --- a/drivers/usb/media/se401.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/se401.c Tue May 18 23:38:06 2004 @@ -1326,7 +1326,7 @@ if (dev->descriptor.bNumConfigurations != 1) return -ENODEV; - interface = &intf->altsetting[0].desc; + interface = &intf->cur_altsetting->desc; /* Is it an se401? */ if (dev->descriptor.idVendor == 0x03e8 && diff -Nru a/drivers/usb/media/ultracam.c b/drivers/usb/media/ultracam.c --- a/drivers/usb/media/ultracam.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/ultracam.c Tue May 18 23:38:06 2004 @@ -95,7 +95,7 @@ * 02-Nov-2000 First (mostly dummy) version. * 06-Nov-2000 Rewrote to dump all data into frame. */ -void ultracam_ProcessIsocData(struct uvd *uvd, struct usbvideo_frame *frame) +static void ultracam_ProcessIsocData(struct uvd *uvd, struct usbvideo_frame *frame) { int n; @@ -513,7 +513,7 @@ { struct usb_device *dev = interface_to_usbdev(intf); struct uvd *uvd = NULL; - int i, nas; + int ix, i, nas; int actInterface=-1, inactInterface=-1, maxPS=0; unsigned char video_ep = 0; @@ -540,11 +540,12 @@ return -ENODEV; } /* Validate all alternate settings */ - for (i=0; i < nas; i++) { + for (ix=0; ix < nas; ix++) { const struct usb_host_interface *interface; const struct usb_endpoint_descriptor *endpoint; - interface = &intf->altsetting[i]; + interface = &intf->altsetting[ix]; + i = interface->desc.bAlternateSetting; if (interface->desc.bNumEndpoints != 1) { err("Interface %d. has %u. endpoints!", interface->desc.bInterfaceNumber, diff -Nru a/drivers/usb/media/vicam.c b/drivers/usb/media/vicam.c --- a/drivers/usb/media/vicam.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/media/vicam.c Tue May 18 23:38:06 2004 @@ -1303,7 +1303,7 @@ printk(KERN_INFO "ViCam based webcam connected\n"); - interface = &intf->altsetting[0]; + interface = intf->cur_altsetting; DBG(KERN_DEBUG "Interface %d. has %u. endpoints!\n", interface->desc.bInterfaceNumber, (unsigned) (interface->desc.bNumEndpoints)); diff -Nru a/drivers/usb/media/w9968cf.c b/drivers/usb/media/w9968cf.c --- a/drivers/usb/media/w9968cf.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/media/w9968cf.c Tue May 18 23:38:08 2004 @@ -1578,7 +1578,7 @@ static struct i2c_adapter adap = { .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_W9968CF, - .class = I2C_ADAP_CLASS_CAM_DIGITAL, + .class = I2C_CLASS_CAM_DIGITAL, .owner = THIS_MODULE, .client_register = w9968cf_i2c_attach_inform, .client_unregister = w9968cf_i2c_detach_inform, diff -Nru a/drivers/usb/media/w9968cf.h b/drivers/usb/media/w9968cf.h --- a/drivers/usb/media/w9968cf.h Tue May 18 23:38:05 2004 +++ b/drivers/usb/media/w9968cf.h Tue May 18 23:38:05 2004 @@ -189,8 +189,8 @@ VPP_UYVY_TO_RGBX = 0x08, }; -struct list_head w9968cf_dev_list; /* head of V4L registered cameras list */ -LIST_HEAD(w9968cf_dev_list); +static struct list_head w9968cf_dev_list; /* head of V4L registered cameras list */ +static LIST_HEAD(w9968cf_dev_list); struct semaphore w9968cf_devlist_sem; /* semaphore for list traversal */ /* Main device driver structure */ diff -Nru a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig --- a/drivers/usb/misc/Kconfig Tue May 18 23:38:09 2004 +++ b/drivers/usb/misc/Kconfig Tue May 18 23:38:09 2004 @@ -133,6 +133,18 @@ To compile this driver as a module, choose M here: the module will be called speedtch. +config USB_PHIDGETSERVO + tristate "USB PhidgetServo support" + depends on USB + help + Say Y here if you want to connect an 1 or 4 Motor PhidgetServo + servo controller version 2.0 or 3.0. + + Phidgets Inc. has a web page at . + + To compile this driver as a module, choose M here: the + module will be called phidgetservo. + config USB_TEST tristate "USB testing driver (DEVELOPMENT)" depends on USB && USB_DEVICEFS && EXPERIMENTAL diff -Nru a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile --- a/drivers/usb/misc/Makefile Tue May 18 23:38:07 2004 +++ b/drivers/usb/misc/Makefile Tue May 18 23:38:07 2004 @@ -15,3 +15,4 @@ obj-$(CONFIG_USB_TEST) += usbtest.o obj-$(CONFIG_USB_TIGL) += tiglusb.o obj-$(CONFIG_USB_USS720) += uss720.o +obj-$(CONFIG_USB_PHIDGETSERVO) += phidgetservo.o diff -Nru a/drivers/usb/misc/cytherm.c b/drivers/usb/misc/cytherm.c --- a/drivers/usb/misc/cytherm.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/misc/cytherm.c Tue May 18 23:38:09 2004 @@ -46,9 +46,6 @@ static int cytherm_probe(struct usb_interface *interface, const struct usb_device_id *id); static void cytherm_disconnect(struct usb_interface *interface); -int vendor_command(struct usb_device *dev, unsigned char request, - unsigned char value, unsigned char index, - void *buf, int size); /* usb specific object needed to register this driver with the usb subsystem */ @@ -71,9 +68,9 @@ /* Send a vendor command to device */ -int vendor_command(struct usb_device *dev, unsigned char request, - unsigned char value, unsigned char index, - void *buf, int size) +static int vendor_command(struct usb_device *dev, unsigned char request, + unsigned char value, unsigned char index, + void *buf, int size) { return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request, @@ -122,12 +119,12 @@ retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS, cytherm->brightness, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); /* Inform µC that we have changed the brightness setting */ retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS_SEM, 0x01, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); kfree(buffer); @@ -161,13 +158,13 @@ /* read temperature */ retval = vendor_command(cytherm->udev, READ_RAM, TEMP, 0, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); temp = buffer[1]; /* read sign */ retval = vendor_command(cytherm->udev, READ_RAM, SIGN, 0, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); sign = buffer[1]; kfree(buffer); @@ -205,7 +202,7 @@ /* check button */ retval = vendor_command(cytherm->udev, READ_RAM, BUTTON, 0, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); retval = buffer[1]; @@ -242,7 +239,7 @@ retval = vendor_command(cytherm->udev, READ_PORT, 0, 0, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); retval = buffer[1]; @@ -277,7 +274,7 @@ retval = vendor_command(cytherm->udev, WRITE_PORT, 0, tmp, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); kfree(buffer); @@ -302,7 +299,7 @@ retval = vendor_command(cytherm->udev, READ_PORT, 1, 0, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); retval = buffer[1]; @@ -337,7 +334,7 @@ retval = vendor_command(cytherm->udev, WRITE_PORT, 1, tmp, buffer, 8); if (retval) - dev_dbg(&led->udev->dev, "retval = %d\n", retval); + dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval); kfree(buffer); diff -Nru a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c --- a/drivers/usb/misc/emi26.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/misc/emi26.c Tue May 18 23:38:06 2004 @@ -226,7 +226,7 @@ { } -struct usb_driver emi26_driver = { +static struct usb_driver emi26_driver = { .owner = THIS_MODULE, .name = "emi26 - firmware loader", .probe = emi26_probe, diff -Nru a/drivers/usb/misc/emi26_fw.h b/drivers/usb/misc/emi26_fw.h --- a/drivers/usb/misc/emi26_fw.h Tue May 18 23:38:09 2004 +++ b/drivers/usb/misc/emi26_fw.h Tue May 18 23:38:09 2004 @@ -17,7 +17,7 @@ * any driver which includes this firmware, in whole or in part, * requires the inclusion of this statement. */ -INTEL_HEX_RECORD g_bitstream[]={ +static INTEL_HEX_RECORD g_bitstream[]={ { 16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 } }, { 16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0b,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d } }, { 16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 } }, @@ -4406,7 +4406,7 @@ * any driver which includes this firmware, in whole or in part, * requires the inclusion of this statement. */ -INTEL_HEX_RECORD g_Firmware[] = { +static INTEL_HEX_RECORD g_Firmware[] = { { 3,0x0000,0,{0x02,0x43,0x56} }, { 3,0x0003,0,{0x02,0x4b,0xcd} }, { 3,0x000b,0,{0x02,0x4b,0xd2} }, @@ -5669,7 +5669,7 @@ * any driver which includes this firmware, in whole or in part, * requires the inclusion of this statement. */ -INTEL_HEX_RECORD g_Loader[] = { +static INTEL_HEX_RECORD g_Loader[] = { { 3,0x0000,0,{0x02,0x03,0x1c} }, { 3,0x0043,0,{0x02,0x04,0x00} }, { 16,0x0100,0,{0x90,0x7f,0xe9,0xe0,0x24,0x5b,0x60,0x60,0x24,0x02,0x60,0x03,0x02,0x01,0xbe,0x90} }, diff -Nru a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c --- a/drivers/usb/misc/emi62.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/misc/emi62.c Tue May 18 23:38:08 2004 @@ -265,7 +265,7 @@ { } -struct usb_driver emi62_driver = { +static struct usb_driver emi62_driver = { .owner = THIS_MODULE, .name = "emi62 - firmware loader", .probe = emi62_probe, diff -Nru a/drivers/usb/misc/emi62_fw_m.h b/drivers/usb/misc/emi62_fw_m.h --- a/drivers/usb/misc/emi62_fw_m.h Tue May 18 23:38:06 2004 +++ b/drivers/usb/misc/emi62_fw_m.h Tue May 18 23:38:06 2004 @@ -3,7 +3,7 @@ */ /* generated Tue Jun 3 21:36:11 EEST 2003 */ -INTEL_HEX_RECORD g_emi62bs[]={ +static INTEL_HEX_RECORD g_emi62bs[]={ 16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 }, 16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0d,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d }, 16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 }, @@ -6112,7 +6112,7 @@ }; // VERSION= 1.0.0.191 // DATE= 2002oct28 -INTEL_HEX_RECORD g_HexMidiFw62[] = { +static INTEL_HEX_RECORD g_HexMidiFw62[] = { 3,0x0000,0,{0x02,0x46,0xb9}, 3,0x0003,0,{0x02,0x0f,0xfd}, 3,0x000b,0,{0x02,0x4e,0x0f}, @@ -8640,7 +8640,8 @@ /* VERSION=1.04.062 DATE=16.10.2002 -*/INTEL_HEX_RECORD g_emi62_loader[] = { +*/ +static INTEL_HEX_RECORD g_emi62_loader[] = { 3,0x0000,0,{0x02,0x02,0x87}, 3,0x0043,0,{0x02,0x04,0x00}, 16,0x0100,0,{0xe4,0xff,0xfe,0xc2,0x20,0xd2,0xe8,0x43,0xd8,0x20,0x90,0x7f,0xab,0x74,0xff,0xf0}, diff -Nru a/drivers/usb/misc/emi62_fw_s.h b/drivers/usb/misc/emi62_fw_s.h --- a/drivers/usb/misc/emi62_fw_s.h Tue May 18 23:38:06 2004 +++ b/drivers/usb/misc/emi62_fw_s.h Tue May 18 23:38:07 2004 @@ -3,7 +3,7 @@ */ /* generated Tue Apr 15 21:59:42 EEST 2003 */ -INTEL_HEX_RECORD g_emi62bs[]={ +static INTEL_HEX_RECORD g_emi62bs[]={ {16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 }}, {16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0d,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d }}, {16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 }}, @@ -6112,7 +6112,7 @@ }; // VERSION= 1.0.0.191 // DATE= 2002oct28 -INTEL_HEX_RECORD g_HexSpdifFw62[] = { +static INTEL_HEX_RECORD g_HexSpdifFw62[] = { {3,0x0000,0,{0x02,0x45,0xf9}}, { 3,0x0003,0,{0x02,0x0f,0xfd}}, { 3,0x000b,0,{0x02,0x4d,0x9b}}, @@ -8623,7 +8623,8 @@ /* VERSION=1.04.062 DATE=16.10.2002 -*/INTEL_HEX_RECORD g_emi62_loader[] = { +*/ +static INTEL_HEX_RECORD g_emi62_loader[] = { { 3,0x0000,0,{0x02,0x02,0x87}}, { 3,0x0043,0,{0x02,0x04,0x00}}, {16,0x0100,0,{0xe4,0xff,0xfe,0xc2,0x20,0xd2,0xe8,0x43,0xd8,0x20,0x90,0x7f,0xab,0x74,0xff,0xf0}}, diff -Nru a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c --- a/drivers/usb/misc/legousbtower.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/misc/legousbtower.c Tue May 18 23:38:07 2004 @@ -1,8 +1,8 @@ /* * LEGO USB Tower driver * - * Copyright (C) 2003 David Glance - * 2001 Juergen Stuber + * Copyright (C) 2003 David Glance + * 2001-2004 Juergen Stuber * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -33,14 +33,44 @@ * - changed to use lego0 rather than tower0 * - changed dbg() to use __func__ rather than deprecated __FUNCTION__ * 2003-01-12 - 0.53 david (david@csse.uwa.edu.au) - * - changed read and write to write everything or timeout (from a patch by Chris Riesen and - * Brett Thaeler driver) + * - changed read and write to write everything or + * timeout (from a patch by Chris Riesen and Brett Thaeler driver) * - added ioctl functionality to set timeouts - * 2003-07-18 - 0.54 davidgsf (david@csse.uwa.edu.au) + * 2003-07-18 - 0.54 davidgsf (david@csse.uwa.edu.au) * - initial import into LegoUSB project * - merge of existing LegoUSB.c driver - * 2003-07-18 - 0.56 davidgsf (david@csse.uwa.edu.au) + * 2003-07-18 - 0.56 davidgsf (david@csse.uwa.edu.au) * - port to 2.6 style driver + * 2004-02-29 - 0.6 Juergen Stuber + * - fix locking + * - unlink read URBs which are no longer needed + * - allow increased buffer size, eliminates need for timeout on write + * - have read URB running continuously + * - added poll + * - forbid seeking + * - added nonblocking I/O + * - changed back __func__ to __FUNCTION__ + * - read and log tower firmware version + * - reset tower on probe, avoids failure of first write + * 2004-03-09 - 0.7 Juergen Stuber + * - timeout read now only after inactivity, shorten default accordingly + * 2004-03-11 - 0.8 Juergen Stuber + * - log major, minor instead of possibly confusing device filename + * - whitespace cleanup + * 2004-03-12 - 0.9 Juergen Stuber + * - normalize whitespace in debug messages + * - take care about endianness in control message responses + * 2004-03-13 - 0.91 Juergen Stuber + * - make default intervals longer to accommodate current EHCI driver + * 2004-03-19 - 0.92 Juergen Stuber + * - replaced atomic_t by memory barriers + * 2004-04-21 - 0.93 Juergen Stuber + * - wait for completion of write urb in release (needed for remotecontrol) + * - corrected poll for write direction (missing negation) + * 2004-04-22 - 0.94 Juergen Stuber + * - make device locking interruptible + * 2004-04-30 - 0.95 Juergen Stuber + * - check for valid udev on resubmitting and unlinking urbs */ #include @@ -53,33 +83,113 @@ #include #include #include +#include #ifdef CONFIG_USB_DEBUG static int debug = 4; #else - static int debug = 1; + static int debug = 0; #endif /* Use our own dbg macro */ #undef dbg -#define dbg(lvl, format, arg...) do { if (debug >= lvl) printk(KERN_DEBUG __FILE__ " : " format " \n", ## arg); } while (0) +#define dbg(lvl, format, arg...) do { if (debug >= lvl) printk(KERN_DEBUG __FILE__ ": " format "\n", ## arg); } while (0) /* Version Information */ -#define DRIVER_VERSION "v0.56" -#define DRIVER_AUTHOR "David Glance, davidgsf@sourceforge.net" +#define DRIVER_VERSION "v0.95" +#define DRIVER_AUTHOR "Juergen Stuber " #define DRIVER_DESC "LEGO USB Tower Driver" -/* Module paramaters */ +/* Module parameters */ MODULE_PARM(debug, "i"); MODULE_PARM_DESC(debug, "Debug enabled or not"); +/* The defaults are chosen to work with the latest versions of leJOS and NQC. + */ + +/* Some legacy software likes to receive packets in one piece. + * In this case read_buffer_size should exceed the maximal packet length + * (417 for datalog uploads), and packet_timeout should be set. + */ +static size_t read_buffer_size = 480; +MODULE_PARM(read_buffer_size, "i"); +MODULE_PARM_DESC(read_buffer_size, "Read buffer size"); + +/* Some legacy software likes to send packets in one piece. + * In this case write_buffer_size should exceed the maximal packet length + * (417 for firmware and program downloads). + * A problem with long writes is that the following read may time out + * if the software is not prepared to wait long enough. + */ +static size_t write_buffer_size = 480; +MODULE_PARM(write_buffer_size, "i"); +MODULE_PARM_DESC(write_buffer_size, "Write buffer size"); + +/* Some legacy software expects reads to contain whole LASM packets. + * To achieve this, characters which arrive before a packet timeout + * occurs will be returned in a single read operation. + * A problem with long reads is that the software may time out + * if it is not prepared to wait long enough. + * The packet timeout should be greater than the time between the + * reception of subsequent characters, which should arrive about + * every 5ms for the standard 2400 baud. + * Set it to 0 to disable. + */ +static int packet_timeout = 50; +MODULE_PARM(packet_timeout, "i"); +MODULE_PARM_DESC(packet_timeout, "Packet timeout in ms"); + +/* Some legacy software expects blocking reads to time out. + * Timeout occurs after the specified time of read and write inactivity. + * Set it to 0 to disable. + */ +static int read_timeout = 200; +MODULE_PARM(read_timeout, "i"); +MODULE_PARM_DESC(read_timeout, "Read timeout in ms"); + +/* As of kernel version 2.6.4 ehci-hcd uses an + * "only one interrupt transfer per frame" shortcut + * to simplify the scheduling of periodic transfers. + * This conflicts with our standard 1ms intervals for in and out URBs. + * We use default intervals of 2ms for in and 8ms for out transfers, + * which is fast enough for 2400 baud and allows a small additional load. + * Increase the interval to allow more devices that do interrupt transfers, + * or set to 0 to use the standard interval from the endpoint descriptors. + */ +static int interrupt_in_interval = 2; +MODULE_PARM(interrupt_in_interval, "i"); +MODULE_PARM_DESC(interrupt_in_interval, "Interrupt in interval in ms"); + +static int interrupt_out_interval = 8; +MODULE_PARM(interrupt_out_interval, "i"); +MODULE_PARM_DESC(interrupt_out_interval, "Interrupt out interval in ms"); /* Define these values to match your device */ #define LEGO_USB_TOWER_VENDOR_ID 0x0694 #define LEGO_USB_TOWER_PRODUCT_ID 0x0001 +/* Vendor requests */ +#define LEGO_USB_TOWER_REQUEST_RESET 0x04 +#define LEGO_USB_TOWER_REQUEST_GET_VERSION 0xFD + +struct tower_reset_reply { + __u16 size; /* little-endian */ + __u8 err_code; + __u8 spare; +} __attribute__ ((packed)); + +struct tower_get_version_reply { + __u16 size; /* little-endian */ + __u8 err_code; + __u8 spare; + __u8 major; + __u8 minor; + __u16 build_no; /* little-endian */ +} __attribute__ ((packed)); + + /* table of devices that work with this driver */ static struct usb_device_id tower_table [] = { { USB_DEVICE(LEGO_USB_TOWER_VENDOR_ID, LEGO_USB_TOWER_PRODUCT_ID) }, @@ -90,22 +200,21 @@ #define LEGO_USB_TOWER_MINOR_BASE 160 -/* we can have up to this number of device plugged in at once */ -#define MAX_DEVICES 16 - -#define COMMAND_TIMEOUT (2*HZ) /* 2 second timeout for a command */ /* Structure to hold all of our device specific stuff */ struct lego_usb_tower { struct semaphore sem; /* locks this structure */ - struct usb_device* udev; /* save off the usb device pointer */ - struct usb_interface* interface; + struct usb_device* udev; /* save off the usb device pointer */ unsigned char minor; /* the starting minor number for this device */ int open_count; /* number of times this port has been opened */ char* read_buffer; - int read_buffer_length; + size_t read_buffer_length; /* this much came in */ + size_t read_packet_length; /* this much will be returned on read */ + spinlock_t read_buffer_lock; + int packet_timeout_jiffies; + unsigned long read_last_arrival; wait_queue_head_t read_wait; wait_queue_head_t write_wait; @@ -113,18 +222,18 @@ char* interrupt_in_buffer; struct usb_endpoint_descriptor* interrupt_in_endpoint; struct urb* interrupt_in_urb; + int interrupt_in_interval; + int interrupt_in_running; + int interrupt_in_done; char* interrupt_out_buffer; struct usb_endpoint_descriptor* interrupt_out_endpoint; struct urb* interrupt_out_urb; + int interrupt_out_interval; + int interrupt_out_busy; }; -/* Note that no locking is needed: - * read_buffer is arbitrated by read_buffer_length == 0 - * interrupt_out_buffer is arbitrated by interrupt_out_urb->status == -EINPROGRESS - * interrupt_in_buffer belongs to urb alone and is overwritten on overflow - */ /* local function prototypes */ static ssize_t tower_read (struct file *file, char *buffer, size_t count, loff_t *ppos); @@ -132,8 +241,11 @@ static inline void tower_delete (struct lego_usb_tower *dev); static int tower_open (struct inode *inode, struct file *file); static int tower_release (struct inode *inode, struct file *file); -static int tower_release_internal (struct lego_usb_tower *dev); +static unsigned int tower_poll (struct file *file, poll_table *wait); +static loff_t tower_llseek (struct file *file, loff_t off, int whence); + static void tower_abort_transfers (struct lego_usb_tower *dev); +static void tower_check_for_read_packet (struct lego_usb_tower *dev); static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs); static void tower_interrupt_out_callback (struct urb *urb, struct pt_regs *regs); @@ -146,14 +258,16 @@ /* file operations needed when we register this driver */ static struct file_operations tower_fops = { - .owner = THIS_MODULE, - .read = tower_read, + .owner = THIS_MODULE, + .read = tower_read, .write = tower_write, .open = tower_open, - .release = tower_release, + .release = tower_release, + .poll = tower_poll, + .llseek = tower_llseek, }; -/* +/* * usb class driver info in order to get a minor number from the usb core, * and to have the device registered with devfs and the driver core */ @@ -167,11 +281,11 @@ /* usb specific object needed to register this driver with the usb subsystem */ static struct usb_driver tower_driver = { - .owner = THIS_MODULE, - .name = "legousbtower", - .probe = tower_probe, - .disconnect = tower_disconnect, - .id_table = tower_table, + .owner = THIS_MODULE, + .name = "legousbtower", + .probe = tower_probe, + .disconnect = tower_disconnect, + .id_table = tower_table, }; @@ -183,8 +297,8 @@ int i; if (debug < level) - return; - + return; + printk (KERN_DEBUG __FILE__": %s - length = %d, data = ", function, size); for (i = 0; i < size; ++i) { printk ("%.2x ", data[i]); @@ -198,7 +312,7 @@ */ static inline void tower_delete (struct lego_usb_tower *dev) { - dbg(2, "%s enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); tower_abort_transfers (dev); @@ -214,7 +328,7 @@ kfree (dev->interrupt_out_buffer); kfree (dev); - dbg(2, "%s : leave", __func__); + dbg(2, "%s: leave", __FUNCTION__); } @@ -228,7 +342,7 @@ int retval = 0; struct usb_interface *interface; - dbg(2,"%s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); subminor = iminor(inode); @@ -240,37 +354,63 @@ err ("%s - error, can't find device for minor %d", __FUNCTION__, subminor); retval = -ENODEV; - goto exit_no_device; + goto unlock_disconnect_exit; } dev = usb_get_intfdata(interface); if (!dev) { retval = -ENODEV; - goto exit_no_device; + goto unlock_disconnect_exit; } /* lock this device */ - down (&dev->sem); - - - /* increment our usage count for the device */ - ++dev->open_count; - - /* save device in the file's private structure */ - file->private_data = dev; + if (down_interruptible (&dev->sem)) { + retval = -ERESTARTSYS; + goto unlock_disconnect_exit; + } + /* allow opening only once */ + if (dev->open_count) { + retval = -EBUSY; + goto unlock_exit; + } + dev->open_count = 1; /* initialize in direction */ dev->read_buffer_length = 0; + dev->read_packet_length = 0; + usb_fill_int_urb (dev->interrupt_in_urb, + dev->udev, + usb_rcvintpipe(dev->udev, dev->interrupt_in_endpoint->bEndpointAddress), + dev->interrupt_in_buffer, + dev->interrupt_in_endpoint->wMaxPacketSize, + tower_interrupt_in_callback, + dev, + dev->interrupt_in_interval); + + dev->interrupt_in_running = 1; + dev->interrupt_in_done = 0; + mb(); - up (&dev->sem); + retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL); + if (retval) { + err("Couldn't submit interrupt_in_urb %d", retval); + dev->interrupt_in_running = 0; + dev->open_count = 0; + goto unlock_exit; + } -exit_no_device: + /* save device in the file's private structure */ + file->private_data = dev; +unlock_exit: + up (&dev->sem); + +unlock_disconnect_exit: up (&disconnect_sem); - dbg(2,"%s : leave, return value %d ", __func__, retval); + dbg(2, "%s: leave, return value %d ", __FUNCTION__, retval); return retval; } @@ -283,87 +423,137 @@ struct lego_usb_tower *dev; int retval = 0; - dbg(2," %s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); dev = (struct lego_usb_tower *)file->private_data; if (dev == NULL) { - dbg(1," %s : object is NULL", __func__); + dbg(1, "%s: object is NULL", __FUNCTION__); retval = -ENODEV; goto exit; } + if (down_interruptible (&dev->sem)) { + retval = -ERESTARTSYS; + goto exit; + } - /* lock our device */ - down (&dev->sem); - - if (dev->open_count <= 0) { - dbg(1," %s : device not opened", __func__); + if (dev->open_count != 1) { + dbg(1, "%s: device not opened exactly once", __FUNCTION__); retval = -ENODEV; + goto unlock_exit; + } + if (dev->udev == NULL) { + /* the device was unplugged before the file was released */ + up (&dev->sem); /* unlock here as tower_delete frees dev */ + tower_delete (dev); goto exit; } - /* do the work */ - retval = tower_release_internal (dev); + /* wait until write transfer is finished */ + if (dev->interrupt_out_busy) { + wait_event_interruptible_timeout (dev->write_wait, !dev->interrupt_out_busy, 2 * HZ); + } + tower_abort_transfers (dev); + dev->open_count = 0; -exit: +unlock_exit: up (&dev->sem); - dbg(2," %s : leave, return value %d", __func__, retval); + +exit: + dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); return retval; } /** - * tower_release_internal + * tower_abort_transfers + * aborts transfers and frees associated data structures */ -static int tower_release_internal (struct lego_usb_tower *dev) +static void tower_abort_transfers (struct lego_usb_tower *dev) { - int retval = 0; + dbg(2, "%s: enter", __FUNCTION__); - dbg(2," %s : enter", __func__); - - if (dev->udev == NULL) { - /* the device was unplugged before the file was released */ - tower_delete (dev); + if (dev == NULL) { + dbg(1, "%s: dev is null", __FUNCTION__); goto exit; } - /* decrement our usage count for the device */ - --dev->open_count; - if (dev->open_count <= 0) { - tower_abort_transfers (dev); - dev->open_count = 0; + /* shutdown transfer */ + if (dev->interrupt_in_running) { + dev->interrupt_in_running = 0; + mb(); + if (dev->interrupt_in_urb != NULL && dev->udev) { + usb_unlink_urb (dev->interrupt_in_urb); + } + } + if (dev->interrupt_out_busy) { + if (dev->interrupt_out_urb != NULL && dev->udev) { + usb_unlink_urb (dev->interrupt_out_urb); + } } exit: - dbg(2," %s : leave", __func__); - return retval; + dbg(2, "%s: leave", __FUNCTION__); } /** - * tower_abort_transfers - * aborts transfers and frees associated data structures + * tower_check_for_read_packet + * + * To get correct semantics for signals and non-blocking I/O + * with packetizing we pretend not to see any data in the read buffer + * until it has been there unchanged for at least + * dev->packet_timeout_jiffies, or until the buffer is full. */ -static void tower_abort_transfers (struct lego_usb_tower *dev) +static void tower_check_for_read_packet (struct lego_usb_tower *dev) { - dbg(2," %s : enter", __func__); - - if (dev == NULL) { - dbg(1," %s : dev is null", __func__); - goto exit; + spin_lock_irq (&dev->read_buffer_lock); + if (!packet_timeout + || time_after(jiffies, dev->read_last_arrival + dev->packet_timeout_jiffies) + || dev->read_buffer_length == read_buffer_size) { + dev->read_packet_length = dev->read_buffer_length; } + dev->interrupt_in_done = 0; + spin_unlock_irq (&dev->read_buffer_lock); +} - /* shutdown transfer */ - if (dev->interrupt_in_urb != NULL) { - usb_unlink_urb (dev->interrupt_in_urb); + +/** + * tower_poll + */ +static unsigned int tower_poll (struct file *file, poll_table *wait) +{ + struct lego_usb_tower *dev; + unsigned int mask = 0; + + dbg(2, "%s: enter", __FUNCTION__); + + dev = file->private_data; + + poll_wait(file, &dev->read_wait, wait); + poll_wait(file, &dev->write_wait, wait); + + tower_check_for_read_packet(dev); + if (dev->read_packet_length > 0) { + mask |= POLLIN | POLLRDNORM; } - if (dev->interrupt_out_urb != NULL) { - usb_unlink_urb (dev->interrupt_out_urb); + if (!dev->interrupt_out_busy) { + mask |= POLLOUT | POLLWRNORM; } -exit: - dbg(2," %s : leave", __func__); + dbg(2, "%s: leave, mask = %d", __FUNCTION__, mask); + + return mask; +} + + +/** + * tower_llseek + */ +static loff_t tower_llseek (struct file *file, loff_t off, int whence) +{ + return -ESPIPE; /* unseekable */ } @@ -373,96 +563,87 @@ static ssize_t tower_read (struct file *file, char *buffer, size_t count, loff_t *ppos) { struct lego_usb_tower *dev; - size_t bytes_read = 0; size_t bytes_to_read; int i; int retval = 0; - int timeout = 0; + unsigned long timeout = 0; - dbg(2," %s : enter, count = %Zd", __func__, count); + dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count); dev = (struct lego_usb_tower *)file->private_data; - + /* lock this object */ - down (&dev->sem); + if (down_interruptible (&dev->sem)) { + retval = -ERESTARTSYS; + goto exit; + } /* verify that the device wasn't unplugged */ if (dev->udev == NULL) { retval = -ENODEV; err("No device or device unplugged %d", retval); - goto exit; + goto unlock_exit; } /* verify that we actually have some data to read */ if (count == 0) { - dbg(1," %s : read request of 0 bytes", __func__); - goto exit; + dbg(1, "%s: read request of 0 bytes", __FUNCTION__); + goto unlock_exit; } + if (read_timeout) { + timeout = jiffies + read_timeout * HZ / 1000; + } + + /* wait for data */ + tower_check_for_read_packet (dev); + while (dev->read_packet_length == 0) { + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + goto unlock_exit; + } + retval = wait_event_interruptible_timeout(dev->read_wait, dev->interrupt_in_done, dev->packet_timeout_jiffies); + if (retval < 0) { + goto unlock_exit; + } - timeout = COMMAND_TIMEOUT; + /* reset read timeout during read or write activity */ + if (read_timeout + && (dev->read_buffer_length || dev->interrupt_out_busy)) { + timeout = jiffies + read_timeout * HZ / 1000; + } + /* check for read timeout */ + if (read_timeout && time_after (jiffies, timeout)) { + retval = -ETIMEDOUT; + goto unlock_exit; + } + tower_check_for_read_packet (dev); + } - while (1) { - if (dev->read_buffer_length == 0) { + /* copy the data from read_buffer into userspace */ + bytes_to_read = min(count, dev->read_packet_length); - /* start reading */ - usb_fill_int_urb (dev->interrupt_in_urb,dev->udev, - usb_rcvintpipe(dev->udev, dev->interrupt_in_endpoint->bEndpointAddress), - dev->interrupt_in_buffer, - dev->interrupt_in_endpoint->wMaxPacketSize, - tower_interrupt_in_callback, - dev, - dev->interrupt_in_endpoint->bInterval); - - retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL); - - if (retval < 0) { - err("Couldn't submit interrupt_in_urb"); - goto exit; - } - - if (timeout <= 0) { - retval = -ETIMEDOUT; - goto exit; - } - - if (signal_pending(current)) { - retval = -EINTR; - goto exit; - } - - up (&dev->sem); - timeout = interruptible_sleep_on_timeout (&dev->read_wait, timeout); - down (&dev->sem); + if (copy_to_user (buffer, dev->read_buffer, bytes_to_read)) { + retval = -EFAULT; + goto unlock_exit; + } - } else { - /* copy the data from read_buffer into userspace */ - bytes_to_read = count > dev->read_buffer_length ? dev->read_buffer_length : count; - if (copy_to_user (buffer, dev->read_buffer, bytes_to_read) != 0) { - retval = -EFAULT; - goto exit; - } - dev->read_buffer_length -= bytes_to_read; - for (i=0; iread_buffer_length; i++) { - dev->read_buffer[i] = dev->read_buffer[i+bytes_to_read]; - } - - buffer += bytes_to_read; - count -= bytes_to_read; - bytes_read += bytes_to_read; - if (count == 0) { - break; - } - } + spin_lock_irq (&dev->read_buffer_lock); + dev->read_buffer_length -= bytes_to_read; + dev->read_packet_length -= bytes_to_read; + for (i=0; iread_buffer_length; i++) { + dev->read_buffer[i] = dev->read_buffer[i+bytes_to_read]; } + spin_unlock_irq (&dev->read_buffer_lock); - retval = bytes_read; + retval = bytes_to_read; -exit: +unlock_exit: /* unlock the device */ up (&dev->sem); - dbg(2," %s : leave, return value %d", __func__, retval); +exit: + dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); return retval; } @@ -473,107 +654,80 @@ static ssize_t tower_write (struct file *file, const char *buffer, size_t count, loff_t *ppos) { struct lego_usb_tower *dev; - size_t bytes_written = 0; size_t bytes_to_write; - size_t buffer_size; int retval = 0; - int timeout = 0; - dbg(2," %s : enter, count = %Zd", __func__, count); + dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count); dev = (struct lego_usb_tower *)file->private_data; /* lock this object */ - down (&dev->sem); + if (down_interruptible (&dev->sem)) { + retval = -ERESTARTSYS; + goto exit; + } /* verify that the device wasn't unplugged */ if (dev->udev == NULL) { retval = -ENODEV; err("No device or device unplugged %d", retval); - goto exit; + goto unlock_exit; } /* verify that we actually have some data to write */ if (count == 0) { - dbg(1," %s : write request of 0 bytes", __func__); - goto exit; + dbg(1, "%s: write request of 0 bytes", __FUNCTION__); + goto unlock_exit; } + /* wait until previous transfer is finished */ + while (dev->interrupt_out_busy) { + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + goto unlock_exit; + } + retval = wait_event_interruptible (dev->write_wait, !dev->interrupt_out_busy); + if (retval) { + goto unlock_exit; + } + } - while (count > 0) { - if (dev->interrupt_out_urb->status == -EINPROGRESS) { - timeout = COMMAND_TIMEOUT; - - while (timeout > 0) { - if (signal_pending(current)) { - dbg(1," %s : interrupted", __func__); - retval = -EINTR; - goto exit; - } - up (&dev->sem); - timeout = interruptible_sleep_on_timeout (&dev->write_wait, timeout); - down (&dev->sem); - if (timeout > 0) { - break; - } - dbg(1," %s : interrupted timeout: %d", __func__, timeout); - } - - - dbg(1," %s : final timeout: %d", __func__, timeout); - - if (timeout == 0) { - dbg(1, "%s - command timed out.", __func__); - retval = -ETIMEDOUT; - goto exit; - } - - dbg(4," %s : in progress, count = %Zd", __func__, count); - } else { - dbg(4," %s : sending, count = %Zd", __func__, count); - - /* write the data into interrupt_out_buffer from userspace */ - buffer_size = dev->interrupt_out_endpoint->wMaxPacketSize; - bytes_to_write = count > buffer_size ? buffer_size : count; - dbg(4," %s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd", __func__, buffer_size, count, bytes_to_write); - - if (copy_from_user (dev->interrupt_out_buffer, buffer, bytes_to_write) != 0) { - retval = -EFAULT; - goto exit; - } - - /* send off the urb */ - usb_fill_int_urb(dev->interrupt_out_urb, - dev->udev, - usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress), - dev->interrupt_out_buffer, - bytes_to_write, - tower_interrupt_out_callback, - dev, - dev->interrupt_in_endpoint->bInterval); - - dev->interrupt_out_urb->actual_length = bytes_to_write; - retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL); - - if (retval < 0) { - err("Couldn't submit interrupt_out_urb %d", retval); - goto exit; - } + /* write the data into interrupt_out_buffer from userspace */ + bytes_to_write = min(count, write_buffer_size); + dbg(4, "%s: count = %Zd, bytes_to_write = %Zd", __FUNCTION__, count, bytes_to_write); + + if (copy_from_user (dev->interrupt_out_buffer, buffer, bytes_to_write)) { + retval = -EFAULT; + goto unlock_exit; + } + + /* send off the urb */ + usb_fill_int_urb(dev->interrupt_out_urb, + dev->udev, + usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress), + dev->interrupt_out_buffer, + bytes_to_write, + tower_interrupt_out_callback, + dev, + dev->interrupt_out_interval); - buffer += bytes_to_write; - count -= bytes_to_write; + dev->interrupt_out_busy = 1; + wmb(); - bytes_written += bytes_to_write; - } + retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL); + if (retval) { + dev->interrupt_out_busy = 0; + err("Couldn't submit interrupt_out_urb %d", retval); + goto unlock_exit; } + retval = bytes_to_write; - retval = bytes_written; - -exit: +unlock_exit: /* unlock the device */ up (&dev->sem); - dbg(2," %s : leave, return value %d", __func__, retval); +exit: + dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); return retval; } @@ -585,39 +739,53 @@ static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs) { struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context; + int retval; - dbg(4," %s : enter, status %d", __func__, urb->status); + dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status); - lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer); + lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer); - if (urb->status != 0) { - if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET)) { - dbg(1," %s : nonzero status received: %d", __func__, urb->status); + if (urb->status) { + if (urb->status == -ENOENT || + urb->status == -ECONNRESET || + urb->status == -ESHUTDOWN) { + goto exit; + } else { + dbg(1, "%s: nonzero status received: %d", __FUNCTION__, urb->status); + goto resubmit; /* maybe we can recover */ } - goto exit; } - down (&dev->sem); - if (urb->actual_length > 0) { - if (dev->read_buffer_length < (4 * dev->interrupt_in_endpoint->wMaxPacketSize) - (urb->actual_length)) { - - memcpy (dev->read_buffer+dev->read_buffer_length, dev->interrupt_in_buffer, urb->actual_length); - + spin_lock (&dev->read_buffer_lock); + if (dev->read_buffer_length + urb->actual_length < read_buffer_size) { + memcpy (dev->read_buffer + dev->read_buffer_length, + dev->interrupt_in_buffer, + urb->actual_length); dev->read_buffer_length += urb->actual_length; - dbg(1," %s reading %d ", __func__, urb->actual_length); - wake_up_interruptible (&dev->read_wait); - + dev->read_last_arrival = jiffies; + dbg(3, "%s: received %d bytes", __FUNCTION__, urb->actual_length); } else { - dbg(1," %s : read_buffer overflow", __func__); + printk(KERN_WARNING "%s: read_buffer overflow, %d bytes dropped", __FUNCTION__, urb->actual_length); } + spin_unlock (&dev->read_buffer_lock); } - up (&dev->sem); +resubmit: + /* resubmit if we're still running */ + if (dev->interrupt_in_running && dev->udev) { + retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC); + if (retval) { + err("%s: usb_submit_urb failed (%d)", __FUNCTION__, retval); + } + } exit: - lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer); - dbg(4," %s : leave, status %d", __func__, urb->status); + dev->interrupt_in_done = 1; + wake_up_interruptible (&dev->read_wait); + + lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer); + dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status); } @@ -628,22 +796,22 @@ { struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context; - dbg(4," %s : enter, status %d", __func__, urb->status); - lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer); + dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status); + lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer); - if (urb->status != 0) { - if ((urb->status != -ENOENT) && - (urb->status != -ECONNRESET)) { - dbg(1, " %s :nonzero status received: %d", __func__, urb->status); - } - goto exit; - } + /* sync/async unlink faults aren't errors */ + if (urb->status && !(urb->status == -ENOENT || + urb->status == -ECONNRESET || + urb->status == -ESHUTDOWN)) { + dbg(1, "%s - nonzero write bulk status received: %d", + __FUNCTION__, urb->status); + } + dev->interrupt_out_busy = 0; wake_up_interruptible(&dev->write_wait); -exit: - lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer); - dbg(4," %s : leave, status %d", __func__, urb->status); + lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer); + dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status); } @@ -659,15 +827,18 @@ struct lego_usb_tower *dev = NULL; struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor* endpoint; + struct tower_reset_reply reset_reply; + struct tower_get_version_reply get_version_reply; int i; int retval = -ENOMEM; + int result; - dbg(2," %s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); if (udev == NULL) { info ("udev is NULL."); } - + /* See if the device offered us matches what we can accept */ if ((udev->descriptor.idVendor != LEGO_USB_TOWER_VENDOR_ID) || (udev->descriptor.idProduct != LEGO_USB_TOWER_PRODUCT_ID)) { @@ -691,6 +862,10 @@ dev->read_buffer = NULL; dev->read_buffer_length = 0; + dev->read_packet_length = 0; + spin_lock_init (&dev->read_buffer_lock); + dev->packet_timeout_jiffies = packet_timeout * HZ / 1000; + dev->read_last_arrival = jiffies; init_waitqueue_head (&dev->read_wait); init_waitqueue_head (&dev->write_wait); @@ -698,13 +873,15 @@ dev->interrupt_in_buffer = NULL; dev->interrupt_in_endpoint = NULL; dev->interrupt_in_urb = NULL; + dev->interrupt_in_running = 0; + dev->interrupt_in_done = 0; dev->interrupt_out_buffer = NULL; dev->interrupt_out_endpoint = NULL; dev->interrupt_out_urb = NULL; + dev->interrupt_out_busy = 0; - - iface_desc = &interface->altsetting[0]; + iface_desc = interface->cur_altsetting; /* set up the endpoint information */ for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { @@ -714,7 +891,7 @@ ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) { dev->interrupt_in_endpoint = endpoint; } - + if (((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) && ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) { dev->interrupt_out_endpoint = endpoint; @@ -729,7 +906,7 @@ goto error; } - dev->read_buffer = kmalloc ((4*dev->interrupt_in_endpoint->wMaxPacketSize), GFP_KERNEL); + dev->read_buffer = kmalloc (read_buffer_size, GFP_KERNEL); if (!dev->read_buffer) { err("Couldn't allocate read_buffer"); goto error; @@ -744,7 +921,7 @@ err("Couldn't allocate interrupt_in_urb"); goto error; } - dev->interrupt_out_buffer = kmalloc (dev->interrupt_out_endpoint->wMaxPacketSize, GFP_KERNEL); + dev->interrupt_out_buffer = kmalloc (write_buffer_size, GFP_KERNEL); if (!dev->interrupt_out_buffer) { err("Couldn't allocate interrupt_out_buffer"); goto error; @@ -753,7 +930,9 @@ if (!dev->interrupt_out_urb) { err("Couldn't allocate interrupt_out_urb"); goto error; - } + } + dev->interrupt_in_interval = interrupt_in_interval ? interrupt_in_interval : dev->interrupt_in_endpoint->bInterval; + dev->interrupt_out_interval = interrupt_out_interval ? interrupt_out_interval : dev->interrupt_out_endpoint->bInterval; /* we can register the device now, as it is ready */ usb_set_intfdata (interface, dev); @@ -766,16 +945,50 @@ usb_set_intfdata (interface, NULL); goto error; } - dev->minor = interface->minor; /* let the user know what node this device is now attached to */ - info ("LEGO USB Tower device now attached to /dev/usb/lego%d", (dev->minor - LEGO_USB_TOWER_MINOR_BASE)); + info ("LEGO USB Tower #%d now attached to major %d minor %d", (dev->minor - LEGO_USB_TOWER_MINOR_BASE), USB_MAJOR, dev->minor); + /* reset the tower */ + result = usb_control_msg (udev, + usb_rcvctrlpipe(udev, 0), + LEGO_USB_TOWER_REQUEST_RESET, + USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE, + 0, + 0, + &reset_reply, + sizeof(reset_reply), + HZ); + if (result < 0) { + err("LEGO USB Tower reset control request failed"); + retval = result; + goto error; + } + + /* get the firmware version and log it */ + result = usb_control_msg (udev, + usb_rcvctrlpipe(udev, 0), + LEGO_USB_TOWER_REQUEST_GET_VERSION, + USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE, + 0, + 0, + &get_version_reply, + sizeof(get_version_reply), + HZ); + if (result < 0) { + err("LEGO USB Tower get version control request failed"); + retval = result; + goto error; + } + info("LEGO USB Tower firmware version is %d.%d build %d", + get_version_reply.major, + get_version_reply.minor, + le16_to_cpu(get_version_reply.build_no)); exit: - dbg(2," %s : leave, return value 0x%.8lx (dev)", __func__, (long) dev); + dbg(2, "%s: leave, return value 0x%.8lx (dev)", __FUNCTION__, (long) dev); return retval; @@ -795,7 +1008,7 @@ struct lego_usb_tower *dev; int minor; - dbg(2," %s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); down (&disconnect_sem); @@ -823,7 +1036,7 @@ info("LEGO USB Tower #%d now disconnected", (minor - LEGO_USB_TOWER_MINOR_BASE)); - dbg(2," %s : leave", __func__); + dbg(2, "%s: leave", __FUNCTION__); } @@ -836,7 +1049,7 @@ int result; int retval = 0; - dbg(2," %s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); /* register this driver with the USB subsystem */ result = usb_register(&tower_driver); @@ -849,7 +1062,7 @@ info(DRIVER_DESC " " DRIVER_VERSION); exit: - dbg(2," %s : leave, return value %d", __func__, retval); + dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); return retval; } @@ -860,12 +1073,12 @@ */ static void __exit lego_usb_tower_exit(void) { - dbg(2," %s : enter", __func__); + dbg(2, "%s: enter", __FUNCTION__); /* deregister this driver with the USB subsystem */ usb_deregister (&tower_driver); - dbg(2," %s : leave", __func__); + dbg(2, "%s: leave", __FUNCTION__); } module_init (lego_usb_tower_init); diff -Nru a/drivers/usb/misc/phidgetservo.c b/drivers/usb/misc/phidgetservo.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/usb/misc/phidgetservo.c Tue May 18 23:38:09 2004 @@ -0,0 +1,327 @@ +/* + * USB PhidgetServo driver 1.0 + * + * Copyright (C) 2004 Sean Young + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This is a driver for the USB PhidgetServo version 2.0 and 3.0 servo + * controllers available at: http://www.phidgets.com/ + * + * Note that the driver takes input as: degrees.minutes + * -23 < degrees < 203 + * 0 < minutes < 59 + * + * CAUTION: Generally you should use 0 < degrees < 180 as anything else + * is probably beyond the range of your servo and may damage it. + */ + +#include +#ifdef CONFIG_USB_DEBUG +#define DEBUG 1 +#endif +#include +#include +#include +#include +#include +#include + +#define DRIVER_AUTHOR "Sean Young " +#define DRIVER_DESC "USB PhidgetServo Driver" + +#define VENDOR_ID_GLAB 0x06c2 +#define DEVICE_ID_4MOTOR_SERVO_30 0x0038 +#define DEVICE_ID_1MOTOR_SERVO_30 0x0039 + +#define VENDOR_ID_WISEGROUP 0x0925 +#define DEVICE_ID_1MOTOR_SERVO_20 0x8101 +#define DEVICE_ID_4MOTOR_SERVO_20 0x8104 + +static struct usb_device_id id_table[] = { + {USB_DEVICE(VENDOR_ID_GLAB, DEVICE_ID_4MOTOR_SERVO_30)}, + {USB_DEVICE(VENDOR_ID_GLAB, DEVICE_ID_1MOTOR_SERVO_30)}, + {USB_DEVICE(VENDOR_ID_WISEGROUP, DEVICE_ID_4MOTOR_SERVO_20)}, + {USB_DEVICE(VENDOR_ID_WISEGROUP, DEVICE_ID_1MOTOR_SERVO_20)}, + {} +}; + +MODULE_DEVICE_TABLE(usb, id_table); + +struct phidget_servo { + struct usb_device *udev; + int version; + int quad_servo; + int pulse[4]; + int degrees[4]; + int minutes[4]; +}; + +static void +change_position_v30(struct phidget_servo *servo, int servo_no, int degrees, + int minutes) +{ + int retval; + unsigned char *buffer; + + buffer = kmalloc(6, GFP_KERNEL); + if (!buffer) { + dev_err(&servo->udev->dev, "%s - out of memory\n", + __FUNCTION__); + return; + } + + /* + * pulse = 0 - 4095 + * angle = 0 - 180 degrees + * + * pulse = angle * 10.6 + 243.8 + */ + servo->pulse[servo_no] = ((degrees*60 + minutes)*106 + 2438*60)/600; + servo->degrees[servo_no]= degrees; + servo->minutes[servo_no]= minutes; + + /* + * The PhidgetServo v3.0 is controlled by sending 6 bytes, + * 4 * 12 bits for each servo. + * + * low = lower 8 bits pulse + * high = higher 4 bits pulse + * + * offset bits + * +---+-----------------+ + * | 0 | low 0 | + * +---+--------+--------+ + * | 1 | high 1 | high 0 | + * +---+--------+--------+ + * | 2 | low 1 | + * +---+-----------------+ + * | 3 | low 2 | + * +---+--------+--------+ + * | 4 | high 3 | high 2 | + * +---+--------+--------+ + * | 5 | low 3 | + * +---+-----------------+ + */ + + buffer[0] = servo->pulse[0] & 0xff; + buffer[1] = (servo->pulse[0] >> 8 & 0x0f) + | (servo->pulse[1] >> 4 & 0xf0); + buffer[2] = servo->pulse[1] & 0xff; + buffer[3] = servo->pulse[2] & 0xff; + buffer[4] = (servo->pulse[2] >> 8 & 0x0f) + | (servo->pulse[3] >> 4 & 0xf0); + buffer[5] = servo->pulse[3] & 0xff; + + dev_dbg(&servo->udev->dev, + "data: %02x %02x %02x %02x %02x %02x\n", + buffer[0], buffer[1], buffer[2], + buffer[3], buffer[4], buffer[5]); + + retval = usb_control_msg(servo->udev, + usb_sndctrlpipe(servo->udev, 0), + 0x09, 0x21, 0x0200, 0x0000, buffer, 6, 2 * HZ); + if (retval != 6) + dev_err(&servo->udev->dev, "retval = %d\n", retval); + kfree(buffer); +} + +static void +change_position_v20(struct phidget_servo *servo, int servo_no, int degrees, + int minutes) +{ + int retval; + unsigned char *buffer; + + buffer = kmalloc(2, GFP_KERNEL); + if (!buffer) { + dev_err(&servo->udev->dev, "%s - out of memory\n", + __FUNCTION__); + return; + } + + /* + * angle = 0 - 180 degrees + * pulse = angle + 23 + */ + servo->pulse[servo_no]= degrees + 23; + servo->degrees[servo_no]= degrees; + servo->minutes[servo_no]= 0; + + /* + * The PhidgetServo v2.0 is controlled by sending two bytes. The + * first byte is the servo number xor'ed with 2: + * + * servo 0 = 2 + * servo 1 = 3 + * servo 2 = 0 + * servo 3 = 1 + * + * The second byte is the position. + */ + + buffer[0] = servo_no ^ 2; + buffer[1] = servo->pulse[servo_no]; + + dev_dbg(&servo->udev->dev, "data: %02x %02x\n", buffer[0], buffer[1]); + + retval = usb_control_msg(servo->udev, + usb_sndctrlpipe(servo->udev, 0), + 0x09, 0x21, 0x0200, 0x0000, buffer, 2, 2 * HZ); + if (retval != 2) + dev_err(&servo->udev->dev, "retval = %d\n", retval); + kfree(buffer); +} + +#define show_set(value) \ +static ssize_t set_servo##value (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + int degrees, minutes; \ + struct usb_interface *intf = to_usb_interface (dev); \ + struct phidget_servo *servo = usb_get_intfdata (intf); \ + \ + minutes = 0; \ + /* must at least convert degrees */ \ + if (sscanf (buf, "%d.%d", °rees, &minutes) < 1) { \ + return -EINVAL; \ + } \ + \ + if (degrees < -23 || degrees > (180 + 23) || \ + minutes < 0 || minutes > 59) { \ + return -EINVAL; \ + } \ + \ + if (servo->version >= 3) \ + change_position_v30 (servo, value, degrees, minutes); \ + else \ + change_position_v20 (servo, value, degrees, minutes); \ + \ + return count; \ +} \ + \ +static ssize_t show_servo##value (struct device *dev, char *buf) \ +{ \ + struct usb_interface *intf = to_usb_interface (dev); \ + struct phidget_servo *servo = usb_get_intfdata (intf); \ + \ + return sprintf (buf, "%d.%02d\n", servo->degrees[value], \ + servo->minutes[value]); \ +} \ +static DEVICE_ATTR(servo##value, S_IWUGO | S_IRUGO, \ + show_servo##value, set_servo##value); + +show_set(0); +show_set(1); +show_set(2); +show_set(3); + +static int +servo_probe(struct usb_interface *interface, const struct usb_device_id *id) +{ + struct usb_device *udev = interface_to_usbdev(interface); + struct phidget_servo *dev = NULL; + + dev = kmalloc(sizeof (struct phidget_servo), GFP_KERNEL); + if (dev == NULL) { + dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__); + return -ENOMEM; + } + memset(dev, 0x00, sizeof (*dev)); + + dev->udev = usb_get_dev(udev); + switch (udev->descriptor.idVendor) { + case VENDOR_ID_WISEGROUP: + dev->version = 2; + break; + case VENDOR_ID_GLAB: + dev->version = 3; + break; + } + switch (udev->descriptor.idProduct) { + case DEVICE_ID_4MOTOR_SERVO_20: + case DEVICE_ID_4MOTOR_SERVO_30: + dev->quad_servo = 1; + break; + case DEVICE_ID_1MOTOR_SERVO_20: + case DEVICE_ID_1MOTOR_SERVO_30: + dev->quad_servo = 0; + break; + } + + usb_set_intfdata(interface, dev); + + device_create_file(&interface->dev, &dev_attr_servo0); + if (dev->quad_servo) { + device_create_file(&interface->dev, &dev_attr_servo1); + device_create_file(&interface->dev, &dev_attr_servo2); + device_create_file(&interface->dev, &dev_attr_servo3); + } + + dev_info(&interface->dev, "USB %d-Motor PhidgetServo v%d.0 attached\n", + dev->quad_servo ? 4 : 1, dev->version); + if (dev->version == 2) + dev_info(&interface->dev, + "WARNING: v2.0 not tested! Please report if it works.\n"); + + return 0; +} + +static void +servo_disconnect(struct usb_interface *interface) +{ + struct phidget_servo *dev; + + dev = usb_get_intfdata(interface); + usb_set_intfdata(interface, NULL); + + device_remove_file(&interface->dev, &dev_attr_servo0); + if (dev->quad_servo) { + device_remove_file(&interface->dev, &dev_attr_servo1); + device_remove_file(&interface->dev, &dev_attr_servo2); + device_remove_file(&interface->dev, &dev_attr_servo3); + } + + usb_put_dev(dev->udev); + + kfree(dev); + + dev_info(&interface->dev, "USB %d-Motor PhidgetServo v%d.0 detached\n", + dev->quad_servo ? 4 : 1, dev->version); +} + +static struct usb_driver servo_driver = { + .owner = THIS_MODULE, + .name = "phidgetservo", + .probe = servo_probe, + .disconnect = servo_disconnect, + .id_table = id_table +}; + +static int __init +phidget_servo_init(void) +{ + int retval = 0; + + retval = usb_register(&servo_driver); + if (retval) + err("usb_register failed. Error number %d", retval); + + return retval; +} + +static void __exit +phidget_servo_exit(void) +{ + usb_deregister(&servo_driver); +} + +module_init(phidget_servo_init); +module_exit(phidget_servo_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/usb/misc/tiglusb.c b/drivers/usb/misc/tiglusb.c --- a/drivers/usb/misc/tiglusb.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/misc/tiglusb.c Tue May 18 23:38:05 2004 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "tiglusb.h" @@ -49,6 +50,7 @@ static tiglusb_t tiglusb[MAXTIGL]; static int timeout = TIMAXTIME; /* timeout in tenth of seconds */ +static struct class_simple *tiglusb_class; /*---------- misc functions ------------------------------------------- */ @@ -336,7 +338,7 @@ { struct usb_device *dev = interface_to_usbdev(intf); int minor = -1; - int i; + int i, err = 0; ptiglusb_t s; dbg ("probing vendor id 0x%x, device id 0x%x", @@ -347,18 +349,23 @@ * the TIGL hardware, there's only 1 configuration. */ - if (dev->descriptor.bNumConfigurations != 1) - return -ENODEV; + if (dev->descriptor.bNumConfigurations != 1) { + err = -ENODEV; + goto out; + } if ((dev->descriptor.idProduct != 0xe001) - && (dev->descriptor.idVendor != 0x451)) - return -ENODEV; + && (dev->descriptor.idVendor != 0x451)) { + err = -ENODEV; + goto out; + } // NOTE: it's already in this config, this shouldn't be needed. // is this working around some hardware bug? if (usb_reset_configuration (dev) < 0) { err ("tiglusb_probe: reset_configuration failed"); - return -ENODEV; + err = -ENODEV; + goto out; } /* @@ -372,8 +379,10 @@ } } - if (minor == -1) - return -ENODEV; + if (minor == -1) { + err = -ENODEV; + goto out; + } s = &tiglusb[minor]; @@ -383,17 +392,28 @@ up (&s->mutex); dbg ("bound to interface"); - devfs_mk_cdev(MKDEV(TIUSB_MAJOR, TIUSB_MINOR) + s->minor, + class_simple_device_add(tiglusb_class, MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor), + NULL, "usb%d", s->minor); + err = devfs_mk_cdev(MKDEV(TIUSB_MAJOR, TIUSB_MINOR) + s->minor, S_IFCHR | S_IRUGO | S_IWUGO, "ticables/usb/%d", s->minor); + if (err) + goto out_class; + /* Display firmware version */ info ("firmware revision %i.%02x", dev->descriptor.bcdDevice >> 8, dev->descriptor.bcdDevice & 0xff); usb_set_intfdata (intf, s); - return 0; + err = 0; + goto out; + +out_class: + class_simple_device_remove(MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor)); +out: + return err; } static void @@ -423,6 +443,7 @@ s->dev = NULL; s->opened = 0; + class_simple_device_remove(MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor)); devfs_remove("ticables/usb/%d", s->minor); info ("device %d removed", s->minor); @@ -473,7 +494,7 @@ tiglusb_init (void) { unsigned u; - int result; + int result, err = 0; /* initialize struct */ for (u = 0; u < MAXTIGL; u++) { @@ -490,28 +511,41 @@ /* register device */ if (register_chrdev (TIUSB_MAJOR, "tiglusb", &tiglusb_fops)) { err ("unable to get major %d", TIUSB_MAJOR); - return -EIO; + err = -EIO; + goto out; } /* Use devfs, tree: /dev/ticables/usb/[0..3] */ devfs_mk_dir ("ticables/usb"); + tiglusb_class = class_simple_create(THIS_MODULE, "tiglusb"); + if (IS_ERR(tiglusb_class)) { + err = PTR_ERR(tiglusb_class); + goto out_chrdev; + } /* register USB module */ result = usb_register (&tiglusb_driver); if (result < 0) { - unregister_chrdev (TIUSB_MAJOR, "tiglusb"); - return -1; + err = -1; + goto out_chrdev; } info (DRIVER_DESC ", version " DRIVER_VERSION); - return 0; + err = 0; + goto out; + +out_chrdev: + unregister_chrdev (TIUSB_MAJOR, "tiglusb"); +out: + return err; } static void __exit tiglusb_cleanup (void) { usb_deregister (&tiglusb_driver); + class_simple_destroy(tiglusb_class); devfs_remove("ticables/usb"); unregister_chrdev (TIUSB_MAJOR, "tiglusb"); } diff -Nru a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c --- a/drivers/usb/misc/usbtest.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/misc/usbtest.c Tue May 18 23:38:09 2004 @@ -802,6 +802,7 @@ switch (status) { case -EINPROGRESS: case -EBUSY: + case -EIDRM: continue; default: dbg ("urb unlink --> %d", status); @@ -1038,8 +1039,6 @@ if (!status) status = usb_submit_urb (urb, SLAB_ATOMIC); if (status) { - if (status == -ECONNRESET || status == -ENOENT) - status = 0; urb->status = status; complete ((struct completion *) urb->context); } @@ -1074,11 +1073,12 @@ /* unlinking that should always work. variable delay tests more * hcd states and code paths, even with little other system load. */ - wait_ms (jiffies % (2 * INTERRUPT_RATE)); + msleep (jiffies % (2 * INTERRUPT_RATE)); retry: retval = usb_unlink_urb (urb); - if (retval == -EBUSY) { + if (retval == -EBUSY || retval == -EIDRM) { /* we can't unlink urbs while they're completing. + * or if they've completed, and we haven't resubmitted. * "normal" drivers would prevent resubmission, but * since we're testing unlink paths, we can't. */ diff -Nru a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c --- a/drivers/usb/misc/uss720.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/misc/uss720.c Tue May 18 23:38:05 2004 @@ -553,7 +553,7 @@ i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); printk(KERN_DEBUG "uss720: set inteface result %d\n", i); - interface = &intf->altsetting[2]; + interface = intf->cur_altsetting; /* * Allocate parport interface diff -Nru a/drivers/usb/net/kaweth.c b/drivers/usb/net/kaweth.c --- a/drivers/usb/net/kaweth.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/net/kaweth.c Tue May 18 23:38:08 2004 @@ -123,9 +123,10 @@ const struct usb_device_id *id /* from id_table */ ); static void kaweth_disconnect(struct usb_interface *intf); -int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, - struct usb_ctrlrequest *cmd, void *data, - int len, int timeout); +static int kaweth_internal_control_msg(struct usb_device *usb_dev, + unsigned int pipe, + struct usb_ctrlrequest *cmd, void *data, + int len, int timeout); /**************************************************************** * usb_device_id @@ -1277,9 +1278,10 @@ /*-------------------------------------------------------------------*/ // returns status (negative) or length (positive) -int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, - struct usb_ctrlrequest *cmd, void *data, int len, - int timeout) +static int kaweth_internal_control_msg(struct usb_device *usb_dev, + unsigned int pipe, + struct usb_ctrlrequest *cmd, void *data, + int len, int timeout) { struct urb *urb; int retv; @@ -1305,7 +1307,7 @@ /**************************************************************** * kaweth_init ****************************************************************/ -int __init kaweth_init(void) +static int __init kaweth_init(void) { kaweth_dbg("Driver loading"); return usb_register(&kaweth_driver); @@ -1314,7 +1316,7 @@ /**************************************************************** * kaweth_exit ****************************************************************/ -void __exit kaweth_exit(void) +static void __exit kaweth_exit(void) { usb_deregister(&kaweth_driver); } diff -Nru a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c --- a/drivers/usb/net/pegasus.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/net/pegasus.c Tue May 18 23:38:09 2004 @@ -1321,13 +1321,13 @@ .id_table = pegasus_ids, }; -int __init pegasus_init(void) +static int __init pegasus_init(void) { info(DRIVER_VERSION ":" DRIVER_DESC); return usb_register(&pegasus_driver); } -void __exit pegasus_exit(void) +static void __exit pegasus_exit(void) { usb_deregister(&pegasus_driver); } diff -Nru a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c --- a/drivers/usb/net/rtl8150.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/net/rtl8150.c Tue May 18 23:38:08 2004 @@ -167,7 +167,7 @@ typedef struct rtl8150 rtl8150_t; -unsigned long multicast_filter_limit = 32; +static unsigned long multicast_filter_limit = 32; static void fill_skb_pool(rtl8150_t *); static void free_skb_pool(rtl8150_t *); @@ -516,7 +516,7 @@ netif_wake_queue(dev->netdev); } -void intr_callback(struct urb *urb, struct pt_regs *regs) +static void intr_callback(struct urb *urb, struct pt_regs *regs) { rtl8150_t *dev; __u8 *d; @@ -977,13 +977,13 @@ } } -int __init usb_rtl8150_init(void) +static int __init usb_rtl8150_init(void) { info(DRIVER_DESC " " DRIVER_VERSION); return usb_register(&rtl8150_driver); } -void __exit usb_rtl8150_exit(void) +static void __exit usb_rtl8150_exit(void) { usb_deregister(&rtl8150_driver); } diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c --- a/drivers/usb/net/usbnet.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/net/usbnet.c Tue May 18 23:38:07 2004 @@ -107,7 +107,13 @@ * *-------------------------------------------------------------------------*/ +// #define DEBUG // error path messages, extra info +// #define VERBOSE // more; success messages + #include +#ifdef CONFIG_USB_DEBUG +# define DEBUG +#endif #include #include #include @@ -120,25 +126,15 @@ #include #include #include - - -// #define DEBUG // error path messages, extra info -// #define VERBOSE // more; success messages -#define REALLY_QUEUE - -#if !defined (DEBUG) && defined (CONFIG_USB_DEBUG) -# define DEBUG -#endif #include - #include #include #include #include - #define DRIVER_VERSION "25-Aug-2003" + /*-------------------------------------------------------------------------*/ /* @@ -148,13 +144,8 @@ * For high speed, each frame comfortably fits almost 36 max size * Ethernet packets (so queues should be bigger). */ -#ifdef REALLY_QUEUE #define RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4) #define TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4) -#else -#define RX_QLEN(dev) 1 -#define TX_QLEN(dev) 1 -#endif // packets are always ethernet inside // ... except they can be bigger (limit of 64K with NetChip framing) @@ -606,7 +597,7 @@ ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf); } -void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) +static void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) { struct usbnet *dev = (struct usbnet *)net->priv; u8 opt; @@ -626,7 +617,7 @@ } } -int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) +static int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) { struct usbnet *dev = (struct usbnet *)net->priv; u8 opt = 0; @@ -646,8 +637,8 @@ return 0; } -int ax8817x_get_eeprom(struct net_device *net, - struct ethtool_eeprom *eeprom, u8 *data) +static int ax8817x_get_eeprom(struct net_device *net, + struct ethtool_eeprom *eeprom, u8 *data) { struct usbnet *dev = (struct usbnet *)net->priv; u16 *ebuf = (u16 *)data; @@ -729,7 +720,7 @@ (gpio_bits >> (i * 8)) & 0xff, 0, 0, buf)) < 0) return ret; - wait_ms(5); + msleep(5); } if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, 0x80, 0, 0, buf)) < 0) { @@ -928,8 +919,8 @@ */ static int generic_cdc_bind (struct usbnet *dev, struct usb_interface *intf) { - u8 *buf = intf->altsetting->extra; - int len = intf->altsetting->extralen; + u8 *buf = intf->cur_altsetting->extra; + int len = intf->cur_altsetting->extralen; struct usb_interface_descriptor *d; struct cdc_state *info = (void *) &dev->data; int status; @@ -955,7 +946,7 @@ /* this assumes that if there's a non-RNDIS vendor variant * of cdc-acm, it'll fail RNDIS requests cleanly. */ - rndis = (intf->altsetting->desc.bInterfaceProtocol == 0xff); + rndis = (intf->cur_altsetting->desc.bInterfaceProtocol == 0xff); memset (info, 0, sizeof *info); info->control = intf; @@ -1006,7 +997,7 @@ if (!info->control || !info->data) { dev_dbg (&intf->dev, "master #%u/%p slave #%u/%p\n", - info->u->bMasterInterface0 + info->u->bMasterInterface0, info->control, info->u->bSlaveInterface0, info->data); @@ -1025,7 +1016,7 @@ } /* a data interface altsetting does the real i/o */ - d = &info->data->altsetting->desc; + d = &info->data->cur_altsetting->desc; if (d->bInterfaceClass != USB_CLASS_CDC_DATA) { dev_dbg (&intf->dev, "slave class %u\n", d->bInterfaceClass); @@ -1142,10 +1133,13 @@ unsigned char buf [13]; tmp = usb_string (dev->udev, e->iMACAddress, buf, sizeof buf); - if (tmp < 0) + if (tmp != 12) { + dev_dbg (&dev->udev->dev, + "bad MAC string %d fetch, %d\n", e->iMACAddress, tmp); + if (tmp >= 0) + tmp = -EINVAL; return tmp; - else if (tmp != 12) - return -EINVAL; + } for (i = tmp = 0; i < 6; i++, tmp += 2) dev->net->dev_addr [i] = (nibble (buf [tmp]) << 4) + nibble (buf [tmp + 1]); @@ -3014,7 +3008,7 @@ // precondition: never called in_interrupt -int +static int usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) { struct usbnet *dev; @@ -3204,6 +3198,10 @@ // Hawking UF200, TrendNet TU2-ET100 USB_DEVICE (0x07b8, 0x420a), .driver_info = (unsigned long) &hawking_uf200_info, +}, { + // Billionton Systems, USB2AR + USB_DEVICE (0x08dd, 0x90ff), + .driver_info = (unsigned long) &ax8817x_info, }, { // ATEN UC210T USB_DEVICE (0x0557, 0x2009), diff -Nru a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c --- a/drivers/usb/serial/belkin_sa.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/belkin_sa.c Tue May 18 23:38:08 2004 @@ -244,23 +244,12 @@ static void belkin_sa_close (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial; - - if (port_paranoia_check (port, __FUNCTION__)) - return; - - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - dbg("%s port %d", __FUNCTION__, port->number); - if (serial->dev) { - /* shutdown our bulk reads and writes */ - usb_unlink_urb (port->write_urb); - usb_unlink_urb (port->read_urb); - usb_unlink_urb (port->interrupt_in_urb); - } + /* shutdown our bulk reads and writes */ + usb_unlink_urb (port->write_urb); + usb_unlink_urb (port->read_urb); + usb_unlink_urb (port->interrupt_in_urb); } /* belkin_sa_close */ @@ -268,7 +257,6 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; struct belkin_sa_private *priv; - struct usb_serial *serial; unsigned char *data = urb->transfer_buffer; int retval; unsigned long flags; @@ -288,14 +276,6 @@ goto exit; } - if (port_paranoia_check (port, __FUNCTION__)) - return; - - serial = port->serial; - - if (serial_paranoia_check (serial, __FUNCTION__)) - return; - usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); /* Handle known interrupt data */ diff -Nru a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c --- a/drivers/usb/serial/console.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/console.c Tue May 18 23:38:08 2004 @@ -137,7 +137,7 @@ /* grab the first serial port that happens to be connected */ serial = usb_serial_get_by_index(0); - if (serial_paranoia_check (serial, __FUNCTION__)) { + if (serial == NULL) { /* no device is connected yet, sorry :( */ err ("No USB device connected to ttyUSB0"); return -ENODEV; @@ -199,11 +199,12 @@ { static struct usbcons_info *info = &usbcons_info; struct usb_serial_port *port = info->port; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); + struct usb_serial *serial; int retval = -ENODEV; - if (!serial || !port) + if (!port) return; + serial = port->serial; if (count == 0) return; diff -Nru a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c --- a/drivers/usb/serial/cyberjack.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/cyberjack.c Tue May 18 23:38:09 2004 @@ -155,9 +155,6 @@ unsigned long flags; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); dbg("%s - usb_clear_halt", __FUNCTION__ ); @@ -321,23 +318,15 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; struct cyberjack_private *priv = usb_get_serial_port_data(port); - struct usb_serial *serial; unsigned char *data = urb->transfer_buffer; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); /* the urb might have been killed. */ if (urb->status) return; - serial = port->serial; - if (serial_paranoia_check (serial, __FUNCTION__)) - return; - usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); /* React only to interrupts signaling a bulk_in transfer */ @@ -386,7 +375,6 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; struct cyberjack_private *priv = usb_get_serial_port_data(port); - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; short todo; @@ -395,11 +383,6 @@ dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, urb->transfer_buffer); dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); @@ -447,15 +430,9 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; struct cyberjack_private *priv = usb_get_serial_port_data(port); - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); return; @@ -483,11 +460,11 @@ priv->wrsent+=length; /* set up our urb */ - usb_fill_bulk_urb(port->write_urb, serial->dev, - usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress), + usb_fill_bulk_urb(port->write_urb, port->serial->dev, + usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), port->write_urb->transfer_buffer, length, - ((serial->type->write_bulk_callback) ? - serial->type->write_bulk_callback : + ((port->serial->type->write_bulk_callback) ? + port->serial->type->write_bulk_callback : cyberjack_write_bulk_callback), port); diff -Nru a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c --- a/drivers/usb/serial/digi_acceleport.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/serial/digi_acceleport.c Tue May 18 23:38:07 2004 @@ -1396,11 +1396,6 @@ return; } - /* further sanity checks */ - if( port_paranoia_check( port, __FUNCTION__ ) - || serial_paranoia_check( serial, __FUNCTION__ ) ) - return; - /* try to send any buffered data on this port, if it is open */ spin_lock( &priv->dp_port_lock ); priv->dp_write_urb_in_use = 0; @@ -1798,7 +1793,6 @@ return; } if( port->serial == NULL - || serial_paranoia_check( port->serial, __FUNCTION__ ) || (serial_priv=usb_get_serial_data(port->serial)) == NULL ) { err("%s: serial is bad or serial->private is NULL, status=%d", __FUNCTION__, urb->status ); return; @@ -1851,11 +1845,6 @@ unsigned char *data = ((unsigned char *)urb->transfer_buffer)+3; int flag,throttled; - - /* sanity check */ - if( port_paranoia_check( port, __FUNCTION__ ) ) - return( -1 ); - /* do not process callbacks on closed ports */ /* but do continue the read chain */ if( port->open_count == 0 ) @@ -1980,9 +1969,8 @@ port = serial->port[line]; - if( port_paranoia_check( port, __FUNCTION__ ) - || (priv=usb_get_serial_port_data(port)) == NULL ) - return( -1 ); + if ((priv=usb_get_serial_port_data(port)) == NULL ) + return -1; if( opcode == DIGI_CMD_READ_INPUT_SIGNALS ) { diff -Nru a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c --- a/drivers/usb/serial/empeg.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/empeg.c Tue May 18 23:38:09 2004 @@ -157,9 +157,6 @@ struct usb_serial *serial = port->serial; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); /* Force default termio settings */ @@ -190,21 +187,10 @@ static void empeg_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; - - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - - if (serial->dev) { - /* shutdown our bulk read */ - usb_unlink_urb (port->read_urb); - } + /* shutdown our bulk read */ + usb_unlink_urb (port->read_urb); /* Uncomment the following line if you want to see some statistics in your syslog */ /* dev_info (&port->dev, "Bytes In = %d Bytes Out = %d\n", bytes_in, bytes_out); */ } @@ -353,9 +339,6 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) { @@ -370,22 +353,13 @@ static void empeg_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; int i; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -416,8 +390,8 @@ /* Continue trying to always read */ usb_fill_bulk_urb( port->read_urb, - serial->dev, - usb_rcvbulkpipe(serial->dev, + port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, diff -Nru a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c --- a/drivers/usb/serial/ftdi_sio.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/ftdi_sio.c Tue May 18 23:38:08 2004 @@ -1282,7 +1282,7 @@ static int ftdi_open (struct usb_serial_port *port, struct file *filp) { /* ftdi_open */ struct termios tmp_termios; - struct usb_serial *serial = port->serial; + struct usb_device *dev = port->serial->dev; struct ftdi_private *priv = usb_get_serial_port_data(port); int result = 0; @@ -1295,7 +1295,7 @@ /* No error checking for this (will get errors later anyway) */ /* See ftdi_sio.h for description of what is reset */ - usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), + usb_control_msg(dev, usb_sndctrlpipe(dev, 0), FTDI_SIO_RESET_REQUEST, FTDI_SIO_RESET_REQUEST_TYPE, FTDI_SIO_RESET_SIO, 0, buf, 0, WDR_TIMEOUT); @@ -1318,8 +1318,8 @@ } /* Start reading from the device */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb(port->read_urb, dev, + usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, ftdi_read_bulk_callback, port); result = usb_submit_urb(port->read_urb, GFP_KERNEL); @@ -1342,47 +1342,37 @@ static void ftdi_close (struct usb_serial_port *port, struct file *filp) { /* ftdi_close */ - struct usb_serial *serial; unsigned int c_cflag = port->tty->termios->c_cflag; char buf[1]; dbg("%s", __FUNCTION__); - serial = get_usb_serial ( port, __FUNCTION__); - if (!serial) - return; + if (c_cflag & HUPCL){ + /* Disable flow control */ + if (usb_control_msg(port->serial->dev, + usb_sndctrlpipe(port->serial->dev, 0), + FTDI_SIO_SET_FLOW_CTRL_REQUEST, + FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, + 0, 0, buf, 0, WDR_TIMEOUT) < 0) { + err("error from flowcontrol urb"); + } - if (serial->dev) { - if (c_cflag & HUPCL){ - /* Disable flow control */ - if (usb_control_msg(serial->dev, - usb_sndctrlpipe(serial->dev, 0), - FTDI_SIO_SET_FLOW_CTRL_REQUEST, - FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, - 0, 0, buf, 0, WDR_TIMEOUT) < 0) { - err("error from flowcontrol urb"); - } - - /* drop DTR */ - if (set_dtr(port, LOW) < 0){ - err("Error from DTR LOW urb"); - } - /* drop RTS */ - if (set_rts(port, LOW) < 0) { - err("Error from RTS LOW urb"); - } - } /* Note change no line if hupcl is off */ - - /* shutdown our bulk read */ - if (port->read_urb) { - if (usb_unlink_urb (port->read_urb) < 0) { - err("Error unlinking read urb"); - } + /* drop DTR */ + if (set_dtr(port, LOW) < 0){ + err("Error from DTR LOW urb"); } - - } /* if (serial->dev) */ - - + /* drop RTS */ + if (set_rts(port, LOW) < 0) { + err("Error from RTS LOW urb"); + } + } /* Note change no line if hupcl is off */ + + /* shutdown our bulk read */ + if (port->read_urb) { + if (usb_unlink_urb (port->read_urb) < 0) { + err("Error unlinking read urb"); + } + } } /* ftdi_close */ @@ -1397,7 +1387,6 @@ static int ftdi_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count) { /* ftdi_write */ - struct usb_serial *serial = get_usb_serial ( port, __FUNCTION__); struct ftdi_private *priv = usb_get_serial_port_data(port); struct urb *urb; unsigned char *buffer; @@ -1484,8 +1473,8 @@ usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, buffer); /* fill the buffer and send it */ - usb_fill_bulk_urb(urb, serial->dev, - usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress), + usb_fill_bulk_urb(urb, port->serial->dev, + usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), buffer, transfer_size, ftdi_write_bulk_callback, port); @@ -1513,9 +1502,6 @@ /* free up the transfer buffer, as usb_free_urb() does not do this */ kfree (urb->transfer_buffer); - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) { @@ -1558,7 +1544,6 @@ static void ftdi_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { /* ftdi_read_bulk_callback */ struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial; struct tty_struct *tty; struct ftdi_private *priv; char error_flag; @@ -1577,18 +1562,9 @@ dbg("%s", __FUNCTION__); - if (port_paranoia_check (port, __FUNCTION__)) { - return; - } if (port->open_count <= 0) return; - serial = get_usb_serial(port,__FUNCTION__); - if (!serial){ - dbg("%s - bad serial pointer - exiting",__FUNCTION__); - return; - } - tty = port->tty; if (!tty) { dbg("%s - bad tty pointer - exiting",__FUNCTION__); @@ -1696,8 +1672,8 @@ /* if the port is closed stop trying to read */ if (port->open_count > 0){ /* Continue trying to always read */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb(port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, ftdi_read_bulk_callback, port); @@ -1712,7 +1688,6 @@ static void ftdi_break_ctl( struct usb_serial_port *port, int break_state ) { - struct usb_serial *serial = port->serial; struct ftdi_private *priv = usb_get_serial_port_data(port); __u16 urb_value = 0; char buf[1]; @@ -1728,7 +1703,7 @@ } - if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0), FTDI_SIO_SET_DATA_REQUEST, FTDI_SIO_SET_DATA_REQUEST_TYPE, urb_value , 0, @@ -1748,7 +1723,7 @@ static void ftdi_set_termios (struct usb_serial_port *port, struct termios *old_termios) { /* ftdi_termios */ - struct usb_serial *serial = port->serial; + struct usb_device *dev = port->serial->dev; unsigned int cflag = port->tty->termios->c_cflag; struct ftdi_private *priv = usb_get_serial_port_data(port); __u16 urb_value; /* will hold the new flags */ @@ -1807,7 +1782,7 @@ * or'ed with this value */ priv->last_set_data_urb_value = urb_value; - if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), FTDI_SIO_SET_DATA_REQUEST, FTDI_SIO_SET_DATA_REQUEST_TYPE, urb_value , 0, @@ -1818,7 +1793,7 @@ /* Now do the baudrate */ if ((cflag & CBAUD) == B0 ) { /* Disable flow control */ - if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), FTDI_SIO_SET_FLOW_CTRL_REQUEST, FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, 0, 0, @@ -1844,8 +1819,8 @@ /* Note device also supports DTR/CD (ugh) and Xon/Xoff in hardware */ if (cflag & CRTSCTS) { dbg("%s Setting to CRTSCTS flow control", __FUNCTION__); - if (usb_control_msg(serial->dev, - usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), FTDI_SIO_SET_FLOW_CTRL_REQUEST, FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, 0 , FTDI_SIO_RTS_CTS_HS, @@ -1870,8 +1845,8 @@ vstop=port->tty->termios->c_cc[VSTOP]; urb_value=(vstop << 8) | (vstart); - if (usb_control_msg(serial->dev, - usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), FTDI_SIO_SET_FLOW_CTRL_REQUEST, FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, urb_value , FTDI_SIO_XON_XOFF_HS, @@ -1882,8 +1857,8 @@ /* else clause to only run if cfag ! CRTSCTS and iflag ! XOFF */ /* CHECKME Assuming XON/XOFF handled by tty stack - not by device */ dbg("%s Turning off hardware flow control", __FUNCTION__); - if (usb_control_msg(serial->dev, - usb_sndctrlpipe(serial->dev, 0), + if (usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), FTDI_SIO_SET_FLOW_CTRL_REQUEST, FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, 0, 0, @@ -1899,7 +1874,6 @@ static int ftdi_tiocmget (struct usb_serial_port *port, struct file *file) { - struct usb_serial *serial = port->serial; struct ftdi_private *priv = usb_get_serial_port_data(port); unsigned char buf[2]; int ret; @@ -1908,8 +1882,8 @@ switch (priv->chip_type) { case SIO: /* Request the status from the device */ - if ((ret = usb_control_msg(serial->dev, - usb_rcvctrlpipe(serial->dev, 0), + if ((ret = usb_control_msg(port->serial->dev, + usb_rcvctrlpipe(port->serial->dev, 0), FTDI_SIO_GET_MODEM_STATUS_REQUEST, FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE, 0, 0, @@ -1923,8 +1897,8 @@ case FT232BM: /* the 8U232AM returns a two byte value (the sio is a 1 byte value) - in the same format as the data returned from the in point */ - if ((ret = usb_control_msg(serial->dev, - usb_rcvctrlpipe(serial->dev, 0), + if ((ret = usb_control_msg(port->serial->dev, + usb_rcvctrlpipe(port->serial->dev, 0), FTDI_SIO_GET_MODEM_STATUS_REQUEST, FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE, 0, 0, @@ -2107,14 +2081,13 @@ static void ftdi_unthrottle (struct usb_serial_port *port) { int result; - struct usb_serial *serial = port->serial; dbg("%s - port %d", __FUNCTION__, port->number); - port->read_urb->dev = serial->dev; + port->read_urb->dev = port->serial->dev; - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb(port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, ftdi_read_bulk_callback, port); diff -Nru a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c --- a/drivers/usb/serial/generic.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/serial/generic.c Tue May 18 23:38:05 2004 @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -32,10 +33,10 @@ static __u16 vendor = 0x05f9; static __u16 product = 0xffff; -MODULE_PARM(vendor, "h"); +module_param(vendor, ushort, 0); MODULE_PARM_DESC(vendor, "User specified USB idVendor"); -MODULE_PARM(product, "h"); +module_param(product, ushort, 0); MODULE_PARM_DESC(product, "User specified USB idProduct"); static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */ @@ -83,9 +84,6 @@ struct usb_serial *serial = port->serial; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); /* force low_latency on so that our tty_push actually forces the data through, @@ -223,7 +221,7 @@ void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); + struct usb_serial *serial = port->serial; struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; int i; @@ -231,11 +229,6 @@ dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -273,14 +266,8 @@ void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); dbg("%s - port %d", __FUNCTION__, port->number); - - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c --- a/drivers/usb/serial/io_edgeport.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/serial/io_edgeport.c Tue May 18 23:38:05 2004 @@ -776,10 +776,6 @@ dbg("%s", __FUNCTION__); - if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) { - return; - } - switch (urb->status) { case 0: /* success */ @@ -825,19 +821,17 @@ txCredits = data[position] | (data[position+1] << 8); if (txCredits) { port = edge_serial->serial->port[portNumber]; - if (port_paranoia_check (port, __FUNCTION__) == 0) { - edge_port = usb_get_serial_port_data(port); - if (edge_port->open) { - edge_port->txCredits += txCredits; - dbg("%s - txcredits for port%d = %d", __FUNCTION__, portNumber, edge_port->txCredits); - - /* tell the tty driver that something has changed */ - if (edge_port->port->tty) - wake_up_interruptible(&edge_port->port->tty->write_wait); + edge_port = usb_get_serial_port_data(port); + if (edge_port->open) { + edge_port->txCredits += txCredits; + dbg("%s - txcredits for port%d = %d", __FUNCTION__, portNumber, edge_port->txCredits); + + /* tell the tty driver that something has changed */ + if (edge_port->port->tty) + wake_up_interruptible(&edge_port->port->tty->write_wait); - // Since we have more credit, check if more data can be sent - send_more_port_data(edge_serial, edge_port); - } + // Since we have more credit, check if more data can be sent + send_more_port_data(edge_serial, edge_port); } } position += 2; @@ -867,10 +861,6 @@ dbg("%s", __FUNCTION__); - if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) { - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -916,10 +906,6 @@ dbg("%s", __FUNCTION__); - if (port_paranoia_check (edge_port->port, __FUNCTION__)) { - return; - } - if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); } @@ -969,10 +955,6 @@ /* Free the command urb */ usb_free_urb (urb); - if (port_paranoia_check (edge_port->port, __FUNCTION__)) { - return; - } - if (status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, status); return; @@ -1009,9 +991,6 @@ int response; int timeout; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); if (edge_port == NULL) @@ -1240,55 +1219,45 @@ *****************************************************************************/ static void edge_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; struct edgeport_serial *edge_serial; struct edgeport_port *edge_port; int status; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - - edge_serial = usb_get_serial_data(serial); + edge_serial = usb_get_serial_data(port->serial); edge_port = usb_get_serial_port_data(port); if ((edge_serial == NULL) || (edge_port == NULL)) return; - if (serial->dev) { - // block until tx is empty - block_until_tx_empty(edge_port); - - edge_port->closePending = TRUE; - - /* flush and chase */ - edge_port->chaseResponsePending = TRUE; - - dbg("%s - Sending IOSP_CMD_CHASE_PORT", __FUNCTION__); - status = send_iosp_ext_cmd (edge_port, IOSP_CMD_CHASE_PORT, 0); - if (status == 0) { - // block until chase finished - block_until_chase_response(edge_port); - } else { - edge_port->chaseResponsePending = FALSE; - } + // block until tx is empty + block_until_tx_empty(edge_port); - /* close the port */ - dbg("%s - Sending IOSP_CMD_CLOSE_PORT", __FUNCTION__); - send_iosp_ext_cmd (edge_port, IOSP_CMD_CLOSE_PORT, 0); - - //port->close = TRUE; - edge_port->closePending = FALSE; - edge_port->open = FALSE; - edge_port->openPending = FALSE; + edge_port->closePending = TRUE; - if (edge_port->write_urb) { - usb_unlink_urb (edge_port->write_urb); - } + /* flush and chase */ + edge_port->chaseResponsePending = TRUE; + + dbg("%s - Sending IOSP_CMD_CHASE_PORT", __FUNCTION__); + status = send_iosp_ext_cmd (edge_port, IOSP_CMD_CHASE_PORT, 0); + if (status == 0) { + // block until chase finished + block_until_chase_response(edge_port); + } else { + edge_port->chaseResponsePending = FALSE; + } + + /* close the port */ + dbg("%s - Sending IOSP_CMD_CLOSE_PORT", __FUNCTION__); + send_iosp_ext_cmd (edge_port, IOSP_CMD_CLOSE_PORT, 0); + + //port->close = TRUE; + edge_port->closePending = FALSE; + edge_port->open = FALSE; + edge_port->openPending = FALSE; + + if (edge_port->write_urb) { + usb_unlink_urb (edge_port->write_urb); } if (edge_port->write_urb) { @@ -2071,24 +2040,22 @@ /* spit this data back into the tty driver if this port is open */ if (rxLen) { port = edge_serial->serial->port[edge_serial->rxPort]; - if (port_paranoia_check (port, __FUNCTION__) == 0) { - edge_port = usb_get_serial_port_data(port); - if (edge_port->open) { - tty = edge_port->port->tty; - if (tty) { - dbg("%s - Sending %d bytes to TTY for port %d", __FUNCTION__, rxLen, edge_serial->rxPort); - for (i = 0; i < rxLen ; ++i) { - /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */ - if(tty->flip.count >= TTY_FLIPBUF_SIZE) { - tty_flip_buffer_push(tty); - } - /* this doesn't actually push the data through unless tty->low_latency is set */ - tty_insert_flip_char(tty, buffer[i], 0); + edge_port = usb_get_serial_port_data(port); + if (edge_port->open) { + tty = edge_port->port->tty; + if (tty) { + dbg("%s - Sending %d bytes to TTY for port %d", __FUNCTION__, rxLen, edge_serial->rxPort); + for (i = 0; i < rxLen ; ++i) { + /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */ + if(tty->flip.count >= TTY_FLIPBUF_SIZE) { + tty_flip_buffer_push(tty); } - tty_flip_buffer_push(tty); + /* this doesn't actually push the data through unless tty->low_latency is set */ + tty_insert_flip_char(tty, buffer[i], 0); } - edge_port->icount.rx += rxLen; + tty_flip_buffer_push(tty); } + edge_port->icount.rx += rxLen; } buffer += rxLen; } @@ -2124,9 +2091,6 @@ /* switch the port pointer to the one being currently talked about */ port = edge_serial->serial->port[edge_serial->rxPort]; - if (port_paranoia_check (port, __FUNCTION__)) { - return; - } edge_port = usb_get_serial_port_data(port); if (edge_port == NULL) { dev_err(&edge_serial->serial->dev->dev, "%s - edge_port == NULL for port %d\n", __FUNCTION__, edge_serial->rxPort); diff -Nru a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c --- a/drivers/usb/serial/io_ti.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/io_ti.c Tue May 18 23:38:09 2004 @@ -279,8 +279,8 @@ * @address_type: Can read both XDATA and I2C * @buffer: pointer to input data buffer */ -int TIReadDownloadMemory (struct usb_device *dev, int start_address, int length, - __u8 address_type, __u8 *buffer) +static int TIReadDownloadMemory(struct usb_device *dev, int start_address, + int length, __u8 address_type, __u8 *buffer) { int status = 0; __u8 read_length; @@ -328,7 +328,7 @@ return status; } -int TIReadRam (struct usb_device *dev, int start_address, int length, __u8 *buffer) +static int TIReadRam (struct usb_device *dev, int start_address, int length, __u8 *buffer) { return TIReadDownloadMemory (dev, start_address, @@ -552,7 +552,7 @@ break; /* Block the thread for 10ms */ - wait_ms (10); + msleep(10); if (last_count == port->tx.count) { /* No activity.. count down. */ @@ -581,7 +581,7 @@ /* This function takes 4 ms; */ if (!TIIsTxActive (port)) { /* Delay a few char times */ - wait_ms (50); + msleep(50); dbg ("%s - Empty", __FUNCTION__); return; } @@ -612,7 +612,7 @@ return 0; } -int TIReadRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer) +static int TIReadRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer) { int status; @@ -632,7 +632,7 @@ return status; } -int TIWriteRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer) +static int TIWriteRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer) { if (serial->product_info.TiMode == TI_MODE_BOOT) return TIWriteBootMemory (serial, @@ -995,7 +995,7 @@ if (status) return status; - interface = &serial->serial->dev->config->interface[0]->altsetting->desc; + interface = &serial->serial->interface->cur_altsetting->desc; if (!interface) { dev_err (&serial->serial->dev->dev, "%s - no interface set, error!", __FUNCTION__); return -ENODEV; @@ -1649,10 +1649,6 @@ dbg("%s", __FUNCTION__); - if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) { - return; - } - switch (urb->status) { case 0: /* success */ @@ -1685,11 +1681,6 @@ dbg ("%s - port_number %d, function %d, info 0x%x", __FUNCTION__, port_number, function, data[1]); port = edge_serial->serial->port[port_number]; - if (port_paranoia_check (port, __FUNCTION__)) { - dbg ("%s - change found for port that is not present", - __FUNCTION__); - return; - } edge_port = usb_get_serial_port_data(port); if (!edge_port) { dbg ("%s - edge_port not found", __FUNCTION__); @@ -1744,9 +1735,6 @@ dbg("%s", __FUNCTION__); - if (port_paranoia_check (edge_port->port, __FUNCTION__)) - return; - if (urb->status) { dbg ("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); @@ -1804,23 +1792,17 @@ static void edge_bulk_out_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; dbg ("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg ("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg ("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); if (urb->status == -EPIPE) { /* clear any problem that might have happened on this pipe */ - usb_clear_halt (serial->dev, urb->pipe); + usb_clear_halt (port->serial->dev, urb->pipe); } return; } @@ -1848,9 +1830,6 @@ u16 open_settings; u8 transaction_timeout; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); if (edge_port == NULL) @@ -1993,61 +1972,50 @@ static void edge_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; struct edgeport_serial *edge_serial; struct edgeport_port *edge_port; int port_number; int status; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - - edge_serial = usb_get_serial_data(serial); + edge_serial = usb_get_serial_data(port->serial); edge_port = usb_get_serial_port_data(port); if ((edge_serial == NULL) || (edge_port == NULL)) return; - if (serial->dev) { - /* The bulkreadcompletion routine will check - * this flag and dump add read data */ - edge_port->close_pending = 1; - - /* chase the port close */ - TIChasePort (edge_port); - - usb_unlink_urb (port->read_urb); - - /* assuming we can still talk to the device, - * send a close port command to it */ - dbg("%s - send umpc_close_port", __FUNCTION__); - port_number = port->number - port->serial->minor; - status = TIWriteCommandSync (port->serial->dev, - UMPC_CLOSE_PORT, - (__u8)(UMPM_UART1_PORT + port_number), - 0, - NULL, - 0); - --edge_port->edge_serial->num_ports_open; - if (edge_port->edge_serial->num_ports_open <= 0) { - /* last port is now closed, let's shut down our interrupt urb */ - usb_unlink_urb (serial->port[0]->interrupt_in_urb); - edge_port->edge_serial->num_ports_open = 0; - } - edge_port->close_pending = 0; + /* The bulkreadcompletion routine will check + * this flag and dump add read data */ + edge_port->close_pending = 1; + + /* chase the port close */ + TIChasePort (edge_port); + + usb_unlink_urb (port->read_urb); + + /* assuming we can still talk to the device, + * send a close port command to it */ + dbg("%s - send umpc_close_port", __FUNCTION__); + port_number = port->number - port->serial->minor; + status = TIWriteCommandSync (port->serial->dev, + UMPC_CLOSE_PORT, + (__u8)(UMPM_UART1_PORT + port_number), + 0, + NULL, + 0); + --edge_port->edge_serial->num_ports_open; + if (edge_port->edge_serial->num_ports_open <= 0) { + /* last port is now closed, let's shut down our interrupt urb */ + usb_unlink_urb (port->serial->port[0]->interrupt_in_urb); + edge_port->edge_serial->num_ports_open = 0; } + edge_port->close_pending = 0; dbg("%s - exited", __FUNCTION__); } static int edge_write (struct usb_serial_port *port, int from_user, const unsigned char *data, int count) { - struct usb_serial *serial = port->serial; struct edgeport_port *edge_port = usb_get_serial_port_data(port); int result; @@ -2080,8 +2048,8 @@ usb_serial_debug_data (__FILE__, __FUNCTION__, count, port->write_urb->transfer_buffer); /* set up our urb */ - usb_fill_bulk_urb (port->write_urb, serial->dev, - usb_sndbulkpipe (serial->dev, + usb_fill_bulk_urb (port->write_urb, port->serial->dev, + usb_sndbulkpipe (port->serial->dev, port->bulk_out_endpointAddress), port->write_urb->transfer_buffer, count, edge_bulk_out_callback, diff -Nru a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c --- a/drivers/usb/serial/ipaq.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/ipaq.c Tue May 18 23:38:08 2004 @@ -150,7 +150,7 @@ /* All of the device info needed for the Compaq iPAQ */ -struct usb_serial_device_type ipaq_device = { +static struct usb_serial_device_type ipaq_device = { .owner = THIS_MODULE, .name = "PocketPC PDA", .id_table = ipaq_id_table, @@ -181,10 +181,6 @@ int i, result = 0; int retries = KP_RETRIES; - if (port_paranoia_check(port, __FUNCTION__)) { - return -ENODEV; - } - dbg("%s - port %d", __FUNCTION__, port->number); bytes_in = 0; @@ -288,23 +284,13 @@ static void ipaq_close(struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial; struct ipaq_private *priv = usb_get_serial_port_data(port); - if (port_paranoia_check(port, __FUNCTION__)) { - return; - } - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial(port, __FUNCTION__); - if (!serial) - return; - /* * shut down bulk read and write */ - usb_unlink_urb(port->write_urb); usb_unlink_urb(port->read_urb); ipaq_destroy_lists(port); @@ -318,21 +304,12 @@ static void ipaq_read_bulk_callback(struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; int i, result; - if (port_paranoia_check(port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -355,8 +332,8 @@ } /* Continue trying to always read */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb(port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, ipaq_read_bulk_callback, port); result = usb_submit_urb(port->read_urb, GFP_ATOMIC); @@ -488,10 +465,6 @@ unsigned long flags; int result; - if (port_paranoia_check (port, __FUNCTION__)) { - return; - } - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) { diff -Nru a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c --- a/drivers/usb/serial/ir-usb.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/serial/ir-usb.c Tue May 18 23:38:07 2004 @@ -138,7 +138,7 @@ }; -struct usb_serial_device_type ir_device = { +static struct usb_serial_device_type ir_device = { .owner = THIS_MODULE, .name = "IR Dongle", .id_table = id_table, @@ -279,13 +279,9 @@ static int ir_open (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial = port->serial; char *buffer; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); if (buffer_size) { @@ -313,8 +309,8 @@ /* Start reading from the device */ usb_fill_bulk_urb ( port->read_urb, - serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, ir_read_bulk_callback, @@ -328,21 +324,10 @@ static void ir_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; - - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - - if (serial->dev) { - /* shutdown our bulk read */ - usb_unlink_urb (port->read_urb); - } + /* shutdown our bulk read */ + usb_unlink_urb (port->read_urb); } static int ir_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count) @@ -411,9 +396,6 @@ { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) { @@ -433,21 +415,12 @@ static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (!port->open_count) { dbg("%s - port closed.", __FUNCTION__); return; @@ -496,8 +469,8 @@ /* Continue trying to always read */ usb_fill_bulk_urb ( port->read_urb, - serial->dev, - usb_rcvbulkpipe(serial->dev, + port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, diff -Nru a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c --- a/drivers/usb/serial/keyspan.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/serial/keyspan.c Tue May 18 23:38:05 2004 @@ -133,9 +133,6 @@ /* Per device and per port private data */ struct keyspan_serial_private { - /* number of active ports */ - atomic_t active_count; - const struct keyspan_device_details *device_details; struct urb *instat_urb; @@ -1144,13 +1141,9 @@ static void keyspan_close(struct usb_serial_port *port, struct file *filp) { int i; - struct usb_serial *serial; + struct usb_serial *serial = port->serial; struct keyspan_serial_private *s_priv; struct keyspan_port_private *p_priv; - - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; dbg("%s", __FUNCTION__); s_priv = usb_get_serial_data(serial); diff -Nru a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h --- a/drivers/usb/serial/keyspan.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/keyspan.h Tue May 18 23:38:08 2004 @@ -326,6 +326,22 @@ .baudclk = KEYSPAN_USA19_BAUDCLK, }; +static const struct keyspan_device_details mpr_device_details = { + .product_id = keyspan_mpr_product_id, + .msg_format = msg_usa28, + .num_ports = 1, + .indat_endp_flip = 1, + .outdat_endp_flip = 1, + .indat_endpoints = {0x81}, + .outdat_endpoints = {0x01}, + .inack_endpoints = {0x83}, + .outcont_endpoints = {0x03}, + .instat_endpoint = 0x84, + .glocont_endpoint = -1, + .calculate_baud_rate = keyspan_usa28_calc_baud, + .baudclk = KEYSPAN_USA19_BAUDCLK, +}; + static const struct keyspan_device_details usa19qw_device_details = { .product_id = keyspan_usa19qw_product_id, .msg_format = msg_usa26, @@ -460,6 +476,7 @@ &usa18x_device_details, &usa19_device_details, &usa19qi_device_details, + &mpr_device_details, &usa19qw_device_details, &usa19w_device_details, &usa19hs_device_details, @@ -535,7 +552,7 @@ { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19qw_product_id) }, { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19w_product_id) }, { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19hs_product_id) }, - { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_mpr_pre_product_id) }, + { USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_mpr_product_id) }, { } /* Terminating entry */ }; diff -Nru a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c --- a/drivers/usb/serial/keyspan_pda.c Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/keyspan_pda.c Tue May 18 23:38:08 2004 @@ -226,8 +226,7 @@ static void keyspan_pda_rx_interrupt (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial; - struct tty_struct *tty; + struct tty_struct *tty = port->tty; unsigned char *data = urb->transfer_buffer; int i; int status; @@ -249,22 +248,11 @@ goto exit; } - - if (port_paranoia_check (port, "keyspan_pda_rx_interrupt")) { - return; - } - - serial = port->serial; - if (serial_paranoia_check (serial, "keyspan_pda_rx_interrupt")) { - return; - } - /* see if the message is data or a status interrupt */ switch (data[0]) { case 0: /* rest of message is rx data */ if (urb->actual_length) { - tty = serial->port[0]->tty; for (i = 1; i < urb->actual_length ; ++i) { tty_insert_flip_char(tty, data[i], 0); } @@ -278,7 +266,6 @@ case 1: /* modemline change */ break; case 2: /* tx unthrottle interrupt */ - tty = serial->port[0]->tty; priv->tx_throttled = 0; /* queue up a wakeup at scheduler time */ schedule_work(&priv->wakeup_work); @@ -633,20 +620,10 @@ static void keyspan_pda_write_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial; struct keyspan_pda_private *priv; priv = usb_get_serial_port_data(port); - if (port_paranoia_check (port, "keyspan_pda_rx_interrupt")) { - return; - } - - serial = port->serial; - if (serial_paranoia_check (serial, "keyspan_pda_rx_interrupt")) { - return; - } - /* queue up a wakeup at scheduler time */ schedule_work(&priv->wakeup_work); } diff -Nru a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c --- a/drivers/usb/serial/kl5kusb105.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/serial/kl5kusb105.c Tue May 18 23:38:07 2004 @@ -187,12 +187,13 @@ #define KLSI_TIMEOUT (HZ * 5 ) /* default urb timeout */ -static int klsi_105_chg_port_settings(struct usb_serial *serial, +static int klsi_105_chg_port_settings(struct usb_serial_port *port, struct klsi_105_port_settings *settings) { int rc; - rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), + rc = usb_control_msg(port->serial->dev, + usb_sndctrlpipe(port->serial->dev, 0), KL5KUSB105A_SIO_SET_DATA, USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_INTERFACE, 0, /* value */ @@ -227,7 +228,7 @@ */ /* It seems that the status buffer has always only 2 bytes length */ #define KLSI_STATUSBUF_LEN 2 -static int klsi_105_get_line_state(struct usb_serial *serial, +static int klsi_105_get_line_state(struct usb_serial_port *port, unsigned long *line_state_p) { int rc; @@ -235,7 +236,8 @@ __u16 status; info("%s - sending SIO Poll request", __FUNCTION__); - rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), + rc = usb_control_msg(port->serial->dev, + usb_rcvctrlpipe(port->serial->dev, 0), KL5KUSB105A_SIO_POLL, USB_TYPE_VENDOR | USB_DIR_IN, 0, /* value */ @@ -362,7 +364,6 @@ static int klsi_105_open (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial = port->serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); int retval = 0; int rc; @@ -389,7 +390,7 @@ cfg.databits = kl5kusb105a_dtb_8; cfg.unknown1 = 0; cfg.unknown2 = 1; - klsi_105_chg_port_settings(serial, &cfg); + klsi_105_chg_port_settings(port, &cfg); /* set up termios structure */ spin_lock_irqsave (&priv->lock, flags); @@ -407,8 +408,8 @@ spin_unlock_irqrestore (&priv->lock, flags); /* READ_ON and urb submission */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, + usb_fill_bulk_urb(port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, @@ -422,7 +423,8 @@ goto exit; } - rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev,0), + rc = usb_control_msg(port->serial->dev, + usb_sndctrlpipe(port->serial->dev,0), KL5KUSB105A_SIO_CONFIGURE, USB_TYPE_VENDOR|USB_DIR_OUT|USB_RECIP_INTERFACE, KL5KUSB105A_SIO_CONFIGURE_READ_ON, @@ -436,7 +438,7 @@ } else dbg("%s - enabled reading", __FUNCTION__); - rc = klsi_105_get_line_state(serial, &line_state); + rc = klsi_105_get_line_state(port, &line_state); if (rc >= 0) { spin_lock_irqsave (&priv->lock, flags); priv->line_state = line_state; @@ -453,20 +455,14 @@ static void klsi_105_close (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); int rc; dbg("%s port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - - if(!serial) - return; - /* send READ_OFF */ - rc = usb_control_msg (serial->dev, - usb_sndctrlpipe(serial->dev, 0), + rc = usb_control_msg (port->serial->dev, + usb_sndctrlpipe(port->serial->dev, 0), KL5KUSB105A_SIO_CONFIGURE, USB_TYPE_VENDOR | USB_DIR_OUT, KL5KUSB105A_SIO_CONFIGURE_READ_OFF, @@ -497,7 +493,6 @@ static int klsi_105_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count) { - struct usb_serial *serial = port->serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); int result, size; int bytes_sent=0; @@ -551,8 +546,8 @@ ((__u8 *)urb->transfer_buffer)[1] = (__u8) ((size & 0xFF00)>>8); /* set up our urb */ - usb_fill_bulk_urb(urb, serial->dev, - usb_sndbulkpipe(serial->dev, + usb_fill_bulk_urb(urb, port->serial->dev, + usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress), urb->transfer_buffer, URB_TRANSFER_BUFFER_SIZE, @@ -579,15 +574,9 @@ static void klsi_105_write_bulk_callback ( struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = port->serial; dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); @@ -646,7 +635,6 @@ static void klsi_105_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = port->serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; @@ -660,10 +648,6 @@ urb->status); return; } - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } /* The data received is again preceded by a length double-byte in LSB- * first order (see klsi_105_write() ) @@ -714,8 +698,8 @@ priv->bytes_in += bytes_sent; } /* Continue trying to always read */ - usb_fill_bulk_urb(port->read_urb, serial->dev, - usb_rcvbulkpipe(serial->dev, + usb_fill_bulk_urb(port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, @@ -730,7 +714,6 @@ static void klsi_105_set_termios (struct usb_serial_port *port, struct termios *old_termios) { - struct usb_serial *serial = port->serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); unsigned int iflag = port->tty->termios->c_iflag; unsigned int old_iflag = old_termios->c_iflag; @@ -868,7 +851,7 @@ spin_unlock_irqrestore (&priv->lock, flags); /* now commit changes to device */ - klsi_105_chg_port_settings(serial, &cfg); + klsi_105_chg_port_settings(port, &cfg); } /* klsi_105_set_termios */ @@ -890,14 +873,13 @@ static int klsi_105_tiocmget (struct usb_serial_port *port, struct file *file) { - struct usb_serial *serial = port->serial; struct klsi_105_private *priv = usb_get_serial_port_data(port); unsigned long flags; int rc; unsigned long line_state; dbg("%s - request, just guessing", __FUNCTION__); - rc = klsi_105_get_line_state(serial, &line_state); + rc = klsi_105_get_line_state(port, &line_state); if (rc < 0) { err("Reading line control failed (error = %d)", rc); /* better return value? EAGAIN? */ diff -Nru a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c --- a/drivers/usb/serial/kobil_sct.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/kobil_sct.c Tue May 18 23:38:09 2004 @@ -110,7 +110,7 @@ }; -struct usb_serial_device_type kobil_device = { +static struct usb_serial_device_type kobil_device = { .owner = THIS_MODULE, .name = "KOBIL USB smart card terminal", .id_table = id_table, @@ -183,7 +183,7 @@ pdev = serial->dev; actconfig = pdev->actconfig; interface = actconfig->interface[0]; - altsetting = interface->altsetting; + altsetting = interface->cur_altsetting; endpoint = altsetting->endpoint; for (i = 0; i < altsetting->desc.bNumEndpoints; i++) { @@ -229,9 +229,6 @@ dbg("%s - port %d", __FUNCTION__, port->number); priv = usb_get_serial_port_data(port); priv->line_state = 0; - - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; // someone sets the dev to 0 if the close method has been called port->interrupt_in_urb->dev = port->serial->dev; diff -Nru a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c --- a/drivers/usb/serial/omninet.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/omninet.c Tue May 18 23:38:09 2004 @@ -151,20 +151,13 @@ static int omninet_open (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial; + struct usb_serial *serial = port->serial; struct usb_serial_port *wport; struct omninet_data *od; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return -ENODEV; - od = kmalloc( sizeof(struct omninet_data), GFP_KERNEL ); if( !od ) { err("%s- kmalloc(%Zd) failed.", __FUNCTION__, sizeof(struct omninet_data)); @@ -189,24 +182,15 @@ static void omninet_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; + struct usb_serial *serial = port->serial; struct usb_serial_port *wport; struct omninet_data *od; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - - if (serial->dev) { - wport = serial->port[1]; - usb_unlink_urb (wport->write_urb); - usb_unlink_urb (port->read_urb); - } + wport = serial->port[1]; + usb_unlink_urb(wport->write_urb); + usb_unlink_urb(port->read_urb); od = usb_get_serial_port_data(port); if (od) @@ -221,8 +205,6 @@ static void omninet_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - unsigned char *data = urb->transfer_buffer; struct omninet_header *header = (struct omninet_header *) &data[0]; @@ -231,11 +213,6 @@ // dbg("omninet_read_bulk_callback"); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -259,8 +236,8 @@ } /* Continue trying to always read */ - usb_fill_bulk_urb(urb, serial->dev, - usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb(urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress), urb->transfer_buffer, urb->transfer_buffer_length, omninet_read_bulk_callback, port); result = usb_submit_urb(urb, GFP_ATOMIC); @@ -344,19 +321,8 @@ { /* struct omninet_header *header = (struct omninet_header *) urb->transfer_buffer; */ struct usb_serial_port *port = (struct usb_serial_port *) urb->context; - struct usb_serial *serial; // dbg("omninet_write_bulk_callback, port %0x\n", port); - - - if (port_paranoia_check (port, __FUNCTION__)) { - return; - } - - serial = port->serial; - if (serial_paranoia_check (serial, __FUNCTION__)) { - return; - } if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); diff -Nru a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c --- a/drivers/usb/serial/pl2303.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/serial/pl2303.c Tue May 18 23:38:07 2004 @@ -1,7 +1,7 @@ /* * Prolific PL2303 USB to serial adaptor driver * - * Copyright (C) 2001-2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) * Copyright (C) 2003 IBM Corp. * * Original driver for 2.2.x by anonymous @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -80,6 +81,7 @@ { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) }, { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) }, { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) }, + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, { } /* Terminating entry */ }; @@ -410,9 +412,6 @@ unsigned char *buf; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); usb_clear_halt(serial->dev, port->write_urb->pipe); @@ -473,18 +472,11 @@ static void pl2303_close (struct usb_serial_port *port, struct file *filp) { - struct usb_serial *serial; struct pl2303_private *priv; unsigned long flags; unsigned int c_cflag; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - dbg("%s - port %d", __FUNCTION__, port->number); /* shutdown our urbs */ @@ -661,7 +653,6 @@ static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *) urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct pl2303_private *priv = usb_get_serial_port_data(port); unsigned char *data = urb->transfer_buffer; unsigned long flags; @@ -685,9 +676,6 @@ goto exit; } - if (!serial) { - return; - } usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, urb->transfer_buffer); @@ -712,7 +700,6 @@ static void pl2303_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *) urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct pl2303_private *priv = usb_get_serial_port_data(port); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; @@ -722,16 +709,8 @@ u8 status; char tty_flag; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - urb->status = %d", __FUNCTION__, urb->status); if (!port->open_count) { @@ -742,7 +721,7 @@ /* PL2303 mysteriously fails with -EPROTO reschedule the read */ dbg("%s - caught -EPROTO, resubmitting the urb", __FUNCTION__); urb->status = 0; - urb->dev = serial->dev; + urb->dev = port->serial->dev; result = usb_submit_urb(urb, GFP_ATOMIC); if (result) dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result); @@ -790,7 +769,7 @@ /* Schedule the next read _if_ we are still open */ if (port->open_count) { - urb->dev = serial->dev; + urb->dev = port->serial->dev; result = usb_submit_urb(urb, GFP_ATOMIC); if (result) dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result); @@ -806,16 +785,10 @@ struct usb_serial_port *port = (struct usb_serial_port *) urb->context; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) { /* error in the urb, so we have to resubmit it */ - if (serial_paranoia_check (port->serial, __FUNCTION__)) { - return; - } dbg("%s - Overflow in write", __FUNCTION__); dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); port->write_urb->transfer_buffer_length = 1; @@ -862,6 +835,6 @@ MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(debug, "Debug enabled or not"); diff -Nru a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h --- a/drivers/usb/serial/pl2303.h Tue May 18 23:38:07 2004 +++ b/drivers/usb/serial/pl2303.h Tue May 18 23:38:07 2004 @@ -41,3 +41,6 @@ #define SITECOM_VENDOR_ID 0x6189 #define SITECOM_PRODUCT_ID 0x2068 + +#define ALCATEL_VENDOR_ID 0x11f7 +#define ALCATEL_PRODUCT_ID 0x02df diff -Nru a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c --- a/drivers/usb/serial/safe_serial.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/serial/safe_serial.c Tue May 18 23:38:06 2004 @@ -211,7 +211,6 @@ static void safe_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *) urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); unsigned char *data = urb->transfer_buffer; unsigned char length = urb->actual_length; int i; @@ -219,11 +218,6 @@ dbg ("%s", __FUNCTION__); - if (!serial) { - dbg ("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg ("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -272,8 +266,8 @@ } /* Continue trying to always read */ - usb_fill_bulk_urb (urb, serial->dev, - usb_rcvbulkpipe (serial->dev, port->bulk_in_endpointAddress), + usb_fill_bulk_urb (urb, port->serial->dev, + usb_rcvbulkpipe (port->serial->dev, port->bulk_in_endpointAddress), urb->transfer_buffer, urb->transfer_buffer_length, safe_read_bulk_callback, port); @@ -284,7 +278,6 @@ static int safe_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count) { - struct usb_serial *serial = port->serial; unsigned char *data; int result; int i; @@ -367,7 +360,7 @@ printk ("\n"); } #endif - port->write_urb->dev = serial->dev; + port->write_urb->dev = port->serial->dev; if ((result = usb_submit_urb (port->write_urb, GFP_KERNEL))) { err ("%s - failed submitting write urb, error %d", __FUNCTION__, result); return 0; @@ -395,7 +388,7 @@ static int safe_startup (struct usb_serial *serial) { - switch (serial->interface->altsetting->desc.bInterfaceProtocol) { + switch (serial->interface->cur_altsetting->desc.bInterfaceProtocol) { case LINEO_SAFESERIAL_CRC: break; case LINEO_SAFESERIAL_CRC_PADDED: diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c --- a/drivers/usb/serial/usb-serial.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/serial/usb-serial.c Tue May 18 23:38:06 2004 @@ -1,7 +1,7 @@ /* * USB Serial Converter driver * - * Copyright (C) 1999 - 2003 Greg Kroah-Hartman (greg@kroah.com) + * Copyright (C) 1999 - 2004 Greg Kroah-Hartman (greg@kroah.com) * Copyright (C) 2000 Peter Berger (pberger@brimson.com) * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com) * @@ -330,6 +330,7 @@ #include #include #include +#include #include #include #include @@ -416,8 +417,7 @@ } if (good_spot == 0) continue; - - serial->magic = USB_SERIAL_MAGIC; + *minor = i; dbg("%s - minor base = %d", __FUNCTION__, *minor); for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) @@ -460,9 +460,10 @@ /* get the serial object associated with this tty pointer */ serial = usb_serial_get_by_index(tty->index); - - if (serial_paranoia_check (serial, __FUNCTION__)) - return -ENODEV; + if (!serial) { + retval = -ENODEV; + goto bailout; + } /* set up our port structure making the tty driver remember our port object, and us it */ portNumber = tty->index - serial->minor; @@ -496,9 +497,8 @@ static void serial_close(struct tty_struct *tty, struct file * filp) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - if (!serial) + if (!port) return; dbg("%s - port %d", __FUNCTION__, port->number); @@ -524,12 +524,8 @@ static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); int retval = -EINVAL; - if (!serial) - return -ENODEV; - dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count); if (!port->open_count) { @@ -538,7 +534,7 @@ } /* pass on to the driver specific version of this function */ - retval = serial->type->write(port, from_user, buf, count); + retval = port->serial->type->write(port, from_user, buf, count); exit: return retval; @@ -547,12 +543,8 @@ static int serial_write_room (struct tty_struct *tty) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); int retval = -EINVAL; - if (!serial) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); if (!port->open_count) { @@ -561,7 +553,7 @@ } /* pass on to the driver specific version of this function */ - retval = serial->type->write_room(port); + retval = port->serial->type->write_room(port); exit: return retval; @@ -570,12 +562,8 @@ static int serial_chars_in_buffer (struct tty_struct *tty) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); int retval = -EINVAL; - if (!serial) - return -ENODEV; - dbg("%s = port %d", __FUNCTION__, port->number); if (!port->open_count) { @@ -584,7 +572,7 @@ } /* pass on to the driver specific version of this function */ - retval = serial->type->chars_in_buffer(port); + retval = port->serial->type->chars_in_buffer(port); exit: return retval; @@ -593,10 +581,6 @@ static void serial_throttle (struct tty_struct * tty) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - return; dbg("%s - port %d", __FUNCTION__, port->number); @@ -606,8 +590,8 @@ } /* pass on to the driver specific version of this function */ - if (serial->type->throttle) - serial->type->throttle(port); + if (port->serial->type->throttle) + port->serial->type->throttle(port); exit: ; @@ -616,10 +600,6 @@ static void serial_unthrottle (struct tty_struct * tty) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - return; dbg("%s - port %d", __FUNCTION__, port->number); @@ -629,8 +609,8 @@ } /* pass on to the driver specific version of this function */ - if (serial->type->unthrottle) - serial->type->unthrottle(port); + if (port->serial->type->unthrottle) + port->serial->type->unthrottle(port); exit: ; @@ -639,12 +619,8 @@ static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); int retval = -ENODEV; - if (!serial) - return -ENODEV; - dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd); if (!port->open_count) { @@ -653,8 +629,8 @@ } /* pass on to the driver specific version of this function if it is available */ - if (serial->type->ioctl) - retval = serial->type->ioctl(port, file, cmd, arg); + if (port->serial->type->ioctl) + retval = port->serial->type->ioctl(port, file, cmd, arg); else retval = -ENOIOCTLCMD; @@ -665,10 +641,6 @@ static void serial_set_termios (struct tty_struct *tty, struct termios * old) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - return; dbg("%s - port %d", __FUNCTION__, port->number); @@ -678,8 +650,8 @@ } /* pass on to the driver specific version of this function if it is available */ - if (serial->type->set_termios) - serial->type->set_termios(port, old); + if (port->serial->type->set_termios) + port->serial->type->set_termios(port, old); exit: ; @@ -688,10 +660,6 @@ static void serial_break (struct tty_struct *tty, int break_state) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - return; dbg("%s - port %d", __FUNCTION__, port->number); @@ -701,8 +669,8 @@ } /* pass on to the driver specific version of this function if it is available */ - if (serial->type->break_ctl) - serial->type->break_ctl(port, break_state); + if (port->serial->type->break_ctl) + port->serial->type->break_ctl(port, break_state); exit: ; @@ -761,10 +729,6 @@ static int serial_tiocmget (struct tty_struct *tty, struct file *file) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - goto exit; dbg("%s - port %d", __FUNCTION__, port->number); @@ -773,8 +737,8 @@ goto exit; } - if (serial->type->tiocmget) - return serial->type->tiocmget(port, file); + if (port->serial->type->tiocmget) + return port->serial->type->tiocmget(port, file); exit: return -EINVAL; @@ -784,10 +748,6 @@ unsigned int set, unsigned int clear) { struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); - - if (!serial) - goto exit; dbg("%s - port %d", __FUNCTION__, port->number); @@ -796,8 +756,8 @@ goto exit; } - if (serial->type->tiocmset) - return serial->type->tiocmset(port, file, set, clear); + if (port->serial->type->tiocmset) + return port->serial->type->tiocmset(port, file, set, clear); exit: return -EINVAL; @@ -806,7 +766,6 @@ void usb_serial_port_softint(void *private) { struct usb_serial_port *port = (struct usb_serial_port *)private; - struct usb_serial *serial; struct tty_struct *tty; dbg("%s - port %d", __FUNCTION__, port->number); @@ -814,10 +773,6 @@ if (!port) return; - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - tty = port->tty; if (!tty) return; @@ -1037,7 +992,7 @@ (dev->descriptor.idProduct == ATEN_PRODUCT_ID))) { if (interface != dev->actconfig->interface[0]) { /* check out the endpoints of the other interface*/ - iface_desc = &dev->actconfig->interface[0]->altsetting[0]; + iface_desc = dev->actconfig->interface[0]->cur_altsetting; for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { endpoint = &iface_desc->endpoint[i].desc; if ((endpoint->bEndpointAddress & 0x80) && @@ -1117,7 +1072,6 @@ memset(port, 0x00, sizeof(struct usb_serial_port)); port->number = i + serial->minor; port->serial = serial; - port->magic = USB_SERIAL_PORT_MAGIC; INIT_WORK(&port->work, usb_serial_port_softint, port); serial->port[i] = port; } @@ -1463,5 +1417,5 @@ MODULE_DESCRIPTION( DRIVER_DESC ); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(debug, "Debug enabled or not"); diff -Nru a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h --- a/drivers/usb/serial/usb-serial.h Tue May 18 23:38:09 2004 +++ b/drivers/usb/serial/usb-serial.h Tue May 18 23:38:09 2004 @@ -1,7 +1,7 @@ /* * USB Serial Converter driver * - * Copyright (C) 1999 - 2003 + * Copyright (C) 1999 - 2004 * Greg Kroah-Hartman (greg@kroah.com) * * This program is free software; you can redistribute it and/or modify @@ -62,15 +62,11 @@ #define MAX_NUM_PORTS 8 /* The maximum number of ports one device can grab at once */ -#define USB_SERIAL_MAGIC 0x6702 /* magic number for usb_serial struct */ -#define USB_SERIAL_PORT_MAGIC 0x7301 /* magic number for usb_serial_port struct */ - /* parity check flag */ #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) /** * usb_serial_port: structure for the specific ports of a device. - * @magic: magic number for internal validity of this pointer. * @serial: pointer back to the struct usb_serial owner of this port. * @tty: pointer to the corresponding tty for this port. * @number: the number of the port (the minor number). @@ -95,8 +91,7 @@ * ports of a device. */ struct usb_serial_port { - int magic; - struct usb_serial *serial; + struct usb_serial * serial; struct tty_struct * tty; unsigned char number; @@ -133,7 +128,6 @@ /** * usb_serial - structure used by the usb-serial core for a device - * @magic: magic number for internal validity of this pointer. * @dev: pointer to the struct usb_device for this device * @type: pointer to the struct usb_serial_device_type for this device * @interface: pointer to the struct usb_interface for this device @@ -151,7 +145,6 @@ * usb_set_serial_data() to access this. */ struct usb_serial { - int magic; struct usb_device * dev; struct usb_serial_device_type * type; struct usb_interface * interface; @@ -300,60 +293,6 @@ extern struct usb_serial_device_type usb_serial_generic_device; extern struct bus_type usb_serial_bus_type; extern struct tty_driver *usb_serial_tty_driver; - -/* Inline functions to check the sanity of a pointer that is passed to us */ -static inline int serial_paranoia_check (struct usb_serial *serial, const char *function) -{ - if (!serial) { - dbg("%s - serial == NULL", function); - return -1; - } - if (serial->magic != USB_SERIAL_MAGIC) { - dbg("%s - bad magic number for serial", function); - return -1; - } - if (!serial->type) { - dbg("%s - serial->type == NULL!", function); - return -1; - } - - return 0; -} - - -static inline int port_paranoia_check (struct usb_serial_port *port, const char *function) -{ - if (!port) { - dbg("%s - port == NULL", function); - return -1; - } - if (port->magic != USB_SERIAL_PORT_MAGIC) { - dbg("%s - bad magic number for port", function); - return -1; - } - if (!port->serial) { - dbg("%s - port->serial == NULL", function); - return -1; - } - - return 0; -} - - -static inline struct usb_serial* get_usb_serial (struct usb_serial_port *port, const char *function) -{ - /* if no port was specified, or it fails a paranoia check */ - if (!port || - port_paranoia_check (port, function) || - serial_paranoia_check (port->serial, function)) { - /* then say that we don't have a valid usb_serial thing, which will - * end up genrating -ENODEV return values */ - return NULL; - } - - return port->serial; -} - static inline void usb_serial_debug_data (const char *file, const char *function, int size, const unsigned char *data) { diff -Nru a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c --- a/drivers/usb/serial/visor.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/serial/visor.c Tue May 18 23:38:06 2004 @@ -2,7 +2,7 @@ * USB HandSpring Visor, Palm m50x, and Sony Clie driver * (supports all of the Palm OS USB devices) * - * Copyright (C) 1999 - 2003 + * Copyright (C) 1999 - 2004 * Greg Kroah-Hartman (greg@kroah.com) * * This program is free software; you can redistribute it and/or modify @@ -151,6 +151,7 @@ #include #include #include +#include #include #include #include @@ -194,8 +195,8 @@ static int palm_os_4_probe (struct usb_serial *serial, const struct usb_device_id *id); /* Parameters that may be passed into the module. */ -static int vendor = -1; -static int product = -1; +static __u16 vendor; +static __u16 product; static struct usb_device_id id_table [] = { { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID), @@ -222,6 +223,8 @@ .driver_info = (kernel_ulong_t)&palm_os_4_probe }, { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID), .driver_info = (kernel_ulong_t)&palm_os_4_probe }, + { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID), + .driver_info = (kernel_ulong_t)&palm_os_4_probe }, { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID), .driver_info = (kernel_ulong_t)&palm_os_4_probe }, { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID), @@ -273,6 +276,7 @@ { USB_DEVICE(PALM_VENDOR_ID, PALM_M130_ID) }, { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID) }, { USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID) }, + { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) }, { USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID) }, { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_3_5_ID) }, { USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID) }, @@ -393,9 +397,6 @@ struct usb_serial *serial = port->serial; int result = 0; - if (port_paranoia_check (port, __FUNCTION__)) - return -ENODEV; - dbg("%s - port %d", __FUNCTION__, port->number); if (!port->read_urb) { @@ -443,18 +444,10 @@ static void visor_close (struct usb_serial_port *port, struct file * filp) { - struct usb_serial *serial; unsigned char *transfer_buffer; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - serial = get_usb_serial (port, __FUNCTION__); - if (!serial) - return; - /* shutdown our urbs */ usb_unlink_urb (port->read_urb); if (port->interrupt_in_urb) @@ -463,8 +456,8 @@ /* Try to send shutdown message, if the device is gone, this will just fail. */ transfer_buffer = kmalloc (0x12, GFP_KERNEL); if (transfer_buffer) { - usb_control_msg (serial->dev, - usb_rcvctrlpipe(serial->dev, 0), + usb_control_msg (port->serial->dev, + usb_rcvctrlpipe(port->serial->dev, 0), VISOR_CLOSE_NOTIFICATION, 0xc2, 0x0000, 0x0000, transfer_buffer, 0x12, 300); @@ -568,9 +561,6 @@ /* free up the transfer buffer, as usb_free_urb() does not do this */ kfree (urb->transfer_buffer); - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); if (urb->status) @@ -584,22 +574,13 @@ static void visor_read_bulk_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; int i; int result; - if (port_paranoia_check (port, __FUNCTION__)) - return; - dbg("%s - port %d", __FUNCTION__, port->number); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); return; @@ -622,9 +603,9 @@ bytes_in += urb->actual_length; /* Continue trying to always read */ - usb_fill_bulk_urb (port->read_urb, serial->dev, - usb_rcvbulkpipe (serial->dev, - port->bulk_in_endpointAddress), + usb_fill_bulk_urb (port->read_urb, port->serial->dev, + usb_rcvbulkpipe(port->serial->dev, + port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, visor_read_bulk_callback, port); @@ -1099,10 +1080,10 @@ MODULE_DESCRIPTION( DRIVER_DESC ); MODULE_LICENSE("GPL"); -MODULE_PARM(debug, "i"); +module_param(debug, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(debug, "Debug enabled or not"); -MODULE_PARM(vendor, "i"); +module_param(vendor, ushort, 0); MODULE_PARM_DESC(vendor, "User specified vendor ID"); -MODULE_PARM(product, "i"); +module_param(product, ushort, 0); MODULE_PARM_DESC(product, "User specified product ID"); diff -Nru a/drivers/usb/serial/visor.h b/drivers/usb/serial/visor.h --- a/drivers/usb/serial/visor.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/serial/visor.h Tue May 18 23:38:08 2004 @@ -31,6 +31,7 @@ #define PALM_M130_ID 0x0050 #define PALM_TUNGSTEN_T_ID 0x0060 #define PALM_TUNGSTEN_Z_ID 0x0031 +#define PALM_ZIRE31_ID 0x0061 #define PALM_ZIRE_ID 0x0070 #define PALM_M100_ID 0x0080 diff -Nru a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c --- a/drivers/usb/serial/whiteheat.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/serial/whiteheat.c Tue May 18 23:38:06 2004 @@ -984,7 +984,6 @@ static void command_port_read_callback (struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *command_port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (command_port, __FUNCTION__); struct whiteheat_command_private *command_info; unsigned char *data = urb->transfer_buffer; int result; @@ -997,11 +996,6 @@ return; } - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } - usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); command_info = usb_get_serial_port_data(command_port); @@ -1029,7 +1023,7 @@ } /* Continue trying to always read */ - command_port->read_urb->dev = serial->dev; + command_port->read_urb->dev = command_port->serial->dev; result = usb_submit_urb(command_port->read_urb, GFP_ATOMIC); spin_unlock_irqrestore(&command_info->lock, flags); if (result) @@ -1040,7 +1034,6 @@ static void whiteheat_read_callback(struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct whiteheat_urb_wrap *wrap; unsigned char *data = urb->transfer_buffer; struct whiteheat_private *info = usb_get_serial_port_data(port); @@ -1057,14 +1050,6 @@ list_del(&wrap->list); spin_unlock(&info->lock); - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - spin_lock(&info->lock); - list_add(&wrap->list, &info->rx_urbs_free); - spin_unlock(&info->lock); - return; - } - if (urb->status) { dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status); spin_lock(&info->lock); @@ -1091,7 +1076,6 @@ static void whiteheat_write_callback(struct urb *urb, struct pt_regs *regs) { struct usb_serial_port *port = (struct usb_serial_port *)urb->context; - struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct whiteheat_private *info = usb_get_serial_port_data(port); struct whiteheat_urb_wrap *wrap; @@ -1107,11 +1091,6 @@ list_del(&wrap->list); list_add(&wrap->list, &info->tx_urbs_free); spin_unlock(&info->lock); - - if (!serial) { - dbg("%s - bad serial pointer, exiting", __FUNCTION__); - return; - } if (urb->status) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); diff -Nru a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c --- a/drivers/usb/storage/datafab.c Tue May 18 23:38:09 2004 +++ b/drivers/usb/storage/datafab.c Tue May 18 23:38:09 2004 @@ -321,7 +321,7 @@ goto leave; } - wait_ms(20); + msleep(20); } rc = USB_STOR_TRANSPORT_ERROR; @@ -489,7 +489,7 @@ return USB_STOR_TRANSPORT_GOOD; } -void datafab_info_destructor(void *extra) +static void datafab_info_destructor(void *extra) { // this routine is a placeholder... // currently, we don't allocate any extra memory so we're okay diff -Nru a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c --- a/drivers/usb/storage/isd200.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/storage/isd200.c Tue May 18 23:38:07 2004 @@ -349,7 +349,7 @@ * RETURNS: * void */ -void isd200_build_sense(struct us_data *us, Scsi_Cmnd *srb) +static void isd200_build_sense(struct us_data *us, Scsi_Cmnd *srb) { struct isd200_info *info = (struct isd200_info *)us->extra; struct sense_data *buf = (struct sense_data *) &srb->sense_buffer[0]; @@ -505,7 +505,7 @@ * RETURNS: * ISD status code */ -int isd200_read_regs( struct us_data *us ) +static int isd200_read_regs( struct us_data *us ) { struct isd200_info *info = (struct isd200_info *)us->extra; int retStatus = ISD200_GOOD; @@ -534,7 +534,7 @@ * This is used by the protocol layers to actually send the message to * the device and receive the response. */ -void isd200_invoke_transport( struct us_data *us, +static void isd200_invoke_transport( struct us_data *us, Scsi_Cmnd *srb, union ata_cdb *ataCdb ) { @@ -677,7 +677,7 @@ * RETURNS: * ISD status code */ -int isd200_write_config( struct us_data *us ) +static int isd200_write_config( struct us_data *us ) { struct isd200_info *info = (struct isd200_info *)us->extra; int retStatus = ISD200_GOOD; @@ -720,7 +720,7 @@ * RETURNS: * ISD status code */ -int isd200_read_config( struct us_data *us ) +static int isd200_read_config( struct us_data *us ) { struct isd200_info *info = (struct isd200_info *)us->extra; int retStatus = ISD200_GOOD; @@ -765,7 +765,7 @@ * RETURNS: * NT status code */ -int isd200_atapi_soft_reset( struct us_data *us ) +static int isd200_atapi_soft_reset( struct us_data *us ) { int retStatus = ISD200_GOOD; int transferStatus; @@ -791,7 +791,7 @@ * RETURNS: * ISD status code */ -int isd200_srst( struct us_data *us ) +static int isd200_srst( struct us_data *us ) { int retStatus = ISD200_GOOD; int transferStatus; @@ -806,7 +806,7 @@ retStatus = ISD200_ERROR; } else { /* delay 10ms to give the drive a chance to see it */ - wait_ms(10); + msleep(10); transferStatus = isd200_action( us, ACTION_REENABLE, NULL, 0 ); if (transferStatus != ISD200_TRANSPORT_GOOD) { @@ -814,7 +814,7 @@ retStatus = ISD200_ERROR; } else { /* delay 50ms to give the drive a chance to recover after SRST */ - wait_ms(50); + msleep(50); } } @@ -937,7 +937,7 @@ * RETURNS: * ISD status code */ -int isd200_manual_enum(struct us_data *us) +static int isd200_manual_enum(struct us_data *us) { struct isd200_info *info = (struct isd200_info *)us->extra; int retStatus = ISD200_GOOD; @@ -981,7 +981,7 @@ * RETURNS: * ISD status code */ -int isd200_get_inquiry_data( struct us_data *us ) +static int isd200_get_inquiry_data( struct us_data *us ) { struct isd200_info *info = (struct isd200_info *)us->extra; int retStatus = ISD200_GOOD; @@ -1124,8 +1124,8 @@ * TRUE if the command needs to be sent to the transport layer * FALSE otherwise */ -int isd200_scsi_to_ata(Scsi_Cmnd *srb, struct us_data *us, - union ata_cdb * ataCdb) +static int isd200_scsi_to_ata(Scsi_Cmnd *srb, struct us_data *us, + union ata_cdb * ataCdb) { struct isd200_info *info = (struct isd200_info *)us->extra; struct hd_driveid *id = info->id; @@ -1339,7 +1339,7 @@ * * Frees the driver structure. */ -void isd200_free_info_ptrs(void *info_) +static void isd200_free_info_ptrs(void *info_) { struct isd200_info *info = (struct isd200_info *) info_; @@ -1357,7 +1357,7 @@ * RETURNS: * ISD status code */ -int isd200_init_info(struct us_data *us) +static int isd200_init_info(struct us_data *us) { int retStatus = ISD200_GOOD; struct isd200_info *info; diff -Nru a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c --- a/drivers/usb/storage/jumpshot.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/storage/jumpshot.c Tue May 18 23:38:05 2004 @@ -253,7 +253,7 @@ if (result != USB_STOR_TRANSPORT_GOOD) { // I have not experimented to find the smallest value. // - wait_ms(50); + msleep(50); } } while ((result != USB_STOR_TRANSPORT_GOOD) && (waitcount < 10)); @@ -416,7 +416,7 @@ } -void jumpshot_info_destructor(void *extra) +static void jumpshot_info_destructor(void *extra) { // this routine is a placeholder... // currently, we don't allocate any extra blocks so we're okay diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c --- a/drivers/usb/storage/scsiglue.c Tue May 18 23:38:07 2004 +++ b/drivers/usb/storage/scsiglue.c Tue May 18 23:38:07 2004 @@ -159,14 +159,18 @@ return FAILED; } - /* Set state to ABORTING, set the ABORTING bit, and release the lock */ + /* Set state to ABORTING and set the ABORTING bit, but only if + * a device reset isn't already in progress (to avoid interfering + * with the reset). To prevent races with auto-reset, we must + * stop any ongoing USB transfers while still holding the host + * lock. */ us->sm_state = US_STATE_ABORTING; - set_bit(US_FLIDX_ABORTING, &us->flags); + if (!test_bit(US_FLIDX_RESETTING, &us->flags)) { + set_bit(US_FLIDX_ABORTING, &us->flags); + usb_stor_stop_transport(us); + } scsi_unlock(host); - /* Stop an ongoing USB transfer */ - usb_stor_stop_transport(us); - /* Wait for the aborted command to finish */ wait_for_completion(&us->notify); @@ -254,18 +258,17 @@ } /* Report a driver-initiated device reset to the SCSI layer. - * Calling this for a SCSI-initiated reset is unnecessary but harmless. */ + * Calling this for a SCSI-initiated reset is unnecessary but harmless. + * The caller must own the SCSI host lock. */ void usb_stor_report_device_reset(struct us_data *us) { int i; - scsi_lock(us->host); scsi_report_device_reset(us->host, 0, 0); if (us->flags & US_FL_SCM_MULT_TARG) { for (i = 1; i < us->host->max_id; ++i) scsi_report_device_reset(us->host, 0, i); } - scsi_unlock(us->host); } /*********************************************************************** diff -Nru a/drivers/usb/storage/scsiglue.h b/drivers/usb/storage/scsiglue.h --- a/drivers/usb/storage/scsiglue.h Tue May 18 23:38:07 2004 +++ b/drivers/usb/storage/scsiglue.h Tue May 18 23:38:07 2004 @@ -43,7 +43,7 @@ #include #include "scsi.h" -#include "hosts.h" +#include #include "usb.h" extern void usb_stor_report_device_reset(struct us_data *us); diff -Nru a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c --- a/drivers/usb/storage/shuttle_usbat.c Tue May 18 23:38:05 2004 +++ b/drivers/usb/storage/shuttle_usbat.c Tue May 18 23:38:05 2004 @@ -55,11 +55,11 @@ int transferred = 0; -int usbat_read(struct us_data *us, - unsigned char access, - unsigned char reg, - unsigned char *content) { - +static int usbat_read(struct us_data *us, + unsigned char access, + unsigned char reg, + unsigned char *content) +{ int result; result = usb_stor_ctrl_transfer(us, @@ -74,11 +74,11 @@ return result; } -int usbat_write(struct us_data *us, - unsigned char access, - unsigned char reg, - unsigned char content) { - +static int usbat_write(struct us_data *us, + unsigned char access, + unsigned char reg, + unsigned char content) +{ int result; result = usb_stor_ctrl_transfer(us, @@ -93,14 +93,14 @@ return result; } -int usbat_set_shuttle_features(struct us_data *us, - unsigned char external_trigger, - unsigned char epp_control, - unsigned char mask_byte, - unsigned char test_pattern, - unsigned char subcountH, - unsigned char subcountL) { - +static int usbat_set_shuttle_features(struct us_data *us, + unsigned char external_trigger, + unsigned char epp_control, + unsigned char mask_byte, + unsigned char test_pattern, + unsigned char subcountH, + unsigned char subcountL) +{ int result; unsigned char *command = us->iobuf; @@ -125,13 +125,13 @@ return result; } -int usbat_read_block(struct us_data *us, - unsigned char access, - unsigned char reg, - unsigned char *content, - unsigned short len, - int use_sg) { - +static int usbat_read_block(struct us_data *us, + unsigned char access, + unsigned char reg, + unsigned char *content, + unsigned short len, + int use_sg) +{ int result; unsigned char *command = us->iobuf; @@ -171,8 +171,8 @@ * an error condition. */ -int usbat_wait_not_busy(struct us_data *us, int minutes) { - +static int usbat_wait_not_busy(struct us_data *us, int minutes) +{ int i; int result; unsigned char *status = us->iobuf; @@ -202,13 +202,13 @@ } if (i<500) - wait_ms(10); // 5 seconds + msleep(10); // 5 seconds else if (i<700) - wait_ms(50); // 10 seconds + msleep(50); // 10 seconds else if (i<1200) - wait_ms(100); // 50 seconds + msleep(100); // 50 seconds else - wait_ms(1000); // X minutes + msleep(1000); // X minutes } US_DEBUGP("Waited not busy for %d minutes, timing out.\n", @@ -216,14 +216,13 @@ return USB_STOR_TRANSPORT_FAILED; } -int usbat_write_block(struct us_data *us, - unsigned char access, - unsigned char reg, - unsigned char *content, - unsigned short len, - int use_sg, - int minutes) { - +static int usbat_write_block(struct us_data *us, + unsigned char access, + unsigned char reg, + unsigned char *content, + unsigned short len, + int use_sg, int minutes) +{ int result; unsigned char *command = us->iobuf; @@ -260,21 +259,21 @@ return usbat_wait_not_busy(us, minutes); } -int usbat_rw_block_test(struct us_data *us, - unsigned char access, - unsigned char *registers, - unsigned char *data_out, - unsigned short num_registers, - unsigned char data_reg, - unsigned char status_reg, - unsigned char timeout, - unsigned char qualifier, - int direction, - unsigned char *content, - unsigned short len, - int use_sg, - int minutes) { - +static int usbat_rw_block_test(struct us_data *us, + unsigned char access, + unsigned char *registers, + unsigned char *data_out, + unsigned short num_registers, + unsigned char data_reg, + unsigned char status_reg, + unsigned char timeout, + unsigned char qualifier, + int direction, + unsigned char *content, + unsigned short len, + int use_sg, + int minutes) +{ int result; unsigned int pipe = (direction == SCSI_DATA_READ) ? us->recv_bulk_pipe : us->send_bulk_pipe; @@ -431,12 +430,12 @@ * transfers of data! */ -int usbat_multiple_write(struct us_data *us, - unsigned char access, - unsigned char *registers, - unsigned char *data_out, - unsigned short num_registers) { - +static int usbat_multiple_write(struct us_data *us, + unsigned char access, + unsigned char *registers, + unsigned char *data_out, + unsigned short num_registers) +{ int result; unsigned char *data = us->iobuf; int i; @@ -479,9 +478,8 @@ return usbat_wait_not_busy(us, 0); } -int usbat_read_user_io(struct us_data *us, - unsigned char *data_flags) { - +static int usbat_read_user_io(struct us_data *us, unsigned char *data_flags) +{ int result; result = usb_stor_ctrl_transfer(us, @@ -496,10 +494,10 @@ return result; } -int usbat_write_user_io(struct us_data *us, - unsigned char enable_flags, - unsigned char data_flags) { - +static int usbat_write_user_io(struct us_data *us, + unsigned char enable_flags, + unsigned char data_flags) +{ int result; result = usb_stor_ctrl_transfer(us, @@ -519,11 +517,11 @@ * a little ( <= 65535 byte) ATAPI pipe */ -int usbat_handle_read10(struct us_data *us, - unsigned char *registers, - unsigned char *data, - Scsi_Cmnd *srb) { - +static int usbat_handle_read10(struct us_data *us, + unsigned char *registers, + unsigned char *data, + Scsi_Cmnd *srb) +{ int result = USB_STOR_TRANSPORT_GOOD; unsigned char *buffer; unsigned int len; @@ -630,8 +628,8 @@ return result; } -static int hp_8200e_select_and_test_registers(struct us_data *us) { - +static int hp_8200e_select_and_test_registers(struct us_data *us) +{ int selector; unsigned char *status = us->iobuf; @@ -679,8 +677,8 @@ return USB_STOR_TRANSPORT_GOOD; } -int init_8200e(struct us_data *us) { - +int init_8200e(struct us_data *us) +{ int result; unsigned char *status = us->iobuf; @@ -693,7 +691,7 @@ US_DEBUGP("INIT 1\n"); - wait_ms(2000); + msleep(2000); if (usbat_read_user_io(us, status) != USB_STOR_XFER_GOOD) @@ -727,7 +725,7 @@ US_DEBUGP("INIT 5\n"); - wait_ms(250); + msleep(250); // Write 0x80 to ISA port 0x3F @@ -778,7 +776,7 @@ US_DEBUGP("INIT 12\n"); - wait_ms(1400); + msleep(1400); if (usbat_read_user_io(us, status) != USB_STOR_XFER_GOOD) diff -Nru a/drivers/usb/storage/shuttle_usbat.h b/drivers/usb/storage/shuttle_usbat.h --- a/drivers/usb/storage/shuttle_usbat.h Tue May 18 23:38:05 2004 +++ b/drivers/usb/storage/shuttle_usbat.h Tue May 18 23:38:05 2004 @@ -52,27 +52,7 @@ #define USBAT_UIO_OE0 0x10 // I/O 0 set=output/clr=input #define USBAT_UIO_ADPRST 0x01 // Reset SCM chip -/* USBAT-specific commands */ - -extern int usbat_read(struct us_data *us, unsigned char access, - unsigned char reg, unsigned char *content); -extern int usbat_write(struct us_data *us, unsigned char access, - unsigned char reg, unsigned char content); -extern int usbat_read_block(struct us_data *us, unsigned char access, - unsigned char reg, unsigned char *content, unsigned short len, - int use_sg); -extern int usbat_write_block(struct us_data *us, unsigned char access, - unsigned char reg, unsigned char *content, unsigned short len, - int use_sg, int minutes); -extern int usbat_multiple_write(struct us_data *us, unsigned char access, - unsigned char *registers, unsigned char *data_out, - unsigned short num_registers); -extern int usbat_read_user_io(struct us_data *us, unsigned char *data_flags); -extern int usbat_write_user_io(struct us_data *us, - unsigned char enable_flags, unsigned char data_flags); - /* HP 8200e stuff */ - extern int hp8200e_transport(Scsi_Cmnd *srb, struct us_data *us); extern int init_8200e(struct us_data *us); diff -Nru a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c --- a/drivers/usb/storage/transport.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/storage/transport.c Tue May 18 23:38:06 2004 @@ -137,7 +137,7 @@ int status; /* don't submit URBs during abort/disconnect processing */ - if (us->flags & DONT_SUBMIT) + if (us->flags & ABORTING_OR_DISCONNECTING) return -EIO; /* set up data structures for the wakeup system */ @@ -172,7 +172,7 @@ set_bit(US_FLIDX_URB_ACTIVE, &us->flags); /* did an abort/disconnect occur during the submission? */ - if (us->flags & DONT_SUBMIT) { + if (us->flags & ABORTING_OR_DISCONNECTING) { /* cancel the URB, if it hasn't been cancelled already */ if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) { @@ -440,7 +440,7 @@ int result; /* don't submit s-g requests during abort/disconnect processing */ - if (us->flags & DONT_SUBMIT) + if (us->flags & ABORTING_OR_DISCONNECTING) return USB_STOR_XFER_ERROR; /* initialize the scatter-gather request block */ @@ -458,7 +458,7 @@ set_bit(US_FLIDX_SG_ACTIVE, &us->flags); /* did an abort/disconnect occur during the submission? */ - if (us->flags & DONT_SUBMIT) { + if (us->flags & ABORTING_OR_DISCONNECTING) { /* cancel the request, if it hasn't been cancelled already */ if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->flags)) { @@ -712,14 +712,10 @@ /* abort processing: the bulk-only transport requires a reset * following an abort */ - Handle_Abort: + Handle_Abort: srb->result = DID_ABORT << 16; - if (us->protocol == US_PR_BULK) { - - /* permit the reset transfer to take place */ - clear_bit(US_FLIDX_ABORTING, &us->flags); + if (us->protocol == US_PR_BULK) us->transport_reset(us); - } } /* Stop the current URB transfer */ @@ -912,6 +908,17 @@ USB_RECIP_INTERFACE, 0, us->ifnum, us->iobuf, 1, HZ); + /* + * Some devices (i.e. Iomega Zip100) need this -- apparently + * the bulk pipes get STALLed when the GetMaxLUN request is + * processed. This is, in theory, harmless to all other devices + * (regardless of if they stall or not). + */ + if (result < 0) { + usb_stor_clear_halt(us, us->recv_bulk_pipe); + usb_stor_clear_halt(us, us->send_bulk_pipe); + } + US_DEBUGP("GetMaxLUN command result is %d, data is %d\n", result, us->iobuf[0]); @@ -1079,20 +1086,28 @@ { int result; int result2; + int rc = FAILED; - /* Let the SCSI layer know we are doing a reset */ + /* Let the SCSI layer know we are doing a reset, set the + * RESETTING bit, and clear the ABORTING bit so that the reset + * may proceed. + */ + scsi_lock(us->host); usb_stor_report_device_reset(us); + set_bit(US_FLIDX_RESETTING, &us->flags); + clear_bit(US_FLIDX_ABORTING, &us->flags); + scsi_unlock(us->host); /* A 20-second timeout may seem rather long, but a LaCie - * StudioDrive USB2 device takes 16+ seconds to get going - * following a powerup or USB attach event. */ - + * StudioDrive USB2 device takes 16+ seconds to get going + * following a powerup or USB attach event. + */ result = usb_stor_control_msg(us, us->send_ctrl_pipe, request, requesttype, value, index, data, size, 20*HZ); if (result < 0) { US_DEBUGP("Soft reset failed: %d\n", result); - return FAILED; + goto Done; } /* long wait for reset, so unlock to allow disconnects */ @@ -1102,12 +1117,9 @@ down(&us->dev_semaphore); if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) { US_DEBUGP("Reset interrupted by disconnect\n"); - return FAILED; + goto Done; } - /* permit the clear-halt transfers to take place */ - clear_bit(US_FLIDX_ABORTING, &us->flags); - US_DEBUGP("Soft reset: clearing bulk-in endpoint halt\n"); result = usb_stor_clear_halt(us, us->recv_bulk_pipe); @@ -1117,10 +1129,14 @@ /* return a result code based on the result of the control message */ if (result < 0 || result2 < 0) { US_DEBUGP("Soft reset failed\n"); - return FAILED; + goto Done; } US_DEBUGP("Soft reset done\n"); - return SUCCESS; + rc = SUCCESS; + + Done: + clear_bit(US_FLIDX_RESETTING, &us->flags); + return rc; } /* This issues a CB[I] Reset to the device in question diff -Nru a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h --- a/drivers/usb/storage/unusual_devs.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/storage/unusual_devs.h Tue May 18 23:38:08 2004 @@ -90,6 +90,12 @@ US_SC_SCSI, US_PR_DPCM_USB, NULL, 0 ), #endif +/* Patch submitted by Alessandro Fracchetti */ +UNUSUAL_DEV( 0x0482, 0x0105, 0x0100, 0x0100, + "Kyocera", + "Finecam L3", + US_SC_SCSI, US_PR_BULK, NULL, US_FL_FIX_INQUIRY), + /* Patch submitted by Philipp Friedrich */ UNUSUAL_DEV( 0x0482, 0x0100, 0x0100, 0x0100, "Kyocera", @@ -297,6 +303,13 @@ US_SC_SCSI, US_PR_DEVICE, NULL, US_FL_SINGLE_LUN | US_FL_MODE_XLATE), +/* Submitted by Rajesh Kumble Nayak */ +UNUSUAL_DEV( 0x054c, 0x002e, 0x0500, 0x0500, + "Sony", + "Handycam HC-85", + US_SC_UFI, US_PR_DEVICE, NULL, + US_FL_SINGLE_LUN | US_FL_MODE_XLATE), + UNUSUAL_DEV( 0x054c, 0x0032, 0x0000, 0x9999, "Sony", "Memorystick MSC-U01N", @@ -322,6 +335,13 @@ "PEG Mass Storage", US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY ), + +/* Submitted by Mike Alborn */ +UNUSUAL_DEV( 0x054c, 0x016a, 0x0000, 0x9999, + "Sony", + "PEG Mass Storage", + US_SC_DEVICE, US_PR_DEVICE, NULL, + US_FL_FIX_INQUIRY ), UNUSUAL_DEV( 0x057b, 0x0000, 0x0000, 0x0299, "Y-E Data", @@ -438,22 +458,6 @@ US_FL_SINGLE_LUN ), #endif -/* Following three Minolta cameras reported by Martin Pool - * . Originally discovered by Kedar Petankar, - * Matthew Geier, Mikael Lofj"ard, Marcel de Boer. - */ -UNUSUAL_DEV( 0x0686, 0x4006, 0x0001, 0x0001, - "Minolta", - "DiMAGE 7", - US_SC_SCSI, US_PR_DEVICE, NULL, - 0 ), - -UNUSUAL_DEV( 0x0686, 0x400f, 0x0001, 0x0001, - "Minolta", - "DiMAGE 7Hi", - US_SC_SCSI, US_PR_DEVICE, NULL, - 0 ), - /* Submitted by Benny Sjostrand */ UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001, "Minolta", @@ -629,7 +633,7 @@ "Casio", "QV DigitalCamera", US_SC_DEVICE, US_PR_CB, NULL, - US_FL_FIX_INQUIRY ), + US_FL_NEED_OVERRIDE | US_FL_FIX_INQUIRY ), /* Later Casio cameras apparently tell the truth */ UNUSUAL_DEV( 0x07cf, 0x1001, 0x9010, 0x9999, @@ -688,7 +692,7 @@ UNUSUAL_DEV( 0x0a16, 0x8888, 0x0100, 0x0100, "IBM", "IBM USB Memory Key", - US_SC_SCSI, US_PR_BULK, NULL, + US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY ), /* This Pentax still camera is not conformant diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c --- a/drivers/usb/storage/usb.c Tue May 18 23:38:06 2004 +++ b/drivers/usb/storage/usb.c Tue May 18 23:38:06 2004 @@ -84,8 +84,6 @@ #include -#include -#include #include #include @@ -490,7 +488,7 @@ if (unusual_dev->useTransport != US_PR_DEVICE && us->protocol == idesc->bInterfaceProtocol) msg += 2; - if (msg >= 0) + if (msg >= 0 && !(unusual_dev->flags & US_FL_NEED_OVERRIDE)) printk(KERN_NOTICE USB_STORAGE "This device " "(%04x,%04x,%04x S %02x P %02x)" " has %s in unusual_devs.h\n" diff -Nru a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h --- a/drivers/usb/storage/usb.h Tue May 18 23:38:08 2004 +++ b/drivers/usb/storage/usb.h Tue May 18 23:38:08 2004 @@ -49,7 +49,7 @@ #include #include #include "scsi.h" -#include "hosts.h" +#include struct us_data; @@ -69,6 +69,7 @@ /* Flag definitions: these entries are static */ #define US_FL_SINGLE_LUN 0x00000001 /* allow access to only LUN 0 */ #define US_FL_MODE_XLATE 0 /* [no longer used] */ +#define US_FL_NEED_OVERRIDE 0x00000004 /* unusual_devs entry is necessary */ #define US_FL_IGNORE_SER 0 /* [no longer used] */ #define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */ #define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs faking */ @@ -79,8 +80,9 @@ #define US_FLIDX_SG_ACTIVE 19 /* 0x00080000 current_sg is in use */ #define US_FLIDX_ABORTING 20 /* 0x00100000 abort is in progress */ #define US_FLIDX_DISCONNECTING 21 /* 0x00200000 disconnect in progress */ -#define DONT_SUBMIT ((1UL << US_FLIDX_ABORTING) | \ - (1UL << US_FLIDX_DISCONNECTING)) +#define ABORTING_OR_DISCONNECTING ((1UL << US_FLIDX_ABORTING) | \ + (1UL << US_FLIDX_DISCONNECTING)) +#define US_FLIDX_RESETTING 22 /* 0x00400000 device reset in progress */ /* processing state machine states */ diff -Nru a/drivers/video/Kconfig b/drivers/video/Kconfig --- a/drivers/video/Kconfig Tue May 18 23:38:05 2004 +++ b/drivers/video/Kconfig Tue May 18 23:38:05 2004 @@ -225,6 +225,10 @@ This is the frame buffer device driver for the Chips & Technologies 65550 graphics chip in PowerBooks. +config FB_ASILIANT + bool "Chips 69000 display support" + depends on FB && PCI + config FB_IMSTT bool "IMS Twin Turbo display support" depends on FB && PCI @@ -308,6 +312,14 @@ As this card technology is 15 years old, most people will answer N here. +config FB_HGA_ACCEL + bool "Hercules mono Acceleration functions (EXPERIMENTAL)" + depends on FB_HGA && EXPERIMENTAL + ---help--- + This will compile the Hercules mono graphics with + acceleration functions. + + config VIDEO_SELECT bool depends on FB && X86 @@ -319,6 +331,21 @@ help SGI Visual Workstation support for framebuffer graphics. +config FB_GBE + bool "SGI Graphics Backend frame buffer support" + depends on FB && (SGI_IP32 || X86_VISWS) + help + This is the frame buffer device driver for SGI Graphics Backend. + This chip is used in SGI O2 and Visual Workstation 320/540. + +config FB_GBE_MEM + int "Video memory size in MB" + depends on FB_GBE + default 8 + help + This is the amount of memory reserved for the framebuffer, + which can be any value between 1MB and 8MB. + config BUS_I2C bool depends on FB && VISWS @@ -743,6 +770,14 @@ To compile this driver as a module, choose M here: the module will be called tdfxfb. +config FB_3DFX_ACCEL + bool "3Dfx Banshee/Voodoo3 Acceleration functions (EXPERIMENTAL)" + depends on FB_3DFX && EXPERIMENTAL + ---help--- + This will compile the 3Dfx Banshee/Voodoo3 frame buffer device + with acceleration functions. + + config FB_VOODOO1 tristate "3Dfx Voodoo Graphics (sst1) support" depends on FB && PCI @@ -772,6 +807,14 @@ To compile this driver as a module, choose M here: the module will be called tridentfb. +config FB_TRIDENT_ACCEL + bool "Trident Acceleration functions (EXPERIMENTAL)" + depends on FB_TRIDENT && EXPERIMENTAL + ---help--- + This will compile the Trident frame buffer device with + acceleration functions. + + config FB_PM3 tristate "Permedia3 support" depends on FB && PCI && BROKEN @@ -879,6 +922,37 @@ help Say Y here if you want to support the built-in frame buffer of the Motorola 68328 CPU family. + +config FB_PXA + tristate "PXA LCD framebuffer support" + depends on FB && ARCH_PXA + ---help--- + Frame buffer driver for the built-in LCD controller in the Intel + PXA2x0 processor. + + This driver is also available as a module ( = code which can be + inserted and removed from the running kernel whenever you want). The + module will be called vfb. If you want to compile it as a module, + say M here and read . + + If unsure, say N. + +config FB_PXA_PARAMETERS + bool "PXA LCD command line parameters" + default n + depends on FB_PXA + ---help--- + Enable the use of kernel command line or module parameters + to configure the physical properties of the LCD panel when + using the PXA LCD driver. + + This option allows you to override the panel parameters + supplied by the platform in order to support multiple + different models of flatpanel. If you will only be using a + single model of flatpanel then you can safely leave this + option disabled. + + Documentation/fb/pxafb.txt describes the available parameters. config FB_VIRTUAL tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)" diff -Nru a/drivers/video/Makefile b/drivers/video/Makefile --- a/drivers/video/Makefile Tue May 18 23:38:05 2004 +++ b/drivers/video/Makefile Tue May 18 23:38:05 2004 @@ -22,7 +22,7 @@ obj-$(CONFIG_FB_ATARI) += atafb.o obj-$(CONFIG_FB_68328) += 68328fb.o obj-$(CONFIG_FB_RADEON_OLD) += radeonfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o -obj-$(CONFIG_FB_NEOMAGIC) += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o +obj-$(CONFIG_FB_NEOMAGIC) += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o vgastate.o obj-$(CONFIG_FB_IGA) += igafb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_CONTROL) += controlfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_PLATINUM) += platinumfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o @@ -31,6 +31,7 @@ obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_CYBER) += cyberfb.o obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o +obj-$(CONFIG_FB_GBE) += gbefb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_SGIVW) += sgivwfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_3DFX) += tdfxfb.o cfbimgblt.o obj-$(CONFIG_FB_MAC) += macfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o @@ -72,6 +73,7 @@ obj-$(CONFIG_FB_PVR2) += pvr2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_KYRO) += kyro/ cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_VOODOO1) += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o +obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_FFB) += ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o obj-$(CONFIG_FB_CG6) += cg6.o sbuslib.o cfbimgblt.o cfbcopyarea.o @@ -87,4 +89,4 @@ cfbfillrect.o obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o cfbimgblt.o cfbcopyarea.o \ cfbfillrect.o - +obj-$(CONFIG_FB_PXA) += pxafb.o cfbimgblt.o cfbcopyarea.o cfbfillrect.o diff -Nru a/drivers/video/asiliantfb.c b/drivers/video/asiliantfb.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/video/asiliantfb.c Tue May 18 23:38:09 2004 @@ -0,0 +1,620 @@ +/* + * drivers/video/asiliantfb.c + * frame buffer driver for Asiliant 69000 chip + * Copyright (C) 2001-2003 Saito.K & Jeanne + * + * from driver/video/chipsfb.c and, + * + * drivers/video/asiliantfb.c -- frame buffer device for + * Asiliant 69030 chip (formerly Intel, formerly Chips & Technologies) + * Author: apc@agelectronics.co.uk + * Copyright (C) 2000 AG Electronics + * Note: the data sheets don't seem to be available from Asiliant. + * They are available by searching developer.intel.com, but are not otherwise + * linked to. + * + * This driver should be portable with minimal effort to the 69000 display + * chip, and to the twin-display mode of the 69030. + * Contains code from Thomas Hhenleitner (thanks) + * + * Derived from the CT65550 driver chipsfb.c: + * Copyright (C) 1998 Paul Mackerras + * ...which was derived from the Powermac "chips" driver: + * Copyright (C) 1997 Fabio Riccardi. + * And from the frame buffer device for Open Firmware-initialized devices: + * Copyright (C) 1997 Geert Uytterhoeven. + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive for + * more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Built in clock of the 69030 */ +const unsigned Fref = 14318180; + +#define mmio_base (p->screen_base + 0x400000) + +#define mm_write_ind(num, val, ap, dp) do { \ + writeb((num), mmio_base + (ap)); writeb((val), mmio_base + (dp)); \ +} while (0) + +static void mm_write_xr(struct fb_info *p, u8 reg, u8 data) +{ + mm_write_ind(reg, data, 0x7ac, 0x7ad); +} +#define write_xr(num, val) mm_write_xr(p, num, val) + +static void mm_write_fr(struct fb_info *p, u8 reg, u8 data) +{ + mm_write_ind(reg, data, 0x7a0, 0x7a1); +} +#define write_fr(num, val) mm_write_fr(p, num, val) + +static void mm_write_cr(struct fb_info *p, u8 reg, u8 data) +{ + mm_write_ind(reg, data, 0x7a8, 0x7a9); +} +#define write_cr(num, val) mm_write_cr(p, num, val) + +static void mm_write_gr(struct fb_info *p, u8 reg, u8 data) +{ + mm_write_ind(reg, data, 0x79c, 0x79d); +} +#define write_gr(num, val) mm_write_gr(p, num, val) + +static void mm_write_sr(struct fb_info *p, u8 reg, u8 data) +{ + mm_write_ind(reg, data, 0x788, 0x789); +} +#define write_sr(num, val) mm_write_sr(p, num, val) + +static void mm_write_ar(struct fb_info *p, u8 reg, u8 data) +{ + readb(mmio_base + 0x7b4); + mm_write_ind(reg, data, 0x780, 0x780); +} +#define write_ar(num, val) mm_write_ar(p, num, val) + +/* + * Exported functions + */ +int asiliantfb_init(void); + +static int asiliantfb_pci_init(struct pci_dev *dp, const struct pci_device_id *); +static int asiliantfb_check_var(struct fb_var_screeninfo *var, + struct fb_info *info); +static int asiliantfb_set_par(struct fb_info *info); +static int asiliantfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int transp, struct fb_info *info); + +static struct fb_ops asiliantfb_ops = { + .owner = THIS_MODULE, + .fb_check_var = asiliantfb_check_var, + .fb_set_par = asiliantfb_set_par, + .fb_setcolreg = asiliantfb_setcolreg, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_cursor = soft_cursor, +}; + +/* Calculate the ratios for the dot clocks without using a single long long + * value */ +static void asiliant_calc_dclk2(u32 *ppixclock, u8 *dclk2_m, u8 *dclk2_n, u8 *dclk2_div) +{ + unsigned pixclock = *ppixclock; + unsigned Ftarget = 1000000 * (1000000 / pixclock); + unsigned n; + unsigned best_error = 0xffffffff; + unsigned best_m = 0xffffffff, + best_n = 0xffffffff; + unsigned ratio; + unsigned remainder; + unsigned char divisor = 0; + + /* Calculate the frequency required. This is hard enough. */ + ratio = 1000000 / pixclock; + remainder = 1000000 % pixclock; + Ftarget = 1000000 * ratio + (1000000 * remainder) / pixclock; + + while (Ftarget < 100000000) { + divisor += 0x10; + Ftarget <<= 1; + } + + ratio = Ftarget / Fref; + remainder = Ftarget % Fref; + + /* This expresses the constraint that 150kHz <= Fref/n <= 5Mhz, + * together with 3 <= n <= 257. */ + for (n = 3; n <= 257; n++) { + unsigned m = n * ratio + (n * remainder) / Fref; + + /* 3 <= m <= 257 */ + if (m >= 3 && m <= 257) { + unsigned new_error = ((Ftarget * n) - (Fref * m)) >= 0 ? + ((Ftarget * n) - (Fref * m)) : ((Fref * m) - (Ftarget * n)); + if (new_error < best_error) { + best_n = n; + best_m = m; + best_error = new_error; + } + } + /* But if VLD = 4, then 4m <= 1028 */ + else if (m <= 1028) { + /* remember there are still only 8-bits of precision in m, so + * avoid over-optimistic error calculations */ + unsigned new_error = ((Ftarget * n) - (Fref * (m & ~3))) >= 0 ? + ((Ftarget * n) - (Fref * (m & ~3))) : ((Fref * (m & ~3)) - (Ftarget * n)); + if (new_error < best_error) { + best_n = n; + best_m = m; + best_error = new_error; + } + } + } + if (best_m > 257) + best_m >>= 2; /* divide m by 4, and leave VCO loop divide at 4 */ + else + divisor |= 4; /* or set VCO loop divide to 1 */ + *dclk2_m = best_m - 2; + *dclk2_n = best_n - 2; + *dclk2_div = divisor; + *ppixclock = pixclock; + return; +} + +static void asiliant_set_timing(struct fb_info *p) +{ + unsigned hd = p->var.xres / 8; + unsigned hs = (p->var.xres + p->var.right_margin) / 8; + unsigned he = (p->var.xres + p->var.right_margin + p->var.hsync_len) / 8; + unsigned ht = (p->var.left_margin + p->var.xres + p->var.right_margin + p->var.hsync_len) / 8; + unsigned vd = p->var.yres; + unsigned vs = p->var.yres + p->var.lower_margin; + unsigned ve = p->var.yres + p->var.lower_margin + p->var.vsync_len; + unsigned vt = p->var.upper_margin + p->var.yres + p->var.lower_margin + p->var.vsync_len; + unsigned wd = (p->var.xres_virtual * ((p->var.bits_per_pixel+7)/8)) / 8; + + if ((p->var.xres == 640) && (p->var.yres == 480) && (p->var.pixclock == 39722)) { + write_fr(0x01, 0x02); /* LCD */ + } else { + write_fr(0x01, 0x01); /* CRT */ + } + + write_cr(0x11, (ve - 1) & 0x0f); + write_cr(0x00, (ht - 5) & 0xff); + write_cr(0x01, hd - 1); + write_cr(0x02, hd); + write_cr(0x03, ((ht - 1) & 0x1f) | 0x80); + write_cr(0x04, hs); + write_cr(0x05, (((ht - 1) & 0x20) <<2) | (he & 0x1f)); + write_cr(0x3c, (ht - 1) & 0xc0); + write_cr(0x06, (vt - 2) & 0xff); + write_cr(0x30, (vt - 2) >> 8); + write_cr(0x07, 0x00); + write_cr(0x08, 0x00); + write_cr(0x09, 0x00); + write_cr(0x10, (vs - 1) & 0xff); + write_cr(0x32, ((vs - 1) >> 8) & 0xf); + write_cr(0x11, ((ve - 1) & 0x0f) | 0x80); + write_cr(0x12, (vd - 1) & 0xff); + write_cr(0x31, ((vd - 1) & 0xf00) >> 8); + write_cr(0x13, wd & 0xff); + write_cr(0x41, (wd & 0xf00) >> 8); + write_cr(0x15, (vs - 1) & 0xff); + write_cr(0x33, ((vs - 1) >> 8) & 0xf); + write_cr(0x38, ((ht - 5) & 0x100) >> 8); + write_cr(0x16, (vt - 1) & 0xff); + write_cr(0x18, 0x00); + + if (p->var.xres == 640) { + writeb(0xc7, mmio_base + 0x784); /* set misc output reg */ + } else { + writeb(0x07, mmio_base + 0x784); /* set misc output reg */ + } +} + +static int asiliantfb_check_var(struct fb_var_screeninfo *var, + struct fb_info *p) +{ + unsigned long Ftarget, ratio, remainder; + + ratio = 1000000 / var->pixclock; + remainder = 1000000 % var->pixclock; + Ftarget = 1000000 * ratio + (1000000 * remainder) / var->pixclock; + + /* First check the constraint that the maximum post-VCO divisor is 32, + * and the maximum Fvco is 220MHz */ + if (Ftarget > 220000000 || Ftarget < 3125000) { + printk(KERN_ERR "asiliantfb dotclock must be between 3.125 and 220MHz\n"); + return -ENXIO; + } + var->xres_virtual = var->xres; + var->yres_virtual = var->yres; + + if (var->bits_per_pixel == 24) { + var->red.offset = 16; + var->green.offset = 8; + var->blue.offset = 0; + var->red.length = var->blue.length = var->green.length = 8; + } else if (var->bits_per_pixel == 16) { + switch (var->red.offset) { + case 11: + var->green.length = 6; + break; + case 10: + var->green.length = 5; + break; + default: + return -EINVAL; + } + var->green.offset = 5; + var->blue.offset = 0; + var->red.length = var->blue.length = 5; + } else if (var->bits_per_pixel == 8) { + var->red.offset = var->green.offset = var->blue.offset = 0; + var->red.length = var->green.length = var->blue.length = 8; + } + return 0; +} + +static int asiliantfb_set_par(struct fb_info *p) +{ + u8 dclk2_m; /* Holds m-2 value for register */ + u8 dclk2_n; /* Holds n-2 value for register */ + u8 dclk2_div; /* Holds divisor bitmask */ + + /* Set pixclock */ + asiliant_calc_dclk2(&p->var.pixclock, &dclk2_m, &dclk2_n, &dclk2_div); + + /* Set color depth */ + if (p->var.bits_per_pixel == 24) { + write_xr(0x81, 0x16); /* 24 bit packed color mode */ + write_xr(0x82, 0x00); /* Disable palettes */ + write_xr(0x20, 0x20); /* 24 bit blitter mode */ + } else if (p->var.bits_per_pixel == 16) { + if (p->var.red.offset == 11) + write_xr(0x81, 0x15); /* 16 bit color mode */ + else + write_xr(0x81, 0x14); /* 15 bit color mode */ + write_xr(0x82, 0x00); /* Disable palettes */ + write_xr(0x20, 0x10); /* 16 bit blitter mode */ + } else if (p->var.bits_per_pixel == 8) { + write_xr(0x0a, 0x02); /* Linear */ + write_xr(0x81, 0x12); /* 8 bit color mode */ + write_xr(0x82, 0x00); /* Graphics gamma enable */ + write_xr(0x20, 0x00); /* 8 bit blitter mode */ + } + p->fix.line_length = p->var.xres * (p->var.bits_per_pixel >> 3); + p->fix.visual = (p->var.bits_per_pixel == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR; + write_xr(0xc4, dclk2_m); + write_xr(0xc5, dclk2_n); + write_xr(0xc7, dclk2_div); + /* Set up the CR registers */ + asiliant_set_timing(p); + return 0; +} + +static int asiliantfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int transp, struct fb_info *p) +{ + if (regno > 255) + return 1; + red >>= 8; + green >>= 8; + blue >>= 8; + + /* Set hardware palete */ + writeb(regno, mmio_base + 0x790); + udelay(1); + writeb(red, mmio_base + 0x791); + writeb(green, mmio_base + 0x791); + writeb(blue, mmio_base + 0x791); + + switch(p->var.bits_per_pixel) { + case 15: + if (regno < 16) { + ((u32 *)(p->pseudo_palette))[regno] = + ((red & 0xf8) << 7) | + ((green & 0xf8) << 2) | + ((blue & 0xf8) >> 3); + } + break; + case 16: + if (regno < 16) { + ((u32 *)(p->pseudo_palette))[regno] = + ((red & 0xf8) << 8) | + ((green & 0xfc) << 3) | + ((blue & 0xf8) >> 3); + } + break; + case 24: + if (regno < 24) { + ((u32 *)(p->pseudo_palette))[regno] = + (red << 16) | + (green << 8) | + (blue); + } + break; + } + return 0; +} + +struct chips_init_reg { + unsigned char addr; + unsigned char data; +}; + +#define N_ELTS(x) (sizeof(x) / sizeof(x[0])) + +static struct chips_init_reg chips_init_sr[] = +{ + {0x00, 0x03}, /* Reset register */ + {0x01, 0x01}, /* Clocking mode */ + {0x02, 0x0f}, /* Plane mask */ + {0x04, 0x0e} /* Memory mode */ +}; + +static struct chips_init_reg chips_init_gr[] = +{ + {0x03, 0x00}, /* Data rotate */ + {0x05, 0x00}, /* Graphics mode */ + {0x06, 0x01}, /* Miscellaneous */ + {0x08, 0x00} /* Bit mask */ +}; + +static struct chips_init_reg chips_init_ar[] = +{ + {0x10, 0x01}, /* Mode control */ + {0x11, 0x00}, /* Overscan */ + {0x12, 0x0f}, /* Memory plane enable */ + {0x13, 0x00} /* Horizontal pixel panning */ +}; + +static struct chips_init_reg chips_init_cr[] = +{ + {0x0c, 0x00}, /* Start address high */ + {0x0d, 0x00}, /* Start address low */ + {0x40, 0x00}, /* Extended Start Address */ + {0x41, 0x00}, /* Extended Start Address */ + {0x14, 0x00}, /* Underline location */ + {0x17, 0xe3}, /* CRT mode control */ + {0x70, 0x00} /* Interlace control */ +}; + + +static struct chips_init_reg chips_init_fr[] = +{ + {0x01, 0x02}, + {0x03, 0x08}, + {0x08, 0xcc}, + {0x0a, 0x08}, + {0x18, 0x00}, + {0x1e, 0x80}, + {0x40, 0x83}, + {0x41, 0x00}, + {0x48, 0x13}, + {0x4d, 0x60}, + {0x4e, 0x0f}, + + {0x0b, 0x01}, + + {0x21, 0x51}, + {0x22, 0x1d}, + {0x23, 0x5f}, + {0x20, 0x4f}, + {0x34, 0x00}, + {0x24, 0x51}, + {0x25, 0x00}, + {0x27, 0x0b}, + {0x26, 0x00}, + {0x37, 0x80}, + {0x33, 0x0b}, + {0x35, 0x11}, + {0x36, 0x02}, + {0x31, 0xea}, + {0x32, 0x0c}, + {0x30, 0xdf}, + {0x10, 0x0c}, + {0x11, 0xe0}, + {0x12, 0x50}, + {0x13, 0x00}, + {0x16, 0x03}, + {0x17, 0xbd}, + {0x1a, 0x00}, +}; + + +static struct chips_init_reg chips_init_xr[] = +{ + {0xce, 0x00}, /* set default memory clock */ + {0xcc, 200 }, /* MCLK ratio M */ + {0xcd, 18 }, /* MCLK ratio N */ + {0xce, 0x90}, /* MCLK divisor = 2 */ + + {0xc4, 209 }, + {0xc5, 118 }, + {0xc7, 32 }, + {0xcf, 0x06}, + {0x09, 0x01}, /* IO Control - CRT controller extensions */ + {0x0a, 0x02}, /* Frame buffer mapping */ + {0x0b, 0x01}, /* PCI burst write */ + {0x40, 0x03}, /* Memory access control */ + {0x80, 0x82}, /* Pixel pipeline configuration 0 */ + {0x81, 0x12}, /* Pixel pipeline configuration 1 */ + {0x82, 0x08}, /* Pixel pipeline configuration 2 */ + + {0xd0, 0x0f}, + {0xd1, 0x01}, +}; + +static void __init chips_hw_init(struct fb_info *p) +{ + int i; + + for (i = 0; i < N_ELTS(chips_init_xr); ++i) + write_xr(chips_init_xr[i].addr, chips_init_xr[i].data); + write_xr(0x81, 0x12); + write_xr(0x82, 0x08); + write_xr(0x20, 0x00); + for (i = 0; i < N_ELTS(chips_init_sr); ++i) + write_sr(chips_init_sr[i].addr, chips_init_sr[i].data); + for (i = 0; i < N_ELTS(chips_init_gr); ++i) + write_gr(chips_init_gr[i].addr, chips_init_gr[i].data); + for (i = 0; i < N_ELTS(chips_init_ar); ++i) + write_ar(chips_init_ar[i].addr, chips_init_ar[i].data); + /* Enable video output in attribute index register */ + writeb(0x20, mmio_base + 0x780); + for (i = 0; i < N_ELTS(chips_init_cr); ++i) + write_cr(chips_init_cr[i].addr, chips_init_cr[i].data); + for (i = 0; i < N_ELTS(chips_init_fr); ++i) + write_fr(chips_init_fr[i].addr, chips_init_fr[i].data); +} + +static struct fb_fix_screeninfo asiliantfb_fix __initdata = { + .id = "Asiliant 69000", + .type = FB_TYPE_PACKED_PIXELS, + .visual = FB_VISUAL_PSEUDOCOLOR, + .accel = FB_ACCEL_NONE, + .line_length = 640, + .smem_len = 0x200000, /* 2MB */ +}; + +static struct fb_var_screeninfo asiliantfb_var __initdata = { + .xres = 640, + .yres = 480, + .xres_virtual = 640, + .yres_virtual = 480, + .bits_per_pixel = 8, + .red = { .length = 8 }, + .green = { .length = 8 }, + .blue = { .length = 8 }, + .height = -1, + .width = -1, + .vmode = FB_VMODE_NONINTERLACED, + .pixclock = 39722, + .left_margin = 48, + .right_margin = 16, + .upper_margin = 33, + .lower_margin = 10, + .hsync_len = 96, + .vsync_len = 2, +}; + +static void __init init_asiliant(struct fb_info *p, unsigned long addr) +{ + p->fix = asiliantfb_fix; + p->fix.smem_start = addr; + p->var = asiliantfb_var; + p->fbops = &asiliantfb_ops; + p->flags = FBINFO_FLAG_DEFAULT; + + fb_alloc_cmap(&p->cmap, 256, 0); + + if (register_framebuffer(p) < 0) { + printk(KERN_ERR "C&T 69000 framebuffer failed to register\n"); + return; + } + + printk(KERN_INFO "fb%d: Asiliant 69000 frame buffer (%dK RAM detected)\n", + p->node, p->fix.smem_len / 1024); + + writeb(0xff, mmio_base + 0x78c); + chips_hw_init(p); +} + +static int __devinit +asiliantfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) +{ + unsigned long addr, size; + struct fb_info *p; + + if ((dp->resource[0].flags & IORESOURCE_MEM) == 0) + return -ENODEV; + addr = pci_resource_start(dp, 0); + size = pci_resource_len(dp, 0); + if (addr == 0) + return -ENODEV; + if (!request_mem_region(addr, size, "asiliantfb")) + return -EBUSY; + + p = framebuffer_alloc(sizeof(u32) * 256, &dp->dev); + if (!p) { + release_mem_region(addr, size); + return -ENOMEM; + } + p->pseudo_palette = p->par; + p->par = NULL; + + p->screen_base = ioremap(addr, 0x800000); + if (p->screen_base == NULL) { + release_mem_region(addr, size); + framebuffer_release(p); + return -ENOMEM; + } + + pci_write_config_dword(dp, 4, 0x02800083); + writeb(3, addr + 0x400784); + + init_asiliant(p, addr); + + /* Clear the entire framebuffer */ + memset(p->screen_base, 0, 0x200000); + + pci_set_drvdata(dp, p); + return 0; +} + +static void __devexit asiliantfb_remove(struct pci_dev *dp) +{ + struct fb_info *p = pci_get_drvdata(dp); + + unregister_framebuffer(p); + iounmap(p->screen_base); + release_mem_region(pci_resource_start(dp, 0), pci_resource_len(dp, 0)); + pci_set_drvdata(dp, NULL); + framebuffer_release(p); +} + +static struct pci_device_id asiliantfb_pci_tbl[] __devinitdata = { + { PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69000, PCI_ANY_ID, PCI_ANY_ID }, + { 0 } +}; + +MODULE_DEVICE_TABLE(pci, asiliantfb_pci_tbl); + +static struct pci_driver asiliantfb_driver = { + .name = "asiliantfb", + .id_table = asiliantfb_pci_tbl, + .probe = asiliantfb_pci_init, + .remove = __devexit_p(asiliantfb_remove), +}; + +int __init asiliantfb_init(void) +{ + return pci_module_init(&asiliantfb_driver); +} + +static void __exit asiliantfb_exit(void) +{ + pci_unregister_driver(&asiliantfb_driver); +} + +MODULE_LICENSE("GPL"); diff -Nru a/drivers/video/atafb.c b/drivers/video/atafb.c --- a/drivers/video/atafb.c Tue May 18 23:38:05 2004 +++ b/drivers/video/atafb.c Tue May 18 23:38:05 2004 @@ -2819,8 +2819,6 @@ fb_info.node, fb_info.modename, screen_len>>10); /* TODO: This driver cannot be unloaded yet */ - MOD_INC_USE_COUNT; - return 0; } @@ -3096,14 +3094,5 @@ int init_module(void) { return atafb_init(); -} - -void cleanup_module(void) -{ - /* Not reached because the usecount will never - be decremented to zero */ - unregister_framebuffer(&fb_info); - /* atari_stram_free( screen_base ); */ - /* TODO: further clean up ... */ } #endif /* MODULE */ diff -Nru a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c --- a/drivers/video/aty/radeon_accel.c Tue May 18 23:38:08 2004 +++ b/drivers/video/aty/radeon_accel.c Tue May 18 23:38:08 2004 @@ -53,6 +53,18 @@ static void radeonfb_prim_copyarea(struct radeonfb_info *rinfo, const struct fb_copyarea *area) { + int xdir, ydir; + u32 sx, sy, dx, dy, w, h; + + w = area->width; h = area->height; + dx = area->dx; dy = area->dy; + sx = area->sx; sy = area->sy; + xdir = sx - dx; + ydir = sy - dy; + + if ( xdir < 0 ) { sx += w-1; dx += w-1; } + if ( ydir < 0 ) { sy += h-1; dy += h-1; } + radeon_fifo_wait(3); OUTREG(DP_GUI_MASTER_CNTL, rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */ @@ -60,12 +72,13 @@ | ROP3_S | DP_SRC_RECT ); OUTREG(DP_WRITE_MSK, 0xffffffff); - OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM)); + OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0) + | (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0)); radeon_fifo_wait(3); - OUTREG(SRC_Y_X, (area->sy << 16) | area->sx); - OUTREG(DST_Y_X, (area->dy << 16) | area->dx); - OUTREG(DST_HEIGHT_WIDTH, (area->height << 16) | area->width); + OUTREG(SRC_Y_X, (sy << 16) | sx); + OUTREG(DST_Y_X, (dy << 16) | dx); + OUTREG(DST_HEIGHT_WIDTH, (h << 16) | w); } diff -Nru a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c --- a/drivers/video/aty/radeon_base.c Tue May 18 23:38:06 2004 +++ b/drivers/video/aty/radeon_base.c Tue May 18 23:38:06 2004 @@ -1184,7 +1184,7 @@ ~(PPLL_RESET | PPLL_SLEEP | PPLL_ATOMIC_UPDATE_EN | PPLL_VGA_ATOMIC_UPDATE_EN)); /* We may want some locking ... oh well */ - wait_ms(5); + msleep(5); /* Switch back VCLK source to PPLL */ OUTPLLP(VCLK_ECP_CNTL, VCLK_SRC_SEL_PPLLCLK, ~VCLK_SRC_SEL_MASK); @@ -1865,7 +1865,7 @@ lvds_gen_cntl |= (LVDS_BL_MOD_EN | LVDS_BLON); if (on && (level > BACKLIGHT_OFF)) { lvds_gen_cntl |= LVDS_DIGON; - if (!lvds_gen_cntl & LVDS_ON) { + if (!(lvds_gen_cntl & LVDS_ON)) { lvds_gen_cntl &= ~LVDS_BLON; OUTREG(LVDS_GEN_CNTL, lvds_gen_cntl); (void)INREG(LVDS_GEN_CNTL); @@ -2204,6 +2204,7 @@ rinfo->mapped_vram /= 2; continue; } + memset_io(rinfo->fb_base, 0, rinfo->mapped_vram); break; } diff -Nru a/drivers/video/aty/radeon_i2c.c b/drivers/video/aty/radeon_i2c.c --- a/drivers/video/aty/radeon_i2c.c Tue May 18 23:38:07 2004 +++ b/drivers/video/aty/radeon_i2c.c Tue May 18 23:38:07 2004 @@ -189,12 +189,12 @@ */ OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN)); (void)INREG(reg); - wait_ms(13); + msleep(13); OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN)); (void)INREG(reg); for (j = 0; j < 5; j++) { - wait_ms(10); + msleep(10); if (INREG(reg) & VGA_DDC_CLK_INPUT) break; } @@ -203,13 +203,13 @@ OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN); (void)INREG(reg); - wait_ms(15); + msleep(15); OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN); (void)INREG(reg); - wait_ms(15); + msleep(15); OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN)); (void)INREG(reg); - wait_ms(15); + msleep(15); /* Do the real work */ edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]); @@ -217,19 +217,19 @@ OUTREG(reg, INREG(reg) | (VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN)); (void)INREG(reg); - wait_ms(15); + msleep(15); OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN)); (void)INREG(reg); for (j = 0; j < 10; j++) { - wait_ms(10); + msleep(10); if (INREG(reg) & VGA_DDC_CLK_INPUT) break; } OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN)); (void)INREG(reg); - wait_ms(15); + msleep(15); OUTREG(reg, INREG(reg) | (VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN)); (void)INREG(reg); diff -Nru a/drivers/video/aty/radeonfb.h b/drivers/video/aty/radeonfb.h --- a/drivers/video/aty/radeonfb.h Tue May 18 23:38:06 2004 +++ b/drivers/video/aty/radeonfb.h Tue May 18 23:38:06 2004 @@ -223,8 +223,6 @@ /* Palette */ int palette_valid; - u32 palette[256]; - u32 palette2[256]; }; struct panel_info { @@ -440,15 +438,6 @@ /* * Inline utilities */ - -static inline void wait_ms(unsigned long ms) -{ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout((ms * HZ + 999) / 1000); -} - - - static inline int round_div(int num, int den) { return (num + (den / 2)) / den; diff -Nru a/drivers/video/console/Makefile b/drivers/video/console/Makefile --- a/drivers/video/console/Makefile Tue May 18 23:38:07 2004 +++ b/drivers/video/console/Makefile Tue May 18 23:38:07 2004 @@ -19,7 +19,7 @@ # Each configuration option enables a list of files. obj-$(CONFIG_DUMMY_CONSOLE) += dummycon.o -obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o +obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o font.o obj-$(CONFIG_PROM_CONSOLE) += promcon.o promcon_tbl.o obj-$(CONFIG_STI_CONSOLE) += sticon.o sticore.o obj-$(CONFIG_VGA_CONSOLE) += vgacon.o diff -Nru a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c --- a/drivers/video/console/dummycon.c Tue May 18 23:38:08 2004 +++ b/drivers/video/console/dummycon.c Tue May 18 23:38:08 2004 @@ -11,6 +11,7 @@ #include #include #include +#include /* * Dummy console driver @@ -58,6 +59,7 @@ */ const struct consw dummy_con = { + .owner = THIS_MODULE, .con_startup = dummycon_startup, .con_init = dummycon_init, .con_deinit = DUMMY, diff -Nru a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c --- a/drivers/video/console/fbcon.c Tue May 18 23:38:08 2004 +++ b/drivers/video/console/fbcon.c Tue May 18 23:38:08 2004 @@ -304,8 +304,7 @@ return -ENODEV; con2fb_map[unit] = newidx; fbcon_is_default = (vc->vc_sw == &fb_con) ? 1 : 0; - take_over_console(&fb_con, unit, unit, fbcon_is_default); - return 0; + return take_over_console(&fb_con, unit, unit, fbcon_is_default); } /* @@ -609,6 +608,7 @@ fb_display[unit].scrollmode = SCROLL_YNOMOVE; else fb_display[unit].scrollmode = SCROLL_YREDRAW; + con_set_default_unimap(unit); fbcon_set_display(vc, init, !init); } @@ -749,14 +749,6 @@ vc->vc_cols = nr_cols; vc->vc_rows = nr_rows; } - p->vrows = info->var.yres_virtual / vc->vc_font.height; - if(info->var.yres > (vc->vc_font.height * (vc->vc_rows + 1))) { - p->vrows -= (info->var.yres - (vc->vc_font.height * vc->vc_rows)) / vc->vc_font.height; - } - if ((info->var.yres % vc->vc_font.height) && - (info->var.yres_virtual % vc->vc_font.height < - info->var.yres % vc->vc_font.height)) - p->vrows--; vc->vc_can_do_color = info->var.bits_per_pixel != 1; vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; if (charcnt == 256) { @@ -767,7 +759,7 @@ vc->vc_complement_mask <<= 1; } - if (!init) { + if (logo) { if (vc->vc_cols != nr_cols || vc->vc_rows != nr_rows) vc_resize(vc->vc_num, nr_cols, nr_rows); else if (CON_IS_VISIBLE(vc) && @@ -784,9 +776,6 @@ vc->vc_pos += logo_lines * vc->vc_size_row; kfree(save); } - } - - if (logo) { if (logo_lines > vc->vc_bottom) { logo_shown = -1; printk(KERN_INFO @@ -1570,6 +1559,8 @@ p->vrows = var.yres_virtual/fh; if (var.yres > (fh * (height + 1))) p->vrows -= (var.yres - (fh * height)) / fh; + if ((var.yres % fh) && (var.yres_virtual % fh < var.yres % fh)) + p->vrows--; return 0; } @@ -1839,15 +1830,6 @@ if (resize) { /* reset wrap/pan */ info->var.xoffset = info->var.yoffset = p->yscroll = 0; - p->vrows = info->var.yres_virtual / h; - -#if 0 /* INCOMPLETE - let the console gurus handle this */ - if(info->var.yres > (h * (vc->vc_rows + 1)) - p->vrows -= (info->var.yres - (h * vc->vc_rows)) / h; -#endif - if ((info->var.yres % h) - && (info->var.yres_virtual % h < info->var.yres % h)) - p->vrows--; updatescrollmode(p, vc); vc_resize(vc->vc_num, info->var.xres / w, info->var.yres / h); if (CON_IS_VISIBLE(vc) && softback_buf) { @@ -2257,6 +2239,7 @@ */ const struct consw fb_con = { + .owner = THIS_MODULE, .con_startup = fbcon_startup, .con_init = fbcon_init, .con_deinit = fbcon_deinit, @@ -2286,10 +2269,16 @@ int __init fb_console_init(void) { + int err; + if (!num_registered_fb) return -ENODEV; - take_over_console(&fb_con, first_fb_vc, last_fb_vc, fbcon_is_default); + err = take_over_console(&fb_con, first_fb_vc, last_fb_vc, + fbcon_is_default); + if (err) + return err; + acquire_console_sem(); if (!fbcon_event_notifier_registered) { fb_register_client(&fbcon_event_notifer); diff -Nru a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c --- a/drivers/video/console/mdacon.c Tue May 18 23:38:07 2004 +++ b/drivers/video/console/mdacon.c Tue May 18 23:38:07 2004 @@ -370,8 +370,6 @@ if (mda_display_fg == NULL) mda_display_fg = c; - - MOD_INC_USE_COUNT; } static void mdacon_deinit(struct vc_data *c) @@ -380,8 +378,6 @@ if (mda_display_fg == c) mda_display_fg = NULL; - - MOD_DEC_USE_COUNT; } static inline u16 mda_convert_attr(u16 ch) @@ -586,6 +582,7 @@ */ const struct consw mda_con = { + .owner = THIS_MODULE, .con_startup = mdacon_startup, .con_init = mdacon_init, .con_deinit = mdacon_deinit, @@ -609,8 +606,7 @@ if (mda_first_vc > mda_last_vc) return 1; - take_over_console(&mda_con, mda_first_vc-1, mda_last_vc-1, 0); - return 0; + return take_over_console(&mda_con, mda_first_vc-1, mda_last_vc-1, 0); } void __exit mda_console_exit(void) diff -Nru a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c --- a/drivers/video/console/newport_con.c Tue May 18 23:38:08 2004 +++ b/drivers/video/console/newport_con.c Tue May 18 23:38:08 2004 @@ -32,6 +32,7 @@ extern struct font_desc font_vga_8x16; +extern unsigned long sgi_gfxaddr; #define FONT_DATA ((unsigned char *)font_vga_8x16.data) @@ -43,7 +44,7 @@ static unsigned char *font_data[MAX_NR_CONSOLES]; -extern struct newport_regs *npregs; +static struct newport_regs *npregs; static int logo_active; static int topscan; @@ -51,6 +52,8 @@ static int newport_xsize; static int newport_ysize; +static int newport_set_def_font(int unit, struct console_font_op *op); + #define BMASK(c) (c << 24) #define RENDER(regs, cp) do { \ @@ -95,11 +98,33 @@ } } +static void newport_show_logo(void) +{ #ifdef CONFIG_LOGO_SGI_CLUT224 -static void newport_show_logo(void); -#else -#define newport_show_logo() do { } while (0) -#endif + const struct linux_logo *logo = fb_find_logo(8); + const unsigned char *clut = logo->clut; + const unsigned char *data = logo->data; + unsigned long i; + + for (i = 0; i < logo->clutsize; i++) { + newport_bfwait(); + newport_cmap_setaddr(npregs, i + 0x20); + newport_cmap_setrgb(npregs, clut[0], clut[1], clut[2]); + clut += 3; + } + + newport_wait(); + npregs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_BLOCK | + NPORT_DMODE0_CHOST); + + npregs->set.xystarti = ((newport_xsize - logo->width) << 16) | (0); + npregs->set.xyendi = ((newport_xsize - 1) << 16); + newport_wait(); + + for (i = 0; i < logo->width*logo->height; i++) + npregs->go.hostrw0 = *data++ << 24; +#endif /* CONFIG_LOGO_SGI_CLUT224 */ +} static inline void newport_clear_screen(int xstart, int ystart, int xend, int yend, int ci) @@ -258,26 +283,22 @@ xcurs_correction = 21; } -#ifdef MODULE +/* Can't be __init, take_over_console may call it later */ static const char *newport_startup(void) -#else -static const char *__init newport_startup(void) -#endif { int i; - struct newport_regs *p; - - npregs = (struct newport_regs *) (KSEG1 + 0x1f0f0000); - p = npregs; - p->cset.config = NPORT_CFG_GD0; + if (!sgi_gfxaddr) + return NULL; + npregs = (struct newport_regs *) (KSEG1 + sgi_gfxaddr); + npregs->cset.config = NPORT_CFG_GD0; if (newport_wait()) { return NULL; } - p->set.xstarti = TESTVAL; - if (p->set._xstart.word != XSTI_TO_FXSTART(TESTVAL)) + npregs->set.xstarti = TESTVAL; + if (npregs->set._xstart.word != XSTI_TO_FXSTART(TESTVAL)) return NULL; for (i = 0; i < MAX_NR_CONSOLES; i++) @@ -287,8 +308,6 @@ newport_get_revisions(); newport_get_screensize(); - /* gfx_init (display_desc); */ - return "SGI Newport"; } @@ -299,6 +318,15 @@ vc->vc_can_do_color = 1; } +static void newport_deinit(struct vc_data *c) +{ + int i; + + /* free memory used by user font */ + for (i = 0; i < MAX_NR_CONSOLES; i++) + newport_set_def_font(i, NULL); +} + static void newport_clear(struct vc_data *vc, int sy, int sx, int height, int width) { @@ -677,9 +705,10 @@ #define DUMMY (void *) newport_dummy const struct consw newport_con = { + .owner = THIS_MODULE, .con_startup = newport_startup, .con_init = newport_init, - .con_deinit = DUMMY, + .con_deinit = newport_deinit, .con_clear = newport_clear, .con_putc = newport_putc, .con_putcs = newport_putcs, @@ -696,63 +725,18 @@ }; #ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) +static int __init newport_console_init(void) { - if (!newport_startup()) - printk("Error loading SGI Newport Console driver\n"); - else - printk("Loading SGI Newport Console Driver\n"); - take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1); - - return 0; + return take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1); } -int cleanup_module(void) +static void __exit newport_console_exit(void) { - int i; - - printk("Unloading SGI Newport Console Driver\n"); - /* free memory used by user font */ - for (i = 0; i < MAX_NR_CONSOLES; i++) - newport_set_def_font(i, NULL); - - return 0; + give_up_console(&newport_con); } -#endif - -#ifdef CONFIG_LOGO_SGI_CLUT224 - -#undef __initdata -#define __initdata -#include "../logo/logo_sgi_clut224.c" - -static void newport_show_logo(void) -{ - const struct linux_logo *logo = &logo_sgi_clut224; - const unsigned char *clut = logo->clut; - const unsigned char *data = logo->data; - unsigned long i; - - for (i = 0; i < logo->clutsize; i++) { - newport_bfwait(); - newport_cmap_setaddr(npregs, i + 0x20); - newport_cmap_setrgb(npregs, clut[0], clut[1], clut[2]); - clut += 3; - } - - newport_wait(); - npregs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_BLOCK | - NPORT_DMODE0_CHOST); - - npregs->set.xystarti = ((newport_xsize - logo->width) << 16) | (0); - npregs->set.xyendi = ((newport_xsize - 1) << 16); - newport_wait(); - - for (i = 0; i < logo->width*logo->height; i++) - npregs->go.hostrw0 = *data++ << 24; -} -#endif /* CONFIG_LOGO_SGI_CLUT224 */ +module_init(newport_console_init); +module_exit(newport_console_exit); +#endif +MODULE_LICENSE("GPL"); diff -Nru a/drivers/video/console/promcon.c b/drivers/video/console/promcon.c --- a/drivers/video/console/promcon.c Tue May 18 23:38:08 2004 +++ b/drivers/video/console/promcon.c Tue May 18 23:38:08 2004 @@ -574,6 +574,7 @@ #define DUMMY (void *) promcon_dummy const struct consw prom_con = { + .owner = THIS_MODULE, .con_startup = promcon_startup, .con_init = promcon_init, .con_deinit = promcon_deinit, diff -Nru a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c --- a/drivers/video/console/sticon.c Tue May 18 23:38:08 2004 +++ b/drivers/video/console/sticon.c Tue May 18 23:38:08 2004 @@ -354,6 +354,7 @@ } static struct consw sti_con = { + .owner = THIS_MODULE, .con_startup = sticon_startup, .con_init = sticon_init, .con_deinit = sticon_deinit, @@ -390,7 +391,7 @@ if (conswitchp == &dummy_con) { printk(KERN_INFO "sticon: Initializing STI text console.\n"); - take_over_console(&sti_con, 0, MAX_NR_CONSOLES - 1, 1); + return take_over_console(&sti_con, 0, MAX_NR_CONSOLES - 1, 1); } return 0; } diff -Nru a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c --- a/drivers/video/console/vgacon.c Tue May 18 23:38:07 2004 +++ b/drivers/video/console/vgacon.c Tue May 18 23:38:07 2004 @@ -1065,6 +1065,7 @@ #define DUMMY (void *) vgacon_dummy const struct consw vga_con = { + .owner = THIS_MODULE, .con_startup = vgacon_startup, .con_init = vgacon_init, .con_deinit = vgacon_deinit, diff -Nru a/drivers/video/cyberfb.c b/drivers/video/cyberfb.c --- a/drivers/video/cyberfb.c Tue May 18 23:38:05 2004 +++ b/drivers/video/cyberfb.c Tue May 18 23:38:05 2004 @@ -1065,7 +1065,6 @@ fb_info.node, fb_info.modename, CyberSize>>10); /* TODO: This driver cannot be unloaded yet */ - MOD_INC_USE_COUNT; DPRINTK("EXIT\n"); return 0; } @@ -1205,14 +1204,6 @@ int init_module(void) { return cyberfb_init(); -} - -void cleanup_module(void) -{ - /* Not reached because the usecount will never be - decremented to zero */ - unregister_framebuffer(&fb_info); - /* TODO: clean up ... */ } #endif /* MODULE */ diff -Nru a/drivers/video/fbmem.c b/drivers/video/fbmem.c --- a/drivers/video/fbmem.c Tue May 18 23:38:05 2004 +++ b/drivers/video/fbmem.c Tue May 18 23:38:05 2004 @@ -114,6 +114,8 @@ extern int chips_init(void); extern int g364fb_init(void); extern int sa1100fb_init(void); +extern int pxafb_init(void); +extern int pxafb_setup(char*); extern int fm2fb_init(void); extern int fm2fb_setup(char*); extern int q40fb_init(void); @@ -121,6 +123,8 @@ extern int sun3fb_setup(char *); extern int sgivwfb_init(void); extern int sgivwfb_setup(char*); +extern int gbefb_init(void); +extern int gbefb_setup(char*); extern int rivafb_init(void); extern int rivafb_setup(char*); extern int tdfxfb_init(void); @@ -307,6 +311,9 @@ #ifdef CONFIG_FB_SGIVW { "sgivwfb", sgivwfb_init, sgivwfb_setup }, #endif +#ifdef CONFIG_FB_GBE + { "gbefb", gbefb_init, gbefb_setup }, +#endif #ifdef CONFIG_FB_ACORN { "acornfb", acornfb_init, acornfb_setup }, #endif @@ -340,6 +347,9 @@ #ifdef CONFIG_FB_SA1100 { "sa1100fb", sa1100fb_init, NULL }, #endif +#ifdef CONFIG_FB_PXA + { "pxafb", pxafb_init, pxafb_setup }, +#endif #ifdef CONFIG_FB_SUN3 { "sun3fb", sun3fb_init, sun3fb_setup }, #endif @@ -1013,7 +1023,7 @@ struct fb_con2fbmap con2fb; #endif struct fb_cmap cmap; - int i, rc; + int i; if (!fb) return -ENODEV; @@ -1055,9 +1065,9 @@ return 0; case FBIO_CURSOR: acquire_console_sem(); - rc = fb_cursor(info, (struct fb_cursor *) arg); + i = fb_cursor(info, (struct fb_cursor *) arg); release_console_sem(); - return rc; + return i; #ifdef CONFIG_FRAMEBUFFER_CONSOLE case FBIOGET_CON2FBMAP: if (copy_from_user(&con2fb, (void *)arg, sizeof(con2fb))) @@ -1178,8 +1188,7 @@ if (boot_cpu_data.x86 > 3) pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; #elif defined(__mips__) - pgprot_val(vma->vm_page_prot) &= ~_CACHE_MASK; - pgprot_val(vma->vm_page_prot) |= _CACHE_UNCACHED; + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); #elif defined(__hppa__) pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; #elif defined(__ia64__) || defined(__arm__) || defined(__sh__) @@ -1286,6 +1295,7 @@ fb_info->pixmap.size = FBPIXMAPSIZE; fb_info->pixmap.buf_align = 1; fb_info->pixmap.scan_align = 1; + fb_info->pixmap.access_align = 4; fb_info->pixmap.flags = FB_PIXMAP_DEFAULT; } } @@ -1301,6 +1311,7 @@ fb_info->sprite.size = FBPIXMAPSIZE; fb_info->sprite.buf_align = 1; fb_info->sprite.scan_align = 1; + fb_info->sprite.access_align = 4; fb_info->sprite.flags = FB_PIXMAP_DEFAULT; } } diff -Nru a/drivers/video/gbefb.c b/drivers/video/gbefb.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/video/gbefb.c Tue May 18 23:38:09 2004 @@ -0,0 +1,1200 @@ +/* + * SGI GBE frame buffer driver + * + * Copyright (C) 1999 Silicon Graphics, Inc. - Jeffrey Newquist + * Copyright (C) 2002 Vivien Chappelier + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive for + * more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_X86 +#include +#endif +#ifdef CONFIG_MIPS +#include +#endif +#include +#include +#include + +#include